* Added: "Pin This Message" chat action to allow moderators to pin messages as a quick fix until I can implement the normal vanilla pin button.
* Fixed: FrankerFaceZ failing to load correctly on moderation view pages.
* Added: "Copy Message" chat action for copying a message to your clipboard.
* Added: Setting to pause the player by clicking on it. This is disabled by default, and the pause happens after half a second to avoid pausing as part of a double-click.
* Added: Setting to clear the emote menu's search when closing it.
* Added: Setting to hide the "Elevate Your Message" button in the chat input field.
* Changed: Remove code related to channel hosting.
* Fixed: Do not attempt to load FFZ on `gql` or `passport` subdomains.
* Fixed: Channel leader-boards not being hidden on channels within a specific experiment.
* Fixed: Channel Metadata not appearing over the player in theater mode when hovering with the relevant setting enabled.
* Fixed: Chat on Videos not appearing correctly for some videos due to incorrect channel IDs associated with messages.
* Fixed: When in theater mode, hide the secondary player controls that Twitch displays by mistake.
* Fixed: Certain Twitch badges not appearing correctly for users with high-DPI displays or increased zoom levels. (Note that this may require you to perform a hard refresh due to browser caching.)
* Removed: Don't display a message about the Audio Compressor preventing playback rate changes for Firefox users. Firefox fixed that issue a while back and no users should experience it at this time.
* Added: Setting to hide specific chat token types from rendering in chat, in case you for some reason don't want to see cheers / emotes / whatever.
* Added: Support for the Artist, No Audio, and No Video badges in different badge styles.
* API Added: The `site.player` module now exports CSS rules for the player control containers, so that FS Chat (and maybe other add-ons) won't need updates in the future if the CSS rule changes slightly.
* Added: Option to hide channels from the directory based on their title.
* Fixed: Issue with FrankerFaceZ failing to initialize correctly due to a change in Twitch's JS layout.
* Added: Setting to force the use of legacy audio API constructors for browsers with compatibility issues.
* Changed: Add support for Twitch's inline chat highlights.
* Fixed: Locales failing to load due to missing `day.js` support.
* Fixed: Locales failing to load due to capitalization.
* Changed: Use a slightly newer API for constructing an audio compressor object for better compatibility.
* Added: Formatters for chat action variables. (Closes#1199)
* Changed: By default, open the user card to a badge when clicking a badge in chat. (Closes#1195)
* Fixed: The settings bridge functioning incorrectly for users without a set storage provider, causing pages that rely on the settings bridge including the Stream Dashboard to never correctly load FFZ.
* Fixed: The new announcement feature not rendering correctly in chat.
* Fixed: Metadata failing to render correctly with certain Twitch experiments active.
* Fixed: Some promoted streams appearing when users have chosen to hide promoted streams.
* Fixed: The FFZ Control Center button being positioned incorrectly on streamer dashboard pages.
* Fixed: Profile rules for the current category/title not working on certain pages.
* Fixed: Swap Sidebars causing rendering issues when in theater mode, with the chat below the player, when not using FrankerFaceZ's Portrait Mode option.
* Fixed: The placeholder text being positioned wrong when using Twitch's WYSIWYG chat input.
* Fixed: The entire extension loading when viewing an embedded clip, causing undue load.
* Changed: Add a link to YouTube's Privacy Policy to the legal page.
* Fixed: FFZ no longer working correctly for Safari users owing to poor regex support. Safari users will be unable to use the Emoji Joiner Workaround introduced in 4.32.0.
* Added: Support for combined emoji using a workaround that compensates for Twitch chat eating unicode it shouldn't. (See #1147 for more details)
* Added: Setting to change how emotes are sorted when using tab completion. Applies to the In-Line Tab Completion add-on as well as the default tab completion.
* Added: Setting to disable a browser's "automatic dark theme" features when supported. This primarily applies to Chromium browsers.
* Added: Ability to make emoji larger in addition to emotes using the "Larger Emotes" setting.
* Fixed: Better handling of community introduction messages.
* Fixed: Catch more chat line rendering errors to prevent chat from breaking entirely.
* Fixed: Chat on Videos not appearing with the chat background color.
* API Changed: Rich Tokens now support `ref` tokens in `header` tokens.
* API Changed: Rich Tokens now support `link` tokens with no content, automatically setting their content to their URLs.
* Fixed: Chat crashing due to Twitch's new introduction feature. This is currently done with a patch that converts such messages to the old style 'First Time Chat'.
* Changed: The rich embed testing tool now supports automatic refresh when using a local development server.
* Fixed: Reduce the amount of re-rendering that happens when a mass gift sub happens in chat.
* Fixed: Do not display stream latency metadata when watching non-live content.
* Fixed: Add support for user name overrides to clips and video chat.
* Fixed: Badge tooltips on the clips subdomain.
* API Added: `ffz_user_class`, `ffz_user_props`, and `ffz_user_style` on chat messages for customizing the display of usernames on messages in chat.
* Fixed: Clicking on Twitch emotes to open an information card about the emote not working for emotes at 50% or further down the screen height.
* Fixed: Improve support for the Twitch WYSIWYG chat input experiment.
* Fixed: Apply a maximum height to the ban reason pop-up to avoid long lists from going off screen.
* API Added: `removeTokenizer(type)` and `removeRichProvider(type)` methods for the chat module.
* API Changed: Chat tokenizers no longer need to return a token list, if tokens have not changed.
* Fixed: Infinite loop bug with the `<markdown />` Vue component.
* Fixed: Bug with the method that calculates the chat input height causing chat input to disappear completely.
* Changed: When an add-on fails to enable, a slightly better message will be logged to console.
* Added: Option for displaying larger embeds in chat for supported sources. This won't do anything until the link service is updated with support.
* Added: Support for v6 rich content for embeds, tool-tips, and the rich content debugger.
* Changed: Limit the width of rich content embeds in portrait mode.
* Fixed: Clicking badges not working correctly.
* Fixed: Rich embeds being rendered when an unsupported version is returned from the embed server.
* Fixed: The month being off by one in the default filename when saving a settings backup.
* Fixed: The Chat Identity entry not appearing in the chat settings menu when appropriate.
* API Added: `Mutex()` class for limiting something to a certain number of accessors at once.
This release cleans up some English strings, and moves us to a new back-end for translation. Now, translations are cached in our CDN which should reduce resource usage and allow clients to properly cache things. Translations are also split into chunks so clients can minimize what they need to request at any given time.
* Fixed: Detection of the subscriber button.
* Fixed: Remove references of non-standard ICU format `en_plural`. Use proper `plural` tags.
* API Added: `i18n.loadChunk(name: string) => Promise<void>` for requiring a new chunk.
* API Fixed: Allow settings to have a `null` i18n key to disable translation.
This update includes a dependency update to version 2 of PopperJS, the library we use for tool-tips. Hopefully this fixes flickering issues with tool-tips. Some tool-tips may have issues after the update. If something doesn't look right, please ask.
* Fixed: Chat lines not showing replies.
* API Fixed: `setChildren` now supports variables that are not `Node`s or `string`s, and does so by casting other types to `string`s. Makes it easy to include numbers and other variables when using JSX.
* Maintenance: Update to PopperJS v2.
* Start using the [pnpm](https://pnpm.io/) package manager rather than npm.
* Replace `node-sass` with `sass`.
* Update versions of many dependencies
* Didn't yet update webpack to v5, since that'll be a mess.
* Clean some old build scripts out of package.json
* Added: Setting to hide the "Discover Luna" link in the top navigation.
* Changed: Hide blocked categories from the directory's category list.
* Fixed: Stream up-times not appearing in the directory.
* Fixed: Error in error handler for PubSub.
* API Added: `Dialog` now supports prepending its element to its container, rather than appending.
* API Added: `tip.add_class` for adding additional classes to rich tooltips that may now have had their element created yet.
* Fixed: Initialization problems in pop-out chat.
* Changed: Set a default size for emoji, to prevent rendering issues in any future cases where initialization breaks.
* Changed: Apply the full width clips page setting to the create new clip page.
* Fixed: Issue with Apollo failing to initialize breaking multiple parts of FFZ.
* API Changed: Support `sfw_images` when rendering rich tokens.
* Added: Support for OpenDyslexic and Google Fonts. Font Family settings now provide a list of fonts to choose from, in addition to allowing a custom font to be entered.
* Changed: When saving a settings backup, the current date will be included in the filename by default. (Closes#1084)