{"release_id":"01a1998d-9802-0000-b0f7-33a23307f4ed","chunk_id":"01a1998d-9934-7d81-9736-52d147f5a9ba","file":"DkMqApP8.mjs","mappings":"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","names":["NICHE_ACCENTS","NICHE_PATTERNS","isNichePattern","v","p","accentOf","key","a","rgba","hex","alpha","n","patternTile","pattern","accentHex","c","svg","w","h","body","nicheThemeStyle","accent","fallbackHex","picked","t","parts","tile","nicheAccentEntry"],"sources":["../../../../../../src/lib/niche-theme.ts"],"sourcesContent":["/** Niche customization: a curated accent palette + repeatable background\n *  patterns. Curated on purpose — free colour pickers and uploaded backgrounds\n *  end in neon and unreadable feeds. Shared by the niche page, the niche chat\n *  room and the owner's customize panel. Client-safe (no server imports). */\n\nexport type NicheAccent =\n\t| 'coral'\n\t| 'violet'\n\t| 'cyan'\n\t| 'green'\n\t| 'yellow'\n\t| 'orange'\n\t| 'pink'\n\t| 'blue'\n\t| 'lime'\n\t| 'mono';\n\nexport const NICHE_ACCENTS: { key: NicheAccent; name: string; base: string; dark: string }[] = [\n\t{ key: 'coral', name: 'coral', base: '#ff4d6d', dark: '#d93254' },\n\t{ key: 'violet', name: 'violet', base: '#7c5cff', dark: '#6a45ff' },\n\t{ key: 'cyan', name: 'cyan', base: '#06b6d4', dark: '#0891b2' },\n\t{ key: 'green', name: 'green', base: '#22c55e', dark: '#16a34a' },\n\t{ key: 'yellow', name: 'yellow', base: '#ffe500', dark: '#d4c000' },\n\t{ key: 'orange', name: 'orange', base: '#f97316', dark: '#ea580c' },\n\t{ key: 'pink', name: 'pink', base: '#ec4899', dark: '#db2777' },\n\t{ key: 'blue', name: 'blue', base: '#3b82f6', dark: '#2563eb' },\n\t{ key: 'lime', name: 'lime', base: '#84cc16', dark: '#65a30d' },\n\t{ key: 'mono', name: 'white', base: '#f0f0f0', dark: '#c8c8c8' }\n];\n/** '' on the manage page = site default (stored as NULL). */\nexport const NICHE_ACCENT_INHERIT = '' as const;\n\nexport type NichePattern = 'none' | 'dots' | 'grid' | 'lines' | 'waves' | 'hearts' | 'stars' | 'rings';\nexport const NICHE_PATTERNS: { key: NichePattern; name: string }[] = [\n\t{ key: 'none', name: 'plain' },\n\t{ key: 'dots', name: 'dots' },\n\t{ key: 'grid', name: 'grid' },\n\t{ key: 'lines', name: 'lines' },\n\t{ key: 'waves', name: 'waves' },\n\t{ key: 'hearts', name: 'hearts' },\n\t{ key: 'stars', name: 'stars' },\n\t{ key: 'rings', name: 'rings' }\n];\nexport const DEFAULT_NICHE_PATTERN: NichePattern = 'none';\n\nexport function isNicheAccent(v: unknown): v is NicheAccent {\n\treturn typeof v === 'string' && NICHE_ACCENTS.some((a) => a.key === v);\n}\nexport function isNichePattern(v: unknown): v is NichePattern {\n\treturn typeof v === 'string' && NICHE_PATTERNS.some((p) => p.key === v);\n}\n\n/** Palette entry for a stored key; null when the niche never picked one\n *  (the page then keeps whatever module accent it's on). */\nexport function accentOf(key: string | null | undefined) {\n\treturn NICHE_ACCENTS.find((a) => a.key === key) ?? null;\n}\n\n/** `#rrggbb` + alpha → `rgba()` for the SVG tiles. */\nfunction rgba(hex: string, alpha: number): string {\n\tconst n = parseInt(hex.slice(1), 16);\n\treturn `rgba(${(n >> 16) & 255}, ${(n >> 8) & 255}, ${n & 255}, ${alpha})`;\n}\n\n/** One repeatable SVG tile per pattern, drawn in the accent at a low alpha so\n *  text stays readable on #0a0a0a. Returns the `background-image` + size, or\n *  null for 'none'. */\nexport function patternTile(pattern: NichePattern, accentHex: string, alpha = 0.09): { image: string; size: string } | null {\n\tconst c = rgba(accentHex, alpha);\n\tconst svg = (w: number, h: number, body: string) =>\n\t\t`url(\"data:image/svg+xml,${encodeURIComponent(`<svg xmlns='http://www.w3.org/2000/svg' width='${w}' height='${h}' viewBox='0 0 ${w} ${h}'>${body}</svg>`)}\")`;\n\tswitch (pattern) {\n\t\tcase 'dots':\n\t\t\treturn { image: svg(22, 22, `<circle cx='11' cy='11' r='1.6' fill='${c}'/>`), size: '22px 22px' };\n\t\tcase 'grid':\n\t\t\treturn { image: svg(28, 28, `<path d='M0 0.5H28M0.5 0V28' stroke='${c}' stroke-width='1'/>`), size: '28px 28px' };\n\t\tcase 'lines':\n\t\t\treturn { image: svg(16, 16, `<path d='M-4 20L20 -4M-4 12L12 -4M4 20L20 4' stroke='${c}' stroke-width='1'/>`), size: '16px 16px' };\n\t\tcase 'waves':\n\t\t\treturn { image: svg(40, 20, `<path d='M0 10c5 -6 10 -6 15 0s10 6 15 0s10 -6 15 0' fill='none' stroke='${c}' stroke-width='1.3'/>`), size: '40px 20px' };\n\t\tcase 'hearts':\n\t\t\treturn {\n\t\t\t\timage: svg(36, 36, `<path transform='translate(10 10) scale(0.72)' d='M11 20s-9-5.6-9-12A5.2 5.2 0 0 1 11 5.4 5.2 5.2 0 0 1 20 8c0 6.4-9 12-9 12z' fill='${c}'/>`),\n\t\t\t\tsize: '36px 36px'\n\t\t\t};\n\t\tcase 'stars':\n\t\t\treturn {\n\t\t\t\timage: svg(40, 40, `<path transform='translate(12 12) scale(0.7)' d='M11 1.5l2.6 5.6 6.1.6-4.6 4.1 1.4 6L11 14.7l-5.5 3.1 1.4-6L2.3 7.7l6.1-.6z' fill='${c}'/>`),\n\t\t\t\tsize: '40px 40px'\n\t\t\t};\n\t\tcase 'rings':\n\t\t\treturn { image: svg(32, 32, `<circle cx='16' cy='16' r='7' fill='none' stroke='${c}' stroke-width='1.2'/>`), size: '32px 32px' };\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\n/** Inline style for a themed surface: sets the accent vars the layout already\n *  reads (`--accent-color` → `--color-accent`) and the repeating background. */\nexport function nicheThemeStyle(accent: string | null | undefined, pattern: string | null | undefined, fallbackHex = '#ff4d6d'): string {\n\tconst picked = accentOf(accent);\n\t// no pick → leave the accent vars alone; the pattern (if any) is drawn in\n\t// the module colour the page already wears\n\tif (!picked) {\n\t\tconst t = isNichePattern(pattern) ? patternTile(pattern, fallbackHex) : null;\n\t\treturn t ? `--niche-bg-image:${t.image};--niche-bg-size:${t.size}` : '--niche-bg-image:none;--niche-bg-size:auto';\n\t}\n\tconst a = picked;\n\t// both layers: the layout's `--accent-color` indirection AND the resolved\n\t// `--color-accent` tokens tailwind's bg-accent / text-accent read — a custom\n\t// property resolves where it's defined, so overriding only the indirection\n\t// at a wrapper never reaches utilities that were computed at :root.\n\tconst parts = [\n\t\t`--accent-color:${a.base}`,\n\t\t`--accent-color-dark:${a.dark}`,\n\t\t`--accent-color-light:${a.base}20`,\n\t\t`--color-accent:${a.base}`,\n\t\t`--color-accent-dark:${a.dark}`,\n\t\t`--color-accent-light:${a.base}20`,\n\t\t`--niche-accent:${a.base}`\n\t];\n\tconst tile = isNichePattern(pattern) ? patternTile(pattern, a.base) : null;\n\tif (tile) parts.push(`--niche-bg-image:${tile.image}`, `--niche-bg-size:${tile.size}`);\n\telse parts.push(`--niche-bg-image:none`, `--niche-bg-size:auto`);\n\treturn parts.join(';');\n}\n\n/** For the chrome override store: the palette entry as `{ key, base, dark }`. */\nexport function nicheAccentEntry(accent: string | null | undefined): { key: string; base: string; dark: string } | null {\n\tconst a = accentOf(accent);\n\treturn a ? { key: a.key, base: a.base, dark: a.dark } : null;\n}\n"],"version":3}