@hyperframes/core 0.6.80 → 0.6.81

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Single source of truth for the deterministic font alias map. Both the
3
+ * producer's @font-face injector and the core lint rules import from here,
4
+ * eliminating manual drift between the two.
5
+ *
6
+ * Keys are lowercase font family names. Values are canonical font slugs
7
+ * matching CANONICAL_FONTS keys in the producer's deterministicFonts module.
8
+ */
9
+ export declare const FONT_ALIAS_MAP: {
10
+ inter: string;
11
+ montserrat: string;
12
+ outfit: string;
13
+ nunito: string;
14
+ oswald: string;
15
+ "league gothic": string;
16
+ "archivo black": string;
17
+ "space mono": string;
18
+ "ibm plex mono": string;
19
+ "jetbrains mono": string;
20
+ "eb garamond": string;
21
+ "playfair display": string;
22
+ "source code pro": string;
23
+ "noto sans jp": string;
24
+ roboto: string;
25
+ "open sans": string;
26
+ lato: string;
27
+ poppins: string;
28
+ "helvetica neue": string;
29
+ helvetica: string;
30
+ arial: string;
31
+ "helvetica bold": string;
32
+ futura: string;
33
+ "din alternate": string;
34
+ "arial black": string;
35
+ "bebas neue": string;
36
+ "courier new": string;
37
+ courier: string;
38
+ garamond: string;
39
+ "noto sans japanese": string;
40
+ "segoe ui": string;
41
+ "sf pro": string;
42
+ "sf pro display": string;
43
+ "sf pro text": string;
44
+ "sf pro rounded": string;
45
+ avenir: string;
46
+ "avenir next": string;
47
+ "lucida grande": string;
48
+ geneva: string;
49
+ optima: string;
50
+ verdana: string;
51
+ tahoma: string;
52
+ "trebuchet ms": string;
53
+ calibri: string;
54
+ candara: string;
55
+ corbel: string;
56
+ "lucida sans": string;
57
+ "lucida sans unicode": string;
58
+ "noto sans": string;
59
+ "dejavu sans": string;
60
+ "liberation sans": string;
61
+ "sf mono": string;
62
+ menlo: string;
63
+ monaco: string;
64
+ consolas: string;
65
+ "lucida console": string;
66
+ "lucida sans typewriter": string;
67
+ "andale mono": string;
68
+ "dejavu sans mono": string;
69
+ "liberation mono": string;
70
+ georgia: string;
71
+ palatino: string;
72
+ "palatino linotype": string;
73
+ "book antiqua": string;
74
+ cambria: string;
75
+ times: string;
76
+ "times new roman": string;
77
+ "dejavu serif": string;
78
+ "liberation serif": string;
79
+ };
80
+ export declare const FONT_ALIAS_KEYS: ReadonlySet<string>;
81
+ /**
82
+ * Human-readable display names for canonical font slugs. Used by the lint
83
+ * rule to tell authors what their aliased font will render as.
84
+ */
85
+ export declare const CANONICAL_FONT_DISPLAY_NAMES: Readonly<Record<string, string>>;
86
+ /**
87
+ * Resolve a font alias to its canonical display name, or undefined if the
88
+ * alias is not in the map.
89
+ */
90
+ export declare function resolveAliasDisplayName(alias: string): string | undefined;
91
+ //# sourceMappingURL=aliases.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aliases.d.ts","sourceRoot":"","sources":["../../src/fonts/aliases.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmFiB,CAAC;AAE7C,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,MAAM,CAAwC,CAAC;AAEzF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmBzE,CAAC;AAEF;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIzE"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Single source of truth for the deterministic font alias map. Both the
3
+ * producer's @font-face injector and the core lint rules import from here,
4
+ * eliminating manual drift between the two.
5
+ *
6
+ * Keys are lowercase font family names. Values are canonical font slugs
7
+ * matching CANONICAL_FONTS keys in the producer's deterministicFonts module.
8
+ */
9
+ export const FONT_ALIAS_MAP = {
10
+ // ── Canonical bundled fonts (self-referencing) ────────────────────────
11
+ inter: "inter",
12
+ montserrat: "montserrat",
13
+ outfit: "outfit",
14
+ nunito: "nunito",
15
+ oswald: "oswald",
16
+ "league gothic": "league-gothic",
17
+ "archivo black": "archivo-black",
18
+ "space mono": "space-mono",
19
+ "ibm plex mono": "ibm-plex-mono",
20
+ "jetbrains mono": "jetbrains-mono",
21
+ "eb garamond": "eb-garamond",
22
+ "playfair display": "playfair-display",
23
+ "source code pro": "source-code-pro",
24
+ "noto sans jp": "noto-sans-jp",
25
+ roboto: "roboto",
26
+ "open sans": "open-sans",
27
+ lato: "lato",
28
+ poppins: "poppins",
29
+ // ── Common aliases → nearest canonical ────────────────────────────────
30
+ "helvetica neue": "inter",
31
+ helvetica: "inter",
32
+ arial: "inter",
33
+ "helvetica bold": "inter",
34
+ futura: "montserrat",
35
+ "din alternate": "montserrat",
36
+ "arial black": "montserrat",
37
+ "bebas neue": "league-gothic",
38
+ "courier new": "jetbrains-mono",
39
+ courier: "jetbrains-mono",
40
+ garamond: "eb-garamond",
41
+ "noto sans japanese": "noto-sans-jp",
42
+ "segoe ui": "roboto",
43
+ // ── macOS sans-serif system fonts → inter ─────────────────────────────
44
+ "sf pro": "inter",
45
+ "sf pro display": "inter",
46
+ "sf pro text": "inter",
47
+ "sf pro rounded": "inter",
48
+ avenir: "inter",
49
+ "avenir next": "inter",
50
+ "lucida grande": "inter",
51
+ geneva: "inter",
52
+ optima: "inter",
53
+ // ── Windows sans-serif system fonts → inter ───────────────────────────
54
+ verdana: "inter",
55
+ tahoma: "inter",
56
+ "trebuchet ms": "inter",
57
+ calibri: "inter",
58
+ candara: "inter",
59
+ corbel: "inter",
60
+ "lucida sans": "inter",
61
+ "lucida sans unicode": "inter",
62
+ // ── Linux sans-serif system fonts → inter ─────────────────────────────
63
+ "noto sans": "inter",
64
+ "dejavu sans": "inter",
65
+ "liberation sans": "inter",
66
+ // ── Monospace system fonts → jetbrains-mono ───────────────────────────
67
+ "sf mono": "jetbrains-mono",
68
+ menlo: "jetbrains-mono",
69
+ monaco: "jetbrains-mono",
70
+ consolas: "jetbrains-mono",
71
+ "lucida console": "jetbrains-mono",
72
+ "lucida sans typewriter": "jetbrains-mono",
73
+ "andale mono": "jetbrains-mono",
74
+ "dejavu sans mono": "jetbrains-mono",
75
+ "liberation mono": "jetbrains-mono",
76
+ // ── Serif system fonts → eb-garamond ──────────────────────────────────
77
+ georgia: "eb-garamond",
78
+ palatino: "eb-garamond",
79
+ "palatino linotype": "eb-garamond",
80
+ "book antiqua": "eb-garamond",
81
+ cambria: "eb-garamond",
82
+ times: "eb-garamond",
83
+ "times new roman": "eb-garamond",
84
+ "dejavu serif": "eb-garamond",
85
+ "liberation serif": "eb-garamond",
86
+ };
87
+ export const FONT_ALIAS_KEYS = new Set(Object.keys(FONT_ALIAS_MAP));
88
+ /**
89
+ * Human-readable display names for canonical font slugs. Used by the lint
90
+ * rule to tell authors what their aliased font will render as.
91
+ */
92
+ export const CANONICAL_FONT_DISPLAY_NAMES = {
93
+ inter: "Inter",
94
+ montserrat: "Montserrat",
95
+ outfit: "Outfit",
96
+ nunito: "Nunito",
97
+ oswald: "Oswald",
98
+ "league-gothic": "League Gothic",
99
+ "archivo-black": "Archivo Black",
100
+ "space-mono": "Space Mono",
101
+ "ibm-plex-mono": "IBM Plex Mono",
102
+ "jetbrains-mono": "JetBrains Mono",
103
+ "eb-garamond": "EB Garamond",
104
+ "playfair-display": "Playfair Display",
105
+ "source-code-pro": "Source Code Pro",
106
+ "noto-sans-jp": "Noto Sans JP",
107
+ roboto: "Roboto",
108
+ "open-sans": "Open Sans",
109
+ lato: "Lato",
110
+ poppins: "Poppins",
111
+ };
112
+ /**
113
+ * Resolve a font alias to its canonical display name, or undefined if the
114
+ * alias is not in the map.
115
+ */
116
+ export function resolveAliasDisplayName(alias) {
117
+ const slug = FONT_ALIAS_MAP[alias.toLowerCase()];
118
+ if (!slug)
119
+ return undefined;
120
+ return CANONICAL_FONT_DISPLAY_NAMES[slug];
121
+ }
122
+ //# sourceMappingURL=aliases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aliases.js","sourceRoot":"","sources":["../../src/fonts/aliases.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export declare const SYSTEM_FONT_SIZE_LIMIT: number;
2
+ export type FontFileFormat = "ttf" | "otf" | "woff2" | "woff" | "ttc";
3
+ export interface LocatedFont {
4
+ path: string;
5
+ format: FontFileFormat;
6
+ }
7
+ export declare const FONT_EXT_RE: RegExp;
8
+ export declare function toFamilyName(fileName: string): string | null;
9
+ export declare function fontDirectories(): string[];
10
+ export interface FontFileEntry {
11
+ path: string;
12
+ fileName: string;
13
+ family: string;
14
+ }
15
+ /**
16
+ * Iterates font files in a directory (up to `depth` 2) and yields each file's
17
+ * path, filename, and derived family name. Shared by the font listing route
18
+ * and the per-family locator to avoid duplicating the directory scan loop.
19
+ */
20
+ export declare function collectFontFileEntries(dir: string, depth?: number): FontFileEntry[];
21
+ export declare function locateSystemFont(family: string): LocatedFont | null;
22
+ export interface LocatedFontVariant extends LocatedFont {
23
+ weight: string;
24
+ style: "normal" | "italic";
25
+ }
26
+ export declare function locateSystemFontVariants(family: string): LocatedFontVariant[];
27
+ export declare function clearSystemFontCache(): void;
28
+ //# sourceMappingURL=systemFontLocator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"systemFontLocator.d.ts","sourceRoot":"","sources":["../../src/fonts/systemFontLocator.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,sBAAsB,QAAkB,CAAC;AAEtD,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAEtE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,eAAO,MAAM,WAAW,QAA6B,CAAC;AA4FtD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAe5D;AAQD,wBAAgB,eAAe,IAAI,MAAM,EAAE,CA2B1C;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,aAAa,EAAE,CAqB9E;AAkHD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAyBnE;AAED,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC5B;AAkCD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,EAAE,CA0B7E;AAWD,wBAAgB,oBAAoB,IAAI,IAAI,CAI3C"}
@@ -0,0 +1,367 @@
1
+ import { execFileSync } from "node:child_process";
2
+ import { existsSync, lstatSync, readdirSync, realpathSync } from "node:fs";
3
+ import { homedir, platform } from "node:os";
4
+ import { join, resolve } from "node:path";
5
+ export const SYSTEM_FONT_SIZE_LIMIT = 5 * 1024 * 1024;
6
+ export const FONT_EXT_RE = /\.(otf|ttf|ttc|woff2?)$/i;
7
+ const FORMAT_PRIORITY = {
8
+ woff2: 0,
9
+ otf: 1,
10
+ ttf: 2,
11
+ woff: 3,
12
+ ttc: 4,
13
+ };
14
+ const STYLE_SUFFIXES = new Set([
15
+ "black",
16
+ "bold",
17
+ "book",
18
+ "condensed",
19
+ "demi",
20
+ "demibold",
21
+ "display",
22
+ "extra",
23
+ "extrabold",
24
+ "hairline",
25
+ "heavy",
26
+ "italic",
27
+ "light",
28
+ "medium",
29
+ "normal",
30
+ "regular",
31
+ "roman",
32
+ "semibold",
33
+ "thin",
34
+ "ultra",
35
+ "ultralight",
36
+ ]);
37
+ const REGULAR_TOKENS = new Set(["regular", "roman", "normal", "book"]);
38
+ const cache = new Map();
39
+ let allowedDirsCache = null;
40
+ function getAllowedFontDirs() {
41
+ if (allowedDirsCache)
42
+ return allowedDirsCache;
43
+ allowedDirsCache = fontDirectories()
44
+ .filter((d) => existsSync(d))
45
+ .map((d) => {
46
+ try {
47
+ return realpathSync(d);
48
+ }
49
+ catch {
50
+ return resolve(d);
51
+ }
52
+ });
53
+ return allowedDirsCache;
54
+ }
55
+ function isPathBounded(filePath) {
56
+ try {
57
+ const real = realpathSync(filePath);
58
+ const allowed = getAllowedFontDirs();
59
+ return allowed.some((dir) => real.startsWith(dir + "/") || real.startsWith(dir + "\\"));
60
+ }
61
+ catch {
62
+ return false;
63
+ }
64
+ }
65
+ function isRegularFile(filePath) {
66
+ try {
67
+ const lst = lstatSync(filePath);
68
+ if (lst.isSymbolicLink())
69
+ return isPathBounded(filePath) && lstatSync(realpathSync(filePath)).isFile();
70
+ return lst.isFile();
71
+ }
72
+ catch {
73
+ return false;
74
+ }
75
+ }
76
+ function normalizeName(name) {
77
+ return name
78
+ .trim()
79
+ .replace(/^['"]|['"]$/g, "")
80
+ .trim()
81
+ .toLowerCase();
82
+ }
83
+ function extensionToFormat(ext) {
84
+ const lower = ext.toLowerCase().replace(/^\./, "");
85
+ if (lower === "woff2")
86
+ return "woff2";
87
+ if (lower === "woff")
88
+ return "woff";
89
+ if (lower === "otf")
90
+ return "otf";
91
+ if (lower === "ttc")
92
+ return "ttc";
93
+ return "ttf";
94
+ }
95
+ export function toFamilyName(fileName) {
96
+ const withoutExt = fileName.replace(FONT_EXT_RE, "");
97
+ if (!withoutExt || withoutExt.startsWith("."))
98
+ return null;
99
+ const spaced = withoutExt
100
+ .replace(/[_-]+/g, " ")
101
+ .replace(/([a-z])([A-Z])/g, "$1 $2")
102
+ .replace(/([A-Z]+)([A-Z][a-z])/g, "$1 $2")
103
+ .replace(/\s+/g, " ")
104
+ .trim();
105
+ const words = spaced.split(" ").filter(Boolean);
106
+ while (words.length > 1 && STYLE_SUFFIXES.has((words.at(-1) ?? "").toLowerCase())) {
107
+ words.pop();
108
+ }
109
+ const family = words.join(" ").trim();
110
+ return family.length >= 2 ? family : null;
111
+ }
112
+ function isRegularWeight(fileName) {
113
+ const lower = fileName.toLowerCase();
114
+ if (REGULAR_TOKENS.has(lower.replace(FONT_EXT_RE, "").split(/[-_ ]/).pop() ?? ""))
115
+ return true;
116
+ return !lower.includes("bold") && !lower.includes("italic") && !lower.includes("light");
117
+ }
118
+ export function fontDirectories() {
119
+ const home = homedir();
120
+ if (platform() === "darwin") {
121
+ return [
122
+ join(home, "Library", "Fonts"),
123
+ "/Library/Fonts",
124
+ "/System/Library/Fonts",
125
+ "/System/Library/Fonts/Supplemental",
126
+ ];
127
+ }
128
+ if (platform() === "win32") {
129
+ return [
130
+ join(process.env.WINDIR || "C:\\Windows", "Fonts"),
131
+ join(process.env.LOCALAPPDATA || join(homedir(), "AppData", "Local"), "Microsoft", "Windows", "Fonts"),
132
+ ];
133
+ }
134
+ return [
135
+ join(home, ".fonts"),
136
+ join(home, ".local", "share", "fonts"),
137
+ "/usr/local/share/fonts",
138
+ "/usr/share/fonts",
139
+ ];
140
+ }
141
+ /**
142
+ * Iterates font files in a directory (up to `depth` 2) and yields each file's
143
+ * path, filename, and derived family name. Shared by the font listing route
144
+ * and the per-family locator to avoid duplicating the directory scan loop.
145
+ */
146
+ export function collectFontFileEntries(dir, depth = 0) {
147
+ if (!existsSync(dir) || depth > 2)
148
+ return [];
149
+ const entries = [];
150
+ try {
151
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
152
+ const fullPath = join(dir, entry.name);
153
+ if (entry.isDirectory()) {
154
+ entries.push(...collectFontFileEntries(fullPath, depth + 1));
155
+ continue;
156
+ }
157
+ if (!FONT_EXT_RE.test(entry.name))
158
+ continue;
159
+ if (!isRegularFile(fullPath))
160
+ continue;
161
+ const family = toFamilyName(entry.name);
162
+ if (family)
163
+ entries.push({ path: fullPath, fileName: entry.name, family });
164
+ }
165
+ }
166
+ catch {
167
+ // Directory read failed — skip
168
+ }
169
+ return entries;
170
+ }
171
+ function collectCandidatesFromDir(dir, targetFamily, depth = 0) {
172
+ return collectFontFileEntries(dir, depth)
173
+ .filter((e) => normalizeName(e.family) === targetFamily)
174
+ .map((e) => {
175
+ const ext = e.fileName.match(FONT_EXT_RE)?.[1] ?? "ttf";
176
+ return {
177
+ path: e.path,
178
+ format: extensionToFormat(ext),
179
+ isRegular: isRegularWeight(e.fileName),
180
+ };
181
+ });
182
+ }
183
+ function pickBestCandidate(candidates) {
184
+ if (candidates.length === 0)
185
+ return null;
186
+ candidates.sort((a, b) => {
187
+ if (a.isRegular !== b.isRegular)
188
+ return a.isRegular ? -1 : 1;
189
+ return (FORMAT_PRIORITY[a.format] ?? 9) - (FORMAT_PRIORITY[b.format] ?? 9);
190
+ });
191
+ const best = candidates[0];
192
+ return { path: best.path, format: best.format };
193
+ }
194
+ let profilerCache = null;
195
+ // fallow-ignore-next-line complexity
196
+ function getSystemProfilerIndex() {
197
+ if (profilerCache)
198
+ return profilerCache;
199
+ profilerCache = new Map();
200
+ if (platform() !== "darwin")
201
+ return profilerCache;
202
+ try {
203
+ const raw = execFileSync("system_profiler", ["SPFontsDataType", "-json"], {
204
+ encoding: "utf8",
205
+ maxBuffer: 12 * 1024 * 1024,
206
+ timeout: 5000,
207
+ });
208
+ const parsed = JSON.parse(raw);
209
+ if (!parsed?.SPFontsDataType || !Array.isArray(parsed.SPFontsDataType))
210
+ return profilerCache;
211
+ for (const fontEntry of parsed.SPFontsDataType) {
212
+ if (!fontEntry?.typefaces || !Array.isArray(fontEntry.typefaces))
213
+ continue;
214
+ for (const typeface of fontEntry.typefaces) {
215
+ if (!typeface)
216
+ continue;
217
+ const family = typeface.family ?? typeface.fullname ?? typeface._name;
218
+ if (typeof family !== "string")
219
+ continue;
220
+ const filePath = typeface.path;
221
+ if (typeof filePath !== "string" || !FONT_EXT_RE.test(filePath))
222
+ continue;
223
+ const normalized = normalizeName(family);
224
+ const ext = filePath.match(FONT_EXT_RE)?.[1] ?? "ttf";
225
+ const entry = {
226
+ family: normalized,
227
+ path: filePath,
228
+ format: extensionToFormat(ext),
229
+ isRegular: isRegularWeight(filePath),
230
+ };
231
+ const list = profilerCache.get(normalized) ?? [];
232
+ list.push(entry);
233
+ profilerCache.set(normalized, list);
234
+ }
235
+ }
236
+ }
237
+ catch {
238
+ // system_profiler unavailable
239
+ }
240
+ return profilerCache;
241
+ }
242
+ function locateViaSystemProfiler(targetFamily) {
243
+ const index = getSystemProfilerIndex();
244
+ const entries = index.get(targetFamily);
245
+ if (!entries || entries.length === 0)
246
+ return null;
247
+ const candidates = entries
248
+ .filter((e) => isRegularFile(e.path) && isPathBounded(e.path))
249
+ .map((e) => ({ path: e.path, format: e.format, isRegular: e.isRegular }));
250
+ return pickBestCandidate(candidates);
251
+ }
252
+ // fallow-ignore-next-line complexity
253
+ function locateViaFcMatch(targetFamily) {
254
+ if (platform() !== "linux")
255
+ return null;
256
+ try {
257
+ const result = execFileSync("fc-match", [targetFamily, "--format=%{file}"], {
258
+ encoding: "utf8",
259
+ timeout: 3000,
260
+ }).trim();
261
+ if (!result || !isRegularFile(result) || !isPathBounded(result))
262
+ return null;
263
+ const fileName = result.split("/").pop() ?? "";
264
+ const derivedFamily = toFamilyName(fileName);
265
+ if (!derivedFamily || normalizeName(derivedFamily) !== targetFamily)
266
+ return null;
267
+ const ext = fileName.match(FONT_EXT_RE)?.[1] ?? "ttf";
268
+ return { path: result, format: extensionToFormat(ext) };
269
+ }
270
+ catch {
271
+ return null;
272
+ }
273
+ }
274
+ export function locateSystemFont(family) {
275
+ const normalized = normalizeName(family);
276
+ if (!normalized)
277
+ return null;
278
+ const cached = cache.get(normalized);
279
+ if (cached !== undefined)
280
+ return cached;
281
+ let result = null;
282
+ result = locateViaSystemProfiler(normalized);
283
+ if (!result) {
284
+ result = locateViaFcMatch(normalized);
285
+ }
286
+ if (!result) {
287
+ const allCandidates = [];
288
+ for (const dir of fontDirectories()) {
289
+ allCandidates.push(...collectCandidatesFromDir(dir, normalized));
290
+ }
291
+ result = pickBestCandidate(allCandidates);
292
+ }
293
+ cache.set(normalized, result);
294
+ return result;
295
+ }
296
+ const WEIGHT_TOKENS = {
297
+ thin: "100",
298
+ hairline: "100",
299
+ ultralight: "200",
300
+ extralight: "200",
301
+ light: "300",
302
+ regular: "400",
303
+ normal: "400",
304
+ book: "400",
305
+ roman: "400",
306
+ medium: "500",
307
+ demibold: "600",
308
+ semibold: "600",
309
+ bold: "700",
310
+ extrabold: "800",
311
+ ultrabold: "800",
312
+ heavy: "800",
313
+ black: "900",
314
+ ultrablack: "950",
315
+ };
316
+ const WEIGHT_TOKENS_SORTED = Object.entries(WEIGHT_TOKENS).sort(([a], [b]) => b.length - a.length);
317
+ function inferWeightAndStyle(fileName) {
318
+ const lower = fileName.toLowerCase().replace(FONT_EXT_RE, "");
319
+ const style = lower.includes("italic") || lower.includes("oblique") ? "italic" : "normal";
320
+ for (const [token, weight] of WEIGHT_TOKENS_SORTED) {
321
+ if (lower.includes(token))
322
+ return { weight, style };
323
+ }
324
+ return { weight: "400", style };
325
+ }
326
+ export function locateSystemFontVariants(family) {
327
+ const normalized = normalizeName(family);
328
+ if (!normalized)
329
+ return [];
330
+ const variants = [];
331
+ const profilerIndex = getSystemProfilerIndex();
332
+ const profilerEntries = profilerIndex.get(normalized);
333
+ if (profilerEntries && profilerEntries.length > 0) {
334
+ for (const e of profilerEntries) {
335
+ if (!isRegularFile(e.path) || !isPathBounded(e.path))
336
+ continue;
337
+ const { weight, style } = inferWeightAndStyle(e.path);
338
+ variants.push({ path: e.path, format: e.format, weight, style });
339
+ }
340
+ if (variants.length > 0)
341
+ return dedupeVariants(variants);
342
+ }
343
+ const allCandidates = [];
344
+ for (const dir of fontDirectories()) {
345
+ allCandidates.push(...collectCandidatesFromDir(dir, normalized));
346
+ }
347
+ for (const c of allCandidates) {
348
+ const { weight, style } = inferWeightAndStyle(c.path);
349
+ variants.push({ path: c.path, format: c.format, weight, style });
350
+ }
351
+ return dedupeVariants(variants);
352
+ }
353
+ function dedupeVariants(variants) {
354
+ const seen = new Map();
355
+ for (const v of variants) {
356
+ const key = `${v.weight}:${v.style}`;
357
+ if (!seen.has(key))
358
+ seen.set(key, v);
359
+ }
360
+ return Array.from(seen.values());
361
+ }
362
+ export function clearSystemFontCache() {
363
+ cache.clear();
364
+ profilerCache = null;
365
+ allowedDirsCache = null;
366
+ }
367
+ //# sourceMappingURL=systemFontLocator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"systemFontLocator.js","sourceRoot":"","sources":["../../src/fonts/systemFontLocator.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fonts.d.ts","sourceRoot":"","sources":["../../../src/lint/rules/fonts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAoGrE,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,WAAW,KAAK,qBAAqB,EAAE,CAiD1E,CAAC"}
1
+ {"version":3,"file":"fonts.d.ts","sourceRoot":"","sources":["../../../src/lint/rules/fonts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AA2ErE,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,WAAW,KAAK,qBAAqB,EAAE,CAsE1E,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { FONT_ALIAS_KEYS, resolveAliasDisplayName } from "../../fonts/aliases";
1
2
  const GENERIC_FAMILIES = new Set([
2
3
  "serif",
3
4
  "sans-serif",
@@ -17,42 +18,6 @@ const GENERIC_FAMILIES = new Set([
17
18
  "unset",
18
19
  "revert",
19
20
  ]);
20
- // Fonts pre-bundled as data URIs in the producer (deterministicFonts.ts FONT_ALIASES).
21
- // These render correctly without @font-face — the producer injects them automatically.
22
- // Must match the keys in packages/producer/src/services/deterministicFonts.ts exactly.
23
- const PRODUCER_BUNDLED_FONTS = new Set([
24
- "inter",
25
- "helvetica neue",
26
- "helvetica",
27
- "arial",
28
- "helvetica bold",
29
- "montserrat",
30
- "futura",
31
- "din alternate",
32
- "arial black",
33
- "outfit",
34
- "nunito",
35
- "oswald",
36
- "bebas neue",
37
- "league gothic",
38
- "archivo black",
39
- "space mono",
40
- "ibm plex mono",
41
- "jetbrains mono",
42
- "courier new",
43
- "courier",
44
- "eb garamond",
45
- "garamond",
46
- "playfair display",
47
- "source code pro",
48
- "noto sans jp",
49
- "noto sans japanese",
50
- "roboto",
51
- "open sans",
52
- "lato",
53
- "poppins",
54
- "segoe ui",
55
- ]);
56
21
  function extractFontFaceFamilies(styles) {
57
22
  const families = new Set();
58
23
  const fontFaceRe = /@font-face\s*\{[^}]*\}/gi;
@@ -92,6 +57,20 @@ function extractUsedFontFamilies(styles) {
92
57
  }
93
58
  return used;
94
59
  }
60
+ function collectAliasedFonts(used, declared) {
61
+ const aliased = [];
62
+ for (const name of used) {
63
+ if (declared.has(name))
64
+ continue;
65
+ const displayName = resolveAliasDisplayName(name);
66
+ if (!displayName)
67
+ continue;
68
+ if (displayName.toLowerCase() === name)
69
+ continue;
70
+ aliased.push(`'${name}' → ${displayName}`);
71
+ }
72
+ return aliased;
73
+ }
95
74
  export const fontRules = [
96
75
  // google_fonts_import
97
76
  ({ styles, source }) => {
@@ -111,12 +90,34 @@ export const fontRules = [
111
90
  }
112
91
  return findings;
113
92
  },
93
+ // system_font_will_alias — inform when a font will be silently substituted
94
+ ({ styles, options }) => {
95
+ const declared = extractFontFaceFamilies(styles);
96
+ const used = extractUsedFontFamilies(styles);
97
+ const aliased = collectAliasedFonts(used, declared);
98
+ if (aliased.length === 0)
99
+ return [];
100
+ // In distributed / Lambda renders system-font capture is disabled, so
101
+ // the alias substitution does NOT happen — elevate to a warning.
102
+ const severity = options.distributed ? "warning" : "info";
103
+ return [
104
+ {
105
+ code: "system_font_will_alias",
106
+ severity,
107
+ message: `Font ${aliased.length === 1 ? "family" : "families"} will be substituted at render time: ${aliased.join(", ")}. ` +
108
+ (options.distributed
109
+ ? "In distributed/Lambda rendering system-font capture is disabled — these fonts will fall back to OS defaults. Embed explicit @font-face declarations instead."
110
+ : "The renderer maps these to bundled fonts for cross-platform consistency. " +
111
+ "Use the target font name directly for consistent preview and render results."),
112
+ },
113
+ ];
114
+ },
114
115
  // font_family_without_font_face
115
116
  ({ styles }) => {
116
117
  const findings = [];
117
118
  const declared = extractFontFaceFamilies(styles);
118
119
  const used = extractUsedFontFamilies(styles);
119
- const undeclared = used.filter((name) => !declared.has(name) && !PRODUCER_BUNDLED_FONTS.has(name));
120
+ const undeclared = used.filter((name) => !declared.has(name) && !FONT_ALIAS_KEYS.has(name));
120
121
  if (undeclared.length === 0)
121
122
  return findings;
122
123
  findings.push({
@@ -1 +1 @@
1
- {"version":3,"file":"fonts.js","sourceRoot":"","sources":["../../../src/lint/rules/fonts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fonts.js","sourceRoot":"","sources":["../../../src/lint/rules/fonts.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,14 @@ export type HyperframeLinterOptions = {
23
23
  href: string;
24
24
  content: string;
25
25
  }>;
26
+ /**
27
+ * Set to `true` when linting compositions destined for distributed / Lambda
28
+ * rendering, where system-font capture (`allowSystemFontCapture`) is
29
+ * disabled. When `true`, the `system_font_will_alias` rule is elevated from
30
+ * `"info"` to `"warning"` because the alias substitution will NOT happen at
31
+ * render time — the font will silently fall back to whatever the OS provides.
32
+ */
33
+ distributed?: boolean;
26
34
  };
27
35
  export type LintRule<TContext> = (ctx: TContext) => HyperframeLintFinding[] | Promise<HyperframeLintFinding[]>;
28
36
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lint/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAElE,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,sBAAsB,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,qBAAqB,EAAE,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3D,CAAC;AAIF,MAAM,MAAM,QAAQ,CAAC,QAAQ,IAAI,CAC/B,GAAG,EAAE,QAAQ,KACV,qBAAqB,EAAE,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lint/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAElE,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,sBAAsB,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,qBAAqB,EAAE,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1D;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAIF,MAAM,MAAM,QAAQ,CAAC,QAAQ,IAAI,CAC/B,GAAG,EAAE,QAAQ,KACV,qBAAqB,EAAE,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC"}
@@ -127,7 +127,7 @@ export declare const ITEM_TYPE_DIRS: {
127
127
  readonly "hyperframes:block": "blocks";
128
128
  readonly "hyperframes:component": "components";
129
129
  };
130
- export type BlockCategory = "vfx" | "transitions" | "social" | "data" | "scenes" | "captions" | "effects";
130
+ export type BlockCategory = "vfx" | "transitions" | "social" | "data" | "scenes" | "captions" | "effects" | "text-effects";
131
131
  export interface BlockCategoryMeta {
132
132
  id: BlockCategory;
133
133
  label: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/registry/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/registry/types.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,7 @@ export const BLOCK_CATEGORIES = [
33
33
  { id: "vfx", label: "VFX", color: "purple" },
34
34
  { id: "transitions", label: "Transitions", color: "blue" },
35
35
  { id: "effects", label: "Effects", color: "rose" },
36
+ { id: "text-effects", label: "Text Effects", color: "violet" },
36
37
  { id: "social", label: "Social", color: "pink" },
37
38
  { id: "data", label: "Data", color: "green" },
38
39
  { id: "scenes", label: "Scenes", color: "amber" },
@@ -51,6 +52,8 @@ export function resolveBlockCategory(tags) {
51
52
  return "data";
52
53
  if (set.has("html-in-canvas") || set.has("webgl") || set.has("shader"))
53
54
  return "vfx";
55
+ if (set.has("text-effect"))
56
+ return "text-effects";
54
57
  if (set.has("effect") || set.has("grain") || set.has("vignette"))
55
58
  return "effects";
56
59
  return "scenes";
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/registry/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/registry/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fonts.d.ts","sourceRoot":"","sources":["../../../src/studio-api/routes/fonts.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AA+OjC,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,CAGlD"}
1
+ {"version":3,"file":"fonts.d.ts","sourceRoot":"","sources":["../../../src/studio-api/routes/fonts.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAiKjC,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,CAiDlD"}
@@ -1,36 +1,12 @@
1
1
  import { execFileSync } from "node:child_process";
2
- import { existsSync, readdirSync, statSync } from "node:fs";
3
- import { homedir, platform } from "node:os";
4
- import { join } from "node:path";
5
- const FONT_EXT_RE = /\.(otf|ttf|ttc|woff2?)$/i;
2
+ import { closeSync, constants, fstatSync, openSync, readSync } from "node:fs";
3
+ import { platform } from "node:os";
4
+ import { collectFontFileEntries, fontDirectories, locateSystemFont, SYSTEM_FONT_SIZE_LIMIT, } from "../../fonts/systemFontLocator";
6
5
  const MAX_FONT_RESULTS = 2000;
7
6
  const GOOGLE_FONTS_METADATA_URL = "https://fonts.google.com/metadata/fonts";
8
7
  const GOOGLE_FONTS_FETCH_TIMEOUT_MS = 3000;
9
8
  let cachedFonts = null;
10
9
  let cachedGoogleFonts = null;
11
- const STYLE_SUFFIXES = new Set([
12
- "black",
13
- "bold",
14
- "book",
15
- "condensed",
16
- "demi",
17
- "demibold",
18
- "display",
19
- "extra",
20
- "extrabold",
21
- "hairline",
22
- "heavy",
23
- "italic",
24
- "light",
25
- "medium",
26
- "normal",
27
- "regular",
28
- "roman",
29
- "semibold",
30
- "thin",
31
- "ultra",
32
- "ultralight",
33
- ]);
34
10
  const GOOGLE_FONT_FALLBACKS = [
35
11
  "Inter",
36
12
  "Roboto",
@@ -56,43 +32,6 @@ const GOOGLE_FONT_FALLBACKS = [
56
32
  function isRecord(value) {
57
33
  return typeof value === "object" && value !== null;
58
34
  }
59
- function fontDirectories() {
60
- const home = homedir();
61
- if (platform() === "darwin") {
62
- return [
63
- join(home, "Library", "Fonts"),
64
- "/Library/Fonts",
65
- "/System/Library/Fonts",
66
- "/System/Library/Fonts/Supplemental",
67
- ];
68
- }
69
- if (platform() === "win32") {
70
- return [join(process.env.WINDIR || "C:\\Windows", "Fonts")];
71
- }
72
- return [
73
- join(home, ".fonts"),
74
- join(home, ".local", "share", "fonts"),
75
- "/usr/local/share/fonts",
76
- "/usr/share/fonts",
77
- ];
78
- }
79
- function toFamilyName(fileName) {
80
- const withoutExt = fileName.replace(FONT_EXT_RE, "");
81
- if (!withoutExt || withoutExt.startsWith("."))
82
- return null;
83
- const spaced = withoutExt
84
- .replace(/[_-]+/g, " ")
85
- .replace(/([a-z])([A-Z])/g, "$1 $2")
86
- .replace(/([A-Z]+)([A-Z][a-z])/g, "$1 $2")
87
- .replace(/\s+/g, " ")
88
- .trim();
89
- const words = spaced.split(" ").filter(Boolean);
90
- while (words.length > 1 && STYLE_SUFFIXES.has((words.at(-1) ?? "").toLowerCase())) {
91
- words.pop();
92
- }
93
- const family = words.join(" ").trim();
94
- return family.length >= 2 ? family : null;
95
- }
96
35
  function collectMacSystemProfilerFonts() {
97
36
  if (platform() !== "darwin")
98
37
  return [];
@@ -136,30 +75,8 @@ function collectMacSystemProfilerFonts() {
136
75
  }
137
76
  return fonts;
138
77
  }
139
- function collectFontsFromDir(dir, depth = 0) {
140
- if (!existsSync(dir) || depth > 2)
141
- return [];
142
- const fonts = [];
143
- for (const entry of readdirSync(dir, { withFileTypes: true })) {
144
- const fullPath = join(dir, entry.name);
145
- if (entry.isDirectory()) {
146
- fonts.push(...collectFontsFromDir(fullPath, depth + 1));
147
- continue;
148
- }
149
- if (!entry.isFile() || !FONT_EXT_RE.test(entry.name))
150
- continue;
151
- try {
152
- if (!statSync(fullPath).isFile())
153
- continue;
154
- }
155
- catch {
156
- continue;
157
- }
158
- const family = toFamilyName(entry.name);
159
- if (family)
160
- fonts.push(family);
161
- }
162
- return fonts;
78
+ function collectFontsFromDir(dir) {
79
+ return collectFontFileEntries(dir).map((e) => e.family);
163
80
  }
164
81
  function listInstalledFontFamilies() {
165
82
  if (cachedFonts)
@@ -235,5 +152,51 @@ async function listGoogleFontFamilies() {
235
152
  export function registerFontRoutes(api) {
236
153
  api.get("/fonts", (c) => c.json({ fonts: listInstalledFontFamilies() }));
237
154
  api.get("/fonts/google", async (c) => c.json({ fonts: await listGoogleFontFamilies() }));
155
+ // fallow-ignore-next-line complexity
156
+ api.get("/fonts/file", (c) => {
157
+ const family = c.req.query("family");
158
+ if (!family)
159
+ return c.json({ error: "family parameter required" }, 400);
160
+ const located = locateSystemFont(family);
161
+ if (!located)
162
+ return c.json({ error: "font not found" }, 404);
163
+ let fd;
164
+ try {
165
+ fd = openSync(located.path, constants.O_RDONLY | constants.O_NOFOLLOW);
166
+ }
167
+ catch {
168
+ return c.json({ error: "font file not accessible" }, 404);
169
+ }
170
+ try {
171
+ const stat = fstatSync(fd);
172
+ if (stat.size > SYSTEM_FONT_SIZE_LIMIT) {
173
+ return c.json({ error: "font file too large" }, 413);
174
+ }
175
+ const buffer = Buffer.alloc(stat.size);
176
+ readSync(fd, buffer, 0, stat.size, 0);
177
+ const mimeType = located.format === "otf"
178
+ ? "font/otf"
179
+ : located.format === "woff2"
180
+ ? "font/woff2"
181
+ : located.format === "woff"
182
+ ? "font/woff"
183
+ : located.format === "ttc"
184
+ ? "font/collection"
185
+ : "font/ttf";
186
+ const fileName = `${family.replace(/[^a-zA-Z0-9 -]/g, "")}.${located.format}`;
187
+ return new Response(buffer, {
188
+ headers: {
189
+ "Content-Type": mimeType,
190
+ "Content-Disposition": `attachment; filename="${fileName}"`,
191
+ },
192
+ });
193
+ }
194
+ catch {
195
+ return c.json({ error: "failed to read font file" }, 500);
196
+ }
197
+ finally {
198
+ closeSync(fd);
199
+ }
200
+ });
238
201
  }
239
202
  //# sourceMappingURL=fonts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fonts.js","sourceRoot":"","sources":["../../../src/studio-api/routes/fonts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fonts.js","sourceRoot":"","sources":["../../../src/studio-api/routes/fonts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,+BAA+B,CAAC;AAEvC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC9B,MAAM,yBAAyB,GAAG,yCAAyC,CAAC;AAC5E,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAC3C,IAAI,WAAW,GAAoB,IAAI,CAAC;AACxC,IAAI,iBAAiB,GAAoB,IAAI,CAAC;AAE9C,MAAM,qBAAqB,GAAG;IAC5B,OAAO;IACP,QAAQ;IACR,WAAW;IACX,YAAY;IACZ,SAAS;IACT,MAAM;IACN,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,kBAAkB;IAClB,cAAc;IACd,eAAe;IACf,gBAAgB;IAChB,iBAAiB;IACjB,SAAS;IACT,eAAe;IACf,YAAY;IACZ,YAAY;IACZ,QAAQ;IACR,gBAAgB;CACjB,CAAC;AAEF,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,SAAS,6BAA6B;IACpC,IAAI,QAAQ,EAAE,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IAEvC,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,iBAAiB,EAAE,CAAC,iBAAiB,EAAE,OAAO,CAAC,EAAE;YACxE,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;YAC3B,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC;QAAE,OAAO,EAAE,CAAC;IAC3E,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,SAAS;QACnC,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;YAAE,SAAS;QAExC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,SAAS;YAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC/B,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;YACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC5B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5B,CAAC;iBAAM,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC3D,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9B,CAAC;iBAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAW;IACtC,OAAO,sBAAsB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,yBAAyB;IAChC,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAEnC,KAAK,MAAM,MAAM,IAAI,6BAA6B,EAAE,EAAE,CAAC;QACrD,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrB,IAAI,QAAQ,CAAC,IAAI,IAAI,gBAAgB;YAAE,MAAM;IAC/C,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,EAAE,CAAC;QACpC,KAAK,MAAM,MAAM,IAAI,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9C,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACrB,IAAI,QAAQ,CAAC,IAAI,IAAI,gBAAgB;gBAAE,MAAM;QAC/C,CAAC;QACD,IAAI,QAAQ,CAAC,IAAI,IAAI,gBAAgB;YAAE,MAAM;IAC/C,CAAC;IAED,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC;QAAE,OAAO,EAAE,CAAC;IAC5E,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;YAAE,SAAS;QACnE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAW;IACvC,MAAM,MAAM,GAAG,MAAM,CAAC;IACtB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,GAAG,CAAC;IAExC,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1B,OACE,KAAK,GAAG,GAAG,CAAC,MAAM;QAClB,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG;YACjB,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI;YACnB,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI;YACnB,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI;YACnB,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,EACtB,CAAC;QACD,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IAED,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,KAAK,UAAU,sBAAsB;IACnC,IAAI,iBAAiB;QAAE,OAAO,iBAAiB,CAAC;IAEhD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,6BAA6B,CAAC,CAAC;IAElF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACvF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,iBAAiB,GAAG,qBAAqB,CAAC;YAC1C,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/D,iBAAiB,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC;IAC7E,CAAC;IAAC,MAAM,CAAC;QACP,iBAAiB,GAAG,qBAAqB,CAAC;IAC5C,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAS;IAC1C,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,CAAC,CAAC,CAAC;IACzE,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,sBAAsB,EAAE,EAAE,CAAC,CAAC,CAAC;IAEzF,qCAAqC;IACrC,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,2BAA2B,EAAE,EAAE,GAAG,CAAC,CAAC;QAExE,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,GAAG,CAAC,CAAC;QAE9D,IAAI,EAAU,CAAC;QACf,IAAI,CAAC;YACH,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;QACzE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,EAAE,GAAG,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;YAC3B,IAAI,IAAI,CAAC,IAAI,GAAG,sBAAsB,EAAE,CAAC;gBACvC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAE,GAAG,CAAC,CAAC;YACvD,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACtC,MAAM,QAAQ,GACZ,OAAO,CAAC,MAAM,KAAK,KAAK;gBACtB,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,OAAO;oBAC1B,CAAC,CAAC,YAAY;oBACd,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM;wBACzB,CAAC,CAAC,WAAW;wBACb,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK;4BACxB,CAAC,CAAC,iBAAiB;4BACnB,CAAC,CAAC,UAAU,CAAC;YAEvB,MAAM,QAAQ,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAC9E,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE;gBAC1B,OAAO,EAAE;oBACP,cAAc,EAAE,QAAQ;oBACxB,qBAAqB,EAAE,yBAAyB,QAAQ,GAAG;iBAC5D;aACF,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,EAAE,GAAG,CAAC,CAAC;QAC5D,CAAC;gBAAS,CAAC;YACT,SAAS,CAAC,EAAE,CAAC,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -2,6 +2,6 @@ export declare const GSAP_CDN = "https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/g
2
2
  export declare const BASE_STYLES = "* { margin: 0; padding: 0; box-sizing: border-box; }\nhtml, body { width: 100%; height: 100%; overflow: hidden; background: #000; display: flex; align-items: center; justify-content: center; }";
3
3
  export declare const ELEMENT_BASE_STYLES = "position: absolute; visibility: hidden;";
4
4
  export declare const MEDIA_STYLES = "width: 100%; height: 100%; object-fit: contain;";
5
- export declare const TEXT_STYLES = "display: flex; align-items: center; justify-content: center; font-family: system-ui, -apple-system, sans-serif; font-size: 48px; font-weight: bold; color: white; text-shadow: 2px 2px 4px rgba(0,0,0,0.8); width: 100%; height: 100%;";
5
+ export declare const TEXT_STYLES = "display: flex; align-items: center; justify-content: center; font-family: \"Inter\", sans-serif; font-size: 48px; font-weight: bold; color: white; text-shadow: 2px 2px 4px rgba(0,0,0,0.8); width: 100%; height: 100%;";
6
6
  export declare const ZOOM_CONTAINER_STYLES = "position: absolute; inset: 0; transform-origin: 0 0;";
7
7
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/templates/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,8DAA8D,CAAC;AAEpF,eAAO,MAAM,WAAW,qMACmH,CAAC;AAE5I,eAAO,MAAM,mBAAmB,4CAA4C,CAAC;AAE7E,eAAO,MAAM,YAAY,oDAAoD,CAAC;AAE9E,eAAO,MAAM,WAAW,2OAA2O,CAAC;AAEpQ,eAAO,MAAM,qBAAqB,yDAAyD,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/templates/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,8DAA8D,CAAC;AAEpF,eAAO,MAAM,WAAW,qMACmH,CAAC;AAE5I,eAAO,MAAM,mBAAmB,4CAA4C,CAAC;AAE7E,eAAO,MAAM,YAAY,oDAAoD,CAAC;AAE9E,eAAO,MAAM,WAAW,4NAA0N,CAAC;AAEnP,eAAO,MAAM,qBAAqB,yDAAyD,CAAC"}
@@ -3,6 +3,6 @@ export const BASE_STYLES = `* { margin: 0; padding: 0; box-sizing: border-box; }
3
3
  html, body { width: 100%; height: 100%; overflow: hidden; background: #000; display: flex; align-items: center; justify-content: center; }`;
4
4
  export const ELEMENT_BASE_STYLES = `position: absolute; visibility: hidden;`;
5
5
  export const MEDIA_STYLES = `width: 100%; height: 100%; object-fit: contain;`;
6
- export const TEXT_STYLES = `display: flex; align-items: center; justify-content: center; font-family: system-ui, -apple-system, sans-serif; font-size: 48px; font-weight: bold; color: white; text-shadow: 2px 2px 4px rgba(0,0,0,0.8); width: 100%; height: 100%;`;
6
+ export const TEXT_STYLES = `display: flex; align-items: center; justify-content: center; font-family: "Inter", sans-serif; font-size: 48px; font-weight: bold; color: white; text-shadow: 2px 2px 4px rgba(0,0,0,0.8); width: 100%; height: 100%;`;
7
7
  export const ZOOM_CONTAINER_STYLES = `position: absolute; inset: 0; transform-origin: 0 0;`;
8
8
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/templates/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,2DAA2D,CAAC;AAEpF,MAAM,CAAC,MAAM,WAAW,GAAG;2IACgH,CAAC;AAE5I,MAAM,CAAC,MAAM,mBAAmB,GAAG,yCAAyC,CAAC;AAE7E,MAAM,CAAC,MAAM,YAAY,GAAG,iDAAiD,CAAC;AAE9E,MAAM,CAAC,MAAM,WAAW,GAAG,wOAAwO,CAAC;AAEpQ,MAAM,CAAC,MAAM,qBAAqB,GAAG,sDAAsD,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/templates/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,2DAA2D,CAAC;AAEpF,MAAM,CAAC,MAAM,WAAW,GAAG;2IACgH,CAAC;AAE5I,MAAM,CAAC,MAAM,mBAAmB,GAAG,yCAAyC,CAAC;AAE7E,MAAM,CAAC,MAAM,YAAY,GAAG,iDAAiD,CAAC;AAE9E,MAAM,CAAC,MAAM,WAAW,GAAG,uNAAuN,CAAC;AAEnP,MAAM,CAAC,MAAM,qBAAqB,GAAG,sDAAsD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hyperframes/core",
3
- "version": "0.6.80",
3
+ "version": "0.6.81",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "type": "git",
@@ -74,6 +74,14 @@
74
74
  "import": "./dist/parsers/springEase.js",
75
75
  "types": "./dist/parsers/springEase.d.ts"
76
76
  },
77
+ "./fonts/aliases": {
78
+ "import": "./dist/fonts/aliases.js",
79
+ "types": "./dist/fonts/aliases.d.ts"
80
+ },
81
+ "./fonts/system-locator": {
82
+ "import": "./dist/fonts/systemFontLocator.js",
83
+ "types": "./dist/fonts/systemFontLocator.d.ts"
84
+ },
77
85
  "./schemas/registry.json": "./schemas/registry.json",
78
86
  "./schemas/registry-item.json": "./schemas/registry-item.json"
79
87
  },