fix: case for emotions

This commit is contained in:
Evan Carroll 2026-01-18 02:49:31 -06:00
parent 8201092703
commit d1cbb3ba34
3 changed files with 20 additions and 6 deletions

View file

@ -5,7 +5,7 @@ use leptos::prelude::*;
use chattyness_db::models::EmotionAvailability; use chattyness_db::models::EmotionAvailability;
use chattyness_db::ws_messages::ClientMessage; use chattyness_db::ws_messages::ClientMessage;
use super::emotion_picker::{EmoteListPopup, EMOTIONS}; use super::emotion_picker::{EmoteListPopup, LabelStyle, EMOTIONS};
use super::ws_client::WsSenderStorage; use super::ws_client::WsSenderStorage;
/// Command mode state for the chat input. /// Command mode state for the chat input.
@ -423,6 +423,7 @@ pub fn ChatInput(
on_close=on_popup_close on_close=on_popup_close
emotion_filter=filter_signal emotion_filter=filter_signal
selected_idx=Signal::derive(move || selected_index.get()) selected_idx=Signal::derive(move || selected_index.get())
label=LabelStyle::Command
/> />
</Show> </Show>

View file

@ -7,6 +7,16 @@ use leptos::prelude::*;
use chattyness_db::models::EmotionAvailability; use chattyness_db::models::EmotionAvailability;
/// Controls how emotion labels are displayed in the EmoteListPopup.
#[derive(Clone, Copy, PartialEq, Eq, Default)]
pub enum LabelStyle {
/// Show as command format: `:e happy` (lowercase, no capitalization)
Command,
/// Show as name format: `Happy` (capitalized)
#[default]
Name,
}
/// Emotion names indexed by emotion slot (0-11). /// Emotion names indexed by emotion slot (0-11).
pub const EMOTIONS: &[&str] = &[ pub const EMOTIONS: &[&str] = &[
"neutral", // 0 "neutral", // 0
@ -38,7 +48,7 @@ pub const EMOTIONS: &[&str] = &[
/// - `show_all_emotions`: When true, show all 12 emotions (for keybindings); /// - `show_all_emotions`: When true, show all 12 emotions (for keybindings);
/// when false, only show available emotions (for chat `:l`) /// when false, only show available emotions (for chat `:l`)
/// - `popup_style`: Positioning style - "above" (default, for chat input) or "static" (for modal wrapper) /// - `popup_style`: Positioning style - "above" (default, for chat input) or "static" (for modal wrapper)
/// - `show_command_prefix`: When true, show ":e " prefix before emotion names (default true for chat) /// - `label`: How to display emotion labels - `Command` for `:e happy` or `Name` for `Happy` (default)
#[component] #[component]
pub fn EmoteListPopup( pub fn EmoteListPopup(
emotion_availability: Signal<Option<EmotionAvailability>>, emotion_availability: Signal<Option<EmotionAvailability>>,
@ -49,7 +59,7 @@ pub fn EmoteListPopup(
#[prop(into)] selected_idx: Signal<usize>, #[prop(into)] selected_idx: Signal<usize>,
#[prop(default = false)] show_all_emotions: bool, #[prop(default = false)] show_all_emotions: bool,
#[prop(default = "above")] popup_style: &'static str, #[prop(default = "above")] popup_style: &'static str,
#[prop(default = true)] show_command_prefix: bool, #[prop(default = LabelStyle::Name)] label: LabelStyle,
) -> impl IntoView { ) -> impl IntoView {
let _ = on_close; // Suppress unused warning let _ = on_close; // Suppress unused warning
@ -167,8 +177,12 @@ pub fn EmoteListPopup(
skin_path=skin_path.clone() skin_path=skin_path.clone()
emotion_path=emotion_path.clone() emotion_path=emotion_path.clone()
/> />
<span class="text-white text-sm capitalize"> <span class=if label == LabelStyle::Name {
{if show_command_prefix { ":e " } else { "" }} "text-white text-sm capitalize"
} else {
"text-white text-sm"
}>
{if label == LabelStyle::Command { ":e " } else { "" }}
{emotion_name_display} {emotion_name_display}
</span> </span>
</button> </button>

View file

@ -344,7 +344,6 @@ fn EmotionSlot(
selected_idx=Signal::derive(move || selected_idx.get()) selected_idx=Signal::derive(move || selected_idx.get())
show_all_emotions=true show_all_emotions=true
popup_style="static" popup_style="static"
show_command_prefix=false
/> />
</div> </div>
</div> </div>