We have had a really outdated version of Font Awesome directly vendored
into our repository. Not only was it outdated, but it also is shipped as
a font file, including all the icons, even though we only use a small
subset of them. By switching to Lucide, we not only are depending on
something more up to date, but now the icons can also be tree shaked.
This also updates some of our CSS to use flex box and grid instead of
manually positioning with margins.
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.
The tests do not work anymore. They have always been flaky and added a
lot of dependencies, that made it harder to maintain them. Additionally,
the rendering is now handled by `livesplit-core`, which has all the same
tests for the rendering, so it also makes little sense to have the same
rendering tests again in this repository. All other dependencies that
are currently updatable have been updated, except:
1. I'm not sure if you need Tauri 2 for the CLI version 2.
2. The `css-loader` causes problems with the way we import variables
from the SASS files.
3. React 19 does not seem to just work, we get a bunch of TypeScript
issues.
4. `commonmark` is stuck as usual until we replace it entirely.
5. `eslint` changed completely it seems, we probably need to set it up
completely from scratch.
At some point we had to switch away from `wasm-opt` automatically
detecting the WebAssembly features, because they deprecated and turned
that into a no-op. Since then we specified that it should just use all
the features. This used to work all the time, but with the introduction
of reference types it now started optimizing some of those instructions
into instructions that are only available with the `WasmGC` proposal.
This slipped through because Chrome and Firefox already support `WasmGC`
but Safari does not... yet, because they also will start to support it
very soon. In the meantime and also to ensure `wasm-opt` isn't ever
going to sneak in any unwanted features, we now explicitly specify all
the features that we want to use.
This introduces a Tauri based desktop version of LiveSplit One. For now
very few changes have been done. It's mostly global hotkeys that work
now. It's unclear if Tauri is the long term solution for LiveSplit One,
but it gets us global hotkeys and auto splitting with very little
effort, so we'll use it until something better comes along.
This is necessary for the changelog generation to work correctly.
Additionally this includes an improvement to sort the contributors
alphabetically, if they have the same amount of contributions.
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/
Turns out that `wasm-bindgen` `v0.2.84` really requires us to import the
main module as that's where they now dynamically set the wasm file.
Additionally this improves our CI a little, by downloading a prebuilt
version of `wasm-bindgen-cli`.
We generally want the wasm file to be as compact as possible. However
because there's so many paths in Rust code that could panic, but don't
ever in practice as they are meant to signal bugs, the wasm file has to
keep around all those panic paths, and even worse, all the code for
formatting the panic messages for all those different types that could
be involved in a panic. This bloats the binary a lot. There's a nightly
feature to build the standard library as part of your compilation and
with that you can pass various features to the standard library, just
like with any other crate. And one of those features is to remove all
the formatting machinery from the panics and just immediately abort,
resulting in smaller binaries. On top of that by building the standard
library ourselves we also get to build it with all our target features,
meaning that its code will make use of all the additional WebAssembly
instructions that have been added since the MVP. So this essentially is
a big win. However this forces us to use the nightly compiler, but it
usually is actually quite stable. We won't be using any nightly features
of the language itself and only optionally use the compiler in our CI,
so the stable compiler continues to work just fine for local
development.
This adds support for hotkey modifiers, such as Ctrl, Alt, Shift and the
Meta key. On top of that I ran `npm update` to truly update all the
packages to their latest semver compatible versions, which `dependabot`
doesn't seem to do for us. This also includes other updates in
`livesplit-core` that were done since the last update, such as the
precise formatting and parsing of the time stamps.
This updates `livesplit-core` to the latest version. This mostly adds
custom variable columns and allows for the timer to visualize the delta
for the background. There's some performance improvements as well.
Also we now build `livesplit-core` in debug mode by default when
building locally. So compilation is a little bit
faster and additional debug checks are active, such as integer
overflows.
When changing the hotkeys in the settings, it doesn't properly set the
hotkeys anymore. This is because of a refactor that we merged in
`livesplit-core` that unregisters the hotkeys while the `HotkeySystem`
is deactivated. The hotkey settings deactivate the hotkeys so you
don't accidentally split / reset / ... the timer in the background. The
bug was that it was completely impossible to set hotkeys while
they are deactivated.
The default formatting pads the current week as 00..53. This works for every week other than the current two weeks in the year as those are formatted as 08 and 09. The shell however interprets those as integers in base 8 (octal) because of the initial 0 (blame C for this one), where 8 and 9 are not valid digits in base 8.
This commit removes the padding with 0 from the formatting.