diff --git a/web/package.json b/web/package.json index e103d8ba..472e225a 100644 --- a/web/package.json +++ b/web/package.json @@ -22,6 +22,7 @@ "clsx": "^2.1.1", "copy-to-clipboard": "^3.3.3", "dayjs": "^1.11.13", + "emoji-regex": "^10.4.0", "fuse.js": "^7.0.0", "highlight.js": "^11.11.1", "i18next": "^24.2.0", diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml index 59760b96..5df3a2d3 100644 --- a/web/pnpm-lock.yaml +++ b/web/pnpm-lock.yaml @@ -47,6 +47,9 @@ importers: dayjs: specifier: ^1.11.13 version: 1.11.13 + emoji-regex: + specifier: ^10.4.0 + version: 10.4.0 fuse.js: specifier: ^7.0.0 version: 7.0.0 @@ -1954,6 +1957,9 @@ packages: electron-to-chromium@1.5.76: resolution: {integrity: sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ==} + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -5386,6 +5392,8 @@ snapshots: electron-to-chromium@1.5.76: {} + emoji-regex@10.4.0: {} + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} diff --git a/web/src/components/HomeSidebar/ShortcutsSection.tsx b/web/src/components/HomeSidebar/ShortcutsSection.tsx index 154f7ba7..f7458dc1 100644 --- a/web/src/components/HomeSidebar/ShortcutsSection.tsx +++ b/web/src/components/HomeSidebar/ShortcutsSection.tsx @@ -1,4 +1,5 @@ import { Dropdown, Menu, MenuButton, MenuItem, Tooltip } from "@mui/joy"; +import EmojiRegex from "emoji-regex"; import { Edit3Icon, MoreVerticalIcon, TrashIcon, PlusIcon } from "lucide-react"; import { observer } from "mobx-react-lite"; import { userServiceClient } from "@/grpcweb"; @@ -11,6 +12,8 @@ import { cn } from "@/utils"; import { useTranslate } from "@/utils/i18n"; import showCreateShortcutDialog from "../CreateShortcutDialog"; +const emojiRegex = EmojiRegex(); + const ShortcutsSection = observer(() => { const t = useTranslate(); const user = useCurrentUser(); @@ -40,16 +43,20 @@ const ShortcutsSection = observer(() => {
{shortcuts.map((shortcut) => { const selected = memoFilterStore.shortcut === shortcut.id; + const maybeEmoji = shortcut.title.split(" ")[0]; + const emoji = emojiRegex.test(maybeEmoji) ? maybeEmoji : undefined; + const title = emoji ? shortcut.title.replace(emoji, "") : shortcut.title; return (
(selected ? memoFilterStore.setShortcut(undefined) : memoFilterStore.setShortcut(shortcut.id))} > - {shortcut.title} + {emoji && {emoji}} + {title.trim()}