// String-only registry of launcher tile icon and tint names. Living // under `src/shared/` so the Worker can validate values without pulling // lucide-react into the Worker bundle; the client maps these names to // Lucide components in `src/client/lib/launcher-icons.ts`. // // Order is meaningful for the admin picker: suite-relevant icons first, // then grouped by category. export const LAUNCHER_ICON_NAMES = [ // Tools "Hammer", "Wrench", // Source control "GitBranch", // Cloud / network "Cloud", "Globe", "Network", // Data "Database", "Server", // Dev "Terminal", "Code", "Braces", // Writing "BookOpen", "Pilcrow", "FileText", "Notebook", // Security "ShieldCheck", "Lock", // Comms "Inbox", "MessageSquare", // Media "Music", "Image", // Time "Calendar", // Highlights "Sparkles", "Zap", "Rocket", // Process / structure "Workflow", "Compass", "Layers", "Folder", "Package", "Settings", ] as const; export type LauncherIconName = (typeof LAUNCHER_ICON_NAMES)[number]; export const isLauncherIconName = (s: unknown): s is LauncherIconName => typeof s === "string" && (LAUNCHER_ICON_NAMES as readonly string[]).includes(s); // Tints derived from the limic suite's brand colours. Each is OKLCH at // moderate chroma so it reads well on tessera's lifted-canvas dark surface. // D1 launcher rows store these tint identifiers; the client maps each // identifier to a visible swatch color. export const LAUNCHER_TINT_NAMES = [ "gold", "sky", "violet", "rose", "indigo", "orange", "teal", "lime", "forest", "magenta", ] as const; export type LauncherTintName = (typeof LAUNCHER_TINT_NAMES)[number]; export const isLauncherTintName = (s: unknown): s is LauncherTintName => typeof s === "string" && (LAUNCHER_TINT_NAMES as readonly string[]).includes(s);