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>
This commit is contained in:
Copilot
2025-08-07 19:12:28 -07:00
committed by GitHub
co-authored by gabek copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Gabe Kangas
parent 8b623f4c1a
commit 84eaa60ec9
7 changed files with 25 additions and 8 deletions
@@ -9,6 +9,10 @@ export type ChatActionMessageProps = {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export const ChatActionMessage: FC<ChatActionMessageProps> = ({ body }) => (
<div className={styles.chatActionPadding}>
<div dangerouslySetInnerHTML={{ __html: body }} className={styles.chatAction} />
<div
id="owncast-chat-action-message-text"
dangerouslySetInnerHTML={{ __html: body }}
className={styles.chatAction}
/>
</div>
);
@@ -27,7 +27,10 @@ export const ChatNameChangeMessage: FC<ChatNameChangeMessageProps> = ({ message
</div>
<div className={styles.nameChangeText}>
<span style={{ color }}>{oldName}</span>
<span className={styles.plain}> is now known as </span>
<span className={styles.plain} id="owncast-name-change-is-now-known-text">
{' '}
is now known as{' '}
</span>
<span style={{ color }}>{displayName}</span>
</div>
</div>
@@ -283,6 +283,7 @@ export const ChatTextField: FC<ChatTextFieldProps> = ({ defaultText, enabled, fo
<button
type="button"
aria-label="Emoji picker"
id="owncast-emoji-picker-button"
className={styles.emojiButton}
title="Emoji picker button"
>
@@ -292,6 +293,7 @@ export const ChatTextField: FC<ChatTextFieldProps> = ({ defaultText, enabled, fo
<button
type="button"
aria-label="Send message"
id="owncast-send-message-button"
className={styles.sendButton}
title="Send message Button"
onClick={sendMessage}