add 'stop' reaction, improve reaction button layout

This commit is contained in:
marlon-erler
2026-04-08 11:24:33 +00:00
parent 4945fb5136
commit ef25cd223d
9 changed files with 69 additions and 16 deletions
+6 -1
View File
@@ -747,7 +747,12 @@ body[showing-chat] #chat-page-wrapper {
display: none; display: none;
} }
.message-reaction-row { .message-reaction-row {
grid-template-columns: repeat(auto-fit, minmax(80px, 1fr)); grid-template-columns: repeat(3, minmax(80px, 1fr));
}
@media (min-width: 100px) {
.message-reaction-row {
grid-template-columns: repeat(3, minmax(80px, 1fr));
}
} }
/* src/View/ChatPages/taskPage.css */ /* src/View/ChatPages/taskPage.css */
+20
View File
@@ -1513,6 +1513,7 @@
var ReactionSymbols = /* @__PURE__ */ ((ReactionSymbols2) => { var ReactionSymbols = /* @__PURE__ */ ((ReactionSymbols2) => {
ReactionSymbols2["ThumbsUp"] = "\u{1F44D}"; ReactionSymbols2["ThumbsUp"] = "\u{1F44D}";
ReactionSymbols2["Check"] = "\u2705"; ReactionSymbols2["Check"] = "\u2705";
ReactionSymbols2["Stop"] = "\u{1F6D1}";
ReactionSymbols2["Attention"] = "\u2757\uFE0F"; ReactionSymbols2["Attention"] = "\u2757\uFE0F";
ReactionSymbols2["DoubleAttention"] = "\u203C\uFE0F"; ReactionSymbols2["DoubleAttention"] = "\u203C\uFE0F";
ReactionSymbols2["Question"] = "\u2753"; ReactionSymbols2["Question"] = "\u2753";
@@ -2030,6 +2031,7 @@
); );
this.reactionsThumbsUp = new MapState(); this.reactionsThumbsUp = new MapState();
this.reactionsCheck = new MapState(); this.reactionsCheck = new MapState();
this.reactionsStop = new MapState();
this.reactionsAttention = new MapState(); this.reactionsAttention = new MapState();
this.reactionsDoubleAttention = new MapState(); this.reactionsDoubleAttention = new MapState();
this.reactionsQuestion = new MapState(); this.reactionsQuestion = new MapState();
@@ -2041,6 +2043,10 @@
[this.reactionsCheck], [this.reactionsCheck],
() => this.reactionsCheck.value.size () => this.reactionsCheck.value.size
); );
this.reactionsStopCount = createProxyState(
[this.reactionsStop],
() => this.reactionsStop.value.size
);
this.reactionsAttentionCount = createProxyState( this.reactionsAttentionCount = createProxyState(
[this.reactionsAttention], [this.reactionsAttention],
() => this.reactionsAttention.value.size () => this.reactionsAttention.value.size
@@ -2086,6 +2092,8 @@
return setReaction(this.reactionsThumbsUp); return setReaction(this.reactionsThumbsUp);
case "\u2705" /* Check */: case "\u2705" /* Check */:
return setReaction(this.reactionsCheck); return setReaction(this.reactionsCheck);
case "\u{1F6D1}" /* Stop */:
return setReaction(this.reactionsStop);
case "\u2757\uFE0F" /* Attention */: case "\u2757\uFE0F" /* Attention */:
return setReaction(this.reactionsAttention); return setReaction(this.reactionsAttention);
case "\u203C\uFE0F" /* DoubleAttention */: case "\u203C\uFE0F" /* DoubleAttention */:
@@ -2803,6 +2811,7 @@
// //
thumbsUpReaction: "Reaction: thumbs up", thumbsUpReaction: "Reaction: thumbs up",
checkReaction: "Reaction: check", checkReaction: "Reaction: check",
stopReaction: "Reaction: stop sign",
attentionReaction: "Reaction: exclamation mark", attentionReaction: "Reaction: exclamation mark",
doubleAttentionReaction: "Reaction: double exclamation mark", doubleAttentionReaction: "Reaction: double exclamation mark",
questionReaction: "Reaction: question mark" questionReaction: "Reaction: question mark"
@@ -2990,6 +2999,7 @@
// //
thumbsUpReaction: "Reaktion: Daumen hoch", thumbsUpReaction: "Reaktion: Daumen hoch",
checkReaction: "Reaktion: Haken", checkReaction: "Reaktion: Haken",
stopReaction: "Reaktion: Stopp",
attentionReaction: "Reaktion: Ausrufezeichen", attentionReaction: "Reaktion: Ausrufezeichen",
doubleAttentionReaction: "Reaktion: doppeltes Ausrufezeichen", doubleAttentionReaction: "Reaktion: doppeltes Ausrufezeichen",
questionReaction: "Reaktion: Fragezeichen" questionReaction: "Reaktion: Fragezeichen"
@@ -3167,6 +3177,7 @@
// //
thumbsUpReaction: "Reacci\xF3n: pulgar hacia arriba", thumbsUpReaction: "Reacci\xF3n: pulgar hacia arriba",
checkReaction: "Reacci\xF3n: marca de verificaci\xF3n", checkReaction: "Reacci\xF3n: marca de verificaci\xF3n",
stopReaction: "Reacci\xF3n: signo de parada",
attentionReaction: "Reaccion: signo de atenci\xF3n", attentionReaction: "Reaccion: signo de atenci\xF3n",
doubleAttentionReaction: "Reaccion: signo de atenci\xF3n doble", doubleAttentionReaction: "Reaccion: signo de atenci\xF3n doble",
questionReaction: "Reaccion: signo de interrogaci\xF3n" questionReaction: "Reaccion: signo de interrogaci\xF3n"
@@ -3987,6 +3998,12 @@
reactionState = chatMessageViewModel.reactionsCheck; reactionState = chatMessageViewModel.reactionsCheck;
break; break;
} }
case "\u{1F6D1}" /* Stop */: {
audioLabel = translations.chatPage.message.stopReaction;
count = chatMessageViewModel.reactionsStopCount;
reactionState = chatMessageViewModel.reactionsStop;
break;
}
case "\u2757\uFE0F" /* Attention */: { case "\u2757\uFE0F" /* Attention */: {
audioLabel = translations.chatPage.message.attentionReaction; audioLabel = translations.chatPage.message.attentionReaction;
count = chatMessageViewModel.reactionsAttentionCount; count = chatMessageViewModel.reactionsAttentionCount;
@@ -4032,6 +4049,9 @@
), MessageReactionButton( ), MessageReactionButton(
chatMessageViewModel, chatMessageViewModel,
"\u2705" /* Check */ "\u2705" /* Check */
), MessageReactionButton(
chatMessageViewModel,
"\u{1F6D1}" /* Stop */
), MessageReactionButton( ), MessageReactionButton(
chatMessageViewModel, chatMessageViewModel,
"\u2757\uFE0F" /* Attention */ "\u2757\uFE0F" /* Attention */
+1
View File
@@ -436,6 +436,7 @@ export default class ChatModel {
export enum ReactionSymbols { export enum ReactionSymbols {
ThumbsUp = "👍", ThumbsUp = "👍",
Check = "✅", Check = "✅",
Stop = "🛑",
Attention = "❗️", Attention = "❗️",
DoubleAttention = "‼️", DoubleAttention = "‼️",
Question = "❓", Question = "❓",
+8 -1
View File
@@ -40,6 +40,7 @@
} }
@media (min-width: 700px) { @media (min-width: 700px) {
#message-page #composer .content-width-constraint, #message-page #composer .content-width-constraint,
#message-page #composer .input-width-constraint { #message-page #composer .input-width-constraint {
display: flex; display: flex;
@@ -190,5 +191,11 @@
} }
.message-reaction-row { .message-reaction-row {
grid-template-columns: repeat(auto-fit, minmax(80px, 1fr)); grid-template-columns: repeat(3, minmax(80px, 1fr));
}
@media (min-width: 100px) {
.message-reaction-row {
grid-template-columns: repeat(3, minmax(80px, 1fr));
}
} }
@@ -39,6 +39,12 @@ export function MessageReactionButton(
reactionState = chatMessageViewModel.reactionsCheck; reactionState = chatMessageViewModel.reactionsCheck;
break; break;
} }
case ReactionSymbols.Stop: {
audioLabel = translations.chatPage.message.stopReaction;
count = chatMessageViewModel.reactionsStopCount;
reactionState = chatMessageViewModel.reactionsStop;
break;
}
case ReactionSymbols.Attention: { case ReactionSymbols.Attention: {
audioLabel = translations.chatPage.message.attentionReaction; audioLabel = translations.chatPage.message.attentionReaction;
count = chatMessageViewModel.reactionsAttentionCount; count = chatMessageViewModel.reactionsAttentionCount;
@@ -17,6 +17,10 @@ export function MessageReactionButtonRow(
chatMessageViewModel, chatMessageViewModel,
ReactionSymbols.Check, ReactionSymbols.Check,
)} )}
{MessageReactionButton(
chatMessageViewModel,
ReactionSymbols.Stop,
)}
{MessageReactionButton( {MessageReactionButton(
chatMessageViewModel, chatMessageViewModel,
ReactionSymbols.Attention, ReactionSymbols.Attention,
+3
View File
@@ -191,6 +191,7 @@ const englishTranslations = {
thumbsUpReaction: "Reaction: thumbs up", thumbsUpReaction: "Reaction: thumbs up",
checkReaction: "Reaction: check", checkReaction: "Reaction: check",
stopReaction: "Reaction: stop sign",
attentionReaction: "Reaction: exclamation mark", attentionReaction: "Reaction: exclamation mark",
doubleAttentionReaction: "Reaction: double exclamation mark", doubleAttentionReaction: "Reaction: double exclamation mark",
questionReaction: "Reaction: question mark", questionReaction: "Reaction: question mark",
@@ -462,6 +463,7 @@ const allTranslations: { [language: string]: typeof englishTranslations } = {
thumbsUpReaction: "Reaktion: Daumen hoch", thumbsUpReaction: "Reaktion: Daumen hoch",
checkReaction: "Reaktion: Haken", checkReaction: "Reaktion: Haken",
stopReaction: "Reaktion: Stopp",
attentionReaction: "Reaktion: Ausrufezeichen", attentionReaction: "Reaktion: Ausrufezeichen",
doubleAttentionReaction: "Reaktion: doppeltes Ausrufezeichen", doubleAttentionReaction: "Reaktion: doppeltes Ausrufezeichen",
questionReaction: "Reaktion: Fragezeichen", questionReaction: "Reaktion: Fragezeichen",
@@ -715,6 +717,7 @@ const allTranslations: { [language: string]: typeof englishTranslations } = {
thumbsUpReaction: "Reacción: pulgar hacia arriba", thumbsUpReaction: "Reacción: pulgar hacia arriba",
checkReaction: "Reacción: marca de verificación", checkReaction: "Reacción: marca de verificación",
stopReaction: "Reacción: signo de parada",
attentionReaction: "Reaccion: signo de atención", attentionReaction: "Reaccion: signo de atención",
doubleAttentionReaction: "Reaccion: signo de atención doble", doubleAttentionReaction: "Reaccion: signo de atención doble",
questionReaction: "Reaccion: signo de interrogación", questionReaction: "Reaccion: signo de interrogación",
@@ -27,6 +27,7 @@ export default class ChatMessageViewModel {
reactionsThumbsUp = new React.MapState<ChatMessageReaction>(); reactionsThumbsUp = new React.MapState<ChatMessageReaction>();
reactionsCheck = new React.MapState<ChatMessageReaction>(); reactionsCheck = new React.MapState<ChatMessageReaction>();
reactionsStop = new React.MapState<ChatMessageReaction>();
reactionsAttention = new React.MapState<ChatMessageReaction>(); reactionsAttention = new React.MapState<ChatMessageReaction>();
reactionsDoubleAttention = new React.MapState<ChatMessageReaction>(); reactionsDoubleAttention = new React.MapState<ChatMessageReaction>();
reactionsQuestion = new React.MapState<ChatMessageReaction>(); reactionsQuestion = new React.MapState<ChatMessageReaction>();
@@ -39,6 +40,10 @@ export default class ChatMessageViewModel {
[this.reactionsCheck], [this.reactionsCheck],
() => this.reactionsCheck.value.size, () => this.reactionsCheck.value.size,
); );
reactionsStopCount = React.createProxyState(
[this.reactionsStop],
() => this.reactionsStop.value.size,
);
reactionsAttentionCount = React.createProxyState( reactionsAttentionCount = React.createProxyState(
[this.reactionsAttention], [this.reactionsAttention],
() => this.reactionsAttention.value.size, () => this.reactionsAttention.value.size,
@@ -90,6 +95,8 @@ export default class ChatMessageViewModel {
return setReaction(this.reactionsThumbsUp); return setReaction(this.reactionsThumbsUp);
case ReactionSymbols.Check: case ReactionSymbols.Check:
return setReaction(this.reactionsCheck); return setReaction(this.reactionsCheck);
case ReactionSymbols.Stop:
return setReaction(this.reactionsStop);
case ReactionSymbols.Attention: case ReactionSymbols.Attention:
return setReaction(this.reactionsAttention); return setReaction(this.reactionsAttention);
case ReactionSymbols.DoubleAttention: case ReactionSymbols.DoubleAttention:
+1 -1
View File
@@ -1,7 +1,7 @@
import * as React from "bloatless-react"; import * as React from "bloatless-react";
export default class CoreViewModel { export default class CoreViewModel {
readonly BUILD = "Build 26.04.08.A" readonly BUILD = "Build 26.04.08.B"
// DRAG & DROP // DRAG & DROP
draggedObject: React.State<any> = new React.State<any>(undefined); draggedObject: React.State<any> = new React.State<any>(undefined);