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
}
}