Compose bar gets a 😀 button. Click → emoji-picker-element (the canonical web component, ~140 KB) lazy-loads on first open and stays cached after. Pick → inserts at cursor position, focus returns to input. Click-outside closes the popover. Bonus: emoji-only messages render iMessage-style — no bubble, larger text. Uses Intl.Segmenter to count grapheme clusters so 👨👩👧 reads as 1 not 5 code points. • 1 emoji → text-5xl • 2-3 → text-4xl • 4-6 → text-3xl • 7+ or any letters/digits/punct → normal bubble Bundle: emoji picker chunked separately via dynamic import (38 KB gzipped). Initial Messages-page JS only nudged ~159→162 KB. Native emoji input (macOS ⌃⌘Space, iOS keyboard, Android long-press) still works — the picker is just for discoverability. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
37 lines
948 B
JSON
37 lines
948 B
JSON
{
|
|
"name": "kez-chat-web",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "tsc -b && vite build",
|
|
"preview": "vite preview",
|
|
"check": "svelte-check --tsconfig ./tsconfig.json"
|
|
},
|
|
"dependencies": {
|
|
"@bokuweb/zstd-wasm": "^0.0.22",
|
|
"@noble/curves": "^1.6.0",
|
|
"@noble/hashes": "^1.5.0",
|
|
"@scure/base": "^1.1.9",
|
|
"canonicalize": "^2.0.0",
|
|
"emoji-picker-element": "^1.29.1",
|
|
"idb-keyval": "^6.2.1",
|
|
"nostr-tools": "^2.23.5",
|
|
"svelte-spa-router": "^4.0.1"
|
|
},
|
|
"devDependencies": {
|
|
"@sveltejs/vite-plugin-svelte": "^4.0.0",
|
|
"@tailwindcss/vite": "^4.0.0",
|
|
"@tsconfig/svelte": "^5.0.0",
|
|
"@types/node": "^22.0.0",
|
|
"@vite-pwa/assets-generator": "^1.0.2",
|
|
"svelte": "^5.0.0",
|
|
"svelte-check": "^4.0.0",
|
|
"tailwindcss": "^4.0.0",
|
|
"typescript": "^5.6.0",
|
|
"vite": "^5.4.0",
|
|
"vite-plugin-pwa": "^1.3.0"
|
|
}
|
|
}
|