()
@@ -70,4 +81,10 @@ defineEmits<{
gap: 0.25rem; /* Reduced gap to save space */
flex-shrink: 0;
}
-
\ No newline at end of file
+
+/* Mobile-only for the checked toggle button */
+.input-actions [aria-label="Toggle check on focused message"] { display: none; }
+@media (max-width: 480px) {
+ .input-actions [aria-label="Toggle check on focused message"] { display: inline-flex; }
+}
+
diff --git a/frontend-vue/src/components/chat/MessageInput.vue b/frontend-vue/src/components/chat/MessageInput.vue
index ff1a143..adb4b09 100644
--- a/frontend-vue/src/components/chat/MessageInput.vue
+++ b/frontend-vue/src/components/chat/MessageInput.vue
@@ -17,6 +17,7 @@
@file-upload="$emit('file-upload')"
@camera="$emit('camera')"
@voice="$emit('voice')"
+ @toggle-check="$emit('toggle-check')"
@send="handleSubmit"
/>
@@ -35,6 +36,7 @@ const emit = defineEmits<{
'file-upload': []
'camera': []
'voice': []
+ 'toggle-check': []
}>()
const appStore = useAppStore()
@@ -120,4 +122,4 @@ defineExpose({
border-top-color: #374151;
}
}
-
\ No newline at end of file
+
diff --git a/frontend-vue/src/components/chat/MessageItem.vue b/frontend-vue/src/components/chat/MessageItem.vue
index 5574e19..61cae1b 100644
--- a/frontend-vue/src/components/chat/MessageItem.vue
+++ b/frontend-vue/src/components/chat/MessageItem.vue
@@ -14,6 +14,8 @@
@focus="handleFocus"
>
+ ✔
+ ☐
{{ message.content }}
@@ -23,6 +25,16 @@
+
@@ -329,6 +330,19 @@ const setupKeyboardShortcuts = () => {
})
}
+const handleToggleCheckFocused = async () => {
+ const focused = messagesContainer.value?.getFocusedMessage?.()
+ if (!focused || 'channelId' in focused) return
+ try {
+ const next = (focused as ExtendedMessage).checked !== true
+ appStore.setMessageChecked((focused as ExtendedMessage).id, next)
+ await apiService.setMessageChecked((focused as ExtendedMessage).channel_id, (focused as ExtendedMessage).id, next)
+ toastStore.info(next ? 'Marked as checked' : 'Marked as unchecked')
+ } catch (e) {
+ toastStore.error('Failed to toggle check')
+ }
+}
+
const selectChannel = async (channelId: number) => {
console.log('Selecting channel:', channelId)
await appStore.setCurrentChannel(channelId)
@@ -763,4 +777,4 @@ onMounted(async () => {
color: rgba(255, 255, 255, 0.87);
}
}
-
\ No newline at end of file
+