Redesign the entire app with a new UI kit. Typography, colors, icons,
avatars, and border radii have all been updated for a more polished,
consistent appearance that matches our other products like
radicle-explorer.
- Replace blockies-based avatars with a new DID-based avatar system
- Move Settings and Create Issue into fullscreen modals
- Change the default theme to follow the system theme
- Remove window decorations on macOS for a cleaner, more native feel
- Update the app icon
- Fix popovers and tooltips
Navigation:
- Rewrite app navigation and layouts
- Add a sidebar that gives you access to all your repos
- Change the startup screen to open directly to the notification inbox
- Add a getting started guide shown to new users on first launch
Settings:
- Add a setting to disable the notification badge
- Add a code font setting
Bug fixes:
- Fix reactions and edits incorrectly targeting the root comment
instead of the intended reply
- Restrict issue/patch state, labels and assignees to delegates only
Builds macOS DMG, Linux amd64 deb and AppImage from a single macOS
Apple Silicon machine using Podman containers. See RELEASE.md and
scripts/release for details.
Replaces Woodpecker CI with GitHub Actions workflows for lint, unit
tests, e2e tests, and Arch package validation.
Instead of making the whole card interactive, I decided to make the
heading interactive. This avoids nesting the copyable ID as an
interactive element. Nested interactive elements are generally hard to
deal with for implementers and users [1].
I also cleaned up the flex layout in the card heading.
[1]: https://accessibilityinsights.io/info-examples/web/nested-interactive/
For local storage updates to be persisted it had to be assigned for
example with `storage.value = storage.value`. It was easy to forget this
and it’s not immediately obvious why this is needed. (In fact, eslint
complains.)
We introduce an `update` method for the local storage and an
`updateStoredDraftReview` to encapsulate the necessary logic.
This makes the issue list behave the same way as patch list. We don't change
the filter, just reload the issue list so that the new issue state is properly
reflected in the list.