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.
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 adds functionality to the run editor to allow copying comparisons.
This is not only useful for copying custom comparisons, but also for
"baking" the times of a generated comparison, such as the `Latest Run` or
the `Average Segments` to a custom comparison that you can keep around
as long as you want. This is somewhat also meant to replace the
functionality of storing the current run as a Personal Best. Instead you
can just store the `Latest Run` as a custom comparison after you are
done with it.
Changelog: The splits editor now allows copying comparisons. This can
also be used to keep the times of an automatic comparison around as a
custom comparison. One example for using this is keeping around the
latest run as a custom comparison, so that you can compare against it
later on, even if you have already done another run.
This moves the server connection button to the settings and cleans the
entire functionality up in various ways. The server connection no longer
gets closed by navigating around the application. Additionally the
server URL is now being remembered between sessions.
This also improves the design of the toast messages.
This updates `livesplit-core` such that we can resolve the key codes
with its built-in resolving code. Also since `livesplit-core` introduced
a `max-opt` profile, we make use of that now and on top of that also
introduce `virtual-function-elimination` for the nightly / CI builds.
This is an additional LLVM pass that tries to eliminate as many function
pointers as possible by analyzing the whole program. Locally this
reduced the size of the function pointer table from around 500 to around
400 entries. There's also a flag for using WebAssembly SIMD
instructions, as that works perfectly fine on all browsers except
Safari. Of course we won't use it for deploying until Safari supports
those instructions, but it may be useful for some local testing.
Also with this `livesplit-core` update `SpeedRunIGT` splits can now be
parsed.
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.
Turns out that `keypress` is deprecated and only reacts to key presses
that results in actual visible characters. `keydown` however reacts to
all key presses and is not deprecated. Also this generally bumps
`livesplit-core`, so this brings other improvements as well.
Instead of showing user unfriendly key codes, we want to show the actual
characters that the keys resolve to based on the user's keyboard layout.
This is a fairly experimental Web API, but it's the best we can do at
the moment.
https://developer.mozilla.org/en-US/docs/Web/API/KeyboardLayoutMap
This implements gamepad support for the hotkeys. This allows controlling
LiveSplit One without having to focus the browser tab. There seem to be
some unfortunate limitations though. Chrome for example acquires
exclusive access to the gamepads (at least on Windows with DirectInput).
Firefox however doesn't, so you likely would want to use Firefox if
Chrome is causing problems with your controller.