From 5b2e95a869e2de8afd8b10014cf009c4975cb32b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 Apr 2026 15:37:52 +0000 Subject: [PATCH 1/6] Update react monorepo to v19 --- devserver/package.json | 8 +- lib/modules-lib/package.json | 8 +- package.json | 8 +- src/archive/bundles/ar/package.json | 8 +- .../tabs/AugmentedReality/package.json | 8 +- src/bundles/pix_n_flix/package.json | 6 +- src/bundles/unity_academy/package.json | 8 +- src/tabs/ArcadeTwod/package.json | 8 +- src/tabs/CopyGc/package.json | 8 +- src/tabs/Csg/package.json | 8 +- src/tabs/Curve/package.json | 8 +- src/tabs/Game/package.json | 6 +- src/tabs/MarkSweep/package.json | 6 +- src/tabs/Nbody/package.json | 6 +- src/tabs/Painter/package.json | 8 +- src/tabs/Physics2D/package.json | 6 +- src/tabs/Pixnflix/package.json | 6 +- src/tabs/Plotly/package.json | 6 +- src/tabs/Repeat/package.json | 6 +- src/tabs/Repl/package.json | 8 +- src/tabs/RobotSimulation/package.json | 6 +- src/tabs/Rune/package.json | 6 +- src/tabs/Sound/package.json | 6 +- src/tabs/SoundMatrix/package.json | 8 +- src/tabs/StereoSound/package.json | 8 +- src/tabs/Unittest/package.json | 6 +- src/tabs/UnityAcademy/package.json | 8 +- yarn.lock | 237 +++++++++--------- 28 files changed, 208 insertions(+), 221 deletions(-) diff --git a/devserver/package.json b/devserver/package.json index d47ddf3c8f..b0f1285984 100644 --- a/devserver/package.json +++ b/devserver/package.json @@ -19,16 +19,16 @@ "commander": "^14.0.0", "js-slang": "^1.0.85", "re-resizable": "^6.9.11", - "react": "^18.3.1", + "react": "^19.0.0", "react-ace": "^14.0.0", - "react-dom": "^18.3.1", + "react-dom": "^19.0.0", "vite": "^8.0.5", "vite-plugin-node-polyfills": "^0.26.0" }, "devDependencies": { "@sourceacademy/modules-buildtools": "workspace:^", - "@types/react": "^18.3.1", - "@types/react-dom": "^18.3.1", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", "@vitest/browser-playwright": "4.1.0", "eslint": "^9.35.0", "playwright": "^1.55.1", diff --git a/lib/modules-lib/package.json b/lib/modules-lib/package.json index dbab4ef69a..2edec16a89 100644 --- a/lib/modules-lib/package.json +++ b/lib/modules-lib/package.json @@ -5,8 +5,8 @@ "type": "module", "devDependencies": { "@sourceacademy/modules-buildtools": "workspace:^", - "@types/react": "^18.3.1", - "@types/react-dom": "^18.3.1", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", "@vitejs/plugin-react": "^6.0.1", "@vitest/browser-playwright": "4.1.0", "eslint": "^9.35.0", @@ -35,8 +35,8 @@ "@blueprintjs/icons": "^6.0.0", "es-toolkit": "^1.44.0", "js-slang": "^1.0.85", - "react": "^18.3.1", - "react-dom": "^18.3.1" + "react": "^19.0.0", + "react-dom": "^19.0.0" }, "scripts-info": { "docs": "Build the documentation for documentation server using Typedoc" diff --git a/package.json b/package.json index 3c56b854f7..b609d9f866 100644 --- a/package.json +++ b/package.json @@ -60,8 +60,8 @@ "@sourceacademy/vitest-reporter": "workspace:^", "@stylistic/eslint-plugin": "^5.10.0", "@types/node": "^24.0.0", - "@types/react": "^18.3.1", - "@types/react-dom": "^18.3.1", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", "@vitest/coverage-v8": "4.1.0", "@vitest/eslint-plugin": "^1.6.14", "@yarnpkg/types": "^4.0.1", @@ -77,8 +77,8 @@ "husky": "^9.1.7", "jsdom": "^29.0.0", "jsonc-eslint-parser": "^3.1.0", - "react": "^18.3.1", - "react-dom": "^18.3.1", + "react": "^19.0.0", + "react-dom": "^19.0.0", "typescript": "^6.0.2", "typescript-eslint": "^8.58.0", "vitest": "4.1.0", diff --git a/src/archive/bundles/ar/package.json b/src/archive/bundles/ar/package.json index e582d2740d..19f23adf3c 100644 --- a/src/archive/bundles/ar/package.json +++ b/src/archive/bundles/ar/package.json @@ -9,15 +9,15 @@ }, "dependencies": { "os": "^0.1.2", - "react": "^18.3.1", - "react-dom": "^18.3.1", + "react": "^19.0.0", + "react-dom": "^19.0.0", "saar": "^1.0.4", "uniqid": "^5.4.0" }, "devDependencies": { "@sourceacademy/modules-buildtools": "workspace:^", - "@types/react": "^18.3.1", - "@types/react-dom": "^18.3.1", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", "typescript": "^5.8.2" }, "scripts": { diff --git a/src/archive/tabs/AugmentedReality/package.json b/src/archive/tabs/AugmentedReality/package.json index c475435f84..d5d3bf6708 100644 --- a/src/archive/tabs/AugmentedReality/package.json +++ b/src/archive/tabs/AugmentedReality/package.json @@ -6,14 +6,14 @@ "@blueprintjs/icons": "^6.0.0", "@sourceacademy/bundle-ar": "workspace:^", "@sourceacademy/modules-lib": "workspace:^", - "react": "^18.3.1", - "react-dom": "^18.3.1", + "react": "^19.0.0", + "react-dom": "^19.0.0", "saar": "^1.0.4" }, "devDependencies": { "@sourceacademy/modules-buildtools": "workspace:^", - "@types/react": "^18.3.1", - "@types/react-dom": "^18.3.1" + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0" }, "scripts": { "build": "buildtools build tab .", diff --git a/src/bundles/pix_n_flix/package.json b/src/bundles/pix_n_flix/package.json index b456057021..156bf7c564 100644 --- a/src/bundles/pix_n_flix/package.json +++ b/src/bundles/pix_n_flix/package.json @@ -4,11 +4,11 @@ "private": true, "devDependencies": { "@sourceacademy/modules-buildtools": "workspace:^", - "@types/react": "^18.3.1", + "@types/react": "^19.0.0", "@vitest/browser-playwright": "4.1.0", "playwright": "^1.55.1", - "react": "^18.3.1", - "react-dom": "^18.3.1", + "react": "^19.0.0", + "react-dom": "^19.0.0", "typescript": "^6.0.2", "vitest": "4.1.0", "vitest-browser-react": "^2.1.0" diff --git a/src/bundles/unity_academy/package.json b/src/bundles/unity_academy/package.json index 4ca66ce671..d752440626 100644 --- a/src/bundles/unity_academy/package.json +++ b/src/bundles/unity_academy/package.json @@ -5,13 +5,13 @@ "dependencies": { "@blueprintjs/core": "^6.0.0", "@blueprintjs/icons": "^6.0.0", - "react": "^18.3.1", - "react-dom": "^18.3.1" + "react": "^19.0.0", + "react-dom": "^19.0.0" }, "devDependencies": { "@sourceacademy/modules-buildtools": "workspace:^", - "@types/react": "^18.3.1", - "@types/react-dom": "^18.3.1", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", "typescript": "^6.0.2" }, "type": "module", diff --git a/src/tabs/ArcadeTwod/package.json b/src/tabs/ArcadeTwod/package.json index 64533aa06c..2d2bfedd76 100644 --- a/src/tabs/ArcadeTwod/package.json +++ b/src/tabs/ArcadeTwod/package.json @@ -7,13 +7,13 @@ "@blueprintjs/icons": "^6.0.0", "@sourceacademy/modules-lib": "workspace:^", "phaser": "^3.54.0", - "react": "^18.3.1", - "react-dom": "^18.3.1" + "react": "^19.0.0", + "react-dom": "^19.0.0" }, "devDependencies": { "@sourceacademy/modules-buildtools": "workspace:^", - "@types/react": "^18.3.1", - "@types/react-dom": "^18.3.1", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", "typescript": "^6.0.2" }, "scripts": { diff --git a/src/tabs/CopyGc/package.json b/src/tabs/CopyGc/package.json index eac257cd72..f219e76fda 100644 --- a/src/tabs/CopyGc/package.json +++ b/src/tabs/CopyGc/package.json @@ -6,13 +6,13 @@ "@blueprintjs/core": "^6.0.0", "@sourceacademy/bundle-copy_gc": "workspace:^", "@sourceacademy/modules-lib": "workspace:^", - "react": "^18.3.1", - "react-dom": "^18.3.1" + "react": "^19.0.0", + "react-dom": "^19.0.0" }, "devDependencies": { "@sourceacademy/modules-buildtools": "workspace:^", - "@types/react": "^18.3.1", - "@types/react-dom": "^18.3.1", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", "typescript": "^6.0.2" }, "scripts": { diff --git a/src/tabs/Csg/package.json b/src/tabs/Csg/package.json index 6501390606..0ef23e0b51 100644 --- a/src/tabs/Csg/package.json +++ b/src/tabs/Csg/package.json @@ -7,13 +7,13 @@ "@blueprintjs/icons": "^6.0.0", "@sourceacademy/bundle-csg": "workspace:^", "@sourceacademy/modules-lib": "workspace:^", - "react": "^18.3.1", - "react-dom": "^18.3.1" + "react": "^19.0.0", + "react-dom": "^19.0.0" }, "devDependencies": { "@sourceacademy/modules-buildtools": "workspace:^", - "@types/react": "^18.3.1", - "@types/react-dom": "^18.3.1", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", "typescript": "^6.0.2" }, "scripts": { diff --git a/src/tabs/Curve/package.json b/src/tabs/Curve/package.json index 0dafd5afc3..134ce4ab37 100644 --- a/src/tabs/Curve/package.json +++ b/src/tabs/Curve/package.json @@ -7,13 +7,13 @@ "@blueprintjs/icons": "^6.0.0", "@sourceacademy/bundle-curve": "workspace:^", "@sourceacademy/modules-lib": "workspace:^", - "react": "^18.3.1", - "react-dom": "^18.3.1" + "react": "^19.0.0", + "react-dom": "^19.0.0" }, "devDependencies": { "@sourceacademy/modules-buildtools": "workspace:^", - "@types/react": "^18.3.1", - "@types/react-dom": "^18.3.1", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", "@vitest/browser-playwright": "4.1.0", "@vitest/coverage-v8": "4.1.0", "playwright": "^1.55.1", diff --git a/src/tabs/Game/package.json b/src/tabs/Game/package.json index 4b8bce2336..625ed579a1 100644 --- a/src/tabs/Game/package.json +++ b/src/tabs/Game/package.json @@ -4,12 +4,12 @@ "private": true, "dependencies": { "@sourceacademy/modules-lib": "workspace:^", - "react": "^18.3.1", - "react-dom": "^18.3.1" + "react": "^19.0.0", + "react-dom": "^19.0.0" }, "devDependencies": { "@sourceacademy/modules-buildtools": "workspace:^", - "@types/react": "^18.3.1", + "@types/react": "^19.0.0", "typescript": "^6.0.2" }, "scripts": { diff --git a/src/tabs/MarkSweep/package.json b/src/tabs/MarkSweep/package.json index c583187a57..cd48014d83 100644 --- a/src/tabs/MarkSweep/package.json +++ b/src/tabs/MarkSweep/package.json @@ -5,12 +5,12 @@ "dependencies": { "@blueprintjs/core": "^6.0.0", "@sourceacademy/modules-lib": "workspace:^", - "react": "^18.3.1", - "react-dom": "^18.3.1" + "react": "^19.0.0", + "react-dom": "^19.0.0" }, "devDependencies": { "@sourceacademy/modules-buildtools": "workspace:^", - "@types/react": "^18.3.1", + "@types/react": "^19.0.0", "typescript": "^6.0.2" }, "scripts": { diff --git a/src/tabs/Nbody/package.json b/src/tabs/Nbody/package.json index ba03f482d5..753f48cd3d 100644 --- a/src/tabs/Nbody/package.json +++ b/src/tabs/Nbody/package.json @@ -9,14 +9,14 @@ "@sourceacademy/modules-lib": "workspace:^", "nbody": "^0.2.0", "plotly.js-dist": "^2.17.1", - "react": "^18.3.1", - "react-dom": "^18.3.1", + "react": "^19.0.0", + "react-dom": "^19.0.0", "three": "^0.183.0" }, "devDependencies": { "@sourceacademy/modules-buildtools": "workspace:^", "@types/plotly.js": "^2.35.4", - "@types/react": "^18.3.1", + "@types/react": "^19.0.0", "@types/three": "^0.183.0", "typescript": "^6.0.2" }, diff --git a/src/tabs/Painter/package.json b/src/tabs/Painter/package.json index eba7882543..3c136eb587 100644 --- a/src/tabs/Painter/package.json +++ b/src/tabs/Painter/package.json @@ -5,13 +5,13 @@ "dependencies": { "@sourceacademy/bundle-painter": "workspace:^", "@sourceacademy/modules-lib": "workspace:^", - "react": "^18.3.1", - "react-dom": "^18.3.1" + "react": "^19.0.0", + "react-dom": "^19.0.0" }, "devDependencies": { "@sourceacademy/modules-buildtools": "workspace:^", - "@types/react": "^18.3.1", - "@types/react-dom": "^18.3.1", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", "typescript": "^6.0.2" }, "scripts": { diff --git a/src/tabs/Physics2D/package.json b/src/tabs/Physics2D/package.json index d22af4fdb6..e707a64369 100644 --- a/src/tabs/Physics2D/package.json +++ b/src/tabs/Physics2D/package.json @@ -8,12 +8,12 @@ "@box2d/debug-draw": "^0.10.0", "@sourceacademy/bundle-physics_2d": "workspace:^", "@sourceacademy/modules-lib": "workspace:^", - "react": "^18.3.1", - "react-dom": "^18.3.1" + "react": "^19.0.0", + "react-dom": "^19.0.0" }, "devDependencies": { "@sourceacademy/modules-buildtools": "workspace:^", - "@types/react": "^18.3.1", + "@types/react": "^19.0.0", "typescript": "^6.0.2" }, "scripts": { diff --git a/src/tabs/Pixnflix/package.json b/src/tabs/Pixnflix/package.json index 8e9e53b6c2..13cb0c5e60 100644 --- a/src/tabs/Pixnflix/package.json +++ b/src/tabs/Pixnflix/package.json @@ -7,12 +7,12 @@ "@blueprintjs/icons": "^6.0.0", "@sourceacademy/bundle-pix_n_flix": "workspace:^", "@sourceacademy/modules-lib": "workspace:^", - "react": "^18.3.1", - "react-dom": "^18.3.1" + "react": "^19.0.0", + "react-dom": "^19.0.0" }, "devDependencies": { "@sourceacademy/modules-buildtools": "workspace:^", - "@types/react": "^18.3.1", + "@types/react": "^19.0.0", "typescript": "^6.0.2" }, "scripts": { diff --git a/src/tabs/Plotly/package.json b/src/tabs/Plotly/package.json index 3eee997910..a487236ba8 100644 --- a/src/tabs/Plotly/package.json +++ b/src/tabs/Plotly/package.json @@ -5,12 +5,12 @@ "dependencies": { "@sourceacademy/bundle-plotly": "workspace:^", "@sourceacademy/modules-lib": "workspace:^", - "react": "^18.3.1", - "react-dom": "^18.3.1" + "react": "^19.0.0", + "react-dom": "^19.0.0" }, "devDependencies": { "@sourceacademy/modules-buildtools": "workspace:^", - "@types/react": "^18.3.1", + "@types/react": "^19.0.0", "typescript": "^6.0.2" }, "scripts": { diff --git a/src/tabs/Repeat/package.json b/src/tabs/Repeat/package.json index e04a75b8f2..b55f73acd6 100644 --- a/src/tabs/Repeat/package.json +++ b/src/tabs/Repeat/package.json @@ -4,12 +4,12 @@ "private": true, "dependencies": { "@sourceacademy/modules-lib": "workspace:^", - "react": "^18.3.1", - "react-dom": "^18.3.1" + "react": "^19.0.0", + "react-dom": "^19.0.0" }, "devDependencies": { "@sourceacademy/modules-buildtools": "workspace:^", - "@types/react": "^18.3.1", + "@types/react": "^19.0.0", "typescript": "^6.0.2" }, "scripts": { diff --git a/src/tabs/Repl/package.json b/src/tabs/Repl/package.json index ff80b97ba8..2d43a95e3f 100644 --- a/src/tabs/Repl/package.json +++ b/src/tabs/Repl/package.json @@ -8,14 +8,14 @@ "@sourceacademy/bundle-repl": "workspace:^", "@sourceacademy/modules-lib": "workspace:^", "ace-builds": "^1.25.1", - "react": "^18.3.1", + "react": "^19.0.0", "react-ace": "^14.0.0", - "react-dom": "^18.3.1" + "react-dom": "^19.0.0" }, "devDependencies": { "@sourceacademy/modules-buildtools": "workspace:^", - "@types/react": "^18.3.1", - "@types/react-dom": "^18.3.1", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", "typescript": "^6.0.2" }, "scripts": { diff --git a/src/tabs/RobotSimulation/package.json b/src/tabs/RobotSimulation/package.json index 84f955b4e5..2023f9d81c 100644 --- a/src/tabs/RobotSimulation/package.json +++ b/src/tabs/RobotSimulation/package.json @@ -7,12 +7,12 @@ "@dimforge/rapier3d-compat": "^0.11.2", "@sourceacademy/bundle-robot_simulation": "workspace:^", "@sourceacademy/modules-lib": "workspace:^", - "react": "^18.3.1", - "react-dom": "^18.3.1" + "react": "^19.0.0", + "react-dom": "^19.0.0" }, "devDependencies": { "@sourceacademy/modules-buildtools": "workspace:^", - "@types/react": "^18.3.1", + "@types/react": "^19.0.0", "typescript": "^6.0.2" }, "scripts": { diff --git a/src/tabs/Rune/package.json b/src/tabs/Rune/package.json index 09e7d31f1d..235e128fc3 100644 --- a/src/tabs/Rune/package.json +++ b/src/tabs/Rune/package.json @@ -6,12 +6,12 @@ "@sourceacademy/bundle-rune": "workspace:^", "@sourceacademy/modules-lib": "workspace:^", "es-toolkit": "^1.44.0", - "react": "^18.3.1", - "react-dom": "^18.3.1" + "react": "^19.0.0", + "react-dom": "^19.0.0" }, "devDependencies": { "@sourceacademy/modules-buildtools": "workspace:^", - "@types/react": "^18.3.1", + "@types/react": "^19.0.0", "@vitest/browser-playwright": "4.1.0", "playwright": "^1.55.1", "typescript": "^6.0.2", diff --git a/src/tabs/Sound/package.json b/src/tabs/Sound/package.json index 859149e6ff..e11bf8b241 100644 --- a/src/tabs/Sound/package.json +++ b/src/tabs/Sound/package.json @@ -5,12 +5,12 @@ "dependencies": { "@sourceacademy/bundle-sound": "workspace:^", "@sourceacademy/modules-lib": "workspace:^", - "react": "^18.3.1", - "react-dom": "^18.3.1" + "react": "^19.0.0", + "react-dom": "^19.0.0" }, "devDependencies": { "@sourceacademy/modules-buildtools": "workspace:^", - "@types/react": "^18.3.1", + "@types/react": "^19.0.0", "typescript": "^6.0.2" }, "scripts": { diff --git a/src/tabs/SoundMatrix/package.json b/src/tabs/SoundMatrix/package.json index 940586a513..9c298c4bd3 100644 --- a/src/tabs/SoundMatrix/package.json +++ b/src/tabs/SoundMatrix/package.json @@ -6,13 +6,13 @@ "@blueprintjs/core": "^6.0.0", "@sourceacademy/modules-lib": "workspace:^", "classnames": "^2.3.1", - "react": "^18.3.1", - "react-dom": "^18.3.1" + "react": "^19.0.0", + "react-dom": "^19.0.0" }, "devDependencies": { "@sourceacademy/modules-buildtools": "workspace:^", - "@types/react": "^18.3.1", - "@types/react-dom": "^18.3.1", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", "typescript": "^6.0.2" }, "scripts": { diff --git a/src/tabs/StereoSound/package.json b/src/tabs/StereoSound/package.json index 0bd5fb3165..634b87d605 100644 --- a/src/tabs/StereoSound/package.json +++ b/src/tabs/StereoSound/package.json @@ -5,13 +5,13 @@ "dependencies": { "@sourceacademy/bundle-stereo_sound": "workspace:^", "@sourceacademy/modules-lib": "workspace:^", - "react": "^18.3.1", - "react-dom": "^18.3.1" + "react": "^19.0.0", + "react-dom": "^19.0.0" }, "devDependencies": { "@sourceacademy/modules-buildtools": "workspace:^", - "@types/react": "^18.3.1", - "@types/react-dom": "^18.3.1", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", "typescript": "^6.0.2" }, "scripts": { diff --git a/src/tabs/Unittest/package.json b/src/tabs/Unittest/package.json index e9d6639990..8e9cd303b4 100644 --- a/src/tabs/Unittest/package.json +++ b/src/tabs/Unittest/package.json @@ -6,12 +6,12 @@ "@sourceacademy/bundle-unittest": "workspace:^", "@sourceacademy/modules-lib": "workspace:^", "es-toolkit": "^1.44.0", - "react": "^18.3.1", - "react-dom": "^18.3.1" + "react": "^19.0.0", + "react-dom": "^19.0.0" }, "devDependencies": { "@sourceacademy/modules-buildtools": "workspace:^", - "@types/react": "^18.3.1", + "@types/react": "^19.0.0", "typescript": "^6.0.2" }, "scripts": { diff --git a/src/tabs/UnityAcademy/package.json b/src/tabs/UnityAcademy/package.json index 400de6b285..0bd3a66515 100644 --- a/src/tabs/UnityAcademy/package.json +++ b/src/tabs/UnityAcademy/package.json @@ -7,13 +7,13 @@ "@blueprintjs/icons": "^6.0.0", "@sourceacademy/bundle-unity_academy": "workspace:^", "@sourceacademy/modules-lib": "workspace:^", - "react": "^18.3.1", - "react-dom": "^18.3.1" + "react": "^19.0.0", + "react-dom": "^19.0.0" }, "devDependencies": { "@sourceacademy/modules-buildtools": "workspace:^", - "@types/react": "^18.3.1", - "@types/react-dom": "^18.3.1", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", "typescript": "^6.0.2" }, "type": "module", diff --git a/yarn.lock b/yarn.lock index 4a6d9cb1a4..07c019d544 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4013,11 +4013,11 @@ __metadata: resolution: "@sourceacademy/bundle-pix_n_flix@workspace:src/bundles/pix_n_flix" dependencies: "@sourceacademy/modules-buildtools": "workspace:^" - "@types/react": "npm:^18.3.1" + "@types/react": "npm:^19.0.0" "@vitest/browser-playwright": "npm:4.1.0" playwright: "npm:^1.55.1" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" typescript: "npm:^6.0.2" vitest: "npm:4.1.0" vitest-browser-react: "npm:^2.1.0" @@ -4154,10 +4154,10 @@ __metadata: "@blueprintjs/core": "npm:^6.0.0" "@blueprintjs/icons": "npm:^6.0.0" "@sourceacademy/modules-buildtools": "workspace:^" - "@types/react": "npm:^18.3.1" - "@types/react-dom": "npm:^18.3.1" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" + "@types/react": "npm:^19.0.0" + "@types/react-dom": "npm:^19.0.0" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" typescript: "npm:^6.0.2" languageName: unknown linkType: soft @@ -4264,8 +4264,8 @@ __metadata: "@commander-js/extra-typings": "npm:^14.0.0" "@sourceacademy/modules-buildtools": "workspace:^" "@sourceacademy/modules-lib": "workspace:^" - "@types/react": "npm:^18.3.1" - "@types/react-dom": "npm:^18.3.1" + "@types/react": "npm:^19.0.0" + "@types/react-dom": "npm:^19.0.0" "@vitejs/plugin-react": "npm:^6.0.1" "@vitest/browser-playwright": "npm:4.1.0" ace-builds: "npm:^1.25.1" @@ -4275,9 +4275,9 @@ __metadata: js-slang: "npm:^1.0.85" playwright: "npm:^1.55.1" re-resizable: "npm:^6.9.11" - react: "npm:^18.3.1" + react: "npm:^19.0.0" react-ace: "npm:^14.0.0" - react-dom: "npm:^18.3.1" + react-dom: "npm:^19.0.0" sass: "npm:^1.85.0" typescript: "npm:^6.0.2" vite: "npm:^8.0.5" @@ -4331,16 +4331,16 @@ __metadata: "@blueprintjs/core": "npm:^6.0.0" "@blueprintjs/icons": "npm:^6.0.0" "@sourceacademy/modules-buildtools": "workspace:^" - "@types/react": "npm:^18.3.1" - "@types/react-dom": "npm:^18.3.1" + "@types/react": "npm:^19.0.0" + "@types/react-dom": "npm:^19.0.0" "@vitejs/plugin-react": "npm:^6.0.1" "@vitest/browser-playwright": "npm:4.1.0" es-toolkit: "npm:^1.44.0" eslint: "npm:^9.35.0" js-slang: "npm:^1.0.85" playwright: "npm:^1.55.1" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" typedoc: "npm:^0.28.9" typedoc-plugin-frontmatter: "npm:^1.3.0" typedoc-plugin-markdown: "npm:^4.7.0" @@ -4386,8 +4386,8 @@ __metadata: "@sourceacademy/vitest-reporter": "workspace:^" "@stylistic/eslint-plugin": "npm:^5.10.0" "@types/node": "npm:^24.0.0" - "@types/react": "npm:^18.3.1" - "@types/react-dom": "npm:^18.3.1" + "@types/react": "npm:^19.0.0" + "@types/react-dom": "npm:^19.0.0" "@vitest/coverage-v8": "npm:4.1.0" "@vitest/eslint-plugin": "npm:^1.6.14" "@yarnpkg/types": "npm:^4.0.1" @@ -4403,8 +4403,8 @@ __metadata: husky: "npm:^9.1.7" jsdom: "npm:^29.0.0" jsonc-eslint-parser: "npm:^3.1.0" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" typescript: "npm:^6.0.2" typescript-eslint: "npm:^8.58.0" vitest: "npm:4.1.0" @@ -4427,11 +4427,11 @@ __metadata: "@blueprintjs/icons": "npm:^6.0.0" "@sourceacademy/modules-buildtools": "workspace:^" "@sourceacademy/modules-lib": "workspace:^" - "@types/react": "npm:^18.3.1" - "@types/react-dom": "npm:^18.3.1" + "@types/react": "npm:^19.0.0" + "@types/react-dom": "npm:^19.0.0" phaser: "npm:^3.54.0" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" typescript: "npm:^6.0.2" languageName: unknown linkType: soft @@ -4444,10 +4444,10 @@ __metadata: "@sourceacademy/bundle-copy_gc": "workspace:^" "@sourceacademy/modules-buildtools": "workspace:^" "@sourceacademy/modules-lib": "workspace:^" - "@types/react": "npm:^18.3.1" - "@types/react-dom": "npm:^18.3.1" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" + "@types/react": "npm:^19.0.0" + "@types/react-dom": "npm:^19.0.0" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" typescript: "npm:^6.0.2" languageName: unknown linkType: soft @@ -4461,10 +4461,10 @@ __metadata: "@sourceacademy/bundle-csg": "workspace:^" "@sourceacademy/modules-buildtools": "workspace:^" "@sourceacademy/modules-lib": "workspace:^" - "@types/react": "npm:^18.3.1" - "@types/react-dom": "npm:^18.3.1" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" + "@types/react": "npm:^19.0.0" + "@types/react-dom": "npm:^19.0.0" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" typescript: "npm:^6.0.2" languageName: unknown linkType: soft @@ -4478,13 +4478,13 @@ __metadata: "@sourceacademy/bundle-curve": "workspace:^" "@sourceacademy/modules-buildtools": "workspace:^" "@sourceacademy/modules-lib": "workspace:^" - "@types/react": "npm:^18.3.1" - "@types/react-dom": "npm:^18.3.1" + "@types/react": "npm:^19.0.0" + "@types/react-dom": "npm:^19.0.0" "@vitest/browser-playwright": "npm:4.1.0" "@vitest/coverage-v8": "npm:4.1.0" playwright: "npm:^1.55.1" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" typescript: "npm:^6.0.2" vitest: "npm:4.1.0" vitest-browser-react: "npm:^2.1.0" @@ -4497,9 +4497,9 @@ __metadata: dependencies: "@sourceacademy/modules-buildtools": "workspace:^" "@sourceacademy/modules-lib": "workspace:^" - "@types/react": "npm:^18.3.1" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" + "@types/react": "npm:^19.0.0" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" typescript: "npm:^6.0.2" languageName: unknown linkType: soft @@ -4511,9 +4511,9 @@ __metadata: "@blueprintjs/core": "npm:^6.0.0" "@sourceacademy/modules-buildtools": "workspace:^" "@sourceacademy/modules-lib": "workspace:^" - "@types/react": "npm:^18.3.1" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" + "@types/react": "npm:^19.0.0" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" typescript: "npm:^6.0.2" languageName: unknown linkType: soft @@ -4528,12 +4528,12 @@ __metadata: "@sourceacademy/modules-buildtools": "workspace:^" "@sourceacademy/modules-lib": "workspace:^" "@types/plotly.js": "npm:^2.35.4" - "@types/react": "npm:^18.3.1" + "@types/react": "npm:^19.0.0" "@types/three": "npm:^0.183.0" nbody: "npm:^0.2.0" plotly.js-dist: "npm:^2.17.1" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" three: "npm:^0.183.0" typescript: "npm:^6.0.2" languageName: unknown @@ -4546,10 +4546,10 @@ __metadata: "@sourceacademy/bundle-painter": "workspace:^" "@sourceacademy/modules-buildtools": "workspace:^" "@sourceacademy/modules-lib": "workspace:^" - "@types/react": "npm:^18.3.1" - "@types/react-dom": "npm:^18.3.1" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" + "@types/react": "npm:^19.0.0" + "@types/react-dom": "npm:^19.0.0" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" typescript: "npm:^6.0.2" languageName: unknown linkType: soft @@ -4564,9 +4564,9 @@ __metadata: "@sourceacademy/bundle-physics_2d": "workspace:^" "@sourceacademy/modules-buildtools": "workspace:^" "@sourceacademy/modules-lib": "workspace:^" - "@types/react": "npm:^18.3.1" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" + "@types/react": "npm:^19.0.0" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" typescript: "npm:^6.0.2" languageName: unknown linkType: soft @@ -4580,9 +4580,9 @@ __metadata: "@sourceacademy/bundle-pix_n_flix": "workspace:^" "@sourceacademy/modules-buildtools": "workspace:^" "@sourceacademy/modules-lib": "workspace:^" - "@types/react": "npm:^18.3.1" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" + "@types/react": "npm:^19.0.0" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" typescript: "npm:^6.0.2" languageName: unknown linkType: soft @@ -4594,9 +4594,9 @@ __metadata: "@sourceacademy/bundle-plotly": "workspace:^" "@sourceacademy/modules-buildtools": "workspace:^" "@sourceacademy/modules-lib": "workspace:^" - "@types/react": "npm:^18.3.1" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" + "@types/react": "npm:^19.0.0" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" typescript: "npm:^6.0.2" languageName: unknown linkType: soft @@ -4607,9 +4607,9 @@ __metadata: dependencies: "@sourceacademy/modules-buildtools": "workspace:^" "@sourceacademy/modules-lib": "workspace:^" - "@types/react": "npm:^18.3.1" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" + "@types/react": "npm:^19.0.0" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" typescript: "npm:^6.0.2" languageName: unknown linkType: soft @@ -4623,12 +4623,12 @@ __metadata: "@sourceacademy/bundle-repl": "workspace:^" "@sourceacademy/modules-buildtools": "workspace:^" "@sourceacademy/modules-lib": "workspace:^" - "@types/react": "npm:^18.3.1" - "@types/react-dom": "npm:^18.3.1" + "@types/react": "npm:^19.0.0" + "@types/react-dom": "npm:^19.0.0" ace-builds: "npm:^1.25.1" - react: "npm:^18.3.1" + react: "npm:^19.0.0" react-ace: "npm:^14.0.0" - react-dom: "npm:^18.3.1" + react-dom: "npm:^19.0.0" typescript: "npm:^6.0.2" languageName: unknown linkType: soft @@ -4642,9 +4642,9 @@ __metadata: "@sourceacademy/bundle-robot_simulation": "workspace:^" "@sourceacademy/modules-buildtools": "workspace:^" "@sourceacademy/modules-lib": "workspace:^" - "@types/react": "npm:^18.3.1" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" + "@types/react": "npm:^19.0.0" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" typescript: "npm:^6.0.2" languageName: unknown linkType: soft @@ -4656,12 +4656,12 @@ __metadata: "@sourceacademy/bundle-rune": "workspace:^" "@sourceacademy/modules-buildtools": "workspace:^" "@sourceacademy/modules-lib": "workspace:^" - "@types/react": "npm:^18.3.1" + "@types/react": "npm:^19.0.0" "@vitest/browser-playwright": "npm:4.1.0" es-toolkit: "npm:^1.44.0" playwright: "npm:^1.55.1" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" typescript: "npm:^6.0.2" vitest: "npm:4.1.0" vitest-browser-react: "npm:^2.1.0" @@ -4675,9 +4675,9 @@ __metadata: "@sourceacademy/bundle-sound": "workspace:^" "@sourceacademy/modules-buildtools": "workspace:^" "@sourceacademy/modules-lib": "workspace:^" - "@types/react": "npm:^18.3.1" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" + "@types/react": "npm:^19.0.0" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" typescript: "npm:^6.0.2" languageName: unknown linkType: soft @@ -4689,11 +4689,11 @@ __metadata: "@blueprintjs/core": "npm:^6.0.0" "@sourceacademy/modules-buildtools": "workspace:^" "@sourceacademy/modules-lib": "workspace:^" - "@types/react": "npm:^18.3.1" - "@types/react-dom": "npm:^18.3.1" + "@types/react": "npm:^19.0.0" + "@types/react-dom": "npm:^19.0.0" classnames: "npm:^2.3.1" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" typescript: "npm:^6.0.2" languageName: unknown linkType: soft @@ -4705,10 +4705,10 @@ __metadata: "@sourceacademy/bundle-stereo_sound": "workspace:^" "@sourceacademy/modules-buildtools": "workspace:^" "@sourceacademy/modules-lib": "workspace:^" - "@types/react": "npm:^18.3.1" - "@types/react-dom": "npm:^18.3.1" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" + "@types/react": "npm:^19.0.0" + "@types/react-dom": "npm:^19.0.0" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" typescript: "npm:^6.0.2" languageName: unknown linkType: soft @@ -4720,10 +4720,10 @@ __metadata: "@sourceacademy/bundle-unittest": "workspace:^" "@sourceacademy/modules-buildtools": "workspace:^" "@sourceacademy/modules-lib": "workspace:^" - "@types/react": "npm:^18.3.1" + "@types/react": "npm:^19.0.0" es-toolkit: "npm:^1.44.0" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" typescript: "npm:^6.0.2" languageName: unknown linkType: soft @@ -4737,10 +4737,10 @@ __metadata: "@sourceacademy/bundle-unity_academy": "workspace:^" "@sourceacademy/modules-buildtools": "workspace:^" "@sourceacademy/modules-lib": "workspace:^" - "@types/react": "npm:^18.3.1" - "@types/react-dom": "npm:^18.3.1" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" + "@types/react": "npm:^19.0.0" + "@types/react-dom": "npm:^19.0.0" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" typescript: "npm:^6.0.2" languageName: unknown linkType: soft @@ -5396,29 +5396,21 @@ __metadata: languageName: node linkType: hard -"@types/prop-types@npm:*": - version: 15.7.14 - resolution: "@types/prop-types@npm:15.7.14" - checksum: 10c0/1ec775160bfab90b67a782d735952158c7e702ca4502968aa82565bd8e452c2de8601c8dfe349733073c31179116cf7340710160d3836aa8a1ef76d1532893b1 - languageName: node - linkType: hard - -"@types/react-dom@npm:^18.3.1": - version: 18.3.7 - resolution: "@types/react-dom@npm:18.3.7" +"@types/react-dom@npm:^19.0.0": + version: 19.2.3 + resolution: "@types/react-dom@npm:19.2.3" peerDependencies: - "@types/react": ^18.0.0 - checksum: 10c0/8bd309e2c3d1604a28a736a24f96cbadf6c05d5288cfef8883b74f4054c961b6b3a5e997fd5686e492be903c8f3380dba5ec017eff3906b1256529cd2d39603e + "@types/react": ^19.2.0 + checksum: 10c0/b486ebe0f4e2fb35e2e108df1d8fc0927ca5d6002d5771e8a739de11239fe62d0e207c50886185253c99eb9dedfeeb956ea7429e5ba17f6693c7acb4c02f8cd1 languageName: node linkType: hard -"@types/react@npm:^18.3.1": - version: 18.3.28 - resolution: "@types/react@npm:18.3.28" +"@types/react@npm:^19.0.0": + version: 19.2.14 + resolution: "@types/react@npm:19.2.14" dependencies: - "@types/prop-types": "npm:*" csstype: "npm:^3.2.2" - checksum: 10c0/683e19cd12b5c691215529af2e32b5ffbaccae3bf0ba93bfafa0e460e8dfee18423afed568be2b8eadf4b837c3749dd296a4f64e2d79f68fa66962c05f5af661 + checksum: 10c0/7d25bf41b57719452d86d2ac0570b659210402707313a36ee612666bf11275a1c69824f8c3ee1fdca077ccfe15452f6da8f1224529b917050eb2d861e52b59b7 languageName: node linkType: hard @@ -12405,7 +12397,7 @@ __metadata: languageName: node linkType: hard -"loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": +"loose-envify@npm:^1.0.0, loose-envify@npm:^1.4.0": version: 1.4.0 resolution: "loose-envify@npm:1.4.0" dependencies: @@ -14935,15 +14927,14 @@ __metadata: languageName: node linkType: hard -"react-dom@npm:^18.3.1": - version: 18.3.1 - resolution: "react-dom@npm:18.3.1" +"react-dom@npm:^19.0.0": + version: 19.2.5 + resolution: "react-dom@npm:19.2.5" dependencies: - loose-envify: "npm:^1.1.0" - scheduler: "npm:^0.23.2" + scheduler: "npm:^0.27.0" peerDependencies: - react: ^18.3.1 - checksum: 10c0/a752496c1941f958f2e8ac56239172296fcddce1365ce45222d04a1947e0cc5547df3e8447f855a81d6d39f008d7c32eab43db3712077f09e3f67c4874973e85 + react: ^19.2.5 + checksum: 10c0/8067606e9f58e4c2e8cb5f09570217dbc71c4843ebcaa20ae2085912d3e3a351f17d8f7c1713313cdda7f272840c8c34ff6c860fcb840862071bceea218e0c63 languageName: node linkType: hard @@ -14990,12 +14981,10 @@ __metadata: languageName: node linkType: hard -"react@npm:^18.3.1": - version: 18.3.1 - resolution: "react@npm:18.3.1" - dependencies: - loose-envify: "npm:^1.1.0" - checksum: 10c0/283e8c5efcf37802c9d1ce767f302dd569dd97a70d9bb8c7be79a789b9902451e0d16334b05d73299b20f048cbc3c7d288bbbde10b701fa194e2089c237dbea3 +"react@npm:^19.0.0": + version: 19.2.5 + resolution: "react@npm:19.2.5" + checksum: 10c0/4b5f231dbef92886f602533c9ce3bde04d99f0e71dfb5d794c43e02726efaad0421c08688f75fc98a6d6e1dc017372e1af7abbfecdc86a79968f461675931a7a languageName: node linkType: hard @@ -15688,12 +15677,10 @@ __metadata: languageName: node linkType: hard -"scheduler@npm:^0.23.2": - version: 0.23.2 - resolution: "scheduler@npm:0.23.2" - dependencies: - loose-envify: "npm:^1.1.0" - checksum: 10c0/26383305e249651d4c58e6705d5f8425f153211aef95f15161c151f7b8de885f24751b377e4a0b3dd42cce09aad3f87a61dab7636859c0d89b7daf1a1e2a5c78 +"scheduler@npm:^0.27.0": + version: 0.27.0 + resolution: "scheduler@npm:0.27.0" + checksum: 10c0/4f03048cb05a3c8fddc45813052251eca00688f413a3cee236d984a161da28db28ba71bd11e7a3dd02f7af84ab28d39fb311431d3b3772fed557945beb00c452 languageName: node linkType: hard From c4d6423dc6c1ffe7fb225812ad3cc1832ec748f9 Mon Sep 17 00:00:00 2001 From: Richard Dominick <34370238+RichDom2185@users.noreply.github.com> Date: Mon, 13 Apr 2026 23:50:37 +0800 Subject: [PATCH 2/6] Reformat and remove `JSX` namespace usage --- .../src/components/controlBar/ControlBar.tsx | 8 ++++---- devserver/src/components/repl/Repl.tsx | 3 +-- .../components/sideContent/SideContent.tsx | 2 +- devserver/src/components/sideContent/types.ts | 4 ++-- docs/src/modules/3-tabs/1-overview.md | 2 +- .../src/tabs/MultiItemDisplay/index.tsx | 2 +- lib/modules-lib/src/types/index.ts | 2 +- src/tabs/Repl/index.tsx | 20 +++++++++---------- 8 files changed, 21 insertions(+), 22 deletions(-) diff --git a/devserver/src/components/controlBar/ControlBar.tsx b/devserver/src/components/controlBar/ControlBar.tsx index 249cacc573..1137fdda56 100644 --- a/devserver/src/components/controlBar/ControlBar.tsx +++ b/devserver/src/components/controlBar/ControlBar.tsx @@ -1,11 +1,11 @@ import { Classes } from '@blueprintjs/core'; import classNames from 'classnames'; -import React, { type JSX } from 'react'; +import React from 'react'; export type ControlBarProps = { - editorButtons: Array; - flowButtons?: Array; - editingWorkspaceButtons?: Array; + editorButtons: Array; + flowButtons?: Array; + editingWorkspaceButtons?: Array; }; const ControlBar: React.FC = (props) => { diff --git a/devserver/src/components/repl/Repl.tsx b/devserver/src/components/repl/Repl.tsx index 5a996c1e92..950495a44b 100644 --- a/devserver/src/components/repl/Repl.tsx +++ b/devserver/src/components/repl/Repl.tsx @@ -68,7 +68,6 @@ const Output: React.FC = (props: OutputProps) => { }; export type ReplProps = { - // replButtons: Array; output: InterpreterOutput | null; hidden?: boolean; inputHidden?: boolean; @@ -80,7 +79,7 @@ const Repl: React.FC = (props: ReplProps) => (
{props.output === null ? - : } + : } {/* {cards.length > 0 ? cards : ()} */}
diff --git a/devserver/src/components/sideContent/SideContent.tsx b/devserver/src/components/sideContent/SideContent.tsx index 82f6bbdefd..a338f5a754 100644 --- a/devserver/src/components/sideContent/SideContent.tsx +++ b/devserver/src/components/sideContent/SideContent.tsx @@ -59,7 +59,7 @@ const renderTab = ( return ; } - const tabPanel: React.JSX.Element =
{tab.body}
; + const tabPanel: React.ReactElement =
{tab.body}
; return ; }; diff --git a/devserver/src/components/sideContent/types.ts b/devserver/src/components/sideContent/types.ts index 50ba1f5323..34c8eab2d0 100644 --- a/devserver/src/components/sideContent/types.ts +++ b/devserver/src/components/sideContent/types.ts @@ -11,14 +11,14 @@ export type SideContentTab = { id: string; label: string; iconName: IconName; - body: React.JSX.Element; + body: React.ReactElement; }; export type ModuleSideContent = { label: string; iconName: IconName; toSpawn?: (context: DebuggerContext) => boolean; - body: (context: DebuggerContext) => React.JSX.Element; + body: (context: DebuggerContext) => React.ReactElement; }; export type RawTab = (provider: ReturnType, react: typeof React) => Promise<{ default: ModuleSideContent }>; diff --git a/docs/src/modules/3-tabs/1-overview.md b/docs/src/modules/3-tabs/1-overview.md index 3cae201d3b..6791f1d624 100644 --- a/docs/src/modules/3-tabs/1-overview.md +++ b/docs/src/modules/3-tabs/1-overview.md @@ -67,7 +67,7 @@ The Frontend expects each tab's entry point to provide a default export of an ob ```ts interface ModuleSideContent { toSpawn: ((context: DebuggerContext) => boolean) | undefined; - body: (context: DebuggerContext) => JSX.Element; + body: (context: DebuggerContext) => React.ReactElement; label: string; iconName: string; } diff --git a/lib/modules-lib/src/tabs/MultiItemDisplay/index.tsx b/lib/modules-lib/src/tabs/MultiItemDisplay/index.tsx index cd1f0d9010..08165836ba 100644 --- a/lib/modules-lib/src/tabs/MultiItemDisplay/index.tsx +++ b/lib/modules-lib/src/tabs/MultiItemDisplay/index.tsx @@ -4,7 +4,7 @@ import { clamp } from 'es-toolkit'; import { useState } from 'react'; export interface MultiItemDisplayProps { - elements: JSX.Element[]; + elements: React.ReactElement[]; onStepChange?: (newIndex: number, oldIndex: number) => void; }; diff --git a/lib/modules-lib/src/types/index.ts b/lib/modules-lib/src/types/index.ts index a5f00358d9..68cd9c1fe5 100644 --- a/lib/modules-lib/src/types/index.ts +++ b/lib/modules-lib/src/types/index.ts @@ -93,5 +93,5 @@ export interface ModuleSideContent { * This function will be called to render the module tab in the side contents * on Source Academy frontend. */ - body: (context: DebuggerContext) => JSX.Element; + body: (context: DebuggerContext) => React.ReactElement; }; diff --git a/src/tabs/Repl/index.tsx b/src/tabs/Repl/index.tsx index 4cf2f401a5..19278a6ca6 100644 --- a/src/tabs/Repl/index.tsx +++ b/src/tabs/Repl/index.tsx @@ -66,26 +66,26 @@ class ProgrammableReplGUI extends React.Component { } public render() { const { editorHeight } = this.state; - const outputDivs: React.JSX.Element[] = []; + const outputDivs: React.ReactElement[] = []; const outputStringCount = this.replInstance.outputStrings.length; for (let i = 0; i < outputStringCount; i++) { const str = this.replInstance.outputStrings[i]; if (str.outputMethod === 'richtext') { if (str.color === '') { - outputDivs.push(
); + outputDivs.push(
); } else { outputDivs.push(
); + }} dangerouslySetInnerHTML={{ __html: str.content }} />); } } else if (str.color === '') { - outputDivs.push(
{ str.content }
); + outputDivs.push(
{str.content}
); } else { outputDivs.push(
{ str.content } + }}>{str.content}
); } } @@ -105,18 +105,18 @@ class ProgrammableReplGUI extends React.Component { onClick={() => this.replInstance.saveEditorContent()}// Note: Here if I directly use "this.replInstance.RunCode" instead using this lambda function, the "this" reference will become undefined and lead to a runtime error when user clicks the "Run" button text="Save" /> -
{ +
{ this.editorAreaRect = e?.getBoundingClientRect(); }} style={{ padding: `${BOX_PADDING_VALUE}px`, border: '2px solid #6f8194' }}> { + ref={(e) => { this.editorInstance = e?.editor; this.replInstance.setEditorInstance(e?.editor); }} - style={ { + style={{ width: '100%', height: `${editorHeight}px`, ...this.replInstance.customizedEditorProps.backgroundImageUrl !== 'no-background-image' && { @@ -125,9 +125,9 @@ class ProgrammableReplGUI extends React.Component { backgroundSize: '100%', backgroundRepeat: 'no-repeat' } - } } + }} mode="javascript" theme="twilight" - onChange={ (newValue) => this.replInstance.updateUserCode(newValue) } + onChange={(newValue) => this.replInstance.updateUserCode(newValue)} value={this.replInstance.userCodeInEditor.toString()} />
From ec6239f07f183c5490822d80be41a4e896089bc7 Mon Sep 17 00:00:00 2001 From: Richard Dominick <34370238+RichDom2185@users.noreply.github.com> Date: Mon, 13 Apr 2026 23:55:53 +0800 Subject: [PATCH 3/6] Update docs and peer dependencies range --- docs/src/modules/2-bundle/3-editing.md | 2 +- docs/src/modules/3-tabs/3-editing.md | 2 +- docs/src/repotools/5-yarn.md | 2 +- package.json | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/src/modules/2-bundle/3-editing.md b/docs/src/modules/2-bundle/3-editing.md index 35e7cd5d49..f89cbada5f 100644 --- a/docs/src/modules/2-bundle/3-editing.md +++ b/docs/src/modules/2-bundle/3-editing.md @@ -43,7 +43,7 @@ This adds the dependency to `devDependencies` instead. > specified in the root repository `package.json`: > > ```sh -> yarn add react@^18.3.1 +> yarn add react@^19.0.0 > ``` > > You can also use the command `yarn constraints` to check if you have incorrectly specified the version of a dependency. You can view all diff --git a/docs/src/modules/3-tabs/3-editing.md b/docs/src/modules/3-tabs/3-editing.md index 2202d4a43c..7d07b82bb2 100644 --- a/docs/src/modules/3-tabs/3-editing.md +++ b/docs/src/modules/3-tabs/3-editing.md @@ -43,7 +43,7 @@ This adds the dependency to `devDependencies` instead. > specified in the root repository `package.json`: > > ```sh -> yarn add react@^18.3.1 +> yarn add react@^19.0.0 > ``` > > You can also use the command `yarn constraints` to check if you have incorrectly specified the version of a dependency. You can view all diff --git a/docs/src/repotools/5-yarn.md b/docs/src/repotools/5-yarn.md index 2abbde97ac..e037e6e9e9 100644 --- a/docs/src/repotools/5-yarn.md +++ b/docs/src/repotools/5-yarn.md @@ -28,7 +28,7 @@ As part of ensuring consistency, everything in this repository has been designed Tabs, for example, should all be using the same versions of `react` and `react-dom`: the one in use by the frontend. If a dependency is specified in the root `package.json`, then the constraints file requires that all child workspaces use the version of that dependency. -For example, the root package specifies `react@^18.3.1` as a dependency, so all workspaces that require React must also use that version spec. +For example, the root package specifies `react@^19.0.0` as a dependency, so all workspaces that require React must also use that version spec. This validation is not carried out across child workspaces, however. Two different bundles could use two different versions of the same package. This should not cause an issue **unless** the bundles are somehow dependent on each other. diff --git a/package.json b/package.json index b609d9f866..bb89f9db39 100644 --- a/package.json +++ b/package.json @@ -89,8 +89,8 @@ "@blueprintjs/icons": "^6.0.0", "es-toolkit": "^1.44.0", "js-slang": "^1.0.85", - "react": "^18.3.1", - "react-dom": "^18.3.1" + "react": "^18.3.1 || ^19.0.0", + "react-dom": "^18.3.1 || ^19.0.0" }, "devEngines": { "packageManager": { From ef031cbfbed3195a3e1899e1649209f3991beb35 Mon Sep 17 00:00:00 2001 From: Richard Dominick <34370238+RichDom2185@users.noreply.github.com> Date: Mon, 13 Apr 2026 23:57:20 +0800 Subject: [PATCH 4/6] Fix ref type breaking changes --- src/tabs/Csg/src/canvas_holder.tsx | 2 +- src/tabs/Rune/src/hollusion_canvas.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tabs/Csg/src/canvas_holder.tsx b/src/tabs/Csg/src/canvas_holder.tsx index c4a04facdf..541f71b389 100644 --- a/src/tabs/Csg/src/canvas_holder.tsx +++ b/src/tabs/Csg/src/canvas_holder.tsx @@ -13,7 +13,7 @@ export default class CanvasHolder extends React.Component< CanvasHolderProps, CanvasHolderState > { - private readonly canvasReference: React.RefObject = React.createRef(); + private readonly canvasReference: React.RefObject = React.createRef(); private statefulRenderer: StatefulRenderer | null = null; diff --git a/src/tabs/Rune/src/hollusion_canvas.tsx b/src/tabs/Rune/src/hollusion_canvas.tsx index cb47100dff..7e2d229e3a 100644 --- a/src/tabs/Rune/src/hollusion_canvas.tsx +++ b/src/tabs/Rune/src/hollusion_canvas.tsx @@ -13,7 +13,7 @@ type Props = { export default function HollusionCanvas({ rune }: Props) { // We memoize the render function so that we don't have // to reinitialize the shaders every time - const renderFuncRef = React.useRef<(time: number) => void>(); + const renderFuncRef = React.useRef<(time: number) => void>(undefined); const { setCanvas } = useAnimation({ callback(timestamp, canvas) { From 2b6cfd2a571e8475aa5a0491997e5de9e6ee3041 Mon Sep 17 00:00:00 2001 From: Richard Dominick <34370238+RichDom2185@users.noreply.github.com> Date: Mon, 13 Apr 2026 23:58:31 +0800 Subject: [PATCH 5/6] Drop React 18 from peer deps --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index bb89f9db39..54b99c0caf 100644 --- a/package.json +++ b/package.json @@ -89,8 +89,8 @@ "@blueprintjs/icons": "^6.0.0", "es-toolkit": "^1.44.0", "js-slang": "^1.0.85", - "react": "^18.3.1 || ^19.0.0", - "react-dom": "^18.3.1 || ^19.0.0" + "react": "^19.0.0", + "react-dom": "^19.0.0" }, "devEngines": { "packageManager": { From defd041801cd5716f9c9f262d29400514f36ad3a Mon Sep 17 00:00:00 2001 From: Richard Dominick <34370238+RichDom2185@users.noreply.github.com> Date: Tue, 14 Apr 2026 00:04:47 +0800 Subject: [PATCH 6/6] Fix devserver compile error --- devserver/src/components/utils/Hooks.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devserver/src/components/utils/Hooks.ts b/devserver/src/components/utils/Hooks.ts index 6e292e6509..4f3c4ea1a9 100644 --- a/devserver/src/components/utils/Hooks.ts +++ b/devserver/src/components/utils/Hooks.ts @@ -7,7 +7,7 @@ import React, { type RefObject } from 'react'; -export const useDimensions = (ref: RefObject): [width: number, height: number] => { +export const useDimensions = (ref: RefObject): [width: number, height: number] => { const [width, setWidth] = React.useState(0); const [height, setHeight] = React.useState(0);