* chore(vite): use vite
* fix(vite): alias lib directory
* chore(vite): set type: module
* chore: update vite and MUI
* fix(vite): make MUI components load
* fix: use node path resolution
* chore(vite): add svg support
* fix(vite): polyfill global
* fix(vite): use import.meta
* fix(vite): use correct svg module resolution
* chore(vite): migrate to vitest
* fix(vite): remove PUBLIC_URL
* fix(tests): mock audio service
* chore(deps): upgrade to react test library 14
* refactor(tests): simplify room test setup
* refactor(tests): make Date.now() mockable
* refactor(vite): remove bootstrap shim
* chore(deps): drop react-scripts
* chore(deps): remove source-map-explorer
Source maps do not currently work with MUI and Vite:
https://github.com/vitejs/vite/issues/15012
Because of this, source map utilities are currently removed.
* refactor(vite): use TypeScript for Vite config
* chore(actions): update actions config for new paths
* fix(service-worker): use VITE_HOMEPAGE for service worker resolution
* fix(vercel): use quotes for build command
* fix(vite): use import.meta.env.MODE
* fix(service-worker): use correct definition for publicUrl
* feat(vite): use vite-plugin-pwa
* fix(pwa): make update prompt work
* fix(types): use vite/client types
* docs(readme): update building instructions
* refactor(vite): simplify theme loading workaround
* refactor(vite): use manifest object
* docs(readme): update tool references
* chore(deps): run `npm audit fix`
* fix(vite): make syntax highlighter work consistently
See: https://github.com/react-syntax-highlighter/react-syntax-highlighter/issues/513
* fix(pwa): remove manifest.json references
* refactor(deps): remove jest references
* refactor(types): remove react-scripts reference
* chore(deps): use TypeScript 5
* refactor(tests): improve persisted storage mocking
* feat(sdk): render iframe in chat-room component
* fix(ci): install optional dependencies
* feat(sdk): allow subset of attributes
* feat(sdk): accept root-domain attribute
* feat(sdk): accept custom room name or use sane default
* feat(sdk): set allowed features
* feat(sdk): add sdk instructions to embed code dialog
* fix(sdk): use dynamic rootUrl
* fix(sdk): use static defaultRoot
* feat(sdk): send config from SDK to chat
* fix(sdk): expire poller
* fix(sdk): pass parent domain to iframe via query param
* refactor(sdk): type message event data
* feat(sdk): send user id to chat frame
* feat(sdk): handle some attribute updates
* chore(package): add build:sdk:watch script
* refactor(sdk): move more code to updateIframeAttributes
* feat(sdk): support changing rooms
* feat(sdk): support more user settings
* docs(sdk): add SDK section to README
* feat(sdk): render root-url in embed code if necessary
* refactor(sdk): use map for chat room attributes
* fix(sdk): unbind event listener when chat-room is disconnected
* fix(sdk): properly tear down receipt listener
* fix(sdk): send config when frame reloads
* feat(sdk): listen for config updates
* feat(sdk): request config from sdk instead of sending it repeatedly
* refactor(sdk): use type guard for config message
* fix(sdk): use settings from SDK when there is no preexisting persisted data
* fix(sdk): observe all iframe attributes
* refactor(sdk): simplify bootup logic
* feat(sdk): improve embed code display
* feat(typing-indicator): wire up handleMessageChange
* feat(typing-indicator): send typing: true status
* feat(typing-indicator): expire typing state
* feat(typing-indicator): update typing state received from peers
* refactor(shell): add updatePeer utility
* feat(typing-indicator): display peer typing status
* feat(typing-indicator): reset typing status when a message is sent
* feat(typing-indicator): move indicator below message form
* feat(typing-indicator): keep status text to one line
* feat(ConnectionTest): track tracker state
* feat(ConnectionTest): show tracker searching state
* chore(deps): use github:jeremyckahn/trystero#feature/get-tracker-connections
* feat(connection-test): hide network indicator in non-room routes
* feat(connection-test): show peer searching status
* feat(connection-test): hide peer searching UI when not in a room
* feat: [#86] encrypt torrent data before upload
* feat: [#86] decrypt torrent data after download
* feat: [#86] use room ID as encryption key
* feat: [#86] show alerts for encryption activity
* feat: [#86] show progress indicator while encrypting files
* Move room tools to top of page to use full width
Allow messages to be hidden while video is displaying
Allow video display to utilise all available width
Track unread messages while they are hidden
* Better portrait behaviour
* Show room controls by default
* Show room controls at same time as app bar
Improve video height calc.
Co-authored-by: Jeremy Kahn <jeremyckahn@gmail.com>
* feat: [#21] stand up file sharing controls UI
* feat: [#21] implement basic file transfer
* feat: [#21] save transferred file
* feat: [#21] transfer file via WebTorrent
* fix: use external streamsaver assets
* feat: [#21] initiate download by receiver click
* fix: enable re-downloading of shared files
* feat: [#21] implement sharing of multiple files
* chore: enable offline development
* feat: cache torrents in IndexedDB
* feat: show alert when download is aborted
* feat: [#21] clean up torrent data when principal offerer rescinds it
* feat: clean up cached torrents on page unload
* feat: show file transfer progress
* fix: download files sequentially
* feat: clean up file transfers when leaving the room
* feat: clean up broken downloads upon leaving the page
* fix: allow download animation to complete
* feat: show tooltip for download button
* feat: make file transfers work in browser private modes
* feat: disable file share controls while creating offer
* 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