This converts the remainder of the CSS files to CSS modules. The
following are not converted:
1. `variables.scss`: I'm not entirely sure if variables can be converted
to CSS modules. The documentation states you might need PostCSS for
it. However, we probably may want to look into CSS variables anyway.
So this would be done in a subsequent PR.
2. `main.scss`: This declares global styles. I'm not sure if it's
possible to convert this as this is needed from the very beginning,
before any React is even loaded.
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.
Apparently the entire configuration format changed. I didn't fully
replicate the old configuration in order to reduce the complexity of it
all, hopefully resulting in fewer maintenance headaches in the future.
Additionally, I removed some unused dependencies that were no longer
needed.
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.
We now automatically store the current comparison and timing method into
the Indexed DB. This allows us to restore the comparison and timing
method when the user reloads the page.
Changelog: The comparison and timing method (Real Time / Game Time) that
you choose now stay chosen when you reload LiveSplit One.
This adds a save on reset setting to the general settings. When enabled,
the splits are automatically saved when the timer is reset.
Changelog: You can now enable **Save On Reset** in the settings, which
will automatically save the splits when you reset the timer.
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.
This improves the contributors section in the About page. It now uses
flexbox to dynamically place the contributors. Additionally their avatar
is now being shown.
Also the ten most recent changes are now being shown in the About page.
The information is extracted from the git history. The idea is to mark
commit messages with a special changelog section at the end that's
specifically meant to be shown as a user facing change. It can be
arbitrary markdown and looks like this (which is also the first one):
Changelog: The About page now shows the most recent changes. The
contributors section has also been improved. It now shows the avatar of
each contributor.
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 all the remaining dependencies that I was able to update.
React is still at version 16 because some of the components I use
apparently haven't been updated to support more recent versions of
React.
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.
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.
By inlining a tiny amount of JS into the HTML, we can request the WASM
and other JS bundles much sooner, reducing the latency a bit. This also
inlines the most important styling, so that the loading screen is always
properly styled. We unfortunately have to use `syncWebAssembly` here as
it allows requesting the WASM file sooner than the other setting. It's
not a whole lot sooner, so once they remove the setting, we can switch
back without taking too much of a hit.
This implements support for custom fonts. Additionally it updates
livesplit-core and all our npm dependencies to the latest version. This
also switches how we propagate colors and fonts through the layout. We
are now using custom CSS variables instead of passing them through the
component tree.
This cleans up the service worker such that unnecessary assets aren't
precached and instead dynamically cached at runtime. Additionally this
removes the `?homescreen=1` URL parameter from the app, which ensures it
works properly offline.
Resolves#261Resolves#262
GitHub Pages usually responds with the responses expiring after 10
minutes, so if you reload LiveSplit One after 10 minutes, you are not
getting any cache hits. With a service worker we can permanently store
the application data and only when we publish new changes, will the old
application cache entries be removed.
This allows full offline support and should make Chrome even offer to
install LiveSplit One as a Portable Web App.
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.