530 lines
15 KiB
JavaScript
530 lines
15 KiB
JavaScript
/**
|
|
* Suchbegriffe für EmojiIconPicker (kleingeschrieben, DE + ggf. EN).
|
|
* Gruppenüberschriften werden zusätzlich immer indexiert.
|
|
* @type {Record<string, string>}
|
|
*/
|
|
export const EMOJI_KEYWORDS = {
|
|
// —— Rollen / Skates (wichtig für „Inline“, „Rollschuh“) ——
|
|
'🛼':
|
|
'rollschuh rollschuhe inline inliner skaten roller quad rollschlittschuh blade blades rollerblade skates',
|
|
|
|
// —— Sport (typisch DE-Gruppe) ——
|
|
'⚽': 'fußball fussball soccer football',
|
|
'🤾': 'handball',
|
|
'🤾♂️': 'handball mann',
|
|
'🤾♀️': 'handball frau',
|
|
'🥋': 'karate judo ju jitsu jujitsu kampfsport gi anzug martial arts',
|
|
'🏐': 'volleyball beach',
|
|
'🏀': 'basketball',
|
|
'🎾': 'tennis',
|
|
'🏓': 'tischtennis pingpong',
|
|
'🏸': 'badminton federball',
|
|
'🏒': 'eishockey hockey',
|
|
'🏑': 'feldhockey hockey',
|
|
'🥍': 'lacrosse',
|
|
'🏈': 'american football football nfl',
|
|
'🏉': 'rugby',
|
|
'⚾': 'baseball',
|
|
'🥎': 'softball',
|
|
'⛹️': 'basketball person',
|
|
'⛹️♂️': 'basketball mann',
|
|
'⛹️♀️': 'basketball frau',
|
|
'🥅': 'tor goal netz',
|
|
'⛷️': 'ski skifahren skilaufen alpin',
|
|
'🎿': 'ski skier langlauf',
|
|
'🏂': 'snowboard',
|
|
'🛷': 'schlitten rodeln',
|
|
'⛸️': 'eislauf schlittschuh eisbahn kunstlauf',
|
|
'🥌': 'curling',
|
|
'🚴': 'rad fahrrad rennrad cycling',
|
|
'🚴♂️': 'rad fahrrad mann',
|
|
'🚴♀️': 'rad fahrrad frau',
|
|
'🚵': 'mountainbike mtb rad',
|
|
'🚵♂️': 'mountainbike mann',
|
|
'🚵♀️': 'mountainbike frau',
|
|
'🏃': 'laufen joggen jogging marathon laufsport',
|
|
'🏃♂️': 'laufen mann',
|
|
'🏃♀️': 'laufen frau',
|
|
'🏃➡️': 'laufen sprint',
|
|
'🚶': 'gehen spazieren walking',
|
|
'🥾': 'wandern hiking bergsport bergtouren',
|
|
'🏊': 'schwimmen schwimm sport',
|
|
'🏊♂️': 'schwimmen mann',
|
|
'🏊♀️': 'schwimmen frau',
|
|
'🤽': 'wasserball',
|
|
'🤽♂️': 'wasserball mann',
|
|
'🤽♀️': 'wasserball frau',
|
|
'🤿': 'tauchen schnorcheln diving',
|
|
'🏄': 'surfen wellen',
|
|
'🏄♂️': 'surfen mann',
|
|
'🏄♀️': 'surfen frau',
|
|
'🚣': 'rudern boot row',
|
|
'🚣♂️': 'rudern mann',
|
|
'🚣♀️': 'rudern frau',
|
|
'⛵': 'segeln segelboot yacht',
|
|
'🧗': 'klettern bouldern bergsteigen',
|
|
'🧗♂️': 'klettern mann',
|
|
'🧗♀️': 'klettern frau',
|
|
'🏋️': 'krafttraining gewichte fitnessstudio gym hanteln',
|
|
'🏋️♂️': 'krafttraining mann',
|
|
'🏋️♀️': 'krafttraining frau',
|
|
'🤸': 'turnen gymnastics',
|
|
'🤸♂️': 'turnen mann',
|
|
'🤸♀️': 'turnen frau',
|
|
'🥊': 'boxen boxing',
|
|
'🤼': 'ringen wrestling',
|
|
'🤺': 'fechten fencing',
|
|
'🏇': 'reiten pferd reitsport galopp derby',
|
|
'⛳': 'golf golfplatz loch',
|
|
'🏌️': 'golf',
|
|
'🏌️♂️': 'golf mann',
|
|
'🏌️♀️': 'golf frau',
|
|
'💃': 'tanzen tanz salsa tanzsport',
|
|
'🕺': 'tanzen mann disco',
|
|
'🧘': 'yoga pilates meditation entspannung',
|
|
'🧘♂️': 'yoga mann meditation',
|
|
'🧘♀️': 'yoga frau meditation',
|
|
'🛹': 'skateboard longboard street',
|
|
'🎯': 'dart darts schießen treffer zielscheibe',
|
|
'🎳': 'bowling kegeln',
|
|
'🏟️': 'stadion arena',
|
|
'🏆': 'pokal sieg trophy',
|
|
'🥇': 'gold medaille erste platz',
|
|
'🥈': 'silber medaille',
|
|
'🥉': 'bronze medaille',
|
|
|
|
// —— Weitere Sport / Hobby ——
|
|
'🎱': 'billard pool snooker',
|
|
'🎣': 'angeln fishing',
|
|
'🤹': 'jonglieren zirkus',
|
|
'🪁': 'drachen steigen lassen drachen',
|
|
'🥏': 'frisbee ultimate',
|
|
'🛶': 'kanu kayak paddeln',
|
|
'🏹': 'bogenschießen pfeil bogen',
|
|
'🌊': 'welle meer wasser',
|
|
'🏖️': 'strand beach',
|
|
'🛣️': 'straße laufen strecke',
|
|
'🧭': 'kompass navigation orientierung',
|
|
'🏕️': 'camping zelten outdoor',
|
|
'⛺': 'zelt camping',
|
|
|
|
// —— Yoga / Geist ——
|
|
'🪷': 'lotus blume meditation',
|
|
'☯️': 'yin yang',
|
|
'🕉️': 'hindu om meditation',
|
|
'🙏': 'beten danken namaste',
|
|
'🧎': 'knien',
|
|
'🧍': 'stehen',
|
|
'💭': 'gedanke idee',
|
|
'📿': 'gebetskette',
|
|
'🎼': 'noten musik',
|
|
'🎹': 'klavier keyboard piano',
|
|
'🥁': 'schlagzeug trommel',
|
|
'🎸': 'gitarre',
|
|
'🎺': 'trompete blasinstrument',
|
|
'🔔': 'glocke',
|
|
'✨': 'sterne glitzer',
|
|
'🌟': 'stern glanz',
|
|
'💫': 'schwindel meteor',
|
|
'🔮': 'kristallkugel',
|
|
|
|
// —— Outdoor —— (Stichworte zu Bergen/Wetter)
|
|
'⛰️': 'berg berge alpen',
|
|
'🏔️': 'schneeberg gipfel',
|
|
'🗻': 'fuji vulkan berg',
|
|
'🌋': 'vulkan lava',
|
|
'🗺️': 'karte landkarte',
|
|
'🌲': 'wald tannenbaum',
|
|
'🌳': 'baum baumpark',
|
|
'🌴': 'palme urlaub',
|
|
'🍃': 'blatt grün frühling',
|
|
'🍂': 'herbst blatt',
|
|
'🌿': 'kraut pflanze',
|
|
'☘️': 'klee glück',
|
|
'🪨': 'stein fels',
|
|
'🏞️': 'nationalpark natur',
|
|
'🏜️': 'wüste',
|
|
'🌅': 'sonnenaufgang morgenrot',
|
|
'🌄': 'sonne berg horizont',
|
|
'🌈': 'regenbogen',
|
|
'⛅': 'wolke wetter',
|
|
'🌤️': 'sonne wolke',
|
|
'☀️': 'sonne sonnenschein',
|
|
'🌙': 'mond nacht',
|
|
'⭐': 'stern',
|
|
'🌠': 'sternschnuppe',
|
|
'❄️': 'schnee winter frost',
|
|
'☃️': 'schneemann',
|
|
'⛄': 'schneemann kalt',
|
|
|
|
// —— Körper / Medizin ——
|
|
'💪': 'muskel kraft arm bizeps fit',
|
|
'🦾': 'prothese arm roboter',
|
|
'🦵': 'bein knie',
|
|
'🦶': 'fuß zehen',
|
|
'🖐️': 'hand fünf',
|
|
'✋': 'hand stop',
|
|
'👣': 'fußspuren laufen',
|
|
'❤️': 'herz liebe health',
|
|
'🩷': 'herz pink',
|
|
'💙': 'herz blau',
|
|
'💚': 'herz grün vegan gesund',
|
|
'🫀': 'herz organ anatomie',
|
|
'🫁': 'lunge atem',
|
|
'🧠': 'gehirn denken kognition',
|
|
'👁️': 'auge sehen',
|
|
'👂': 'ohr hören',
|
|
'🦷': 'zahn zahnarzt',
|
|
'🦴': 'knochen skelett',
|
|
'🧬': 'dna genetik',
|
|
'⚕️': 'medizin asclepius arzt',
|
|
'🩺': 'stethoskop arzt',
|
|
'🩹': 'pflaster verband',
|
|
'🩼': 'krücke verletzt',
|
|
'💊': 'tablette medikament',
|
|
'🌡️': 'fieberthermometer temperatur',
|
|
'🔬': 'mikroskop labor',
|
|
'🧪': 'reagenzglas chemie',
|
|
'🧫': 'petrischale',
|
|
'♿': 'rollstuhl barrierefrei',
|
|
'⚖️': 'waage gerechtigkeit gewicht',
|
|
'📏': 'lineal messen',
|
|
'📐': 'winkel geometrie',
|
|
|
|
// —— Ernährung (Auswahl häufige Begriffe) ——
|
|
'🍎': 'apfel apple obst',
|
|
'🍐': 'birne pear',
|
|
'🍊': 'orange mandarine zitrus',
|
|
'🍋': 'zitrone lemon',
|
|
'🍌': 'banane banana',
|
|
'🍉': 'wassermelone melone',
|
|
'🍇': 'trauben weintrauben',
|
|
'🍓': 'erdbeere',
|
|
'🫐': 'heidelbeeren blaubeeren',
|
|
'🍒': 'kirschen',
|
|
'🍑': 'pfirsich',
|
|
'🥭': 'mango',
|
|
'🍍': 'ananas',
|
|
'🥝': 'kiwi',
|
|
'🍅': 'tomate',
|
|
'🥑': 'avocado',
|
|
'🥦': 'brokkoli',
|
|
'🥬': 'salat blattspinat',
|
|
'🥒': 'gurke',
|
|
'🌶️': 'chili scharf peperoni',
|
|
'🫑': 'paprika',
|
|
'🌽': 'mais',
|
|
'🥕': 'möhre karotte',
|
|
'🫒': 'olive',
|
|
'🧄': 'knoblauch',
|
|
'🧅': 'zwiebel',
|
|
'🥔': 'kartoffel',
|
|
'🍠': 'süßkartoffel',
|
|
'🥐': 'croissant frühstück',
|
|
'🍞': 'brot toast',
|
|
'🥖': 'baguette',
|
|
'🥨': 'breze brezel',
|
|
'🧀': 'käse',
|
|
'🥚': 'ei eier',
|
|
'🍳': 'braten pfanne frühstück',
|
|
'🧈': 'butter',
|
|
'🥞': 'pfannkuchen pancakes',
|
|
'🧇': 'waffel waffle',
|
|
'🥓': 'speck bacon',
|
|
'🥩': 'steak fleisch',
|
|
'🍗': 'hähnchenkeule geflügel',
|
|
'🍖': 'fleisch knochen',
|
|
'🌭': 'hotdog wurst',
|
|
'🍔': 'burger hamburger',
|
|
'🍟': 'pommes fritten',
|
|
'🍕': 'pizza',
|
|
'🫓': 'fladenbrot naan',
|
|
'🥙': 'döner wrap',
|
|
'🌮': 'taco',
|
|
'🌯': 'burrito',
|
|
'🥗': 'salat bowl',
|
|
'🍝': 'pasta spaghetti',
|
|
'🍜': 'suppe nudeln ramen',
|
|
'🍲': 'eintopf topf',
|
|
'🍛': 'curry reis',
|
|
'🍣': 'sushi',
|
|
'🍱': 'bento lunchbox',
|
|
'🥟': 'dumpling gyoza',
|
|
'🦪': 'austern',
|
|
'🍤': 'garnelen tempura',
|
|
'🍙': 'onigiri reisbällchen',
|
|
'🍚': 'reis bowl',
|
|
'🍘': 'reiscracker',
|
|
'🍥': 'narutomaki fischkuchen',
|
|
'🥠': 'glückskeks',
|
|
'🥮': 'mondkuchen',
|
|
'🍢': 'oden spieß',
|
|
'🍡': 'dango',
|
|
'🍧': 'wassereis shaved ice',
|
|
'🍨': 'eiscreme',
|
|
'🍦': 'softeis eis',
|
|
'🥧': 'kuchen tarte pie',
|
|
'🧁': 'cupcake muffin',
|
|
'🍰': 'torte kuchen slice',
|
|
'🎂': 'geburtstag torte',
|
|
'🍮': 'pudding dessert',
|
|
'🍭': 'lutscher lolly',
|
|
'🍬': 'bonbon süßigkeit',
|
|
'🍫': 'schokolade riegel',
|
|
'🍿': 'popcorn kino',
|
|
'🍩': 'donut',
|
|
'🍪': 'keks cookie',
|
|
'🌰': 'kastanie',
|
|
'🥜': 'erdnuss nüsse',
|
|
'🍯': 'honig',
|
|
'🥛': 'milch',
|
|
'🍼': 'baby flasche',
|
|
'🫖': 'teekanne tee',
|
|
'☕': 'kaffee espresso',
|
|
'🍵': 'matcha tee grüntee',
|
|
'🧃': 'saft packung',
|
|
'🥤': 'becher strohhalm',
|
|
'🧋': 'bubble tea boba',
|
|
'🍶': 'sake',
|
|
'🍺': 'bier krug',
|
|
'🍻': 'anstoßen bier',
|
|
'🥂': 'sekt champagner anstoßen',
|
|
'🍷': 'wein glas',
|
|
'🥃': 'whiskey tumbler',
|
|
'🍸': 'cocktail martini',
|
|
'🍹': 'cocktail drink',
|
|
'🧉': 'mate',
|
|
'🍾': 'sekt flasche party',
|
|
'💧': 'wasser trinken hydrieren',
|
|
'🧊': 'eiswürfel kalt',
|
|
|
|
// —— Schlaf ——
|
|
'😴': 'schlafen müde schlaf',
|
|
'🛌': 'bett schlafen',
|
|
'🛏️': 'bett',
|
|
'💤': 'zzz schnarchen',
|
|
'🌛': 'mond halbmond',
|
|
'🌜': 'mond mondgesicht',
|
|
'💆': 'massage wellness',
|
|
'🧴': 'lotion cream',
|
|
'🛁': 'badewanne bad',
|
|
'🚿': 'dusche',
|
|
'🪥': 'zahnbürste hygiene',
|
|
'🩴': 'badelatschen flipflop',
|
|
'🕯️': 'kerze ruhe',
|
|
|
|
// —— Smileys ——
|
|
'😊': 'lächeln glücklich',
|
|
'🙂': 'leichtes lächeln',
|
|
'😌': 'zufrieden erleichtert',
|
|
'😎': 'cool sonnenbrille',
|
|
'🤩': 'star augen begeistert',
|
|
'🥳': 'party hut feier',
|
|
'😤': 'stolz triumphiert',
|
|
'💯': 'hundert prozent perfekt',
|
|
'🙌': 'jubel hände',
|
|
'👏': 'applaus klatschen',
|
|
'🤝': 'handschlag deal',
|
|
'👍': 'daumen hoch gut',
|
|
'👎': 'daumen runter schlecht',
|
|
'✊': 'faust solidarität',
|
|
'🤛': 'faust links',
|
|
'🤜': 'faust rechts',
|
|
'😅': 'schweiß awkward',
|
|
'🤔': 'nachdenken frage',
|
|
'🧐': 'monokel prüfen',
|
|
'😇': 'heilig engel',
|
|
|
|
// —— Tiere (Stichworte) ——
|
|
'🐶': 'hund dog',
|
|
'🐱': 'katze cat',
|
|
'🐭': 'maus mouse',
|
|
'🐹': 'hamster',
|
|
'🐰': 'hase kaninchen',
|
|
'🦊': 'fuchs',
|
|
'🐻': 'bär',
|
|
'🐼': 'panda',
|
|
'🐨': 'koala',
|
|
'🐯': 'tiger',
|
|
'🦁': 'löwe',
|
|
'🐮': 'kuh rind',
|
|
'🐷': 'schwein',
|
|
'🐸': 'frosch',
|
|
'🐵': 'affe',
|
|
'🐔': 'huhn',
|
|
'🐧': 'pinguin',
|
|
'🐦': 'vogel',
|
|
'🐤': 'küken',
|
|
'🦆': 'ente',
|
|
'🦅': 'adler',
|
|
'🦉': 'eule',
|
|
'🦇': 'fledermaus',
|
|
'🐺': 'wolf',
|
|
'🐗': 'wildschwein keiler',
|
|
'🐴': 'pferd pony',
|
|
'🦄': 'einhorn',
|
|
'🐝': 'biene',
|
|
'🐛': 'raupe',
|
|
'🦋': 'schmetterling',
|
|
'🐌': 'schnecke',
|
|
'🐞': 'marienkäfer',
|
|
'🐜': 'ameise',
|
|
'🦗': 'grille',
|
|
'🕷️': 'spinne',
|
|
'🦂': 'skorpion',
|
|
'🐢': 'schildkröte',
|
|
'🐍': 'schlange',
|
|
'🦎': 'eidechse',
|
|
'🦖': 't-rex dinosaurier',
|
|
'🦕': 'dino langhals',
|
|
'🐙': 'oktopus krake',
|
|
'🦑': 'tintenfisch',
|
|
'🦐': 'garnele',
|
|
'🦞': 'hummer',
|
|
'🐠': 'tropenfisch',
|
|
'🐟': 'fisch',
|
|
'🐬': 'delfin',
|
|
'🐳': 'wal bläst',
|
|
'🐋': 'wal',
|
|
'🦈': 'hai',
|
|
'🐊': 'krokodil alligator',
|
|
|
|
// —— Symbole ——
|
|
'📊': 'diagramm balken statistik',
|
|
'📈': 'chart steigend trend',
|
|
'📉': 'chart fallend',
|
|
'🧮': 'abacus rechenbrett',
|
|
'📋': 'clipboard checkliste',
|
|
'📌': 'pin pinnwand',
|
|
'📍': 'ort marker standort',
|
|
'🔖': 'lesezeichen bookmark',
|
|
'🏷️': 'etikett label',
|
|
'✏️': 'bleistift schreiben',
|
|
'✒️': 'feder',
|
|
'🖊️': 'kugelschreiber',
|
|
'📎': 'büroklammer',
|
|
'🔗': 'link verknüpfung',
|
|
'⛓️': 'kette',
|
|
'🔒': 'schloss zu sicherheit',
|
|
'🔓': 'schloss offen',
|
|
'🔑': 'schlüssel',
|
|
'🗝️': 'altschlüssel',
|
|
'🔨': 'hammer',
|
|
'🛠️': 'werkzeug',
|
|
'⚙️': 'zahnrad einstellungen',
|
|
'🧰': 'werkzeugkasten',
|
|
'💡': 'idee glühbirne lampe',
|
|
'🔦': 'taschenlampe',
|
|
'🏮': 'laterne',
|
|
'🪔': 'öllampe diwali',
|
|
'📣': 'megaphone megafon',
|
|
'📢': 'lautsprecher',
|
|
'🔔': 'benachrichtigung glocke',
|
|
'🔕': 'lautlos stumm',
|
|
'⏱️': 'stoppuhr zeit',
|
|
'⏰': 'wecker uhr',
|
|
'🕐': 'uhr eins zeit',
|
|
'📅': 'kalender datum',
|
|
'🗓️': 'kalender spiral',
|
|
'✅': 'häkchen erledigt ok',
|
|
'☑️': 'box angehakt',
|
|
'✔️': 'check mark',
|
|
'❌': 'kreuz nein fehler',
|
|
'⭕': 'kreis groß',
|
|
'❗': 'ausrufezeichen wichtig',
|
|
'❓': 'fragezeichen',
|
|
'💬': 'sprechblase chat',
|
|
'🗨️': 'sprechblase links',
|
|
'📝': 'memo notizen',
|
|
'📖': 'buch lesen',
|
|
'🪄': 'zauberstab magie',
|
|
'🎪': 'zirkus zelt',
|
|
'🎭': 'theater masken',
|
|
'🎬': 'film klappe',
|
|
'🎨': 'palette malen kunst',
|
|
'🖼️': 'bild rahmen',
|
|
'🧩': 'puzzle teil',
|
|
'♟️': 'schach bauer',
|
|
'🎲': 'würfel zufall spiel',
|
|
'🧸': 'teddy bär spielzeug',
|
|
|
|
// —— Fahrzeuge ——
|
|
'🚗': 'auto pkw',
|
|
'🚕': 'taxi',
|
|
'🚙': 'suv geländewagen',
|
|
'🚌': 'bus',
|
|
'🚎': 'oberleitungsbus trolley',
|
|
'🏎️': 'rennwagen formel',
|
|
'🚓': 'polizei streifenwagen',
|
|
'🚑': 'krankenwagen rettung',
|
|
'🚒': 'feuerwehr',
|
|
'🚐': 'kleinbus',
|
|
'🛻': 'pickup',
|
|
'🚚': 'lkw lieferwagen',
|
|
'🚛': 'sattelzug',
|
|
'🚜': 'traktor',
|
|
'🛵': 'roller motorroller',
|
|
'🏍️': 'motorrad',
|
|
'🛺': 'rikscha',
|
|
'🚲': 'fahrrad',
|
|
'🛴': 'tretroller scooter',
|
|
'🚁': 'helikopter hubschrauber',
|
|
'✈️': 'flugzeug',
|
|
'🛫': 'abflug',
|
|
'🛬': 'landung',
|
|
'🪂': 'fallschirm parachute',
|
|
'🚀': 'rakete startup',
|
|
'🛶': 'boot kanu',
|
|
'🚤': 'speedboot',
|
|
'🛥️': 'motorboot',
|
|
'🛳️': 'kreuzfahrtschiff',
|
|
'⛴️': 'fähre ferry',
|
|
'🚢': 'frachtschiff',
|
|
'⚓': 'anker hafen',
|
|
'🗼': 'turm fernsehturm'
|
|
}
|
|
|
|
/**
|
|
* @param {string} groupLabel
|
|
*/
|
|
export function slugifyGroupLabel(groupLabel) {
|
|
return groupLabel
|
|
.toLowerCase()
|
|
.normalize('NFD')
|
|
.replace(/[\u0300-\u036f]/g, '')
|
|
.replace(/[()]/g, ' ')
|
|
.replace(/[^\p{L}\p{N}]+/gu, ' ')
|
|
.replace(/\s+/g, ' ')
|
|
.trim()
|
|
}
|
|
|
|
/**
|
|
* @param {string} emoji
|
|
* @param {string} groupLabel
|
|
*/
|
|
export function haystackForEmoji(emoji, groupLabel) {
|
|
const extra = EMOJI_KEYWORDS[emoji] || ''
|
|
const slug = slugifyGroupLabel(groupLabel)
|
|
return `${extra} ${slug}`.replace(/\s+/g, ' ').trim()
|
|
}
|
|
|
|
/**
|
|
* Alle Such-Tokens müssen im Haystack vorkommen (UND).
|
|
* @param {string} haystack
|
|
* @param {string} query
|
|
*/
|
|
export function matchesEmojiSearch(haystack, query) {
|
|
const q = query.trim().toLowerCase()
|
|
if (!q) return true
|
|
const norm = haystack
|
|
.toLowerCase()
|
|
.normalize('NFD')
|
|
.replace(/[\u0300-\u036f]/g, '')
|
|
const tokens = q
|
|
.normalize('NFD')
|
|
.replace(/[\u0300-\u036f]/g, '')
|
|
.split(/\s+/)
|
|
.filter(Boolean)
|
|
return tokens.every((t) => norm.includes(t))
|
|
}
|