feat: refactor emoji search with singleton service, Dexie caching, and keyword-enriched search

Replace hand-rolled ~350-entry emoji list with unicode-emoji-json (~1,900 emojis) and emojilib
keywords for richer search matching. Move EmojiSearchService to a singleton with Dexie-backed
caching for instant availability on startup. Add recency+frequency emoji usage tracking shared
across the emoji picker and editor autocomplete.
This commit is contained in:
Alejandro Gómez
2026-03-31 10:18:38 +02:00
parent 0af86b667e
commit 143fa7b4b6
14 changed files with 632 additions and 530 deletions

16
package-lock.json generated
View File

@@ -57,6 +57,7 @@
"date-fns": "^4.1.0",
"dexie": "^4.2.1",
"dexie-react-hooks": "^4.2.0",
"emojilib": "^4.0.2",
"flexsearch": "^0.8.212",
"framer-motion": "^12.23.26",
"hash-sum": "^2.0.0",
@@ -79,7 +80,8 @@
"shell-quote": "^1.8.3",
"shiki": "^3.20.0",
"sonner": "^2.0.7",
"tailwind-merge": "^2.5.5"
"tailwind-merge": "^2.5.5",
"unicode-emoji-json": "^0.8.0"
},
"devDependencies": {
"@eslint/js": "^9.17.0",
@@ -7596,6 +7598,12 @@
"dev": true,
"license": "MIT"
},
"node_modules/emojilib": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/emojilib/-/emojilib-4.0.2.tgz",
"integrity": "sha512-8sP3sfAi861cNaFFp7RmyKi4S26K34ZKy4si75ojUW627AIVBHhMSu2SFJo3YRoK66YWnbysIbOk/d48uEqtKQ==",
"license": "MIT"
},
"node_modules/enhanced-resolve": {
"version": "5.18.4",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz",
@@ -12406,6 +12414,12 @@
"integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
"license": "MIT"
},
"node_modules/unicode-emoji-json": {
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/unicode-emoji-json/-/unicode-emoji-json-0.8.0.tgz",
"integrity": "sha512-3wDXXvp6YGoKGhS2O2H7+V+bYduOBydN1lnI0uVfr1cIdY02uFFiEH1i3kE5CCE4l6UqbLKVmEFW9USxTAMD1g==",
"license": "MIT"
},
"node_modules/unified": {
"version": "11.0.5",
"resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz",