framefields 2.0.6 → 2.0.8
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.
- package/dist/audio/index.mjs +10 -10
- package/dist/{audio-D6enPyAG.mjs → audio--hi7MiZt.mjs} +3 -3
- package/dist/{audio-D6enPyAG.mjs.map → audio--hi7MiZt.mjs.map} +1 -1
- package/dist/{dist-sHqWCB9M.mjs → dist-BQFap0wr.mjs} +9 -6
- package/dist/dist-BQFap0wr.mjs.map +1 -0
- package/dist/{dist-JkiL-qy7.mjs → dist-ZVlYkuR4.mjs} +6 -5
- package/dist/dist-ZVlYkuR4.mjs.map +1 -0
- package/dist/effects/index.mjs +22 -22
- package/dist/{effects-l0T61DPU.mjs → effects-axfL_C3a.mjs} +2 -2
- package/dist/{effects-l0T61DPU.mjs.map → effects-axfL_C3a.mjs.map} +1 -1
- package/dist/fonts/index.mjs +1 -1
- package/dist/{fonts-CuG-05-_.mjs → fonts-Cy26mbrO.mjs} +2 -2
- package/dist/{fonts-CuG-05-_.mjs.map → fonts-Cy26mbrO.mjs.map} +1 -1
- package/dist/index-Bi2nRZ_g.d.mts.map +1 -1
- package/dist/index.d.mts +59 -59
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +37 -37
- package/dist/preview/index.mjs +10 -10
- package/dist/{preview-CcooLR2s.mjs → preview-BUPB38Kk.mjs} +2 -2
- package/dist/{preview-CcooLR2s.mjs.map → preview-BUPB38Kk.mjs.map} +1 -1
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/{chunk-45JOFIHE.mjs → chunk-5PPSCISJ.mjs} +1 -1
- package/dist/preview-engine/{chunk-5NYKHIQN.mjs → chunk-BUWK5RJ4.mjs} +9 -9
- package/dist/preview-engine/{chunk-OZVCWK27.mjs → chunk-JNEVSC4I.mjs} +1 -1
- package/dist/preview-engine/{chunk-RJJRPL42.mjs → chunk-VWLR2AZR.mjs} +1 -1
- package/dist/preview-engine/{chunk-KNZU3Z2F.mjs → chunk-WQ7BFSKF.mjs} +1 -1
- package/dist/preview-engine/{chunk-YK4XHUP4.mjs → chunk-ZJFAGIOM.mjs} +6 -6
- package/dist/preview-engine/{chunk-EJTGJVUA.mjs → chunk-ZSIJB76A.mjs} +2 -2
- package/dist/preview-engine/fonts.mjs +1 -1
- package/dist/preview-engine/framefields.mjs +1 -1
- package/dist/preview-engine/player.mjs +1 -1
- package/dist/preview-engine/{renderers-GYJTBVV2.mjs → renderers-27Q5X3U6.mjs} +1 -1
- package/dist/preview-engine/{renderers-R5WSHETG.mjs → renderers-MZBR3MSR.mjs} +1 -1
- package/dist/{program-DPFDbeL9.mjs → program-Jt07Tx1J.mjs} +2 -2
- package/dist/{program-DPFDbeL9.mjs.map → program-Jt07Tx1J.mjs.map} +1 -1
- package/dist/renderer/index.mjs +2 -2
- package/dist/{renderer-DVj8jfmO.mjs → renderer-0uccAKQe.mjs} +2 -2
- package/dist/{renderer-DVj8jfmO.mjs.map → renderer-0uccAKQe.mjs.map} +1 -1
- package/dist/renderer-1mNREW16.mjs +3 -0
- package/dist/renderer-4tKI3p9c.mjs +3 -0
- package/dist/renderer-B3XeKN-e.mjs +3 -0
- package/dist/{renderer-BXWu8aHU.mjs → renderer-B6Q5e9CU.mjs} +2 -2
- package/dist/{renderer-BXWu8aHU.mjs.map → renderer-B6Q5e9CU.mjs.map} +1 -1
- package/dist/renderer-B7_6SHd8.mjs +3 -0
- package/dist/renderer-BENF6Wts.mjs +3 -0
- package/dist/{renderer-Bl9C9lIo.mjs → renderer-BENX0vRC.mjs} +1 -1
- package/dist/{renderer-Cn-p1SyO.mjs → renderer-BPbNLPcz.mjs} +2 -2
- package/dist/{renderer-Cn-p1SyO.mjs.map → renderer-BPbNLPcz.mjs.map} +1 -1
- package/dist/renderer-BPiLdwI1.mjs +3 -0
- package/dist/{renderer-BpTwFaja.mjs → renderer-BQZniXw0.mjs} +2 -2
- package/dist/{renderer-BpTwFaja.mjs.map → renderer-BQZniXw0.mjs.map} +1 -1
- package/dist/{renderer-D3FsnptO.mjs → renderer-BTFPC3UJ.mjs} +1 -1
- package/dist/{renderer-BShK_xMJ.mjs → renderer-BdSHGzHj.mjs} +1 -1
- package/dist/renderer-BdyMrzUX.mjs +3 -0
- package/dist/renderer-BfpdekRn.mjs +3 -0
- package/dist/{renderer-CLWAbaCS.mjs → renderer-BjROyv5F.mjs} +2 -2
- package/dist/{renderer-CLWAbaCS.mjs.map → renderer-BjROyv5F.mjs.map} +1 -1
- package/dist/{renderer-C-F91lPu.mjs → renderer-BkOXe6o6.mjs} +2 -2
- package/dist/{renderer-C-F91lPu.mjs.map → renderer-BkOXe6o6.mjs.map} +1 -1
- package/dist/{renderer-B52Y2SDC.mjs → renderer-Bq3Geqe3.mjs} +1 -1
- package/dist/renderer-BtdnLjKZ.mjs +3 -0
- package/dist/{renderer-C5lJvf-h.mjs → renderer-Bu0xOP_v.mjs} +2 -2
- package/dist/{renderer-C5lJvf-h.mjs.map → renderer-Bu0xOP_v.mjs.map} +1 -1
- package/dist/{renderer-CM5c8a7B.mjs → renderer-Bv-ljXHc.mjs} +7 -7
- package/dist/{renderer-CM5c8a7B.mjs.map → renderer-Bv-ljXHc.mjs.map} +1 -1
- package/dist/{renderer-CsE9ztUa.mjs → renderer-C-Bv9nVB.mjs} +2 -2
- package/dist/{renderer-CsE9ztUa.mjs.map → renderer-C-Bv9nVB.mjs.map} +1 -1
- package/dist/renderer-C0q5UUY7.mjs +3 -0
- package/dist/{renderer-DvHpzsUV.mjs → renderer-C5RhNQdr.mjs} +2 -2
- package/dist/{renderer-DvHpzsUV.mjs.map → renderer-C5RhNQdr.mjs.map} +1 -1
- package/dist/{renderer-doPt4zQZ.mjs → renderer-CIMjMFGm.mjs} +2 -2
- package/dist/{renderer-doPt4zQZ.mjs.map → renderer-CIMjMFGm.mjs.map} +1 -1
- package/dist/{renderer-L72D1mwv.mjs → renderer-CIQYTiT9.mjs} +2 -2
- package/dist/{renderer-L72D1mwv.mjs.map → renderer-CIQYTiT9.mjs.map} +1 -1
- package/dist/{renderer-BhfFVqCx.mjs → renderer-CXJxK7HP.mjs} +2 -2
- package/dist/{renderer-BhfFVqCx.mjs.map → renderer-CXJxK7HP.mjs.map} +1 -1
- package/dist/{renderer-Dntxca07.mjs → renderer-CXZe0lfI.mjs} +2 -2
- package/dist/{renderer-Dntxca07.mjs.map → renderer-CXZe0lfI.mjs.map} +1 -1
- package/dist/{renderer-Cgy1H0Ql.mjs → renderer-CboM4tba.mjs} +2 -2
- package/dist/{renderer-Cgy1H0Ql.mjs.map → renderer-CboM4tba.mjs.map} +1 -1
- package/dist/{renderer-BbwOEawB.mjs → renderer-CceiI6P7.mjs} +2 -2
- package/dist/{renderer-BbwOEawB.mjs.map → renderer-CceiI6P7.mjs.map} +1 -1
- package/dist/renderer-Cg-rJgwM.mjs +3 -0
- package/dist/renderer-CkgQArsi.mjs +3 -0
- package/dist/{renderer--akPySto.mjs → renderer-CmIySXSN.mjs} +2 -2
- package/dist/{renderer--akPySto.mjs.map → renderer-CmIySXSN.mjs.map} +1 -1
- package/dist/renderer-CnO9KcmP.mjs +3 -0
- package/dist/renderer-Cnp5JCwi.mjs +3 -0
- package/dist/renderer-CwiCQzjW.mjs +4 -0
- package/dist/renderer-D2LCMZ0l.mjs +3 -0
- package/dist/{renderer-CLUPc9do.mjs → renderer-D49-PYDo.mjs} +2 -2
- package/dist/{renderer-CLUPc9do.mjs.map → renderer-D49-PYDo.mjs.map} +1 -1
- package/dist/{renderer-BNBh4omF.mjs → renderer-D5GsF1LT.mjs} +2 -2
- package/dist/{renderer-BNBh4omF.mjs.map → renderer-D5GsF1LT.mjs.map} +1 -1
- package/dist/{renderer-Bpf8EGY1.mjs → renderer-D5xelwpw.mjs} +2 -2
- package/dist/{renderer-Bpf8EGY1.mjs.map → renderer-D5xelwpw.mjs.map} +1 -1
- package/dist/renderer-DBGy4qIh.mjs +3 -0
- package/dist/renderer-DBRnvHBV.mjs +3 -0
- package/dist/{renderer-BHsEOp1I.mjs → renderer-DDd3cjaz.mjs} +2 -2
- package/dist/{renderer-BHsEOp1I.mjs.map → renderer-DDd3cjaz.mjs.map} +1 -1
- package/dist/{renderer-7v-ZNKEJ.mjs → renderer-DIfk6m2O.mjs} +2 -2
- package/dist/{renderer-7v-ZNKEJ.mjs.map → renderer-DIfk6m2O.mjs.map} +1 -1
- package/dist/renderer-DJgrcu3v.mjs +3 -0
- package/dist/{renderer-E5D4H5dK.mjs → renderer-DP-xNaYX.mjs} +2 -2
- package/dist/{renderer-E5D4H5dK.mjs.map → renderer-DP-xNaYX.mjs.map} +1 -1
- package/dist/{renderer-XRGwrdg8.mjs → renderer-DP948J9X.mjs} +2 -2
- package/dist/{renderer-XRGwrdg8.mjs.map → renderer-DP948J9X.mjs.map} +1 -1
- package/dist/renderer-DTpBOlDA.mjs +3 -0
- package/dist/{renderer-DnXQXk-8.mjs → renderer-DVQp5fLG.mjs} +2 -2
- package/dist/{renderer-DnXQXk-8.mjs.map → renderer-DVQp5fLG.mjs.map} +1 -1
- package/dist/renderer-DWwIX4Mr.mjs +3 -0
- package/dist/{renderer-BgrDGRNW.mjs → renderer-DXyaswab.mjs} +2 -2
- package/dist/{renderer-BgrDGRNW.mjs.map → renderer-DXyaswab.mjs.map} +1 -1
- package/dist/{renderer-0ty5QtXg.mjs → renderer-DbaSgadp.mjs} +2 -2
- package/dist/{renderer-0ty5QtXg.mjs.map → renderer-DbaSgadp.mjs.map} +1 -1
- package/dist/renderer-DfnacE0H.mjs +3 -0
- package/dist/{renderer-B1IXTeF2.mjs → renderer-Dgg6pQGI.mjs} +2 -2
- package/dist/{renderer-B1IXTeF2.mjs.map → renderer-Dgg6pQGI.mjs.map} +1 -1
- package/dist/{renderer-DJPuwTbS.mjs → renderer-DrgNyCSx.mjs} +2 -2
- package/dist/{renderer-DJPuwTbS.mjs.map → renderer-DrgNyCSx.mjs.map} +1 -1
- package/dist/{renderer-DM79djHG.mjs → renderer-DxBUppHf.mjs} +38 -38
- package/dist/{renderer-DM79djHG.mjs.map → renderer-DxBUppHf.mjs.map} +1 -1
- package/dist/renderer-RA8pee2T.mjs +3 -0
- package/dist/{renderer-BV_d3D_3.mjs → renderer-U0LJuM9D.mjs} +2 -2
- package/dist/{renderer-BV_d3D_3.mjs.map → renderer-U0LJuM9D.mjs.map} +1 -1
- package/dist/{renderer-BUJ6uaJE.mjs → renderer-VPK8JnSw.mjs} +2 -2
- package/dist/{renderer-BUJ6uaJE.mjs.map → renderer-VPK8JnSw.mjs.map} +1 -1
- package/dist/renderer-eH4u4-2c.mjs +3 -0
- package/dist/renderer-eWOqFUz9.mjs +3 -0
- package/dist/{renderer-CmMNU1-P.mjs → renderer-o4wOvjEC.mjs} +4 -4
- package/dist/{renderer-CmMNU1-P.mjs.map → renderer-o4wOvjEC.mjs.map} +1 -1
- package/dist/{renderer-DRf4FLSq.mjs → renderer-zwxwjWqa.mjs} +2 -2
- package/dist/{renderer-DRf4FLSq.mjs.map → renderer-zwxwjWqa.mjs.map} +1 -1
- package/dist/{renderers-CP8CFWDs-CAs5DgWj.mjs → renderers-CP8CFWDs-BQBjaV9O.mjs} +2 -2
- package/dist/{renderers-CP8CFWDs-CAs5DgWj.mjs.map → renderers-CP8CFWDs-BQBjaV9O.mjs.map} +1 -1
- package/dist/signals/index.mjs +4 -4
- package/package.json +54 -54
- package/dist/dist-JkiL-qy7.mjs.map +0 -1
- package/dist/dist-sHqWCB9M.mjs.map +0 -1
- package/dist/renderer-145WIXyW.mjs +0 -3
- package/dist/renderer-9W8q4Y8D.mjs +0 -3
- package/dist/renderer-B5HBViEG.mjs +0 -3
- package/dist/renderer-B7naoaVH.mjs +0 -3
- package/dist/renderer-BHYmRBem.mjs +0 -3
- package/dist/renderer-BL51bhvQ.mjs +0 -3
- package/dist/renderer-ByxrzTRg.mjs +0 -3
- package/dist/renderer-CDirzReW.mjs +0 -3
- package/dist/renderer-CGCmbeJ2.mjs +0 -3
- package/dist/renderer-CO0KsnEg.mjs +0 -3
- package/dist/renderer-COO44HDO.mjs +0 -3
- package/dist/renderer-C_9SIgZX.mjs +0 -3
- package/dist/renderer-CntaTaNq.mjs +0 -3
- package/dist/renderer-Cv9JLpL6.mjs +0 -3
- package/dist/renderer-D0FWIsWn.mjs +0 -3
- package/dist/renderer-D3jUYUDU.mjs +0 -3
- package/dist/renderer-D5Je-AeQ.mjs +0 -3
- package/dist/renderer-DNPwpmYS.mjs +0 -3
- package/dist/renderer-DawVsNLw.mjs +0 -3
- package/dist/renderer-Dl_6Kn87.mjs +0 -3
- package/dist/renderer-DlrJSfaw.mjs +0 -3
- package/dist/renderer-DpScOWGG.mjs +0 -4
- package/dist/renderer-DxYOA1MM.mjs +0 -3
- package/dist/renderer-S7jOr_jF.mjs +0 -3
- package/dist/renderer-kN2TeWks.mjs +0 -3
package/dist/fonts/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as registerHeadlessFont, y as SlugFontCache } from "./dist-
|
|
1
|
+
import { $ as registerHeadlessFont, y as SlugFontCache } from "./dist-BQFap0wr.mjs";
|
|
2
2
|
import * as fontkit from "fontkit";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import fs from "node:fs/promises";
|
|
@@ -196,4 +196,4 @@ var FontManager = class FontManager {
|
|
|
196
196
|
|
|
197
197
|
//#endregion
|
|
198
198
|
export { FontManager as t };
|
|
199
|
-
//# sourceMappingURL=fonts-
|
|
199
|
+
//# sourceMappingURL=fonts-Cy26mbrO.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fonts-CuG-05-_.mjs","names":[],"sources":["../src/fonts/manager.ts"],"sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n\tregisterHeadlessFont,\n\tSlugFontCache,\n} from \"@framefields/webgpu-renderers\";\nimport * as fontkit from \"fontkit\";\n\nexport interface RegisterFontOptions {\n\tfamily?: string;\n\tsource: string | Uint8Array;\n\tweight?: number | string;\n\tstyle?: \"normal\" | \"italic\" | \"oblique\";\n}\n\nexport interface RegisteredFont {\n\tfamily: string;\n\tsource: string | Uint8Array;\n\tfilePath?: string;\n\tformat: \"truetype\" | \"opentype\";\n\tpostscriptName?: string;\n\tunitsPerEm?: number;\n\tweight?: number | string;\n\tstyle?: string;\n}\n\ninterface ResolvedSource {\n\tbuffer: Uint8Array;\n\tfilePath?: string;\n}\n\nconst SFNT_TRUETYPE_1 = 0x00010000;\nconst SFNT_TRUETYPE_TRUE = 0x74727565; // 'true'\nconst SFNT_TRUETYPE_TYP1 = 0x74797031; // 'typ1'\nconst SFNT_OPENTYPE_CFF = 0x4f54544f; // 'OTTO'\nconst SFNT_COLLECTION = 0x74746366; // 'ttcf'\n\nfunction validateFontBinaryHeader(\n\tbytes: Uint8Array,\n\tsourceLabel: string,\n): \"truetype\" | \"opentype\" {\n\tif (bytes.length < 12) {\n\t\tthrow new Error(\n\t\t\t`Invalid font binary for \"${sourceLabel}\": File size (${bytes.length} bytes) is too small to be a valid TrueType or OpenType font.`,\n\t\t);\n\t}\n\n\tconst tag =\n\t\t((bytes[0] ?? 0) << 24) |\n\t\t((bytes[1] ?? 0) << 16) |\n\t\t((bytes[2] ?? 0) << 8) |\n\t\t(bytes[3] ?? 0);\n\n\tif (\n\t\ttag === SFNT_TRUETYPE_1 ||\n\t\ttag === SFNT_TRUETYPE_TRUE ||\n\t\ttag === SFNT_TRUETYPE_TYP1 ||\n\t\ttag === SFNT_COLLECTION\n\t) {\n\t\treturn \"truetype\";\n\t}\n\n\tif (tag === SFNT_OPENTYPE_CFF) {\n\t\treturn \"opentype\";\n\t}\n\n\tconst hexTag = (tag >>> 0).toString(16).padStart(8, \"0\");\n\tthrow new Error(\n\t\t`Invalid font format for \"${sourceLabel}\": Expected a valid TrueType (.ttf) or OpenType (.otf) font binary. Found header tag: 0x${hexTag}.`,\n\t);\n}\n\nasync function resolveSourceBuffer(\n\tsource: string | Uint8Array,\n): Promise<ResolvedSource> {\n\tif (source instanceof Uint8Array) {\n\t\treturn { buffer: source };\n\t}\n\n\tif (typeof source !== \"string\") {\n\t\tthrow new TypeError(\n\t\t\t`Font source must be a file path string or Uint8Array, received: ${typeof source}`,\n\t\t);\n\t}\n\n\tlet cleanPath = source;\n\tif (cleanPath.startsWith(\"http://\") || cleanPath.startsWith(\"https://\")) {\n\t\tconst res = await fetch(cleanPath);\n\t\tif (!res.ok) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to download font from \"${cleanPath}\": HTTP ${res.status} ${res.statusText}`,\n\t\t\t);\n\t\t}\n\t\tconst arrayBuffer = await res.arrayBuffer();\n\t\treturn {\n\t\t\tbuffer: new Uint8Array(arrayBuffer),\n\t\t\tfilePath: cleanPath,\n\t\t};\n\t}\n\n\tif (cleanPath.startsWith(\"file://\")) {\n\t\ttry {\n\t\t\tcleanPath = new URL(cleanPath).pathname;\n\t\t} catch {\n\t\t\tcleanPath = cleanPath.replace(/^file:\\/\\//, \"\");\n\t\t}\n\t}\n\n\tconst candidates: string[] = [\n\t\tcleanPath,\n\t\tpath.resolve(process.cwd(), cleanPath),\n\t\tpath.resolve(process.cwd(), \"assets/fonts\", cleanPath),\n\t\tpath.resolve(process.cwd(), \"assets/fonts\", path.basename(cleanPath)),\n\t];\n\n\t// Upward traversal to locate fonts in parent monorepo roots\n\tlet currentDir = process.cwd();\n\tfor (let i = 0; i < 5; i++) {\n\t\tcandidates.push(path.resolve(currentDir, cleanPath));\n\t\tcandidates.push(\n\t\t\tpath.resolve(currentDir, \"assets/fonts\", path.basename(cleanPath)),\n\t\t);\n\t\tconst parent = path.dirname(currentDir);\n\t\tif (parent === currentDir) break;\n\t\tcurrentDir = parent;\n\t}\n\n\tlet resolvedPath: string | null = null;\n\tlet fileBuffer: Buffer | null = null;\n\n\tfor (const candidate of candidates) {\n\t\ttry {\n\t\t\tconst stat = await fs.stat(candidate);\n\t\t\tif (stat.isFile()) {\n\t\t\t\tresolvedPath = candidate;\n\t\t\t\tfileBuffer = await fs.readFile(candidate);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Continue searching next candidate\n\t\t}\n\t}\n\n\tif (!resolvedPath || !fileBuffer) {\n\t\tthrow new Error(\n\t\t\t`Font file not found: \"${source}\". Checked candidate locations:\\n - ${candidates.join(\"\\n - \")}`,\n\t\t);\n\t}\n\n\treturn {\n\t\tbuffer: new Uint8Array(\n\t\t\tfileBuffer.buffer,\n\t\t\tfileBuffer.byteOffset,\n\t\t\tfileBuffer.byteLength,\n\t\t),\n\t\tfilePath: resolvedPath,\n\t};\n}\n\n/**\n * Central singleton manager for font registration, TTF validation, and compositor typography binding.\n */\nexport class FontManager {\n\tprivate static instance: FontManager | null = null;\n\tprivate readonly fonts = new Map<string, RegisteredFont>();\n\n\tprivate constructor() {}\n\n\t/**\n\t * Returns the singleton FontManager instance.\n\t */\n\tpublic static getInstance(): FontManager {\n\t\tif (!FontManager.instance) {\n\t\t\tFontManager.instance = new FontManager();\n\t\t}\n\t\treturn FontManager.instance;\n\t}\n\n\t/**\n\t * Registers a TrueType/OpenType font into the Framefields engine with validation.\n\t */\n\tpublic static async register(\n\t\toptionsOrFamilyOrSource: RegisterFontOptions | string,\n\t\tsource?: string | Uint8Array,\n\t): Promise<RegisteredFont> {\n\t\treturn FontManager.getInstance().register(optionsOrFamilyOrSource, source);\n\t}\n\n\t/**\n\t * Sets the color emoji font text draws emoji with, for the preview and the\n\t * export alike: a CBDT/CBLC bitmap font such as Noto Color Emoji, as a file\n\t * path, URL or bytes. framefields ships none; without one, exports draw\n\t * nothing for emoji.\n\t */\n\tpublic static async registerEmojiFont(\n\t\tsource: string | Uint8Array,\n\t): Promise<void> {\n\t\tconst { buffer, filePath } = await resolveSourceBuffer(source);\n\t\tconst label =\n\t\t\tfilePath ?? (typeof source === \"string\" ? source : \"Uint8Array\");\n\t\tvalidateFontBinaryHeader(buffer, label);\n\t\tSlugFontCache.setEmojiFont(buffer, filePath);\n\t}\n\n\t/**\n\t * Retrieves registered font metadata by family name.\n\t */\n\tpublic static get(family: string): RegisteredFont | undefined {\n\t\treturn FontManager.getInstance().get(family);\n\t}\n\n\t/**\n\t * Checks if a font family has been registered.\n\t */\n\tpublic static has(family: string): boolean {\n\t\treturn FontManager.getInstance().has(family);\n\t}\n\n\t/**\n\t * Returns all currently registered fonts.\n\t */\n\tpublic static getAll(): RegisteredFont[] {\n\t\treturn FontManager.getInstance().getAll();\n\t}\n\n\t/**\n\t * Returns relative or absolute file paths of all registered fonts for composition spec serialization.\n\t */\n\tpublic static getRegisteredFontPaths(): string[] {\n\t\treturn FontManager.getInstance().getRegisteredFontPaths();\n\t}\n\n\t/**\n\t * Clears all registered fonts from the manager.\n\t */\n\tpublic static clear(): void {\n\t\tFontManager.getInstance().clear();\n\t}\n\n\t/**\n\t * Instance registration method with format validation and Slug WebGPU cache population.\n\t */\n\tpublic async register(\n\t\toptionsOrFamilyOrSource: RegisterFontOptions | string,\n\t\tsource?: string | Uint8Array,\n\t): Promise<RegisteredFont> {\n\t\tlet family: string | undefined;\n\t\tlet rawSource: string | Uint8Array;\n\t\tlet weight: number | string | undefined;\n\t\tlet style: \"normal\" | \"italic\" | \"oblique\" | undefined;\n\n\t\tif (\n\t\t\ttypeof optionsOrFamilyOrSource === \"object\" &&\n\t\t\toptionsOrFamilyOrSource !== null\n\t\t) {\n\t\t\tfamily = optionsOrFamilyOrSource.family;\n\t\t\trawSource = optionsOrFamilyOrSource.source;\n\t\t\tweight = optionsOrFamilyOrSource.weight;\n\t\t\tstyle = optionsOrFamilyOrSource.style;\n\t\t} else if (\n\t\t\ttypeof optionsOrFamilyOrSource === \"string\" &&\n\t\t\tsource !== undefined\n\t\t) {\n\t\t\tfamily = optionsOrFamilyOrSource;\n\t\t\trawSource = source;\n\t\t} else if (typeof optionsOrFamilyOrSource === \"string\") {\n\t\t\tfamily = undefined;\n\t\t\trawSource = optionsOrFamilyOrSource;\n\t\t} else {\n\t\t\tthrow new TypeError(\"Invalid arguments passed to FontManager.register\");\n\t\t}\n\n\t\tconst { buffer, filePath } = await resolveSourceBuffer(rawSource);\n\t\tconst sourceLabel =\n\t\t\tfilePath ?? (typeof rawSource === \"string\" ? rawSource : \"Uint8Array\");\n\t\tconst format = validateFontBinaryHeader(buffer, sourceLabel);\n\n\t\tlet parsedFontkit: fontkit.Font;\n\t\ttry {\n\t\t\tconst parsed = fontkit.create(buffer as unknown as Buffer);\n\t\t\tif (\n\t\t\t\tparsed &&\n\t\t\t\t\"fonts\" in parsed &&\n\t\t\t\tArray.isArray(parsed.fonts) &&\n\t\t\t\tparsed.fonts.length > 0\n\t\t\t) {\n\t\t\t\tparsedFontkit = parsed.fonts[0] as fontkit.Font;\n\t\t\t} else {\n\t\t\t\tparsedFontkit = parsed as fontkit.Font;\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconst msg = err instanceof Error ? err.message : String(err);\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to parse TrueType/OpenType font binary for \"${sourceLabel}\": ${msg}`,\n\t\t\t);\n\t\t}\n\n\t\tconst detectedFamily =\n\t\t\tparsedFontkit.familyName ||\n\t\t\tparsedFontkit.postscriptName ||\n\t\t\tpath.parse(sourceLabel).name;\n\t\tconst resolvedFamily = family?.trim() || detectedFamily;\n\n\t\tconst registered: RegisteredFont = {\n\t\t\tfamily: resolvedFamily,\n\t\t\tsource: rawSource,\n\t\t\tfilePath,\n\t\t\tformat,\n\t\t\tpostscriptName: parsedFontkit.postscriptName,\n\t\t\tunitsPerEm: parsedFontkit.unitsPerEm,\n\t\t\tweight,\n\t\t\tstyle,\n\t\t};\n\n\t\tthis.fonts.set(resolvedFamily, registered);\n\n\t\t// Populate headless font registries\n\t\tif (filePath) {\n\t\t\tawait registerHeadlessFont(resolvedFamily, filePath);\n\t\t}\n\t\tSlugFontCache.setParsed(resolvedFamily, parsedFontkit);\n\n\t\treturn registered;\n\t}\n\n\tpublic get(family: string): RegisteredFont | undefined {\n\t\treturn this.fonts.get(family);\n\t}\n\n\tpublic has(family: string): boolean {\n\t\treturn this.fonts.has(family);\n\t}\n\n\tpublic getAll(): RegisteredFont[] {\n\t\treturn Array.from(this.fonts.values());\n\t}\n\n\tpublic getRegisteredFontPaths(): string[] {\n\t\tconst paths: string[] = [];\n\t\tfor (const font of this.fonts.values()) {\n\t\t\tif (font.filePath) {\n\t\t\t\tpaths.push(font.filePath);\n\t\t\t} else if (typeof font.source === \"string\") {\n\t\t\t\tpaths.push(font.source);\n\t\t\t}\n\t\t}\n\t\treturn paths;\n\t}\n\n\tpublic clear(): void {\n\t\tthis.fonts.clear();\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fonts-Cy26mbrO.mjs","names":[],"sources":["../src/fonts/manager.ts"],"sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n\tregisterHeadlessFont,\n\tSlugFontCache,\n} from \"@framefields/webgpu-renderers\";\nimport * as fontkit from \"fontkit\";\n\nexport interface RegisterFontOptions {\n\tfamily?: string;\n\tsource: string | Uint8Array;\n\tweight?: number | string;\n\tstyle?: \"normal\" | \"italic\" | \"oblique\";\n}\n\nexport interface RegisteredFont {\n\tfamily: string;\n\tsource: string | Uint8Array;\n\tfilePath?: string;\n\tformat: \"truetype\" | \"opentype\";\n\tpostscriptName?: string;\n\tunitsPerEm?: number;\n\tweight?: number | string;\n\tstyle?: string;\n}\n\ninterface ResolvedSource {\n\tbuffer: Uint8Array;\n\tfilePath?: string;\n}\n\nconst SFNT_TRUETYPE_1 = 0x00010000;\nconst SFNT_TRUETYPE_TRUE = 0x74727565; // 'true'\nconst SFNT_TRUETYPE_TYP1 = 0x74797031; // 'typ1'\nconst SFNT_OPENTYPE_CFF = 0x4f54544f; // 'OTTO'\nconst SFNT_COLLECTION = 0x74746366; // 'ttcf'\n\nfunction validateFontBinaryHeader(\n\tbytes: Uint8Array,\n\tsourceLabel: string,\n): \"truetype\" | \"opentype\" {\n\tif (bytes.length < 12) {\n\t\tthrow new Error(\n\t\t\t`Invalid font binary for \"${sourceLabel}\": File size (${bytes.length} bytes) is too small to be a valid TrueType or OpenType font.`,\n\t\t);\n\t}\n\n\tconst tag =\n\t\t((bytes[0] ?? 0) << 24) |\n\t\t((bytes[1] ?? 0) << 16) |\n\t\t((bytes[2] ?? 0) << 8) |\n\t\t(bytes[3] ?? 0);\n\n\tif (\n\t\ttag === SFNT_TRUETYPE_1 ||\n\t\ttag === SFNT_TRUETYPE_TRUE ||\n\t\ttag === SFNT_TRUETYPE_TYP1 ||\n\t\ttag === SFNT_COLLECTION\n\t) {\n\t\treturn \"truetype\";\n\t}\n\n\tif (tag === SFNT_OPENTYPE_CFF) {\n\t\treturn \"opentype\";\n\t}\n\n\tconst hexTag = (tag >>> 0).toString(16).padStart(8, \"0\");\n\tthrow new Error(\n\t\t`Invalid font format for \"${sourceLabel}\": Expected a valid TrueType (.ttf) or OpenType (.otf) font binary. Found header tag: 0x${hexTag}.`,\n\t);\n}\n\nasync function resolveSourceBuffer(\n\tsource: string | Uint8Array,\n): Promise<ResolvedSource> {\n\tif (source instanceof Uint8Array) {\n\t\treturn { buffer: source };\n\t}\n\n\tif (typeof source !== \"string\") {\n\t\tthrow new TypeError(\n\t\t\t`Font source must be a file path string or Uint8Array, received: ${typeof source}`,\n\t\t);\n\t}\n\n\tlet cleanPath = source;\n\tif (cleanPath.startsWith(\"http://\") || cleanPath.startsWith(\"https://\")) {\n\t\tconst res = await fetch(cleanPath);\n\t\tif (!res.ok) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to download font from \"${cleanPath}\": HTTP ${res.status} ${res.statusText}`,\n\t\t\t);\n\t\t}\n\t\tconst arrayBuffer = await res.arrayBuffer();\n\t\treturn {\n\t\t\tbuffer: new Uint8Array(arrayBuffer),\n\t\t\tfilePath: cleanPath,\n\t\t};\n\t}\n\n\tif (cleanPath.startsWith(\"file://\")) {\n\t\ttry {\n\t\t\tcleanPath = new URL(cleanPath).pathname;\n\t\t} catch {\n\t\t\tcleanPath = cleanPath.replace(/^file:\\/\\//, \"\");\n\t\t}\n\t}\n\n\tconst candidates: string[] = [\n\t\tcleanPath,\n\t\tpath.resolve(process.cwd(), cleanPath),\n\t\tpath.resolve(process.cwd(), \"assets/fonts\", cleanPath),\n\t\tpath.resolve(process.cwd(), \"assets/fonts\", path.basename(cleanPath)),\n\t];\n\n\t// Upward traversal to locate fonts in parent monorepo roots\n\tlet currentDir = process.cwd();\n\tfor (let i = 0; i < 5; i++) {\n\t\tcandidates.push(path.resolve(currentDir, cleanPath));\n\t\tcandidates.push(\n\t\t\tpath.resolve(currentDir, \"assets/fonts\", path.basename(cleanPath)),\n\t\t);\n\t\tconst parent = path.dirname(currentDir);\n\t\tif (parent === currentDir) break;\n\t\tcurrentDir = parent;\n\t}\n\n\tlet resolvedPath: string | null = null;\n\tlet fileBuffer: Buffer | null = null;\n\n\tfor (const candidate of candidates) {\n\t\ttry {\n\t\t\tconst stat = await fs.stat(candidate);\n\t\t\tif (stat.isFile()) {\n\t\t\t\tresolvedPath = candidate;\n\t\t\t\tfileBuffer = await fs.readFile(candidate);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Continue searching next candidate\n\t\t}\n\t}\n\n\tif (!resolvedPath || !fileBuffer) {\n\t\tthrow new Error(\n\t\t\t`Font file not found: \"${source}\". Checked candidate locations:\\n - ${candidates.join(\"\\n - \")}`,\n\t\t);\n\t}\n\n\treturn {\n\t\tbuffer: new Uint8Array(\n\t\t\tfileBuffer.buffer,\n\t\t\tfileBuffer.byteOffset,\n\t\t\tfileBuffer.byteLength,\n\t\t),\n\t\tfilePath: resolvedPath,\n\t};\n}\n\n/**\n * Central singleton manager for font registration, TTF validation, and compositor typography binding.\n */\nexport class FontManager {\n\tprivate static instance: FontManager | null = null;\n\tprivate readonly fonts = new Map<string, RegisteredFont>();\n\n\tprivate constructor() {}\n\n\t/**\n\t * Returns the singleton FontManager instance.\n\t */\n\tpublic static getInstance(): FontManager {\n\t\tif (!FontManager.instance) {\n\t\t\tFontManager.instance = new FontManager();\n\t\t}\n\t\treturn FontManager.instance;\n\t}\n\n\t/**\n\t * Registers a TrueType/OpenType font into the Framefields engine with validation.\n\t */\n\tpublic static async register(\n\t\toptionsOrFamilyOrSource: RegisterFontOptions | string,\n\t\tsource?: string | Uint8Array,\n\t): Promise<RegisteredFont> {\n\t\treturn FontManager.getInstance().register(optionsOrFamilyOrSource, source);\n\t}\n\n\t/**\n\t * Sets the color emoji font text draws emoji with, for the preview and the\n\t * export alike: a CBDT/CBLC bitmap font such as Noto Color Emoji, as a file\n\t * path, URL or bytes. framefields ships none; without one, exports draw\n\t * nothing for emoji.\n\t */\n\tpublic static async registerEmojiFont(\n\t\tsource: string | Uint8Array,\n\t): Promise<void> {\n\t\tconst { buffer, filePath } = await resolveSourceBuffer(source);\n\t\tconst label =\n\t\t\tfilePath ?? (typeof source === \"string\" ? source : \"Uint8Array\");\n\t\tvalidateFontBinaryHeader(buffer, label);\n\t\tSlugFontCache.setEmojiFont(buffer, filePath);\n\t}\n\n\t/**\n\t * Retrieves registered font metadata by family name.\n\t */\n\tpublic static get(family: string): RegisteredFont | undefined {\n\t\treturn FontManager.getInstance().get(family);\n\t}\n\n\t/**\n\t * Checks if a font family has been registered.\n\t */\n\tpublic static has(family: string): boolean {\n\t\treturn FontManager.getInstance().has(family);\n\t}\n\n\t/**\n\t * Returns all currently registered fonts.\n\t */\n\tpublic static getAll(): RegisteredFont[] {\n\t\treturn FontManager.getInstance().getAll();\n\t}\n\n\t/**\n\t * Returns relative or absolute file paths of all registered fonts for composition spec serialization.\n\t */\n\tpublic static getRegisteredFontPaths(): string[] {\n\t\treturn FontManager.getInstance().getRegisteredFontPaths();\n\t}\n\n\t/**\n\t * Clears all registered fonts from the manager.\n\t */\n\tpublic static clear(): void {\n\t\tFontManager.getInstance().clear();\n\t}\n\n\t/**\n\t * Instance registration method with format validation and Slug WebGPU cache population.\n\t */\n\tpublic async register(\n\t\toptionsOrFamilyOrSource: RegisterFontOptions | string,\n\t\tsource?: string | Uint8Array,\n\t): Promise<RegisteredFont> {\n\t\tlet family: string | undefined;\n\t\tlet rawSource: string | Uint8Array;\n\t\tlet weight: number | string | undefined;\n\t\tlet style: \"normal\" | \"italic\" | \"oblique\" | undefined;\n\n\t\tif (\n\t\t\ttypeof optionsOrFamilyOrSource === \"object\" &&\n\t\t\toptionsOrFamilyOrSource !== null\n\t\t) {\n\t\t\tfamily = optionsOrFamilyOrSource.family;\n\t\t\trawSource = optionsOrFamilyOrSource.source;\n\t\t\tweight = optionsOrFamilyOrSource.weight;\n\t\t\tstyle = optionsOrFamilyOrSource.style;\n\t\t} else if (\n\t\t\ttypeof optionsOrFamilyOrSource === \"string\" &&\n\t\t\tsource !== undefined\n\t\t) {\n\t\t\tfamily = optionsOrFamilyOrSource;\n\t\t\trawSource = source;\n\t\t} else if (typeof optionsOrFamilyOrSource === \"string\") {\n\t\t\tfamily = undefined;\n\t\t\trawSource = optionsOrFamilyOrSource;\n\t\t} else {\n\t\t\tthrow new TypeError(\"Invalid arguments passed to FontManager.register\");\n\t\t}\n\n\t\tconst { buffer, filePath } = await resolveSourceBuffer(rawSource);\n\t\tconst sourceLabel =\n\t\t\tfilePath ?? (typeof rawSource === \"string\" ? rawSource : \"Uint8Array\");\n\t\tconst format = validateFontBinaryHeader(buffer, sourceLabel);\n\n\t\tlet parsedFontkit: fontkit.Font;\n\t\ttry {\n\t\t\tconst parsed = fontkit.create(buffer as unknown as Buffer);\n\t\t\tif (\n\t\t\t\tparsed &&\n\t\t\t\t\"fonts\" in parsed &&\n\t\t\t\tArray.isArray(parsed.fonts) &&\n\t\t\t\tparsed.fonts.length > 0\n\t\t\t) {\n\t\t\t\tparsedFontkit = parsed.fonts[0] as fontkit.Font;\n\t\t\t} else {\n\t\t\t\tparsedFontkit = parsed as fontkit.Font;\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconst msg = err instanceof Error ? err.message : String(err);\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to parse TrueType/OpenType font binary for \"${sourceLabel}\": ${msg}`,\n\t\t\t);\n\t\t}\n\n\t\tconst detectedFamily =\n\t\t\tparsedFontkit.familyName ||\n\t\t\tparsedFontkit.postscriptName ||\n\t\t\tpath.parse(sourceLabel).name;\n\t\tconst resolvedFamily = family?.trim() || detectedFamily;\n\n\t\tconst registered: RegisteredFont = {\n\t\t\tfamily: resolvedFamily,\n\t\t\tsource: rawSource,\n\t\t\tfilePath,\n\t\t\tformat,\n\t\t\tpostscriptName: parsedFontkit.postscriptName,\n\t\t\tunitsPerEm: parsedFontkit.unitsPerEm,\n\t\t\tweight,\n\t\t\tstyle,\n\t\t};\n\n\t\tthis.fonts.set(resolvedFamily, registered);\n\n\t\t// Populate headless font registries\n\t\tif (filePath) {\n\t\t\tawait registerHeadlessFont(resolvedFamily, filePath);\n\t\t}\n\t\tSlugFontCache.setParsed(resolvedFamily, parsedFontkit);\n\n\t\treturn registered;\n\t}\n\n\tpublic get(family: string): RegisteredFont | undefined {\n\t\treturn this.fonts.get(family);\n\t}\n\n\tpublic has(family: string): boolean {\n\t\treturn this.fonts.has(family);\n\t}\n\n\tpublic getAll(): RegisteredFont[] {\n\t\treturn Array.from(this.fonts.values());\n\t}\n\n\tpublic getRegisteredFontPaths(): string[] {\n\t\tconst paths: string[] = [];\n\t\tfor (const font of this.fonts.values()) {\n\t\t\tif (font.filePath) {\n\t\t\t\tpaths.push(font.filePath);\n\t\t\t} else if (typeof font.source === \"string\") {\n\t\t\t\tpaths.push(font.source);\n\t\t\t}\n\t\t}\n\t\treturn paths;\n\t}\n\n\tpublic clear(): void {\n\t\tthis.fonts.clear();\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-Bi2nRZ_g.d.mts","names":["a","isStaticVisualMedia","c","RenderParams","i","calculateLayerTransform","l","computeRenderParams","n","framesToSeconds","o","resolveLayerDuration","r","secondsToFrames","s","CropRegion","t","formatTimecode","u","getFontUrl","VirtualMediaData","GPUCommandEncoder","GPUTexture","GPUTextureView","NodeRenderProps","RenderContextValue","drawCompositionTree","Promise","CompositionStateStore","compositionStateStore","SceneProps","AudioClip","decodeAudioSource","Float32Array","mixAudioTracks","GPUDevice","NormalizationContext","normalizeTimeline","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default"],"sources":["../../compositions/dist/index.d.mts","../../../nodes/node-audio-compressor/dist/renderer.d.mts","../../../nodes/node-audio-delay/dist/renderer.d.mts","../../../nodes/node-audio-fade/dist/renderer.d.mts","../../../nodes/node-audio-noise-gate/dist/renderer.d.mts","../../../nodes/node-audio-parametric-eq/dist/renderer.d.mts","../../../nodes/node-audio-reverb/dist/renderer.d.mts","../../../nodes/node-stereo-panning/dist/renderer.d.mts","../src/audio/synth/sfx.ts","../src/audio/synth/wav-encoder.ts"],"sourcesContent":["import { a as isStaticVisualMedia, c as RenderParams, i as calculateLayerTransform, l as computeRenderParams, n as framesToSeconds, o as resolveLayerDuration, r as secondsToFrames, s as CropRegion, t as formatTimecode, u as getFontUrl } from \"./timing-CHy-6wsp.mjs\";\nimport { VirtualMediaData } from \"@framefields/core\";\nimport { GPUCommandEncoder, GPUTexture, GPUTextureView, NodeRenderProps } from \"@framefields/node-sdk\";\nimport { RenderContextValue } from \"@framefields/webgpu-renderers\";\n\n//#region src/compositions/canvas-composition.d.ts\ndeclare function drawCompositionTree(ctx: RenderContextValue, encoder: GPUCommandEncoder, targetView: GPUTextureView, targetTexture: GPUTexture, targetWidth: number, targetHeight: number, virtualMedia: VirtualMediaData, props: NodeRenderProps, inheritedSeekOffset?: number, inheritedClockOffset?: number): Promise<void>;\n//#endregion\n//#region src/compositions/composition-state.d.ts\ndeclare class CompositionStateStore {\n private states;\n private listeners;\n setState(key: string, frame: number, fps: number, isPlaying?: boolean): void;\n getState(key: string): {\n frame: number;\n fps: number;\n isPlaying: boolean;\n };\n subscribe(key: string, listener: () => void): () => void;\n clearKey(key: string): void;\n private notify;\n}\ndeclare const compositionStateStore: CompositionStateStore;\ninterface SceneProps {\n viewportWidth: number;\n viewportHeight: number;\n containerWidth?: number;\n containerHeight?: number;\n virtualMedia?: VirtualMediaData;\n backgroundColor?: string;\n type?: \"Video\" | \"Audio\" | \"Image\";\n volume?: number;\n renderId?: string;\n frame?: number;\n fps?: number;\n [key: string]: unknown;\n}\n//#endregion\n//#region src/utils/audio-extractor.d.ts\ninterface AudioClip {\n sourceUrl: string;\n destStartFrame: number;\n trimStartSec: number;\n durationFrames: number;\n speed: number;\n volume: number;\n}\n/**\n * Decodes all audio samples from a given source URL into raw Float32 mono/stereo channel buffers.\n */\ndeclare function decodeAudioSource(url: string): Promise<{\n channels: Float32Array[];\n sampleRate: number;\n} | null>;\n/**\n * Recursively parses the VirtualMediaData tree and mixes all active audio tracks\n * into a single unified stereo PCM stream (Float32Array channels).\n */\ndeclare function mixAudioTracks(virtualMedia: VirtualMediaData, fps: number, targetSampleRate?: number, device?: GPUDevice, renderId?: string): Promise<{\n channels: Float32Array[];\n sampleRate: number;\n}>;\n//#endregion\n//#region src/utils/normalization.d.ts\n/**\n * NormalizationContext carries the accumulated offsets and limits\n * as we traverse down the virtual media tree.\n */\ninterface NormalizationContext {\n timeOffsetSec: number;\n durationLimitMs?: number;\n}\n/**\n * normalizeTimeline recurses through the virtual media tree and \"absorbs\"\n * generic timeline-shifting operations into standard properties\n * of their children.\n */\ndeclare function normalizeTimeline(vv: VirtualMediaData, fps: number, context?: NormalizationContext): VirtualMediaData;\n//#endregion\nexport { AudioClip, CropRegion, RenderParams, SceneProps, calculateLayerTransform, compositionStateStore, computeRenderParams, decodeAudioSource, drawCompositionTree, formatTimecode, framesToSeconds, getFontUrl, isStaticVisualMedia, mixAudioTracks, normalizeTimeline, resolveLayerDuration, secondsToFrames };\n//# sourceMappingURL=index.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map"],"mappings":";;;;;;ASKA;AAOA;;iBT8CiBkC,cAAAA,CS7CS,YAAA,ET6CoBd,gBS7CpB,EAAA,GAAA,EAAA,MAAA,EAAA,gBAAA,CAAA,EAAA,MAAA,EAAA,MAAA,CAAA,ET6CuFe,SS7CvF,EAAA,QAAA,CAAA,EAAA,MAAA,CAAA,ET6CsHR,OS7CtH,CAAA;EAChB,QAAA,ET6CEM,YS7CF,EAAA;EACP,UAAA,EAAA,MAAA;CAAM,CAAA;;;;;;;;;;cRZKM,YAAUE,SAASH;AD+CuB;;;;cE/C1CM,YAAUE,SAASH;AF+CuB;;;;cG/C1CM,YAAUE,SAASH;AH+CuB;;;;cI/C1CM,YAAUE,SAASH;AJ+CuB;;;;cK/C1CM,YAAUE,SAASH;AL+CuB;;;;cM/C1CM,YAAUE,SAASH;AN+CuB;;;;cO/C1CM,UAAUE,SAASH;AP+CuB;;;;;;;;AAAA;;;;;AAQ+F,UQhDtI,UAAA,CRgDsI;;;;ECvDzI7B,WAAAA,CAAAA,EAAsE,MAAA;;;KOexE,YAAA,IAAgB,cAAc;ANf5BK,UMiBG,WAAA,
|
|
1
|
+
{"version":3,"file":"index-Bi2nRZ_g.d.mts","names":["a","isStaticVisualMedia","c","RenderParams","i","calculateLayerTransform","l","computeRenderParams","n","framesToSeconds","o","resolveLayerDuration","r","secondsToFrames","s","CropRegion","t","formatTimecode","u","getFontUrl","VirtualMediaData","GPUCommandEncoder","GPUTexture","GPUTextureView","NodeRenderProps","RenderContextValue","drawCompositionTree","Promise","CompositionStateStore","compositionStateStore","SceneProps","AudioClip","decodeAudioSource","Float32Array","mixAudioTracks","GPUDevice","NormalizationContext","normalizeTimeline","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default"],"sources":["../../compositions/dist/index.d.mts","../../../nodes/node-audio-compressor/dist/renderer.d.mts","../../../nodes/node-audio-delay/dist/renderer.d.mts","../../../nodes/node-audio-fade/dist/renderer.d.mts","../../../nodes/node-audio-noise-gate/dist/renderer.d.mts","../../../nodes/node-audio-parametric-eq/dist/renderer.d.mts","../../../nodes/node-audio-reverb/dist/renderer.d.mts","../../../nodes/node-stereo-panning/dist/renderer.d.mts","../src/audio/synth/sfx.ts","../src/audio/synth/wav-encoder.ts"],"sourcesContent":["import { a as isStaticVisualMedia, c as RenderParams, i as calculateLayerTransform, l as computeRenderParams, n as framesToSeconds, o as resolveLayerDuration, r as secondsToFrames, s as CropRegion, t as formatTimecode, u as getFontUrl } from \"./timing-CHy-6wsp.mjs\";\nimport { VirtualMediaData } from \"@framefields/core\";\nimport { GPUCommandEncoder, GPUTexture, GPUTextureView, NodeRenderProps } from \"@framefields/node-sdk\";\nimport { RenderContextValue } from \"@framefields/webgpu-renderers\";\n\n//#region src/compositions/canvas-composition.d.ts\ndeclare function drawCompositionTree(ctx: RenderContextValue, encoder: GPUCommandEncoder, targetView: GPUTextureView, targetTexture: GPUTexture, targetWidth: number, targetHeight: number, virtualMedia: VirtualMediaData, props: NodeRenderProps, inheritedSeekOffset?: number, inheritedClockOffset?: number): Promise<void>;\n//#endregion\n//#region src/compositions/composition-state.d.ts\ndeclare class CompositionStateStore {\n private states;\n private listeners;\n setState(key: string, frame: number, fps: number, isPlaying?: boolean): void;\n getState(key: string): {\n frame: number;\n fps: number;\n isPlaying: boolean;\n };\n subscribe(key: string, listener: () => void): () => void;\n clearKey(key: string): void;\n private notify;\n}\ndeclare const compositionStateStore: CompositionStateStore;\ninterface SceneProps {\n viewportWidth: number;\n viewportHeight: number;\n containerWidth?: number;\n containerHeight?: number;\n virtualMedia?: VirtualMediaData;\n backgroundColor?: string;\n type?: \"Video\" | \"Audio\" | \"Image\";\n volume?: number;\n renderId?: string;\n frame?: number;\n fps?: number;\n [key: string]: unknown;\n}\n//#endregion\n//#region src/utils/audio-extractor.d.ts\ninterface AudioClip {\n sourceUrl: string;\n destStartFrame: number;\n trimStartSec: number;\n durationFrames: number;\n speed: number;\n volume: number;\n}\n/**\n * Decodes all audio samples from a given source URL into raw Float32 mono/stereo channel buffers.\n */\ndeclare function decodeAudioSource(url: string): Promise<{\n channels: Float32Array[];\n sampleRate: number;\n} | null>;\n/**\n * Recursively parses the VirtualMediaData tree and mixes all active audio tracks\n * into a single unified stereo PCM stream (Float32Array channels).\n */\ndeclare function mixAudioTracks(virtualMedia: VirtualMediaData, fps: number, targetSampleRate?: number, device?: GPUDevice, renderId?: string): Promise<{\n channels: Float32Array[];\n sampleRate: number;\n}>;\n//#endregion\n//#region src/utils/normalization.d.ts\n/**\n * NormalizationContext carries the accumulated offsets and limits\n * as we traverse down the virtual media tree.\n */\ninterface NormalizationContext {\n timeOffsetSec: number;\n durationLimitMs?: number;\n}\n/**\n * normalizeTimeline recurses through the virtual media tree and \"absorbs\"\n * generic timeline-shifting operations into standard properties\n * of their children.\n */\ndeclare function normalizeTimeline(vv: VirtualMediaData, fps: number, context?: NormalizationContext): VirtualMediaData;\n//#endregion\nexport { AudioClip, CropRegion, RenderParams, SceneProps, calculateLayerTransform, compositionStateStore, computeRenderParams, decodeAudioSource, drawCompositionTree, formatTimecode, framesToSeconds, getFontUrl, isStaticVisualMedia, mixAudioTracks, normalizeTimeline, resolveLayerDuration, secondsToFrames };\n//# sourceMappingURL=index.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map"],"mappings":";;;;;;ASKA;AAOA;;iBT8CiBkC,cAAAA,CS7CS,YAAA,ET6CoBd,gBS7CpB,EAAA,GAAA,EAAA,MAAA,EAAA,gBAAA,CAAA,EAAA,MAAA,EAAA,MAAA,CAAA,ET6CuFe,SS7CvF,EAAA,QAAA,CAAA,EAAA,MAAA,CAAA,ET6CsHR,OS7CtH,CAAA;EAChB,QAAA,ET6CEM,YS7CF,EAAA;EACP,UAAA,EAAA,MAAA;CAAM,CAAA;;;;;;;;;;cRZKM,YAAUE,SAASH;AD+CuB;;;;cE/C1CM,YAAUE,SAASH;AF+CuB;;;;cG/C1CM,YAAUE,SAASH;AH+CuB;;;;cI/C1CM,YAAUE,SAASH;AJ+CuB;;;;cK/C1CM,YAAUE,SAASH;AL+CuB;;;;cM/C1CM,YAAUE,SAASH;AN+CuB;;;;cO/C1CM,UAAUE,SAASH;AP+CuB;;;;;;;;AAAA;;;;;AAQ+F,UQhDtI,UAAA,CRgDsI;;;;ECvDzI7B,WAAAA,CAAAA,EAAsE,MAAA;;;KOexE,YAAA,IAAgB,cAAc;ANf5BK,UMiBG,WAAA,CNjBmE;;;YMoBzE;ALvBuE;UK0BjE,gBAAA;;;EJvBHU;;;;ACHoE;;;;ACGpEU,iBEsLE,SAAA,CFtLiBD,OAAAA,EEuLvB,UFvLcG,EAAAA,GAAQ,EEwL1B,gBFxL0B,CAAA,EEyL7B,WFzL6B;;iBEiOhB,UAAA,SACP,gCACU;;ADtO+D;;;iBC6PlE,SAAA,SACP;;;;;;;ARpMQhC,USrDA,gBAAA,CTqDc;EAAed,UAAAA,CAAAA,EAAAA,MAAAA;;;;;iBS9C9B,eAAA,YACJ,cAAc,yBAChB,mBACP"}
|
package/dist/index.d.mts
CHANGED
|
@@ -66,8 +66,8 @@ declare const AnchorGroupingSchema: z.ZodEnum<{
|
|
|
66
66
|
}>;
|
|
67
67
|
type AnchorGrouping = z.infer<typeof AnchorGroupingSchema>;
|
|
68
68
|
declare const AnchorPresetSchema: z.ZodEnum<{
|
|
69
|
-
custom: "custom";
|
|
70
69
|
center: "center";
|
|
70
|
+
custom: "custom";
|
|
71
71
|
baseline: "baseline";
|
|
72
72
|
bottom_left: "bottom_left";
|
|
73
73
|
bottom_center: "bottom_center";
|
|
@@ -85,8 +85,8 @@ declare const TextAnchorConfigSchema: z.ZodObject<{
|
|
|
85
85
|
all: "all";
|
|
86
86
|
}>>;
|
|
87
87
|
preset: z.ZodDefault<z.ZodEnum<{
|
|
88
|
-
custom: "custom";
|
|
89
88
|
center: "center";
|
|
89
|
+
custom: "custom";
|
|
90
90
|
baseline: "baseline";
|
|
91
91
|
bottom_left: "bottom_left";
|
|
92
92
|
bottom_center: "bottom_center";
|
|
@@ -330,8 +330,8 @@ declare const ExtendedGlyphPropertiesSchema: z.ZodObject<{
|
|
|
330
330
|
all: "all";
|
|
331
331
|
}>>;
|
|
332
332
|
preset: z.ZodDefault<z.ZodEnum<{
|
|
333
|
-
custom: "custom";
|
|
334
333
|
center: "center";
|
|
334
|
+
custom: "custom";
|
|
335
335
|
baseline: "baseline";
|
|
336
336
|
bottom_left: "bottom_left";
|
|
337
337
|
bottom_center: "bottom_center";
|
|
@@ -457,8 +457,8 @@ declare const AdvancedTextAnimatorSchema: z.ZodObject<{
|
|
|
457
457
|
all: "all";
|
|
458
458
|
}>>;
|
|
459
459
|
preset: z.ZodDefault<z.ZodEnum<{
|
|
460
|
-
custom: "custom";
|
|
461
460
|
center: "center";
|
|
461
|
+
custom: "custom";
|
|
462
462
|
baseline: "baseline";
|
|
463
463
|
bottom_left: "bottom_left";
|
|
464
464
|
bottom_center: "bottom_center";
|
|
@@ -1700,9 +1700,9 @@ declare function evaluateTypewriterState(fullText: string, currentFrame: number,
|
|
|
1700
1700
|
//#region src/program/schema.d.ts
|
|
1701
1701
|
/** number px | "auto" (intrinsic) | "fit" (shrink-wrap) | "fill" (parent extent). */
|
|
1702
1702
|
declare const SizeSpecSchema: z.ZodUnion<readonly [z.ZodNumber, z.ZodEnum<{
|
|
1703
|
+
fill: "fill";
|
|
1703
1704
|
auto: "auto";
|
|
1704
1705
|
fit: "fit";
|
|
1705
|
-
fill: "fill";
|
|
1706
1706
|
}>, z.ZodCustom<unknown, unknown>]>;
|
|
1707
1707
|
type SizeSpec = z.infer<typeof SizeSpecSchema>;
|
|
1708
1708
|
declare const ShapeTypeSchema: z.ZodEnum<{
|
|
@@ -1716,39 +1716,39 @@ declare const ShapeTypeSchema: z.ZodEnum<{
|
|
|
1716
1716
|
}>;
|
|
1717
1717
|
type ShapeType = z.infer<typeof ShapeTypeSchema>;
|
|
1718
1718
|
declare const AnimatablePropSchema: z.ZodEnum<{
|
|
1719
|
-
fill: "fill";
|
|
1720
1719
|
x: "x";
|
|
1721
1720
|
y: "y";
|
|
1722
|
-
scale: "scale";
|
|
1723
|
-
rotation: "rotation";
|
|
1724
|
-
opacity: "opacity";
|
|
1725
1721
|
width: "width";
|
|
1726
1722
|
height: "height";
|
|
1723
|
+
rotation: "rotation";
|
|
1724
|
+
scale: "scale";
|
|
1725
|
+
opacity: "opacity";
|
|
1726
|
+
trimStart: "trimStart";
|
|
1727
|
+
trimEnd: "trimEnd";
|
|
1728
|
+
text: "text";
|
|
1729
|
+
fontSize: "fontSize";
|
|
1730
|
+
fill: "fill";
|
|
1731
|
+
letterSpacing: "letterSpacing";
|
|
1732
|
+
padding: "padding";
|
|
1733
|
+
strokeWidth: "strokeWidth";
|
|
1734
|
+
borderColor: "borderColor";
|
|
1735
|
+
borderWidth: "borderWidth";
|
|
1727
1736
|
volume: "volume";
|
|
1737
|
+
color: "color";
|
|
1738
|
+
offset: "offset";
|
|
1728
1739
|
hidden: "hidden";
|
|
1729
1740
|
muted: "muted";
|
|
1730
1741
|
gap: "gap";
|
|
1731
|
-
padding: "padding";
|
|
1732
1742
|
borderRadius: "borderRadius";
|
|
1733
|
-
fontSize: "fontSize";
|
|
1734
|
-
text: "text";
|
|
1735
|
-
color: "color";
|
|
1736
|
-
letterSpacing: "letterSpacing";
|
|
1737
|
-
trimStart: "trimStart";
|
|
1738
|
-
trimEnd: "trimEnd";
|
|
1739
1743
|
trimOffset: "trimOffset";
|
|
1740
|
-
strokeWidth: "strokeWidth";
|
|
1741
1744
|
strokeDashOffset: "strokeDashOffset";
|
|
1742
1745
|
cornerRadius: "cornerRadius";
|
|
1743
1746
|
starInnerRadiusRatio: "starInnerRadiusRatio";
|
|
1744
1747
|
fillColor: "fillColor";
|
|
1745
1748
|
strokeColor: "strokeColor";
|
|
1746
|
-
borderColor: "borderColor";
|
|
1747
|
-
borderWidth: "borderWidth";
|
|
1748
1749
|
motionBlurShutter: "motionBlurShutter";
|
|
1749
1750
|
rangeStart: "rangeStart";
|
|
1750
1751
|
rangeEnd: "rangeEnd";
|
|
1751
|
-
offset: "offset";
|
|
1752
1752
|
animatorRangeStart: "animatorRangeStart";
|
|
1753
1753
|
animatorRangeEnd: "animatorRangeEnd";
|
|
1754
1754
|
animatorOffset: "animatorOffset";
|
|
@@ -1819,6 +1819,7 @@ declare const MaterialTypeSchema: z.ZodEnum<{
|
|
|
1819
1819
|
type MaterialType = z.infer<typeof MaterialTypeSchema>;
|
|
1820
1820
|
declare const EaseRefSchema: z.ZodObject<{
|
|
1821
1821
|
name: z.ZodEnum<{
|
|
1822
|
+
bounce: "bounce";
|
|
1822
1823
|
none: "none";
|
|
1823
1824
|
power1: "power1";
|
|
1824
1825
|
power2: "power2";
|
|
@@ -1828,14 +1829,13 @@ declare const EaseRefSchema: z.ZodObject<{
|
|
|
1828
1829
|
expo: "expo";
|
|
1829
1830
|
back: "back";
|
|
1830
1831
|
elastic: "elastic";
|
|
1831
|
-
bounce: "bounce";
|
|
1832
1832
|
spring: "spring";
|
|
1833
1833
|
cubic: "cubic";
|
|
1834
1834
|
hold: "hold";
|
|
1835
1835
|
}>;
|
|
1836
1836
|
dir: z.ZodEnum<{
|
|
1837
|
-
in: "in";
|
|
1838
1837
|
out: "out";
|
|
1838
|
+
in: "in";
|
|
1839
1839
|
inOut: "inOut";
|
|
1840
1840
|
}>;
|
|
1841
1841
|
params: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
|
|
@@ -1847,6 +1847,7 @@ declare const KeyframeSchema: z.ZodObject<{
|
|
|
1847
1847
|
value: z.ZodUnion<readonly [z.ZodNumber, z.ZodBoolean, z.ZodString]>;
|
|
1848
1848
|
ease: z.ZodOptional<z.ZodObject<{
|
|
1849
1849
|
name: z.ZodEnum<{
|
|
1850
|
+
bounce: "bounce";
|
|
1850
1851
|
none: "none";
|
|
1851
1852
|
power1: "power1";
|
|
1852
1853
|
power2: "power2";
|
|
@@ -1856,14 +1857,13 @@ declare const KeyframeSchema: z.ZodObject<{
|
|
|
1856
1857
|
expo: "expo";
|
|
1857
1858
|
back: "back";
|
|
1858
1859
|
elastic: "elastic";
|
|
1859
|
-
bounce: "bounce";
|
|
1860
1860
|
spring: "spring";
|
|
1861
1861
|
cubic: "cubic";
|
|
1862
1862
|
hold: "hold";
|
|
1863
1863
|
}>;
|
|
1864
1864
|
dir: z.ZodEnum<{
|
|
1865
|
-
in: "in";
|
|
1866
1865
|
out: "out";
|
|
1866
|
+
in: "in";
|
|
1867
1867
|
inOut: "inOut";
|
|
1868
1868
|
}>;
|
|
1869
1869
|
params: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
|
|
@@ -1920,39 +1920,39 @@ type TrackSource = z.infer<typeof RawTrackSourceSchema>;
|
|
|
1920
1920
|
declare const AnimationTrackSchema: z.ZodObject<{
|
|
1921
1921
|
id: z.ZodString;
|
|
1922
1922
|
prop: z.ZodEnum<{
|
|
1923
|
-
fill: "fill";
|
|
1924
1923
|
x: "x";
|
|
1925
1924
|
y: "y";
|
|
1926
|
-
scale: "scale";
|
|
1927
|
-
rotation: "rotation";
|
|
1928
|
-
opacity: "opacity";
|
|
1929
1925
|
width: "width";
|
|
1930
1926
|
height: "height";
|
|
1927
|
+
rotation: "rotation";
|
|
1928
|
+
scale: "scale";
|
|
1929
|
+
opacity: "opacity";
|
|
1930
|
+
trimStart: "trimStart";
|
|
1931
|
+
trimEnd: "trimEnd";
|
|
1932
|
+
text: "text";
|
|
1933
|
+
fontSize: "fontSize";
|
|
1934
|
+
fill: "fill";
|
|
1935
|
+
letterSpacing: "letterSpacing";
|
|
1936
|
+
padding: "padding";
|
|
1937
|
+
strokeWidth: "strokeWidth";
|
|
1938
|
+
borderColor: "borderColor";
|
|
1939
|
+
borderWidth: "borderWidth";
|
|
1931
1940
|
volume: "volume";
|
|
1941
|
+
color: "color";
|
|
1942
|
+
offset: "offset";
|
|
1932
1943
|
hidden: "hidden";
|
|
1933
1944
|
muted: "muted";
|
|
1934
1945
|
gap: "gap";
|
|
1935
|
-
padding: "padding";
|
|
1936
1946
|
borderRadius: "borderRadius";
|
|
1937
|
-
fontSize: "fontSize";
|
|
1938
|
-
text: "text";
|
|
1939
|
-
color: "color";
|
|
1940
|
-
letterSpacing: "letterSpacing";
|
|
1941
|
-
trimStart: "trimStart";
|
|
1942
|
-
trimEnd: "trimEnd";
|
|
1943
1947
|
trimOffset: "trimOffset";
|
|
1944
|
-
strokeWidth: "strokeWidth";
|
|
1945
1948
|
strokeDashOffset: "strokeDashOffset";
|
|
1946
1949
|
cornerRadius: "cornerRadius";
|
|
1947
1950
|
starInnerRadiusRatio: "starInnerRadiusRatio";
|
|
1948
1951
|
fillColor: "fillColor";
|
|
1949
1952
|
strokeColor: "strokeColor";
|
|
1950
|
-
borderColor: "borderColor";
|
|
1951
|
-
borderWidth: "borderWidth";
|
|
1952
1953
|
motionBlurShutter: "motionBlurShutter";
|
|
1953
1954
|
rangeStart: "rangeStart";
|
|
1954
1955
|
rangeEnd: "rangeEnd";
|
|
1955
|
-
offset: "offset";
|
|
1956
1956
|
animatorRangeStart: "animatorRangeStart";
|
|
1957
1957
|
animatorRangeEnd: "animatorRangeEnd";
|
|
1958
1958
|
animatorOffset: "animatorOffset";
|
|
@@ -2052,6 +2052,7 @@ declare const AnimationTrackSchema: z.ZodObject<{
|
|
|
2052
2052
|
value: z.ZodUnion<readonly [z.ZodNumber, z.ZodBoolean, z.ZodString]>;
|
|
2053
2053
|
ease: z.ZodOptional<z.ZodObject<{
|
|
2054
2054
|
name: z.ZodEnum<{
|
|
2055
|
+
bounce: "bounce";
|
|
2055
2056
|
none: "none";
|
|
2056
2057
|
power1: "power1";
|
|
2057
2058
|
power2: "power2";
|
|
@@ -2061,14 +2062,13 @@ declare const AnimationTrackSchema: z.ZodObject<{
|
|
|
2061
2062
|
expo: "expo";
|
|
2062
2063
|
back: "back";
|
|
2063
2064
|
elastic: "elastic";
|
|
2064
|
-
bounce: "bounce";
|
|
2065
2065
|
spring: "spring";
|
|
2066
2066
|
cubic: "cubic";
|
|
2067
2067
|
hold: "hold";
|
|
2068
2068
|
}>;
|
|
2069
2069
|
dir: z.ZodEnum<{
|
|
2070
|
-
in: "in";
|
|
2071
2070
|
out: "out";
|
|
2071
|
+
in: "in";
|
|
2072
2072
|
inOut: "inOut";
|
|
2073
2073
|
}>;
|
|
2074
2074
|
params: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
|
|
@@ -2093,39 +2093,39 @@ declare const LayerAnimationSchema: z.ZodObject<{
|
|
|
2093
2093
|
tracks: z.ZodArray<z.ZodObject<{
|
|
2094
2094
|
id: z.ZodString;
|
|
2095
2095
|
prop: z.ZodEnum<{
|
|
2096
|
-
fill: "fill";
|
|
2097
2096
|
x: "x";
|
|
2098
2097
|
y: "y";
|
|
2099
|
-
scale: "scale";
|
|
2100
|
-
rotation: "rotation";
|
|
2101
|
-
opacity: "opacity";
|
|
2102
2098
|
width: "width";
|
|
2103
2099
|
height: "height";
|
|
2100
|
+
rotation: "rotation";
|
|
2101
|
+
scale: "scale";
|
|
2102
|
+
opacity: "opacity";
|
|
2103
|
+
trimStart: "trimStart";
|
|
2104
|
+
trimEnd: "trimEnd";
|
|
2105
|
+
text: "text";
|
|
2106
|
+
fontSize: "fontSize";
|
|
2107
|
+
fill: "fill";
|
|
2108
|
+
letterSpacing: "letterSpacing";
|
|
2109
|
+
padding: "padding";
|
|
2110
|
+
strokeWidth: "strokeWidth";
|
|
2111
|
+
borderColor: "borderColor";
|
|
2112
|
+
borderWidth: "borderWidth";
|
|
2104
2113
|
volume: "volume";
|
|
2114
|
+
color: "color";
|
|
2115
|
+
offset: "offset";
|
|
2105
2116
|
hidden: "hidden";
|
|
2106
2117
|
muted: "muted";
|
|
2107
2118
|
gap: "gap";
|
|
2108
|
-
padding: "padding";
|
|
2109
2119
|
borderRadius: "borderRadius";
|
|
2110
|
-
fontSize: "fontSize";
|
|
2111
|
-
text: "text";
|
|
2112
|
-
color: "color";
|
|
2113
|
-
letterSpacing: "letterSpacing";
|
|
2114
|
-
trimStart: "trimStart";
|
|
2115
|
-
trimEnd: "trimEnd";
|
|
2116
2120
|
trimOffset: "trimOffset";
|
|
2117
|
-
strokeWidth: "strokeWidth";
|
|
2118
2121
|
strokeDashOffset: "strokeDashOffset";
|
|
2119
2122
|
cornerRadius: "cornerRadius";
|
|
2120
2123
|
starInnerRadiusRatio: "starInnerRadiusRatio";
|
|
2121
2124
|
fillColor: "fillColor";
|
|
2122
2125
|
strokeColor: "strokeColor";
|
|
2123
|
-
borderColor: "borderColor";
|
|
2124
|
-
borderWidth: "borderWidth";
|
|
2125
2126
|
motionBlurShutter: "motionBlurShutter";
|
|
2126
2127
|
rangeStart: "rangeStart";
|
|
2127
2128
|
rangeEnd: "rangeEnd";
|
|
2128
|
-
offset: "offset";
|
|
2129
2129
|
animatorRangeStart: "animatorRangeStart";
|
|
2130
2130
|
animatorRangeEnd: "animatorRangeEnd";
|
|
2131
2131
|
animatorOffset: "animatorOffset";
|
|
@@ -2225,6 +2225,7 @@ declare const LayerAnimationSchema: z.ZodObject<{
|
|
|
2225
2225
|
value: z.ZodUnion<readonly [z.ZodNumber, z.ZodBoolean, z.ZodString]>;
|
|
2226
2226
|
ease: z.ZodOptional<z.ZodObject<{
|
|
2227
2227
|
name: z.ZodEnum<{
|
|
2228
|
+
bounce: "bounce";
|
|
2228
2229
|
none: "none";
|
|
2229
2230
|
power1: "power1";
|
|
2230
2231
|
power2: "power2";
|
|
@@ -2234,14 +2235,13 @@ declare const LayerAnimationSchema: z.ZodObject<{
|
|
|
2234
2235
|
expo: "expo";
|
|
2235
2236
|
back: "back";
|
|
2236
2237
|
elastic: "elastic";
|
|
2237
|
-
bounce: "bounce";
|
|
2238
2238
|
spring: "spring";
|
|
2239
2239
|
cubic: "cubic";
|
|
2240
2240
|
hold: "hold";
|
|
2241
2241
|
}>;
|
|
2242
2242
|
dir: z.ZodEnum<{
|
|
2243
|
-
in: "in";
|
|
2244
2243
|
out: "out";
|
|
2244
|
+
in: "in";
|
|
2245
2245
|
inOut: "inOut";
|
|
2246
2246
|
}>;
|
|
2247
2247
|
params: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
|
|
@@ -2722,8 +2722,8 @@ declare const CompositorProgramSchema: z.ZodObject<{
|
|
|
2722
2722
|
volume: z.ZodDefault<z.ZodNumber>;
|
|
2723
2723
|
fps: z.ZodDefault<z.ZodNumber>;
|
|
2724
2724
|
mode: z.ZodDefault<z.ZodEnum<{
|
|
2725
|
-
Video: "Video";
|
|
2726
2725
|
Image: "Image";
|
|
2726
|
+
Video: "Video";
|
|
2727
2727
|
}>>;
|
|
2728
2728
|
antialias3d: z.ZodOptional<z.ZodBoolean>;
|
|
2729
2729
|
layout: z.ZodDefault<z.ZodArray<z.ZodType<LayoutNode, unknown, z.core.$ZodTypeInternals<LayoutNode, unknown>>>>;
|