feat: implement dark mode edge labels
This PR also moves the dark mode setting into the global config (redux). I don't think it makes sense for dark mode to be included in the saveState session, and can be different per device. Hence I opted for persisting using localStorage like Duncan's original implementation.
There are two new fields: theme
(which can be system, dark, light), and currentTheme
(which is only dark and light). The latter automatically updates when the system configuration changes (i.e., I change my MacOS to dark mode).
From any view, you can now observe useConfig().currentTheme
and ensure the view is always up to date.
I am a bit new to redux though, so let me know if there is a better option. I explored redux selectors, but ultimately gave up because I couldn't manually trigger an update event for those.