605c4eed00
Fix for initial client status and config not hydrating ( #4772 )
...
* fix(js): fix server hydration not working. will speed up initial load time
* fix: update lockfile
* fix(js): fix for malformed or invalid JSON in hydration
* chore: update extracted translations
---------
Co-authored-by: Owncast default web localizations <owncast@owncast.online >
2026-01-28 18:12:25 -08:00
6abaf20f2b
feat: add support for custom favicons ( #4770 )
...
* feat: add support for custom favicons
* Commit updated API documentation
* chore(i18n): add localization of text
* fix(js): regenerate package lock file
* chore(test): add favicon test
* fix: max size not respected
* Commit updated API documentation
* fix: move favicon.ico to the static dir
* fix: fix tests
* fix: remove hard-coded content-type of icon
* chore: update extracted translations
* feat(admin): add support for resetting to default icon
* chore: use a higher res default favicon
* Commit updated API documentation
---------
Co-authored-by: Owncast <owncast@owncast.online >
2026-01-28 18:07:19 -08:00
397ec95d9b
fix: remove special character requirement from stream keys ( #4754 )
...
Some broadcasting software (e.g., Prism Live Studio) strips special
characters from stream keys, making Owncast-generated keys incompatible.
Changes:
- Create separate STREAM_KEY_COMPLEXITY_RULES without special char requirement
- Update generateRndKey() to only use alphanumeric characters
- Keep PASSWORD_COMPLEXITY_RULES unchanged for admin password security
- Update tooltip text to reflect new requirements
- Add comprehensive tests for stream key generation
Fixes #4690
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-28 11:51:57 -08:00
93b482871f
Require authentication to participate in chat ( #4762 )
...
* feat(chat): require authentication to participate in chat
* fix: it's pretty much impossible to bypass the auth requirement, addressing review feedback anyway
* feat(chat): render chat text input as disabled if chat auth is required
* Commit updated API documentation
---------
Co-authored-by: Owncast <owncast@owncast.online >
2026-01-28 11:49:07 -08:00
Gabe Kangas
b18e773fa7
chore(web): remove unused scss file
2026-01-21 23:50:37 -08:00
John Costa and GitHub
9f169ce96e
fix: preserve chat input text across window resize ( #4717 )
...
Adds a Recoil atom (chatInputDraftAtom) to store the chat input draft,
which persists the text when the chat component unmounts/remounts during
mobile/desktop mode transitions.
Changes:
- Add chatInputDraftAtom to ClientConfigStore
- Update ChatTextField to save draft on input change
- Restore draft when component mounts
- Clear draft when message is sent
Closes #3615
2026-01-17 14:33:02 -08:00
John Costa and GitHub
9c747e865a
fix: consolidate browser notification learn more text into single localized string ( #4716 )
...
- Combines 'Learn more' link and surrounding text into one Translation
- Fixes double space issue (was + regular space)
- Enables full sentence to be localized: '<a>Learn more</a> about Owncast browser notifications.'
Closes #4655
2026-01-14 12:57:14 -08:00
Gabe Kangas
5438ab8ea0
chore(js): fix js formatting
2026-01-10 15:37:26 -08:00
Gabe Kangas
53a6166d4b
chore(js): fix js formatting
2026-01-10 15:35:30 -08:00
05341aced0
feat: add readonly-chat class to readonly embed ( #4714 )
...
Adds a 'readonly' prop to ChatContainer that conditionally applies a
'readonly-chat' CSS class to the chat container element. This allows
streamers using OBS to target the readonly chat embed with custom CSS.
The readonly embed at /embed/chat/readonly now passes readonly={true}
to ChatContainer, which adds the class to the container div.
Fixes #4266
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
2026-01-03 13:04:51 -08:00
ab06b218e3
Fix: Fix to show color when user join the chat ( #4706 )
...
* Fix: Fix to show color when user join the chat
* Changes to restore unnecesary changes
* Deleting unnecesary changes
* Identation issues fixed
* fix(js): run prettier against changed code
---------
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
2025-12-26 16:45:30 -08:00
a1f7f599c8
Allow emoji picker to fit smaller viewports ( #4651 )
...
* fixed 4493 issue
* Update web/components/chat/ChatTextField/ChatTextField.module.scss
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
* lint error fix
---------
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
2025-11-10 14:00:11 -08:00
Amisha and GitHub
8c016b85dd
fix: X-axis labels and ticks ( #4664 )
...
* fix: X-axis labels and ticks
* use TimeWindow enum instead of int
* format with Prettier
2025-11-10 13:48:01 -08:00
서정현 and GitHub
24cd89a114
chore(deps): update prettier to version 3.6.2 and adjust peer dependencies in package-lock.json ( #4663 )
2025-11-03 09:09:01 -08:00
Gabe Kangas
3a756201ea
chore(css): run stylelint
2025-10-24 00:15:12 -07:00
Gabe Kangas
4b9845c7c8
Format sass files
2025-10-24 00:08:29 -07:00
Gabe Kangas
c7d78f4224
Use updated sass import syntax
2025-10-23 23:27:10 -07:00
Gabe Kangas and GitHub
cc9286416c
Update storybook to v9 ( #4645 )
...
* chore: Update storybook to v9
* Pin next-export-i18n + remove outdated mock library
* Replace old mocking library with MSW
* Resolve knip unused code warnings
2025-10-20 21:26:32 -07:00
383b80851b
Add localization support to admin status and error messages ( #4631 )
...
* Initial plan
* Add localization support to admin form status and error messages
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Format updated files with prettier
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Replace t() with Translation component in admin page JSX
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* update package-lock.json
* Update web/i18n/en/translation.json
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
2025-10-13 16:29:40 -07:00
275339bdf0
Add localization support for chat message components with enhanced Translation component ( #4560 )
...
* Initial plan
* Add localization support for chat message components
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Update chat message localization to use string interpolation
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Restore original styling while preserving string interpolation
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Separate styling from variables in translation templates
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Revert to concatenation approach for chat message localization
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Add id property to Translation component and restore missing CSS classes and IDs
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Javascript formatting autofixes
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
Co-authored-by: Owncast <owncast@owncast.online >
2025-09-16 00:13:13 -07:00
51ae467a5a
Add localization support for FollowModal component ( #4558 )
...
* Initial plan
* Add localization support for FollowModal component
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Update web/components/modals/FollowModal/FollowModal.tsx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
* Update web/components/modals/FollowModal/FollowForm.tsx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
2025-09-15 21:50:36 -07:00
1cf923a5af
Update localization files + references ( #4556 )
...
* Initial plan
* Add localization support to NameChangeModal component
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Add NameChangeModal translations to English language file
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* fix(i18n): fix localization keys
* chore(test): add i18n test
* chore(i18n): update translation script
* chore(i18n): reorgnize translation keys and update components
* chore: fix linting warnings
* chore(i18n): update all the language files
* feat(i18n): add last live ago i18n key
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
2025-09-15 19:27:56 -07:00
8eb8bdc18b
Stop using empty/whitespace as chat display names ( #4553 )
...
* fix(chat): fixes #4522 to stop people from setting invalid display names
* fix(chat): also guard against non-ascii whitespace like non breaking space
* Update web/utils/displayNameValidation.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
* fix: handle additional whitespace
* Update web/utils/displayNameValidation.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
* Javascript formatting autofixes
* fix: deduplicate running of validation
* fix: fix error with useMemo
* Update web/utils/displayNameValidation.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
* Update web/utils/displayNameValidation.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
* Javascript formatting autofixes
* fix: fix component rendering issue
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
Co-authored-by: Owncast <owncast@owncast.online >
2025-09-15 13:37:39 -07:00
e66b0444ad
Increases the max bandwidth selectable in the admin UI ( #4550 )
...
* feat(admin): Closes #1462 . Increases the max bandwidth selectable in the UI + localization for the strings
* chore: update extracted translations
* Javascript formatting autofixes
---------
Co-authored-by: Owncast default web localizations <owncast@owncast.online >
2025-09-14 15:41:58 -07:00
Gabe Kangas and GitHub
8568f43310
fix(js): fixes #4452 action buttons not showing externally while mobile ( #4547 )
2025-09-14 14:28:57 -07:00
84eaa60ec9
Add static class names to UI elements for easier customization ( #4421 )
...
* Initial plan
* Add static class names to UI elements for easier customization
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Add unique DOM element IDs for easier customization targeting
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Remove duplicate class names, keep only IDs for UI element targeting
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Revert chat input field ID to original value
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Remove unnecessary nested spans and revert Button ID to original value
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Standardize ID names to follow owncast-{element-description}-{type} pattern
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
2025-08-07 19:12:28 -07:00
Gabe Kangas
481de398fc
fix(css): format
2025-08-07 18:55:21 -07:00
Gabe Kangas
b1ba1bdf0f
fix(css): fix sass import path
2025-08-07 18:49:18 -07:00
074bff32c1
Update directory.owncast.online -> owncast.directory ( #4485 )
...
* chore: change directory.owncast.online -> owncast.directory. For #4483
* chore: update extracted translations
---------
Co-authored-by: Owncast default web localizations <owncast@owncast.online >
2025-08-02 16:49:11 -07:00
57cd0f974f
Update BrowserNotifyModal.tsx to use Localization component ( #4444 )
...
* Initial plan
* Update BrowserNotifyModal.tsx to use Localization component
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Organize BrowserNotifyModal localization keys into namespaces
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* chore: update extracted translations
* Update web/components/modals/BrowserNotifyModal/BrowserNotifyModal.tsx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
* Update web/i18n/en/translation_old.json
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
Co-authored-by: Owncast default web localizations <owncast@owncast.online >
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
2025-07-30 13:02:03 -07:00
7675c53e16
Removed aria ( #4430 )
...
* fixed-aria
* removed-aria
* fix(js): linter error
---------
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
2025-07-22 12:32:07 -07:00
59b905649e
Add pluralization support to Translation component ( #4441 )
...
* Initial plan
* Add pluralization support to Translation component with comprehensive tests
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Javascript formatting autofixes
* Update web/tests/translation.test.tsx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
* Update web/components/ui/Translation/Translation.tsx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
* fix: linter warning
* Simplify pluralization logic: use original key for plural, only _one for singular
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* feat(i18n): fix support for nested namespace string and key extraction
* chore: update extracted translations
* fix(i18n): fix linter warnings in extraction script
* Update web/scripts/i18n-extract.js
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
* feat(i18n): sort translation keys
* fix(i18n): fix linter warnings
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
Co-authored-by: Owncast <owncast@owncast.online >
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
2025-07-13 17:34:06 -07:00
eafcf9148c
Update EditInstanceDetails admin component to support localization ( #4439 )
...
* Initial plan
* Update EditInstanceDetails component to support localization
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* chore: update extracted translations
* Update web/types/localization.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
* Add EditInstanceDetails namespace to localization keys
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* chore: update extracted translations
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
Co-authored-by: Owncast default web localizations <owncast@owncast.online >
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
2025-07-13 13:34:30 -07:00
29b5100114
Create custom Translation component for better i18n handling ( #4431 )
...
* Initial plan
* Implement Translation component with Storybook stories
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Add Jest test for Translation component and demonstrate ?lang=de functionality
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Javascript formatting autofixes
* Create centralized type-safe localization system
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Add @testing-library/react to Translation component tests
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Fix code formatting errors with prettier and eslint
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Revert "Fix code formatting errors with prettier and eslint"
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* fix(js): eslinter errors
* fix(js): unused code warnings
* fix(js): fix additional warnings
* Update Emoji admin page to use new Translation component
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Organize localization keys by logical sections (Frontend, Admin, Common, Testing)
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Organize localization keys by TypeScript namespaces
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Javascript formatting autofixes
* feat(js): add support for default translated text
* chore: add default lang translations on commit
* fix(js): unused code warnings
* Update OfflineBanner component to use new Translation component
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* fix(js): fix localization extraction job
* chore(js): remove ts-node cli
* fix(css): fix css warning
* feat(js): add some additional translation strings via component
* chore: update extracted translations
* test: add tests for Translation component defaultText and fallback behavior
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* chore: update extracted translations
* Javascript formatting autofixes
* chore: call out new Translation component
* fix: linter warning
* chore: updated instructions
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
Co-authored-by: Owncast <owncast@owncast.online >
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
2025-07-13 02:21:46 -07:00
07786682b0
Fix error message styling consistency in browser notification modal ( #4418 )
...
* Initial plan
* Update BrowserNotifyModal to use Alert component for error styling consistency
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* chore: update copilot instructions
* chore: update copilot instructions
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
2025-07-04 22:42:40 -07:00
Gabe Kangas and GitHub
1310dc1b80
Add horizontal line to admin sidebar ( #4417 )
...
* feat(admin): add horizontal line to sidebar. Closes #4098
* fix: lint css file
* fix: tweak css
* chore: go mod tidy
* fix: another css fix
2025-07-04 19:34:57 -07:00
5950db7abd
Display keyboard shortcut in UserDropdown chat menu items ( #4414 )
...
* Initial plan
* Add keyboard shortcut display to UserDropdown chat menu items
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Successfully implement keyboard shortcut display in UserDropdown chat menu
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
* Additional instructions
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: gabek <414923+gabek@users.noreply.github.com >
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
2025-07-04 14:19:17 -07:00
Gabe Kangas
f6c13bdc69
chore(web): remove unpopulated meta tags. Closes #4324
2025-05-20 20:27:45 -07:00
77da953781
Disable support for the latency compensator in the player ( #4348 )
...
* chore(web): disable support for the latency compensator. Closes #4224
* Javascript formatting autofixes
---------
Co-authored-by: Owncast <owncast@owncast.online >
2025-05-20 20:00:03 -07:00
mahmed2000 and GitHub
d1879e74b5
fix errorMessage being set as a raw error type instead of a string ( #4333 )
2025-05-10 13:20:24 -07:00
Gabe Kangas
75a8819188
fix(web): add missing space in footer
2025-05-03 11:16:16 -07:00
Michael and GitHub
07d4ce0a52
Increase font sizes on offline embed page ( #4246 )
2025-03-10 20:17:06 -07:00
nya/nekojanai and GitHub
e08b251b7c
fix: username wrapping for parting message ( #4209 )
2025-02-15 17:02:56 -08:00
mahmed2000 and GitHub
849c4e85b0
Removes trailing whitespace causing web hydration errors ( #4208 )
2025-02-14 22:49:08 -08:00
Yash Kumar and GitHub
2c42b901f2
set default initialValue to an empty string in TextFieldWithSubmit component ( #4207 )
2025-02-14 22:32:24 -08:00
Germaine Lee and GitHub
f1ca5f9549
Update follower cards to have better responsive design ( #4198 )
...
* change a follower's name to be very long
* Add more media query and make the entire row match the tallest card
* fix lint in followerCollection file
* make media queries easier to read
2025-02-12 20:46:54 -08:00
Gabe Kangas
ca98a5ad21
fix(video): support native hls playback via opengraph tags. Fixes #4204
2025-02-12 19:19:42 -08:00
9be8fa56c2
Add background color and title attribute to social images ( #4192 )
...
* Make social links wrap
* Add background to social links
* add title to social link
* fix lint attempt
* css lint fix attempt
* scss prettier
---------
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
2025-02-07 18:56:24 -08:00
Gabe Kangas
dd7a0ec081
fix(storybook): remove the storybook params causing render errors
2025-02-06 18:44:39 -08:00
Gabe Kangas
47857e283e
fix(web): improve sizing and spacing of offline embed. Closes #4133
2025-01-17 15:40:06 -08:00