* refactor: nest ChatTranscript
* feat: set up video controls
* feat: show self video
* feat: show peer video
* feat: improve audio/video controls display
* feat: flip self video
* feat: improve device selection labels
* feat: present password submit UI as a form
* fix: don't connect to room without password
* feat: password-protect room connections
* feat: disable transcript backfilling for private rooms
* feat: [#40] stand up disclaimer page
* chore: use mui-markdown for disclaimer copy
* feat: [#40] add more disclaimer copy
* feat: style lists in messages
* refactor: author About page with Markdown
* feat: improve About page formatting
* feat: [#6] show notification when message is received
* feat: [#6] add setting for enabling/disabling notifications
* refactor: [#6] decouple PeerNameDisplay from funAnimalName
* feat: [#6] disable notifications setting when notifications are unavailable
* feat: [#7] Play a sound on new message
* fix: [#7] Since this mock is a no-op, I think we can omit the argument to mockImplementation
Co-authored-by: Jeremy Kahn <jeremyckahn@gmail.com>
* fix: [#7] lazy initialization of this state
Co-authored-by: Jeremy Kahn <jeremyckahn@gmail.com>
* fix: [#7] More accurate error message
Co-authored-by: Jeremy Kahn <jeremyckahn@gmail.com>
* fix: [#7] Replace then with await
* [closes#24] Settings UI (#26)
* feat: [#24] wire up settings page
* feat: [#24] stand up settings UI
* feat: [#24] implement storage deletion
* feat: [#24] confirm deletion of settings data
* feat: [#7] Add play sound switch in settings
* feat: [#7] avoid typescript warning
Co-authored-by: Jeremy Kahn <jeremyckahn@gmail.com>
* feat: [#7] more straighforward wording
Co-authored-by: Jeremy Kahn <jeremyckahn@gmail.com>
* feat: [#7] remove useless usestate
* feat: [#7] avoid new settings to be undefined in persisted storage
* feat: [#7] creating a chat section in settings
Co-authored-by: Jeremy Kahn <jeremyckahn@gmail.com>