globalThis.Wegwichtel ??= {}; (function (ns) { 'use strict'; const entries = Object.freeze([ ['🪵', "group-symbols.holz"], ['🪨', "group-symbols.felsen"], ['🏮', "group-symbols.laterne"], ['🌼', "group-symbols.blume"], ['🚬', "group-symbols.pfeife"], ['🐦', "group-symbols.vogel"], ['🍄', "group-symbols.pilz"], ['🍓', "group-symbols.erdbeere"], ['🎃', "group-symbols.kurbis"] ].map(([unicode, labelKey]) => Object.freeze({ unicode, get label() { return ns.I18n.t(labelKey); }, imageUrl: `/images/group-symbols/${unicode}.png` }))); // Presentation selectors must not create different symbols for the same object. function normalizeUnicode(value) { if (typeof value !== 'string') return null; return value.normalize('NFC').replaceAll(/[\uFE0E\uFE0F]/g, ''); } const byUnicode = new Map(entries.map(entry => [normalizeUnicode(entry.unicode), entry])); /** * Read-only catalogue of the nine group-code motifs. * Loading this file only registers the class; it does not create UI or sessions. */ class GroupSymbols { static list() { return entries; } /** Returns the immutable motif descriptor, or null for an unknown symbol. */ static get(unicode) { return byUnicode.get(normalizeUnicode(unicode)) ?? null; } static has(unicode) { return this.get(unicode) !== null; } static imageUrl(unicode) { return this.get(unicode)?.imageUrl ?? null; } } ns.GroupSymbols = GroupSymbols; }(globalThis.Wegwichtel));