1import * as NodeFS from "node:fs";
2
3import {
4 MOBILE_THEME_VARIABLE_NAMES,
5 type MobileThemeAppearance,
6 type MobileThemeVariables,
7} from "./mobileTheme";
8
9export function readDefaultMobileThemeVariables(
10 appearance: MobileThemeAppearance,
11): MobileThemeVariables {
12 return readGeneratedMobileThemeVariables(appearance);
13}
14
15export function readGeneratedMobileThemeVariables(themeName: string): MobileThemeVariables {
16 const stylesheet = NodeFS.readFileSync(
17 new URL("../../generated-uniwind-themes.css", import.meta.url),
18 "utf8",
19 );
20 const variant = new RegExp(`@variant ${themeName} \\{([\\s\\S]*?)\\n \\}`, "u").exec(
21 stylesheet,
22 )?.[1];
23 if (variant === undefined) throw new Error(`Missing generated ${themeName} theme.`);
24
25 return Object.fromEntries(
26 Array.from(variant.matchAll(/(--color-[a-z0-9-]+):\s*([^;]+);/gu), ([, name, value]) => [
27 name,
28 (value ?? "").trim(),
29 ]).filter(([name]) =>
30 MOBILE_THEME_VARIABLE_NAMES.includes(name as (typeof MOBILE_THEME_VARIABLE_NAMES)[number]),
31 ),
32 ) as MobileThemeVariables;
33}