@framefields/node-compositor 0.0.0-stage → 2.0.3

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.
Files changed (40) hide show
  1. package/.turbo/turbo-build.log +22 -0
  2. package/.turbo/turbo-test.log +21 -0
  3. package/CHANGELOG.md +34 -0
  4. package/LICENCE +202 -0
  5. package/SKILL.md +370 -0
  6. package/dist/index-B0ir9Z7o.d.mts +139 -0
  7. package/dist/index-B0ir9Z7o.d.mts.map +1 -0
  8. package/dist/index.d.mts +230 -0
  9. package/dist/index.d.mts.map +1 -0
  10. package/dist/index.mjs +674 -0
  11. package/dist/index.mjs.map +1 -0
  12. package/dist/renderer.d.mts +2 -0
  13. package/dist/renderer.mjs +3 -0
  14. package/dist/renderers-DoYYCzgA.mjs +3326 -0
  15. package/dist/renderers-DoYYCzgA.mjs.map +1 -0
  16. package/package.json +51 -3
  17. package/src/index.ts +2 -0
  18. package/src/renderers/audio-processor.ts +123 -0
  19. package/src/renderers/container-bg.test.ts +22 -0
  20. package/src/renderers/container-bg.ts +15 -0
  21. package/src/renderers/index.ts +9 -0
  22. package/src/renderers/transform.test.ts +120 -0
  23. package/src/renderers/transform.ts +101 -0
  24. package/src/renderers/transform3d.test.ts +290 -0
  25. package/src/renderers/transform3d.ts +428 -0
  26. package/src/renderers/webgpu-renderer.ts +4038 -0
  27. package/src/shared/audio-reactive.test.ts +224 -0
  28. package/src/shared/bezier-solver.test.ts +92 -0
  29. package/src/shared/bezier-solver.ts +257 -0
  30. package/src/shared/compiler.test.ts +1309 -0
  31. package/src/shared/compiler.ts +996 -0
  32. package/src/shared/config.ts +44 -0
  33. package/src/shared/index.ts +3 -0
  34. package/src/shared/kinetic-typography.test.ts +138 -0
  35. package/src/shared/presets.test.ts +217 -0
  36. package/src/shared/presets.ts +644 -0
  37. package/src/shared/processor.ts +105 -0
  38. package/tsconfig.json +13 -0
  39. package/tsdown.config.ts +13 -0
  40. package/README.md +0 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/shared/config.ts","../src/shared/presets.ts"],"sourcesContent":["import {\n\ttype CompositorProgramConfig,\n\tCompositorProgramSchema,\n} from \"@framefields/compositions/program\";\nimport { MediaMetadataSchema } from \"@framefields/core\";\nimport { ImageResultSchema, VideoResultSchema } from \"@framefields/node-sdk\";\nimport { z } from \"zod\";\n\n/**\n * v2 config — THE document (spec: SKILL.md).\n * No `layers`, no `layerUpdates`, no aliases. The node config IS the\n * composition program: strict zod, validated by the E-code pre-parse scan\n * in `@framefields/compositions/program/validate`.\n */\nexport const CompositorNodeConfigSchema = CompositorProgramSchema;\nexport type CompositorNodeConfig = CompositorProgramConfig;\n\n/** Data types accepted by the variable composer inputs. */\nexport const VariableInputDataTypes = [\n\t\"Text\",\n\t\"Image\",\n\t\"Video\",\n\t\"Audio\",\n\t\"Caption\",\n\t\"SVG\",\n\t\"GIF\",\n\t\"Lottie\",\n\t\"Signal\",\n] as const;\nexport type VariableInputDataType = (typeof VariableInputDataTypes)[number];\n\n/** The Compositor op framing (used in the render tree, per processCompositor). */\nexport const CompositorOperationSchema = CompositorNodeConfigSchema.extend({\n\top: z.literal(\"Compositor\"),\n\tdataType: z.enum([\"Video\", \"Image\"]).optional(),\n\tmetadata: MediaMetadataSchema.optional(),\n}).strict();\n\nexport type CompositorOperation = z.infer<typeof CompositorOperationSchema>;\n\nexport const CompositorResultSchema = z.union([\n\tVideoResultSchema,\n\tImageResultSchema,\n]);\n","import type {\n\tAnimatableProp,\n\tAnimationTrack,\n\tEaseRef,\n\tKeyframe,\n} from \"@framefields/compositions/program\";\n\nexport interface LayerBase {\n\tx: number;\n\ty: number;\n\tscale: number;\n\trotation: number;\n\topacity: number;\n\twidth?: number;\n\theight?: number;\n\tdurationFrames: number;\n}\n\nexport interface PresetChip {\n\tgroupId: string;\n\tpresetType: string;\n\tkind: \"entrance\" | \"exit\" | \"emphasis\";\n\tlabel: string;\n\tdurationFrames: number;\n\tease?: EaseRef;\n}\n\nfunction generateId() {\n\treturn Math.random().toString(36).substring(2, 11);\n}\n\nexport function getPresetDetails(presetType: string): {\n\tkind: \"entrance\" | \"exit\" | \"emphasis\";\n\tlabel: string;\n} {\n\tswitch (presetType) {\n\t\tcase \"fade-in\":\n\t\t\treturn { kind: \"entrance\", label: \"Fade In\" };\n\t\tcase \"fade-out\":\n\t\t\treturn { kind: \"exit\", label: \"Fade Out\" };\n\t\tcase \"typewriter\":\n\t\t\treturn { kind: \"entrance\", label: \"Typewriter\" };\n\t\tcase \"word-reveal\":\n\t\t\treturn { kind: \"entrance\", label: \"Word Reveal\" };\n\t\tcase \"line-reveal\":\n\t\t\treturn { kind: \"entrance\", label: \"Line Reveal\" };\n\t\tcase \"karaoke\":\n\t\t\treturn { kind: \"entrance\", label: \"Karaoke\" };\n\t\tcase \"slide-in-left\":\n\t\t\treturn { kind: \"entrance\", label: \"Slide In Left\" };\n\t\tcase \"slide-in-right\":\n\t\t\treturn { kind: \"entrance\", label: \"Slide In Right\" };\n\t\tcase \"slide-in-top\":\n\t\t\treturn { kind: \"entrance\", label: \"Slide In Top\" };\n\t\tcase \"slide-in-bottom\":\n\t\t\treturn { kind: \"entrance\", label: \"Slide In Bottom\" };\n\t\tcase \"slide-out-left\":\n\t\t\treturn { kind: \"exit\", label: \"Slide Out Left\" };\n\t\tcase \"slide-out-right\":\n\t\t\treturn { kind: \"exit\", label: \"Slide Out Right\" };\n\t\tcase \"slide-out-top\":\n\t\t\treturn { kind: \"exit\", label: \"Slide Out Top\" };\n\t\tcase \"slide-out-bottom\":\n\t\t\treturn { kind: \"exit\", label: \"Slide Out Bottom\" };\n\t\tcase \"zoom-in\":\n\t\t\treturn { kind: \"entrance\", label: \"Zoom In\" };\n\t\tcase \"zoom-out\":\n\t\t\treturn { kind: \"exit\", label: \"Zoom Out\" };\n\t\tcase \"bounce-in\":\n\t\t\treturn { kind: \"entrance\", label: \"Bounce In\" };\n\t\tcase \"rotate-cw\":\n\t\t\treturn { kind: \"emphasis\", label: \"Rotate Clockwise\" };\n\t\tcase \"rotate-ccw\":\n\t\t\treturn { kind: \"emphasis\", label: \"Rotate Counter-Clockwise\" };\n\t\tcase \"pulse\":\n\t\t\treturn { kind: \"emphasis\", label: \"Pulse\" };\n\t\tcase \"shake\":\n\t\t\treturn { kind: \"emphasis\", label: \"Shake\" };\n\t\tcase \"wobble\":\n\t\t\treturn { kind: \"emphasis\", label: \"Wobble\" };\n\t\tcase \"bounce\":\n\t\t\treturn { kind: \"emphasis\", label: \"Bounce\" };\n\t\tcase \"tracking-expand\":\n\t\t\treturn { kind: \"entrance\", label: \"Tracking Expand\" };\n\t\tcase \"blur-reveal\":\n\t\t\treturn { kind: \"entrance\", label: \"Blur Reveal\" };\n\t\tcase \"kinetic-wave\":\n\t\t\treturn { kind: \"emphasis\", label: \"Kinetic Wave\" };\n\t\tcase \"slice-wipe\":\n\t\t\treturn { kind: \"entrance\", label: \"Slice Wipe\" };\n\t\tdefault:\n\t\t\treturn { kind: \"emphasis\", label: presetType };\n\t}\n}\n\nexport function chipsForLayer(\n\tlayer:\n\t\t| {\n\t\t\t\tanimation?: { tracks?: AnimationTrack[] };\n\t\t }\n\t\t| null\n\t\t| undefined,\n): PresetChip[] {\n\tconst groups: Record<\n\t\tstring,\n\t\t{ minFrame: number; maxFrame: number; ease?: EaseRef; presetType?: string }\n\t> = {};\n\tconst tracks = layer?.animation?.tracks ?? [];\n\n\tfor (const track of tracks) {\n\t\tfor (const kf of track.keyframes) {\n\t\t\tif (kf.presetGroupId) {\n\t\t\t\tif (!groups[kf.presetGroupId]) {\n\t\t\t\t\tgroups[kf.presetGroupId] = {\n\t\t\t\t\t\tminFrame: kf.frame,\n\t\t\t\t\t\tmaxFrame: kf.frame,\n\t\t\t\t\t\tease: kf.ease,\n\t\t\t\t\t\tpresetType: kf.presetType,\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tconst g = groups[kf.presetGroupId];\n\t\t\t\t\tif (kf.frame < g.minFrame) g.minFrame = kf.frame;\n\t\t\t\t\tif (kf.frame > g.maxFrame) {\n\t\t\t\t\t\tg.maxFrame = kf.frame;\n\t\t\t\t\t\tif (kf.ease) g.ease = kf.ease;\n\t\t\t\t\t}\n\t\t\t\t\tif (kf.presetType && !g.presetType) {\n\t\t\t\t\t\tg.presetType = kf.presetType;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tconst chips: PresetChip[] = [];\n\tfor (const [groupId, data] of Object.entries(groups)) {\n\t\tconst presetType =\n\t\t\tdata.presetType ||\n\t\t\t(groupId.includes(\"_\")\n\t\t\t\t? groupId.slice(0, groupId.lastIndexOf(\"_\"))\n\t\t\t\t: groupId) ||\n\t\t\t\"\";\n\t\tconst { kind, label } = getPresetDetails(presetType);\n\t\tchips.push({\n\t\t\tgroupId,\n\t\t\tpresetType,\n\t\t\tkind,\n\t\t\tlabel,\n\t\t\tdurationFrames: data.maxFrame - data.minFrame,\n\t\t\tease: data.ease,\n\t\t});\n\t}\n\n\treturn chips;\n}\n\nexport function materializePreset(\n\tlayerBase: LayerBase,\n\tpresetType: string,\n\toptions: {\n\t\twidth: number;\n\t\theight: number;\n\t\tfps: number;\n\t\tpresetGroupId?: string;\n\t\tdurationFrames?: number;\n\t},\n): AnimationTrack[] {\n\tconst groupId = options.presetGroupId ?? `${presetType}_${generateId()}`;\n\tconst width = options.width;\n\tconst height = options.height;\n\tconst layerDuration = layerBase.durationFrames;\n\tconst defaultDuration = options.durationFrames ?? options.fps; // Default 1s or custom duration\n\n\tlet prop: AnimatableProp;\n\tlet keyframes: Keyframe[] = [];\n\tlet repeat: number | undefined;\n\tlet yoyo: boolean | undefined;\n\n\tswitch (presetType) {\n\t\tcase \"fade-in\": {\n\t\t\tprop = \"opacity\";\n\t\t\tkeyframes = [\n\t\t\t\t{ id: generateId(), frame: 0, value: 0, presetGroupId: groupId },\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: defaultDuration,\n\t\t\t\t\tvalue: layerBase.opacity,\n\t\t\t\t\tease: { name: \"none\", dir: \"out\" },\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t];\n\t\t\tbreak;\n\t\t}\n\t\tcase \"fade-out\": {\n\t\t\tprop = \"opacity\";\n\t\t\tkeyframes = [\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: Math.max(0, layerDuration - defaultDuration),\n\t\t\t\t\tvalue: layerBase.opacity,\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: layerDuration,\n\t\t\t\t\tvalue: 0,\n\t\t\t\t\tease: { name: \"none\", dir: \"out\" },\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t];\n\t\t\tbreak;\n\t\t}\n\t\tcase \"slide-in-left\": {\n\t\t\tprop = \"x\";\n\t\t\tkeyframes = [\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: 0,\n\t\t\t\t\tvalue: layerBase.x - width,\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: defaultDuration,\n\t\t\t\t\tvalue: layerBase.x,\n\t\t\t\t\tease: { name: \"none\", dir: \"out\" },\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t];\n\t\t\tbreak;\n\t\t}\n\t\tcase \"slide-in-right\": {\n\t\t\tprop = \"x\";\n\t\t\tkeyframes = [\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: 0,\n\t\t\t\t\tvalue: layerBase.x + width,\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: defaultDuration,\n\t\t\t\t\tvalue: layerBase.x,\n\t\t\t\t\tease: { name: \"none\", dir: \"out\" },\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t];\n\t\t\tbreak;\n\t\t}\n\t\tcase \"slide-in-top\": {\n\t\t\tprop = \"y\";\n\t\t\tkeyframes = [\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: 0,\n\t\t\t\t\tvalue: layerBase.y - height,\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: defaultDuration,\n\t\t\t\t\tvalue: layerBase.y,\n\t\t\t\t\tease: { name: \"none\", dir: \"out\" },\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t];\n\t\t\tbreak;\n\t\t}\n\t\tcase \"slide-in-bottom\": {\n\t\t\tprop = \"y\";\n\t\t\tkeyframes = [\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: 0,\n\t\t\t\t\tvalue: layerBase.y + height,\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: defaultDuration,\n\t\t\t\t\tvalue: layerBase.y,\n\t\t\t\t\tease: { name: \"none\", dir: \"out\" },\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t];\n\t\t\tbreak;\n\t\t}\n\t\tcase \"slide-out-left\": {\n\t\t\tprop = \"x\";\n\t\t\tkeyframes = [\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: Math.max(0, layerDuration - defaultDuration),\n\t\t\t\t\tvalue: layerBase.x,\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: layerDuration,\n\t\t\t\t\tvalue: layerBase.x - width,\n\t\t\t\t\tease: { name: \"none\", dir: \"out\" },\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t];\n\t\t\tbreak;\n\t\t}\n\t\tcase \"slide-out-right\": {\n\t\t\tprop = \"x\";\n\t\t\tkeyframes = [\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: Math.max(0, layerDuration - defaultDuration),\n\t\t\t\t\tvalue: layerBase.x,\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: layerDuration,\n\t\t\t\t\tvalue: layerBase.x + width,\n\t\t\t\t\tease: { name: \"none\", dir: \"out\" },\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t];\n\t\t\tbreak;\n\t\t}\n\t\tcase \"slide-out-top\": {\n\t\t\tprop = \"y\";\n\t\t\tkeyframes = [\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: Math.max(0, layerDuration - defaultDuration),\n\t\t\t\t\tvalue: layerBase.y,\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: layerDuration,\n\t\t\t\t\tvalue: layerBase.y - height,\n\t\t\t\t\tease: { name: \"none\", dir: \"out\" },\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t];\n\t\t\tbreak;\n\t\t}\n\t\tcase \"slide-out-bottom\": {\n\t\t\tprop = \"y\";\n\t\t\tkeyframes = [\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: Math.max(0, layerDuration - defaultDuration),\n\t\t\t\t\tvalue: layerBase.y,\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: layerDuration,\n\t\t\t\t\tvalue: layerBase.y + height,\n\t\t\t\t\tease: { name: \"none\", dir: \"out\" },\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t];\n\t\t\tbreak;\n\t\t}\n\t\tcase \"zoom-in\": {\n\t\t\tprop = \"scale\";\n\t\t\tkeyframes = [\n\t\t\t\t{ id: generateId(), frame: 0, value: 0, presetGroupId: groupId },\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: defaultDuration,\n\t\t\t\t\tvalue: layerBase.scale,\n\t\t\t\t\tease: { name: \"none\", dir: \"out\" },\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t];\n\t\t\tbreak;\n\t\t}\n\t\tcase \"zoom-out\": {\n\t\t\tprop = \"scale\";\n\t\t\tkeyframes = [\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: Math.max(0, layerDuration - defaultDuration),\n\t\t\t\t\tvalue: layerBase.scale,\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: layerDuration,\n\t\t\t\t\tvalue: 0,\n\t\t\t\t\tease: { name: \"none\", dir: \"out\" },\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t];\n\t\t\tbreak;\n\t\t}\n\t\tcase \"bounce-in\": {\n\t\t\tprop = \"scale\";\n\t\t\tkeyframes = [\n\t\t\t\t{ id: generateId(), frame: 0, value: 0, presetGroupId: groupId },\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: defaultDuration,\n\t\t\t\t\tvalue: layerBase.scale,\n\t\t\t\t\tease: { name: \"back\", dir: \"out\", params: [1.7] },\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t];\n\t\t\tbreak;\n\t\t}\n\t\tcase \"rotate-cw\": {\n\t\t\tprop = \"rotation\";\n\t\t\tkeyframes = [\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: 0,\n\t\t\t\t\tvalue: layerBase.rotation,\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: defaultDuration,\n\t\t\t\t\tvalue: layerBase.rotation + 360,\n\t\t\t\t\tease: { name: \"none\", dir: \"out\" },\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t];\n\t\t\trepeat = 1;\n\t\t\tbreak;\n\t\t}\n\t\tcase \"rotate-ccw\": {\n\t\t\tprop = \"rotation\";\n\t\t\tkeyframes = [\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: 0,\n\t\t\t\t\tvalue: layerBase.rotation,\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: defaultDuration,\n\t\t\t\t\tvalue: layerBase.rotation - 360,\n\t\t\t\t\tease: { name: \"none\", dir: \"out\" },\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t];\n\t\t\trepeat = 1;\n\t\t\tbreak;\n\t\t}\n\t\tcase \"pulse\": {\n\t\t\tprop = \"scale\";\n\t\t\tconst halfDur = Math.max(1, Math.round(defaultDuration / 2));\n\t\t\tkeyframes = [\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: 0,\n\t\t\t\t\tvalue: layerBase.scale,\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: halfDur,\n\t\t\t\t\tvalue: layerBase.scale * 1.1,\n\t\t\t\t\tease: { name: \"none\", dir: \"out\" },\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t];\n\t\t\trepeat = -1;\n\t\t\tyoyo = true;\n\t\t\tbreak;\n\t\t}\n\t\tcase \"shake\": {\n\t\t\tprop = \"x\";\n\t\t\tconst segmentDur = Math.max(1, Math.round(defaultDuration / 10));\n\t\t\tkeyframes = [\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: 0,\n\t\t\t\t\tvalue: layerBase.x,\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: segmentDur,\n\t\t\t\t\tvalue: layerBase.x + 20,\n\t\t\t\t\tease: { name: \"sine\", dir: \"inOut\" },\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t];\n\t\t\trepeat = 9;\n\t\t\tyoyo = true;\n\t\t\tbreak;\n\t\t}\n\t\tcase \"wobble\": {\n\t\t\tprop = \"rotation\";\n\t\t\tconst segmentDur = Math.max(1, Math.round(defaultDuration / 6));\n\t\t\tkeyframes = [\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: 0,\n\t\t\t\t\tvalue: layerBase.rotation,\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: segmentDur,\n\t\t\t\t\tvalue: layerBase.rotation + 15,\n\t\t\t\t\tease: { name: \"sine\", dir: \"inOut\" },\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t];\n\t\t\trepeat = 9;\n\t\t\tyoyo = true;\n\t\t\tbreak;\n\t\t}\n\t\tcase \"bounce\": {\n\t\t\tprop = \"y\";\n\t\t\tkeyframes = [\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: 0,\n\t\t\t\t\tvalue: layerBase.y - 100,\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: defaultDuration,\n\t\t\t\t\tvalue: layerBase.y,\n\t\t\t\t\tease: { name: \"bounce\", dir: \"out\" },\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t];\n\t\t\tbreak;\n\t\t}\n\t\tcase \"typewriter\":\n\t\tcase \"word-reveal\":\n\t\tcase \"line-reveal\":\n\t\tcase \"karaoke\": {\n\t\t\tprop = \"text\";\n\t\t\tkeyframes = [\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: 0,\n\t\t\t\t\tvalue: 0,\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t\tpresetType,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: defaultDuration,\n\t\t\t\t\tvalue: 1,\n\t\t\t\t\tease: { name: \"none\", dir: \"out\" },\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t\tpresetType,\n\t\t\t\t},\n\t\t\t];\n\t\t\tbreak;\n\t\t}\n\t\tcase \"tracking-expand\": {\n\t\t\tprop = \"letterSpacing\";\n\t\t\tkeyframes = [\n\t\t\t\t{ id: generateId(), frame: 0, value: 0, presetGroupId: groupId },\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: defaultDuration,\n\t\t\t\t\tvalue: 24,\n\t\t\t\t\tease: { name: \"sine\", dir: \"out\" },\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t];\n\t\t\tbreak;\n\t\t}\n\t\tcase \"blur-reveal\": {\n\t\t\tprop = \"opacity\";\n\t\t\tkeyframes = [\n\t\t\t\t{ id: generateId(), frame: 0, value: 0, presetGroupId: groupId },\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: defaultDuration,\n\t\t\t\t\tvalue: layerBase.opacity,\n\t\t\t\t\tease: { name: \"power1\", dir: \"out\" },\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t];\n\t\t\tbreak;\n\t\t}\n\t\tcase \"kinetic-wave\": {\n\t\t\tprop = \"y\";\n\t\t\tconst halfDur = Math.max(1, Math.round(defaultDuration / 2));\n\t\t\tkeyframes = [\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: 0,\n\t\t\t\t\tvalue: layerBase.y,\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: halfDur,\n\t\t\t\t\tvalue: layerBase.y - 24,\n\t\t\t\t\tease: { name: \"sine\", dir: \"inOut\" },\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t];\n\t\t\trepeat = 3;\n\t\t\tyoyo = true;\n\t\t\tbreak;\n\t\t}\n\t\tcase \"slice-wipe\": {\n\t\t\tprop = \"x\";\n\t\t\tconst offset = layerBase.width ?? 300;\n\t\t\tkeyframes = [\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: 0,\n\t\t\t\t\tvalue: layerBase.x - offset,\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tframe: defaultDuration,\n\t\t\t\t\tvalue: layerBase.x,\n\t\t\t\t\tease: { name: \"expo\", dir: \"out\" },\n\t\t\t\t\tpresetGroupId: groupId,\n\t\t\t\t},\n\t\t\t];\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t\tthrow new Error(`Unsupported preset type: ${presetType}`);\n\t}\n\n\treturn [\n\t\t{\n\t\t\tid: generateId(),\n\t\t\tprop,\n\t\t\tkeyframes: keyframes.map((kf) => ({ ...kf, presetType })),\n\t\t\t...(repeat !== undefined && { repeat }),\n\t\t\t...(yoyo !== undefined && { yoyo }),\n\t\t},\n\t];\n}\n"],"mappings":";;;;;;;;;;;;;AAcA,MAAa,6BAA6B;;AAI1C,MAAa,yBAAyB;CACrC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;;AAID,MAAa,4BAA4B,2BAA2B,OAAO;CAC1E,IAAI,EAAE,QAAQ,aAAa;CAC3B,UAAU,EAAE,KAAK,CAAC,SAAS,QAAQ,CAAC,CAAC,UAAU;CAC/C,UAAU,oBAAoB,UAAU;CACxC,CAAC,CAAC,QAAQ;AAIX,MAAa,yBAAyB,EAAE,MAAM,CAC7C,mBACA,kBACA,CAAC;;;;AChBF,SAAS,aAAa;AACrB,QAAO,KAAK,QAAQ,CAAC,SAAS,GAAG,CAAC,UAAU,GAAG,GAAG;;AAGnD,SAAgB,iBAAiB,YAG/B;AACD,SAAQ,YAAR;EACC,KAAK,UACJ,QAAO;GAAE,MAAM;GAAY,OAAO;GAAW;EAC9C,KAAK,WACJ,QAAO;GAAE,MAAM;GAAQ,OAAO;GAAY;EAC3C,KAAK,aACJ,QAAO;GAAE,MAAM;GAAY,OAAO;GAAc;EACjD,KAAK,cACJ,QAAO;GAAE,MAAM;GAAY,OAAO;GAAe;EAClD,KAAK,cACJ,QAAO;GAAE,MAAM;GAAY,OAAO;GAAe;EAClD,KAAK,UACJ,QAAO;GAAE,MAAM;GAAY,OAAO;GAAW;EAC9C,KAAK,gBACJ,QAAO;GAAE,MAAM;GAAY,OAAO;GAAiB;EACpD,KAAK,iBACJ,QAAO;GAAE,MAAM;GAAY,OAAO;GAAkB;EACrD,KAAK,eACJ,QAAO;GAAE,MAAM;GAAY,OAAO;GAAgB;EACnD,KAAK,kBACJ,QAAO;GAAE,MAAM;GAAY,OAAO;GAAmB;EACtD,KAAK,iBACJ,QAAO;GAAE,MAAM;GAAQ,OAAO;GAAkB;EACjD,KAAK,kBACJ,QAAO;GAAE,MAAM;GAAQ,OAAO;GAAmB;EAClD,KAAK,gBACJ,QAAO;GAAE,MAAM;GAAQ,OAAO;GAAiB;EAChD,KAAK,mBACJ,QAAO;GAAE,MAAM;GAAQ,OAAO;GAAoB;EACnD,KAAK,UACJ,QAAO;GAAE,MAAM;GAAY,OAAO;GAAW;EAC9C,KAAK,WACJ,QAAO;GAAE,MAAM;GAAQ,OAAO;GAAY;EAC3C,KAAK,YACJ,QAAO;GAAE,MAAM;GAAY,OAAO;GAAa;EAChD,KAAK,YACJ,QAAO;GAAE,MAAM;GAAY,OAAO;GAAoB;EACvD,KAAK,aACJ,QAAO;GAAE,MAAM;GAAY,OAAO;GAA4B;EAC/D,KAAK,QACJ,QAAO;GAAE,MAAM;GAAY,OAAO;GAAS;EAC5C,KAAK,QACJ,QAAO;GAAE,MAAM;GAAY,OAAO;GAAS;EAC5C,KAAK,SACJ,QAAO;GAAE,MAAM;GAAY,OAAO;GAAU;EAC7C,KAAK,SACJ,QAAO;GAAE,MAAM;GAAY,OAAO;GAAU;EAC7C,KAAK,kBACJ,QAAO;GAAE,MAAM;GAAY,OAAO;GAAmB;EACtD,KAAK,cACJ,QAAO;GAAE,MAAM;GAAY,OAAO;GAAe;EAClD,KAAK,eACJ,QAAO;GAAE,MAAM;GAAY,OAAO;GAAgB;EACnD,KAAK,aACJ,QAAO;GAAE,MAAM;GAAY,OAAO;GAAc;EACjD,QACC,QAAO;GAAE,MAAM;GAAY,OAAO;GAAY;;;AAIjD,SAAgB,cACf,OAMe;CACf,MAAM,SAGF,EAAE;CACN,MAAM,SAAS,OAAO,WAAW,UAAU,EAAE;AAE7C,MAAK,MAAM,SAAS,OACnB,MAAK,MAAM,MAAM,MAAM,UACtB,KAAI,GAAG,cACN,KAAI,CAAC,OAAO,GAAG,eACd,QAAO,GAAG,iBAAiB;EAC1B,UAAU,GAAG;EACb,UAAU,GAAG;EACb,MAAM,GAAG;EACT,YAAY,GAAG;EACf;MACK;EACN,MAAM,IAAI,OAAO,GAAG;AACpB,MAAI,GAAG,QAAQ,EAAE,SAAU,GAAE,WAAW,GAAG;AAC3C,MAAI,GAAG,QAAQ,EAAE,UAAU;AAC1B,KAAE,WAAW,GAAG;AAChB,OAAI,GAAG,KAAM,GAAE,OAAO,GAAG;;AAE1B,MAAI,GAAG,cAAc,CAAC,EAAE,WACvB,GAAE,aAAa,GAAG;;CAOvB,MAAM,QAAsB,EAAE;AAC9B,MAAK,MAAM,CAAC,SAAS,SAAS,OAAO,QAAQ,OAAO,EAAE;EACrD,MAAM,aACL,KAAK,eACJ,QAAQ,SAAS,IAAI,GACnB,QAAQ,MAAM,GAAG,QAAQ,YAAY,IAAI,CAAC,GAC1C,YACH;EACD,MAAM,EAAE,MAAM,UAAU,iBAAiB,WAAW;AACpD,QAAM,KAAK;GACV;GACA;GACA;GACA;GACA,gBAAgB,KAAK,WAAW,KAAK;GACrC,MAAM,KAAK;GACX,CAAC;;AAGH,QAAO;;AAGR,SAAgB,kBACf,WACA,YACA,SAOmB;CACnB,MAAM,UAAU,QAAQ,iBAAiB,GAAG,WAAW,GAAG,YAAY;CACtE,MAAM,QAAQ,QAAQ;CACtB,MAAM,SAAS,QAAQ;CACvB,MAAM,gBAAgB,UAAU;CAChC,MAAM,kBAAkB,QAAQ,kBAAkB,QAAQ;CAE1D,IAAI;CACJ,IAAI,YAAwB,EAAE;CAC9B,IAAI;CACJ,IAAI;AAEJ,SAAQ,YAAR;EACC,KAAK;AACJ,UAAO;AACP,eAAY,CACX;IAAE,IAAI,YAAY;IAAE,OAAO;IAAG,OAAO;IAAG,eAAe;IAAS,EAChE;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU;IACjB,MAAM;KAAE,MAAM;KAAQ,KAAK;KAAO;IAClC,eAAe;IACf,CACD;AACD;EAED,KAAK;AACJ,UAAO;AACP,eAAY,CACX;IACC,IAAI,YAAY;IAChB,OAAO,KAAK,IAAI,GAAG,gBAAgB,gBAAgB;IACnD,OAAO,UAAU;IACjB,eAAe;IACf,EACD;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO;IACP,MAAM;KAAE,MAAM;KAAQ,KAAK;KAAO;IAClC,eAAe;IACf,CACD;AACD;EAED,KAAK;AACJ,UAAO;AACP,eAAY,CACX;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU,IAAI;IACrB,eAAe;IACf,EACD;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU;IACjB,MAAM;KAAE,MAAM;KAAQ,KAAK;KAAO;IAClC,eAAe;IACf,CACD;AACD;EAED,KAAK;AACJ,UAAO;AACP,eAAY,CACX;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU,IAAI;IACrB,eAAe;IACf,EACD;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU;IACjB,MAAM;KAAE,MAAM;KAAQ,KAAK;KAAO;IAClC,eAAe;IACf,CACD;AACD;EAED,KAAK;AACJ,UAAO;AACP,eAAY,CACX;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU,IAAI;IACrB,eAAe;IACf,EACD;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU;IACjB,MAAM;KAAE,MAAM;KAAQ,KAAK;KAAO;IAClC,eAAe;IACf,CACD;AACD;EAED,KAAK;AACJ,UAAO;AACP,eAAY,CACX;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU,IAAI;IACrB,eAAe;IACf,EACD;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU;IACjB,MAAM;KAAE,MAAM;KAAQ,KAAK;KAAO;IAClC,eAAe;IACf,CACD;AACD;EAED,KAAK;AACJ,UAAO;AACP,eAAY,CACX;IACC,IAAI,YAAY;IAChB,OAAO,KAAK,IAAI,GAAG,gBAAgB,gBAAgB;IACnD,OAAO,UAAU;IACjB,eAAe;IACf,EACD;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU,IAAI;IACrB,MAAM;KAAE,MAAM;KAAQ,KAAK;KAAO;IAClC,eAAe;IACf,CACD;AACD;EAED,KAAK;AACJ,UAAO;AACP,eAAY,CACX;IACC,IAAI,YAAY;IAChB,OAAO,KAAK,IAAI,GAAG,gBAAgB,gBAAgB;IACnD,OAAO,UAAU;IACjB,eAAe;IACf,EACD;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU,IAAI;IACrB,MAAM;KAAE,MAAM;KAAQ,KAAK;KAAO;IAClC,eAAe;IACf,CACD;AACD;EAED,KAAK;AACJ,UAAO;AACP,eAAY,CACX;IACC,IAAI,YAAY;IAChB,OAAO,KAAK,IAAI,GAAG,gBAAgB,gBAAgB;IACnD,OAAO,UAAU;IACjB,eAAe;IACf,EACD;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU,IAAI;IACrB,MAAM;KAAE,MAAM;KAAQ,KAAK;KAAO;IAClC,eAAe;IACf,CACD;AACD;EAED,KAAK;AACJ,UAAO;AACP,eAAY,CACX;IACC,IAAI,YAAY;IAChB,OAAO,KAAK,IAAI,GAAG,gBAAgB,gBAAgB;IACnD,OAAO,UAAU;IACjB,eAAe;IACf,EACD;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU,IAAI;IACrB,MAAM;KAAE,MAAM;KAAQ,KAAK;KAAO;IAClC,eAAe;IACf,CACD;AACD;EAED,KAAK;AACJ,UAAO;AACP,eAAY,CACX;IAAE,IAAI,YAAY;IAAE,OAAO;IAAG,OAAO;IAAG,eAAe;IAAS,EAChE;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU;IACjB,MAAM;KAAE,MAAM;KAAQ,KAAK;KAAO;IAClC,eAAe;IACf,CACD;AACD;EAED,KAAK;AACJ,UAAO;AACP,eAAY,CACX;IACC,IAAI,YAAY;IAChB,OAAO,KAAK,IAAI,GAAG,gBAAgB,gBAAgB;IACnD,OAAO,UAAU;IACjB,eAAe;IACf,EACD;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO;IACP,MAAM;KAAE,MAAM;KAAQ,KAAK;KAAO;IAClC,eAAe;IACf,CACD;AACD;EAED,KAAK;AACJ,UAAO;AACP,eAAY,CACX;IAAE,IAAI,YAAY;IAAE,OAAO;IAAG,OAAO;IAAG,eAAe;IAAS,EAChE;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU;IACjB,MAAM;KAAE,MAAM;KAAQ,KAAK;KAAO,QAAQ,CAAC,IAAI;KAAE;IACjD,eAAe;IACf,CACD;AACD;EAED,KAAK;AACJ,UAAO;AACP,eAAY,CACX;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU;IACjB,eAAe;IACf,EACD;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU,WAAW;IAC5B,MAAM;KAAE,MAAM;KAAQ,KAAK;KAAO;IAClC,eAAe;IACf,CACD;AACD,YAAS;AACT;EAED,KAAK;AACJ,UAAO;AACP,eAAY,CACX;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU;IACjB,eAAe;IACf,EACD;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU,WAAW;IAC5B,MAAM;KAAE,MAAM;KAAQ,KAAK;KAAO;IAClC,eAAe;IACf,CACD;AACD,YAAS;AACT;EAED,KAAK,SAAS;AACb,UAAO;GACP,MAAM,UAAU,KAAK,IAAI,GAAG,KAAK,MAAM,kBAAkB,EAAE,CAAC;AAC5D,eAAY,CACX;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU;IACjB,eAAe;IACf,EACD;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU,QAAQ;IACzB,MAAM;KAAE,MAAM;KAAQ,KAAK;KAAO;IAClC,eAAe;IACf,CACD;AACD,YAAS;AACT,UAAO;AACP;;EAED,KAAK,SAAS;AACb,UAAO;GACP,MAAM,aAAa,KAAK,IAAI,GAAG,KAAK,MAAM,kBAAkB,GAAG,CAAC;AAChE,eAAY,CACX;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU;IACjB,eAAe;IACf,EACD;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU,IAAI;IACrB,MAAM;KAAE,MAAM;KAAQ,KAAK;KAAS;IACpC,eAAe;IACf,CACD;AACD,YAAS;AACT,UAAO;AACP;;EAED,KAAK,UAAU;AACd,UAAO;GACP,MAAM,aAAa,KAAK,IAAI,GAAG,KAAK,MAAM,kBAAkB,EAAE,CAAC;AAC/D,eAAY,CACX;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU;IACjB,eAAe;IACf,EACD;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU,WAAW;IAC5B,MAAM;KAAE,MAAM;KAAQ,KAAK;KAAS;IACpC,eAAe;IACf,CACD;AACD,YAAS;AACT,UAAO;AACP;;EAED,KAAK;AACJ,UAAO;AACP,eAAY,CACX;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU,IAAI;IACrB,eAAe;IACf,EACD;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU;IACjB,MAAM;KAAE,MAAM;KAAU,KAAK;KAAO;IACpC,eAAe;IACf,CACD;AACD;EAED,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;AACJ,UAAO;AACP,eAAY,CACX;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO;IACP,eAAe;IACf;IACA,EACD;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO;IACP,MAAM;KAAE,MAAM;KAAQ,KAAK;KAAO;IAClC,eAAe;IACf;IACA,CACD;AACD;EAED,KAAK;AACJ,UAAO;AACP,eAAY,CACX;IAAE,IAAI,YAAY;IAAE,OAAO;IAAG,OAAO;IAAG,eAAe;IAAS,EAChE;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO;IACP,MAAM;KAAE,MAAM;KAAQ,KAAK;KAAO;IAClC,eAAe;IACf,CACD;AACD;EAED,KAAK;AACJ,UAAO;AACP,eAAY,CACX;IAAE,IAAI,YAAY;IAAE,OAAO;IAAG,OAAO;IAAG,eAAe;IAAS,EAChE;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU;IACjB,MAAM;KAAE,MAAM;KAAU,KAAK;KAAO;IACpC,eAAe;IACf,CACD;AACD;EAED,KAAK,gBAAgB;AACpB,UAAO;GACP,MAAM,UAAU,KAAK,IAAI,GAAG,KAAK,MAAM,kBAAkB,EAAE,CAAC;AAC5D,eAAY,CACX;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU;IACjB,eAAe;IACf,EACD;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU,IAAI;IACrB,MAAM;KAAE,MAAM;KAAQ,KAAK;KAAS;IACpC,eAAe;IACf,CACD;AACD,YAAS;AACT,UAAO;AACP;;EAED,KAAK,cAAc;AAClB,UAAO;GACP,MAAM,SAAS,UAAU,SAAS;AAClC,eAAY,CACX;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU,IAAI;IACrB,eAAe;IACf,EACD;IACC,IAAI,YAAY;IAChB,OAAO;IACP,OAAO,UAAU;IACjB,MAAM;KAAE,MAAM;KAAQ,KAAK;KAAO;IAClC,eAAe;IACf,CACD;AACD;;EAED,QACC,OAAM,IAAI,MAAM,4BAA4B,aAAa;;AAG3D,QAAO,CACN;EACC,IAAI,YAAY;EAChB;EACA,WAAW,UAAU,KAAK,QAAQ;GAAE,GAAG;GAAI;GAAY,EAAE;EACzD,GAAI,WAAW,UAAa,EAAE,QAAQ;EACtC,GAAI,SAAS,UAAa,EAAE,MAAM;EAClC,CACD"}
@@ -0,0 +1,2 @@
1
+ import { a as Point3D, c as Transform3DPropsLike, i as Point2D, l as has3DTransform, n as Layer3DMatrixConfig, o as Quad2D, r as Matrix4x4, s as Transform3DMath, t as _default, u as solveHomography } from "./index-B0ir9Z7o.mjs";
2
+ export { Layer3DMatrixConfig, Matrix4x4, Point2D, Point3D, Quad2D, Transform3DMath, Transform3DPropsLike, _default as default, has3DTransform, solveHomography };
@@ -0,0 +1,3 @@
1
+ import { i as solveHomography, n as Transform3DMath, r as has3DTransform, t as renderers_default } from "./renderers-DoYYCzgA.mjs";
2
+
3
+ export { Transform3DMath, renderers_default as default, has3DTransform, solveHomography };