React to a friend's current song or any of their recent plays: tap an emoji to add yours (or take it back), "☺+" for the quick six, and a full picker with search and categories (Unicode emoji up to 13.1, generated into the shared package so web and mobile match). One reaction per person per play; a new one replaces the old. Chips show counts and, on hover/ long label, who reacted; yours is highlighted. Listeners and followers get the update live. Not on your own plays, not across a block (blocking also clears reactions between the two people). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MzFywujuH9TiuXbr9vjoX8
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
// Regenerates src/emojiData.ts from the Unicode emoji list (npm: unicode-emoji-json).
|
||||
// node scripts/gen-emoji.mjs
|
||||
// Capped at Emoji 13.1 so every emoji in the picker renders on older Android phones.
|
||||
import { readFileSync, writeFileSync } from 'node:fs';
|
||||
import { createRequire } from 'node:module';
|
||||
|
||||
const require = createRequire(import.meta.url);
|
||||
const groups = require('unicode-emoji-json/data-by-group.json');
|
||||
const MAX_VERSION = 13.1;
|
||||
const SKIP = new Set(['component']); // skin tone swatches etc.
|
||||
|
||||
const out = groups
|
||||
.filter((g) => !SKIP.has(g.slug))
|
||||
.map((g) => ({
|
||||
name: g.name.replace(' & ', ' and '),
|
||||
// "emoji name" pairs, space-separated words; one string per emoji keeps the file small.
|
||||
emojis: g.emojis.filter((e) => Number.parseFloat(e.emoji_version) <= MAX_VERSION).map((e) => `${e.emoji} ${e.name}`),
|
||||
}));
|
||||
|
||||
const header = `// Generated by scripts/gen-emoji.mjs from unicode-emoji-json (MIT). Don't edit by hand.\n`;
|
||||
writeFileSync(
|
||||
new URL('../src/emojiData.ts', import.meta.url),
|
||||
`${header}export const EMOJI_GROUPS: { name: string; emojis: string[] }[] = ${JSON.stringify(out)};\n`,
|
||||
);
|
||||
const count = out.reduce((n, g) => n + g.emojis.length, 0);
|
||||
console.log(`wrote ${count} emoji in ${out.length} groups (${readFileSync(new URL('../src/emojiData.ts', import.meta.url)).length} bytes)`);
|
||||
Reference in New Issue
Block a user