diff --git a/.gitignore b/.gitignore
index 89a2b2fa09..cc8a99c69f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -82,6 +82,7 @@ test/thirdparty/jasmine-reporters
/src/thirdparty/bugsnag-performance.min.js.map
/src/thirdparty/no-minify/
/src/thirdparty/xterm
+/src/thirdparty/cspell-dicts
# ignore files copied from node_modules to src/thirdparty
# https://github.com/phcode-dev/phoenix/issues/10
diff --git a/docs/API-Reference/command/Commands.md b/docs/API-Reference/command/Commands.md
index 08e2feb9ff..43dc124fa8 100644
--- a/docs/API-Reference/command/Commands.md
+++ b/docs/API-Reference/command/Commands.md
@@ -554,6 +554,18 @@ Opens the terminal panel
## VIEW\_ENABLE\_AI
Toggles whether AI features are enabled
+**Kind**: global variable
+
+
+## VIEW\_TOGGLE\_SPELL\_CHECK
+Toggles the spell checker
+
+**Kind**: global variable
+
+
+## VIEW\_TOGGLE\_SPELLING\_PANEL
+Toggles the spelling panel visibility
+
**Kind**: global variable
diff --git a/docs/API-Reference/features/TaskManager.md b/docs/API-Reference/features/TaskManager.md
index d07490a63a..9d13cf300d 100644
--- a/docs/API-Reference/features/TaskManager.md
+++ b/docs/API-Reference/features/TaskManager.md
@@ -39,6 +39,7 @@ like `showStopIcon`, `hideStopIcon`, etc.
| [options.onRetryClick] | function | | Callback function triggered when the retry button is clicked. |
| [options.onSelect] | function | | Callback function triggered when the task is selected from the dropdown. |
| [options.progressPercent] | number | | Initial progress percentage of the task. |
+| [options.hideProgressBar] | boolean | | Hide progress for tasks waiting on a user action. |
| [options.noSpinnerNotification] | boolean | | If set to true, will not show the task spinners for this task. This can be used for silent background tasks where user attention is not needed. |
**Example**
diff --git a/docs/API-Reference/utils/DragAndDrop.md b/docs/API-Reference/utils/DragAndDrop.md
index 5800006e76..b1caeda9b8 100644
--- a/docs/API-Reference/utils/DragAndDrop.md
+++ b/docs/API-Reference/utils/DragAndDrop.md
@@ -18,7 +18,8 @@ Returns true if the drag and drop items contains valid drop objects.
## openDroppedFiles(paths) ⇒ Promise
-Open dropped files
+Open dropped files in order so the last file becomes active, regardless of load times.
+Continue processing the remaining paths if an earlier file cannot be opened.
**Kind**: global function
**Returns**: Promise - Promise that is resolved if all files are opened, or rejected
diff --git a/gulpfile.js/index.js b/gulpfile.js/index.js
index b4109d3943..aa96dfa440 100644
--- a/gulpfile.js/index.js
+++ b/gulpfile.js/index.js
@@ -457,6 +457,7 @@ const ALLOWED_EXTENSIONS_TO_CACHE = ["js", "html", "htm", "xml", "xhtml", "mjs",
"txt", "otf",
"json", "config",
"zip",
+ "gz", "trie",
"png", "svg", "jpg", "jpeg", "gif", "ico", "webp",
"mustache", "md", "markdown"];
const DISALLOWED_EXTENSIONS_TO_CACHE = ["map", "nuspec", "partial", "pre", "post",
diff --git a/gulpfile.js/thirdparty-lib-copy.js b/gulpfile.js/thirdparty-lib-copy.js
index cb1ce162a8..293cecd06a 100644
--- a/gulpfile.js/thirdparty-lib-copy.js
+++ b/gulpfile.js/thirdparty-lib-copy.js
@@ -102,6 +102,89 @@ function _getConfigJSON() {
return JSON.parse(fs.readFileSync(configPath, "utf8"));
}
+
+// cspell dictionaries for the Phoenix Pro spell checker, copied to src/thirdparty/cspell-dicts//
+const CSPELL_DICTIONARIES = {
+ "en_US": ["node_modules/@cspell/dict-en_us/en_US.trie.gz"],
+ "en_GB": ["node_modules/@cspell/dict-en-gb/en_GB.trie.gz"],
+ "software-terms": [
+ "node_modules/@cspell/dict-software-terms/dict/softwareTerms.txt.gz",
+ "node_modules/@cspell/dict-software-terms/dict/software-tools.txt",
+ "node_modules/@cspell/dict-software-terms/dict/networkingTerms.txt",
+ "node_modules/@cspell/dict-software-terms/dict/webServices.txt",
+ "node_modules/@cspell/dict-software-terms/dict/computing-acronyms.txt",
+ "node_modules/@cspell/dict-software-terms/dict/coding-compound-terms.txt"
+ ],
+ "companies": ["node_modules/@cspell/dict-companies/dict/companies.txt"],
+ "fonts": ["node_modules/@cspell/dict-fonts/dict/fonts.txt"],
+ "filetypes": ["node_modules/@cspell/dict-filetypes/filetypes.txt.gz"],
+ "fullstack": ["node_modules/@cspell/dict-fullstack/dict/fullstack.txt"],
+ "lorem-ipsum": ["node_modules/@cspell/dict-lorem-ipsum/dict/lorem.txt"],
+ "html": ["node_modules/@cspell/dict-html/dict/html.txt.gz"],
+ "html-symbol-entities": ["node_modules/@cspell/dict-html-symbol-entities/dict/entities.txt.gz"],
+ "css": ["node_modules/@cspell/dict-css/dict/css.txt"],
+ "typescript": ["node_modules/@cspell/dict-typescript/dict/typescript.txt"],
+ "node": ["node_modules/@cspell/dict-node/dict/node.txt"],
+ "npm": ["node_modules/@cspell/dict-npm/dict/npm.txt"],
+ "git": ["node_modules/@cspell/dict-git/dict/git-terms.txt"],
+ "markdown": ["node_modules/@cspell/dict-markdown/markdown.txt.gz"],
+ "python": [
+ "node_modules/@cspell/dict-python/dict/python.txt",
+ "node_modules/@cspell/dict-python/dict/python-common.txt"
+ ],
+ "java": ["node_modules/@cspell/dict-java/dict/java.trie"],
+ "php": ["node_modules/@cspell/dict-php/dict/php.txt"],
+ "cpp": [
+ "node_modules/@cspell/dict-cpp/dict/cpp.txt.gz",
+ "node_modules/@cspell/dict-cpp/dict/cpp-refined.txt.gz",
+ "node_modules/@cspell/dict-cpp/dict/cpp-legacy.txt.gz",
+ "node_modules/@cspell/dict-cpp/dict/cpp-compound-words.txt.gz"
+ ],
+ "golang": ["node_modules/@cspell/dict-golang/dict/go.txt"],
+ "rust": [
+ "node_modules/@cspell/dict-rust/dict/rust.txt.gz",
+ "node_modules/@cspell/dict-rust/dict/crates.txt.gz"
+ ],
+ "csharp": ["node_modules/@cspell/dict-csharp/dict/csharp.txt.gz"],
+ "shell": ["node_modules/@cspell/dict-shell/dict/shell-all-words.txt"],
+ "sql": ["node_modules/@cspell/dict-sql/sql.txt.gz"],
+ "docker": ["node_modules/@cspell/dict-docker/dict/docker-words.txt.gz"],
+ "ruby": [
+ "node_modules/@cspell/dict-ruby/dict/ruby.txt",
+ "node_modules/@cspell/dict-ruby/dict/gems.txt"
+ ]
+};
+
+function _copyCSpellDictionaries() {
+ return new Promise((resolve) => {
+ const destRoot = "src/thirdparty/cspell-dicts";
+ const licenceChunks = [];
+ const seenPackages = new Set();
+ fs.rmSync(destRoot, { recursive: true, force: true });
+ for (const [id, files] of Object.entries(CSPELL_DICTIONARIES)) {
+ const destDir = path.join(destRoot, id);
+ fs.mkdirSync(destDir, { recursive: true });
+ for (const file of files) {
+ console.log(`Copying cspell dictionary ${file} to ${destDir}`);
+ fs.copyFileSync(file, path.join(destDir, path.basename(file)));
+ const packageDir = file.split("/").slice(0, 3).join("/");
+ if (seenPackages.has(packageDir)) {
+ continue;
+ }
+ seenPackages.add(packageDir);
+ const packageJSON = JSON.parse(fs.readFileSync(path.join(packageDir, "package.json"), "utf8"));
+ const licenceFile = ["LICENSE", "LICENSE.md", "COPYING"].map(name => path.join(packageDir, name))
+ .find(candidate => fs.existsSync(candidate));
+ const licenceText = licenceFile ? fs.readFileSync(licenceFile, "utf8") : "";
+ licenceChunks.push(`## ${packageJSON.name} ${packageJSON.version}\n\n${licenceText.trim()}\n`);
+ }
+ }
+ fs.writeFileSync("src/thirdparty/licences/cspell-dictionaries.markdown",
+ `# cspell dictionaries\n\n${licenceChunks.join("\n")}`);
+ resolve();
+ });
+}
+
/**
* Add thirdparty libs copied to gitignore except the licence file.
*/
@@ -255,6 +338,13 @@ let copyThirdPartyLibs = series(
copyLicence.bind(copyLicence, 'node_modules/jasmine-reporters/LICENSE', 'jasmine-reporters'),
// lmdb
copyLicence.bind(copyLicence, 'node_modules/lmdb/LICENSE', 'lmdb'),
+ // cspell trie engine + fflate (gzip) used by the Phoenix Pro spell checker worker. ES modules, so no-minify.
+ renameFile.bind(renameFile, 'node_modules/cspell-trie-lib/dist/index.js', 'cspell-trie-lib.js',
+ 'src/thirdparty/no-minify/cspell'),
+ copyLicence.bind(copyLicence, 'node_modules/cspell-trie-lib/LICENSE', 'cspell-trie-lib'),
+ renameFile.bind(renameFile, 'node_modules/fflate/esm/browser.js', 'fflate.js', 'src/thirdparty/no-minify/cspell'),
+ copyLicence.bind(copyLicence, 'node_modules/fflate/LICENSE', 'fflate'),
+ _copyCSpellDictionaries,
// xterm.js terminal emulator (@xterm/* scoped packages, v6)
copyFiles.bind(copyFiles, ['node_modules/@xterm/xterm/lib/xterm.js',
'node_modules/@xterm/xterm/lib/xterm.js.map'], 'src/thirdparty/xterm'),
diff --git a/package-lock.json b/package-lock.json
index b4e819d156..5ce46a3391 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,15 +1,42 @@
{
"name": "phoenix",
- "version": "5.5.3-0",
+ "version": "5.5.6-0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "phoenix",
- "version": "5.5.3-0",
+ "version": "5.5.6-0",
"hasInstallScript": true,
"dependencies": {
"@bugsnag/js": "^7.18.0",
+ "@cspell/dict-companies": "^3.2.13",
+ "@cspell/dict-cpp": "^7.2.0",
+ "@cspell/dict-csharp": "^4.0.8",
+ "@cspell/dict-css": "^4.1.2",
+ "@cspell/dict-docker": "^1.1.17",
+ "@cspell/dict-en_us": "^4.4.43",
+ "@cspell/dict-en-gb": "^5.0.38",
+ "@cspell/dict-filetypes": "^3.0.18",
+ "@cspell/dict-fonts": "^4.0.6",
+ "@cspell/dict-fullstack": "^3.2.9",
+ "@cspell/dict-git": "^3.1.1",
+ "@cspell/dict-golang": "^6.0.29",
+ "@cspell/dict-html": "^4.0.16",
+ "@cspell/dict-html-symbol-entities": "^4.0.5",
+ "@cspell/dict-java": "^5.0.12",
+ "@cspell/dict-lorem-ipsum": "^4.0.5",
+ "@cspell/dict-markdown": "^2.0.18",
+ "@cspell/dict-node": "^5.0.9",
+ "@cspell/dict-npm": "^5.2.55",
+ "@cspell/dict-php": "^4.1.3",
+ "@cspell/dict-python": "^4.5.2",
+ "@cspell/dict-ruby": "^5.1.4",
+ "@cspell/dict-rust": "^4.1.2",
+ "@cspell/dict-shell": "^1.2.0",
+ "@cspell/dict-software-terms": "^5.4.8",
+ "@cspell/dict-sql": "^2.2.1",
+ "@cspell/dict-typescript": "^3.2.3",
"@floating-ui/dom": "^0.5.4",
"@fortawesome/fontawesome-free": "^6.1.2",
"@highlightjs/cdn-assets": "^11.5.1",
@@ -27,8 +54,10 @@
"browser-mime": "^1.0.1",
"codemirror": "^5.65.16",
"cross-env": "^7.0.3",
+ "cspell-trie-lib": "^10.4.0",
"devicon": "^2.15.1",
"emmet": "^2.4.11",
+ "fflate": "^0.8.3",
"file-saver": "^2.0.5",
"idb-keyval": "^6.2.1",
"jshint": "^2.13.5",
@@ -591,6 +620,193 @@
"node": ">=v12"
}
},
+ "node_modules/@cspell/cspell-types": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-10.4.0.tgz",
+ "integrity": "sha512-LTOrZcDSHj5BkeNSvimuV3AMF7gWjxzXUdQ7zYT/h/57/5flHuE6NPKSXS69ty8vJM0WrVh35L5aDxnCPfDzXA==",
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=22.18.0"
+ }
+ },
+ "node_modules/@cspell/dict-companies": {
+ "version": "3.2.13",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.2.13.tgz",
+ "integrity": "sha512-mBJeYzCkiiWgNQxKg7zyQOpFPwcXO4IAzXGbOEFfcQ4Q0G5Fa7Kqd8z+gvnvSK7NPWKJaFmiApC6I0cka02qmQ==",
+ "license": "MIT"
+ },
+ "node_modules/@cspell/dict-cpp": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-7.2.0.tgz",
+ "integrity": "sha512-hxz+OyQKV96/Bk2JYGsDuSOheYA5gd8KybXnoZMMu/mhZPnwhPi+qiS0Kjc0gLNbXjJ6wbBuXIQWi1UWpQBU/g==",
+ "license": "MIT"
+ },
+ "node_modules/@cspell/dict-csharp": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-4.0.8.tgz",
+ "integrity": "sha512-qmk45pKFHSxckl5mSlbHxmDitSsGMlk/XzFgt7emeTJWLNSTUK//MbYAkBNRtfzB4uD7pAFiKgpKgtJrTMRnrQ==",
+ "license": "MIT"
+ },
+ "node_modules/@cspell/dict-css": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.1.2.tgz",
+ "integrity": "sha512-+ylGoKdwZ2sVOCOnU2Eq5wDZx+RaVX3HoKyNHGGsFvhSw6IidQ6tH/mAPKBDofViHJoWCPNlklE0lTr6MDG3QA==",
+ "license": "MIT"
+ },
+ "node_modules/@cspell/dict-data-science": {
+ "version": "2.0.16",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-data-science/-/dict-data-science-2.0.16.tgz",
+ "integrity": "sha512-M72mxv5asuAnORurz4iXRJ+Tw9XBq6eu7D2Ne7biP0Z1RciKGNxXWu9JycA/KlVvK1hAlKj/fANlXhuEWpXKFg==",
+ "license": "MIT"
+ },
+ "node_modules/@cspell/dict-docker": {
+ "version": "1.1.17",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-docker/-/dict-docker-1.1.17.tgz",
+ "integrity": "sha512-OcnVTIpHIYYKhztNTyK8ShAnXTfnqs43hVH6p0py0wlcwRIXe5uj4f12n7zPf2CeBI7JAlPjEsV0Rlf4hbz/xQ==",
+ "license": "MIT"
+ },
+ "node_modules/@cspell/dict-en_us": {
+ "version": "4.4.43",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.4.43.tgz",
+ "integrity": "sha512-RK0zfFXSPi0G/zmV9YgUhS2xw9eTV/8DtQ+ouLIiRZ8ejWRt2zhAonu5di+qmIhzhQ62fg7d3tMz3WwRy82yJA==",
+ "license": "MIT"
+ },
+ "node_modules/@cspell/dict-en-gb": {
+ "version": "5.0.38",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-en-gb/-/dict-en-gb-5.0.38.tgz",
+ "integrity": "sha512-xLuoDSM5tzEF2fpQWNE4QXxZCNdjkZbdRQ7xTjrjqJGHwOjNlSLvZoh/GYQsQ1ROLe/jXPENbQn5M5DhjrSaDg==",
+ "license": "LGPL-3.0"
+ },
+ "node_modules/@cspell/dict-filetypes": {
+ "version": "3.0.18",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-filetypes/-/dict-filetypes-3.0.18.tgz",
+ "integrity": "sha512-yU7RKD/x1IWmDLzWeiItMwgV+6bUcU/af23uS0+uGiFUbsY1qWV/D4rxlAAO6Z7no3J2z8aZOkYIOvUrJq0Rcw==",
+ "license": "MIT"
+ },
+ "node_modules/@cspell/dict-fonts": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-fonts/-/dict-fonts-4.0.6.tgz",
+ "integrity": "sha512-aR/0csY01dNb0A1tw/UmN9rKgHruUxsYsvXu6YlSBJFu60s26SKr/k1o4LavpHTQ+lznlYMqAvuxGkE4Flliqw==",
+ "license": "MIT"
+ },
+ "node_modules/@cspell/dict-fullstack": {
+ "version": "3.2.9",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-3.2.9.tgz",
+ "integrity": "sha512-diZX+usW5aZ4/b2T0QM/H/Wl9aNMbdODa1Jq0ReBr/jazmNeWjd+PyqeVgzd1joEaHY+SAnjrf/i9CwKd2ZtWQ==",
+ "license": "MIT"
+ },
+ "node_modules/@cspell/dict-git": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-git/-/dict-git-3.1.1.tgz",
+ "integrity": "sha512-XvuGVYj9YEu4EzntqyhH8XlTRyy57C6j8oxkIbUQfR2UYzxZGAP77XHl7qY7eC/40r/haDwnBaccyFR6BRmUCg==",
+ "license": "MIT"
+ },
+ "node_modules/@cspell/dict-golang": {
+ "version": "6.0.29",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-6.0.29.tgz",
+ "integrity": "sha512-EZCgfxrr5lPnYQLmSvB6YtpfoDFt2KKxAD4ppq2xGSIgDFXAF7Mv4doiXIFUQaynCBIEfAMl3f/uDfrIUo4fyQ==",
+ "license": "MIT"
+ },
+ "node_modules/@cspell/dict-html": {
+ "version": "4.0.16",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.16.tgz",
+ "integrity": "sha512-9B6/Cpb5YVcYgsEAlKudun1yd4ONllYS/ZibKLYea2apPR+l2vQdARnPrP9kTqa7NUNfRKl7m9Fb6k9rjimnow==",
+ "license": "MIT"
+ },
+ "node_modules/@cspell/dict-html-symbol-entities": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.5.tgz",
+ "integrity": "sha512-429alTD4cE0FIwpMucvSN35Ld87HCyuM8mF731KU5Rm4Je2SG6hmVx7nkBsLyrmH3sQukTcr1GaiZsiEg8svPA==",
+ "license": "MIT"
+ },
+ "node_modules/@cspell/dict-java": {
+ "version": "5.0.12",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-java/-/dict-java-5.0.12.tgz",
+ "integrity": "sha512-qPSNhTcl7LGJ5Qp6VN71H8zqvRQK04S08T67knMq9hTA8U7G1sTKzLmBaDOFhq17vNX/+rT+rbRYp+B5Nwza1A==",
+ "license": "MIT"
+ },
+ "node_modules/@cspell/dict-lorem-ipsum": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-lorem-ipsum/-/dict-lorem-ipsum-4.0.5.tgz",
+ "integrity": "sha512-9a4TJYRcPWPBKkQAJ/whCu4uCAEgv/O2xAaZEI0n4y1/l18Yyx8pBKoIX5QuVXjjmKEkK7hi5SxyIsH7pFEK9Q==",
+ "license": "MIT"
+ },
+ "node_modules/@cspell/dict-markdown": {
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-markdown/-/dict-markdown-2.0.18.tgz",
+ "integrity": "sha512-KLRSwVrwKDz4n7bl2XQjzvaBZbGgx5QKkP5Ok1b24xaO3TpXsLhAbAn1mItvFlI2tF6Rkt83iYjQcYppywuf5Q==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@cspell/dict-css": "^4.1.2",
+ "@cspell/dict-html": "^4.0.16",
+ "@cspell/dict-html-symbol-entities": "^4.0.5",
+ "@cspell/dict-typescript": "^3.2.3"
+ }
+ },
+ "node_modules/@cspell/dict-node": {
+ "version": "5.0.9",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-node/-/dict-node-5.0.9.tgz",
+ "integrity": "sha512-hO+ga+uYZ/WA4OtiMEyKt5rDUlUyu3nXMf8KVEeqq2msYvAPdldKBGH7lGONg6R/rPhv53Rb+0Y1SLdoK1+7wQ==",
+ "license": "MIT"
+ },
+ "node_modules/@cspell/dict-npm": {
+ "version": "5.2.55",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.55.tgz",
+ "integrity": "sha512-5xD2h3kn9ZRVbA6JFfO4VQu8VXwXsJQf7mpn099LgfaL66JnXE+wzR5dysipsren3Apdb3HlUzVqRTtnQMoVGQ==",
+ "license": "MIT"
+ },
+ "node_modules/@cspell/dict-php": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-4.1.3.tgz",
+ "integrity": "sha512-41oKzl7rLVrrVZA/Gs0ESnP6KliEX7c+IwaaNmOL3PAoHasFDVEmIFeENIzuDdM12UcHT+MlLkAm3Qw/lS/ERA==",
+ "license": "MIT"
+ },
+ "node_modules/@cspell/dict-python": {
+ "version": "4.5.2",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.5.2.tgz",
+ "integrity": "sha512-CFcTDGN/ycn45WXC5ZZ06pG09WbGKMpPm1rkMuqMP98/jwjw3iiK8c0izWRd8x027n1rOZ9kJ8f9Sd+bQ22HJg==",
+ "license": "MIT",
+ "dependencies": {
+ "@cspell/dict-data-science": "^2.0.16"
+ }
+ },
+ "node_modules/@cspell/dict-ruby": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-5.1.4.tgz",
+ "integrity": "sha512-Slw1dLY/pW5liJ5Fle+MIPphIdleZkIM6STDoXCN7sy298GfbfT34sJTcSZcXzZJVXiCEAvlLp+s1YNr6DuWNg==",
+ "license": "MIT"
+ },
+ "node_modules/@cspell/dict-rust": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.1.2.tgz",
+ "integrity": "sha512-O1FHrumYcO+HZti3dHfBPUdnDFkI+nbYK3pxYmiM1sr+G0ebOd6qchmswS0Wsc6ZdEVNiPYJY/gZQR6jfW3uOg==",
+ "license": "MIT"
+ },
+ "node_modules/@cspell/dict-shell": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-shell/-/dict-shell-1.2.0.tgz",
+ "integrity": "sha512-PVctvT22lJ49niMiakO8xieY7ELCAzjSqhejWR7bAMb5AZ9F4WDEs+XdGMnoVHWeXq7K5rcepLPmEJb+37zzIw==",
+ "license": "MIT"
+ },
+ "node_modules/@cspell/dict-software-terms": {
+ "version": "5.4.8",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-5.4.8.tgz",
+ "integrity": "sha512-7Fv/jgRghpcEcvpmrRR54gPp1l85pPLmlMua74hjhMJoWklAp905V742XR6u5HwvGRH7aBTW9euNsJULav1E6A==",
+ "license": "MIT"
+ },
+ "node_modules/@cspell/dict-sql": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-sql/-/dict-sql-2.2.1.tgz",
+ "integrity": "sha512-qDHF8MpAYCf4pWU8NKbnVGzkoxMNrFqBHyG/dgrlic5EQiKANCLELYtGlX5auIMDLmTf1inA0eNtv74tyRJ/vg==",
+ "license": "MIT"
+ },
+ "node_modules/@cspell/dict-typescript": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.2.3.tgz",
+ "integrity": "sha512-zXh1wYsNljQZfWWdSPYwQhpwiuW0KPW1dSd8idjMRvSD0aSvWWHoWlrMsmZeRl4qM4QCEAjua8+cjflm41cQBg==",
+ "license": "MIT"
+ },
"node_modules/@cspotcode/source-map-support": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
@@ -3679,6 +3895,18 @@
"node": ">= 8"
}
},
+ "node_modules/cspell-trie-lib": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-10.4.0.tgz",
+ "integrity": "sha512-3APfmYOrYEcoiDjupm3JsxLWvqa6IbJ76CqUTuIgXQH2EK0nOJ5SRKSTNP6AplDtalCs0o6VllbiRX6S81g8yw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=22.18.0"
+ },
+ "peerDependencies": {
+ "@cspell/cspell-types": "10.4.0"
+ }
+ },
"node_modules/css": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz",
@@ -5004,6 +5232,12 @@
"node": ">=0.4.0"
}
},
+ "node_modules/fflate": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.3.tgz",
+ "integrity": "sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==",
+ "license": "MIT"
+ },
"node_modules/file-entry-cache": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
@@ -13706,6 +13940,156 @@
"chalk": "^4.0.0"
}
},
+ "@cspell/cspell-types": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-10.4.0.tgz",
+ "integrity": "sha512-LTOrZcDSHj5BkeNSvimuV3AMF7gWjxzXUdQ7zYT/h/57/5flHuE6NPKSXS69ty8vJM0WrVh35L5aDxnCPfDzXA==",
+ "peer": true
+ },
+ "@cspell/dict-companies": {
+ "version": "3.2.13",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.2.13.tgz",
+ "integrity": "sha512-mBJeYzCkiiWgNQxKg7zyQOpFPwcXO4IAzXGbOEFfcQ4Q0G5Fa7Kqd8z+gvnvSK7NPWKJaFmiApC6I0cka02qmQ=="
+ },
+ "@cspell/dict-cpp": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-7.2.0.tgz",
+ "integrity": "sha512-hxz+OyQKV96/Bk2JYGsDuSOheYA5gd8KybXnoZMMu/mhZPnwhPi+qiS0Kjc0gLNbXjJ6wbBuXIQWi1UWpQBU/g=="
+ },
+ "@cspell/dict-csharp": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-4.0.8.tgz",
+ "integrity": "sha512-qmk45pKFHSxckl5mSlbHxmDitSsGMlk/XzFgt7emeTJWLNSTUK//MbYAkBNRtfzB4uD7pAFiKgpKgtJrTMRnrQ=="
+ },
+ "@cspell/dict-css": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.1.2.tgz",
+ "integrity": "sha512-+ylGoKdwZ2sVOCOnU2Eq5wDZx+RaVX3HoKyNHGGsFvhSw6IidQ6tH/mAPKBDofViHJoWCPNlklE0lTr6MDG3QA=="
+ },
+ "@cspell/dict-data-science": {
+ "version": "2.0.16",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-data-science/-/dict-data-science-2.0.16.tgz",
+ "integrity": "sha512-M72mxv5asuAnORurz4iXRJ+Tw9XBq6eu7D2Ne7biP0Z1RciKGNxXWu9JycA/KlVvK1hAlKj/fANlXhuEWpXKFg=="
+ },
+ "@cspell/dict-docker": {
+ "version": "1.1.17",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-docker/-/dict-docker-1.1.17.tgz",
+ "integrity": "sha512-OcnVTIpHIYYKhztNTyK8ShAnXTfnqs43hVH6p0py0wlcwRIXe5uj4f12n7zPf2CeBI7JAlPjEsV0Rlf4hbz/xQ=="
+ },
+ "@cspell/dict-en_us": {
+ "version": "4.4.43",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.4.43.tgz",
+ "integrity": "sha512-RK0zfFXSPi0G/zmV9YgUhS2xw9eTV/8DtQ+ouLIiRZ8ejWRt2zhAonu5di+qmIhzhQ62fg7d3tMz3WwRy82yJA=="
+ },
+ "@cspell/dict-en-gb": {
+ "version": "5.0.38",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-en-gb/-/dict-en-gb-5.0.38.tgz",
+ "integrity": "sha512-xLuoDSM5tzEF2fpQWNE4QXxZCNdjkZbdRQ7xTjrjqJGHwOjNlSLvZoh/GYQsQ1ROLe/jXPENbQn5M5DhjrSaDg=="
+ },
+ "@cspell/dict-filetypes": {
+ "version": "3.0.18",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-filetypes/-/dict-filetypes-3.0.18.tgz",
+ "integrity": "sha512-yU7RKD/x1IWmDLzWeiItMwgV+6bUcU/af23uS0+uGiFUbsY1qWV/D4rxlAAO6Z7no3J2z8aZOkYIOvUrJq0Rcw=="
+ },
+ "@cspell/dict-fonts": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-fonts/-/dict-fonts-4.0.6.tgz",
+ "integrity": "sha512-aR/0csY01dNb0A1tw/UmN9rKgHruUxsYsvXu6YlSBJFu60s26SKr/k1o4LavpHTQ+lznlYMqAvuxGkE4Flliqw=="
+ },
+ "@cspell/dict-fullstack": {
+ "version": "3.2.9",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-3.2.9.tgz",
+ "integrity": "sha512-diZX+usW5aZ4/b2T0QM/H/Wl9aNMbdODa1Jq0ReBr/jazmNeWjd+PyqeVgzd1joEaHY+SAnjrf/i9CwKd2ZtWQ=="
+ },
+ "@cspell/dict-git": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-git/-/dict-git-3.1.1.tgz",
+ "integrity": "sha512-XvuGVYj9YEu4EzntqyhH8XlTRyy57C6j8oxkIbUQfR2UYzxZGAP77XHl7qY7eC/40r/haDwnBaccyFR6BRmUCg=="
+ },
+ "@cspell/dict-golang": {
+ "version": "6.0.29",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-6.0.29.tgz",
+ "integrity": "sha512-EZCgfxrr5lPnYQLmSvB6YtpfoDFt2KKxAD4ppq2xGSIgDFXAF7Mv4doiXIFUQaynCBIEfAMl3f/uDfrIUo4fyQ=="
+ },
+ "@cspell/dict-html": {
+ "version": "4.0.16",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.16.tgz",
+ "integrity": "sha512-9B6/Cpb5YVcYgsEAlKudun1yd4ONllYS/ZibKLYea2apPR+l2vQdARnPrP9kTqa7NUNfRKl7m9Fb6k9rjimnow=="
+ },
+ "@cspell/dict-html-symbol-entities": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.5.tgz",
+ "integrity": "sha512-429alTD4cE0FIwpMucvSN35Ld87HCyuM8mF731KU5Rm4Je2SG6hmVx7nkBsLyrmH3sQukTcr1GaiZsiEg8svPA=="
+ },
+ "@cspell/dict-java": {
+ "version": "5.0.12",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-java/-/dict-java-5.0.12.tgz",
+ "integrity": "sha512-qPSNhTcl7LGJ5Qp6VN71H8zqvRQK04S08T67knMq9hTA8U7G1sTKzLmBaDOFhq17vNX/+rT+rbRYp+B5Nwza1A=="
+ },
+ "@cspell/dict-lorem-ipsum": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-lorem-ipsum/-/dict-lorem-ipsum-4.0.5.tgz",
+ "integrity": "sha512-9a4TJYRcPWPBKkQAJ/whCu4uCAEgv/O2xAaZEI0n4y1/l18Yyx8pBKoIX5QuVXjjmKEkK7hi5SxyIsH7pFEK9Q=="
+ },
+ "@cspell/dict-markdown": {
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-markdown/-/dict-markdown-2.0.18.tgz",
+ "integrity": "sha512-KLRSwVrwKDz4n7bl2XQjzvaBZbGgx5QKkP5Ok1b24xaO3TpXsLhAbAn1mItvFlI2tF6Rkt83iYjQcYppywuf5Q==",
+ "requires": {}
+ },
+ "@cspell/dict-node": {
+ "version": "5.0.9",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-node/-/dict-node-5.0.9.tgz",
+ "integrity": "sha512-hO+ga+uYZ/WA4OtiMEyKt5rDUlUyu3nXMf8KVEeqq2msYvAPdldKBGH7lGONg6R/rPhv53Rb+0Y1SLdoK1+7wQ=="
+ },
+ "@cspell/dict-npm": {
+ "version": "5.2.55",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.55.tgz",
+ "integrity": "sha512-5xD2h3kn9ZRVbA6JFfO4VQu8VXwXsJQf7mpn099LgfaL66JnXE+wzR5dysipsren3Apdb3HlUzVqRTtnQMoVGQ=="
+ },
+ "@cspell/dict-php": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-4.1.3.tgz",
+ "integrity": "sha512-41oKzl7rLVrrVZA/Gs0ESnP6KliEX7c+IwaaNmOL3PAoHasFDVEmIFeENIzuDdM12UcHT+MlLkAm3Qw/lS/ERA=="
+ },
+ "@cspell/dict-python": {
+ "version": "4.5.2",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.5.2.tgz",
+ "integrity": "sha512-CFcTDGN/ycn45WXC5ZZ06pG09WbGKMpPm1rkMuqMP98/jwjw3iiK8c0izWRd8x027n1rOZ9kJ8f9Sd+bQ22HJg==",
+ "requires": {
+ "@cspell/dict-data-science": "^2.0.16"
+ }
+ },
+ "@cspell/dict-ruby": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-5.1.4.tgz",
+ "integrity": "sha512-Slw1dLY/pW5liJ5Fle+MIPphIdleZkIM6STDoXCN7sy298GfbfT34sJTcSZcXzZJVXiCEAvlLp+s1YNr6DuWNg=="
+ },
+ "@cspell/dict-rust": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.1.2.tgz",
+ "integrity": "sha512-O1FHrumYcO+HZti3dHfBPUdnDFkI+nbYK3pxYmiM1sr+G0ebOd6qchmswS0Wsc6ZdEVNiPYJY/gZQR6jfW3uOg=="
+ },
+ "@cspell/dict-shell": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-shell/-/dict-shell-1.2.0.tgz",
+ "integrity": "sha512-PVctvT22lJ49niMiakO8xieY7ELCAzjSqhejWR7bAMb5AZ9F4WDEs+XdGMnoVHWeXq7K5rcepLPmEJb+37zzIw=="
+ },
+ "@cspell/dict-software-terms": {
+ "version": "5.4.8",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-5.4.8.tgz",
+ "integrity": "sha512-7Fv/jgRghpcEcvpmrRR54gPp1l85pPLmlMua74hjhMJoWklAp905V742XR6u5HwvGRH7aBTW9euNsJULav1E6A=="
+ },
+ "@cspell/dict-sql": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-sql/-/dict-sql-2.2.1.tgz",
+ "integrity": "sha512-qDHF8MpAYCf4pWU8NKbnVGzkoxMNrFqBHyG/dgrlic5EQiKANCLELYtGlX5auIMDLmTf1inA0eNtv74tyRJ/vg=="
+ },
+ "@cspell/dict-typescript": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.2.3.tgz",
+ "integrity": "sha512-zXh1wYsNljQZfWWdSPYwQhpwiuW0KPW1dSd8idjMRvSD0aSvWWHoWlrMsmZeRl4qM4QCEAjua8+cjflm41cQBg=="
+ },
"@cspotcode/source-map-support": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
@@ -16101,6 +16485,12 @@
"which": "^2.0.1"
}
},
+ "cspell-trie-lib": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-10.4.0.tgz",
+ "integrity": "sha512-3APfmYOrYEcoiDjupm3JsxLWvqa6IbJ76CqUTuIgXQH2EK0nOJ5SRKSTNP6AplDtalCs0o6VllbiRX6S81g8yw==",
+ "requires": {}
+ },
"css": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz",
@@ -17190,6 +17580,11 @@
"websocket-driver": ">=0.3.6"
}
},
+ "fflate": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.3.tgz",
+ "integrity": "sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA=="
+ },
"file-entry-cache": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
diff --git a/package.json b/package.json
index 9822e75b51..d8ddc2dfc0 100644
--- a/package.json
+++ b/package.json
@@ -95,6 +95,33 @@
],
"dependencies": {
"@bugsnag/js": "^7.18.0",
+ "@cspell/dict-companies": "^3.2.13",
+ "@cspell/dict-cpp": "^7.2.0",
+ "@cspell/dict-csharp": "^4.0.8",
+ "@cspell/dict-css": "^4.1.2",
+ "@cspell/dict-docker": "^1.1.17",
+ "@cspell/dict-en_us": "^4.4.43",
+ "@cspell/dict-en-gb": "^5.0.38",
+ "@cspell/dict-filetypes": "^3.0.18",
+ "@cspell/dict-fonts": "^4.0.6",
+ "@cspell/dict-fullstack": "^3.2.9",
+ "@cspell/dict-git": "^3.1.1",
+ "@cspell/dict-golang": "^6.0.29",
+ "@cspell/dict-html": "^4.0.16",
+ "@cspell/dict-html-symbol-entities": "^4.0.5",
+ "@cspell/dict-java": "^5.0.12",
+ "@cspell/dict-lorem-ipsum": "^4.0.5",
+ "@cspell/dict-markdown": "^2.0.18",
+ "@cspell/dict-node": "^5.0.9",
+ "@cspell/dict-npm": "^5.2.55",
+ "@cspell/dict-php": "^4.1.3",
+ "@cspell/dict-python": "^4.5.2",
+ "@cspell/dict-ruby": "^5.1.4",
+ "@cspell/dict-rust": "^4.1.2",
+ "@cspell/dict-shell": "^1.2.0",
+ "@cspell/dict-software-terms": "^5.4.8",
+ "@cspell/dict-sql": "^2.2.1",
+ "@cspell/dict-typescript": "^3.2.3",
"@floating-ui/dom": "^0.5.4",
"@fortawesome/fontawesome-free": "^6.1.2",
"@highlightjs/cdn-assets": "^11.5.1",
@@ -107,8 +134,10 @@
"browser-mime": "^1.0.1",
"codemirror": "^5.65.16",
"cross-env": "^7.0.3",
+ "cspell-trie-lib": "^10.4.0",
"devicon": "^2.15.1",
"emmet": "^2.4.11",
+ "fflate": "^0.8.3",
"file-saver": "^2.0.5",
"idb-keyval": "^6.2.1",
"jshint": "^2.13.5",
diff --git a/src-node/package-lock.json b/src-node/package-lock.json
index 2832561ed2..71533e2c4b 100644
--- a/src-node/package-lock.json
+++ b/src-node/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@phcode/node-core",
- "version": "5.5.5-0",
+ "version": "5.5.6-0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@phcode/node-core",
- "version": "5.5.5-0",
+ "version": "5.5.6-0",
"hasInstallScript": true,
"license": "GNU-AGPL3.0",
"dependencies": {
diff --git a/src/command/Commands.js b/src/command/Commands.js
index 6366ef6594..4d3b6085ff 100644
--- a/src/command/Commands.js
+++ b/src/command/Commands.js
@@ -309,6 +309,11 @@ define(function (require, exports, module) {
/** Toggles whether AI features are enabled */
exports.VIEW_ENABLE_AI = "view.enableAI"; // phoenix-pro aiEnabled.js _handleToggleEnableAI()
+ /** Toggles the spell checker */
+ exports.VIEW_TOGGLE_SPELL_CHECK = "view.toggleSpellCheck"; // phoenix-pro spell-check/main.js
+ /** Toggles the spelling panel visibility */
+ exports.VIEW_TOGGLE_SPELLING_PANEL = "view.toggleSpellingPanel"; // phoenix-pro spell-check/main.js
+
/** Toggles line numbers visibility */
exports.TOGGLE_LINE_NUMBERS = "view.toggleLineNumbers"; // EditorOptionHandlers.js _getToggler()
diff --git a/src/nls/root/strings.js b/src/nls/root/strings.js
index 455651f51e..94ab1c8470 100644
--- a/src/nls/root/strings.js
+++ b/src/nls/root/strings.js
@@ -1170,6 +1170,57 @@ define({
"NO_LINT_AVAILABLE": "No linter available for {0}",
"NOTHING_TO_LINT": "Nothing to lint",
"COPY_ERROR": "Copy problem",
+
+ // Spell check (Phoenix Pro)
+ "SPELL_CHECK_PANEL_TITLE": "Spelling",
+ "SPELL_CHECK_PANEL_TITLE_NONE": "No spelling issues - {0}",
+ "SPELL_CHECK_PANEL_TITLE_SINGLE": "1 Spelling Issue - {0}",
+ "SPELL_CHECK_PANEL_TITLE_MULTIPLE": "{0} Spelling Issues - {1}",
+ "SPELL_CHECK_STATUS_OK": "No spelling issues",
+ "SPELL_CHECK_STATUS_SINGLE": "1 spelling issue",
+ "SPELL_CHECK_STATUS_MULTIPLE": "{0} spelling issues",
+ "SPELL_CHECK_STATUS_CHECKING": "Checking spelling\u2026",
+ "SPELL_CHECK_STATUS_OFF": "Spell check is off",
+ "SPELL_CHECK_STATUS_OFF_LANGUAGE": "Spell check is off for {0} files",
+ "SPELL_CHECK_STATUS_PRO": "Spell check is available in Phoenix Pro",
+ "SPELL_CHECK_STATUS_NOT_AVAILABLE": "Spell check is not available for this file",
+ "SPELL_CHECK_STATUS_LARGE_FILE": "Large file: only the visible lines are spell checked",
+ "SPELL_CHECK_STATUS_ERROR": "Spell check could not load its dictionaries",
+ "SPELL_CHECK_STATUS_DISABLED_IN_FILE": "Spell check is disabled in this file by a cspell directive",
+ "SPELL_CHECK_PRO_MESSAGE": "Catch typos in comments, strings, Markdown and code names as you type, with one-click fixes and project dictionaries.",
+ "SPELL_CHECK_OFF_MESSAGE": "Spell check is turned off.",
+ "SPELL_CHECK_OFF_LANGUAGE_MESSAGE": "Spell check is turned off for {0} files.",
+ "SPELL_CHECK_TURN_ON": "Turn On",
+ "SPELL_CHECK_TURN_ON_LANGUAGE": "Turn On for {0}",
+ "SPELL_CHECK_NO_DOCUMENT_MESSAGE": "Open a text file to check its spelling.",
+ "SPELL_CHECK_NOT_AVAILABLE_MESSAGE": "Spell check is not available for this file type.",
+ "SPELL_CHECK_LOADING_MESSAGE": "Checking spelling\u2026",
+ "SPELL_CHECK_LARGE_FILE_MESSAGE": "This file is too large for a full spell check. The visible lines are still checked as you scroll.",
+ "SPELL_CHECK_ERROR_MESSAGE": "The spelling dictionaries could not be loaded. Check your connection and try again.",
+ "SPELL_CHECK_RETRY": "Try Again",
+ "SPELL_CHECK_NO_ISSUES_MESSAGE": "No spelling issues found - nice work!",
+ "SPELL_CHECK_DISABLED_IN_FILE_MESSAGE": "Spell check is disabled in this file by a cspell:disable directive.",
+ "SPELL_CHECK_UNKNOWN_WORD": "Unknown word",
+ "SPELL_CHECK_NO_SUGGESTIONS": "No suggestions",
+ "SPELL_CHECK_LOADING_SUGGESTIONS": "Looking up suggestions\u2026",
+ "SPELL_CHECK_ADD_TO_PROJECT": "Add to Project Dictionary",
+ "SPELL_CHECK_ADD_TO_USER": "Add to User Dictionary",
+ "SPELL_CHECK_IGNORE": "Ignore Word",
+ "SPELL_CHECK_ADD_TO_PROJECT_TOOLTIP": "Saves the word in this project's settings so everyone working on it shares it",
+ "SPELL_CHECK_ADD_TO_USER_TOOLTIP": "Saves the word in your personal dictionary for every project",
+ "SPELL_CHECK_IGNORE_TOOLTIP": "Ignores this word until {APP_NAME} restarts",
+ "SPELL_CHECK_REPLACE_WITH": "Replace with \u201c{0}\u201d",
+ "SPELL_CHECK_MORE_ISSUES": "\u2026and {0} more",
+ "SPELL_CHECK_SETTINGS": "Spell check settings",
+ "SPELL_CHECK_OPT_COMMENTS": "Check Comments",
+ "SPELL_CHECK_OPT_STRINGS": "Check Strings",
+ "SPELL_CHECK_OPT_IDENTIFIERS": "Check Code Names",
+ "SPELL_CHECK_OPT_LANGUAGE": "Check {0} Files",
+ "SPELL_CHECK_OPT_LOCALE_US": "English (US)",
+ "SPELL_CHECK_OPT_LOCALE_GB": "English (UK)",
+ "SPELL_CHECK_OPT_LOCALE_BOTH": "English (US and UK)",
+ "SPELL_CHECK_OPT_EDIT_PROJECT_WORDS": "Edit Project Dictionary\u2026",
+ "SPELL_CHECK_OPT_EDIT_USER_WORDS": "Edit User Dictionary\u2026",
"FIX": "Fix",
"CANNOT_FIX_TITLE": "Failed to Apply Fix",
"CANNOT_FIX_SOME_TITLE": "Failed to Apply Some Fixes",
@@ -1306,6 +1357,8 @@ define({
"CMD_TOGGLE_WORD_WRAP": "Word Wrap",
"CMD_VIEW_TOGGLE_INSPECTION": "Lint Files on Save",
"CMD_VIEW_TOGGLE_PROBLEMS": "Problems",
+ "CMD_VIEW_TOGGLE_SPELL_CHECK": "Spell Check",
+ "CMD_VIEW_TOGGLE_SPELLING_PANEL": "Spelling",
"CMD_VIEW_TERMINAL": "Terminal",
"CMD_VIEW_ENABLE_AI": "Enable AI",
"CMD_WORKINGSET_SORT_BY_ADDED": "Sort by Added",
@@ -2135,6 +2188,19 @@ define({
"DESCRIPTION_HIDE_FIRST": "true to show the first Indent Guide line else false.",
"DESCRIPTION_CSS_COLOR_PREVIEW": "true to display color previews in the gutter, else false.",
"DESCRIPTION_ENABLE_AI": "true to enable AI features, false to disable AI entirely.",
+ "DESCRIPTION_SPELL_CHECK_ENABLED": "true to check spelling in the editor (Phoenix Pro). Can be set per language.",
+ "DESCRIPTION_SPELL_CHECK_LOCALE": "Spelling dictionary to use.",
+ "DESCRIPTION_SPELL_CHECK_CHECK_COMMENTS": "true to spell check comments in code files.",
+ "DESCRIPTION_SPELL_CHECK_CHECK_STRINGS": "true to spell check string literals in code files.",
+ "DESCRIPTION_SPELL_CHECK_CHECK_IDENTIFIERS": "true to spell check variable, function and property names. Names are split on capital letters and underscores.",
+ "DESCRIPTION_SPELL_CHECK_MIN_WORD_LENGTH": "Words shorter than this are not spell checked.",
+ "DESCRIPTION_SPELL_CHECK_IGNORE_WORDS_WITH_DIGITS": "true to skip words that contain digits.",
+ "DESCRIPTION_SPELL_CHECK_WORDS": "Project dictionary: words to treat as correctly spelled. Set it in the project settings file to share it with everyone on the project.",
+ "DESCRIPTION_SPELL_CHECK_USER_WORDS": "Personal dictionary: words to treat as correctly spelled in every project.",
+ "DESCRIPTION_SPELL_CHECK_IGNORE_WORDS": "Words to ignore. Unlike words, these are never offered as suggestions.",
+ "DESCRIPTION_SPELL_CHECK_FLAG_WORDS": "Words to always mark as misspelled, even when a dictionary contains them.",
+ "DESCRIPTION_SPELL_CHECK_MAX_FILE_SIZE_KB": "Files larger than this size in KB only have their visible lines spell checked.",
+ "DESCRIPTION_SPELL_CHECK_USE_CSPELL_CONFIG": "true to also read words, ignored words, flagged words and the language from a cspell configuration file in the project root.",
// Emmet
"DESCRIPTION_EMMET": "true to enable Emmet, else false.",
diff --git a/src/styles/Extn-SpellCheck.less b/src/styles/Extn-SpellCheck.less
new file mode 100644
index 0000000000..7f651cf380
--- /dev/null
+++ b/src/styles/Extn-SpellCheck.less
@@ -0,0 +1,239 @@
+#status-indicators #status-spelling {
+ display: flex;
+ align-items: center;
+ height: (@bc-bg-status-bar-height - 1px);
+ box-sizing: border-box;
+ padding: 0 9px;
+ border-left: none;
+ border-right: 1px solid @bc-panel-border;
+ cursor: pointer;
+ color: @bc-text-thin-quiet;
+
+ .dark & {
+ border-right-color: @dark-bc-panel-separator;
+ color: @dark-bc-text-thin-quiet;
+ }
+
+ .spelling-icon {
+ width: 16px;
+ height: 14px;
+ background-color: currentColor;
+ -webkit-mask-image: url(images/status-spelling-ok.svg);
+ mask-image: url(images/status-spelling-ok.svg);
+ -webkit-mask-repeat: no-repeat;
+ mask-repeat: no-repeat;
+ -webkit-mask-position: center;
+ mask-position: center;
+ -webkit-mask-size: contain;
+ mask-size: contain;
+ }
+
+ &.spelling-ok .spelling-icon {
+ background-color: @spell-underline-text;
+ }
+
+ &.spelling-issues .spelling-icon,
+ &.spelling-error .spelling-icon {
+ -webkit-mask-image: url(images/status-spelling-issues.svg);
+ mask-image: url(images/status-spelling-issues.svg);
+ }
+
+ &.spelling-issues .spelling-icon {
+ background-color: #e39a2c;
+ }
+
+ &.spelling-error .spelling-icon {
+ background-color: @error-underline-text;
+ }
+
+ &.spelling-off,
+ &.spelling-locked,
+ &.spelling-unavailable {
+ opacity: 0.55;
+ }
+}
+
+#spelling-panel {
+ .user-select(text);
+
+ .toolbar {
+ display: flex;
+ align-items: center;
+ padding: 6px 8px;
+ }
+
+ .title {
+ flex: 1;
+ margin-left: 4px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+
+ .spelling-toolbar-actions {
+ display: flex;
+ align-items: center;
+ gap: 6px;
+ margin-left: 8px;
+ }
+
+ .spelling-body {
+ height: calc(100% - 36px);
+ overflow: auto;
+ }
+
+ .spelling-message {
+ max-width: 560px;
+ margin: 0 auto;
+ padding: 26px 20px;
+ text-align: center;
+ }
+
+ .spelling-message-title {
+ font-size: 15px;
+ font-weight: 600;
+ margin-bottom: 6px;
+ }
+
+ .spelling-message-text {
+ color: @bc-text-thin-quiet;
+ margin-bottom: 14px;
+ line-height: 1.5;
+
+ .dark & {
+ color: @dark-bc-text-thin-quiet;
+ }
+ }
+
+ .spelling-message-actions {
+ display: flex;
+ justify-content: center;
+ gap: 8px;
+ }
+
+ .spelling-list table {
+ table-layout: fixed;
+ width: 100%;
+ }
+
+ .spelling-row {
+ cursor: pointer;
+ }
+
+ .line-number {
+ text-align: right;
+ white-space: nowrap;
+ width: 56px;
+ }
+
+ .spelling-word-cell {
+ width: 180px;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+
+ .spelling-word {
+ font-weight: 600;
+ padding-bottom: 1px;
+ background: url(images/wavy-spell-error.svg) repeat-x bottom left;
+ }
+
+ .spelling-snippet {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ color: @bc-text-thin-quiet;
+
+ .dark & {
+ color: @dark-bc-text-thin-quiet;
+ }
+
+ mark {
+ background: transparent;
+ color: inherit;
+ font-weight: 600;
+ padding: 0;
+ }
+ }
+
+ .spelling-actions-row td {
+ padding: 4px 8px 6px 64px;
+ }
+
+ .spelling-actions {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ gap: 5px;
+ }
+
+ .spelling-actions .btn {
+ margin: 0;
+ }
+
+ .spelling-actions-label {
+ color: @bc-text-thin-quiet;
+ margin-right: 2px;
+
+ .dark & {
+ color: @dark-bc-text-thin-quiet;
+ }
+ }
+
+ .spelling-actions-spacer {
+ flex: 1;
+ }
+
+ .spelling-more {
+ padding: 8px 12px;
+ color: @bc-text-thin-quiet;
+
+ .dark & {
+ color: @dark-bc-text-thin-quiet;
+ }
+ }
+}
+
+.spelling-quick-view {
+ padding: 4px 2px;
+ max-width: 380px;
+
+ .spelling-qv-header {
+ margin-bottom: 6px;
+ }
+
+ .spelling-qv-word {
+ font-weight: 600;
+ margin-right: 6px;
+ }
+
+ .spelling-qv-label {
+ color: @bc-text-thin-quiet;
+
+ .dark & {
+ color: @dark-bc-text-thin-quiet;
+ }
+ }
+
+ .spelling-qv-suggestions {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 4px;
+ margin-bottom: 8px;
+ }
+
+ .spelling-qv-suggestions .btn {
+ margin: 0;
+ }
+
+ .spelling-qv-actions {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 10px;
+ }
+
+ .spelling-qv-actions a {
+ cursor: pointer;
+ }
+}
diff --git a/src/styles/brackets.less b/src/styles/brackets.less
index 9c2f444a00..1e3d15a5c5 100644
--- a/src/styles/brackets.less
+++ b/src/styles/brackets.less
@@ -55,6 +55,7 @@
@import "Extn-PhoenixTour.less";
@import "Extn-Terminal.less";
@import "Extn-TypeScriptSupport.less";
+@import "Extn-SpellCheck.less";
@import "UserProfile.less";
@import "phoenix-pro.less";
@import "VideoPlayer.less";
diff --git a/src/styles/images/panel-icon-spelling.svg b/src/styles/images/panel-icon-spelling.svg
new file mode 100644
index 0000000000..f6e627fb0d
--- /dev/null
+++ b/src/styles/images/panel-icon-spelling.svg
@@ -0,0 +1 @@
+
diff --git a/src/styles/images/status-spelling-issues.svg b/src/styles/images/status-spelling-issues.svg
new file mode 100644
index 0000000000..4ec58b9b6d
--- /dev/null
+++ b/src/styles/images/status-spelling-issues.svg
@@ -0,0 +1,6 @@
+
diff --git a/src/styles/images/status-spelling-ok.svg b/src/styles/images/status-spelling-ok.svg
new file mode 100644
index 0000000000..048ee5fadf
--- /dev/null
+++ b/src/styles/images/status-spelling-ok.svg
@@ -0,0 +1,6 @@
+
diff --git a/src/thirdparty/licences/cspell-dictionaries.markdown b/src/thirdparty/licences/cspell-dictionaries.markdown
new file mode 100644
index 0000000000..da93c6016c
--- /dev/null
+++ b/src/thirdparty/licences/cspell-dictionaries.markdown
@@ -0,0 +1,794 @@
+# cspell dictionaries
+
+## @cspell/dict-en_us 4.4.43
+
+MIT License
+
+Copyright (c) 2017-2025 Street Side Software
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+## @cspell/dict-en-gb 5.0.38
+
+GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+ This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+ 0. Additional Definitions.
+
+ As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+ "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+ An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+ A "Combined Work" is a work produced by combining or linking an
+Application with the Library. The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+ The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+ The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+ 1. Exception to Section 3 of the GNU GPL.
+
+ You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+ 2. Conveying Modified Versions.
+
+ If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+ a) under this License, provided that you make a good faith effort to
+ ensure that, in the event an Application does not supply the
+ function or data, the facility still operates, and performs
+ whatever part of its purpose remains meaningful, or
+
+ b) under the GNU GPL, with none of the additional permissions of
+ this License applicable to that copy.
+
+ 3. Object Code Incorporating Material from Library Header Files.
+
+ The object code form of an Application may incorporate material from
+a header file that is part of the Library. You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+ a) Give prominent notice with each copy of the object code that the
+ Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the object code with a copy of the GNU GPL and this license
+ document.
+
+ 4. Combined Works.
+
+ You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+ a) Give prominent notice with each copy of the Combined Work that
+ the Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
+ document.
+
+ c) For a Combined Work that displays copyright notices during
+ execution, include the copyright notice for the Library among
+ these notices, as well as a reference directing the user to the
+ copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+ 0) Convey the Minimal Corresponding Source under the terms of this
+ License, and the Corresponding Application Code in a form
+ suitable for, and under terms that permit, the user to
+ recombine or relink the Application with a modified version of
+ the Linked Version to produce a modified Combined Work, in the
+ manner specified by section 6 of the GNU GPL for conveying
+ Corresponding Source.
+
+ 1) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (a) uses at run time
+ a copy of the Library already present on the user's computer
+ system, and (b) will operate properly with a modified version
+ of the Library that is interface-compatible with the Linked
+ Version.
+
+ e) Provide Installation Information, but only if you would otherwise
+ be required to provide such information under section 6 of the
+ GNU GPL, and only to the extent that such information is
+ necessary to install and execute a modified version of the
+ Combined Work produced by recombining or relinking the
+ Application with a modified version of the Linked Version. (If
+ you use option 4d0, the Installation Information must accompany
+ the Minimal Corresponding Source and Corresponding Application
+ Code. If you use option 4d1, you must provide the Installation
+ Information in the manner specified by section 6 of the GNU GPL
+ for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+ You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+ a) Accompany the combined library with a copy of the same work based
+ on the Library, uncombined with any other library facilities,
+ conveyed under the terms of this License.
+
+ b) Give prominent notice with the combined library that part of it
+ is a work based on the Library, and explaining where to find the
+ accompanying uncombined form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+ The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+ If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
+
+## @cspell/dict-software-terms 5.4.8
+
+The MIT License (MIT)
+
+Copyright (c) 2017-2025 Street Side Software
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+## @cspell/dict-companies 3.2.13
+
+The MIT License (MIT)
+
+Copyright (c) 2017-2025 Street Side Software
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+## @cspell/dict-fonts 4.0.6
+
+The MIT License (MIT)
+
+Copyright (c) 2017-2025 Street Side Software
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+## @cspell/dict-filetypes 3.0.18
+
+The MIT License (MIT)
+
+Copyright (c) 2017-2025 Street Side Software
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+## @cspell/dict-fullstack 3.2.9
+
+The MIT License (MIT)
+
+Copyright (c) 2017-2025 Street Side Software
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+## @cspell/dict-lorem-ipsum 4.0.5
+
+The MIT License (MIT)
+
+Copyright (c) 2017-2025 Street Side Software
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+## @cspell/dict-html 4.0.16
+
+The MIT License (MIT)
+
+Copyright (c) 2017-2025 Street Side Software
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+## @cspell/dict-html-symbol-entities 4.0.5
+
+The MIT License (MIT)
+
+Copyright (c) 2017-2025 Street Side Software
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+## @cspell/dict-css 4.1.2
+
+The MIT License (MIT)
+
+Copyright (c) 2017-2025 Street Side Software
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+## @cspell/dict-typescript 3.2.3
+
+The MIT License (MIT)
+
+Copyright (c) 2017-2025 Street Side Software
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+## @cspell/dict-node 5.0.9
+
+The MIT License (MIT)
+
+Copyright (c) 2017-2025 Street Side Software
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+## @cspell/dict-npm 5.2.55
+
+The MIT License (MIT)
+
+Copyright (c) 2017-2025 Street Side Software
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+## @cspell/dict-git 3.1.1
+
+The MIT License (MIT)
+
+Copyright (c) 2017-2025 Street Side Software
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+## @cspell/dict-markdown 2.0.18
+
+The MIT License (MIT)
+
+Copyright (c) 2017-2022 Street Side Software
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+## @cspell/dict-python 4.5.2
+
+The MIT License (MIT)
+
+Copyright (c) 2017-2025 Street Side Software
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+## @cspell/dict-java 5.0.12
+
+The MIT License (MIT)
+
+Copyright (c) 2017-2025 Street Side Software
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+## @cspell/dict-php 4.1.3
+
+The MIT License (MIT)
+
+Copyright (c) 2017-2025 Street Side Software
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+## @cspell/dict-cpp 7.2.0
+
+The MIT License (MIT)
+
+Copyright (c) 2017-2025 Street Side Software
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+## @cspell/dict-golang 6.0.29
+
+The MIT License (MIT)
+
+Copyright (c) 2017-2025 Street Side Software
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+## @cspell/dict-rust 4.1.2
+
+The MIT License (MIT)
+
+Copyright (c) 2017-2020 Alexander Andreev
+Copyright (c) 2017-2025 Street Side Software
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+## @cspell/dict-csharp 4.0.8
+
+The MIT License (MIT)
+
+Copyright (c) 2017-2025 Street Side Software
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+## @cspell/dict-shell 1.2.0
+
+The MIT License (MIT)
+
+Copyright (c) 2017-2025 Street Side Software
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+## @cspell/dict-sql 2.2.1
+
+The MIT License (MIT)
+
+Copyright (c) 2017-2025 Street Side Software
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+## @cspell/dict-docker 1.1.17
+
+The MIT License (MIT)
+
+Copyright (c) 2022-2025 Street Side Software
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+## @cspell/dict-ruby 5.1.4
+
+The MIT License (MIT)
+
+Copyright (c) 2017-2025 Street Side Software
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/src/thirdparty/licences/cspell-trie-lib.markdown b/src/thirdparty/licences/cspell-trie-lib.markdown
new file mode 100644
index 0000000000..04a247e2b4
--- /dev/null
+++ b/src/thirdparty/licences/cspell-trie-lib.markdown
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2017 Jason Dent
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/src/thirdparty/licences/fflate.markdown b/src/thirdparty/licences/fflate.markdown
new file mode 100644
index 0000000000..bd36874f34
--- /dev/null
+++ b/src/thirdparty/licences/fflate.markdown
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2026 Arjun Barrett
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file