* Parse user agents on the server side
* Parse and expose user agents on the backend
* Use the parsed user agent in the device consent page
* Fix the device icon tests
* Fix clippy warnings
* Box stuff to avoid large enum variants
* Ignore a clippy warning
* Fix the requester boxing
* Start replacing jotai with @tanstack/router
* Remove jotai completely
* Move the common layout & reimplement the ?action parameter
This also makes sure everything is properly loaded in the route loader,
and we use fragment where it makes sense
* Change the default error component
* GraphQL API: make the sessions fetchable through node(id: ID!)
* setup
* new session tile style
* update compound-web
* use compound components
* use deviceId from scope as session name
* add basic test for Session
* border color
* use new Session in compat session
* tidy
* tidy
* Revert "setup"
This reverts commit ee86051dc4f6c6ca2f9d57ce39fa93396817a974.
* disable "deprecate/import" enzyme rule from matrix-eslint that breaks lint
* lint
* correct copyright year
* more lint
* try to stabilise timezone for session tests
* just stub DateTime in test
* test deviceIdFromScope
* tests
* revert config change