This replaces the context menu with our own. By doing that we no longer
need to force install our npm packages, as there are no longer any
conflicts. In fact, as part of this change, I updated us to the latest
React 19 and even enabled the React compiler.
I also explored CSS modules for the first time, which are going to allow
us to reduce conflicts between CSS rules and possibly even allow us to
fully remove SASS, as the need for it is going to be reduced.
I also found out that the latest Rust nightly is broken due to their
update to LLVM 20. So I pinned the version to the last working nightly
version.
With Safari 18.2 having shipped, all browsers now support WebAssembly
Tail Calls. This allows the compiler to call a function at the end of
the current function by reusing the stack frame. This should be a tiny
bit faster and allow for recursion without stack overflows... except
that Rust doesn't have any way of guaranteeing this yet, so you can't
really rely on it.
With Safari / iOS 16.4 having released, WebAssembly SIMD is now
available on all browsers. This should help with parsing performance.
While the update released just today, we do tell people to update iOS if
they haven't already, so I believe it's fine to already publish this.
https://webkit.org/blog/13966/webkit-features-in-safari-16-4/
This includes:
- Bulk memory operations
- Non-trapping float-to-int conversions
This also activates `Import & export of mutable globals`. I'm not sure
if it does anything, but LLVM supports it as well as all browsers, so we
might as well activate it too.
At this point in time, we barely support using Electron for a desktop app so there is very little sense in having this here. If we ever get support for making a fully working electron build this can be easily added back.
This introduces wasm-bindgen which will allow us to directly use all
kinds of JS APIs in WASM without us having to manually provide all the
functionality as imports. Instead we let wasm-bindgen handle all the
importing. Additional webpack now handles the instantiation of the wasm
module for us, which simplifies a bunch of things as well.