Repository: League-of-Foundry-Developers/foundry-vtt-types
Pull request #3066 (2025-02-05 08:03:36)

V13 stubs
Stubbed out all the new classes/files in v13/applications


Patch:
diff --git a/package-lock.json b/package-lock.json
index 8ae447987..1a2491913 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,6 +9,10 @@
       "version": "12.331.3-beta",
       "license": "MIT",
       "dependencies": {
+        "@codemirror/lang-html": "^6.4.9",
+        "@codemirror/lang-javascript": "^6.2.2",
+        "@codemirror/lang-json": "^6.0.1",
+        "@codemirror/lang-markdown": "^6.3.1",
         "@pixi/basis": "^7.4.2",
         "@pixi/graphics-smooth": "^1.1.0",
         "@pixi/particle-emitter": "^5.0.8",
@@ -17,25 +21,34 @@
         "@types/showdown": "~2.0.6",
         "@types/simple-peer": "~9.11.1",
         "@types/youtube": "~0.0.48",
+        "codemirror": "^6.0.1",
         "earcut": "^3.0.1",
         "handlebars": "^4.7.8",
+        "handlebars-intl": "^1.1.2",
+        "jquery": "^3.7.1",
+        "mime-types": "^2.1.35",
+        "peggy": "^4.2.0",
         "pixi.js": "^7.4.2",
-        "postinstall-postinstall": "^2.1.0",
         "prosemirror-collab": "^1.3.1",
-        "prosemirror-commands": "^1.5.2",
+        "prosemirror-commands": "^1.6.2",
         "prosemirror-dropcursor": "^1.8.1",
         "prosemirror-gapcursor": "^1.3.2",
-        "prosemirror-history": "^1.4.0",
+        "prosemirror-history": "^1.4.1",
         "prosemirror-inputrules": "^1.4.0",
         "prosemirror-keymap": "^1.2.2",
-        "prosemirror-model": "^1.21.0",
-        "prosemirror-schema-list": "^1.3.0",
+        "prosemirror-model": "^1.23.0",
+        "prosemirror-schema-list": "^1.4.1",
         "prosemirror-state": "^1.4.3",
-        "prosemirror-tables": "^1.3.7",
-        "prosemirror-transform": "^1.9.0",
-        "prosemirror-view": "^1.33.6",
-        "socket.io-client": "^4.7.5",
-        "tinymce": "^6.8.3"
+        "prosemirror-tables": "^1.6.1",
+        "prosemirror-transform": "^1.10.2",
+        "prosemirror-view": "^1.36.0",
+        "sanitize-html": "^2.13.1",
+        "showdown": "^2.1.0",
+        "simple-peer": "^9.11.1",
+        "socket.io": "^4.8.1",
+        "socket.io-client": "^4.8.1",
+        "spark-md5": "^3.0.2",
+        "tinymce": "^7.5.1"
       },
       "devDependencies": {
         "@actions/core": "^1.11.1",
@@ -121,412 +134,179 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/@esbuild/aix-ppc64": {
-      "version": "0.24.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz",
-      "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "aix"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/android-arm": {
-      "version": "0.24.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz",
-      "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/android-arm64": {
-      "version": "0.24.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz",
-      "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/android-x64": {
-      "version": "0.24.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz",
-      "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/darwin-arm64": {
-      "version": "0.24.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz",
-      "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
+    "node_modules/@babel/code-frame": {
+      "version": "7.26.2",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
+      "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
       "license": "MIT",
       "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/darwin-x64": {
-      "version": "0.24.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz",
-      "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/freebsd-arm64": {
-      "version": "0.24.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz",
-      "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/freebsd-x64": {
-      "version": "0.24.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz",
-      "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-arm": {
-      "version": "0.24.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz",
-      "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-arm64": {
-      "version": "0.24.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz",
-      "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-ia32": {
-      "version": "0.24.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz",
-      "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
+      "dependencies": {
+        "@babel/helper-validator-identifier": "^7.25.9",
+        "js-tokens": "^4.0.0",
+        "picocolors": "^1.0.0"
+      },
       "engines": {
-        "node": ">=18"
+        "node": ">=6.9.0"
       }
     },
-    "node_modules/@esbuild/linux-loong64": {
-      "version": "0.24.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz",
-      "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==",
-      "cpu": [
-        "loong64"
-      ],
-      "dev": true,
+    "node_modules/@babel/helper-validator-identifier": {
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
+      "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
       "license": "MIT",
       "optional": true,
-      "os": [
-        "linux"
-      ],
       "engines": {
-        "node": ">=18"
+        "node": ">=6.9.0"
       }
     },
-    "node_modules/@esbuild/linux-mips64el": {
-      "version": "0.24.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz",
-      "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==",
-      "cpu": [
-        "mips64el"
-      ],
-      "dev": true,
+    "node_modules/@codemirror/autocomplete": {
+      "version": "6.18.4",
+      "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.18.4.tgz",
+      "integrity": "sha512-sFAphGQIqyQZfP2ZBsSHV7xQvo9Py0rV0dW7W3IMRdS+zDuNb2l3no78CvUaWKGfzFjI4FTrLdUSj86IGb2hRA==",
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
+      "dependencies": {
+        "@codemirror/language": "^6.0.0",
+        "@codemirror/state": "^6.0.0",
+        "@codemirror/view": "^6.17.0",
+        "@lezer/common": "^1.0.0"
       }
     },
-    "node_modules/@esbuild/linux-ppc64": {
-      "version": "0.24.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz",
-      "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
+    "node_modules/@codemirror/commands": {
+      "version": "6.8.0",
+      "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.8.0.tgz",
+      "integrity": "sha512-q8VPEFaEP4ikSlt6ZxjB3zW72+7osfAYW9i8Zu943uqbKuz6utc1+F170hyLUCUltXORjQXRyYQNfkckzA/bPQ==",
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
+      "dependencies": {
+        "@codemirror/language": "^6.0.0",
+        "@codemirror/state": "^6.4.0",
+        "@codemirror/view": "^6.27.0",
+        "@lezer/common": "^1.1.0"
       }
     },
-    "node_modules/@esbuild/linux-riscv64": {
-      "version": "0.24.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz",
-      "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==",
-      "cpu": [
-        "riscv64"
-      ],
-      "dev": true,
+    "node_modules/@codemirror/lang-css": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/@codemirror/lang-css/-/lang-css-6.3.1.tgz",
+      "integrity": "sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==",
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
+      "dependencies": {
+        "@codemirror/autocomplete": "^6.0.0",
+        "@codemirror/language": "^6.0.0",
+        "@codemirror/state": "^6.0.0",
+        "@lezer/common": "^1.0.2",
+        "@lezer/css": "^1.1.7"
       }
     },
-    "node_modules/@esbuild/linux-s390x": {
-      "version": "0.24.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz",
-      "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==",
-      "cpu": [
-        "s390x"
-      ],
-      "dev": true,
+    "node_modules/@codemirror/lang-html": {
+      "version": "6.4.9",
+      "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.9.tgz",
+      "integrity": "sha512-aQv37pIMSlueybId/2PVSP6NPnmurFDVmZwzc7jszd2KAF8qd4VBbvNYPXWQq90WIARjsdVkPbw29pszmHws3Q==",
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
+      "dependencies": {
+        "@codemirror/autocomplete": "^6.0.0",
+        "@codemirror/lang-css": "^6.0.0",
+        "@codemirror/lang-javascript": "^6.0.0",
+        "@codemirror/language": "^6.4.0",
+        "@codemirror/state": "^6.0.0",
+        "@codemirror/view": "^6.17.0",
+        "@lezer/common": "^1.0.0",
+        "@lezer/css": "^1.1.0",
+        "@lezer/html": "^1.3.0"
       }
     },
-    "node_modules/@esbuild/linux-x64": {
-      "version": "0.24.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz",
-      "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
+    "node_modules/@codemirror/lang-javascript": {
+      "version": "6.2.2",
+      "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.2.2.tgz",
+      "integrity": "sha512-VGQfY+FCc285AhWuwjYxQyUQcYurWlxdKYT4bqwr3Twnd5wP5WSeu52t4tvvuWmljT4EmgEgZCqSieokhtY8hg==",
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
+      "dependencies": {
+        "@codemirror/autocomplete": "^6.0.0",
+        "@codemirror/language": "^6.6.0",
+        "@codemirror/lint": "^6.0.0",
+        "@codemirror/state": "^6.0.0",
+        "@codemirror/view": "^6.17.0",
+        "@lezer/common": "^1.0.0",
+        "@lezer/javascript": "^1.0.0"
       }
     },
-    "node_modules/@esbuild/netbsd-arm64": {
-      "version": "0.24.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz",
-      "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
+    "node_modules/@codemirror/lang-json": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/@codemirror/lang-json/-/lang-json-6.0.1.tgz",
+      "integrity": "sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==",
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "netbsd"
-      ],
-      "engines": {
-        "node": ">=18"
+      "dependencies": {
+        "@codemirror/language": "^6.0.0",
+        "@lezer/json": "^1.0.0"
       }
     },
-    "node_modules/@esbuild/netbsd-x64": {
-      "version": "0.24.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz",
-      "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
+    "node_modules/@codemirror/lang-markdown": {
+      "version": "6.3.2",
+      "resolved": "https://registry.npmjs.org/@codemirror/lang-markdown/-/lang-markdown-6.3.2.tgz",
+      "integrity": "sha512-c/5MYinGbFxYl4itE9q/rgN/sMTjOr8XL5OWnC+EaRMLfCbVUmmubTJfdgpfcSS2SCaT7b+Q+xi3l6CgoE+BsA==",
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "netbsd"
-      ],
-      "engines": {
-        "node": ">=18"
+      "dependencies": {
+        "@codemirror/autocomplete": "^6.7.1",
+        "@codemirror/lang-html": "^6.0.0",
+        "@codemirror/language": "^6.3.0",
+        "@codemirror/state": "^6.0.0",
+        "@codemirror/view": "^6.0.0",
+        "@lezer/common": "^1.2.1",
+        "@lezer/markdown": "^1.0.0"
       }
     },
-    "node_modules/@esbuild/openbsd-arm64": {
-      "version": "0.24.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz",
-      "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
+    "node_modules/@codemirror/language": {
+      "version": "6.10.8",
+      "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.10.8.tgz",
+      "integrity": "sha512-wcP8XPPhDH2vTqf181U8MbZnW+tDyPYy0UzVOa+oHORjyT+mhhom9vBd7dApJwoDz9Nb/a8kHjJIsuA/t8vNFw==",
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "openbsd"
-      ],
-      "engines": {
-        "node": ">=18"
+      "dependencies": {
+        "@codemirror/state": "^6.0.0",
+        "@codemirror/view": "^6.23.0",
+        "@lezer/common": "^1.1.0",
+        "@lezer/highlight": "^1.0.0",
+        "@lezer/lr": "^1.0.0",
+        "style-mod": "^4.0.0"
       }
     },
-    "node_modules/@esbuild/openbsd-x64": {
-      "version": "0.24.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz",
-      "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
+    "node_modules/@codemirror/lint": {
+      "version": "6.8.4",
+      "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.8.4.tgz",
+      "integrity": "sha512-u4q7PnZlJUojeRe8FJa/njJcMctISGgPQ4PnWsd9268R4ZTtU+tfFYmwkBvgcrK2+QQ8tYFVALVb5fVJykKc5A==",
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "openbsd"
-      ],
-      "engines": {
-        "node": ">=18"
+      "dependencies": {
+        "@codemirror/state": "^6.0.0",
+        "@codemirror/view": "^6.35.0",
+        "crelt": "^1.0.5"
       }
     },
-    "node_modules/@esbuild/sunos-x64": {
-      "version": "0.24.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz",
-      "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
+    "node_modules/@codemirror/search": {
+      "version": "6.5.8",
+      "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.8.tgz",
+      "integrity": "sha512-PoWtZvo7c1XFeZWmmyaOp2G0XVbOnm+fJzvghqGAktBW3cufwJUWvSCcNG0ppXiBEM05mZu6RhMtXPv2hpllig==",
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "sunos"
-      ],
-      "engines": {
-        "node": ">=18"
+      "dependencies": {
+        "@codemirror/state": "^6.0.0",
+        "@codemirror/view": "^6.0.0",
+        "crelt": "^1.0.5"
       }
     },
-    "node_modules/@esbuild/win32-arm64": {
-      "version": "0.24.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz",
-      "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
+    "node_modules/@codemirror/state": {
+      "version": "6.5.2",
+      "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.2.tgz",
+      "integrity": "sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==",
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=18"
+      "dependencies": {
+        "@marijn/find-cluster-break": "^1.0.0"
       }
     },
-    "node_modules/@esbuild/win32-ia32": {
-      "version": "0.24.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz",
-      "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
+    "node_modules/@codemirror/view": {
+      "version": "6.36.2",
+      "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.36.2.tgz",
+      "integrity": "sha512-DZ6ONbs8qdJK0fdN7AB82CgI6tYXf4HWk1wSVa0+9bhVznCuuvhQtX8bFBoy3dv8rZSQqUd8GvhVAcielcidrA==",
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=18"
+      "dependencies": {
+        "@codemirror/state": "^6.5.0",
+        "style-mod": "^4.1.0",
+        "w3c-keyname": "^2.2.4"
       }
     },
     "node_modules/@esbuild/win32-x64": {
@@ -703,9 +483,9 @@
       }
     },
     "node_modules/@eslint/js": {
-      "version": "9.20.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.20.0.tgz",
-      "integrity": "sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==",
+      "version": "9.19.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.19.0.tgz",
+      "integrity": "sha512-rbq9/g38qjfqFLOVPvwjIvFFdNziEC5S65jmjPw5r6A//QH+W91akh9irMwjDN8zKUTak6W9EsAv4m/7Wnw0UQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -814,7 +594,143 @@
       "version": "1.5.0",
       "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
       "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
-      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@lezer/common": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.3.tgz",
+      "integrity": "sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==",
+      "license": "MIT"
+    },
+    "node_modules/@lezer/css": {
+      "version": "1.1.10",
+      "resolved": "https://registry.npmjs.org/@lezer/css/-/css-1.1.10.tgz",
+      "integrity": "sha512-V5/89eDapjeAkWPBpWEfQjZ1Hag3aYUUJOL8213X0dFRuXJ4BXa5NKl9USzOnaLod4AOpmVCkduir2oKwZYZtg==",
+      "license": "MIT",
+      "dependencies": {
+        "@lezer/common": "^1.2.0",
+        "@lezer/highlight": "^1.0.0",
+        "@lezer/lr": "^1.0.0"
+      }
+    },
+    "node_modules/@lezer/highlight": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.1.tgz",
+      "integrity": "sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==",
+      "license": "MIT",
+      "dependencies": {
+        "@lezer/common": "^1.0.0"
+      }
+    },
+    "node_modules/@lezer/html": {
+      "version": "1.3.10",
+      "resolved": "https://registry.npmjs.org/@lezer/html/-/html-1.3.10.tgz",
+      "integrity": "sha512-dqpT8nISx/p9Do3AchvYGV3qYc4/rKr3IBZxlHmpIKam56P47RSHkSF5f13Vu9hebS1jM0HmtJIwLbWz1VIY6w==",
+      "license": "MIT",
+      "dependencies": {
+        "@lezer/common": "^1.2.0",
+        "@lezer/highlight": "^1.0.0",
+        "@lezer/lr": "^1.0.0"
+      }
+    },
+    "node_modules/@lezer/javascript": {
+      "version": "1.4.21",
+      "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.4.21.tgz",
+      "integrity": "sha512-lL+1fcuxWYPURMM/oFZLEDm0XuLN128QPV+VuGtKpeaOGdcl9F2LYC3nh1S9LkPqx9M0mndZFdXCipNAZpzIkQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@lezer/common": "^1.2.0",
+        "@lezer/highlight": "^1.1.3",
+        "@lezer/lr": "^1.3.0"
+      }
+    },
+    "node_modules/@lezer/json": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/@lezer/json/-/json-1.0.3.tgz",
+      "integrity": "sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@lezer/common": "^1.2.0",
+        "@lezer/highlight": "^1.0.0",
+        "@lezer/lr": "^1.0.0"
+      }
+    },
+    "node_modules/@lezer/lr": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.2.tgz",
+      "integrity": "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==",
+      "license": "MIT",
+      "dependencies": {
+        "@lezer/common": "^1.0.0"
+      }
+    },
+    "node_modules/@lezer/markdown": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/@lezer/markdown/-/markdown-1.4.1.tgz",
+      "integrity": "sha512-Za5okfyWoNaX6sSZ2dm94XegaFXbkQ9UjKJ8hAoZX88XDpbu6DoR63IuSl+dqj1VkVQBQGsdr0JnTcMsogQDdw==",
+      "license": "MIT",
+      "dependencies": {
+        "@lezer/common": "^1.0.0",
+        "@lezer/highlight": "^1.0.0",
+        "@marijn/buildtool": "^0.1.6"
+      }
+    },
+    "node_modules/@marijn/buildtool": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/@marijn/buildtool/-/buildtool-0.1.6.tgz",
+      "integrity": "sha512-rcA2wljsM24MFAwx2U5vSBrt7IdIaPh4WPRfJPS8PuCUlbuQ8Pmky4c/ec00v3YFu90rZSbkVLnPuCeb/mUEng==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/mocha": "^9.1.1",
+        "acorn": "^8.10.0",
+        "acorn-walk": "^8.2.0",
+        "rollup": "^3.28.0",
+        "rollup-plugin-dts": "^5.3.1",
+        "typescript": "^5.1.6"
+      }
+    },
+    "node_modules/@marijn/buildtool/node_modules/rollup": {
+      "version": "3.29.5",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz",
+      "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==",
+      "license": "MIT",
+      "bin": {
+        "rollup": "dist/bin/rollup"
+      },
+      "engines": {
+        "node": ">=14.18.0",
+        "npm": ">=8.0.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
+      }
+    },
+    "node_modules/@marijn/buildtool/node_modules/rollup-plugin-dts": {
+      "version": "5.3.1",
+      "resolved": "https://registry.npmjs.org/rollup-plugin-dts/-/rollup-plugin-dts-5.3.1.tgz",
+      "integrity": "sha512-gusMi+Z4gY/JaEQeXnB0RUdU82h1kF0WYzCWgVmV4p3hWXqelaKuCvcJawfeg+EKn2T1Ie+YWF2OiN1/L8bTVg==",
+      "license": "LGPL-3.0",
+      "dependencies": {
+        "magic-string": "^0.30.2"
+      },
+      "engines": {
+        "node": ">=v14.21.3"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/Swatinem"
+      },
+      "optionalDependencies": {
+        "@babel/code-frame": "^7.22.5"
+      },
+      "peerDependencies": {
+        "rollup": "^3.0",
+        "typescript": "^4.1 || ^5.0"
+      }
+    },
+    "node_modules/@marijn/find-cluster-break": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz",
+      "integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==",
       "license": "MIT"
     },
     "node_modules/@microsoft/tsdoc": {
@@ -1065,6 +981,18 @@
         "@octokit/openapi-types": "^23.0.1"
       }
     },
+    "node_modules/@peggyjs/from-mem": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/@peggyjs/from-mem/-/from-mem-1.3.5.tgz",
+      "integrity": "sha512-oRyzXE7nirAn+5yYjCdWQHg3EG2XXcYRoYNOK8Quqnmm+9FyK/2YWVunwudlYl++M3xY+gIAdf0vAYS+p0nKfQ==",
+      "license": "MIT",
+      "dependencies": {
+        "semver": "7.6.3"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
     "node_modules/@pixi/accessibility": {
       "version": "7.4.2",
       "license": "MIT",
@@ -1424,263 +1352,11 @@
         "earcut": "^2.2.4",
         "eventemitter3": "^4.0.0",
         "url": "^0.11.0"
-      }
-    },
-    "node_modules/@pixi/ticker/node_modules/earcut": {
-      "version": "2.2.4",
-      "license": "ISC"
-    },
-    "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.34.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.4.tgz",
-      "integrity": "sha512-gGi5adZWvjtJU7Axs//CWaQbQd/vGy8KGcnEaCWiyCqxWYDxwIlAHFuSe6Guoxtd0SRvSfVTDMPd5H+4KE2kKA==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ]
-    },
-    "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.34.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.4.tgz",
-      "integrity": "sha512-1aRlh1gqtF7vNPMnlf1vJKk72Yshw5zknR/ZAVh7zycRAGF2XBMVDAHmFQz/Zws5k++nux3LOq/Ejj1WrDR6xg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ]
-    },
-    "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.34.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.4.tgz",
-      "integrity": "sha512-drHl+4qhFj+PV/jrQ78p9ch6A0MfNVZScl/nBps5a7u01aGf/GuBRrHnRegA9bP222CBDfjYbFdjkIJ/FurvSQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
-    },
-    "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.34.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.4.tgz",
-      "integrity": "sha512-hQqq/8QALU6t1+fbNmm6dwYsa0PDD4L5r3TpHx9dNl+aSEMnIksHZkSO3AVH+hBMvZhpumIGrTFj8XCOGuIXjw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
-    },
-    "node_modules/@rollup/rollup-freebsd-arm64": {
-      "version": "4.34.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.4.tgz",
-      "integrity": "sha512-/L0LixBmbefkec1JTeAQJP0ETzGjFtNml2gpQXA8rpLo7Md+iXQzo9kwEgzyat5Q+OG/C//2B9Fx52UxsOXbzw==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ]
-    },
-    "node_modules/@rollup/rollup-freebsd-x64": {
-      "version": "4.34.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.4.tgz",
-      "integrity": "sha512-6Rk3PLRK+b8L/M6m/x6Mfj60LhAUcLJ34oPaxufA+CfqkUrDoUPQYFdRrhqyOvtOKXLJZJwxlOLbQjNYQcRQfw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.34.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.4.tgz",
-      "integrity": "sha512-kmT3x0IPRuXY/tNoABp2nDvI9EvdiS2JZsd4I9yOcLCCViKsP0gB38mVHOhluzx+SSVnM1KNn9k6osyXZhLoCA==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.34.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.4.tgz",
-      "integrity": "sha512-3iSA9tx+4PZcJH/Wnwsvx/BY4qHpit/u2YoZoXugWVfc36/4mRkgGEoRbRV7nzNBSCOgbWMeuQ27IQWgJ7tRzw==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.34.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.4.tgz",
-      "integrity": "sha512-7CwSJW+sEhM9sESEk+pEREF2JL0BmyCro8UyTq0Kyh0nu1v0QPNY3yfLPFKChzVoUmaKj8zbdgBxUhBRR+xGxg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.34.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.4.tgz",
-      "integrity": "sha512-GZdafB41/4s12j8Ss2izofjeFXRAAM7sHCb+S4JsI9vaONX/zQ8cXd87B9MRU/igGAJkKvmFmJJBeeT9jJ5Cbw==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
-      "version": "4.34.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.4.tgz",
-      "integrity": "sha512-uuphLuw1X6ur11675c2twC6YxbzyLSpWggvdawTUamlsoUv81aAXRMPBC1uvQllnBGls0Qt5Siw8reSIBnbdqQ==",
-      "cpu": [
-        "loong64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-      "version": "4.34.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.4.tgz",
-      "integrity": "sha512-KvLEw1os2gSmD6k6QPCQMm2T9P2GYvsMZMRpMz78QpSoEevHbV/KOUbI/46/JRalhtSAYZBYLAnT9YE4i/l4vg==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.34.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.4.tgz",
-      "integrity": "sha512-wcpCLHGM9yv+3Dql/CI4zrY2mpQ4WFergD3c9cpRowltEh5I84pRT/EuHZsG0In4eBPPYthXnuR++HrFkeqwkA==",
-      "cpu": [
-        "riscv64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.34.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.4.tgz",
-      "integrity": "sha512-nLbfQp2lbJYU8obhRQusXKbuiqm4jSJteLwfjnunDT5ugBKdxqw1X9KWwk8xp1OMC6P5d0WbzxzhWoznuVK6XA==",
-      "cpu": [
-        "s390x"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-x64-gnu": {
-      "version": "4.34.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.4.tgz",
-      "integrity": "sha512-JGejzEfVzqc/XNiCKZj14eb6s5w8DdWlnQ5tWUbs99kkdvfq9btxxVX97AaxiUX7xJTKFA0LwoS0KU8C2faZRg==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-x64-musl": {
-      "version": "4.34.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.4.tgz",
-      "integrity": "sha512-/iFIbhzeyZZy49ozAWJ1ZR2KW6ZdYUbQXLT4O5n1cRZRoTpwExnHLjlurDXXPKEGxiAg0ujaR9JDYKljpr2fDg==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.34.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.4.tgz",
-      "integrity": "sha512-qORc3UzoD5UUTneiP2Afg5n5Ti1GAW9Gp5vHPxzvAFFA3FBaum9WqGvYXGf+c7beFdOKNos31/41PRMUwh1tpA==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ]
+      }
     },
-    "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.34.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.4.tgz",
-      "integrity": "sha512-5g7E2PHNK2uvoD5bASBD9aelm44nf1w4I5FEI7MPHLWcCSrR8JragXZWgKPXk5i2FU3JFfa6CGZLw2RrGBHs2Q==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ]
+    "node_modules/@pixi/ticker/node_modules/earcut": {
+      "version": "2.2.4",
+      "license": "ISC"
     },
     "node_modules/@rollup/rollup-win32-x64-msvc": {
       "version": "4.34.4",
@@ -1721,6 +1397,15 @@
         "path-browserify": "^1.0.1"
       }
     },
+    "node_modules/@types/cors": {
+      "version": "2.8.17",
+      "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz",
+      "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*"
+      }
+    },
     "node_modules/@types/css-font-loading-module": {
       "version": "0.0.14",
       "license": "MIT"
@@ -1780,6 +1465,12 @@
       "optional": true,
       "peer": true
     },
+    "node_modules/@types/mocha": {
+      "version": "9.1.1",
+      "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz",
+      "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==",
+      "license": "MIT"
+    },
     "node_modules/@types/ms": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
@@ -2119,11 +1810,32 @@
         "url": "https://opencollective.com/vitest"
       }
     },
+    "node_modules/accepts": {
+      "version": "1.3.8",
+      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+      "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+      "license": "MIT",
+      "dependencies": {
+        "mime-types": "~2.1.34",
+        "negotiator": "0.6.3"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/accepts/node_modules/negotiator": {
+      "version": "0.6.3",
+      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+      "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
     "node_modules/acorn": {
       "version": "8.14.0",
       "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
       "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
-      "dev": true,
       "license": "MIT",
       "bin": {
         "acorn": "bin/acorn"
@@ -2142,6 +1854,18 @@
         "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
       }
     },
+    "node_modules/acorn-walk": {
+      "version": "8.3.4",
+      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
+      "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
+      "license": "MIT",
+      "dependencies": {
+        "acorn": "^8.11.0"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
     "node_modules/ajv": {
       "version": "6.12.6",
       "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -2173,6 +1897,19 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "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/ansi-styles": {
       "version": "4.3.0",
       "dev": true,
@@ -2362,6 +2099,35 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/base64-js": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/base64id": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
+      "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
+      "license": "MIT",
+      "engines": {
+        "node": "^4.5.0 || >= 5.9"
+      }
+    },
     "node_modules/before-after-hook": {
       "version": "2.2.3",
       "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz",
@@ -2390,6 +2156,30 @@
         "node": ">=8"
       }
     },
+    "node_modules/buffer": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+      "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "base64-js": "^1.3.1",
+        "ieee754": "^1.2.1"
+      }
+    },
     "node_modules/cac": {
       "version": "6.7.14",
       "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
@@ -2539,6 +2329,21 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/codemirror": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz",
+      "integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==",
+      "license": "MIT",
+      "dependencies": {
+        "@codemirror/autocomplete": "^6.0.0",
+        "@codemirror/commands": "^6.0.0",
+        "@codemirror/language": "^6.0.0",
+        "@codemirror/lint": "^6.0.0",
+        "@codemirror/search": "^6.0.0",
+        "@codemirror/state": "^6.0.0",
+        "@codemirror/view": "^6.0.0"
+      }
+    },
     "node_modules/color-convert": {
       "version": "2.0.1",
       "dev": true,
@@ -2575,6 +2380,34 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/cookie": {
+      "version": "0.7.2",
+      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
+      "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/cors": {
+      "version": "2.8.5",
+      "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
+      "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+      "license": "MIT",
+      "dependencies": {
+        "object-assign": "^4",
+        "vary": "^1"
+      },
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
+    "node_modules/crelt": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz",
+      "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==",
+      "license": "MIT"
+    },
     "node_modules/cross-spawn": {
       "version": "7.0.6",
       "dev": true,
@@ -2644,7 +2477,6 @@
     },
     "node_modules/debug": {
       "version": "4.4.0",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "ms": "^2.1.3"
@@ -2673,6 +2505,15 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/deepmerge": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+      "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/define-data-property": {
       "version": "1.1.4",
       "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
@@ -2729,6 +2570,61 @@
         "node": ">=6.0.0"
       }
     },
+    "node_modules/dom-serializer": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+      "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+      "license": "MIT",
+      "dependencies": {
+        "domelementtype": "^2.3.0",
+        "domhandler": "^5.0.2",
+        "entities": "^4.2.0"
+      },
+      "funding": {
+        "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+      }
+    },
+    "node_modules/domelementtype": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+      "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/fb55"
+        }
+      ],
+      "license": "BSD-2-Clause"
+    },
+    "node_modules/domhandler": {
+      "version": "5.0.3",
+      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+      "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "domelementtype": "^2.3.0"
+      },
+      "engines": {
+        "node": ">= 4"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/domhandler?sponsor=1"
+      }
+    },
+    "node_modules/domutils": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
+      "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "dom-serializer": "^2.0.0",
+        "domelementtype": "^2.3.0",
+        "domhandler": "^5.0.3"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/domutils?sponsor=1"
+      }
+    },
     "node_modules/dunder-proto": {
       "version": "1.0.1",
       "license": "MIT",
@@ -2750,6 +2646,26 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/engine.io": {
+      "version": "6.6.4",
+      "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz",
+      "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/cors": "^2.8.12",
+        "@types/node": ">=10.0.0",
+        "accepts": "~1.3.4",
+        "base64id": "2.0.0",
+        "cookie": "~0.7.2",
+        "cors": "~2.8.5",
+        "debug": "~4.3.1",
+        "engine.io-parser": "~5.2.1",
+        "ws": "~8.17.1"
+      },
+      "engines": {
+        "node": ">=10.2.0"
+      }
+    },
     "node_modules/engine.io-client": {
       "version": "6.6.2",
       "license": "MIT",
@@ -2783,6 +2699,23 @@
         "node": ">=10.0.0"
       }
     },
+    "node_modules/engine.io/node_modules/debug": {
+      "version": "4.3.7",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
+      "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.1.3"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/enhanced-resolve": {
       "version": "5.18.0",
       "dev": true,
@@ -2795,6 +2728,18 @@
         "node": ">=10.13.0"
       }
     },
+    "node_modules/entities": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.12"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
     "node_modules/environment": {
       "version": "1.1.0",
       "dev": true,
@@ -2806,6 +2751,12 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/err-code": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz",
+      "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==",
+      "license": "MIT"
+    },
     "node_modules/error-ex": {
       "version": "1.3.2",
       "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -3002,7 +2953,6 @@
     },
     "node_modules/escape-string-regexp": {
       "version": "4.0.0",
-      "dev": true,
       "license": "MIT",
       "engines": {
         "node": ">=10"
@@ -3012,18 +2962,18 @@
       }
     },
     "node_modules/eslint": {
-      "version": "9.20.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.20.0.tgz",
-      "integrity": "sha512-aL4F8167Hg4IvsW89ejnpTwx+B/UQRzJPGgbIOl+4XqffWsahVVsLEWoZvnrVuwpWmnRd7XeXmQI1zlKcFDteA==",
+      "version": "9.19.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.19.0.tgz",
+      "integrity": "sha512-ug92j0LepKlbbEv6hD911THhoRHmbdXt2gX+VDABAW/Ir7D3nqKdv5Pf5vtlyY6HQMTEP2skXY43ueqTCWssEA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.2.0",
         "@eslint-community/regexpp": "^4.12.1",
         "@eslint/config-array": "^0.19.0",
-        "@eslint/core": "^0.11.0",
+        "@eslint/core": "^0.10.0",
         "@eslint/eslintrc": "^3.2.0",
-        "@eslint/js": "9.20.0",
+        "@eslint/js": "9.19.0",
         "@eslint/plugin-kit": "^0.2.5",
         "@humanfs/node": "^0.16.6",
         "@humanwhocodes/module-importer": "^1.0.1",
@@ -3340,19 +3290,6 @@
         "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/eslint/node_modules/@eslint/core": {
-      "version": "0.11.0",
-      "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.11.0.tgz",
-      "integrity": "sha512-DWUB2pksgNEb6Bz2fggIy1wh6fGgZP4Xyy/Mt0QZPiloKKXerbqq9D3SBQTlCRYOrcRPu4vuz+CGjwdfqxnoWA==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@types/json-schema": "^7.0.15"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      }
-    },
     "node_modules/eslint/node_modules/brace-expansion": {
       "version": "1.1.11",
       "dev": true,
@@ -3632,7 +3569,6 @@
       "version": "2.3.3",
       "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
       "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
-      "dev": true,
       "hasInstallScript": true,
       "license": "MIT",
       "optional": true,
@@ -3681,6 +3617,12 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/get-browser-rtc": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/get-browser-rtc/-/get-browser-rtc-1.1.0.tgz",
+      "integrity": "sha512-MghbMJ61EJrRsDe7w1Bvqt3ZsBuqhce5nrn/XAwgwOXhcsz53/ltdxOse1h/8eKXj5slzxdsz56g5rzOFSGwfQ==",
+      "license": "MIT"
+    },
     "node_modules/get-east-asian-width": {
       "version": "1.3.0",
       "dev": true,
@@ -3847,6 +3789,17 @@
         "uglify-js": "^3.1.4"
       }
     },
+    "node_modules/handlebars-intl": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/handlebars-intl/-/handlebars-intl-1.1.2.tgz",
+      "integrity": "sha512-XjamtPHDO56u/iI37UAl8bKJjzCtfDJJzx1QW+OlUm8dYqAKJ2RKjoI9qAdDrwORpiMjA4olqjWnQlJ9P5GFWw==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "intl-format-cache": "2.0.5",
+        "intl-messageformat": "1.1.0",
+        "intl-relativeformat": "1.1.0"
+      }
+    },
     "node_modules/has-bigints": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
@@ -3940,6 +3893,25 @@
       "dev": true,
       "license": "ISC"
     },
+    "node_modules/htmlparser2": {
+      "version": "8.0.2",
+      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz",
+      "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==",
+      "funding": [
+        "https://github.com/fb55/htmlparser2?sponsor=1",
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/fb55"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "domelementtype": "^2.3.0",
+        "domhandler": "^5.0.3",
+        "domutils": "^3.0.1",
+        "entities": "^4.4.0"
+      }
+    },
     "node_modules/human-signals": {
       "version": "5.0.0",
       "dev": true,
@@ -3962,6 +3934,26 @@
         "url": "https://github.com/sponsors/typicode"
       }
     },
+    "node_modules/ieee754": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "BSD-3-Clause"
+    },
     "node_modules/ignore": {
       "version": "5.3.2",
       "dev": true,
@@ -3995,6 +3987,12 @@
         "node": ">=0.8.19"
       }
     },
+    "node_modules/inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+      "license": "ISC"
+    },
     "node_modules/internal-slot": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
@@ -4010,6 +4008,38 @@
         "node": ">= 0.4"
       }
     },
+    "node_modules/intl-format-cache": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/intl-format-cache/-/intl-format-cache-2.0.5.tgz",
+      "integrity": "sha512-xYPMygEcyGQvCsSKtpJz5ftsqLBID8t4p+ZqMLmwiE6pxkIVfTHOPF/jAA+X+bJzAnjBMps/GelH8eO9eYovRQ==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/intl-messageformat": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-1.1.0.tgz",
+      "integrity": "sha512-uw+PsxKM1i0Bj3bd8Y0Rkfm6SYtl9TucmslrUDIHHhz3sKKUs6sdRX+0OOx/cV9cHwAQ0hzGg0A0nswT6ZWFTA==",
+      "license": "BSD",
+      "dependencies": {
+        "intl-messageformat-parser": "1.1.0"
+      }
+    },
+    "node_modules/intl-messageformat-parser": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-1.1.0.tgz",
+      "integrity": "sha512-Dy5x2puv9ne6KUvEkZGq781p8iA4nB8BUrRUnacrgCeLv39KAGLPTiGf+18OLxa+PJ8cXnEyiGSSlIku3ZTuUA==",
+      "deprecated": "We've written a new parser that's 6x faster and is backwards compatible. Please use @formatjs/icu-messageformat-parser",
+      "license": "BSD"
+    },
+    "node_modules/intl-relativeformat": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/intl-relativeformat/-/intl-relativeformat-1.1.0.tgz",
+      "integrity": "sha512-JLYCMrLbSbI2lDAJ2/LQ8UXR/Yu2gJ3G7g4ZRoyCljeYfVRu+PbXrpO31wOrcmdc2O+bluBOi+it/EirMxbIaw==",
+      "deprecated": "This package has been deprecated, please see migration guide at 'https://github.com/formatjs/formatjs/tree/master/packages/intl-relativeformat#migration-guide'",
+      "license": "BSD",
+      "dependencies": {
+        "intl-messageformat": "1.1.0"
+      }
+    },
     "node_modules/is-array-buffer": {
       "version": "3.0.5",
       "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
@@ -4278,6 +4308,15 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/is-plain-object": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+      "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/is-regex": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
@@ -4455,6 +4494,19 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/jquery": {
+      "version": "3.7.1",
+      "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz",
+      "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==",
+      "license": "MIT"
+    },
+    "node_modules/js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+      "license": "MIT",
+      "optional": true
+    },
     "node_modules/js-yaml": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -4644,26 +4696,15 @@
       "dependencies": {
         "ansi-escapes": "^7.0.0",
         "cli-cursor": "^5.0.0",
-        "slice-ansi": "^7.1.0",
-        "strip-ansi": "^7.1.0",
-        "wrap-ansi": "^9.0.0"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/log-update/node_modules/ansi-regex": {
-      "version": "6.1.0",
-      "dev": true,
-      "license": "MIT",
+        "slice-ansi": "^7.1.0",
+        "strip-ansi": "^7.1.0",
+        "wrap-ansi": "^9.0.0"
+      },
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       },
       "funding": {
-        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/log-update/node_modules/ansi-styles": {
@@ -4706,20 +4747,6 @@
         "url": "https://github.com/chalk/slice-ansi?sponsor=1"
       }
     },
-    "node_modules/log-update/node_modules/strip-ansi": {
-      "version": "7.1.0",
-      "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/loupe": {
       "version": "3.1.3",
       "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz",
@@ -4731,7 +4758,6 @@
       "version": "0.30.17",
       "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
       "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "@jridgewell/sourcemap-codec": "^1.5.0"
@@ -4778,6 +4804,27 @@
         "node": ">=8.6"
       }
     },
+    "node_modules/mime-types": {
+      "version": "2.1.35",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+      "license": "MIT",
+      "dependencies": {
+        "mime-db": "1.52.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mime-types/node_modules/mime-db": {
+      "version": "1.52.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
     "node_modules/mimic-fn": {
       "version": "4.0.0",
       "dev": true,
@@ -4831,7 +4878,6 @@
       "version": "3.3.8",
       "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
       "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
-      "dev": true,
       "funding": [
         {
           "type": "github",
@@ -5124,6 +5170,15 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/object-assign": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+      "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/object-inspect": {
       "version": "1.13.3",
       "license": "MIT",
@@ -5341,11 +5396,18 @@
         "node": ">=4"
       }
     },
+    "node_modules/parse-srcset": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz",
+      "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==",
+      "license": "MIT"
+    },
     "node_modules/path-browserify": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
       "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/path-exists": {
       "version": "4.0.0",
@@ -5398,11 +5460,36 @@
         "node": ">= 14.16"
       }
     },
+    "node_modules/peggy": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/peggy/-/peggy-4.2.0.tgz",
+      "integrity": "sha512-ZjzyJYY8NqW8JOZr2PbS/J0UH/hnfGALxSDsBUVQg5Y/I+ZaPuGeBJ7EclUX2RvWjhlsi4pnuL1C/K/3u+cDeg==",
+      "license": "MIT",
+      "dependencies": {
+        "@peggyjs/from-mem": "1.3.5",
+        "commander": "^12.1.0",
+        "source-map-generator": "0.8.0"
+      },
+      "bin": {
+        "peggy": "bin/peggy.js"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/peggy/node_modules/commander": {
+      "version": "12.1.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
+      "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      }
+    },
     "node_modules/picocolors": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
       "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
-      "dev": true,
       "license": "ISC"
     },
     "node_modules/picomatch": {
@@ -5491,7 +5578,6 @@
       "version": "8.5.1",
       "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz",
       "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==",
-      "dev": true,
       "funding": [
         {
           "type": "opencollective",
@@ -5516,11 +5602,6 @@
         "node": "^10 || ^12 || >=14"
       }
     },
-    "node_modules/postinstall-postinstall": {
-      "version": "2.1.0",
-      "hasInstallScript": true,
-      "license": "MIT"
-    },
     "node_modules/prelude-ls": {
       "version": "1.2.1",
       "dev": true,
@@ -5530,9 +5611,7 @@
       }
     },
     "node_modules/prettier": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.0.tgz",
-      "integrity": "sha512-quyMrVt6svPS7CjQ9gKb3GLEX/rl3BCL2oa/QkNcXv4YNVBC9olt3s+H7ukto06q7B1Qz46PbrKLO34PR6vXcA==",
+      "version": "3.4.2",
       "dev": true,
       "license": "MIT",
       "bin": {
@@ -5681,7 +5760,6 @@
     },
     "node_modules/queue-microtask": {
       "version": "1.2.3",
-      "dev": true,
       "funding": [
         {
           "type": "github",
@@ -5698,6 +5776,15 @@
       ],
       "license": "MIT"
     },
+    "node_modules/randombytes": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "^5.1.0"
+      }
+    },
     "node_modules/read-pkg": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
@@ -5930,6 +6017,26 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/safe-buffer": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT"
+    },
     "node_modules/safe-push-apply": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz",
@@ -5965,9 +6072,22 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/sanitize-html": {
+      "version": "2.14.0",
+      "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.14.0.tgz",
+      "integrity": "sha512-CafX+IUPxZshXqqRaG9ZClSlfPVjSxI0td7n07hk8QO2oO+9JDnlcL8iM8TWeOXOIBFgIOx6zioTzM53AOMn3g==",
+      "license": "MIT",
+      "dependencies": {
+        "deepmerge": "^4.2.2",
+        "escape-string-regexp": "^4.0.0",
+        "htmlparser2": "^8.0.0",
+        "is-plain-object": "^5.0.0",
+        "parse-srcset": "^1.0.2",
+        "postcss": "^8.3.11"
+      }
+    },
     "node_modules/semver": {
       "version": "7.6.3",
-      "dev": true,
       "license": "ISC",
       "bin": {
         "semver": "bin/semver.js"
@@ -6057,6 +6177,31 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/showdown": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/showdown/-/showdown-2.1.0.tgz",
+      "integrity": "sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==",
+      "license": "MIT",
+      "dependencies": {
+        "commander": "^9.0.0"
+      },
+      "bin": {
+        "showdown": "bin/showdown.js"
+      },
+      "funding": {
+        "type": "individual",
+        "url": "https://www.paypal.me/tiviesantos"
+      }
+    },
+    "node_modules/showdown/node_modules/commander": {
+      "version": "9.5.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
+      "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
+      "license": "MIT",
+      "engines": {
+        "node": "^12.20.0 || >=14"
+      }
+    },
     "node_modules/side-channel": {
       "version": "1.1.0",
       "license": "MIT",
@@ -6137,6 +6282,49 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
+    "node_modules/simple-peer": {
+      "version": "9.11.1",
+      "resolved": "https://registry.npmjs.org/simple-peer/-/simple-peer-9.11.1.tgz",
+      "integrity": "sha512-D1SaWpOW8afq1CZGWB8xTfrT3FekjQmPValrqncJMX7QFl8YwhrPTZvMCANLtgBwwdS+7zURyqxDDEmY558tTw==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "buffer": "^6.0.3",
+        "debug": "^4.3.2",
+        "err-code": "^3.0.1",
+        "get-browser-rtc": "^1.1.0",
+        "queue-microtask": "^1.2.3",
+        "randombytes": "^2.1.0",
+        "readable-stream": "^3.6.0"
+      }
+    },
+    "node_modules/simple-peer/node_modules/readable-stream": {
+      "version": "3.6.2",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+      "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
     "node_modules/slice-ansi": {
       "version": "5.0.0",
       "dev": true,
@@ -6163,6 +6351,51 @@
         "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
+    "node_modules/socket.io": {
+      "version": "4.8.1",
+      "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz",
+      "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==",
+      "license": "MIT",
+      "dependencies": {
+        "accepts": "~1.3.4",
+        "base64id": "~2.0.0",
+        "cors": "~2.8.5",
+        "debug": "~4.3.2",
+        "engine.io": "~6.6.0",
+        "socket.io-adapter": "~2.5.2",
+        "socket.io-parser": "~4.2.4"
+      },
+      "engines": {
+        "node": ">=10.2.0"
+      }
+    },
+    "node_modules/socket.io-adapter": {
+      "version": "2.5.5",
+      "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz",
+      "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==",
+      "license": "MIT",
+      "dependencies": {
+        "debug": "~4.3.4",
+        "ws": "~8.17.1"
+      }
+    },
+    "node_modules/socket.io-adapter/node_modules/debug": {
+      "version": "4.3.7",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
+      "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.1.3"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/socket.io-client": {
       "version": "4.8.1",
       "license": "MIT",
@@ -6217,6 +6450,23 @@
         }
       }
     },
+    "node_modules/socket.io/node_modules/debug": {
+      "version": "4.3.7",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
+      "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.1.3"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/source-map": {
       "version": "0.6.1",
       "license": "BSD-3-Clause",
@@ -6224,16 +6474,30 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/source-map-generator": {
+      "version": "0.8.0",
+      "resolved": "https://registry.npmjs.org/source-map-generator/-/source-map-generator-0.8.0.tgz",
+      "integrity": "sha512-psgxdGMwl5MZM9S3FWee4EgsEaIjahYV5AzGnwUvPhWeITz/j6rKpysQHlQ4USdxvINlb8lKfWGIXwfkrgtqkA==",
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">= 10"
+      }
+    },
     "node_modules/source-map-js": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
       "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
-      "dev": true,
       "license": "BSD-3-Clause",
       "engines": {
         "node": ">=0.10.0"
       }
     },
+    "node_modules/spark-md5": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz",
+      "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==",
+      "license": "(WTFPL OR MIT)"
+    },
     "node_modules/spdx-correct": {
       "version": "3.2.0",
       "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
@@ -6285,6 +6549,15 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/string_decoder": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "~5.2.0"
+      }
+    },
     "node_modules/string-argv": {
       "version": "0.3.2",
       "dev": true,
@@ -6309,31 +6582,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/string-width/node_modules/ansi-regex": {
-      "version": "6.1.0",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
-      }
-    },
-    "node_modules/string-width/node_modules/strip-ansi": {
-      "version": "7.1.0",
-      "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/string.prototype.padend": {
       "version": "3.1.6",
       "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz",
@@ -6412,6 +6660,22 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "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/strip-bom": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
@@ -6446,6 +6710,12 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/style-mod": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz",
+      "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==",
+      "license": "MIT"
+    },
     "node_modules/supports-color": {
       "version": "7.2.0",
       "dev": true,
@@ -6487,8 +6757,10 @@
       "license": "MIT"
     },
     "node_modules/tinymce": {
-      "version": "6.8.5",
-      "license": "MIT"
+      "version": "7.6.1",
+      "resolved": "https://registry.npmjs.org/tinymce/-/tinymce-7.6.1.tgz",
+      "integrity": "sha512-5cHhaAoyyTHfAVTInNfoSp0KkUHmeVUbGSu37QKQbOFIPqxYPhqBiaLm1WVLgoNBYOHRProVc3xzxnNTeWHyoQ==",
+      "license": "GPL-2.0-or-later"
     },
     "node_modules/tinypool": {
       "version": "1.0.2",
@@ -6586,9 +6858,9 @@
       }
     },
     "node_modules/type-fest": {
-      "version": "4.34.0",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.34.0.tgz",
-      "integrity": "sha512-Qcg88ZJsJvRcUijtD6supagRSDf0y1FPZh4NroJpwRkoPYj6gGNidREwTgDuC0Pmq0PVAAzL8C8BZW7xhx5Q4A==",
+      "version": "4.34.1",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.34.1.tgz",
+      "integrity": "sha512-6kSc32kT0rbwxD6QL1CYe8IqdzN/J/ILMrNK+HMQCKH3insCDRY/3ITb0vcBss0a3t72fzh2YSzj8ko1HgwT3g==",
       "dev": true,
       "license": "(MIT OR CC0-1.0)",
       "engines": {
@@ -6678,7 +6950,6 @@
     },
     "node_modules/typescript": {
       "version": "5.7.3",
-      "dev": true,
       "license": "Apache-2.0",
       "bin": {
         "tsc": "bin/tsc",
@@ -6788,6 +7059,12 @@
       "version": "1.4.1",
       "license": "MIT"
     },
+    "node_modules/util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+      "license": "MIT"
+    },
     "node_modules/validate-npm-package-license": {
       "version": "3.0.4",
       "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
@@ -6799,6 +7076,15 @@
         "spdx-expression-parse": "^3.0.0"
       }
     },
+    "node_modules/vary": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+      "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
     "node_modules/vite": {
       "version": "6.1.0",
       "resolved": "https://registry.npmjs.org/vite/-/vite-6.1.0.tgz",
@@ -7113,17 +7399,6 @@
         "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
       }
     },
-    "node_modules/wrap-ansi/node_modules/ansi-regex": {
-      "version": "6.1.0",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
-      }
-    },
     "node_modules/wrap-ansi/node_modules/ansi-styles": {
       "version": "6.2.1",
       "dev": true,
@@ -7135,20 +7410,6 @@
         "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
-    "node_modules/wrap-ansi/node_modules/strip-ansi": {
-      "version": "7.1.0",
-      "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/wrappy": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
diff --git a/package.json b/package.json
index 41b7cdb15..b623993c9 100644
--- a/package.json
+++ b/package.json
@@ -79,6 +79,10 @@
     "typescript"
   ],
   "dependencies": {
+    "@codemirror/lang-html": "^6.4.9",
+    "@codemirror/lang-javascript": "^6.2.2",
+    "@codemirror/lang-json": "^6.0.1",
+    "@codemirror/lang-markdown": "^6.3.1",
     "@pixi/basis": "^7.4.2",
     "@pixi/graphics-smooth": "^1.1.0",
     "@pixi/particle-emitter": "^5.0.8",
@@ -88,24 +92,33 @@
     "@types/simple-peer": "~9.11.1",
     "@types/youtube": "~0.0.48",
     "earcut": "^3.0.1",
+    "codemirror": "^6.0.1",
     "handlebars": "^4.7.8",
+    "handlebars-intl": "^1.1.2",
+    "jquery": "^3.7.1",
+    "mime-types": "^2.1.35",
+    "peggy": "^4.2.0",
     "pixi.js": "^7.4.2",
-    "postinstall-postinstall": "^2.1.0",
     "prosemirror-collab": "^1.3.1",
-    "prosemirror-commands": "^1.5.2",
+    "prosemirror-commands": "^1.6.2",
     "prosemirror-dropcursor": "^1.8.1",
     "prosemirror-gapcursor": "^1.3.2",
-    "prosemirror-history": "^1.4.0",
+    "prosemirror-history": "^1.4.1",
     "prosemirror-inputrules": "^1.4.0",
     "prosemirror-keymap": "^1.2.2",
-    "prosemirror-model": "^1.21.0",
-    "prosemirror-schema-list": "^1.3.0",
+    "prosemirror-model": "^1.23.0",
+    "prosemirror-schema-list": "^1.4.1",
     "prosemirror-state": "^1.4.3",
-    "prosemirror-tables": "^1.3.7",
-    "prosemirror-transform": "^1.9.0",
-    "prosemirror-view": "^1.33.6",
-    "socket.io-client": "^4.7.5",
-    "tinymce": "^6.8.3"
+    "prosemirror-tables": "^1.6.1",
+    "prosemirror-transform": "^1.10.2",
+    "prosemirror-view": "^1.36.0",
+    "sanitize-html": "^2.13.1",
+    "showdown": "^2.1.0",
+    "simple-peer": "^9.11.1",
+    "socket.io": "^4.8.1",
+    "socket.io-client": "^4.8.1",
+    "spark-md5": "^3.0.2",
+    "tinymce": "^7.5.1"
   },
   "devDependencies": {
     "@actions/core": "^1.11.1",
diff --git a/src/foundry/client-esm/applications/_module.d.mts b/src/foundry/client-esm/applications/_module.d.mts
index 99de62ac2..8f3b2cedf 100644
--- a/src/foundry/client-esm/applications/_module.d.mts
+++ b/src/foundry/client-esm/applications/_module.d.mts
@@ -8,8 +8,12 @@ export * as api from "./api/_module.mjs";
 export * as dice from "./dice/_module.mjs";
 export * as elements from "./elements/_module.mjs";
 export * as fields from "./forms/fields.mjs";
+
 export * as apps from "./apps/_module.mjs";
+export * as hud from "./hud/_module.mjs";
+export * as settings from "./settings/_module.mjs";
 export * as sheets from "./sheets/_module.mjs";
+export * as sidebar from "./sidebar/_module.mjs";
 export * as ui from "./ui/_module.mjs";
 
 /**
diff --git a/src/foundry/client-esm/applications/api/application.d.mts b/src/foundry/client-esm/applications/api/application.d.mts
index 14d61827c..40eff1790 100644
--- a/src/foundry/client-esm/applications/api/application.d.mts
+++ b/src/foundry/client-esm/applications/api/application.d.mts
@@ -1,11 +1,4 @@
-import type {
-  MustConform,
-  AnyObject,
-  DeepPartial,
-  EmptyObject,
-  InexactPartial,
-  MaybePromise,
-} from "../../../../utils/index.d.mts";
+import type { MustConform, AnyObject, DeepPartial, InexactPartial, MaybePromise } from "../../../../utils/index.d.mts";
 import type EventEmitterMixin from "../../../common/utils/event-emitter.d.mts";
 
 // TODO: Investigate use of DeepPartial vs Partial vs InexactPartial
@@ -55,6 +48,11 @@ declare namespace ApplicationV2 {
     }
   }
 
+  export interface RenderContext {
+    /** Tab data prepared from an entry in {@link ApplicationV2.TABS} */
+    tabs?: Record<string, Tab>;
+  }
+
   export interface Configuration {
     /**
      * An HTML element identifier used for this Application instance
@@ -331,7 +329,8 @@ declare namespace ApplicationV2 {
 declare class ApplicationV2<
   // Foundry doesn't define this generic in its documentation but it's necessary
   // in fvtt-types to type `_prepareContext` etc.
-  RenderContext extends AnyObject = EmptyObject,
+  // `extends object` is to avoid having to call `InterfaceToObject` everywhere
+  RenderContext extends object = ApplicationV2.RenderContext,
   Configuration extends ApplicationV2.Configuration = ApplicationV2.Configuration,
   RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
 > extends EventEmitterMixin(Object) {
diff --git a/src/foundry/client-esm/applications/api/dialog.d.mts b/src/foundry/client-esm/applications/api/dialog.d.mts
index 481708017..8a948b606 100644
--- a/src/foundry/client-esm/applications/api/dialog.d.mts
+++ b/src/foundry/client-esm/applications/api/dialog.d.mts
@@ -61,14 +61,19 @@ import type ApplicationV2 from "./application.d.mts";
  * }).render({ force: true });
  * ```
  */
-declare class DialogV2 extends ApplicationV2<EmptyObject, DialogV2.Configuration> {
+declare class DialogV2<
+  RenderContext extends object = EmptyObject,
+  Configuration extends DialogV2.Configuration = DialogV2.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends ApplicationV2<RenderContext, Configuration, RenderOptions> {
   static override DEFAULT_OPTIONS: DeepPartial<ApplicationV2.Configuration>;
 
-  protected override _initializeApplicationOptions(
-    options: DeepPartial<DialogV2.Configuration>,
-  ): DialogV2.Configuration;
+  protected override _initializeApplicationOptions(options: DeepPartial<DialogV2.Configuration>): Configuration;
 
-  protected override _renderHTML(_context: unknown, _options: ApplicationV2.RenderOptions): Promise<HTMLFormElement>;
+  protected override _renderHTML(
+    _context: RenderContext,
+    _options: DeepPartial<RenderOptions>,
+  ): Promise<HTMLFormElement>;
 
   /**
    * Render configured buttons.
@@ -82,12 +87,12 @@ declare class DialogV2 extends ApplicationV2<EmptyObject, DialogV2.Configuration
    */
   protected _onSubmit(target: HTMLButtonElement, event: PointerEvent | SubmitEvent): Promise<DialogV2>;
 
-  protected override _onFirstRender(_context: EmptyObject, _options: DeepPartial<ApplicationV2.RenderOptions>): void;
+  protected override _onFirstRender(_context: RenderContext, _options: DeepPartial<RenderOptions>): void;
 
   protected override _replaceHTML(
     result: HTMLFormElement,
     content: HTMLElement,
-    _options: DeepPartial<ApplicationV2.RenderOptions>,
+    _options: DeepPartial<RenderOptions>,
   ): void;
 
   /**
diff --git a/src/foundry/client-esm/applications/api/document-sheet.d.mts b/src/foundry/client-esm/applications/api/document-sheet.d.mts
index 3beada67f..46ede085f 100644
--- a/src/foundry/client-esm/applications/api/document-sheet.d.mts
+++ b/src/foundry/client-esm/applications/api/document-sheet.d.mts
@@ -1,4 +1,4 @@
-import type { AnyObject, DeepPartial, EmptyObject, SimpleMerge } from "fvtt-types/utils";
+import type { DeepPartial, SimpleMerge } from "fvtt-types/utils";
 import type ApplicationV2 from "./application.d.mts";
 
 declare namespace DocumentSheetV2 {
@@ -6,6 +6,15 @@ declare namespace DocumentSheetV2 {
 
   type AnyConstructor = typeof AnyDocumentSheetV2;
 
+  interface RenderContext<Document extends foundry.abstract.Document.Any = foundry.abstract.Document.Any>
+    extends ApplicationV2.RenderContext {
+    document: Document;
+    source: Document["_source"];
+    fields: Document["schema"]["fields"];
+    editable: boolean;
+    rootId: string;
+  }
+
   interface Configuration<Document extends foundry.abstract.Document.Any = foundry.abstract.Document.Any>
     extends ApplicationV2.Configuration {
     /**
@@ -43,7 +52,7 @@ declare namespace DocumentSheetV2 {
  */
 declare class DocumentSheetV2<
   Document extends foundry.abstract.Document.Any,
-  RenderContext extends AnyObject = EmptyObject,
+  RenderContext extends object = DocumentSheetV2.RenderContext<Document>,
   Configuration extends DocumentSheetV2.Configuration<Document> = DocumentSheetV2.Configuration<Document>,
   RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
 > extends ApplicationV2<RenderContext, Configuration, RenderOptions> {
diff --git a/src/foundry/client-esm/applications/apps/_module.d.mts b/src/foundry/client-esm/applications/apps/_module.d.mts
index fb5699390..bd3883361 100644
--- a/src/foundry/client-esm/applications/apps/_module.d.mts
+++ b/src/foundry/client-esm/applications/apps/_module.d.mts
@@ -3,5 +3,10 @@
 // While `.mts` could work, to avoid `import-x/no-unresolved` from erroring `.mjs` is used.
 /* eslint-disable import-x/extensions */
 
+export { default as CombatTrackerConfig } from "./combat-tracker-config.mjs";
 export { default as CompendiumArtConfig } from "./compendium-art-config.mjs";
+export { default as DocumentOwnershipConfig } from "./document-ownership.mjs";
+export { default as DocumentSheetConfig } from "./document-sheet-config.mjs";
+export { default as GridConfig } from "./grid-config.mjs";
+export { default as ImagePopout } from "./image-popout.mjs";
 export { default as PermissionConfig } from "./permission-config.mjs";
diff --git a/src/foundry/client-esm/applications/apps/combat-tracker-config.d.mts b/src/foundry/client-esm/applications/apps/combat-tracker-config.d.mts
new file mode 100644
index 000000000..7050e3e9e
--- /dev/null
+++ b/src/foundry/client-esm/applications/apps/combat-tracker-config.d.mts
@@ -0,0 +1,20 @@
+import type ApplicationV2 from "../api/application.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * The Application responsible for configuring the CombatTracker and its contents.
+ * @remarks TODO: Stub
+ */
+declare class CombatTrackerConfig<
+  RenderContext extends CombatTrackerConfig.RenderContext = CombatTrackerConfig.RenderContext,
+  Configuration extends ApplicationV2.Configuration = ApplicationV2.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends HandlebarsApplicationMixin(ApplicationV2)<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace CombatTrackerConfig {
+  interface RenderContext {
+    rootId: string;
+  }
+}
+
+export default CombatTrackerConfig;
diff --git a/src/foundry/client-esm/applications/apps/document-ownership.d.mts b/src/foundry/client-esm/applications/apps/document-ownership.d.mts
new file mode 100644
index 000000000..d2bff2872
--- /dev/null
+++ b/src/foundry/client-esm/applications/apps/document-ownership.d.mts
@@ -0,0 +1,20 @@
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+import type DocumentSheetV2 from "../api/document-sheet.d.mts";
+
+/**
+ * A generic application for configuring permissions for various Document types.
+ * @remarks TODO: Stub
+ */
+declare class DocumentOwnershipConfig<
+  Document extends foundry.abstract.Document.Any = foundry.abstract.Document.Any,
+  RenderContext extends object = DocumentOwnershipConfig.RenderContext<Document>,
+  Configuration extends DocumentSheetV2.Configuration<Document> = DocumentSheetV2.Configuration<Document>,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends HandlebarsApplicationMixin(DocumentSheetV2)<Document, RenderContext, Configuration, RenderOptions> {}
+
+declare namespace DocumentOwnershipConfig {
+  interface RenderContext<Document extends foundry.abstract.Document.Any = foundry.abstract.Document.Any>
+    extends DocumentSheetV2.RenderContext<Document> {}
+}
+
+export default DocumentOwnershipConfig;
diff --git a/src/foundry/client-esm/applications/apps/document-sheet-config.d.mts b/src/foundry/client-esm/applications/apps/document-sheet-config.d.mts
new file mode 100644
index 000000000..91d8411c0
--- /dev/null
+++ b/src/foundry/client-esm/applications/apps/document-sheet-config.d.mts
@@ -0,0 +1,23 @@
+import type DocumentSheetV2 from "../api/document-sheet.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * An Application for configuring Document sheet settings.
+ * @remarks TODO: Stub
+ */
+declare class DocumentSheetConfig<
+  Document extends foundry.abstract.Document.Any = foundry.abstract.Document.Any,
+  RenderContext extends DocumentSheetConfig.RenderContext<Document> = DocumentSheetConfig.RenderContext<Document>,
+  Configuration extends DocumentSheetConfig.Configuration<Document> = DocumentSheetConfig.Configuration<Document>,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends HandlebarsApplicationMixin(DocumentSheetV2)<Document, RenderContext, Configuration, RenderOptions> {}
+
+declare namespace DocumentSheetConfig {
+  interface RenderContext<Document extends foundry.abstract.Document.Any>
+    extends DocumentSheetV2.RenderContext<Document> {}
+
+  interface Configuration<Document extends foundry.abstract.Document.Any>
+    extends DocumentSheetV2.Configuration<Document> {}
+}
+
+export default DocumentSheetConfig;
diff --git a/src/foundry/client-esm/applications/apps/grid-config.d.mts b/src/foundry/client-esm/applications/apps/grid-config.d.mts
new file mode 100644
index 000000000..823d45a9a
--- /dev/null
+++ b/src/foundry/client-esm/applications/apps/grid-config.d.mts
@@ -0,0 +1,24 @@
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+import type DocumentSheetV2 from "../api/document-sheet.d.mts";
+
+/**
+ * A tool for fine-tuning the grid in a Scene
+ * @remarks TODO: Stub
+ */
+declare class GridConfig<
+  RenderContext extends GridConfig.RenderContext = GridConfig.RenderContext,
+  Configuration extends
+    DocumentSheetV2.Configuration<Scene.ConfiguredInstance> = DocumentSheetV2.Configuration<Scene.ConfiguredInstance>,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends HandlebarsApplicationMixin(DocumentSheetV2)<
+  Scene.ConfiguredInstance,
+  RenderContext,
+  Configuration,
+  RenderOptions
+> {}
+
+declare namespace GridConfig {
+  interface RenderContext extends DocumentSheetV2.RenderContext<Scene.ConfiguredInstance> {}
+}
+
+export default GridConfig;
diff --git a/src/foundry/client-esm/applications/apps/image-popout.d.mts b/src/foundry/client-esm/applications/apps/image-popout.d.mts
new file mode 100644
index 000000000..b5a7698fd
--- /dev/null
+++ b/src/foundry/client-esm/applications/apps/image-popout.d.mts
@@ -0,0 +1,55 @@
+import type { DeepPartial } from "../../../../utils/index.d.mts";
+import type ApplicationV2 from "../api/application.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * An Image Popout Application which features a single image in a lightbox style frame.
+ * Furthermore, this application allows for sharing the display of an image with other connected players.
+ *
+ * @example Creating an Image Popout
+ * ```js
+ * // Construct the Application instance
+ * const ip = new ImagePopout({
+ *   src: "path/to/image.jpg",
+ *   uuid: game.actors.getName("My Hero").uuid
+ *   window: {title: "My Featured Image"}
+ * });
+ *
+ * // Display the image popout
+ * ip.render(true);
+ *
+ * // Share the image with other connected players
+ * ip.shareImage();
+ * ```
+ * @remarks TODO: Stub
+ */
+declare class ImagePopout<
+  RenderContext extends ImagePopout.RenderContext = ImagePopout.RenderContext,
+  Configuration extends ImagePopout.Configuration = ImagePopout.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends HandlebarsApplicationMixin(ApplicationV2)<RenderContext, Configuration, RenderOptions> {
+  constructor(options: DeepPartial<Configuration> & { src: string });
+}
+
+declare namespace ImagePopout {
+  interface RenderContext extends ApplicationV2.RenderContext {}
+
+  interface Configuration extends ApplicationV2.Configuration {
+    /** The URL to the image or video file */
+    src: string;
+
+    /** Caption text to display below the image. */
+    caption: string;
+
+    /**
+     * The UUID of some related {@link foundry.abstract.Document|`Document`}.
+     * @defaultValue `null`
+     */
+    uuid: string | null | undefined;
+
+    /** Force showing or hiding the title */
+    showTitle?: boolean | null | undefined;
+  }
+}
+
+export default ImagePopout;
diff --git a/src/foundry/client-esm/applications/elements/_module.d.mts b/src/foundry/client-esm/applications/elements/_module.d.mts
index c60ebe0ef..67e1694a1 100644
--- a/src/foundry/client-esm/applications/elements/_module.d.mts
+++ b/src/foundry/client-esm/applications/elements/_module.d.mts
@@ -4,8 +4,11 @@
 /* eslint-disable import-x/extensions */
 
 export { default as AbstractFormInputElement } from "./form-element.mjs";
+export { default as HTMLCodeMirrorElement } from "./codemirror/element.mjs";
 export { default as HTMLColorPickerElement } from "./color-picker.mjs";
+export { default as HTMLDocumentEmbedElement } from "./document-embed.mjs";
 export { default as HTMLDocumentTagsElement } from "./document-tags.mjs";
+export { default as HTMLEnrichedContentElement } from "./enriched-content.mjs";
 export { default as HTMLFilePickerElement } from "./file-picker.mjs";
 export { default as HTMLHueSelectorSlider } from "./hue-slider.mjs";
 export { default as HTMLRangePickerElement } from "./range-picker.mjs";
diff --git a/src/foundry/client-esm/applications/elements/codemirror/element.d.mts b/src/foundry/client-esm/applications/elements/codemirror/element.d.mts
new file mode 100644
index 000000000..0ffb679f8
--- /dev/null
+++ b/src/foundry/client-esm/applications/elements/codemirror/element.d.mts
@@ -0,0 +1,16 @@
+import type AbstractFormInputElement from "../form-element.d.mts";
+
+declare namespace HTMLCodeMirrorElement {
+  interface Options {
+    /** The initial editor contents. */
+    value?: string | null | undefined;
+  }
+}
+
+/**
+ * A custom HTML element responsible for displaying a CodeMirror rich text editor.
+ * @remarks TODO: Stub
+ */
+declare class HTMLCodeMirrorElement extends AbstractFormInputElement<string> {}
+
+export default HTMLCodeMirrorElement;
diff --git a/src/foundry/client-esm/applications/elements/codemirror/extensions.d.mts b/src/foundry/client-esm/applications/elements/codemirror/extensions.d.mts
new file mode 100644
index 000000000..3557ee808
--- /dev/null
+++ b/src/foundry/client-esm/applications/elements/codemirror/extensions.d.mts
@@ -0,0 +1,20 @@
+import type { Extension } from "@codemirror/state";
+
+/**
+ * CodeMirror language extensions
+ * @remarks TODO: Stub
+ */
+export const LANGUAGES: Record<string, Extension[]>;
+
+/**
+ * CodeMirror HTML tag classes for parsed language tokens
+ * @remarks TODO: Stub
+ */
+export const HIGHLIGHT_STYLE: Extension;
+
+/**
+ * Configure extensions for managing indentation via keypress.
+ * @param spaces - The number of spaces added/removed per press of TAB/SHIFT-TAB
+ * @remarks TODO: Stub
+ */
+export function configureIndentExtensions(spaces: number): Extension[];
diff --git a/src/foundry/client-esm/applications/elements/codemirror/view.d.mts b/src/foundry/client-esm/applications/elements/codemirror/view.d.mts
new file mode 100644
index 000000000..5836345dd
--- /dev/null
+++ b/src/foundry/client-esm/applications/elements/codemirror/view.d.mts
@@ -0,0 +1,8 @@
+import type { EditorView } from "codemirror";
+
+/** A CodeMirror EditorView that doesn't mount styles */
+// @ts-expect-error EditorViewFVTT is not ever publicly exposed; it's only used in the hard-private `#view` property on HTMLCodeMirrorElement
+// The error comes from `mountStyles` being marked private in EditorView, but since it's not hard private Foundry is nevertheless able to override
+export default class EditorViewFVTT extends EditorView {
+  override mountStyles(): void;
+}
diff --git a/src/foundry/client-esm/applications/elements/document-embed.d.mts b/src/foundry/client-esm/applications/elements/document-embed.d.mts
new file mode 100644
index 000000000..8ef6be564
--- /dev/null
+++ b/src/foundry/client-esm/applications/elements/document-embed.d.mts
@@ -0,0 +1,14 @@
+/**
+ * A custom HTMLElement that is used to wrap enriched content that requires additional interactivity.
+ */
+export default class HTMLDocumentEmbedElement extends HTMLElement {
+  /**
+   * The HTML tag named used by this element.
+   */
+  static tagName: "document-embed";
+
+  /**
+   * Invoke the Document#onEmbed callback when it is added to the DOM.
+   */
+  connectedCallback(): void;
+}
diff --git a/src/foundry/client-esm/applications/elements/enriched-content.d.mts b/src/foundry/client-esm/applications/elements/enriched-content.d.mts
new file mode 100644
index 000000000..13a159f57
--- /dev/null
+++ b/src/foundry/client-esm/applications/elements/enriched-content.d.mts
@@ -0,0 +1,29 @@
+/**
+ * A custom HTMLElement that is used to wrap enriched content that requires additional interactivity.
+ */
+export default class HTMLEnrichedContentElement extends HTMLElement {
+  /**
+   * The HTML tag named used by this element.
+   */
+  static tagName: "enriched-content";
+
+  /**
+   * Attributes requiring change notifications
+   */
+  static observedAttributes: string[];
+
+  #private: true;
+
+  /**
+   * Invoke the enricher onRender callback when it is added to the DOM.
+   */
+  connectedCallback(): void;
+
+  /**
+   * Fire a callback on change to an observed attribute.
+   * @param attrName - The name of the attribute
+   * @param oldValue - The old value: null indicates the attribute was not present.
+   * @param newValue - The new value: null indicates the attribute is removed.
+   */
+  attributeChangedCallback(attrName: string, oldValue: string | null, newValue: string | null): void;
+}
diff --git a/src/foundry/client-esm/applications/hud/_module.d.mts b/src/foundry/client-esm/applications/hud/_module.d.mts
new file mode 100644
index 000000000..f145f0d53
--- /dev/null
+++ b/src/foundry/client-esm/applications/hud/_module.d.mts
@@ -0,0 +1,10 @@
+// In Foundry itself this file contains re-exports of these other modules.
+// Therefore it has a runtime effect and uses `.mjs` instead of `.d.mts`.
+// While `.mts` could work, to avoid `import/no-unresolved` from erroring `.mjs` is used.
+/* eslint-disable import-x/extensions */
+
+export { default as HeadsUpDisplayContainer } from "./container.mjs";
+export { default as BasePlaceableHUD } from "./placeable-hud.mjs";
+export { default as TileHUD } from "./tile-hud.mjs";
+export { default as TokenHUD } from "./token-hud.mjs";
+export { default as DrawingHUD } from "./drawing-hud.mjs";
diff --git a/src/foundry/client-esm/applications/hud/container.d.mts b/src/foundry/client-esm/applications/hud/container.d.mts
new file mode 100644
index 000000000..0263c2118
--- /dev/null
+++ b/src/foundry/client-esm/applications/hud/container.d.mts
@@ -0,0 +1,15 @@
+import type ApplicationV2 from "../api/application.d.mts";
+
+/**
+ * The Heads-Up Display Container is a canvas-sized Application which renders HTML overtop of the game canvas.
+ * @remarks TODO: Stub
+ */
+declare class HeadsUpDisplayContainer<
+  RenderContext extends object = ApplicationV2.RenderContext,
+  Configuration extends ApplicationV2.Configuration = ApplicationV2.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends ApplicationV2<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace HeadsUpDisplayContainer {}
+
+export default HeadsUpDisplayContainer;
diff --git a/src/foundry/client-esm/applications/hud/drawing-hud.d.mts b/src/foundry/client-esm/applications/hud/drawing-hud.d.mts
new file mode 100644
index 000000000..2292d1cf5
--- /dev/null
+++ b/src/foundry/client-esm/applications/hud/drawing-hud.d.mts
@@ -0,0 +1,19 @@
+import type BasePlaceableHUD from "./placeable-hud.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+import type ApplicationV2 from "../api/application.d.mts";
+
+/**
+ * An implementation of the PlaceableHUD base class which renders a heads-up-display interface for Drawing objects.
+ * The DrawingHUD implementation can be configured and replaced via {@link CONFIG.Drawing.hudClass}.
+ * @remarks TODO: Stub
+ */
+export default class DrawingHUD<
+  RenderContext extends BasePlaceableHUD.RenderContext = BasePlaceableHUD.RenderContext,
+  Configuration extends ApplicationV2.Configuration = ApplicationV2.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends HandlebarsApplicationMixin(BasePlaceableHUD)<
+  Drawing.ConfiguredInstance,
+  RenderContext,
+  Configuration,
+  RenderOptions
+> {}
diff --git a/src/foundry/client-esm/applications/hud/placeable-hud.d.mts b/src/foundry/client-esm/applications/hud/placeable-hud.d.mts
new file mode 100644
index 000000000..2b3fc3858
--- /dev/null
+++ b/src/foundry/client-esm/applications/hud/placeable-hud.d.mts
@@ -0,0 +1,41 @@
+import type ApplicationV2 from "../api/application.d.mts";
+
+/**
+ * An abstract base class for displaying a heads-up-display interface bound to a Placeable Object on the Canvas.
+ * @remarks TODO: Stub
+ */
+declare class BasePlaceableHUD<
+  ActiveHUDObject extends PlaceableObject.Any = PlaceableObject,
+  RenderContext extends object = BasePlaceableHUD.RenderContext,
+  Configuration extends ApplicationV2.Configuration = ApplicationV2.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends ApplicationV2<RenderContext, Configuration, RenderOptions> {
+  /**
+   * Reference a PlaceableObject this HUD is currently bound to.
+   */
+  get object(): ActiveHUDObject;
+
+  /**
+   * Convenience access to the Document which this HUD modifies.
+   */
+  get document(): ActiveHUDObject["document"];
+
+  /**
+   * Convenience access for the canvas layer which this HUD modifies
+   */
+  get layer(): ActiveHUDObject["layer"];
+}
+
+declare namespace BasePlaceableHUD {
+  // TODO: Make generic so it can extend the document source data (calls document#toObject with Object.assign)
+  interface RenderContext {
+    id: string;
+    classes: string;
+    appId: string;
+    isGM: boolean;
+    isGamePaused: boolean;
+    // TODO: Remaining properties
+  }
+}
+
+export default BasePlaceableHUD;
diff --git a/src/foundry/client-esm/applications/hud/tile-hud.d.mts b/src/foundry/client-esm/applications/hud/tile-hud.d.mts
new file mode 100644
index 000000000..da165cc11
--- /dev/null
+++ b/src/foundry/client-esm/applications/hud/tile-hud.d.mts
@@ -0,0 +1,19 @@
+import type BasePlaceableHUD from "./placeable-hud.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+import type ApplicationV2 from "../api/application.d.mts";
+
+/**
+ * An implementation of the PlaceableHUD base class which renders a heads-up-display interface for Tile objects.
+ * The TileHUD implementation can be configured and replaced via {@link CONFIG.Tile.hudClass}.
+ * @remarks TODO: Stub
+ */
+export default class TileHUD<
+  RenderContext extends BasePlaceableHUD.RenderContext = BasePlaceableHUD.RenderContext,
+  Configuration extends ApplicationV2.Configuration = ApplicationV2.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends HandlebarsApplicationMixin(BasePlaceableHUD)<
+  Tile.ConfiguredInstance,
+  RenderContext,
+  Configuration,
+  RenderOptions
+> {}
diff --git a/src/foundry/client-esm/applications/hud/token-hud.d.mts b/src/foundry/client-esm/applications/hud/token-hud.d.mts
new file mode 100644
index 000000000..4b5811134
--- /dev/null
+++ b/src/foundry/client-esm/applications/hud/token-hud.d.mts
@@ -0,0 +1,20 @@
+import type BasePlaceableHUD from "./placeable-hud.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+import type ApplicationV2 from "../api/application.d.mts";
+
+/**
+ * An implementation of the BasePlaceableHUD base class which renders a heads-up-display interface for Token objects.
+ * This interface provides controls for visibility, attribute bars, elevation, status effects, and more.
+ * The TokenHUD implementation can be configured and replaced via {@link CONFIG.Token.hudClass}.
+ * @remarks TODO: Stub
+ */
+export default class TokenHUD<
+  RenderContext extends BasePlaceableHUD.RenderContext = BasePlaceableHUD.RenderContext,
+  Configuration extends ApplicationV2.Configuration = ApplicationV2.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends HandlebarsApplicationMixin(BasePlaceableHUD)<
+  Token.ConfiguredInstance,
+  RenderContext,
+  Configuration,
+  RenderOptions
+> {}
diff --git a/src/foundry/client-esm/applications/quickstart.d.mts b/src/foundry/client-esm/applications/quickstart.d.mts
new file mode 100644
index 000000000..f769e2ee7
--- /dev/null
+++ b/src/foundry/client-esm/applications/quickstart.d.mts
@@ -0,0 +1,19 @@
+import type ApplicationV2 from "./api/application.d.mts";
+import type HandlebarsApplicationMixin from "./api/handlebars-application.d.mts";
+
+/**
+ * Application documentation here.
+ * @remarks TODO: Stub
+ * @remarks This is not actually *imported* anywhere it can be used, it appears to be for internal FVTT use only.
+ */
+declare class AppV2QuickStartTemplate<
+  RenderContext extends AppV2QuickStartTemplate.RenderContext = AppV2QuickStartTemplate.RenderContext,
+  Configuration extends ApplicationV2.Configuration = ApplicationV2.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends HandlebarsApplicationMixin(ApplicationV2)<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace AppV2QuickStartTemplate {
+  interface RenderContext extends ApplicationV2.RenderContext {}
+}
+
+export default AppV2QuickStartTemplate;
diff --git a/src/foundry/client-esm/applications/settings/_module.d.mts b/src/foundry/client-esm/applications/settings/_module.d.mts
new file mode 100644
index 000000000..09db5dc37
--- /dev/null
+++ b/src/foundry/client-esm/applications/settings/_module.d.mts
@@ -0,0 +1,6 @@
+// In Foundry itself this file contains re-exports of these other modules.
+// Therefore it has a runtime effect and uses `.mjs` instead of `.d.mts`.
+// While `.mts` could work, to avoid `import/no-unresolved` from erroring `.mjs` is used.
+/* eslint-disable import-x/extensions */
+
+export * as menus from "./menus/_module.mjs";
diff --git a/src/foundry/client-esm/applications/settings/menus/_module.d.mts b/src/foundry/client-esm/applications/settings/menus/_module.d.mts
new file mode 100644
index 000000000..3a4768261
--- /dev/null
+++ b/src/foundry/client-esm/applications/settings/menus/_module.d.mts
@@ -0,0 +1,7 @@
+// In Foundry itself this file contains re-exports of these other modules.
+// Therefore it has a runtime effect and uses `.mjs` instead of `.d.mts`.
+// While `.mts` could work, to avoid `import/no-unresolved` from erroring `.mjs` is used.
+/* eslint-disable import-x/extensions */
+
+export { default as PrototypeOverridesConfig } from "./prototype-overrides.mjs";
+export { default as UIConfig } from "./ui-config.mjs";
diff --git a/src/foundry/client-esm/applications/settings/menus/prototype-overrides.d.mts b/src/foundry/client-esm/applications/settings/menus/prototype-overrides.d.mts
new file mode 100644
index 000000000..698bb39d8
--- /dev/null
+++ b/src/foundry/client-esm/applications/settings/menus/prototype-overrides.d.mts
@@ -0,0 +1,20 @@
+import type ApplicationV2 from "../../api/application.d.mts";
+import type HandlebarsApplicationMixin from "../../api/handlebars-application.d.mts";
+
+/**
+ * A submenu for managing user overrides of PrototypeTokens
+ * @remarks TODO: Stub
+ */
+declare class PrototypeOverridesConfig<
+  RenderContext extends PrototypeOverridesConfig.RenderContext = PrototypeOverridesConfig.RenderContext,
+  Configuration extends ApplicationV2.Configuration = ApplicationV2.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends HandlebarsApplicationMixin(ApplicationV2)<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace PrototypeOverridesConfig {
+  interface RenderContext {
+    rootId: string;
+  }
+}
+
+export default PrototypeOverridesConfig;
diff --git a/src/foundry/client-esm/applications/settings/menus/ui-config.d.mts b/src/foundry/client-esm/applications/settings/menus/ui-config.d.mts
new file mode 100644
index 000000000..ef7e1ea50
--- /dev/null
+++ b/src/foundry/client-esm/applications/settings/menus/ui-config.d.mts
@@ -0,0 +1,25 @@
+import type ApplicationV2 from "../../api/application.d.mts";
+import type HandlebarsApplicationMixin from "../../api/handlebars-application.d.mts";
+
+/**
+ * A submenu that provides UI configuration settings.
+ * @remarks TODO: Stub
+ */
+declare class UIConfig<
+  RenderContext extends UIConfig.RenderContext = UIConfig.RenderContext,
+  Configuration extends ApplicationV2.Configuration = ApplicationV2.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends HandlebarsApplicationMixin(ApplicationV2)<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace UIConfig {
+  interface GameUIConfiguration {
+    uiScale: number;
+    fontScale: number;
+  }
+
+  interface RenderContext {
+    setting: GameUIConfiguration;
+  }
+}
+
+export default UIConfig;
diff --git a/src/foundry/client-esm/applications/sheets/_module.d.mts b/src/foundry/client-esm/applications/sheets/_module.d.mts
index 534d4b705..7070df728 100644
--- a/src/foundry/client-esm/applications/sheets/_module.d.mts
+++ b/src/foundry/client-esm/applications/sheets/_module.d.mts
@@ -3,10 +3,34 @@
 // While `.mts` could work, to avoid `import-x/no-unresolved` from erroring `.mjs` is used.
 /* eslint-disable import-x/extensions */
 
+export * as journal from "./journal/_module.mjs";
+export { default as ActiveEffectConfig } from "./active-effect-config.mjs";
 export { default as ActorSheetV2 } from "./actor-sheet.mjs";
-export { default as AmbientSoundConfig } from "./ambient-sound-config.mjs";
+export { default as AdventureImporter } from "./adventure-importer.mjs";
 export { default as AmbientLightConfig } from "./ambient-light-config.mjs";
+export { default as AmbientSoundConfig } from "./ambient-sound-config.mjs";
+export { default as CardConfig } from "./card-config.mjs";
+export { default as CombatantConfig } from "./combatant-config.mjs";
+export { default as DrawingConfig } from "./drawing-config.mjs";
+export { default as FolderConfig } from "./folder-config.mjs";
 export { default as ItemSheetV2 } from "./item-sheet.mjs";
+export { default as MacroConfig } from "./macro-config.mjs";
+export { default as NoteConfig } from "./note-config.mjs";
+export { default as PlaylistConfig } from "./playlist-config.mjs";
+export { default as PlaylistSoundConfig } from "./playlist-sound-config.mjs";
 export { default as RegionBehaviorConfig } from "./region-behavior-config.mjs";
 export { default as RegionConfig } from "./region-config.mjs";
+export { default as RollTableSheet } from "./roll-table-sheet.mjs";
+export { default as MeasuredTemplateConfig } from "./template-config.mjs";
+export { default as SceneConfig } from "./scene-config.mjs";
+export { default as TableResultConfig } from "./table-result-config.mjs";
+export { default as TileConfig } from "./tile-config.mjs";
+export { TokenConfig, PrototypeTokenConfig } from "./token/_module.mjs";
 export { default as UserConfig } from "./user-config.mjs";
+export { default as WallConfig } from "./wall-config.mjs";
+
+/**
+ * Initialize default sheet configurations for all Document types.
+ * @internal
+ */
+export function _registerDefaultSheets(): void;
diff --git a/src/foundry/client-esm/applications/sheets/active-effect-config.d.mts b/src/foundry/client-esm/applications/sheets/active-effect-config.d.mts
new file mode 100644
index 000000000..6f0e4382e
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/active-effect-config.d.mts
@@ -0,0 +1,25 @@
+import type DocumentSheetV2 from "../api/document-sheet.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * The Application responsible for configuring a single ActiveEffect document within a parent Actor or Item.
+ * @remarks TODO: Stub
+ */
+declare class ActiveEffectConfig<
+  RenderContext extends ActiveEffectConfig.RenderContext = ActiveEffectConfig.RenderContext,
+  Configuration extends ActiveEffectConfig.Configuration = ActiveEffectConfig.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends HandlebarsApplicationMixin(DocumentSheetV2)<
+  ActiveEffect.ConfiguredInstance,
+  RenderContext,
+  Configuration,
+  RenderOptions
+> {}
+
+declare namespace ActiveEffectConfig {
+  interface RenderContext extends DocumentSheetV2.RenderContext<ActiveEffect.ConfiguredInstance> {}
+
+  interface Configuration extends DocumentSheetV2.Configuration<ActiveEffect.ConfiguredInstance> {}
+}
+
+export default ActiveEffectConfig;
diff --git a/src/foundry/client-esm/applications/sheets/adventure-exporter.d.mts b/src/foundry/client-esm/applications/sheets/adventure-exporter.d.mts
new file mode 100644
index 000000000..7cab80afb
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/adventure-exporter.d.mts
@@ -0,0 +1,25 @@
+import type DocumentSheetV2 from "../api/document-sheet.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * An interface for packaging Adventure content and loading it to a compendium pack.
+ * @remarks TODO: Stub
+ */
+declare class AdventureExporter<
+  RenderContext extends AdventureExporter.RenderContext = AdventureExporter.RenderContext,
+  Configuration extends AdventureExporter.Configuration = AdventureExporter.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends HandlebarsApplicationMixin(DocumentSheetV2)<
+  Adventure.ConfiguredInstance,
+  RenderContext,
+  Configuration,
+  RenderOptions
+> {}
+
+declare namespace AdventureExporter {
+  interface RenderContext extends DocumentSheetV2.RenderContext<Adventure.ConfiguredInstance> {}
+
+  interface Configuration extends DocumentSheetV2.Configuration<Adventure.ConfiguredInstance> {}
+}
+
+export default AdventureExporter;
diff --git a/src/foundry/client-esm/applications/sheets/adventure-importer.d.mts b/src/foundry/client-esm/applications/sheets/adventure-importer.d.mts
new file mode 100644
index 000000000..f4e9c4ffc
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/adventure-importer.d.mts
@@ -0,0 +1,25 @@
+import type DocumentSheetV2 from "../api/document-sheet.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * This Document Sheet is responsible for rendering an Adventure and providing an interface to import it.
+ * @remarks TODO: Stub
+ */
+declare class AdventureImporter<
+  RenderContext extends AdventureImporter.RenderContext = AdventureImporter.RenderContext,
+  Configuration extends AdventureImporter.Configuration = AdventureImporter.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends HandlebarsApplicationMixin(DocumentSheetV2)<
+  Adventure.ConfiguredInstance,
+  RenderContext,
+  Configuration,
+  RenderOptions
+> {}
+
+declare namespace AdventureImporter {
+  interface RenderContext extends DocumentSheetV2.RenderContext<Adventure.ConfiguredInstance> {}
+
+  interface Configuration extends DocumentSheetV2.Configuration<Adventure.ConfiguredInstance> {}
+}
+
+export default AdventureImporter;
diff --git a/src/foundry/client-esm/applications/sheets/base-sheet.d.mts b/src/foundry/client-esm/applications/sheets/base-sheet.d.mts
new file mode 100644
index 000000000..10219211e
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/base-sheet.d.mts
@@ -0,0 +1,23 @@
+import type DocumentSheetV2 from "../api/document-sheet.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * The Application responsible for displaying a basic sheet for any Document sub-types that do not have a sheet registered.
+ * @remarks TODO: Stub
+ */
+declare class BaseSheet<
+  Document extends foundry.abstract.Document.Any = foundry.abstract.Document.Any,
+  RenderContext extends BaseSheet.RenderContext<Document> = BaseSheet.RenderContext<Document>,
+  Configuration extends DocumentSheetV2.Configuration<Document> = DocumentSheetV2.Configuration<Document>,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends HandlebarsApplicationMixin(DocumentSheetV2)<Document, RenderContext, Configuration, RenderOptions> {}
+
+declare namespace BaseSheet {
+  interface RenderContext<Document extends foundry.abstract.Document.Any>
+    extends DocumentSheetV2.RenderContext<Document> {
+    descriptionHTML?: string;
+    hasNothing: boolean;
+  }
+}
+
+export default BaseSheet;
diff --git a/src/foundry/client-esm/applications/sheets/card-config.d.mts b/src/foundry/client-esm/applications/sheets/card-config.d.mts
new file mode 100644
index 000000000..34cf0442b
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/card-config.d.mts
@@ -0,0 +1,25 @@
+import type DocumentSheetV2 from "../api/document-sheet.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * A DocumentSheet application responsible for displaying and editing a single embedded Card document.
+ * @remarks TODO: Stub
+ */
+declare class CardConfig<
+  RenderContext extends CardConfig.RenderContext = CardConfig.RenderContext,
+  Configuration extends CardConfig.Configuration = CardConfig.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends HandlebarsApplicationMixin(DocumentSheetV2)<
+  Card.ConfiguredInstance,
+  RenderContext,
+  Configuration,
+  RenderOptions
+> {}
+
+declare namespace CardConfig {
+  interface RenderContext extends DocumentSheetV2.RenderContext<Card.ConfiguredInstance> {}
+
+  interface Configuration extends DocumentSheetV2.Configuration<Card.ConfiguredInstance> {}
+}
+
+export default CardConfig;
diff --git a/src/foundry/client-esm/applications/sheets/combatant-config.d.mts b/src/foundry/client-esm/applications/sheets/combatant-config.d.mts
new file mode 100644
index 000000000..b6e1dc195
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/combatant-config.d.mts
@@ -0,0 +1,25 @@
+import type DocumentSheetV2 from "../api/document-sheet.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * The Combatant configuration application.
+ * @remarks TODO: Stub
+ */
+declare class CombatantConfig<
+  RenderContext extends CombatantConfig.RenderContext = CombatantConfig.RenderContext,
+  Configuration extends CombatantConfig.Configuration = CombatantConfig.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends HandlebarsApplicationMixin(DocumentSheetV2)<
+  Combatant.ConfiguredInstance,
+  RenderContext,
+  Configuration,
+  RenderOptions
+> {}
+
+declare namespace CombatantConfig {
+  interface RenderContext extends DocumentSheetV2.RenderContext<Combatant.ConfiguredInstance> {}
+
+  interface Configuration extends DocumentSheetV2.Configuration<Combatant.ConfiguredInstance> {}
+}
+
+export default CombatantConfig;
diff --git a/src/foundry/client-esm/applications/sheets/drawing-config.d.mts b/src/foundry/client-esm/applications/sheets/drawing-config.d.mts
new file mode 100644
index 000000000..7a5fe2d5e
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/drawing-config.d.mts
@@ -0,0 +1,25 @@
+import type DocumentSheetV2 from "../api/document-sheet.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * The Application responsible for configuring a single Drawing document within a parent Scene.
+ * @remarks TODO: Stub
+ */
+declare class DrawingConfig<
+  RenderContext extends DrawingConfig.RenderContext = DrawingConfig.RenderContext,
+  Configuration extends DrawingConfig.Configuration = DrawingConfig.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends HandlebarsApplicationMixin(DocumentSheetV2)<
+  DrawingDocument.ConfiguredInstance,
+  RenderContext,
+  Configuration,
+  RenderOptions
+> {}
+
+declare namespace DrawingConfig {
+  interface RenderContext extends DocumentSheetV2.RenderContext<DrawingDocument.ConfiguredInstance> {}
+
+  interface Configuration extends DocumentSheetV2.Configuration<DrawingDocument.ConfiguredInstance> {}
+}
+
+export default DrawingConfig;
diff --git a/src/foundry/client-esm/applications/sheets/folder-config.d.mts b/src/foundry/client-esm/applications/sheets/folder-config.d.mts
new file mode 100644
index 000000000..59cb9f039
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/folder-config.d.mts
@@ -0,0 +1,25 @@
+import type DocumentSheetV2 from "../api/document-sheet.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * The Application responsible for configuring a single Folder document.
+ * @remarks TODO: Stub
+ */
+declare class FolderConfig<
+  RenderContext extends FolderConfig.RenderContext = FolderConfig.RenderContext,
+  Configuration extends FolderConfig.Configuration = FolderConfig.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends HandlebarsApplicationMixin(DocumentSheetV2)<
+  Folder.ConfiguredInstance,
+  RenderContext,
+  Configuration,
+  RenderOptions
+> {}
+
+declare namespace FolderConfig {
+  interface RenderContext extends DocumentSheetV2.RenderContext<Folder.ConfiguredInstance> {}
+
+  interface Configuration extends DocumentSheetV2.Configuration<Folder.ConfiguredInstance> {}
+}
+
+export default FolderConfig;
diff --git a/src/foundry/client-esm/applications/sheets/journal/_module.d.mts b/src/foundry/client-esm/applications/sheets/journal/_module.d.mts
new file mode 100644
index 000000000..2fa913af2
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/journal/_module.d.mts
@@ -0,0 +1,16 @@
+// In Foundry itself this file contains re-exports of these other modules.
+// Therefore it has a runtime effect and uses `.mjs` instead of `.d.mts`.
+// While `.mts` could work, to avoid `import/no-unresolved` from erroring `.mjs` is used.
+/* eslint-disable import-x/extensions */
+
+export { default as JournalEntrySheet } from "./journal-entry-sheet.mjs";
+export { default as JournalEntryCategoryConfig } from "./journal-entry-category-config.mjs";
+export { default as JournalEntryPageSheet } from "./journal-entry-page-sheet.mjs";
+export { default as JournalEntryPageHandlebarsSheet } from "./journal-entry-page-hbs-sheet.mjs";
+export { default as JournalEntryPageTextSheet } from "./journal-entry-page-text-sheet.mjs";
+export { default as JournalEntryPageImageSheet } from "./journal-entry-page-image-sheet.mjs";
+export { default as JournalEntryPageMarkdownSheet } from "./journal-entry-page-markdown-sheet.mjs";
+export { default as JournalEntryPagePDFSheet } from "./journal-entry-page-pdf-sheet.mjs";
+export { default as JournalEntryPageProseMirrorSheet } from "./journal-entry-page-prose-mirror-sheet.mjs";
+export { default as JournalEntryPageVideoSheet } from "./journal-entry-page-video-sheet.mjs";
+export { default as ShowToPlayersDialog } from "./dialog-show.mjs";
diff --git a/src/foundry/client-esm/applications/sheets/journal/dialog-show.d.mts b/src/foundry/client-esm/applications/sheets/journal/dialog-show.d.mts
new file mode 100644
index 000000000..ec20febba
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/journal/dialog-show.d.mts
@@ -0,0 +1,19 @@
+import type DialogV2 from "../../api/dialog.d.mts";
+import type ApplicationV2 from "../../api/application.d.mts";
+import type HandlebarsApplicationMixin from "../../api/handlebars-application.d.mts";
+
+/**
+ * A dialog for configuring options when showing content to players.
+ * @remarks TODO: Stub
+ */
+declare class ShowToPlayersDialog<
+  RenderContext extends ShowToPlayersDialog.RenderContext = ShowToPlayersDialog.RenderContext,
+  Configuration extends DialogV2.Configuration = DialogV2.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends HandlebarsApplicationMixin(DialogV2)<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace ShowToPlayersDialog {
+  interface RenderContext extends ApplicationV2.RenderContext {}
+}
+
+export default ShowToPlayersDialog;
diff --git a/src/foundry/client-esm/applications/sheets/journal/journal-entry-category-config.d.mts b/src/foundry/client-esm/applications/sheets/journal/journal-entry-category-config.d.mts
new file mode 100644
index 000000000..98a18e0e6
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/journal/journal-entry-category-config.d.mts
@@ -0,0 +1,25 @@
+import type DocumentSheetV2 from "../../api/document-sheet.d.mts";
+import type HandlebarsApplicationMixin from "../../api/handlebars-application.d.mts";
+
+/**
+ * An Application responsible for managing a journal entry's categories.
+ * @remarks TODO: Stub
+ */
+declare class JournalEntryCategoryConfig<
+  RenderContext extends JournalEntryCategoryConfig.RenderContext = JournalEntryCategoryConfig.RenderContext,
+  Configuration extends JournalEntryCategoryConfig.Configuration = JournalEntryCategoryConfig.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends HandlebarsApplicationMixin(DocumentSheetV2)<
+  JournalEntry.ConfiguredInstance,
+  RenderContext,
+  Configuration,
+  RenderOptions
+> {}
+
+declare namespace JournalEntryCategoryConfig {
+  interface RenderContext extends DocumentSheetV2.RenderContext<JournalEntry.ConfiguredInstance> {}
+
+  interface Configuration extends DocumentSheetV2.Configuration<JournalEntry.ConfiguredInstance> {}
+}
+
+export default JournalEntryCategoryConfig;
diff --git a/src/foundry/client-esm/applications/sheets/journal/journal-entry-page-hbs-sheet.d.mts b/src/foundry/client-esm/applications/sheets/journal/journal-entry-page-hbs-sheet.d.mts
new file mode 100644
index 000000000..6745089d5
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/journal/journal-entry-page-hbs-sheet.d.mts
@@ -0,0 +1,19 @@
+import type JournalEntryPageSheet from "./journal-entry-page-sheet.mjs";
+import type HandlebarsApplicationMixin from "../../api/handlebars-application.d.mts";
+import type DocumentSheetV2 from "../../api/document-sheet.d.mts";
+
+/**
+ * An abstract subclass that contains specialised handlebars logic for JournalEntryPageSheets.
+ * @remarks TODO: Stub
+ */
+declare class JournalEntryPageHandlebarsSheet<
+  RenderContext extends JournalEntryPageHandlebarsSheet.RenderContext = JournalEntryPageHandlebarsSheet.RenderContext,
+  Configuration extends JournalEntryPageSheet.Configuration = JournalEntryPageSheet.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends HandlebarsApplicationMixin(JournalEntryPageSheet)<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace JournalEntryPageHandlebarsSheet {
+  interface RenderContext extends JournalEntryPageSheet.RenderContext {}
+}
+
+export default JournalEntryPageHandlebarsSheet;
diff --git a/src/foundry/client-esm/applications/sheets/journal/journal-entry-page-image-sheet.d.mts b/src/foundry/client-esm/applications/sheets/journal/journal-entry-page-image-sheet.d.mts
new file mode 100644
index 000000000..c71d45ee6
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/journal/journal-entry-page-image-sheet.d.mts
@@ -0,0 +1,18 @@
+import type DocumentSheetV2 from "../../api/document-sheet.d.mts";
+import type JournalEntryPageHandlebarsSheet from "./journal-entry-page-hbs-sheet.d.mts";
+import type JournalEntryPageSheet from "./journal-entry-page-sheet.d.mts";
+
+/**
+ * An Application responsible for displaying and editing a single image-type JournalEntryPage Document.
+ */
+declare class JournalEntryPageImageSheet<
+  RenderContext extends JournalEntryPageImageSheet.RenderContext = JournalEntryPageImageSheet.RenderContext,
+  Configuration extends JournalEntryPageSheet.Configuration = JournalEntryPageSheet.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends JournalEntryPageHandlebarsSheet<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace JournalEntryPageImageSheet {
+  interface RenderContext extends JournalEntryPageHandlebarsSheet.RenderContext {}
+}
+
+export default JournalEntryPageImageSheet;
diff --git a/src/foundry/client-esm/applications/sheets/journal/journal-entry-page-markdown-sheet.d.mts b/src/foundry/client-esm/applications/sheets/journal/journal-entry-page-markdown-sheet.d.mts
new file mode 100644
index 000000000..57cd41631
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/journal/journal-entry-page-markdown-sheet.d.mts
@@ -0,0 +1,18 @@
+import type DocumentSheetV2 from "../../api/document-sheet.d.mts";
+import type JournalEntryPageSheet from "./journal-entry-page-sheet.d.mts";
+import type JournalEntryPageTextSheet from "./journal-entry-page-text-sheet.d.mts";
+
+/**
+ * An Application responsible for displaying a single text-type JournalEntryPage Document, and editing it with a Markdown editor.
+ */
+declare class JournalEntryPageMarkdownSheet<
+  RenderContext extends JournalEntryPageMarkdownSheet.RenderContext = JournalEntryPageMarkdownSheet.RenderContext,
+  Configuration extends JournalEntryPageSheet.Configuration = JournalEntryPageSheet.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends JournalEntryPageTextSheet<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace JournalEntryPageMarkdownSheet {
+  interface RenderContext extends JournalEntryPageTextSheet.RenderContext {}
+}
+
+export default JournalEntryPageMarkdownSheet;
diff --git a/src/foundry/client-esm/applications/sheets/journal/journal-entry-page-pdf-sheet.d.mts b/src/foundry/client-esm/applications/sheets/journal/journal-entry-page-pdf-sheet.d.mts
new file mode 100644
index 000000000..893749dc2
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/journal/journal-entry-page-pdf-sheet.d.mts
@@ -0,0 +1,18 @@
+import type DocumentSheetV2 from "../../api/document-sheet.d.mts";
+import type JournalEntryPageHandlebarsSheet from "./journal-entry-page-hbs-sheet.d.mts";
+import type JournalEntryPageSheet from "./journal-entry-page-sheet.d.mts";
+
+/**
+ * An Application responsible for displaying and editing a single pdf-type JournalEntryPage Document.
+ */
+declare class JournalEntryPagePDFSheet<
+  RenderContext extends JournalEntryPagePDFSheet.RenderContext = JournalEntryPagePDFSheet.RenderContext,
+  Configuration extends JournalEntryPageSheet.Configuration = JournalEntryPageSheet.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends JournalEntryPageHandlebarsSheet<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace JournalEntryPagePDFSheet {
+  interface RenderContext extends JournalEntryPageHandlebarsSheet.RenderContext {}
+}
+
+export default JournalEntryPagePDFSheet;
diff --git a/src/foundry/client-esm/applications/sheets/journal/journal-entry-page-prose-mirror-sheet.d.mts b/src/foundry/client-esm/applications/sheets/journal/journal-entry-page-prose-mirror-sheet.d.mts
new file mode 100644
index 000000000..bcf8f4c6c
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/journal/journal-entry-page-prose-mirror-sheet.d.mts
@@ -0,0 +1,18 @@
+import type DocumentSheetV2 from "../../api/document-sheet.d.mts";
+import type JournalEntryPageSheet from "./journal-entry-page-sheet.d.mts";
+import type JournalEntryPageTextSheet from "./journal-entry-page-text-sheet.d.mts";
+
+/**
+ * An Application responsible for displaying a single text-type JournalEntryPage Document, and editing it with a ProseMirror editor.
+ */
+declare class JournalEntryPageProseMirrorSheet<
+  RenderContext extends JournalEntryPageProseMirrorSheet.RenderContext = JournalEntryPageProseMirrorSheet.RenderContext,
+  Configuration extends JournalEntryPageSheet.Configuration = JournalEntryPageSheet.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends JournalEntryPageTextSheet<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace JournalEntryPageProseMirrorSheet {
+  interface RenderContext extends JournalEntryPageTextSheet.RenderContext {}
+}
+
+export default JournalEntryPageProseMirrorSheet;
diff --git a/src/foundry/client-esm/applications/sheets/journal/journal-entry-page-sheet.d.mts b/src/foundry/client-esm/applications/sheets/journal/journal-entry-page-sheet.d.mts
new file mode 100644
index 000000000..70edb91a2
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/journal/journal-entry-page-sheet.d.mts
@@ -0,0 +1,28 @@
+import type DocumentSheetV2 from "../../api/document-sheet.d.mts";
+
+/**
+ * An abstract Application responsible for displaying and editing a single JournalEntryPage Document.
+ * @remarks TODO: Stub
+ */
+declare class JournalEntryPageSheet<
+  RenderContext extends JournalEntryPageSheet.RenderContext = JournalEntryPageSheet.RenderContext,
+  Configuration extends JournalEntryPageSheet.Configuration = JournalEntryPageSheet.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends DocumentSheetV2<JournalEntryPage.ConfiguredInstance, RenderContext, Configuration, RenderOptions> {}
+
+declare namespace JournalEntryPageSheet {
+  interface RenderContext extends DocumentSheetV2.RenderContext<JournalEntryPage.ConfiguredInstance> {}
+
+  interface Configuration extends DocumentSheetV2.Configuration<JournalEntryPage.ConfiguredInstance> {
+    /** Whether the sheet includes additional table of contents elements besides its title. */
+    includeTOC: boolean;
+
+    /** Whether the sheet is in edit or view mode. */
+    mode: "edit" | "view";
+
+    /** Classes appended to the page's root element when embedded in another sheet in view mode. */
+    viewClasses: string[];
+  }
+}
+
+export default JournalEntryPageSheet;
diff --git a/src/foundry/client-esm/applications/sheets/journal/journal-entry-page-text-sheet.d.mts b/src/foundry/client-esm/applications/sheets/journal/journal-entry-page-text-sheet.d.mts
new file mode 100644
index 000000000..680f1c6bd
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/journal/journal-entry-page-text-sheet.d.mts
@@ -0,0 +1,18 @@
+import type DocumentSheetV2 from "../../api/document-sheet.d.mts";
+import type JournalEntryPageHandlebarsSheet from "./journal-entry-page-hbs-sheet.d.mts";
+import type JournalEntryPageSheet from "./journal-entry-page-sheet.d.mts";
+
+/**
+ * An abstract Application responsible for displaying and editing a single text-type JournalEntryPage Document.
+ */
+declare class JournalEntryPageTextSheet<
+  RenderContext extends JournalEntryPageTextSheet.RenderContext = JournalEntryPageTextSheet.RenderContext,
+  Configuration extends JournalEntryPageSheet.Configuration = JournalEntryPageSheet.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends JournalEntryPageHandlebarsSheet<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace JournalEntryPageTextSheet {
+  interface RenderContext extends JournalEntryPageHandlebarsSheet.RenderContext {}
+}
+
+export default JournalEntryPageTextSheet;
diff --git a/src/foundry/client-esm/applications/sheets/journal/journal-entry-page-video-sheet.d.mts b/src/foundry/client-esm/applications/sheets/journal/journal-entry-page-video-sheet.d.mts
new file mode 100644
index 000000000..2c322a0c0
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/journal/journal-entry-page-video-sheet.d.mts
@@ -0,0 +1,18 @@
+import type DocumentSheetV2 from "../../api/document-sheet.d.mts";
+import type JournalEntryPageHandlebarsSheet from "./journal-entry-page-hbs-sheet.d.mts";
+import type JournalEntryPageSheet from "./journal-entry-page-sheet.d.mts";
+
+/**
+ * An Application responsible for displaying and editing a single video-type JournalEntryPage Document.
+ */
+declare class JournalEntryPageVideoSheet<
+  RenderContext extends JournalEntryPageVideoSheet.RenderContext = JournalEntryPageVideoSheet.RenderContext,
+  Configuration extends JournalEntryPageSheet.Configuration = JournalEntryPageSheet.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends JournalEntryPageHandlebarsSheet<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace JournalEntryPageVideoSheet {
+  interface RenderContext extends JournalEntryPageHandlebarsSheet.RenderContext {}
+}
+
+export default JournalEntryPageVideoSheet;
diff --git a/src/foundry/client-esm/applications/sheets/journal/journal-entry-sheet.d.mts b/src/foundry/client-esm/applications/sheets/journal/journal-entry-sheet.d.mts
new file mode 100644
index 000000000..97ff1db07
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/journal/journal-entry-sheet.d.mts
@@ -0,0 +1,35 @@
+import type DocumentSheetV2 from "../../api/document-sheet.d.mts";
+import type HandlebarsApplicationMixin from "../../api/handlebars-application.d.mts";
+
+/**
+ * The Application responsible for displaying and editing a single JournalEntry Document.
+ * @remarks TODO: Stub
+ */
+declare class JournalEntrySheet<
+  RenderContext extends JournalEntrySheet.RenderContext = JournalEntrySheet.RenderContext,
+  Configuration extends JournalEntrySheet.Configuration = JournalEntrySheet.Configuration,
+  RenderOptions extends JournalEntrySheet.RenderOptions = JournalEntrySheet.RenderOptions,
+> extends HandlebarsApplicationMixin(DocumentSheetV2)<
+  JournalEntry.ConfiguredInstance,
+  RenderContext,
+  Configuration,
+  RenderOptions
+> {}
+
+declare namespace JournalEntrySheet {
+  interface RenderContext extends DocumentSheetV2.RenderContext<JournalEntry.ConfiguredInstance> {}
+
+  interface Configuration extends DocumentSheetV2.Configuration<JournalEntry.ConfiguredInstance> {}
+
+  interface RenderOptions extends DocumentSheetV2.RenderOptions {}
+
+  interface CategoryContext {
+    /** The category ID. */
+    id: string;
+
+    /** The category name. */
+    name: string;
+  }
+}
+
+export default JournalEntrySheet;
diff --git a/src/foundry/client-esm/applications/sheets/macro-config.d.mts b/src/foundry/client-esm/applications/sheets/macro-config.d.mts
new file mode 100644
index 000000000..d1f2e5c43
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/macro-config.d.mts
@@ -0,0 +1,25 @@
+import type DocumentSheetV2 from "../api/document-sheet.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * A Macro configuration sheet
+ * @remarks TODO: Stub
+ */
+declare class MacroConfig<
+  RenderContext extends MacroConfig.RenderContext = MacroConfig.RenderContext,
+  Configuration extends MacroConfig.Configuration = MacroConfig.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends HandlebarsApplicationMixin(DocumentSheetV2)<
+  Macro.ConfiguredInstance,
+  RenderContext,
+  Configuration,
+  RenderOptions
+> {}
+
+declare namespace MacroConfig {
+  interface RenderContext extends DocumentSheetV2.RenderContext<Macro.ConfiguredInstance> {}
+
+  interface Configuration extends DocumentSheetV2.Configuration<Macro.ConfiguredInstance> {}
+}
+
+export default MacroConfig;
diff --git a/src/foundry/client-esm/applications/sheets/note-config.d.mts b/src/foundry/client-esm/applications/sheets/note-config.d.mts
new file mode 100644
index 000000000..9cd849abb
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/note-config.d.mts
@@ -0,0 +1,25 @@
+import type DocumentSheetV2 from "../api/document-sheet.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * The Application responsible for configuring a single Note document within a parent Scene.
+ * @remarks TODO: Stub
+ */
+declare class NoteConfig<
+  RenderContext extends NoteConfig.RenderContext = NoteConfig.RenderContext,
+  Configuration extends NoteConfig.Configuration = NoteConfig.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends HandlebarsApplicationMixin(DocumentSheetV2)<
+  NoteDocument.ConfiguredInstance,
+  RenderContext,
+  Configuration,
+  RenderOptions
+> {}
+
+declare namespace NoteConfig {
+  interface RenderContext extends DocumentSheetV2.RenderContext<NoteDocument.ConfiguredInstance> {}
+
+  interface Configuration extends DocumentSheetV2.Configuration<NoteDocument.ConfiguredInstance> {}
+}
+
+export default NoteConfig;
diff --git a/src/foundry/client-esm/applications/sheets/playlist-config.d.mts b/src/foundry/client-esm/applications/sheets/playlist-config.d.mts
new file mode 100644
index 000000000..281ba4ea9
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/playlist-config.d.mts
@@ -0,0 +1,25 @@
+import type DocumentSheetV2 from "../api/document-sheet.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * The Application responsible for configuring a single Playlist document
+ * @remarks TODO: Stub
+ */
+declare class PlaylistConfig<
+  RenderContext extends PlaylistConfig.RenderContext = PlaylistConfig.RenderContext,
+  Configuration extends PlaylistConfig.Configuration = PlaylistConfig.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends HandlebarsApplicationMixin(DocumentSheetV2)<
+  Playlist.ConfiguredInstance,
+  RenderContext,
+  Configuration,
+  RenderOptions
+> {}
+
+declare namespace PlaylistConfig {
+  interface RenderContext extends DocumentSheetV2.RenderContext<Playlist.ConfiguredInstance> {}
+
+  interface Configuration extends DocumentSheetV2.Configuration<Playlist.ConfiguredInstance> {}
+}
+
+export default PlaylistConfig;
diff --git a/src/foundry/client-esm/applications/sheets/playlist-sound-config.d.mts b/src/foundry/client-esm/applications/sheets/playlist-sound-config.d.mts
new file mode 100644
index 000000000..47a6f1cd1
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/playlist-sound-config.d.mts
@@ -0,0 +1,25 @@
+import type DocumentSheetV2 from "../api/document-sheet.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * The Application responsible for configuring a single PlaylistSound document within a parent Playlist.
+ * @remarks TODO: Stub
+ */
+declare class PlaylistSoundConfig<
+  RenderContext extends PlaylistSoundConfig.RenderContext = PlaylistSoundConfig.RenderContext,
+  Configuration extends PlaylistSoundConfig.Configuration = PlaylistSoundConfig.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends HandlebarsApplicationMixin(DocumentSheetV2)<
+  Playlist.ConfiguredInstance,
+  RenderContext,
+  Configuration,
+  RenderOptions
+> {}
+
+declare namespace PlaylistSoundConfig {
+  interface RenderContext extends DocumentSheetV2.RenderContext<Playlist.ConfiguredInstance> {}
+
+  interface Configuration extends DocumentSheetV2.Configuration<Playlist.ConfiguredInstance> {}
+}
+
+export default PlaylistSoundConfig;
diff --git a/src/foundry/client-esm/applications/sheets/roll-table-config.d.mts b/src/foundry/client-esm/applications/sheets/roll-table-config.d.mts
new file mode 100644
index 000000000..4410e5d38
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/roll-table-config.d.mts
@@ -0,0 +1,25 @@
+import type DocumentSheetV2 from "../api/document-sheet.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * The Application responsible for displaying and editing a single RollTable document.
+ * @remarks TODO: Stub
+ */
+declare class RollTableConfig<
+  RenderContext extends RollTableConfig.RenderContext = RollTableConfig.RenderContext,
+  Configuration extends RollTableConfig.Configuration = RollTableConfig.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends HandlebarsApplicationMixin(DocumentSheetV2)<
+  RollTable.ConfiguredInstance,
+  RenderContext,
+  Configuration,
+  RenderOptions
+> {}
+
+declare namespace RollTableConfig {
+  interface RenderContext extends DocumentSheetV2.RenderContext<RollTable.ConfiguredInstance> {}
+
+  interface Configuration extends DocumentSheetV2.Configuration<RollTable.ConfiguredInstance> {}
+}
+
+export default RollTableConfig;
diff --git a/src/foundry/client-esm/applications/sheets/roll-table-sheet.d.mts b/src/foundry/client-esm/applications/sheets/roll-table-sheet.d.mts
new file mode 100644
index 000000000..878ba0c45
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/roll-table-sheet.d.mts
@@ -0,0 +1,25 @@
+import type DocumentSheetV2 from "../api/document-sheet.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * The Application responsible for editing, displaying, and using a single RollTable document.
+ * @remarks TODO: Stub
+ */
+declare class RollTableSheet<
+  RenderContext extends RollTableSheet.RenderContext = RollTableSheet.RenderContext,
+  Configuration extends RollTableSheet.Configuration = RollTableSheet.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends HandlebarsApplicationMixin(DocumentSheetV2)<
+  RollTable.ConfiguredInstance,
+  RenderContext,
+  Configuration,
+  RenderOptions
+> {}
+
+declare namespace RollTableSheet {
+  interface RenderContext extends DocumentSheetV2.RenderContext<RollTable.ConfiguredInstance> {}
+
+  interface Configuration extends DocumentSheetV2.Configuration<RollTable.ConfiguredInstance> {}
+}
+
+export default RollTableSheet;
diff --git a/src/foundry/client-esm/applications/sheets/scene-config.d.mts b/src/foundry/client-esm/applications/sheets/scene-config.d.mts
new file mode 100644
index 000000000..1d9cd8838
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/scene-config.d.mts
@@ -0,0 +1,25 @@
+import type DocumentSheetV2 from "../api/document-sheet.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * The Application responsible for configuring a single Scene document.
+ * @remarks TODO: Stub
+ */
+declare class SceneConfig<
+  RenderContext extends SceneConfig.RenderContext = SceneConfig.RenderContext,
+  Configuration extends SceneConfig.Configuration = SceneConfig.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends HandlebarsApplicationMixin(DocumentSheetV2)<
+  Scene.ConfiguredInstance,
+  RenderContext,
+  Configuration,
+  RenderOptions
+> {}
+
+declare namespace SceneConfig {
+  interface RenderContext extends DocumentSheetV2.RenderContext<Scene.ConfiguredInstance> {}
+
+  interface Configuration extends DocumentSheetV2.Configuration<Scene.ConfiguredInstance> {}
+}
+
+export default SceneConfig;
diff --git a/src/foundry/client-esm/applications/sheets/table-result-config.d.mts b/src/foundry/client-esm/applications/sheets/table-result-config.d.mts
new file mode 100644
index 000000000..887aa09f9
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/table-result-config.d.mts
@@ -0,0 +1,25 @@
+import type DocumentSheetV2 from "../api/document-sheet.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * A TableResult configuration sheet
+ * @remarks TODO: Stub
+ */
+declare class TableResultConfig<
+  RenderContext extends TableResultConfig.RenderContext = TableResultConfig.RenderContext,
+  Configuration extends TableResultConfig.Configuration = TableResultConfig.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends HandlebarsApplicationMixin(DocumentSheetV2)<
+  TableResult.ConfiguredInstance,
+  RenderContext,
+  Configuration,
+  RenderOptions
+> {}
+
+declare namespace TableResultConfig {
+  interface RenderContext extends DocumentSheetV2.RenderContext<TableResult.ConfiguredInstance> {}
+
+  interface Configuration extends DocumentSheetV2.Configuration<TableResult.ConfiguredInstance> {}
+}
+
+export default TableResultConfig;
diff --git a/src/foundry/client-esm/applications/sheets/template-config.d.mts b/src/foundry/client-esm/applications/sheets/template-config.d.mts
new file mode 100644
index 000000000..71386a5f3
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/template-config.d.mts
@@ -0,0 +1,25 @@
+import type DocumentSheetV2 from "../api/document-sheet.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * The Application responsible for configuring a single MeasuredTemplate document within a parent Scene.
+ * @remarks TODO: Stub
+ */
+declare class MeasuredTemplateConfig<
+  RenderContext extends MeasuredTemplateConfig.RenderContext = MeasuredTemplateConfig.RenderContext,
+  Configuration extends MeasuredTemplateConfig.Configuration = MeasuredTemplateConfig.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends HandlebarsApplicationMixin(DocumentSheetV2)<
+  MeasuredTemplateDocument.ConfiguredInstance,
+  RenderContext,
+  Configuration,
+  RenderOptions
+> {}
+
+declare namespace MeasuredTemplateConfig {
+  interface RenderContext extends DocumentSheetV2.RenderContext<MeasuredTemplateDocument.ConfiguredInstance> {}
+
+  interface Configuration extends DocumentSheetV2.Configuration<MeasuredTemplateDocument.ConfiguredInstance> {}
+}
+
+export default MeasuredTemplateConfig;
diff --git a/src/foundry/client-esm/applications/sheets/tile-config.d.mts b/src/foundry/client-esm/applications/sheets/tile-config.d.mts
new file mode 100644
index 000000000..b244d28e1
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/tile-config.d.mts
@@ -0,0 +1,25 @@
+import type DocumentSheetV2 from "../api/document-sheet.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * The Application responsible for configuring a single Tile document within a parent Scene.
+ * @remarks TODO: Stub
+ */
+declare class TileConfig<
+  RenderContext extends TileConfig.RenderContext = TileConfig.RenderContext,
+  Configuration extends TileConfig.Configuration = TileConfig.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends HandlebarsApplicationMixin(DocumentSheetV2)<
+  TileDocument.ConfiguredInstance,
+  RenderContext,
+  Configuration,
+  RenderOptions
+> {}
+
+declare namespace TileConfig {
+  interface RenderContext extends DocumentSheetV2.RenderContext<TileDocument.ConfiguredInstance> {}
+
+  interface Configuration extends DocumentSheetV2.Configuration<TileDocument.ConfiguredInstance> {}
+}
+
+export default TileConfig;
diff --git a/src/foundry/client-esm/applications/sheets/token/_module.d.mts b/src/foundry/client-esm/applications/sheets/token/_module.d.mts
new file mode 100644
index 000000000..b09507b4b
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/token/_module.d.mts
@@ -0,0 +1,7 @@
+// In Foundry itself this file contains re-exports of these other modules.
+// Therefore it has a runtime effect and uses `.mjs` instead of `.d.mts`.
+// While `.mts` could work, to avoid `import/no-unresolved` from erroring `.mjs` is used.
+/* eslint-disable import-x/extensions */
+
+export { default as PrototypeTokenConfig } from "./prototype-config.mjs";
+export { default as TokenConfig } from "./token-config.mjs";
diff --git a/src/foundry/client-esm/applications/sheets/token/mixin.d.mts b/src/foundry/client-esm/applications/sheets/token/mixin.d.mts
new file mode 100644
index 000000000..6925da131
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/token/mixin.d.mts
@@ -0,0 +1,27 @@
+import type { FixedInstanceType, Mixin } from "fvtt-types/utils";
+import type ApplicationV2 from "../../api/application.d.mts";
+
+/**
+ * @remarks This does NOT exist at runtime. This is only here to be used as a type when relevant as well as to avoid
+ * issues with anonymous mixin classes.
+ */
+declare class TokenApplication {
+  /** @privateRemarks All mixin classses should accept anything for its constructor. */
+  constructor(...args: any[]);
+}
+
+/**
+ * A mixin for UI shared between TokenDocument and PrototypeToken sheets
+ */
+declare function TokenApplicationMixin<BaseClass extends TokenApplicationMixin.BaseClass>(
+  BaseApplication: BaseClass,
+): Mixin<typeof TokenApplication, BaseClass>;
+
+declare namespace TokenApplicationMixin {
+  type AnyMixedConstructor = ReturnType<typeof TokenApplicationMixin<BaseClass>>;
+  interface AnyMixed extends FixedInstanceType<AnyMixedConstructor> {}
+
+  type BaseClass = ApplicationV2.Internal.Constructor;
+}
+
+export default TokenApplicationMixin;
diff --git a/src/foundry/client-esm/applications/sheets/token/prototype-config.d.mts b/src/foundry/client-esm/applications/sheets/token/prototype-config.d.mts
new file mode 100644
index 000000000..71eaf51c2
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/token/prototype-config.d.mts
@@ -0,0 +1,18 @@
+import type ApplicationV2 from "../../api/application.d.mts";
+import type TokenApplicationMixin from "./mixin.d.mts";
+
+/**
+ * The Application responsible for configuring an actor's PrototypeToken
+ * @remarks TODO: Stub
+ */
+declare class PrototypeTokenConfig<
+  RenderContext extends PrototypeTokenConfig.RenderContext = PrototypeTokenConfig.RenderContext,
+  Configuration extends ApplicationV2.Configuration = ApplicationV2.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends TokenApplicationMixin(ApplicationV2)<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace PrototypeTokenConfig {
+  interface RenderContext extends ApplicationV2.RenderContext {}
+}
+
+export default PrototypeTokenConfig;
diff --git a/src/foundry/client-esm/applications/sheets/token/token-config.d.mts b/src/foundry/client-esm/applications/sheets/token/token-config.d.mts
new file mode 100644
index 000000000..a09e76db4
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/token/token-config.d.mts
@@ -0,0 +1,25 @@
+import type DocumentSheetV2 from "../../api/document-sheet.d.mts";
+import type TokenApplicationMixin from "./mixin.d.mts";
+
+/**
+ * The Application responsible for configuring a single token document within a parent Scene
+ * @remarks TODO: Stub
+ */
+declare class TokenConfig<
+  RenderContext extends TokenConfig.RenderContext = TokenConfig.RenderContext,
+  Configuration extends TokenConfig.Configuration = TokenConfig.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends TokenApplicationMixin(DocumentSheetV2)<
+  TokenDocument.ConfiguredInstance,
+  RenderContext,
+  Configuration,
+  RenderOptions
+> {}
+
+declare namespace TokenConfig {
+  interface RenderContext extends DocumentSheetV2.RenderContext<TokenDocument.ConfiguredInstance> {}
+
+  interface Configuration extends DocumentSheetV2.Configuration<TokenDocument.ConfiguredInstance> {}
+}
+
+export default TokenConfig;
diff --git a/src/foundry/client-esm/applications/sheets/wall-config.d.mts b/src/foundry/client-esm/applications/sheets/wall-config.d.mts
new file mode 100644
index 000000000..42da1fca5
--- /dev/null
+++ b/src/foundry/client-esm/applications/sheets/wall-config.d.mts
@@ -0,0 +1,25 @@
+import type DocumentSheetV2 from "../api/document-sheet.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * The Application responsible for configuring a single Wall document within a parent Scene.
+ * @remarks TODO: Stub
+ */
+declare class WallConfig<
+  RenderContext extends WallConfig.RenderContext = WallConfig.RenderContext,
+  Configuration extends WallConfig.Configuration = WallConfig.Configuration,
+  RenderOptions extends DocumentSheetV2.RenderOptions = DocumentSheetV2.RenderOptions,
+> extends HandlebarsApplicationMixin(DocumentSheetV2)<
+  WallDocument.ConfiguredInstance,
+  RenderContext,
+  Configuration,
+  RenderOptions
+> {}
+
+declare namespace WallConfig {
+  interface RenderContext extends DocumentSheetV2.RenderContext<WallDocument.ConfiguredInstance> {}
+
+  interface Configuration extends DocumentSheetV2.Configuration<WallDocument.ConfiguredInstance> {}
+}
+
+export default WallConfig;
diff --git a/src/foundry/client-esm/applications/sidebar/_module.d.mts b/src/foundry/client-esm/applications/sidebar/_module.d.mts
new file mode 100644
index 000000000..1a58ae806
--- /dev/null
+++ b/src/foundry/client-esm/applications/sidebar/_module.d.mts
@@ -0,0 +1,10 @@
+// In Foundry itself this file contains re-exports of these other modules.
+// Therefore it has a runtime effect and uses `.mjs` instead of `.d.mts`.
+// While `.mts` could work, to avoid `import/no-unresolved` from erroring `.mjs` is used.
+/* eslint-disable import-x/extensions */
+
+export * as apps from "./apps/_module.mjs";
+export * as tabs from "./tabs/_module.mjs";
+export { default as Sidebar } from "./sidebar.mjs";
+export { default as AbstractSidebarTab } from "./sidebar-tab.mjs";
+export { default as DocumentDirectory } from "./document-directory.mjs";
diff --git a/src/foundry/client-esm/applications/sidebar/apps/_module.d.mts b/src/foundry/client-esm/applications/sidebar/apps/_module.d.mts
new file mode 100644
index 000000000..dfcb2a469
--- /dev/null
+++ b/src/foundry/client-esm/applications/sidebar/apps/_module.d.mts
@@ -0,0 +1,11 @@
+// In Foundry itself this file contains re-exports of these other modules.
+// Therefore it has a runtime effect and uses `.mjs` instead of `.d.mts`.
+// While `.mts` could work, to avoid `import/no-unresolved` from erroring `.mjs` is used.
+/* eslint-disable import-x/extensions */
+
+export { default as ChatPopout } from "./chat-popout.mjs";
+export { default as Compendium } from "./compendium.mjs";
+export { default as FolderExport } from "./folder-export.mjs";
+export { default as FrameViewer } from "./frame-viewer.mjs";
+export { default as InvitationLinks } from "./invitation-links.mjs";
+export { default as SupportDetails } from "./support-details.mjs";
diff --git a/src/foundry/client-esm/applications/sidebar/apps/chat-popout.d.mts b/src/foundry/client-esm/applications/sidebar/apps/chat-popout.d.mts
new file mode 100644
index 000000000..ed3a4ba06
--- /dev/null
+++ b/src/foundry/client-esm/applications/sidebar/apps/chat-popout.d.mts
@@ -0,0 +1,22 @@
+import type ApplicationV2 from "../../api/application.mjs";
+
+/**
+ * A simple application for rendering a single chat message in its own frame.
+ * @remarks TODO: Stub
+ */
+declare class ChatPopout<
+  RenderContext extends ChatPopout.RenderContext = ChatPopout.RenderContext,
+  Configuration extends ChatPopout.Configuration = ChatPopout.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends ApplicationV2<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace ChatPopout {
+  interface RenderContext extends ApplicationV2.RenderContext {}
+
+  interface Configuration extends ApplicationV2.Configuration {
+    /** The message being rendered. */
+    message: ChatMessage.ConfiguredInstance;
+  }
+}
+
+export default ChatPopout;
diff --git a/src/foundry/client-esm/applications/sidebar/apps/compendium.d.mts b/src/foundry/client-esm/applications/sidebar/apps/compendium.d.mts
new file mode 100644
index 000000000..2e582e5ba
--- /dev/null
+++ b/src/foundry/client-esm/applications/sidebar/apps/compendium.d.mts
@@ -0,0 +1,21 @@
+import type ApplicationV2 from "../../api/application.d.mts";
+import type DocumentDirectory from "../document-directory.d.mts";
+
+/**
+ * An Application that displays the indexed contents of a Compendium pack.
+ * @remarks TODO: Stub
+ */
+declare class Compendium<
+  DocumentClass extends foundry.abstract.Document.AnyConstructor = foundry.abstract.Document.AnyConstructor,
+  RenderContext extends Compendium.RenderContext = Compendium.RenderContext,
+  Configuration extends Compendium.Configuration = Compendium.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends DocumentDirectory<DocumentClass, RenderContext, Configuration, RenderOptions> {}
+
+declare namespace Compendium {
+  interface RenderContext extends DocumentDirectory.RenderContext {}
+
+  interface Configuration extends DocumentDirectory.Configuration {}
+}
+
+export default Compendium;
diff --git a/src/foundry/client-esm/applications/sidebar/apps/folder-export.d.mts b/src/foundry/client-esm/applications/sidebar/apps/folder-export.d.mts
new file mode 100644
index 000000000..ffea4e020
--- /dev/null
+++ b/src/foundry/client-esm/applications/sidebar/apps/folder-export.d.mts
@@ -0,0 +1,18 @@
+import type { EmptyObject } from "fvtt-types/utils";
+import type ApplicationV2 from "../../api/application.d.mts";
+import type DialogV2 from "../../api/dialog.d.mts";
+
+/**
+ * A Dialog subclass that allows the user to configure export options for a Folder
+ */
+declare class FolderExport<
+  RenderContext extends object = EmptyObject,
+  Configuration extends DialogV2.Configuration = DialogV2.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends DialogV2<RenderContext, Configuration, RenderOptions> {
+  #private: true;
+}
+
+declare namespace FolderExport {}
+
+export default FolderExport;
diff --git a/src/foundry/client-esm/applications/sidebar/apps/frame-viewer.d.mts b/src/foundry/client-esm/applications/sidebar/apps/frame-viewer.d.mts
new file mode 100644
index 000000000..9a238d1cb
--- /dev/null
+++ b/src/foundry/client-esm/applications/sidebar/apps/frame-viewer.d.mts
@@ -0,0 +1,22 @@
+import type ApplicationV2 from "../../api/application.mjs";
+
+/**
+ * A simple window application which shows the built documentation pages within an iframe
+ * @remarks TODO: Stub
+ */
+declare class FrameViewer<
+  RenderContext extends FrameViewer.RenderContext = FrameViewer.RenderContext,
+  Configuration extends FrameViewer.Configuration = FrameViewer.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends ApplicationV2<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace FrameViewer {
+  interface RenderContext extends ApplicationV2.RenderContext {}
+
+  interface Configuration extends ApplicationV2.Configuration {
+    /** The initial URL to navigate to */
+    url: string;
+  }
+}
+
+export default FrameViewer;
diff --git a/src/foundry/client-esm/applications/sidebar/apps/invitation-links.d.mts b/src/foundry/client-esm/applications/sidebar/apps/invitation-links.d.mts
new file mode 100644
index 000000000..865a467c9
--- /dev/null
+++ b/src/foundry/client-esm/applications/sidebar/apps/invitation-links.d.mts
@@ -0,0 +1,17 @@
+import type ApplicationV2 from "../../api/application.d.mts";
+import type HandlebarsApplicationMixin from "../../api/handlebars-application.d.mts";
+
+/**
+ * @remarks TODO: Stub
+ */
+declare class InvitationLinks<
+  RenderContext extends InvitationLinks.RenderContext = InvitationLinks.RenderContext,
+  Configuration extends ApplicationV2.Configuration = ApplicationV2.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends HandlebarsApplicationMixin(ApplicationV2)<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace InvitationLinks {
+  interface RenderContext extends ApplicationV2.RenderContext {}
+}
+
+export default InvitationLinks;
diff --git a/src/foundry/client-esm/applications/sidebar/apps/support-details.d.mts b/src/foundry/client-esm/applications/sidebar/apps/support-details.d.mts
new file mode 100644
index 000000000..fd75f31ea
--- /dev/null
+++ b/src/foundry/client-esm/applications/sidebar/apps/support-details.d.mts
@@ -0,0 +1,17 @@
+import type ApplicationV2 from "../../api/application.d.mts";
+import type HandlebarsApplicationMixin from "../../api/handlebars-application.d.mts";
+
+/**
+ * @remarks TODO: Stub
+ */
+declare class SupportDetails<
+  RenderContext extends SupportDetails.RenderContext = SupportDetails.RenderContext,
+  Configuration extends ApplicationV2.Configuration = ApplicationV2.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends HandlebarsApplicationMixin(ApplicationV2)<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace SupportDetails {
+  interface RenderContext extends ApplicationV2.RenderContext {}
+}
+
+export default SupportDetails;
diff --git a/src/foundry/client-esm/applications/sidebar/document-directory.d.mts b/src/foundry/client-esm/applications/sidebar/document-directory.d.mts
new file mode 100644
index 000000000..8243388a6
--- /dev/null
+++ b/src/foundry/client-esm/applications/sidebar/document-directory.d.mts
@@ -0,0 +1,30 @@
+import type ApplicationV2 from "../api/application.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+import type AbstractSidebarTab from "./sidebar-tab.d.mts";
+
+/**
+ * An abstract class for rendering a foldered directory of Documents.
+ * @remarks TODO: Stub
+ */
+declare class DocumentDirectory<
+  DocumentClass extends foundry.abstract.Document.AnyConstructor = foundry.abstract.Document.AnyConstructor,
+  RenderContext extends DocumentDirectory.RenderContext = DocumentDirectory.RenderContext,
+  Configuration extends DocumentDirectory.Configuration = DocumentDirectory.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends HandlebarsApplicationMixin(AbstractSidebarTab)<RenderContext, Configuration, RenderOptions> {
+  get documentClass(): DocumentClass;
+}
+
+declare namespace DocumentDirectory {
+  interface RenderContext extends AbstractSidebarTab.RenderContext {}
+
+  interface Configuration extends ApplicationV2.Configuration {
+    /** The Document collection that this directory represents. */
+    collection: DirectoryApplicationMixin.AnyMixed;
+
+    /** Updating one of these properties of a displayed Document will trigger a re-render of the tab. */
+    renderUpdateKeys: string[];
+  }
+}
+
+export default DocumentDirectory;
diff --git a/src/foundry/client-esm/applications/sidebar/sidebar-tab.d.mts b/src/foundry/client-esm/applications/sidebar/sidebar-tab.d.mts
new file mode 100644
index 000000000..df3f6c29a
--- /dev/null
+++ b/src/foundry/client-esm/applications/sidebar/sidebar-tab.d.mts
@@ -0,0 +1,19 @@
+import type ApplicationV2 from "../api/application.d.mts";
+
+/**
+ * The sidebar tab interface that allows any sidebar tab to also be rendered as a popout.
+ * @remarks TODO: Stub
+ */
+declare class AbstractSidebarTab<
+  RenderContext extends AbstractSidebarTab.RenderContext = AbstractSidebarTab.RenderContext,
+  Configuration extends ApplicationV2.Configuration = ApplicationV2.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends ApplicationV2<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace AbstractSidebarTab {
+  interface RenderContext extends ApplicationV2.RenderContext {
+    user: User.ConfiguredInstance;
+  }
+}
+
+export default AbstractSidebarTab;
diff --git a/src/foundry/client-esm/applications/sidebar/sidebar.d.mts b/src/foundry/client-esm/applications/sidebar/sidebar.d.mts
new file mode 100644
index 000000000..c7400ed7c
--- /dev/null
+++ b/src/foundry/client-esm/applications/sidebar/sidebar.d.mts
@@ -0,0 +1,18 @@
+import type ApplicationV2 from "../api/application.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * The main sidebar application.
+ * @remarks TODO: Stub
+ */
+declare class Sidebar<
+  RenderContext extends Sidebar.RenderContext = Sidebar.RenderContext,
+  Configuration extends ApplicationV2.Configuration = ApplicationV2.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends HandlebarsApplicationMixin(ApplicationV2)<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace Sidebar {
+  interface RenderContext extends ApplicationV2.RenderContext {}
+}
+
+export default Sidebar;
diff --git a/src/foundry/client-esm/applications/sidebar/tabs/_module.d.mts b/src/foundry/client-esm/applications/sidebar/tabs/_module.d.mts
new file mode 100644
index 000000000..01d381f57
--- /dev/null
+++ b/src/foundry/client-esm/applications/sidebar/tabs/_module.d.mts
@@ -0,0 +1,17 @@
+// In Foundry itself this file contains re-exports of these other modules.
+// Therefore it has a runtime effect and uses `.mjs` instead of `.d.mts`.
+// While `.mts` could work, to avoid `import/no-unresolved` from erroring `.mjs` is used.
+/* eslint-disable import-x/extensions */
+
+export { default as ActorDirectory } from "./actor-directory.mjs";
+export { default as CardsDirectory } from "./cards-directory.mjs";
+export { default as ChatLog } from "./chat.mjs";
+export { default as CombatTracker } from "./combat-tracker.mjs";
+export { default as CompendiumDirectory } from "./compendium-directory.mjs";
+export { default as ItemDirectory } from "./item-directory.mjs";
+export { default as JournalDirectory } from "./journal-directory.mjs";
+export { default as MacroDirectory } from "./macro-directory.mjs";
+export { default as PlaylistDirectory } from "./playlist-directory.mjs";
+export { default as RollTableDirectory } from "./roll-table-directory.mjs";
+export { default as SceneDirectory } from "./scene-directory.mjs";
+export { default as Settings } from "./settings.mjs";
diff --git a/src/foundry/client-esm/applications/sidebar/tabs/actor-directory.d.mts b/src/foundry/client-esm/applications/sidebar/tabs/actor-directory.d.mts
new file mode 100644
index 000000000..ec56cdb29
--- /dev/null
+++ b/src/foundry/client-esm/applications/sidebar/tabs/actor-directory.d.mts
@@ -0,0 +1,20 @@
+import type ApplicationV2 from "../../api/application.d.mts";
+import type DocumentDirectory from "../document-directory.d.mts";
+
+/**
+ * The World Actor directory listing.
+ * @remarks TODO: Stub
+ */
+declare class ActorDirectory<
+  RenderContext extends ActorDirectory.RenderContext = ActorDirectory.RenderContext,
+  Configuration extends ActorDirectory.Configuration = ActorDirectory.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends DocumentDirectory<Actor.ConfiguredClass, RenderContext, Configuration, RenderOptions> {}
+
+declare namespace ActorDirectory {
+  interface RenderContext extends DocumentDirectory.RenderContext {}
+
+  interface Configuration extends DocumentDirectory.Configuration {}
+}
+
+export default ActorDirectory;
diff --git a/src/foundry/client-esm/applications/sidebar/tabs/cards-directory.d.mts b/src/foundry/client-esm/applications/sidebar/tabs/cards-directory.d.mts
new file mode 100644
index 000000000..3c286f92f
--- /dev/null
+++ b/src/foundry/client-esm/applications/sidebar/tabs/cards-directory.d.mts
@@ -0,0 +1,20 @@
+import type ApplicationV2 from "../../api/application.d.mts";
+import type DocumentDirectory from "../document-directory.d.mts";
+
+/**
+ * The World Cards directory listing.
+ * @remarks TODO: Stub
+ */
+declare class CardsDirectory<
+  RenderContext extends CardsDirectory.RenderContext = CardsDirectory.RenderContext,
+  Configuration extends CardsDirectory.Configuration = CardsDirectory.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends DocumentDirectory<Cards.ConfiguredClass, RenderContext, Configuration, RenderOptions> {}
+
+declare namespace CardsDirectory {
+  interface RenderContext extends DocumentDirectory.RenderContext {}
+
+  interface Configuration extends DocumentDirectory.Configuration {}
+}
+
+export default CardsDirectory;
diff --git a/src/foundry/client-esm/applications/sidebar/tabs/chat.d.mts b/src/foundry/client-esm/applications/sidebar/tabs/chat.d.mts
new file mode 100644
index 000000000..e04aa6f4f
--- /dev/null
+++ b/src/foundry/client-esm/applications/sidebar/tabs/chat.d.mts
@@ -0,0 +1,19 @@
+import type ApplicationV2 from "../../api/application.d.mts";
+import type HandlebarsApplicationMixin from "../../api/handlebars-application.d.mts";
+import type AbstractSidebarTab from "../sidebar-tab.d.mts";
+
+/**
+ * The sidebar chat tab.
+ * @remarks TODO: Stub
+ */
+declare class ChatLog<
+  RenderContext extends ChatLog.RenderContext = ChatLog.RenderContext,
+  Configuration extends ApplicationV2.Configuration = ApplicationV2.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends HandlebarsApplicationMixin(AbstractSidebarTab)<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace ChatLog {
+  interface RenderContext extends AbstractSidebarTab.RenderContext {}
+}
+
+export default ChatLog;
diff --git a/src/foundry/client-esm/applications/sidebar/tabs/combat-tracker.d.mts b/src/foundry/client-esm/applications/sidebar/tabs/combat-tracker.d.mts
new file mode 100644
index 000000000..f7b1826cd
--- /dev/null
+++ b/src/foundry/client-esm/applications/sidebar/tabs/combat-tracker.d.mts
@@ -0,0 +1,19 @@
+import type ApplicationV2 from "../../api/application.d.mts";
+import type HandlebarsApplicationMixin from "../../api/handlebars-application.d.mts";
+import type AbstractSidebarTab from "../sidebar-tab.d.mts";
+
+/**
+ * An Application that manages switching between Combats and tracking the Combatants in those Combats.
+ * @remarks TODO: Stub
+ */
+declare class CombatTracker<
+  RenderContext extends CombatTracker.RenderContext = CombatTracker.RenderContext,
+  Configuration extends ApplicationV2.Configuration = ApplicationV2.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends HandlebarsApplicationMixin(AbstractSidebarTab)<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace CombatTracker {
+  interface RenderContext extends AbstractSidebarTab.RenderContext {}
+}
+
+export default CombatTracker;
diff --git a/src/foundry/client-esm/applications/sidebar/tabs/compendium-directory.d.mts b/src/foundry/client-esm/applications/sidebar/tabs/compendium-directory.d.mts
new file mode 100644
index 000000000..21d12e1b1
--- /dev/null
+++ b/src/foundry/client-esm/applications/sidebar/tabs/compendium-directory.d.mts
@@ -0,0 +1,19 @@
+import type ApplicationV2 from "../../api/application.d.mts";
+import type HandlebarsApplicationMixin from "../../api/handlebars-application.d.mts";
+import type AbstractSidebarTab from "../sidebar-tab.d.mts";
+
+/**
+ * The listing of compendiums available in the World.
+ * @remarks TODO: Stub
+ */
+declare class CompendiumDirectory<
+  RenderContext extends CompendiumDirectory.RenderContext = CompendiumDirectory.RenderContext,
+  Configuration extends ApplicationV2.Configuration = ApplicationV2.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends HandlebarsApplicationMixin(AbstractSidebarTab)<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace CompendiumDirectory {
+  interface RenderContext extends AbstractSidebarTab.RenderContext {}
+}
+
+export default CompendiumDirectory;
diff --git a/src/foundry/client-esm/applications/sidebar/tabs/item-directory.d.mts b/src/foundry/client-esm/applications/sidebar/tabs/item-directory.d.mts
new file mode 100644
index 000000000..0d9db9e39
--- /dev/null
+++ b/src/foundry/client-esm/applications/sidebar/tabs/item-directory.d.mts
@@ -0,0 +1,20 @@
+import type ApplicationV2 from "../../api/application.d.mts";
+import type DocumentDirectory from "../document-directory.d.mts";
+
+/**
+ * The World Item directory listing.
+ * @remarks TODO: Stub
+ */
+declare class ItemDirectory<
+  RenderContext extends ItemDirectory.RenderContext = ItemDirectory.RenderContext,
+  Configuration extends ItemDirectory.Configuration = ItemDirectory.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends DocumentDirectory<Item.ConfiguredClass, RenderContext, Configuration, RenderOptions> {}
+
+declare namespace ItemDirectory {
+  interface RenderContext extends DocumentDirectory.RenderContext {}
+
+  interface Configuration extends DocumentDirectory.Configuration {}
+}
+
+export default ItemDirectory;
diff --git a/src/foundry/client-esm/applications/sidebar/tabs/journal-directory.d.mts b/src/foundry/client-esm/applications/sidebar/tabs/journal-directory.d.mts
new file mode 100644
index 000000000..c151c7354
--- /dev/null
+++ b/src/foundry/client-esm/applications/sidebar/tabs/journal-directory.d.mts
@@ -0,0 +1,20 @@
+import type ApplicationV2 from "../../api/application.d.mts";
+import type DocumentDirectory from "../document-directory.d.mts";
+
+/**
+ * The World Journal.
+ * @remarks TODO: Stub
+ */
+declare class JournalDirectory<
+  RenderContext extends JournalDirectory.RenderContext = JournalDirectory.RenderContext,
+  Configuration extends JournalDirectory.Configuration = JournalDirectory.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends DocumentDirectory<JournalEntry.ConfiguredClass, RenderContext, Configuration, RenderOptions> {}
+
+declare namespace JournalDirectory {
+  interface RenderContext extends DocumentDirectory.RenderContext {}
+
+  interface Configuration extends DocumentDirectory.Configuration {}
+}
+
+export default JournalDirectory;
diff --git a/src/foundry/client-esm/applications/sidebar/tabs/macro-directory.d.mts b/src/foundry/client-esm/applications/sidebar/tabs/macro-directory.d.mts
new file mode 100644
index 000000000..d4ffafa3c
--- /dev/null
+++ b/src/foundry/client-esm/applications/sidebar/tabs/macro-directory.d.mts
@@ -0,0 +1,20 @@
+import type ApplicationV2 from "../../api/application.d.mts";
+import type DocumentDirectory from "../document-directory.d.mts";
+
+/**
+ * The World Macro directory listing.
+ * @remarks TODO: Stub
+ */
+declare class MacroDirectory<
+  RenderContext extends MacroDirectory.RenderContext = MacroDirectory.RenderContext,
+  Configuration extends MacroDirectory.Configuration = MacroDirectory.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends DocumentDirectory<Macro.ConfiguredClass, RenderContext, Configuration, RenderOptions> {}
+
+declare namespace MacroDirectory {
+  interface RenderContext extends DocumentDirectory.RenderContext {}
+
+  interface Configuration extends DocumentDirectory.Configuration {}
+}
+
+export default MacroDirectory;
diff --git a/src/foundry/client-esm/applications/sidebar/tabs/playlist-directory.d.mts b/src/foundry/client-esm/applications/sidebar/tabs/playlist-directory.d.mts
new file mode 100644
index 000000000..1db72f449
--- /dev/null
+++ b/src/foundry/client-esm/applications/sidebar/tabs/playlist-directory.d.mts
@@ -0,0 +1,20 @@
+import type ApplicationV2 from "../../api/application.d.mts";
+import type DocumentDirectory from "../document-directory.d.mts";
+
+/**
+ * The World Playlist directory listing.
+ * @remarks TODO: Stub
+ */
+declare class PlaylistDirectory<
+  RenderContext extends PlaylistDirectory.RenderContext = PlaylistDirectory.RenderContext,
+  Configuration extends PlaylistDirectory.Configuration = PlaylistDirectory.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends DocumentDirectory<Playlist.ConfiguredClass, RenderContext, Configuration, RenderOptions> {}
+
+declare namespace PlaylistDirectory {
+  interface RenderContext extends DocumentDirectory.RenderContext {}
+
+  interface Configuration extends DocumentDirectory.Configuration {}
+}
+
+export default PlaylistDirectory;
diff --git a/src/foundry/client-esm/applications/sidebar/tabs/roll-table-directory.d.mts b/src/foundry/client-esm/applications/sidebar/tabs/roll-table-directory.d.mts
new file mode 100644
index 000000000..bf167e454
--- /dev/null
+++ b/src/foundry/client-esm/applications/sidebar/tabs/roll-table-directory.d.mts
@@ -0,0 +1,20 @@
+import type ApplicationV2 from "../../api/application.d.mts";
+import type DocumentDirectory from "../document-directory.d.mts";
+
+/**
+ * The World RollTable directory listing.
+ * @remarks TODO: Stub
+ */
+declare class RollTableDirectory<
+  RenderContext extends RollTableDirectory.RenderContext = RollTableDirectory.RenderContext,
+  Configuration extends RollTableDirectory.Configuration = RollTableDirectory.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends DocumentDirectory<RollTable.ConfiguredClass, RenderContext, Configuration, RenderOptions> {}
+
+declare namespace RollTableDirectory {
+  interface RenderContext extends DocumentDirectory.RenderContext {}
+
+  interface Configuration extends DocumentDirectory.Configuration {}
+}
+
+export default RollTableDirectory;
diff --git a/src/foundry/client-esm/applications/sidebar/tabs/scene-directory.d.mts b/src/foundry/client-esm/applications/sidebar/tabs/scene-directory.d.mts
new file mode 100644
index 000000000..c2e122146
--- /dev/null
+++ b/src/foundry/client-esm/applications/sidebar/tabs/scene-directory.d.mts
@@ -0,0 +1,20 @@
+import type ApplicationV2 from "../../api/application.d.mts";
+import type DocumentDirectory from "../document-directory.d.mts";
+
+/**
+ * The World Scene directory listing.
+ * @remarks TODO: Stub
+ */
+declare class SceneDirectory<
+  RenderContext extends SceneDirectory.RenderContext = SceneDirectory.RenderContext,
+  Configuration extends SceneDirectory.Configuration = SceneDirectory.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends DocumentDirectory<Scene.ConfiguredClass, RenderContext, Configuration, RenderOptions> {}
+
+declare namespace SceneDirectory {
+  interface RenderContext extends DocumentDirectory.RenderContext {}
+
+  interface Configuration extends DocumentDirectory.Configuration {}
+}
+
+export default SceneDirectory;
diff --git a/src/foundry/client-esm/applications/sidebar/tabs/settings.d.mts b/src/foundry/client-esm/applications/sidebar/tabs/settings.d.mts
new file mode 100644
index 000000000..4ca85caed
--- /dev/null
+++ b/src/foundry/client-esm/applications/sidebar/tabs/settings.d.mts
@@ -0,0 +1,18 @@
+import type AbstractSidebarTab from "../sidebar-tab.d.mts";
+import type ApplicationV2 from "../../api/application.d.mts";
+import type HandlebarsApplicationMixin from "../../api/handlebars-application.d.mts";
+
+/**
+ * @remarks TODO: Stub
+ */
+declare class Settings<
+  RenderContext extends Settings.RenderContext = Settings.RenderContext,
+  Configuration extends ApplicationV2.Configuration = ApplicationV2.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends HandlebarsApplicationMixin(AbstractSidebarTab)<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace Settings {
+  interface RenderContext extends AbstractSidebarTab.RenderContext {}
+}
+
+export default Settings;
diff --git a/src/foundry/client-esm/applications/ui/context.d.mts b/src/foundry/client-esm/applications/ui/context.d.mts
new file mode 100644
index 000000000..639ac5ed7
--- /dev/null
+++ b/src/foundry/client-esm/applications/ui/context.d.mts
@@ -0,0 +1,212 @@
+import type { InexactPartial } from "fvtt-types/utils";
+import type ApplicationV2 from "../api/application.d.mts";
+
+/**
+ * Display a right-click activated Context Menu which provides a dropdown menu of options
+ * A ContextMenu is constructed by designating a parent HTML container and a target selector
+ * An Array of menuItems defines the entries of the menu which is displayed
+ * @remarks TODO: Copied from client/ui, not updated to v13
+ */
+declare class ContextMenu {
+  /**
+   * @param element   - The containing HTML element within which the menu is positioned
+   * @param selector  - A CSS selector which activates the context menu.
+   * @param menuItems - An Array of entries to display in the menu
+   * @param eventName - Optionally override the triggering event which can spawn the menu
+   *                    (default: `"contextmenu"`)
+   * @param onOpen    - A function to call when the context menu is opened.
+   * @param onClose   - A function to call when the context menu is closed.
+   */
+  constructor(
+    element: JQuery,
+    selector: string | null | undefined,
+    menuItems: ContextMenuEntry[],
+    { hookName, onOpen, onClose }?: ContextMenu.ConstructorOptions,
+  );
+
+  /**
+   * The target HTMLElement being selected
+   */
+  element: JQuery;
+
+  /**
+   * The target CSS selector which activates the menu
+   * @defaultValue `element.attr("id")`
+   */
+  selector: string;
+
+  /**
+   * An interaction event name which activates the menu
+   */
+  eventName: string;
+
+  /**
+   * The array of menu items being rendered
+   */
+  menuItems: ContextMenuEntry[];
+
+  /**
+   * A function to call when the context menu is opened.
+   */
+  onOpen: ContextMenu.ContextMenuCallback | null | undefined;
+
+  /**
+   * A function to call when the context menu is closed.
+   */
+  onClose: ContextMenu.ContextMenuCallback | null | undefined;
+
+  /**
+   * Track which direction the menu is expanded in
+   * @defaultValue `false`
+   */
+  protected _expandUp: boolean;
+
+  /**
+   * A convenience accessor to the context menu HTML object
+   */
+  get menu(): JQuery;
+
+  /**
+   * Create a ContextMenu for this Application and dispatch hooks.
+   * @param app       - The Application this ContextMenu belongs to.
+   * @param html      - The Application's rendered HTML.
+   * @param selector  - The target CSS selector which activates the menu.
+   * @param menuItems - The array of menu items being rendered.
+   * @param options   - Additional options to configure context menu initialization.
+   *                    (default: `"EntryContext"`)
+   */
+  static create(
+    app: Application.Any | ApplicationV2.Any,
+    html: JQuery | HTMLElement,
+    selector: string,
+    menuItems: ContextMenuEntry[],
+    options?: ContextMenu.ConstructorOptions,
+  ): ContextMenu;
+
+  /**
+   * Attach a ContextMenu instance to an HTML selector
+   */
+  bind(): void;
+
+  /**
+   * Closes the menu and removes it from the DOM.
+   * @param options - Options to configure the closing behavior.
+   */
+  close(options?: ContextMenu.CloseOptions): Promise<void>;
+
+  /** @internal */
+  protected _close(): void;
+
+  /** @internal */
+  protected _animateOpen(menu: JQuery): Promise<void>;
+
+  /** @internal */
+  protected _animateClose(menu: JQuery): Promise<void>;
+
+  /**
+   * Render the Context Menu by iterating over the menuItems it contains
+   * Check the visibility of each menu item, and only render ones which are allowed by the item's logical condition
+   * Attach a click handler to each item which is rendered
+   * @param target        - The target element to which the context menu is attached
+   * @param options       - (default: `{}`)
+   */
+  render(target: JQuery, options?: InexactPartial<ContextMenu.RenderOptions>): void | Promise<JQuery | void>;
+
+  /**
+   * Set the position of the context menu, taking into consideration whether the menu should expand upward or downward
+   * @param html            - The context menu element.
+   * @param target          - The element that the context menu was spawned on.
+   * @param options         - (default: `{}`)
+   */
+  protected _setPosition(html: JQuery, target: JQuery, options?: InexactPartial<ContextMenu.RenderOptions>): void;
+
+  /**
+   * Local listeners which apply to each ContextMenu instance which is created.
+   * @param html - The ContextMenu
+   */
+  activateListeners(html: JQuery): void;
+
+  /**
+   * Global listeners which apply once only to the document.
+   */
+  static eventListeners(): void;
+}
+
+declare namespace ContextMenu {
+  interface ContextMenuEntry {
+    /**
+     * The context menu label. Can be localized.
+     */
+    name: string;
+
+    /**
+     * A string containing an HTML icon element for the menu item
+     */
+    icon: string;
+
+    /**
+     * An identifier for a group this entry belongs to.
+     * @defaultValue `_none`
+     */
+    group?: string | null | undefined;
+
+    /**
+     * The function to call when the menu item is clicked. Receives the HTML element
+     * of the entry that this context menu is for.
+     */
+    callback: (target: JQuery) => void;
+
+    /**
+     * A function to call or boolean value to determine if this entry
+     * appears in the menu.
+     * @remarks `null` equivalent to `false`
+     */
+    condition?: boolean | ((target: JQuery) => boolean | null) | null | undefined;
+  }
+
+  /**
+   * @param html      - The HTML element of the context menu entry.
+   * @returns         whether the entry should be rendered in the context menu.
+   */
+  type ContextMenuCondition = (html: JQuery) => boolean;
+
+  interface RenderOptions {
+    /** The event that triggered the context menu opening. */
+    event: PointerEvent;
+  }
+
+  interface CloseOptions {
+    /**
+     * Animate the context menu closing.
+     * @defaultValue `true`
+     * @remarks `null` equivalent to `false`
+     */
+    animate?: boolean | null;
+  }
+
+  type ContextMenuCallback =
+    /**
+     * @param target - The element that the context menu has been triggered for.
+     */
+    (target: HTMLElement) => void;
+
+  interface ConstructorOptions {
+    /**
+     * The name of the hook to call
+     * @defaultValue `EntryContext`
+     */
+    hookName?: string;
+
+    /**
+     * A function to call when the context menu is opened.
+     */
+    onOpen?: ContextMenuCallback | null | undefined;
+
+    /**
+     * A function to call when the context menu is closed.
+     */
+    onClose?: ContextMenuCallback | null | undefined;
+  }
+}
+
+export default ContextMenu;
diff --git a/src/foundry/client-esm/applications/ui/game-pause.d.mts b/src/foundry/client-esm/applications/ui/game-pause.d.mts
new file mode 100644
index 000000000..128a2abc7
--- /dev/null
+++ b/src/foundry/client-esm/applications/ui/game-pause.d.mts
@@ -0,0 +1,20 @@
+import type ApplicationV2 from "../api/application.d.mts";
+
+/**
+ * The Game Paused banner.
+ * @remarks TODO: Stub
+ */
+declare class GamePause<
+  RenderContext extends GamePause.RenderContext = GamePause.RenderContext,
+  Configuration extends ApplicationV2.Configuration = ApplicationV2.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends ApplicationV2<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace GamePause {
+  interface RenderContext {
+    cssClass: string;
+    icon: string;
+    text: string;
+    spin: boolean;
+  }
+}
diff --git a/src/foundry/client-esm/applications/ui/hotbar.d.mts b/src/foundry/client-esm/applications/ui/hotbar.d.mts
new file mode 100644
index 000000000..c87ee48db
--- /dev/null
+++ b/src/foundry/client-esm/applications/ui/hotbar.d.mts
@@ -0,0 +1,29 @@
+import type ApplicationV2 from "../api/application.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * An action bar displayed at the bottom of the game view which contains Macros as interactive buttons.
+ * The Hotbar supports 5 pages of macros which can be dragged and dropped to organize as you wish.
+ * Left-clicking a Macro button triggers its effect.
+ * Right-clicking the button displays a context menu of Macro options.
+ * The number keys 1 through 0 activate numbered hotbar slots.
+ * @remarks TODO: Stub
+ */
+declare class Hotbar<
+  RenderContext extends object = Hotbar.RenderContext,
+  Configuration extends ApplicationV2.Configuration = ApplicationV2.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends HandlebarsApplicationMixin(ApplicationV2)<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace Hotbar {
+  interface SlotData {
+    slot: number;
+  }
+
+  interface RenderContext {
+    slots: SlotData[];
+    page: number;
+  }
+}
+
+export default Hotbar;
diff --git a/src/foundry/client-esm/applications/ui/main-menu.d.mts b/src/foundry/client-esm/applications/ui/main-menu.d.mts
new file mode 100644
index 000000000..058dce9cd
--- /dev/null
+++ b/src/foundry/client-esm/applications/ui/main-menu.d.mts
@@ -0,0 +1,27 @@
+import type ApplicationV2 from "../api/application.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * The main menu application which is toggled via the ESC key.
+ * @remarks TODO: Stub
+ */
+declare class MainMenu<
+  RenderContext extends object = MainMenu.RenderContext,
+  Configuration extends ApplicationV2.Configuration = ApplicationV2.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends HandlebarsApplicationMixin(ApplicationV2)<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace MainMenu {
+  interface MainMenuItem {
+    label: string;
+    icon: string;
+    enabled: boolean | (() => boolean);
+    onClick: (ev: PointerEvent) => void;
+  }
+
+  interface RenderContext {
+    items: Record<string, MainMenuItem>;
+  }
+}
+
+export default MainMenu;
diff --git a/src/foundry/client-esm/applications/ui/notifications.d.mts b/src/foundry/client-esm/applications/ui/notifications.d.mts
new file mode 100644
index 000000000..dd64a7fab
--- /dev/null
+++ b/src/foundry/client-esm/applications/ui/notifications.d.mts
@@ -0,0 +1,145 @@
+/**
+ * A common framework for displaying notifications to the client.
+ * Submitted notifications are added to a queue, and up to {@link Notifications.MAX_ACTIVE} notifications are
+ * displayed at once. Each notification is displayed for {@link Notifications.LIFETIME_MS} milliseconds before being
+ * removed, at which point further notifications are pulled from the queue.
+ *
+ * @example Displaying Notification Messages
+ * ```js
+ * ui.notifications.error("This is a permanent error message", {permanent: true});
+ * ui.notifications.warn("LOCALIZED.WARNING.MESSAGE", {localize: true});
+ * ui.notifications.success("This is a success message, not logged to the console", {console: false});
+ * ui.notifications.info("LOCALIZED.FORMAT.STRING", {format: {key1: "foo", key2: "bar"}});
+ * ```
+ *
+ * @example Progress Bar Notification
+ * ```js
+ * const progress = ui.notifications.info("Thing Happening!", {progress: true});
+ * progress.update({pct: 0.25, message: "Still happening!"});
+ * progress.update({pct: 0.50, message: "Almost there!"});
+ * progress.update({pct: 0.75, message: "Stay on target!"});
+ * progress.update({pct: 1.0, message: "Done!"});
+ * ```
+ * @remarks TODO: Copied from client/ui, not fully updated to v13
+ */
+declare class Notifications {
+  constructor();
+
+  /**
+   * The maximum number of active notifications.
+   * @defaultValue `5`
+   */
+  static MAX_ACTIVE: number;
+
+  /**
+   * Submitted notifications which are queued for display
+   * @defaultValue `[]`
+   */
+  queue: Notifications.Notification[];
+
+  /**
+   * Notifications which are currently displayed
+   * @defaultValue `[]`
+   */
+  active: JQuery[];
+
+  /**
+   * Initialize the Notifications system by displaying any system-generated messages which were passed from the server.
+   */
+  initialize(): void;
+
+  /**
+   * Push a new notification into the queue
+   * @param message   - The content of the notification message
+   * @param type      - The type of notification, "info", "warning", and "error" are supported
+   *                    (default: `"info"`)
+   * @param options   - Additional options which affect the notification
+   *                    (default: `{}`)
+   * @returns The ID of the notification (positive integer)
+   * @remarks `type` and `options` use parameter defaults so `null` causes an error
+   */
+  notify(message: string, type?: "info" | "warning" | "error", options?: Notifications.NotifyOptions): number;
+
+  /**
+   * Display a notification with the "info" type
+   * @param message - The content of the notification message
+   * @param options - Notification options passed to the notify function
+   * @returns The ID of the notification (positive integer)
+   * @remarks `options` use parameter defaults so `null` causes an error
+   */
+  info(message: string, options?: Notifications.NotifyOptions): number;
+
+  /**
+   * Display a notification with the "warning" type
+   * @param message - The content of the notification message
+   * @param options - Notification options passed to the notify function
+   * @returns The ID of the notification (positive integer)
+   * @remarks `options` use parameter defaults so `null` causes an error
+   */
+  warn(message: string, options?: Notifications.NotifyOptions): number;
+
+  /**
+   * Display a notification with the "error" type
+   * @param message - The content of the notification message
+   * @param options - Notification options passed to the notify function
+   * @returns The ID of the notification (positive integer)
+   * @remarks `options` use parameter defaults so `null` causes an error
+   */
+  error(message: string, options?: Notifications.NotifyOptions): number;
+
+  /**
+   * Remove the notification linked to the ID.
+   * @param id - The ID of the notification
+   */
+  remove(id: number): void;
+
+  /**
+   * Clear all notifications.
+   */
+  clear(): void;
+
+  /**
+   * Retrieve a pending notification from the queue and display it
+   */
+  protected fetch(): void;
+}
+
+declare abstract class AnyNotifications extends Notifications {
+  constructor(arg0: never, ...args: never[]);
+}
+
+declare namespace Notifications {
+  type Any = AnyNotifications;
+  type AnyConstructor = typeof AnyNotifications;
+
+  interface NotifyOptions {
+    /**
+     * Should the notification be permanently displayed until dismissed
+     * @defaultValue `false`
+     */
+    permanent?: boolean;
+
+    /**
+     * Whether to localize the message content before displaying it
+     * @defaultValue `false`
+     */
+    localize?: boolean;
+
+    /**
+     * Whether to log the message to the console
+     * @defaultValue `true`
+     * @remarks `null` equivalent to `false`
+     */
+    console?: boolean | null | undefined;
+  }
+
+  interface Notification {
+    message: string;
+    type: "info" | "warning" | "error";
+    timestamp: number;
+    permanent: boolean;
+    console: boolean;
+  }
+}
+
+export default Notifications;
diff --git a/src/foundry/client-esm/applications/ui/players.d.mts b/src/foundry/client-esm/applications/ui/players.d.mts
new file mode 100644
index 000000000..43c5ace0d
--- /dev/null
+++ b/src/foundry/client-esm/applications/ui/players.d.mts
@@ -0,0 +1,26 @@
+import type ApplicationV2 from "../api/application.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * A UI element which displays the Users defined for this world.
+ * Currently active users are always displayed, while inactive users can be displayed on toggle.
+ * @remarks TODO: Stub
+ */
+declare class Players<
+  RenderContext extends Players.RenderContext = Players.RenderContext,
+  Configuration extends ApplicationV2.Configuration = ApplicationV2.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends HandlebarsApplicationMixin(ApplicationV2)<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace Players {
+  interface UserContext {
+    id: string;
+  }
+
+  interface RenderContext {
+    active: UserContext[];
+    inactive: UserContext[];
+  }
+}
+
+export default Players;
diff --git a/src/foundry/client-esm/applications/ui/scene-control.d.mts b/src/foundry/client-esm/applications/ui/scene-control.d.mts
new file mode 100644
index 000000000..447823c57
--- /dev/null
+++ b/src/foundry/client-esm/applications/ui/scene-control.d.mts
@@ -0,0 +1,20 @@
+import type ApplicationV2 from "../api/application.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * The Scene Controls UI element.
+ * @remarks TODO: Stub
+ */
+declare class SceneControls<
+  RenderContext extends SceneControls.RenderContext = SceneControls.RenderContext,
+  Configuration extends ApplicationV2.Configuration = ApplicationV2.Configuration,
+  RenderOptions extends SceneControls.RenderOptions = SceneControls.RenderOptions,
+> extends HandlebarsApplicationMixin(ApplicationV2)<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace SceneControls {
+  interface RenderContext extends ApplicationV2.RenderContext {}
+
+  interface RenderOptions extends ApplicationV2.RenderOptions {}
+}
+
+export default SceneControls;
diff --git a/src/foundry/client-esm/applications/ui/scene-navigation.d.mts b/src/foundry/client-esm/applications/ui/scene-navigation.d.mts
new file mode 100644
index 000000000..aa253372d
--- /dev/null
+++ b/src/foundry/client-esm/applications/ui/scene-navigation.d.mts
@@ -0,0 +1,28 @@
+import type ApplicationV2 from "../api/application.d.mts";
+import type HandlebarsApplicationMixin from "../api/handlebars-application.d.mts";
+
+/**
+ * The Scene Navigation UI element.
+ * @remarks TODO: Stub
+ */
+declare class SceneNavigation<
+  RenderContext extends SceneNavigation.RenderContext = SceneNavigation.RenderContext,
+  Configuration extends ApplicationV2.Configuration = ApplicationV2.Configuration,
+  RenderOptions extends ApplicationV2.RenderOptions = ApplicationV2.RenderOptions,
+> extends HandlebarsApplicationMixin(ApplicationV2)<RenderContext, Configuration, RenderOptions> {}
+
+declare namespace SceneNavigation {
+  interface PreparedScene {
+    id: string;
+  }
+
+  interface RenderContext {
+    scenes: {
+      inactive: PreparedScene[];
+      active: PreparedScene[];
+    };
+    canExpand: number;
+  }
+}
+
+export default SceneNavigation;
diff --git a/src/foundry/client/pixi/layers/base/placeables-layer.d.mts b/src/foundry/client/pixi/layers/base/placeables-layer.d.mts
index 4fc700cf0..e1dcada6f 100644
--- a/src/foundry/client/pixi/layers/base/placeables-layer.d.mts
+++ b/src/foundry/client/pixi/layers/base/placeables-layer.d.mts
@@ -231,8 +231,9 @@ declare global {
      * @throws An error if explicitly provided id is not valid
      * @remarks Overload is necessary to ensure that one of `angle` or `delta` are numeric in `options`
      */
-    rotateMany(options?: RotationOptionsWithAngle): Promise<Document.ConfiguredObjectInstanceForName<DocumentName>[]>;
-    rotateMany(options?: RotationOptionsWithDelta): Promise<Document.ConfiguredObjectInstanceForName<DocumentName>[]>;
+    rotateMany(
+      options?: PlaceablesLayer.RotationOptions,
+    ): Promise<Document.ConfiguredObjectInstanceForName<DocumentName>[]>;
 
     /**
      * Simultaneously move multiple PlaceableObjects via keyboard movement offsets.
@@ -244,8 +245,7 @@ declare global {
      * @throws An error if explicitly provided id is not valid
      */
     moveMany(
-      /** @remarks can't be NullishProps becuase `dx` and `dy` must be in `[-1, 0, 1]` */
-      options?: InexactPartial<MovementOptions>,
+      options?: PlaceablesLayer.MovementOptions,
     ): Promise<Document.ConfiguredObjectInstanceForName<DocumentName>[]> | undefined;
 
     /**
@@ -553,97 +553,82 @@ declare global {
     namespace LayerOptions {
       type Any = LayerOptions<any>;
     }
-  }
-}
 
-declare abstract class AnyPlaceablesLayer extends PlaceablesLayer<any> {
-  constructor(arg0: never, ...args: never[]);
-}
+    interface RotationOptions {
+      /**
+       * A target angle of rotation (in degrees) where zero faces "south"
+       *
+       * @remarks If both `angle` and `delta` are provided then `angle` is used.
+       */
+      angle?: number | null | undefined;
 
-interface RotationOptionsWithDelta {
-  /**
-   * A target angle of rotation (in degrees) where zero faces "south"
-   */
-  angle?: number | null | undefined;
+      /**
+       * An incremental angle of rotation (in degrees)
+       *
+       * @remarks If both `angle` and `delta` are provided then `angle` is used.
+       */
+      delta?: number | null | undefined;
 
-  /**
-   * An incremental angle of rotation (in degrees)
-   */
-  delta: number;
+      /**
+       * Snap the resulting angle to a multiple of some increment (in degrees)
+       */
+      snap?: number | null | undefined;
 
-  /**
-   * Snap the resulting angle to a multiple of some increment (in degrees)
-   */
-  snap?: number | null | undefined;
+      /**
+       * An Array of object IDs to target for rotation
+       */
+      ids?: string[] | null | undefined;
 
-  /**
-   * An Array of object IDs to target for rotation
-   */
-  ids?: string[] | null | undefined;
+      /**
+       * Rotate objects whose documents are locked?
+       * @defaultValue `false`
+       */
+      includeLocked?: boolean | null | undefined;
+    }
 
-  /**
-   * Rotate objects whose documents are locked?
-   * @defaultValue `false`
-   */
-  includeLocked?: boolean | null | undefined;
-}
+    interface _MovementOptions {
+      /**
+       * Horizontal movement direction
+       * @defaultValue `0`
+       *
+       * @remarks dx cannot be `null` because it must be in `[-1, 0, 1]`. However it may be
+       * `undefined` because it has a parameter default of `0`.
+       */
+      dx?: -1 | 0 | 1 | undefined;
 
-interface RotationOptionsWithAngle {
-  /**
-   * A target angle of rotation (in degrees) where zero faces "south"
-   */
-  angle: number;
+      /**
+       * Vertical movement direction
+       * @defaultValue `0`
+       *
+       * @remarks dx cannot be `null` because it must be in `[-1, 0, 1]`. However it may be
+       * `undefined` because it has a parameter default of `0`.
+       */
+      dy?: -1 | 0 | 1 | undefined;
 
-  /**
-   * An incremental angle of rotation (in degrees)
-   */
-  delta?: number | null | undefined;
+      /**
+       * Rotate the placeable to the keyboard direction instead of moving
+       * @defaultValue
+       */
+      rotate?: boolean | null | undefined;
 
-  /**
-   * Snap the resulting angle to a multiple of some increment (in degrees)
-   */
-  snap?: number | null | undefined;
+      /**
+       * An Array of object IDs to target for movement. The default is the IDs of controlled objects.
+       * @defaultValue `this.controlled.filter(o => !o.data.locked).map(o => o.id)`
+       */
+      ids?: string[] | null | undefined;
 
-  /**
-   * An Array of object IDs to target for rotation
-   */
-  ids?: string[] | null | undefined;
+      /**
+       * Move objects whose documents are locked?
+       * @defaultValue `false`
+       */
+      includeLocked?: boolean | null | undefined;
+    }
 
-  /**
-   * Rotate objects whose documents are locked?
-   * @defaultValue `false`
-   */
-  includeLocked?: boolean | null | undefined;
+    /** @remarks can't be NullishProps because `dx` and `dy` must be in `[-1, 0, 1]` */
+    interface MovementOptions extends InexactPartial<_MovementOptions> {}
+  }
 }
 
-interface MovementOptions {
-  /**
-   * Horizontal movement direction
-   * @defaultValue `0`
-   */
-  dx: -1 | 0 | 1;
-
-  /**
-   * Vertical movement direction
-   * @defaultValue `0`
-   */
-  dy: -1 | 0 | 1;
-
-  /**
-   * Rotate the placeable to the keyboard direction instead of moving
-   * @defaultValue
-   */
-  rotate: boolean;
-
-  /**
-   * An Array of object IDs to target for movement. The default is the IDs of controlled objects.
-   * @defaultValue `this.controlled.filter(o => !o.data.locked).map(o => o.id)`
-   */
-  ids: string[];
-
-  /**
-   * Move objects whose documents are locked?
-   * @defaultValue `false`
-   */
-  includeLocked: boolean;
+declare abstract class AnyPlaceablesLayer extends PlaceablesLayer<any> {
+  constructor(arg0: never, ...args: never[]);
 }
diff --git a/src/foundry/common/data/fields.d.mts b/src/foundry/common/data/fields.d.mts
index f7931ba9e..2ebf1ba82 100644
--- a/src/foundry/common/data/fields.d.mts
+++ b/src/foundry/common/data/fields.d.mts
@@ -2805,7 +2805,7 @@ declare namespace ForeignDocumentField {
   type AssignmentType<
     ConcreteDocument extends Document.AnyConstructor,
     Opts extends Options,
-  > = DataField.DerivedAssignmentType<string | Document.ToConfiguredClass<ConcreteDocument>, MergedOptions<Opts>>;
+  > = DataField.DerivedAssignmentType<string | Document.ToConfiguredInstance<ConcreteDocument>, MergedOptions<Opts>>;
 
   /**
    * A shorthand for the initialized type of a ForeignDocumentField class.


Test patch:
diff --git a/tests/foundry/client-esm/applications/apps/image-poput.test-d.ts b/tests/foundry/client-esm/applications/apps/image-poput.test-d.ts
new file mode 100644
index 000000000..91292b01f
--- /dev/null
+++ b/tests/foundry/client-esm/applications/apps/image-poput.test-d.ts
@@ -0,0 +1,7 @@
+import { expectTypeOf } from "vitest";
+
+// @ts-expect-error `src` is required
+new foundry.applications.apps.ImagePopout();
+
+const ip = new foundry.applications.apps.ImagePopout({ src: "some/file/path" });
+expectTypeOf(ip.options.src).toBeString();
diff --git a/tests/foundry/common/documents/drawing.test-d.ts b/tests/foundry/common/documents/drawing.test-d.ts
index f4001158d..984345ad0 100644
--- a/tests/foundry/common/documents/drawing.test-d.ts
+++ b/tests/foundry/common/documents/drawing.test-d.ts
@@ -1,26 +1,24 @@
 import { expectTypeOf } from "vitest";
 import Document = foundry.abstract.Document;
 
-expectTypeOf(foundry.documents.BaseDrawing.create({})).toEqualTypeOf<
-  Promise<Document.Stored<DrawingDocument> | undefined>
->();
-expectTypeOf(foundry.documents.BaseDrawing.createDocuments([])).toEqualTypeOf<
-  Promise<Document.Stored<DrawingDocument>[]>
->();
-expectTypeOf(foundry.documents.BaseDrawing.updateDocuments([])).toEqualTypeOf<Promise<DrawingDocument[]>>();
-expectTypeOf(foundry.documents.BaseDrawing.deleteDocuments([])).toEqualTypeOf<Promise<DrawingDocument[]>>();
+class BaseDrawing extends foundry.documents.BaseDrawing {}
 
-const drawing = await foundry.documents.BaseDrawing.create({}, { temporary: true });
+expectTypeOf(BaseDrawing.create({})).toEqualTypeOf<Promise<Document.Stored<DrawingDocument> | undefined>>();
+expectTypeOf(BaseDrawing.createDocuments([])).toEqualTypeOf<Promise<Document.Stored<DrawingDocument>[]>>();
+expectTypeOf(BaseDrawing.updateDocuments([])).toEqualTypeOf<Promise<DrawingDocument[]>>();
+expectTypeOf(BaseDrawing.deleteDocuments([])).toEqualTypeOf<Promise<DrawingDocument[]>>();
+
+const drawing = await BaseDrawing.create({}, { temporary: true });
 if (drawing) {
   expectTypeOf(drawing).toEqualTypeOf<DrawingDocument>();
   // @ts-expect-error Drawing is distinct from the DrawingDocument
   expectTypeOf(drawing).toEqualTypeOf<Drawing>();
 }
 
-expectTypeOf(new foundry.documents.BaseDrawing()).toEqualTypeOf<foundry.documents.BaseDrawing>();
-expectTypeOf(new foundry.documents.BaseDrawing({})).toEqualTypeOf<foundry.documents.BaseDrawing>();
+expectTypeOf(new BaseDrawing()).toEqualTypeOf<BaseDrawing>();
+expectTypeOf(new BaseDrawing({})).toEqualTypeOf<BaseDrawing>();
 expectTypeOf(
-  new foundry.documents.BaseDrawing({
+  new BaseDrawing({
     author: null,
     bezierFactor: null,
     fillAlpha: null,
@@ -44,9 +42,9 @@ expectTypeOf(
     z: null,
     _id: null,
   }),
-).toEqualTypeOf<foundry.documents.BaseDrawing>();
+).toEqualTypeOf<BaseDrawing>();
 expectTypeOf(
-  new foundry.documents.BaseDrawing({
+  new BaseDrawing({
     author: undefined,
     bezierFactor: undefined,
     fillAlpha: undefined,
@@ -70,11 +68,11 @@ expectTypeOf(
     z: undefined,
     _id: undefined,
   }),
-).toEqualTypeOf<foundry.documents.BaseDrawing>();
+).toEqualTypeOf<BaseDrawing>();
 
 expectTypeOf(
-  new foundry.documents.BaseDrawing({
-    author: new User({ name: "foo" }),
+  new BaseDrawing({
+    author: new User.implementation({ name: "foo" }),
     bezierFactor: 0,
     fillAlpha: 0.5,
     fillColor: "#FFFFFF",
@@ -102,4 +100,4 @@ expectTypeOf(
     z: 0,
     _id: "NlBhrPq62QrMErNh",
   }),
-).toEqualTypeOf<foundry.documents.BaseDrawing>();
+).toEqualTypeOf<BaseDrawing>();