* 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