From cde01c4f00849241e80d29e5ff78f48521213588 Mon Sep 17 00:00:00 2001 From: Sayan Date: Mon, 3 Aug 2026 00:25:01 +0530 Subject: [PATCH 1/5] feat(chat): implement full emoji picker with search and categories (fixes #303) - Replace hardcoded emoji list with emoji-picker-element. - Support native system emojis for smaller bundle size. - Include search, categories, and recently used functionality. - Implement click-outside handler to close the popover. - Improve keyboard accessibility for category tab navigation. --- frontend/package-lock.json | 7 +++ frontend/package.json | 1 + .../private-chat-dialog/chat-reactions.ts | 18 ------- .../private-chat-dialog.component.html | 21 +++----- .../private-chat-dialog.component.scss | 38 +++++--------- .../private-chat-dialog.component.ts | 51 +++++++++++++++++-- 6 files changed, 75 insertions(+), 61 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 401116dc..9d4b9bf7 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -20,6 +20,7 @@ "@stomp/stompjs": "^7.1.1", "@tailwindcss/postcss": "^4.1.10", "dompurify": "^3.4.11", + "emoji-picker-element": "^1.29.1", "marked": "^18.0.6", "ngx-toastr": "^19.1.0", "postcss": "^8.5.6", @@ -8350,6 +8351,12 @@ "dev": true, "license": "ISC" }, + "node_modules/emoji-picker-element": { + "version": "1.29.1", + "resolved": "https://registry.npmjs.org/emoji-picker-element/-/emoji-picker-element-1.29.1.tgz", + "integrity": "sha512-TOiHzu9Dqib3x4MwcAi3wi3RdyT4SoeB4b15AvH1ks4SBwTl7DeebhZ0d3x6dNi4XfNU7IGRZ7NBQllj0RqwrQ==", + "license": "Apache-2.0" + }, "node_modules/emoji-regex": { "version": "10.6.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 22b2594f..81274da4 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -25,6 +25,7 @@ "@stomp/stompjs": "^7.1.1", "@tailwindcss/postcss": "^4.1.10", "dompurify": "^3.4.11", + "emoji-picker-element": "^1.29.1", "marked": "^18.0.6", "ngx-toastr": "^19.1.0", "postcss": "^8.5.6", diff --git a/frontend/src/app/pages/private-chat-dialog/chat-reactions.ts b/frontend/src/app/pages/private-chat-dialog/chat-reactions.ts index 4c263e3a..de86ffbd 100644 --- a/frontend/src/app/pages/private-chat-dialog/chat-reactions.ts +++ b/frontend/src/app/pages/private-chat-dialog/chat-reactions.ts @@ -4,24 +4,6 @@ export interface ChatSticker { src: string; } -export const CHAT_EMOJIS = [ - '😀', - '😂', - '😊', - '😍', - '😎', - '🥳', - '🤔', - '👍', - '🙏', - '🔥', - '✨', - '💙', - '🎉', - '✅', - '👀', - '💡', -]; export const CHAT_STICKERS: ChatSticker[] = [ { diff --git a/frontend/src/app/pages/private-chat-dialog/private-chat-dialog.component.html b/frontend/src/app/pages/private-chat-dialog/private-chat-dialog.component.html index 27998eef..32474e0b 100644 --- a/frontend/src/app/pages/private-chat-dialog/private-chat-dialog.component.html +++ b/frontend/src/app/pages/private-chat-dialog/private-chat-dialog.component.html @@ -202,21 +202,12 @@ *ngIf="isEmojiPickerOpen || isStickerPickerOpen" class="reaction-popover" > -
- -
+ class="light" + (emoji-click)="insertEmoji($event)" + (keydown)="onEmojiPickerKeydown($event)" + >