Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
111 commits
Select commit Hold shift + click to select a range
9d9d366
New version.
agarny Nov 5, 2026
b0b3328
Updated our dependencies.
agarny Nov 6, 2026
d443a20
Put our shared styles in `app.css`.
agarny Nov 5, 2026
ea1a56b
No animations, lighter masks, and keyboard focus rings.
agarny Nov 5, 2026
f7420b5
Modernised our toolbars with `ToolbarButtonWidget`.
agarny Nov 5, 2026
595bf77
Modernised our main menu.
agarny Nov 5, 2026
bac2693
Added the `v-hint` directive.
agarny Nov 5, 2026
1c80c6c
Modernised file tabs and the view switcher.
agarny Nov 5, 2026
a7702d5
Modernised our context menus and added one to our file tabs.
agarny Nov 5, 2026
3457d5d
Pressing the Escape key now removes the keyboard focus, unless someth…
agarny Nov 5, 2026
57ad295
Modernised our loading message, toasts and drop zone.
agarny Nov 5, 2026
da40200
Modernised our start screen and added some actions to it, and the win…
agarny Nov 5, 2026
621f64f
Our start screen now lists our most recent files.
agarny Nov 5, 2026
f756da4
Modernised our message and question dialogs, which buttons now say wh…
agarny Nov 5, 2026
0ef17d7
Modernised our About, Settings, and Open Remote dialogs, and the vers…
agarny Nov 6, 2026
1331e32
Modernised our Changelog and update dialogs, and the download progres…
agarny Nov 6, 2026
7b3abf7
Modernised our Issues view, which issues can now be copied.
agarny Nov 6, 2026
b791d66
Modernised our Standard view, which now shows the status of a simulat…
agarny Nov 6, 2026
c501f0e
Modernised our Interactive view, which side panel is now more compact…
agarny Nov 6, 2026
1e3a03b
Our hints now look like our other overlays (e.g., our menus and popov…
agarny Nov 6, 2026
4650706
Modernised the settings dialog of our Interactive Simulation Experime…
agarny Nov 6, 2026
a08122b
Our popovers no longer add their own padding around their contents, w…
agarny Nov 6, 2026
794b1f5
Our Unsupported file type view now lists the views that support the f…
agarny Nov 6, 2026
e21c982
Modernised our splash screen, which now looks like our start screen a…
agarny Nov 6, 2026
cee2889
File tabs: always show the close button on devices without hover, and…
agarny Nov 6, 2026
7764df8
Interactive Simulation Experiment view: always show the actions of a …
agarny Nov 6, 2026
5983f24
CellDL Editor view: removed the Safari/Firefox limitation.
agarny Nov 6, 2026
57d4748
CellDL Editor view: modernised its Limitations dialog and the dialog …
agarny Nov 6, 2026
f773633
Fixed some issues found while reviewing our UI/UX changes.
agarny Nov 6, 2026
ce237cf
Rewrapped long comments across our codebase.
agarny Nov 6, 2026
de2952d
Hints: hide a hint if its element gets hidden using the keyboard (e.g…
agarny Nov 7, 2026
84eb61f
Open Remote dialog: accept data URLs again.
agarny Nov 7, 2026
7a7cde4
Interactive view: the buttons of a run now say which run they are for…
agarny Nov 7, 2026
44cab14
File tabs: the close button of a file tab now says which file it clos…
agarny Nov 7, 2026
38d07af
Interactive view: keep the keyboard focus when removing a run (or all…
agarny Nov 7, 2026
951695e
Interactive Simulation Experiment view: show a focus ring on the swat…
agarny Nov 7, 2026
2e70820
Question dialogs: the main button is now primary unless the question …
agarny Nov 7, 2026
bace5a5
CellDL Editor view: its Limitations dialog now uses OkMessageDialog, …
agarny Nov 7, 2026
23627da
Hints: a hint can now be dismissed using Escape.
agarny Nov 7, 2026
c52bd10
Hints: a hint is now repositioned when its text changes.
agarny Nov 7, 2026
40e5983
Hints: a hint is no longer shown again when the window regains the fo…
agarny Nov 7, 2026
ebfd7b2
Open Remote dialog: its clear button can now be used with the keyboard.
agarny Nov 7, 2026
d365f48
Open Remote dialog: an email address or a mailto link is no longer co…
agarny Nov 7, 2026
c49e99c
Update download progress dialog: sizes are now in megabytes (1,000,00…
agarny Nov 7, 2026
04b7846
Use decimal units for download size.
agarny Nov 7, 2026
0fa3299
About dialog: the memory reported in the Web app is now described acc…
agarny Nov 7, 2026
ec758d7
Issues view: its copy button no longer says that our issues were copi…
agarny Nov 7, 2026
16f973f
Standard view: a run that fails to start is now reported as such, and…
agarny Nov 7, 2026
8d81fe3
Hide hints when their owners become invisible.
agarny Nov 7, 2026
8d9ca71
Open Remote dialog: refined our URL validation.
agarny Nov 7, 2026
ca70975
Some minor cleaning up.
agarny Nov 7, 2026
1d56620
OpenCOR: hide the drop zone when the drag leaves unnoticed.
agarny Nov 7, 2026
1fc82fb
Standard Simulation Experiment view: improved our simulation run feed…
agarny Nov 7, 2026
f8dcc42
Interactive Simulation Experiment view: preserve our focus when remov…
agarny Nov 7, 2026
698d9b6
Hints: reposition a hint when its element moves, and don't rebuild it…
agarny Nov 8, 2026
1b2745f
Hints: hide a hint when the window loses the focus, and know whether …
agarny Nov 8, 2026
a087829
Hints: hide hints from assistive technologies.
agarny Nov 8, 2026
93938da
Toolbar buttons: show a button's tooltip again when it gets the focus…
agarny Nov 8, 2026
ef6b991
Accessibility: issue icons, the simulation progress bar, the "Some se…
agarny Nov 8, 2026
b99c5d1
Open Remote dialog: only accept data URLs of COMBINE archives and zip…
agarny Nov 8, 2026
c9c2d9c
Open Remote dialog: a relative path, a number or an IPv4 address that…
agarny Nov 8, 2026
2c61169
Open Remote dialog: a URL is no longer flagged once it is valid, and …
agarny Nov 8, 2026
7715dd8
Pressing Enter to confirm some text composed using an input method no…
agarny Nov 8, 2026
5cf992a
Standard Simulation Experiment view: give the keyboard focus to the R…
agarny Nov 8, 2026
6773d7f
Standard Simulation Experiment view: pressing F9 now runs the simulat…
agarny Nov 8, 2026
80c0b78
Interactive Simulation Experiment view: keep the keyboard focus when …
agarny Nov 8, 2026
5a6e058
Start screen and file tabs: ignore actions triggered using the keyboa…
agarny Nov 8, 2026
f08929c
A simulation run no longer waits for the window to be visible again t…
agarny Nov 8, 2026
cbaa5e6
Changelog: an invalid release date is no longer rolled over to anothe…
agarny Nov 8, 2026
fa68be8
OpenCOR: the blocking message is offset below the main menu again.
agarny Nov 8, 2026
417c2d0
Some minor cleaning up.
agarny Nov 8, 2026
ba9f224
Interactive Simulation Experiment view: a run's colour popover now on…
agarny Nov 8, 2026
05d8be1
Interactive Simulation Experiment view: keep the keyboard focus when …
agarny Nov 8, 2026
e216ea8
OpenCOR: the UI can no longer be reached using the keyboard while it …
agarny Nov 8, 2026
3434a56
Open Remote dialog: in OpenCOR, a local file can be opened again, usi…
agarny Nov 8, 2026
7ba71db
Open Remote dialog: renamed to Open Location dialog since it can also…
agarny Nov 8, 2026
d50b285
Standard Simulation Experiment view: the Run/Pause button no longer s…
agarny Nov 8, 2026
d534b3b
Open Location dialog: cancelling it with an invalid address no longer…
agarny Nov 8, 2026
991bc17
OpenCOR: only shift our own blocking messages below the main menu, no…
agarny Nov 8, 2026
10a1d85
Interactive Simulation Experiment view: clicking another run's colour…
agarny Nov 8, 2026
9f2fe37
IPC: renamed the main process' "open" message to "open-file" since "o…
agarny Nov 8, 2026
68300ee
IPC: renamed our renderer's "open" request to "show-open-dialog" (and…
agarny Nov 8, 2026
675b154
Hints: a hint is no longer used as the accessible name of an element …
agarny Nov 8, 2026
d282e5c
OpenCOR: files dropped after having been held still are no longer ign…
agarny Nov 8, 2026
61f364d
Interactive Simulation Experiment view: removed a redundant check whe…
agarny Nov 8, 2026
ce67330
Toolbar buttons: documented that a shortcut is also used as the value…
agarny Nov 8, 2026
27bbaca
Standard Simulation Experiment view: pressing F9 no longer takes the …
agarny Nov 8, 2026
821bbb3
Updated some comments.
agarny Nov 8, 2026
c687952
View Switcher component: hide the view tooltip from screen readers.
agarny Nov 8, 2026
1e9ea4d
Open Location dialog: hardened its validation.
agarny Nov 9, 2026
42c2b88
Hints: improved hint focus and accessibility handling.
agarny Nov 9, 2026
b7a498a
Standard Simulation Experiment view: hardened our simulation run clea…
agarny Nov 9, 2026
065401d
Hints: avoid showing hints for transparent elements.
agarny Nov 9, 2026
3892bc8
Updated some comments.
agarny Nov 9, 2026
4a25581
Contents component: hide a file tab context menu when our UI is disab…
agarny Nov 9, 2026
5f4b811
Open Location dialog: fixed a dot segment resolution with extra URL s…
agarny Nov 9, 2026
f3d8c40
Open Location dialog: avoid URL validation when focusing our clear bu…
agarny Nov 9, 2026
3b7092d
Interactive Simulation Experiment's settings dialog: prevent duplicat…
agarny Nov 9, 2026
16e6b51
Input widget: set the dropdown's aria-label to the widget name so scr…
agarny Nov 9, 2026
41acebd
Interactive Simulation Experiment view: fixed the focus after resetti…
agarny Nov 9, 2026
9a79676
Open Location dialog: only show the URL to be opened in a hint when i…
agarny Nov 9, 2026
67166bf
Standard Simulation Experiment view: no longer wait forever for a sim…
agarny Nov 9, 2026
26724d5
Hints and view switcher: keep a hint/tooltip shown while its element …
agarny Nov 9, 2026
39b9697
Standard Simulation Experiment view: stop a simulation that could not…
agarny Nov 9, 2026
4ece52d
Input widget: dragging a slider using a pointer no longer shows a foc…
agarny Nov 9, 2026
d42d11c
Update download progress dialog: show that an update is being install…
agarny Nov 9, 2026
229e4d7
OpenCOR: the "Initialising OpenCOR..." message no longer jumps down o…
agarny Nov 9, 2026
2a3b6e0
Graph Panel widget: plots can now be zoomed and panned using a finger…
agarny Nov 9, 2026
40981a1
Danger button: their focus ring now has the same colour as the button…
agarny Nov 9, 2026
91d9cba
Simulation experiment views and dialogs: use a narrow layout when Ope…
agarny Nov 9, 2026
2a2b790
Replaced occurrences of `…` with `...`.
agarny Nov 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 49 additions & 51 deletions bun.lock

Large diffs are not rendered by default.

14 changes: 7 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
"url": "git+https://github.com/opencor/webapp.git"
},
"type": "module",
"version": "1.20261106.0",
"version": "1.20261109.0",
"engines": {
"bun": ">=1.2.0"
},
Expand Down Expand Up @@ -53,17 +53,17 @@
"xxhash-wasm": "^1.1.0"
},
"devDependencies": {
"@biomejs/biome": "^2.6.5",
"@celldl/editor": "^0.20261105.0",
"@biomejs/biome": "^2.6.6",
"@celldl/editor": "^0.20261109.0",
"@celldl/rdf": "^1.20260822.0",
"@electron-toolkit/tsconfig": "^2.0.0",
"@electron-toolkit/utils": "^4.0.0",
"@opencor/libopencor-types": "^1.20261029.0",
"@physiomelinks/bg2cellml": "^0.6.2",
"@primeuix/themes": "2.0.3",
"@primevue/auto-import-resolver": "4.5.5",
"@tailwindcss/postcss": "^4.3.4",
"@tailwindcss/vite": "^4.3.4",
"@tailwindcss/postcss": "^4.3.5",
"@tailwindcss/vite": "^4.3.5",
"@types/bun": "^1.4.4",
"@types/node": "^26.6.6",
"@vitejs/plugin-vue": "^6.0.10",
Expand All @@ -83,10 +83,10 @@
"postcss": "^8.5.32",
"primeicons": "7.0.0",
"primevue": "4.5.5",
"rollup-plugin-visualizer": "^7.1.2",
"rollup-plugin-visualizer": "^7.1.3",
"stylelint": "^18.0.0",
"stylelint-config-standard": "^41.0.0",
"tailwindcss": "^4.3.4",
"tailwindcss": "^4.3.5",
"tailwindcss-primeui": "^0.6.1",
"tar": "^7.5.22",
"typescript": "^7.0.2",
Expand Down
10 changes: 5 additions & 5 deletions src/extern/corsProxy.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// A simple CORS proxy handler for Cloudflare Workers (see https://workers.cloudflare.com/).
// Note: the proxy accepts any target URL, but it only returns content that is a CellML file, a SED-ML file, an OMEX file,
// or a CSV file (see isCsvFile()), and that is not too large (see MAX_SIZE). Such content is returned as an
// Note: the proxy accepts any target URL, but it only returns content that is a CellML file, a SED-ML file, an OMEX
// file, or a CSV file (see isCsvFile()), and that is not too large (see MAX_SIZE). Such content is returned as an
// opaque, sandboxed download, so that a browser never renders or executes it.

const CORS_HEADERS = {
Expand Down Expand Up @@ -97,9 +97,9 @@ const readBytes = async (reader, maxSize) => {
const readRest = async (reader, head) => {
// Read the rest of some content, the start of which we have already read, and return all of it, unless it is too
// large, in which case return null.
// Note: we read (up to) one more byte than allowed, so that we know whether the content is too large, in which case we
// reject it without concatenating its chunks. Otherwise, we concatenate the start of the content and the rest of
// it in one go.
// Note: we read (up to) one more byte than allowed, so that we know whether the content is too large, in which case
// we reject it without concatenating its chunks. Otherwise, we concatenate the start of the content and the
// rest of it in one go.

const all = await readChunks(reader, MAX_SIZE + 1, [head]);

Expand Down
30 changes: 18 additions & 12 deletions src/main/ApplicationWindow.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,13 @@ export class ApplicationWindow extends electron.BrowserWindow {

constructor(options: electron.BrowserWindowConstructorOptions, usePreload = true) {
// Add some common options and call our parent constructor.
// Note: we use backgroundColor to minimise the flickering that may occur when first showing a window.
// Note #1: we use backgroundColor to minimise the flickering that may occur when first showing a window.
// Note #2: a transparent window (e.g., our splash screen window) draws its own background, so it must keep a
// transparent background.

options.backgroundColor = backgroundColor();
const transparent = !!options.transparent;

options.backgroundColor = transparent ? '#00000000' : backgroundColor();
options.show = false;
options.useContentSize = true;

Expand All @@ -43,19 +47,21 @@ export class ApplicationWindow extends electron.BrowserWindow {
// when our window gets resized), so it must match our theme, which may change while we are running (e.g., if
// the user changes our theme or the system one), or there would be some flickering.

const updateBackgroundColor = (): void => {
const color = backgroundColor();
if (!transparent) {
const updateBackgroundColor = (): void => {
const color = backgroundColor();

if (color && !this.isDestroyed()) {
this.setBackgroundColor(color);
}
};
if (color && !this.isDestroyed()) {
this.setBackgroundColor(color);
}
};

electron.nativeTheme.on('updated', updateBackgroundColor);
electron.nativeTheme.on('updated', updateBackgroundColor);

this.once('closed', () => {
electron.nativeTheme.removeListener('updated', updateBackgroundColor);
});
this.once('closed', () => {
electron.nativeTheme.removeListener('updated', updateBackgroundColor);
});
}
}

// Send a message to our renderer.
Expand Down
6 changes: 3 additions & 3 deletions src/main/MainMenu.ts
Original file line number Diff line number Diff line change
Expand Up @@ -99,14 +99,14 @@ export const enableDisableMainMenu = (enable: boolean): void => {
label: 'Open...',
accelerator: 'CmdOrCtrl+O',
click: () => {
mainWindow?.open();
mainWindow?.showOpenDialog();
}
});
fileSubMenu.push({
label: 'Open Remote...',
label: 'Open Location...',
accelerator: 'CmdOrCtrl+Shift+O',
click: () => {
mainWindow?.send('open-remote');
mainWindow?.send('open-location');
}
});
fileSubMenu.push({
Expand Down
Loading