From 7b2a204b8e4cb4e5b9ca0ff3ae784f5e549fc783 Mon Sep 17 00:00:00 2001 From: DevelopingTom Date: Fri, 18 Jul 2025 19:46:30 +0200 Subject: [PATCH] Add close button to emoji table (#1479) ## Description: Add a close button for the Emoji table, and switch the modal to TailWind. image https://github.com/user-attachments/assets/999baf1b-1cdb-409c-a1f0-12d8298dc638 ## Please complete the following: - [x] I have added screenshots for all UI updates - [x] I process any text displayed to the user through translateText() and I've added it to the en.json file - [x] I have added relevant tests to the test directory - [x] I confirm I have thoroughly tested these changes and take full responsibility for any bugs introduced - [x] I have read and accepted the CLA aggreement (only required once). ## Please put your Discord username so you can be contacted if a bug or regression is found: IngloriousTom --- src/client/LanguageModal.ts | 2 +- src/client/components/baseComponents/Modal.ts | 2 +- src/client/graphics/GameRenderer.ts | 8 +- src/client/graphics/layers/EmojiTable.ts | 151 ++++++------------ 4 files changed, 56 insertions(+), 107 deletions(-) diff --git a/src/client/LanguageModal.ts b/src/client/LanguageModal.ts index 3a03b2c93..6cd95224f 100644 --- a/src/client/LanguageModal.ts +++ b/src/client/LanguageModal.ts @@ -162,7 +162,7 @@ export class LanguageModal extends LitElement {
${translateText("select_lang.title")} -
X
+
diff --git a/src/client/components/baseComponents/Modal.ts b/src/client/components/baseComponents/Modal.ts index 16d420c6e..af7c37440 100644 --- a/src/client/components/baseComponents/Modal.ts +++ b/src/client/components/baseComponents/Modal.ts @@ -79,7 +79,7 @@ export class OModal extends LitElement { ${`${this.translationKey}` === "" ? `${this.title}` : `${translateText(this.translationKey)}`} -
X
+
diff --git a/src/client/graphics/GameRenderer.ts b/src/client/graphics/GameRenderer.ts index ffe5d2ccd..16d8e0285 100644 --- a/src/client/graphics/GameRenderer.ts +++ b/src/client/graphics/GameRenderer.ts @@ -74,8 +74,8 @@ export function createRenderer( buildMenu.transformHandler = transformHandler; const leaderboard = document.querySelector("leader-board") as Leaderboard; - if (!emojiTable || !(leaderboard instanceof Leaderboard)) { - console.error("EmojiTable element not found in the DOM"); + if (!leaderboard || !(leaderboard instanceof Leaderboard)) { + console.error("LeaderBoard element not found in the DOM"); } leaderboard.eventBus = eventBus; leaderboard.game = game; @@ -89,8 +89,8 @@ export function createRenderer( gameLeftSidebar.game = game; const teamStats = document.querySelector("team-stats") as TeamStats; - if (!emojiTable || !(teamStats instanceof TeamStats)) { - console.error("EmojiTable element not found in the DOM"); + if (!teamStats || !(teamStats instanceof TeamStats)) { + console.error("TeamStats element not found in the DOM"); } teamStats.eventBus = eventBus; teamStats.game = game; diff --git a/src/client/graphics/layers/EmojiTable.ts b/src/client/graphics/layers/EmojiTable.ts index 938340672..0236d33fd 100644 --- a/src/client/graphics/layers/EmojiTable.ts +++ b/src/client/graphics/layers/EmojiTable.ts @@ -1,4 +1,4 @@ -import { LitElement, css, html } from "lit"; +import { LitElement, html } from "lit"; import { customElement, state } from "lit/decorators.js"; import { EventBus } from "../../../core/EventBus"; import { AllPlayers } from "../../../core/game/Game"; @@ -11,91 +11,14 @@ import { TransformHandler } from "../TransformHandler"; @customElement("emoji-table") export class EmojiTable extends LitElement { + @state() public isVisible = false; public eventBus: EventBus; public transformHandler: TransformHandler; public game: GameView; - static styles = css` - :host { - display: block; - } - .emoji-table { - position: fixed; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - z-index: 9999; - background-color: #1e1e1e; - padding: 15px; - box-shadow: 0 0 20px rgba(0, 0, 0, 0.5); - border-radius: 10px; - display: flex; - flex-direction: column; - align-items: center; - max-width: 95vw; - max-height: 95vh; - overflow-y: auto; - } - .emoji-row { - display: flex; - justify-content: center; - width: 100%; - } - .emoji-button { - font-size: 60px; - width: 80px; - height: 80px; - border: 1px solid #333; - background-color: #2c2c2c; - color: white; - border-radius: 12px; - cursor: pointer; - transition: all 0.3s ease; - display: flex; - justify-content: center; - align-items: center; - margin: 8px; - } - .emoji-button:hover { - background-color: #3a3a3a; - transform: scale(1.1); - } - .emoji-button:active { - background-color: #4a4a4a; - transform: scale(0.95); - } - .hidden { - display: none !important; - } - - @media (max-width: 600px) { - .emoji-button { - font-size: 32px; - /* Slightly smaller font size for mobile */ - width: 60px; - /* Smaller width for mobile */ - height: 60px; - /* Smaller height for mobile */ - margin: 5px; - /* Smaller margin for mobile */ - } - } - - @media (max-width: 400px) { - .emoji-button { - font-size: 28px; - width: 50px; - height: 50px; - margin: 3px; - } - } - `; - - @state() - private _hidden = true; - initEventBus() { this.eventBus.on(ShowEmojiMenuEvent, (e) => { + this.isVisible = true; const cell = this.transformHandler.screenToWorldCoordinates(e.x, e.y); if (!this.game.isValidCoord(cell.x, cell.y)) { return; @@ -131,40 +54,66 @@ export class EmojiTable extends LitElement { private onEmojiClicked: (emoji: string) => void = () => {}; render() { + if (!this.isVisible) { + return null; + } + return html` -
- ${emojiTable.map( - (row) => html` -
- ${row.map( - (emoji) => html` - - `, - )} -
- `, - )} +
e.preventDefault()} + @wheel=${(e) => e.stopPropagation()} + > + + +
+ ${emojiTable.map( + (row) => html` +
+ ${row.map( + (emoji) => html` + + `, + )} +
+ `, + )} +
`; } hideTable() { - this._hidden = true; + this.isVisible = false; this.requestUpdate(); } showTable(oneEmojiClicked: (emoji: string) => void) { this.onEmojiClicked = oneEmojiClicked; - this._hidden = false; + this.isVisible = true; this.requestUpdate(); } - get isVisible() { - return !this._hidden; + createRenderRoot() { + return this; // Disable shadow DOM to allow Tailwind styles } }