From 9fcc43a311f6c332412b3f8063e8297cca642598 Mon Sep 17 00:00:00 2001 From: Alan Garny Date: Tue, 3 Mar 2026 10:08:39 +1300 Subject: [PATCH 1/4] New version. --- package.json | 2 +- src/renderer/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index b382570d..827bd00b 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "url": "git+https://github.com/opencor/webapp.git" }, "type": "module", - "version": "0.20260303.0", + "version": "0.20260303.1", "engines": { "bun": ">=1.2.0" }, diff --git a/src/renderer/package.json b/src/renderer/package.json index 6cf90077..f1bc1b14 100644 --- a/src/renderer/package.json +++ b/src/renderer/package.json @@ -42,7 +42,7 @@ }, "./style.css": "./dist/opencor.css" }, - "version": "0.20260303.0", + "version": "0.20260303.1", "scripts": { "build": "vite build && bun scripts/generate.version.js", "build:lib": "vite build --config vite.lib.config.ts && bun scripts/copy.indexdts.js", From a0f55938884621d4ddccb5daf8f36bc0c5f3bd23 Mon Sep 17 00:00:00 2001 From: Alan Garny Date: Tue, 3 Mar 2026 10:09:47 +1300 Subject: [PATCH 2/4] Updated our dependencies. --- bun.lock | 24 ++++++++++++------------ package.json | 2 +- src/renderer/bun.lock | 24 ++++++++++++------------ src/renderer/package.json | 2 +- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/bun.lock b/bun.lock index adfe1517..d34d793c 100644 --- a/bun.lock +++ b/bun.lock @@ -14,7 +14,7 @@ "xxhash-wasm": "^1.1.0", }, "devDependencies": { - "@biomejs/biome": "^2.4.4", + "@biomejs/biome": "^2.4.5", "@electron-toolkit/tsconfig": "^2.0.0", "@electron-toolkit/utils": "^4.0.0", "@tailwindcss/postcss": "^4.2.1", @@ -89,23 +89,23 @@ "@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], - "@biomejs/biome": ["@biomejs/biome@2.4.4", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.4.4", "@biomejs/cli-darwin-x64": "2.4.4", "@biomejs/cli-linux-arm64": "2.4.4", "@biomejs/cli-linux-arm64-musl": "2.4.4", "@biomejs/cli-linux-x64": "2.4.4", "@biomejs/cli-linux-x64-musl": "2.4.4", "@biomejs/cli-win32-arm64": "2.4.4", "@biomejs/cli-win32-x64": "2.4.4" }, "bin": { "biome": "bin/biome" } }, "sha512-tigwWS5KfJf0cABVd52NVaXyAVv4qpUXOWJ1rxFL8xF1RVoeS2q/LK+FHgYoKMclJCuRoCWAPy1IXaN9/mS61Q=="], + "@biomejs/biome": ["@biomejs/biome@2.4.5", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.4.5", "@biomejs/cli-darwin-x64": "2.4.5", "@biomejs/cli-linux-arm64": "2.4.5", "@biomejs/cli-linux-arm64-musl": "2.4.5", "@biomejs/cli-linux-x64": "2.4.5", "@biomejs/cli-linux-x64-musl": "2.4.5", "@biomejs/cli-win32-arm64": "2.4.5", "@biomejs/cli-win32-x64": "2.4.5" }, "bin": { "biome": "bin/biome" } }, "sha512-OWNCyMS0Q011R6YifXNOg6qsOg64IVc7XX6SqGsrGszPbkVCoaO7Sr/lISFnXZ9hjQhDewwZ40789QmrG0GYgQ=="], - "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.4.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-jZ+Xc6qvD6tTH5jM6eKX44dcbyNqJHssfl2nnwT6vma6B1sj7ZLTGIk6N5QwVBs5xGN52r3trk5fgd3sQ9We9A=="], + "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.4.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-lGS4Nd5O3KQJ6TeWv10mElnx1phERhBxqGP/IKq0SvZl78kcWDFMaTtVK+w3v3lusRFxJY78n07PbKplirsU5g=="], - "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.4.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-Dh1a/+W+SUCXhEdL7TiX3ArPTFCQKJTI1mGncZNWfO+6suk+gYA4lNyJcBB+pwvF49uw0pEbUS49BgYOY4hzUg=="], + "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.4.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-6MoH4tyISIBNkZ2Q5T1R7dLd5BsITb2yhhhrU9jHZxnNSNMWl+s2Mxu7NBF8Y3a7JJcqq9nsk8i637z4gqkJxQ=="], - "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.4.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-V/NFfbWhsUU6w+m5WYbBenlEAz8eYnSqRMDMAW3K+3v0tYVkNyZn8VU0XPxk/lOqNXLSCCrV7FmV/u3SjCBShg=="], + "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.4.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-U1GAG6FTjhAO04MyH4xn23wRNBkT6H7NentHh+8UxD6ShXKBm5SY4RedKJzkUThANxb9rUKIPc7B8ew9Xo/cWg=="], - "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.4.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-+sPAXq3bxmFwhVFJnSwkSF5Rw2ZAJMH3MF6C9IveAEOdSpgajPhoQhbbAK12SehN9j2QrHpk4J/cHsa/HqWaYQ=="], + "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.4.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-iqLDgpzobG7gpBF0fwEVS/LT8kmN7+S0E2YKFDtqliJfzNLnAiV2Nnyb+ehCDCJgAZBASkYHR2o60VQWikpqIg=="], - "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.4.4", "", { "os": "linux", "cpu": "x64" }, "sha512-R4+ZCDtG9kHArasyBO+UBD6jr/FcFCTH8QkNTOCu0pRJzCWyWC4EtZa2AmUZB5h3e0jD7bRV2KvrENcf8rndBg=="], + "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.4.5", "", { "os": "linux", "cpu": "x64" }, "sha512-NdODlSugMzTlENPTa4z0xB82dTUlCpsrOxc43///aNkTLblIYH4XpYflBbf5ySlQuP8AA4AZd1qXhV07IdrHdQ=="], - "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.4.4", "", { "os": "linux", "cpu": "x64" }, "sha512-gGvFTGpOIQDb5CQ2VC0n9Z2UEqlP46c4aNgHmAMytYieTGEcfqhfCFnhs6xjt0S3igE6q5GLuIXtdQt3Izok+g=="], + "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.4.5", "", { "os": "linux", "cpu": "x64" }, "sha512-NlKa7GpbQmNhZf9kakQeddqZyT7itN7jjWdakELeXyTU3pg/83fTysRRDPJD0akTfKDl6vZYNT9Zqn4MYZVBOA=="], - "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.4.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-trzCqM7x+Gn832zZHgr28JoYagQNX4CZkUZhMUac2YxvvyDRLJDrb5m9IA7CaZLlX6lTQmADVfLEKP1et1Ma4Q=="], + "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.4.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-EBfrTqRIWOFSd7CQb/0ttjHMR88zm3hGravnDwUA9wHAaCAYsULKDebWcN5RmrEo1KBtl/gDVJMrFjNR0pdGUw=="], - "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.4.4", "", { "os": "win32", "cpu": "x64" }, "sha512-gnOHKVPFAAPrpoPt2t+Q6FZ7RPry/FDV3GcpU53P3PtLNnQjBmKyN2Vh/JtqXet+H4pme8CC76rScwdjDcT1/A=="], + "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.4.5", "", { "os": "win32", "cpu": "x64" }, "sha512-Pmhv9zT95YzECfjEHNl3mN9Vhusw9VA5KHY0ZvlGsxsjwS5cb7vpRnHzJIv0vG7jB0JI7xEaMH9ddfZm/RozBw=="], "@cacheable/memory": ["@cacheable/memory@2.0.8", "", { "dependencies": { "@cacheable/utils": "^2.4.0", "@keyv/bigmap": "^1.3.1", "hookified": "^1.15.1", "keyv": "^5.6.0" } }, "sha512-FvEb29x5wVwu/Kf93IWwsOOEuhHh6dYCJF3vcKLzXc0KXIW181AOzv6ceT4ZpBHDvAfG60eqb+ekmrnLHIy+jw=="], @@ -545,7 +545,7 @@ "core-util-is": ["core-util-is@1.0.2", "", {}, "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="], - "cosmiconfig": ["cosmiconfig@9.0.0", "", { "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg=="], + "cosmiconfig": ["cosmiconfig@9.0.1", "", { "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ=="], "crc": ["crc@3.8.0", "", { "dependencies": { "buffer": "^5.1.0" } }, "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ=="], @@ -1007,7 +1007,7 @@ "plist": ["plist@3.1.0", "", { "dependencies": { "@xmldom/xmldom": "^0.8.8", "base64-js": "^1.5.1", "xmlbuilder": "^15.1.1" } }, "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ=="], - "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], + "postcss": ["postcss@8.5.8", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg=="], "postcss-safe-parser": ["postcss-safe-parser@7.0.1", "", { "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A=="], diff --git a/package.json b/package.json index 827bd00b..6f81ee2f 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "xxhash-wasm": "^1.1.0" }, "devDependencies": { - "@biomejs/biome": "^2.4.4", + "@biomejs/biome": "^2.4.5", "@electron-toolkit/tsconfig": "^2.0.0", "@electron-toolkit/utils": "^4.0.0", "@tailwindcss/postcss": "^4.2.1", diff --git a/src/renderer/bun.lock b/src/renderer/bun.lock index f31b615c..c1cb2312 100644 --- a/src/renderer/bun.lock +++ b/src/renderer/bun.lock @@ -14,7 +14,7 @@ "xxhash-wasm": "^1.1.0", }, "devDependencies": { - "@biomejs/biome": "^2.4.4", + "@biomejs/biome": "^2.4.5", "@tailwindcss/postcss": "^4.2.1", "@tailwindcss/vite": "^4.2.1", "@types/node": "^25.3.3", @@ -49,23 +49,23 @@ "@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], - "@biomejs/biome": ["@biomejs/biome@2.4.4", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.4.4", "@biomejs/cli-darwin-x64": "2.4.4", "@biomejs/cli-linux-arm64": "2.4.4", "@biomejs/cli-linux-arm64-musl": "2.4.4", "@biomejs/cli-linux-x64": "2.4.4", "@biomejs/cli-linux-x64-musl": "2.4.4", "@biomejs/cli-win32-arm64": "2.4.4", "@biomejs/cli-win32-x64": "2.4.4" }, "bin": { "biome": "bin/biome" } }, "sha512-tigwWS5KfJf0cABVd52NVaXyAVv4qpUXOWJ1rxFL8xF1RVoeS2q/LK+FHgYoKMclJCuRoCWAPy1IXaN9/mS61Q=="], + "@biomejs/biome": ["@biomejs/biome@2.4.5", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.4.5", "@biomejs/cli-darwin-x64": "2.4.5", "@biomejs/cli-linux-arm64": "2.4.5", "@biomejs/cli-linux-arm64-musl": "2.4.5", "@biomejs/cli-linux-x64": "2.4.5", "@biomejs/cli-linux-x64-musl": "2.4.5", "@biomejs/cli-win32-arm64": "2.4.5", "@biomejs/cli-win32-x64": "2.4.5" }, "bin": { "biome": "bin/biome" } }, "sha512-OWNCyMS0Q011R6YifXNOg6qsOg64IVc7XX6SqGsrGszPbkVCoaO7Sr/lISFnXZ9hjQhDewwZ40789QmrG0GYgQ=="], - "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.4.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-jZ+Xc6qvD6tTH5jM6eKX44dcbyNqJHssfl2nnwT6vma6B1sj7ZLTGIk6N5QwVBs5xGN52r3trk5fgd3sQ9We9A=="], + "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.4.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-lGS4Nd5O3KQJ6TeWv10mElnx1phERhBxqGP/IKq0SvZl78kcWDFMaTtVK+w3v3lusRFxJY78n07PbKplirsU5g=="], - "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.4.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-Dh1a/+W+SUCXhEdL7TiX3ArPTFCQKJTI1mGncZNWfO+6suk+gYA4lNyJcBB+pwvF49uw0pEbUS49BgYOY4hzUg=="], + "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.4.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-6MoH4tyISIBNkZ2Q5T1R7dLd5BsITb2yhhhrU9jHZxnNSNMWl+s2Mxu7NBF8Y3a7JJcqq9nsk8i637z4gqkJxQ=="], - "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.4.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-V/NFfbWhsUU6w+m5WYbBenlEAz8eYnSqRMDMAW3K+3v0tYVkNyZn8VU0XPxk/lOqNXLSCCrV7FmV/u3SjCBShg=="], + "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.4.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-U1GAG6FTjhAO04MyH4xn23wRNBkT6H7NentHh+8UxD6ShXKBm5SY4RedKJzkUThANxb9rUKIPc7B8ew9Xo/cWg=="], - "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.4.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-+sPAXq3bxmFwhVFJnSwkSF5Rw2ZAJMH3MF6C9IveAEOdSpgajPhoQhbbAK12SehN9j2QrHpk4J/cHsa/HqWaYQ=="], + "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.4.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-iqLDgpzobG7gpBF0fwEVS/LT8kmN7+S0E2YKFDtqliJfzNLnAiV2Nnyb+ehCDCJgAZBASkYHR2o60VQWikpqIg=="], - "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.4.4", "", { "os": "linux", "cpu": "x64" }, "sha512-R4+ZCDtG9kHArasyBO+UBD6jr/FcFCTH8QkNTOCu0pRJzCWyWC4EtZa2AmUZB5h3e0jD7bRV2KvrENcf8rndBg=="], + "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.4.5", "", { "os": "linux", "cpu": "x64" }, "sha512-NdODlSugMzTlENPTa4z0xB82dTUlCpsrOxc43///aNkTLblIYH4XpYflBbf5ySlQuP8AA4AZd1qXhV07IdrHdQ=="], - "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.4.4", "", { "os": "linux", "cpu": "x64" }, "sha512-gGvFTGpOIQDb5CQ2VC0n9Z2UEqlP46c4aNgHmAMytYieTGEcfqhfCFnhs6xjt0S3igE6q5GLuIXtdQt3Izok+g=="], + "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.4.5", "", { "os": "linux", "cpu": "x64" }, "sha512-NlKa7GpbQmNhZf9kakQeddqZyT7itN7jjWdakELeXyTU3pg/83fTysRRDPJD0akTfKDl6vZYNT9Zqn4MYZVBOA=="], - "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.4.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-trzCqM7x+Gn832zZHgr28JoYagQNX4CZkUZhMUac2YxvvyDRLJDrb5m9IA7CaZLlX6lTQmADVfLEKP1et1Ma4Q=="], + "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.4.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-EBfrTqRIWOFSd7CQb/0ttjHMR88zm3hGravnDwUA9wHAaCAYsULKDebWcN5RmrEo1KBtl/gDVJMrFjNR0pdGUw=="], - "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.4.4", "", { "os": "win32", "cpu": "x64" }, "sha512-gnOHKVPFAAPrpoPt2t+Q6FZ7RPry/FDV3GcpU53P3PtLNnQjBmKyN2Vh/JtqXet+H4pme8CC76rScwdjDcT1/A=="], + "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.4.5", "", { "os": "win32", "cpu": "x64" }, "sha512-Pmhv9zT95YzECfjEHNl3mN9Vhusw9VA5KHY0ZvlGsxsjwS5cb7vpRnHzJIv0vG7jB0JI7xEaMH9ddfZm/RozBw=="], "@cacheable/memory": ["@cacheable/memory@2.0.8", "", { "dependencies": { "@cacheable/utils": "^2.4.0", "@keyv/bigmap": "^1.3.1", "hookified": "^1.15.1", "keyv": "^5.6.0" } }, "sha512-FvEb29x5wVwu/Kf93IWwsOOEuhHh6dYCJF3vcKLzXc0KXIW181AOzv6ceT4ZpBHDvAfG60eqb+ekmrnLHIy+jw=="], @@ -355,7 +355,7 @@ "confbox": ["confbox@0.2.4", "", {}, "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ=="], - "cosmiconfig": ["cosmiconfig@9.0.0", "", { "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg=="], + "cosmiconfig": ["cosmiconfig@9.0.1", "", { "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ=="], "css-functions-list": ["css-functions-list@3.3.3", "", {}, "sha512-8HFEBPKhOpJPEPu70wJJetjKta86Gw9+CCyCnB3sui2qQfOvRyqBy4IKLKKAwdMpWb2lHXWk9Wb4Z6AmaUT1Pg=="], @@ -541,7 +541,7 @@ "pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], - "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], + "postcss": ["postcss@8.5.8", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg=="], "postcss-safe-parser": ["postcss-safe-parser@7.0.1", "", { "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A=="], diff --git a/src/renderer/package.json b/src/renderer/package.json index f1bc1b14..9f819716 100644 --- a/src/renderer/package.json +++ b/src/renderer/package.json @@ -74,7 +74,7 @@ "xxhash-wasm": "^1.1.0" }, "devDependencies": { - "@biomejs/biome": "^2.4.4", + "@biomejs/biome": "^2.4.5", "@tailwindcss/postcss": "^4.2.1", "@tailwindcss/vite": "^4.2.1", "@types/node": "^25.3.3", From 802b987a5bad3b09eadff3b6fbebabd307da92e6 Mon Sep 17 00:00:00 2001 From: Alan Garny Date: Tue, 3 Mar 2026 13:15:09 +1300 Subject: [PATCH 3/4] Some minor cleaning up. --- src/renderer/index.d.ts | 7 ++----- src/renderer/index.ts | 5 +---- src/renderer/src/App.vue | 2 +- src/renderer/src/AppWithMultipleInstances.vue | 2 +- src/renderer/src/AppWithOmex.vue | 2 +- src/renderer/src/AppWithRawOmex.vue | 2 +- src/renderer/src/AppWithinContainers.vue | 2 +- src/renderer/src/common/vueCommon.ts | 2 +- .../dialogs/SimulationExperimentViewSettingsDialog.vue | 6 ------ 9 files changed, 9 insertions(+), 21 deletions(-) diff --git a/src/renderer/index.d.ts b/src/renderer/index.d.ts index a1a8b1a2..e5f9e76f 100644 --- a/src/renderer/index.d.ts +++ b/src/renderer/index.d.ts @@ -1,7 +1,4 @@ -import { Component } from 'vue'; +export { IOpenCORProps, Theme } from './index.ts'; -import { IOpenCORProps } from './index.ts'; -export { IOpenCORProps }; - -export declare const OpenCOR: Component; +export declare const OpenCOR: import('vue').Component; export default OpenCOR; diff --git a/src/renderer/index.ts b/src/renderer/index.ts index 7ac72af2..3ef8042e 100644 --- a/src/renderer/index.ts +++ b/src/renderer/index.ts @@ -1,5 +1,3 @@ -import OpenCOR from './src/components/OpenCOR.vue'; - export type Theme = 'light' | 'dark' | 'system'; export interface IOpenCORProps { @@ -7,5 +5,4 @@ export interface IOpenCORProps { theme?: Theme; } -export { OpenCOR }; -export default OpenCOR; +export { default, default as OpenCOR } from './src/components/OpenCOR.vue'; diff --git a/src/renderer/src/App.vue b/src/renderer/src/App.vue index a497193a..ba5ce94e 100644 --- a/src/renderer/src/App.vue +++ b/src/renderer/src/App.vue @@ -3,5 +3,5 @@ diff --git a/src/renderer/src/AppWithMultipleInstances.vue b/src/renderer/src/AppWithMultipleInstances.vue index 15060bd1..96df6712 100644 --- a/src/renderer/src/AppWithMultipleInstances.vue +++ b/src/renderer/src/AppWithMultipleInstances.vue @@ -31,5 +31,5 @@ diff --git a/src/renderer/src/AppWithOmex.vue b/src/renderer/src/AppWithOmex.vue index 07eb06bb..4abc16ed 100644 --- a/src/renderer/src/AppWithOmex.vue +++ b/src/renderer/src/AppWithOmex.vue @@ -6,5 +6,5 @@ diff --git a/src/renderer/src/AppWithRawOmex.vue b/src/renderer/src/AppWithRawOmex.vue index 079ef067..3c599c47 100644 --- a/src/renderer/src/AppWithRawOmex.vue +++ b/src/renderer/src/AppWithRawOmex.vue @@ -143,5 +143,5 @@ const rawLorenzOmexFile = vue.ref( diff --git a/src/renderer/src/AppWithinContainers.vue b/src/renderer/src/AppWithinContainers.vue index fa686f5c..1229b277 100644 --- a/src/renderer/src/AppWithinContainers.vue +++ b/src/renderer/src/AppWithinContainers.vue @@ -17,5 +17,5 @@ diff --git a/src/renderer/src/common/vueCommon.ts b/src/renderer/src/common/vueCommon.ts index a1419b91..cd5532b0 100644 --- a/src/renderer/src/common/vueCommon.ts +++ b/src/renderer/src/common/vueCommon.ts @@ -8,7 +8,7 @@ import type { Theme } from '../../index.ts'; export const activeInstanceUid = vueusecore.createGlobalState(() => vue.ref(null)); -// Theme composable to know whether OpenCOR uses light mode, dark mode, or system mode. +// A composable to know whether OpenCOR uses light mode, dark mode, or system mode. export const useTheme = vueusecore.createGlobalState(() => { const prefersColorScheme = window.matchMedia('(prefers-color-scheme: light)'); diff --git a/src/renderer/src/components/dialogs/SimulationExperimentViewSettingsDialog.vue b/src/renderer/src/components/dialogs/SimulationExperimentViewSettingsDialog.vue index 9c899e91..91ac3a60 100644 --- a/src/renderer/src/components/dialogs/SimulationExperimentViewSettingsDialog.vue +++ b/src/renderer/src/components/dialogs/SimulationExperimentViewSettingsDialog.vue @@ -1308,12 +1308,6 @@ const toggleUiJsonIssues = (event: Event) => { padding: 0; } -.plot-card { - border: 1px solid var(--p-content-border-color); - border-radius: 0.375rem; - overflow: hidden; -} - .plot-card-body { padding: 0.75rem; display: flex; From 1a5b1c82e70c227146f1556a84e211f7b3dda1e8 Mon Sep 17 00:00:00 2001 From: Alan Garny Date: Tue, 3 Mar 2026 13:51:47 +1300 Subject: [PATCH 4/4] OpenCOR: expose a `simulationData()` method. --- src/renderer/src/AppWithSimulationData.vue | 31 ++++++++++++++++ src/renderer/src/common/constants.ts | 1 + .../src/components/ContentsComponent.vue | 37 ++++++++++++++++++- src/renderer/src/components/OpenCOR.vue | 16 ++++++++ .../views/SimulationExperimentView.vue | 34 +++++++++++++++++ src/renderer/src/main.ts | 1 + 6 files changed, 118 insertions(+), 2 deletions(-) create mode 100644 src/renderer/src/AppWithSimulationData.vue diff --git a/src/renderer/src/AppWithSimulationData.vue b/src/renderer/src/AppWithSimulationData.vue new file mode 100644 index 00000000..13fc9e08 --- /dev/null +++ b/src/renderer/src/AppWithSimulationData.vue @@ -0,0 +1,31 @@ + + + + + diff --git a/src/renderer/src/common/constants.ts b/src/renderer/src/common/constants.ts index d07472f4..dae9fd13 100644 --- a/src/renderer/src/common/constants.ts +++ b/src/renderer/src/common/constants.ts @@ -5,6 +5,7 @@ export const NO_DELAY: number = 0; export const SHORT_DELAY: number = 69; export const MEDIUM_DELAY: number = 169; export const LONG_DELAY: number = 369; +export const HUGE_DELAY: number = 969; export const TOAST_LIFE: number = 3000; diff --git a/src/renderer/src/components/ContentsComponent.vue b/src/renderer/src/components/ContentsComponent.vue index e3a6092b..f626d28f 100644 --- a/src/renderer/src/components/ContentsComponent.vue +++ b/src/renderer/src/components/ContentsComponent.vue @@ -4,7 +4,7 @@ - (); defineEmits<(event: 'error', message: string) => void>(); +const simulationExperimentViewRef = vue.ref[]>([]); const fileTabs = vue.ref([]); const activeFile = vue.ref(''); @@ -169,13 +173,42 @@ const closeAllFiles = (): void => { } }; +const simulationData = (modelParameter: string, attempt: number = 0): Promise => { + if (!props.simulationOnly) { + return Promise.reject(new Error('Simulation data can only be retrieved in simulation only mode.')); + } + + const simulationExperimentViews = simulationExperimentViewRef.value; + + if (!simulationExperimentViews.length) { + // In simulation only mode, there should always be a simulation experiment view available, but we add this check + // just in case. If there is no simulation experiment view available, we retry a few times with a delay to give + // it some time to load before giving up. + + if (attempt < 3) { + return new Promise((resolve) => { + setTimeout(() => { + resolve(simulationData(modelParameter, attempt + 1)); + }, HUGE_DELAY); + }); + } + + return Promise.reject(new Error('No simulation experiment view available.')); + } + + return simulationExperimentViews[0].simulationData(modelParameter).catch((error: unknown) => { + throw new Error(common.formatError(error)); + }); +}; + defineExpose({ openFile, closeCurrentFile, closeAllFiles, hasFile, hasFiles, - selectFile + selectFile, + simulationData }); // Some watchers to let people know about changes to the opened files and the selected file. diff --git a/src/renderer/src/components/OpenCOR.vue b/src/renderer/src/components/OpenCOR.vue index ec6696e1..1b3a0fd9 100644 --- a/src/renderer/src/components/OpenCOR.vue +++ b/src/renderer/src/components/OpenCOR.vue @@ -139,6 +139,22 @@ import MainMenu from './MainMenu.vue'; const props = defineProps(); +const simulationData = (modelParameter: string): Promise => { + const contents = contentsRef.value; + + if (!contents) { + return Promise.reject(new Error('No contents available.')); + } + + return contents.simulationData(modelParameter).catch((error: unknown) => { + throw new Error(common.formatError(error)); + }); +}; + +defineExpose({ + simulationData +}); + const { isDialogActive } = provideDialogState(); const blockUiRef = vue.ref | null>(null); diff --git a/src/renderer/src/components/views/SimulationExperimentView.vue b/src/renderer/src/components/views/SimulationExperimentView.vue index 51a794a3..9b7b9cec 100644 --- a/src/renderer/src/components/views/SimulationExperimentView.vue +++ b/src/renderer/src/components/views/SimulationExperimentView.vue @@ -442,6 +442,10 @@ const NoSimulationDataInfo: locCommon.ISimulationDataInfo = { index: -1 }; +const isNoSimulationDataInfo = (info: locCommon.ISimulationDataInfo): boolean => { + return info.type === locCommon.ESimulationDataInfoType.UNKNOWN && info.index === -1; +}; + // Standard mode. const standardFile = props.file; @@ -655,6 +659,36 @@ const interactiveSettings = vue.computed(() = })); const interactiveOldSettings = vue.ref(JSON.stringify(vue.toRaw(interactiveSettings.value))); +// A helper function to get the simulation data for a given model parameter. + +const simulationData = (modelParameter: string): Promise => { + if (!interactiveInstanceTask) { + return Promise.reject(new Error('No SED-ML instance task available.')); + } + + const instanceTask = interactiveInstanceTask as locSedApi.SedInstanceTask; + const info = locCommon.simulationDataInfo( + instanceTask, + modelParameter === 'VOI' ? instanceTask.voiName() : modelParameter + ); + + if (isNoSimulationDataInfo(info)) { + return Promise.reject( + new Error(`No simulation data information was found for model parameter "${modelParameter}".`) + ); + } + + try { + return Promise.resolve(locCommon.simulationData(instanceTask, info)); + } catch (error: unknown) { + return Promise.reject(new Error(common.formatError(error))); + } +}; + +defineExpose({ + simulationData +}); + // Determine whether to show the toolbar. const showToolbar = vue.computed(() => { diff --git a/src/renderer/src/main.ts b/src/renderer/src/main.ts index 03c998f8..bd63f25a 100644 --- a/src/renderer/src/main.ts +++ b/src/renderer/src/main.ts @@ -5,5 +5,6 @@ import App from './App.vue'; // import App from './AppWithMultipleInstances.vue'; // import App from './AppWithOmex.vue'; // import App from './AppWithRawOmex.vue'; +// import App from './AppWithSimulationData.vue'; createApp(App).mount('#app');