diff --git a/dist/index.css b/dist/index.css index 228c60d7..77c0c256 100644 --- a/dist/index.css +++ b/dist/index.css @@ -344,6 +344,13 @@ main { } #message-page #composer { border-top: 1px solid var(--border); + display: flex; +} +#message-page #composer input { + margin: 0px; + width: 100%; + max-width: unset; + flex: 1; } /* src/View/Components/chatEntry.css */ diff --git a/dist/index.js b/dist/index.js index daac9c25..fb959592 100644 --- a/dist/index.js +++ b/dist/index.js @@ -738,8 +738,8 @@ () => this.encryptionKeyInput.value == this.chatModel.info.encryptionKey ); this.cannotSendMessage = createProxyState( - [this.settingsViewModel.username], - () => this.settingsViewModel.username.value == "" + [this.settingsViewModel.username, this.composingMessage], + () => this.settingsViewModel.username.value == "" || this.composingMessage.value == "" ); this.color.value = chatModel.color; this.restoreSecondaryChannels(); @@ -835,11 +835,6 @@ ); } - // src/View/ChatPages/messagePage.tsx - function MessagePage(chatViewModel) { - return /* @__PURE__ */ createElement("div", { id: "message-page" }, /* @__PURE__ */ createElement("div", { class: "toolbar" }, /* @__PURE__ */ createElement("span", { "subscribe:innerText": chatViewModel.primaryChannel })), /* @__PURE__ */ createElement("div", { class: "content" }, /* @__PURE__ */ createElement("div", { id: "message-container" }), /* @__PURE__ */ createElement("div", { id: "composer" }))); - } - // src/View/translations.ts var englishTranslations = { general: { @@ -914,6 +909,10 @@ setEncryptionKeyButtonAudioLabel: "set encryption key", showEncryptionKey: "Show encryption key", deleteChatButton: "Delete entire chat" + }, + message: { + composerInputPlaceholder: "Type a message...", + sendMessageButtonAudioLabel: "send message" } } }; @@ -923,6 +922,27 @@ var language = navigator.language.substring(0, 2); var translations = allTranslations[language] || allTranslations.en; + // src/View/ChatPages/messagePage.tsx + function MessagePage(chatViewModel) { + return /* @__PURE__ */ createElement("div", { id: "message-page" }, /* @__PURE__ */ createElement("div", { class: "toolbar" }, /* @__PURE__ */ createElement("span", { "subscribe:innerText": chatViewModel.primaryChannel })), /* @__PURE__ */ createElement("div", { class: "content" }, /* @__PURE__ */ createElement("div", { id: "message-container" }), /* @__PURE__ */ createElement("div", { id: "composer" }, /* @__PURE__ */ createElement( + "input", + { + "bind:value": chatViewModel.composingMessage, + "on:enter": chatViewModel.sendMessage, + placeholder: translations.chatPage.message.composerInputPlaceholder + } + ), /* @__PURE__ */ createElement( + "button", + { + class: "primary", + "aria-label": translations.chatPage.message.sendMessageButtonAudioLabel, + "on:click": chatViewModel.sendMessage, + "toggle:disabled": chatViewModel.cannotSendMessage + }, + /* @__PURE__ */ createElement("span", { class: "icon" }, "send") + )))); + } + // src/View/Components/deletableListItem.tsx function DeletableListItem(text, primaryButton, ondelete) { return /* @__PURE__ */ createElement("div", { class: "tile flex-row justify-apart align-center padding-0" }, /* @__PURE__ */ createElement("span", { class: "padding-h" }, text), /* @__PURE__ */ createElement("div", { class: "flex-row justify-end" }, primaryButton, /* @__PURE__ */ createElement( diff --git a/src/View/ChatPages/messagePage.css b/src/View/ChatPages/messagePage.css index 69d213ff..e7314909 100644 --- a/src/View/ChatPages/messagePage.css +++ b/src/View/ChatPages/messagePage.css @@ -15,4 +15,15 @@ /* composer */ #message-page #composer { border-top: 1px solid var(--border); + + display: flex; +} + +#message-page #composer input { + margin: 0px; + + width: 100%; + max-width: unset; + + flex: 1; } \ No newline at end of file diff --git a/src/View/ChatPages/messagePage.tsx b/src/View/ChatPages/messagePage.tsx index 8a5fa7f5..a7bed643 100644 --- a/src/View/ChatPages/messagePage.tsx +++ b/src/View/ChatPages/messagePage.tsx @@ -3,6 +3,7 @@ import "./messagePage.css"; import * as React from "bloatless-react"; import ChatViewModel from "../../ViewModel/chatViewModel"; +import { translations } from "../translations"; export function MessagePage(chatViewModel: ChatViewModel) { return ( @@ -12,7 +13,23 @@ export function MessagePage(chatViewModel: ChatViewModel) {
-
+
+ + +
); diff --git a/src/View/translations.ts b/src/View/translations.ts index fab0f977..86b45387 100644 --- a/src/View/translations.ts +++ b/src/View/translations.ts @@ -98,6 +98,11 @@ const englishTranslations = { deleteChatButton: "Delete entire chat", }, + + message: { + composerInputPlaceholder: "Type a message...", + sendMessageButtonAudioLabel: "send message", + } }, }; diff --git a/src/ViewModel/chatViewModel.tsx b/src/ViewModel/chatViewModel.tsx index 0ea854e6..df41570a 100644 --- a/src/ViewModel/chatViewModel.tsx +++ b/src/ViewModel/chatViewModel.tsx @@ -155,8 +155,10 @@ export default class ChatViewModel { ); this.cannotSendMessage = React.createProxyState( - [this.settingsViewModel.username], - () => this.settingsViewModel.username.value == "" + [this.settingsViewModel.username, this.composingMessage], + () => + this.settingsViewModel.username.value == "" || + this.composingMessage.value == "" ); this.color.value = chatModel.color;