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
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
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
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
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
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
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
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
mahmed2000 and GitHub
849c4e85b0
Removes trailing whitespace causing web hydration errors ( #4208 )
2025-02-14 22:49:08 -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
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
2e8e61309a
Remove use of default props ( #4118 )
...
* refactor: replace defaultProps with function parameters in Modal, Statusbar, ChatContainer, and CrossfadeImage components
* New commit for Default properties of React components after syncing fork and rebasing
* fix: fix linter warning
---------
Co-authored-by: swarup <swarupnarkhede999@gmail.com >
2025-01-15 16:12:54 -08:00
Gabe Kangas
d77b80a94a
fix(storybook): fix another story not rendering with i18n
2025-01-14 21:27:21 -08:00
Gabe Kangas
70282761d3
fix(storybook): fix storybook rendering with i18n library
2025-01-14 21:19:23 -08:00
cb387d88be
Initial localization work ( #3980 )
...
* First pass at configuring localization
* Add CI job for translations
* Update CI job
* Update default value
* Update parser config
* Update defaults again
* try to fix the multiple parsing of a file
* Update crowdlin config
* Update configs
* New Crowdin translations by GitHub Action (#3448 )
Co-authored-by: Crowdin Bot <support+bot@crowdin.com >
* Point to updated translated files
* Tooltip i18n
* Run translation job when web components are updated
* Commit updated translations
* Translations update (#3453 )
* Update source file strings.json
Updated translations
* New translations strings.json (French)
Updated translations
* New translations strings.json (Spanish)
Updated translations
* New translations strings.json (German)
Updated translations
* New translations strings.json (English, United States)
Updated translations
* Commit updated translations
* New Crowdin translations by GitHub Action (#3452 )
Co-authored-by: Owncast <owncast@owncast.online >
* chore(deps): update to next config to address build errors
* New Crowdin translations by GitHub Action (#3455 )
Co-authored-by: Crowdin Bot <support+bot@crowdin.com >
* Translations update (#3456 )
* New translations strings.json (Arabic)
Updated translations
* New translations strings.json (German)
Updated translations
* New translations strings.json (Greek)
Updated translations
* New translations strings.json (Irish)
Updated translations
* New translations strings.json (Italian)
Updated translations
* New translations strings.json (Japanese)
Updated translations
* New translations strings.json (Korean)
Updated translations
* New translations strings.json (Dutch)
Updated translations
* New translations strings.json (Norwegian)
Updated translations
* New translations strings.json (Punjabi)
Updated translations
* New translations strings.json (Russian)
Updated translations
* New translations strings.json (Swedish)
Updated translations
* New translations strings.json (Chinese Traditional)
Updated translations
* New translations strings.json (Vietnamese)
Updated translations
* New translations strings.json (Bengali)
Updated translations
* New translations strings.json (Thai)
Updated translations
* New translations strings.json (Croatian)
Updated translations
* New translations strings.json (Hindi)
Updated translations
* New translations strings.json (Malay)
Updated translations
* New Crowdin translations by GitHub Action (#3457 )
* New translations strings.json (Arabic)
Updated translations
* New translations strings.json (German)
Updated translations
* New translations strings.json (Greek)
Updated translations
* New translations strings.json (Irish)
Updated translations
* New translations strings.json (Italian)
Updated translations
* New translations strings.json (Japanese)
Updated translations
* New translations strings.json (Korean)
Updated translations
* New translations strings.json (Dutch)
Updated translations
* New translations strings.json (Norwegian)
Updated translations
* New translations strings.json (Punjabi)
Updated translations
* New translations strings.json (Russian)
Updated translations
* New translations strings.json (Swedish)
Updated translations
* New translations strings.json (Chinese Traditional)
Updated translations
* New translations strings.json (Vietnamese)
Updated translations
* New translations strings.json (Bengali)
Updated translations
* New translations strings.json (Thai)
Updated translations
* New translations strings.json (Croatian)
Updated translations
* New translations strings.json (Hindi)
Updated translations
* New translations strings.json (Malay)
Updated translations
* New Crowdin translations by GitHub Action
---------
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
Co-authored-by: Crowdin Bot <support+bot@crowdin.com >
* Commit updated API documentation
* Update translations job
* New Crowdin translations by GitHub Action (#3698 )
Co-authored-by: Crowdin Bot <support+bot@crowdin.com >
* Update Crowdin configuration file
* Translations update (#3700 )
* New translations strings.json (French)
Updated translations
* New translations strings.json (Italian)
Updated translations
* Translations update (#3699 )
* New translations strings.json (French)
Updated translations
* New translations strings.json (Spanish)
Updated translations
* New translations strings.json (Italian)
Updated translations
* New translations strings.json (Japanese)
Updated translations
* New translations strings.json (Polish)
Updated translations
* New translations strings.json (Russian)
Updated translations
* New translations strings.json (Portuguese, Brazilian)
Updated translations
* Commit updated API documentation
---------
Co-authored-by: Owncast <owncast@owncast.online >
* New Crowdin translations by GitHub Action (#3701 )
* New translations strings.json (French)
Updated translations
* New translations strings.json (Spanish)
Updated translations
* New translations strings.json (Italian)
Updated translations
* New translations strings.json (Japanese)
Updated translations
* New translations strings.json (Polish)
Updated translations
* New translations strings.json (Russian)
Updated translations
* New translations strings.json (Portuguese, Brazilian)
Updated translations
* New Crowdin translations by GitHub Action
---------
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
Co-authored-by: Crowdin Bot <support+bot@crowdin.com >
* Draft: Mark strings for translation. (#3458 )
* Mark strings for translation.
* Mark up strings for translation
* fix(web): fix linter warnings
---------
Co-authored-by: Le fractal <17422-fractal@users.noreply.framagit.org >
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
* do not pull from cowdin via workflow
* Commit updated translations
* feat: add translations support to admin pages and components (#3977 )
* feat: add translations support to admin pages and components
Added translations support admin main page and its components, help
page, handware-info page. Added translations support for LogTable,
NewsFeed and StreamHealthOverview components.
* update package.json
* fix rendering issue
* Commit updated API documentation
---------
Co-authored-by: Owncast <owncast@owncast.online >
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
* Offline banner i18n formatting (#3997 )
* Fix "Last live ago" string formatting with i18n interpolation
* Change some base translation jsons to use i18n interpolation
* Linting fix
* chore(js): ignore i18n pkgs in knip
* fix(test): fix browser ui test
* fix(js): remove unused var
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Crowdin Bot <support+bot@crowdin.com >
Co-authored-by: Owncast <owncast@owncast.online >
Co-authored-by: taintedcypher <119351153+taintedcypher@users.noreply.github.com >
Co-authored-by: Le fractal <17422-fractal@users.noreply.framagit.org >
Co-authored-by: Sufyaan Khateeb <81009832+SufyaanKhateeb@users.noreply.github.com >
Co-authored-by: mahmed2000 <mahmad2000@protonmail.com >
2025-01-14 20:54:21 -08:00
87c7571d5c
embed screen style adjustments ( #4063 )
...
* restyle and relayout embed screen to account for smaller screen displays.
- address https://github.com/owncast/owncast/issues/3683 to address overflow issues
- address https://github.com/owncast/owncast/issues/4051 to move the name of the stream
* Javascript formatting autofixes
* clean up; restore package lock
* accommodate cases when there's no follow option; put follow form on one line, but wrap if need
* clean up
* separate out follow form into separate standalone component to be used in multiple places
* improve follow error styling; rm defaultProps for Modal to get rid of warning
* improve styling of follow form and components for legibility
* prettyify scss
* prettyify scss again
* one more time
* prettify ant file
* simplify layout, center everything
* just use gap
* tweak and lint
* lint, again
---------
Co-authored-by: Owncast <owncast@owncast.online >
2025-01-05 17:28:35 -08:00
gingervitis and GitHub
6528633a13
fix skip link visibility and it moving logo upon focus ( #4078 )
...
* fix skip link visibility and it moving logo upon focus
* update color
2025-01-04 20:24:27 -08:00
mahmed2000 and GitHub
8a1c05abf4
Make the error alert in OfflineEmbed closable ( #4062 )
2024-12-20 09:17:34 -08:00
Gabe Kangas
e1a48909c8
fix(embed): fix follow button not showing up in offline embed. Closes #4053
2024-12-12 22:43:30 -08:00
mahmed2000 and GitHub
d9ee7578d1
Rework stream duration string formatting for the status bar ( #3729 )
...
* Use date-fns formatDuration to generate stream duration string
* Remove unneeded pluralize function
2024-05-02 22:03:26 -07:00
9c3a4acb16
Change tag to self-closing since the linter complains otherwise ( #3690 )
...
Co-authored-by: Muaz Ahmad <mahmad2000@protonmail.com >
2024-04-13 13:51:43 -07:00
Gabe Kangas and GitHub
30d51d81ac
Allow react/no-danger
2024-04-12 10:20:06 -07:00
Jeet Chawda and GitHub
39078babbe
stream offline status embed updated ( #3684 )
2024-04-11 19:57:25 -07:00
Gabe Kangas
805f96e271
fix(web): resolve the status bar duration string. Fixes #3652
2024-03-28 21:18:28 -07:00
Gabe Kangas
70fdc2c642
fix(web): remove rounded corner in video embed
2024-03-07 17:00:32 -08:00
44eafe69ac
fix(deps): update dependency date-fns to v3 ( #3619 )
...
* fix(deps): update dependency date-fns to v3
* fix(deps): update usage of date-fns format
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
2024-03-06 21:13:13 -08:00
Aziz Rmadi and GitHub
45436162bd
Hide chat button on mobile when chat is disabled ( #3616 )
2024-03-05 21:58:17 -08:00
Gabe Kangas and GitHub
5ce78fbad4
New offline embed ( #3599 )
...
* WIP
* feat(web): add new offline embed view. First step of #2917
* feat(web): support remote fediverse follow flow from embed
* feat(chore): add back offline video embed browser test
2024-02-25 12:52:32 -08:00
Gabe Kangas
9db8a8699a
fix: a11y button lables. Closes #3418
2023-11-08 20:08:00 -08:00
kame and GitHub
4f078e1ee4
Migrated Storybook notation from CSF2 to CSF3 ( #3412 )
...
* Migrate web action-buttons directory to CSF3 notation
* Migrate web chat directory to CSF3 notation
* Migrate web common directory to CSF3 notation
* Migrate web layout directory to CSF3 notation
* Migrate web modals directory to CSF3 notation
* Migrate web ui directory to CSF3 notation
* Migrate web video directory to CSF3 notation
* Migrate web stories directory to CSF3 notation
2023-11-06 19:35:05 -08:00
b8ffe5be16
fix: prevent floating mobile action menu button ( #3383 )
...
the absolute positioned mobile action button was attached
to the body causing it to float during scrolling. Now, we wrap
the action buttons inside a relative div so that they are attached
to this div which prevents them from scrolling with page
Fixes #3271
Co-authored-by: Gabe Kangas <gabek@real-ity.com >
2023-10-24 21:58:36 -07:00
81c5908545
Set aria-live to off on span responsible for rendering the online message on a stream ( #3361 )
...
Co-authored-by: Aziz Rmadi <azizrmadi@Azizs-MacBook-Air.local >
2023-10-15 19:45:54 -07:00
Gabe Kangas and GitHub
6e3f5d3e9f
fix: fix positioning of mobile buttons menu. Closes #3216 ( #3217 )
2023-07-28 02:20:04 +00:00
Gabe Kangas
16db7825c9
fix: external actions were assuming all actions are urls. Fixes #3213
2023-07-26 11:17:47 -07:00
f112f9813d
NotifyReminderPopup uses a custom Popover ( #3194 )
...
* NotifyReminderPopup uses a custom Popover
* fix Popover resizing in storybook
* Prettified Code!
---------
Co-authored-by: janWilejan <>
Co-authored-by: janWilejan <janWilejan@users.noreply.github.com >
2023-07-21 15:58:14 -07:00
Gabe Kangas and GitHub
777da508ed
fix(chat): fix chat not using the correct messages selector. ( #3180 )
...
* fix(chat): fix chat not using the correct messages selector. Closes #3166
* fix(chat): initial state was incorrect when hiding/showing messages
2023-07-17 20:48:59 +00:00
3f4887020d
Add resize handle to chat ( #3157 )
...
* add resize handle to chat
* Add chat resize functionality
* window resize only causes chat resize on desktop
* fix parseFloat invocation
* desktop is optional attribute of ChatContainer
---------
Co-authored-by: janWilejan <>
2023-07-10 23:00:28 -07:00
2d72935564
change chat from a sidebar to a column ( #3113 )
...
* change chat from a sidebar to a column
Using a 2-column layout prevents the chat scrollbar from overlapping the page
scrollbar. Also, it no longer needs to calculate extra padding for elements.
* remove unused Sidebar.tsx
* fix css for chat column
* re-center "Go to last message" button
* main content column always uses maximum height
* lint
* re-hide scrollbars in mainContent on chromium
* fix chat column width when input is over-full
* chat is only fixed-width in desktop
---------
Co-authored-by: janWilejan <>
2023-07-09 14:07:35 -07:00
Gabe Kangas
dc2c46e2a4
fix(ui): fix for exception when chat is disabled. Closes #3138
2023-07-05 14:02:39 -07:00