cinematic-renderer2d 0.1.0
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/LICENSE +21 -0
- package/README.md +827 -0
- package/dist/angular.cjs +189 -0
- package/dist/angular.cjs.map +1 -0
- package/dist/angular.d.cts +577 -0
- package/dist/angular.d.ts +577 -0
- package/dist/angular.js +189 -0
- package/dist/angular.js.map +1 -0
- package/dist/cli/index.js +1243 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/index.cjs +182 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1663 -0
- package/dist/index.d.ts +1663 -0
- package/dist/index.js +182 -0
- package/dist/index.js.map +1 -0
- package/dist/metafile-cjs.json +1 -0
- package/dist/metafile-esm.json +1 -0
- package/dist/react.cjs +182 -0
- package/dist/react.cjs.map +1 -0
- package/dist/react.d.cts +510 -0
- package/dist/react.d.ts +510 -0
- package/dist/react.js +182 -0
- package/dist/react.js.map +1 -0
- package/package.json +151 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/animation/AnimationCompiler.ts","../../src/parsing/SpecParser.ts","../../src/cli/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Animation track compilation system\n * \n * Provides high-performance animation compilation with comprehensive easing functions,\n * interpolation for different value types, and support for loops and yoyo effects.\n * All animations are precompiled at parse time to avoid per-frame calculations.\n * \n * Requirements: 6.1, 6.2, 6.3, 6.4, 6.5\n */\n\nimport type { AnimationTrackSpec, EasingType, AnimationValue } from '../types/CinematicSpec';\nimport type { CompiledAnimationTrack, EasingFunction, InterpolationFunction } from '../types/CompiledSpec';\n\n/**\n * Animation compilation system with optimized easing and interpolation functions\n */\nexport class AnimationCompiler {\n /**\n * Compiles an animation track specification into an optimized runtime track\n * \n * @param track - Animation track specification to compile\n * @returns Compiled animation track with precompiled interpolation function\n */\n static compileTrack(track: AnimationTrackSpec): CompiledAnimationTrack {\n const easingFunction = this.compileEasing(track.easing || 'ease');\n const interpolationFunction = this.compileInterpolation(track.from, track.to, easingFunction);\n \n return {\n property: track.property,\n startMs: track.startMs,\n endMs: track.endMs,\n interpolate: interpolationFunction,\n loop: track.loop || false,\n yoyo: track.yoyo || false,\n easingType: track.easing || 'ease',\n currentLoop: 0,\n isReverse: false\n };\n }\n \n /**\n * Compiles an easing function from string specification to optimized function\n * \n * @param easing - Easing type or cubic-bezier specification\n * @returns Optimized easing function that maps [0,1] to [0,1]\n */\n static compileEasing(easing: EasingType): EasingFunction {\n // Handle cubic-bezier functions\n if (typeof easing === 'string' && easing.startsWith('cubic-bezier(')) {\n return this.compileCubicBezier(easing);\n }\n \n // Standard easing functions with optimized implementations\n switch (easing) {\n case 'linear':\n return (t: number) => t;\n \n case 'ease':\n return this.cubicBezier(0.25, 0.1, 0.25, 1);\n \n case 'ease-in':\n return this.cubicBezier(0.42, 0, 1, 1);\n \n case 'ease-out':\n return this.cubicBezier(0, 0, 0.58, 1);\n \n case 'ease-in-out':\n return this.cubicBezier(0.42, 0, 0.58, 1);\n \n // Sine easing functions\n case 'ease-in-sine':\n return (t: number) => 1 - Math.cos((t * Math.PI) / 2);\n \n case 'ease-out-sine':\n return (t: number) => Math.sin((t * Math.PI) / 2);\n \n case 'ease-in-out-sine':\n return (t: number) => -(Math.cos(Math.PI * t) - 1) / 2;\n \n // Quadratic easing functions\n case 'ease-in-quad':\n return (t: number) => t * t;\n \n case 'ease-out-quad':\n return (t: number) => 1 - (1 - t) * (1 - t);\n \n case 'ease-in-out-quad':\n return (t: number) => t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2;\n \n // Cubic easing functions\n case 'ease-in-cubic':\n return (t: number) => t * t * t;\n \n case 'ease-out-cubic':\n return (t: number) => 1 - Math.pow(1 - t, 3);\n \n case 'ease-in-out-cubic':\n return (t: number) => t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2;\n \n // Quartic easing functions\n case 'ease-in-quart':\n return (t: number) => t * t * t * t;\n \n case 'ease-out-quart':\n return (t: number) => 1 - Math.pow(1 - t, 4);\n \n case 'ease-in-out-quart':\n return (t: number) => t < 0.5 ? 8 * t * t * t * t : 1 - Math.pow(-2 * t + 2, 4) / 2;\n \n // Quintic easing functions\n case 'ease-in-quint':\n return (t: number) => t * t * t * t * t;\n \n case 'ease-out-quint':\n return (t: number) => 1 - Math.pow(1 - t, 5);\n \n case 'ease-in-out-quint':\n return (t: number) => t < 0.5 ? 16 * t * t * t * t * t : 1 - Math.pow(-2 * t + 2, 5) / 2;\n \n // Exponential easing functions\n case 'ease-in-expo':\n return (t: number) => t === 0 ? 0 : Math.pow(2, 10 * (t - 1));\n \n case 'ease-out-expo':\n return (t: number) => t === 1 ? 1 : 1 - Math.pow(2, -10 * t);\n \n case 'ease-in-out-expo':\n return (t: number) => {\n if (t === 0) return 0;\n if (t === 1) return 1;\n return t < 0.5 \n ? Math.pow(2, 20 * t - 10) / 2\n : (2 - Math.pow(2, -20 * t + 10)) / 2;\n };\n \n // Circular easing functions\n case 'ease-in-circ':\n return (t: number) => 1 - Math.sqrt(1 - Math.pow(t, 2));\n \n case 'ease-out-circ':\n return (t: number) => Math.sqrt(1 - Math.pow(t - 1, 2));\n \n case 'ease-in-out-circ':\n return (t: number) => t < 0.5\n ? (1 - Math.sqrt(1 - Math.pow(2 * t, 2))) / 2\n : (Math.sqrt(1 - Math.pow(-2 * t + 2, 2)) + 1) / 2;\n \n // Back easing functions\n case 'ease-in-back':\n return this.backEasing(1.70158, 'in');\n \n case 'ease-out-back':\n return this.backEasing(1.70158, 'out');\n \n case 'ease-in-out-back':\n return this.backEasing(1.70158, 'in-out');\n \n // Elastic easing functions\n case 'ease-in-elastic':\n return this.elasticEasing(2 * Math.PI / 3, 'in');\n \n case 'ease-out-elastic':\n return this.elasticEasing(2 * Math.PI / 3, 'out');\n \n case 'ease-in-out-elastic':\n return this.elasticEasing(2 * Math.PI / 4.5, 'in-out');\n \n // Bounce easing functions\n case 'ease-in-bounce':\n return (t: number) => 1 - this.bounceOut(1 - t);\n \n case 'ease-out-bounce':\n return this.bounceOut;\n \n case 'ease-in-out-bounce':\n return (t: number) => t < 0.5\n ? (1 - this.bounceOut(1 - 2 * t)) / 2\n : (1 + this.bounceOut(2 * t - 1)) / 2;\n \n default:\n // Fallback to ease\n return this.cubicBezier(0.25, 0.1, 0.25, 1);\n }\n }\n \n /**\n * Compiles an interpolation function for animating between two values\n * \n * @param from - Starting value\n * @param to - Ending value\n * @param easingFunction - Easing function to apply\n * @returns Optimized interpolation function\n */\n static compileInterpolation(from: AnimationValue, to: AnimationValue, easingFunction: EasingFunction): InterpolationFunction {\n // Determine the interpolation strategy based on value types\n const fromType = this.getValueType(from);\n const toType = this.getValueType(to);\n \n if (fromType !== toType) {\n // Type mismatch - use discrete transition\n return (progress: number) => {\n const easedProgress = easingFunction(Math.max(0, Math.min(1, progress)));\n return easedProgress < 0.5 ? from : to;\n };\n }\n \n switch (fromType) {\n case 'number':\n return this.compileNumberInterpolation(from as number, to as number, easingFunction);\n \n case 'string':\n return this.compileStringInterpolation(from as string, to as string, easingFunction);\n \n case 'boolean':\n return this.compileBooleanInterpolation(from as boolean, to as boolean, easingFunction);\n \n case 'object':\n return this.compileObjectInterpolation(\n from as Record<string, any>, \n to as Record<string, any>, \n easingFunction\n );\n \n default:\n // Fallback to discrete transition\n return (progress: number) => {\n const easedProgress = easingFunction(Math.max(0, Math.min(1, progress)));\n return easedProgress < 0.5 ? from : to;\n };\n }\n }\n \n /**\n * Creates a cubic-bezier easing function with the given control points\n */\n private static cubicBezier(x1: number, y1: number, x2: number, y2: number): EasingFunction {\n // Simplified cubic-bezier implementation\n // In a production system, this would use a more accurate algorithm\n return (t: number) => {\n // Use Newton-Raphson method approximation\n const cx = 3 * x1;\n const bx = 3 * (x2 - x1) - cx;\n const ax = 1 - cx - bx;\n \n const cy = 3 * y1;\n const by = 3 * (y2 - y1) - cy;\n const ay = 1 - cy - by;\n \n // Solve for t given x using Newton-Raphson\n let x = t;\n for (let i = 0; i < 8; i++) {\n const currentX = ((ax * x + bx) * x + cx) * x;\n const currentSlope = (3 * ax * x + 2 * bx) * x + cx;\n if (Math.abs(currentSlope) < 1e-6) break;\n x = x - (currentX - t) / currentSlope;\n }\n \n // Calculate y for the solved t\n return ((ay * x + by) * x + cy) * x;\n };\n }\n \n /**\n * Parses and compiles a cubic-bezier string specification\n */\n private static compileCubicBezier(bezierString: string): EasingFunction {\n const match = bezierString.match(/cubic-bezier\\(([^)]+)\\)/);\n if (!match || !match[1]) {\n return this.cubicBezier(0.25, 0.1, 0.25, 1); // Fallback to ease\n }\n \n const values = match[1].split(',').map(v => parseFloat(v.trim()));\n if (values.length !== 4 || values.some(v => isNaN(v))) {\n return this.cubicBezier(0.25, 0.1, 0.25, 1); // Fallback to ease\n }\n \n return this.cubicBezier(values[0]!, values[1]!, values[2]!, values[3]!);\n }\n \n /**\n * Creates a back easing function with overshoot\n */\n private static backEasing(c: number, type: 'in' | 'out' | 'in-out'): EasingFunction {\n const c1 = c;\n const c2 = c1 * 1.525;\n const c3 = c1 + 1;\n \n switch (type) {\n case 'in':\n return (t: number) => c3 * t * t * t - c1 * t * t;\n \n case 'out':\n return (t: number) => 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);\n \n case 'in-out':\n return (t: number) => t < 0.5\n ? (Math.pow(2 * t, 2) * ((c2 + 1) * 2 * t - c2)) / 2\n : (Math.pow(2 * t - 2, 2) * ((c2 + 1) * (t * 2 - 2) + c2) + 2) / 2;\n \n default:\n return (t: number) => t;\n }\n }\n \n /**\n * Creates an elastic easing function with oscillation\n */\n private static elasticEasing(c: number, type: 'in' | 'out' | 'in-out'): EasingFunction {\n switch (type) {\n case 'in':\n return (t: number) => {\n if (t === 0) return 0;\n if (t === 1) return 1;\n return -Math.pow(2, 10 * t - 10) * Math.sin((t * 10 - 10.75) * c);\n };\n \n case 'out':\n return (t: number) => {\n if (t === 0) return 0;\n if (t === 1) return 1;\n return Math.pow(2, -10 * t) * Math.sin((t * 10 - 0.75) * c) + 1;\n };\n \n case 'in-out':\n return (t: number) => {\n if (t === 0) return 0;\n if (t === 1) return 1;\n return t < 0.5\n ? -(Math.pow(2, 20 * t - 10) * Math.sin((20 * t - 11.125) * c)) / 2\n : (Math.pow(2, -20 * t + 10) * Math.sin((20 * t - 11.125) * c)) / 2 + 1;\n };\n \n default:\n return (t: number) => t;\n }\n }\n \n /**\n * Bounce easing out function\n */\n private static bounceOut(t: number): number {\n const n1 = 7.5625;\n const d1 = 2.75;\n \n if (t < 1 / d1) {\n return n1 * t * t;\n } else if (t < 2 / d1) {\n return n1 * (t -= 1.5 / d1) * t + 0.75;\n } else if (t < 2.5 / d1) {\n return n1 * (t -= 2.25 / d1) * t + 0.9375;\n } else {\n return n1 * (t -= 2.625 / d1) * t + 0.984375;\n }\n }\n \n /**\n * Determines the type of an animation value\n */\n private static getValueType(value: AnimationValue): 'number' | 'string' | 'boolean' | 'object' {\n if (typeof value === 'number') return 'number';\n if (typeof value === 'string') return 'string';\n if (typeof value === 'boolean') return 'boolean';\n if (typeof value === 'object' && value !== null) return 'object';\n return 'object'; // Fallback\n }\n \n /**\n * Compiles number interpolation with optimized performance\n */\n private static compileNumberInterpolation(from: number, to: number, easingFunction: EasingFunction): InterpolationFunction {\n const delta = to - from;\n return (progress: number) => {\n const easedProgress = easingFunction(Math.max(0, Math.min(1, progress)));\n return from + delta * easedProgress;\n };\n }\n \n /**\n * Compiles string interpolation with CSS value support\n */\n private static compileStringInterpolation(from: string, to: string, easingFunction: EasingFunction): InterpolationFunction {\n // Check if strings contain numeric values that can be interpolated\n const fromMatch = from.match(/^([+-]?\\d*\\.?\\d+)(.*)$/);\n const toMatch = to.match(/^([+-]?\\d*\\.?\\d+)(.*)$/);\n \n if (fromMatch && toMatch && fromMatch[2] === toMatch[2]) {\n // Interpolate numeric part, keep unit\n const fromNum = parseFloat(fromMatch[1]!);\n const toNum = parseFloat(toMatch[1]!);\n const unit = fromMatch[2];\n const delta = toNum - fromNum;\n \n return (progress: number) => {\n const easedProgress = easingFunction(Math.max(0, Math.min(1, progress)));\n const interpolatedValue = fromNum + delta * easedProgress;\n // Round to avoid floating point precision issues\n const roundedValue = Math.round(interpolatedValue * 1000000) / 1000000;\n return `${roundedValue}${unit}`;\n };\n }\n \n // Discrete transition for non-numeric strings\n return (progress: number) => {\n const easedProgress = easingFunction(Math.max(0, Math.min(1, progress)));\n return easedProgress < 0.5 ? from : to;\n };\n }\n \n /**\n * Compiles boolean interpolation (discrete transition)\n */\n private static compileBooleanInterpolation(from: boolean, to: boolean, easingFunction: EasingFunction): InterpolationFunction {\n return (progress: number) => {\n const easedProgress = easingFunction(Math.max(0, Math.min(1, progress)));\n return easedProgress < 0.5 ? from : to;\n };\n }\n \n /**\n * Compiles object interpolation for complex values\n */\n private static compileObjectInterpolation(\n from: Record<string, any>, \n to: Record<string, any>, \n easingFunction: EasingFunction\n ): InterpolationFunction {\n // Pre-compile interpolation functions for each property\n const propertyInterpolators = new Map<string, InterpolationFunction>();\n \n // Get all unique keys from both objects\n const allKeys = new Set([...Object.keys(from), ...Object.keys(to)]);\n \n for (const key of allKeys) {\n const fromValue = from[key];\n const toValue = to[key];\n \n if (fromValue !== undefined && toValue !== undefined) {\n // Both objects have this property - create interpolator\n propertyInterpolators.set(key, this.compileInterpolation(fromValue, toValue, easingFunction));\n } else if (fromValue !== undefined) {\n // Only from has this property - keep constant\n propertyInterpolators.set(key, () => fromValue);\n } else {\n // Only to has this property - discrete transition\n propertyInterpolators.set(key, (progress: number) => {\n const easedProgress = easingFunction(Math.max(0, Math.min(1, progress)));\n return easedProgress < 0.5 ? undefined : toValue;\n });\n }\n }\n \n return (progress: number) => {\n const result: Record<string, any> = {};\n \n for (const [key, interpolator] of propertyInterpolators) {\n const value = interpolator(progress);\n if (value !== undefined) {\n result[key] = value;\n }\n }\n \n return result;\n };\n }\n}","/**\n * JSON Specification Parser with Zod validation\n * \n * Provides comprehensive JSON schema validation, default value application,\n * and descriptive error message generation for cinematic specifications.\n * Supports schema versioning for backward compatibility.\n * \n * Requirements: 3.1, 3.2, 3.4, 3.5\n */\n\nimport { z } from 'zod';\nimport type { \n CinematicSpec, \n CinematicEvent, \n CinematicScene, \n LayerSpec, \n AnimationTrackSpec, \n AudioTrackSpec, \n TransitionSpec, \n AssetDefinition,\n EasingType\n} from '../types/CinematicSpec';\nimport type { \n CompiledSpec, \n CompiledEvent, \n CompiledScene, \n CompiledLayer, \n CompiledAnimationTrack, \n CompiledAudioTrack, \n CompiledTransition,\n CompilationContext\n} from '../types/CompiledSpec';\nimport type { Asset } from '../types/AssetTypes';\nimport { AnimationCompiler } from '../animation/AnimationCompiler';\n\n/**\n * Supported schema versions for backward compatibility\n */\nconst SUPPORTED_SCHEMA_VERSIONS = ['1.0.0', '1.1.0'] as const;\n\n/**\n * Zod schema definitions for comprehensive validation\n */\n\n// Basic type schemas\nconst QualityLevelSchema = z.enum(['low', 'medium', 'high', 'ultra', 'auto']);\nconst LayerTypeSchema = z.enum([\n 'gradient', 'image', 'textBlock', 'vignette', 'glowOrb', 'noiseOverlay',\n 'particles', 'starfield', 'dust', 'nebulaNoise', 'webgl-custom'\n]);\nconst EasingTypeSchema = z.enum([\n 'linear', 'ease', 'ease-in', 'ease-out', 'ease-in-out',\n 'ease-in-sine', 'ease-out-sine', 'ease-in-out-sine',\n 'ease-in-quad', 'ease-out-quad', 'ease-in-out-quad',\n 'ease-in-cubic', 'ease-out-cubic', 'ease-in-out-cubic',\n 'ease-in-quart', 'ease-out-quart', 'ease-in-out-quart',\n 'ease-in-quint', 'ease-out-quint', 'ease-in-out-quint',\n 'ease-in-expo', 'ease-out-expo', 'ease-in-out-expo',\n 'ease-in-circ', 'ease-out-circ', 'ease-in-out-circ',\n 'ease-in-back', 'ease-out-back', 'ease-in-out-back',\n 'ease-in-elastic', 'ease-out-elastic', 'ease-in-out-elastic',\n 'ease-in-bounce', 'ease-out-bounce', 'ease-in-out-bounce'\n]).or(z.string().regex(/^cubic-bezier\\(\\d*\\.?\\d+,\\d*\\.?\\d+,\\d*\\.?\\d+,\\d*\\.?\\d+\\)$/));\nconst AudioTrackTypeSchema = z.enum(['voiceover', 'ambience', 'transition', 'music', 'sfx']);\nconst TransitionTypeSchema = z.enum(['fade', 'slide', 'zoom', 'wipe', 'dissolve', 'blur']);\nconst AssetTypeSchema = z.enum(['image', 'video', 'audio', 'font', 'json', 'binary']);\n\n// Transform configuration schema\nconst TransformConfigSchema = z.object({\n x: z.union([z.number(), z.string()]).optional(),\n y: z.union([z.number(), z.string()]).optional(),\n scale: z.number().optional(),\n rotation: z.number().optional(),\n origin: z.string().optional()\n}).optional();\n\n// Layer configuration schema\nconst LayerConfigSchema = z.object({\n opacity: z.number().min(0).max(1).optional(),\n visible: z.boolean().optional(),\n transform: TransformConfigSchema\n}).catchall(z.any()); // Allow additional layer-specific properties\n\n// Animation value schema\nconst AnimationValueSchema = z.union([\n z.number(),\n z.string(),\n z.boolean(),\n z.record(z.union([z.number(), z.string(), z.boolean()]))\n]);\n\n// Animation track schema\nconst AnimationTrackSpecSchema = z.object({\n property: z.string().min(1),\n from: AnimationValueSchema,\n to: AnimationValueSchema,\n startMs: z.number().min(0),\n endMs: z.number().min(0),\n easing: EasingTypeSchema.optional().default('ease' as EasingType),\n loop: z.boolean().optional().default(false),\n yoyo: z.boolean().optional().default(false)\n}).refine(data => data.endMs > data.startMs, {\n message: \"endMs must be greater than startMs\",\n path: [\"endMs\"]\n});\n\n// Audio track schema\nconst AudioTrackSpecSchema = z.object({\n id: z.string().min(1),\n type: AudioTrackTypeSchema,\n src: z.string().min(1),\n startMs: z.number().min(0),\n endMs: z.number().min(0).optional(),\n volume: z.number().min(0).max(1).optional().default(1),\n fadeIn: z.number().min(0).optional().default(0),\n fadeOut: z.number().min(0).optional().default(0),\n loop: z.boolean().optional().default(false)\n});\n\n// Transition configuration schema\nconst TransitionConfigSchema = z.object({\n direction: z.enum(['up', 'down', 'left', 'right', 'in', 'out']).optional(),\n blurAmount: z.number().min(0).optional()\n}).catchall(z.any()).optional();\n\n// Transition spec schema\nconst TransitionSpecSchema = z.object({\n type: TransitionTypeSchema,\n duration: z.number().min(0),\n easing: EasingTypeSchema.optional().default('ease' as EasingType),\n config: TransitionConfigSchema\n});\n\n// Asset metadata schema\nconst AssetMetadataSchema = z.object({\n size: z.number().min(0).optional(),\n mimeType: z.string().optional(),\n cacheDuration: z.number().min(0).optional(),\n dimensions: z.object({\n width: z.number().min(1),\n height: z.number().min(1)\n }).optional(),\n duration: z.number().min(0).optional()\n}).optional();\n\n// Asset definition schema\nconst AssetDefinitionSchema = z.object({\n id: z.string().min(1),\n type: AssetTypeSchema,\n src: z.string().min(1),\n preload: z.boolean().optional().default(true),\n fallback: z.string().optional(),\n metadata: AssetMetadataSchema\n});\n\n// Layer spec schema\nconst LayerSpecSchema = z.object({\n id: z.string().min(1),\n type: LayerTypeSchema,\n zIndex: z.number(),\n config: LayerConfigSchema,\n animations: z.array(AnimationTrackSpecSchema).optional().default([])\n});\n\n// Scene schema\nconst CinematicSceneSchema = z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n duration: z.number().min(0),\n layers: z.array(LayerSpecSchema).min(1),\n audio: z.array(AudioTrackSpecSchema).optional().default([])\n});\n\n// Event schema\nconst CinematicEventSchema = z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n scenes: z.array(z.string().min(1)).min(1),\n transitions: z.array(TransitionSpecSchema).optional().default([])\n});\n\n// Engine configuration schema\nconst EngineConfigSchema = z.object({\n targetFps: z.number().min(1).max(240).optional().default(60),\n quality: QualityLevelSchema.optional().default('auto'),\n debug: z.boolean().optional().default(false),\n autoplay: z.boolean().optional().default(false)\n});\n\n// Main cinematic spec schema\nconst CinematicSpecSchema = z.object({\n schemaVersion: z.string().min(1),\n engine: EngineConfigSchema,\n events: z.array(CinematicEventSchema).min(1),\n scenes: z.array(CinematicSceneSchema).min(1),\n assets: z.array(AssetDefinitionSchema).optional().default([])\n}).refine(data => {\n // Validate that all scene IDs referenced in events exist\n const sceneIds = new Set(data.scenes.map(scene => scene.id));\n const referencedSceneIds = new Set(data.events.flatMap(event => event.scenes));\n \n for (const sceneId of referencedSceneIds) {\n if (!sceneIds.has(sceneId)) {\n return false;\n }\n }\n return true;\n}, {\n message: \"All scene IDs referenced in events must exist in the scenes array\",\n path: [\"events\"]\n}).refine(data => {\n // Validate unique IDs within each collection\n const eventIds = data.events.map(e => e.id);\n const sceneIds = data.scenes.map(s => s.id);\n const assetIds = data.assets?.map(a => a.id) || [];\n \n return new Set(eventIds).size === eventIds.length &&\n new Set(sceneIds).size === sceneIds.length &&\n new Set(assetIds).size === assetIds.length;\n}, {\n message: \"All IDs must be unique within their respective collections\",\n path: [\"events\", \"scenes\", \"assets\"]\n});\n\n/**\n * SpecParser class with comprehensive Zod validation and compilation\n */\nexport class SpecParser {\n /**\n * Validates and parses a raw JSON specification into a validated CinematicSpec\n * \n * @param spec - Raw JSON specification to validate\n * @returns Validated CinematicSpec with applied defaults\n * @throws ZodError with descriptive validation messages\n */\n static validate(spec: unknown): CinematicSpec {\n try {\n // First validate the schema version\n if (typeof spec !== 'object' || spec === null) {\n throw new Error('Specification must be a valid object');\n }\n \n const rawSpec = spec as Record<string, any>;\n const schemaVersion = rawSpec['schemaVersion'];\n \n if (!schemaVersion || typeof schemaVersion !== 'string') {\n throw new Error('Missing or invalid schemaVersion. Current supported versions: ' + \n SUPPORTED_SCHEMA_VERSIONS.join(', '));\n }\n \n if (!SUPPORTED_SCHEMA_VERSIONS.includes(schemaVersion as any)) {\n throw new Error(`Unsupported schema version: ${schemaVersion}. ` +\n `Supported versions: ${SUPPORTED_SCHEMA_VERSIONS.join(', ')}`);\n }\n \n // Apply schema version-specific validation\n const validatedSpec = this.validateByVersion(spec, schemaVersion);\n \n return validatedSpec;\n } catch (error) {\n if (error instanceof z.ZodError) {\n throw new Error(this.formatZodError(error));\n }\n throw error;\n }\n }\n \n /**\n * Compiles a validated CinematicSpec into an optimized CompiledSpec\n * \n * @param spec - Validated CinematicSpec to compile\n * @returns CompiledSpec with precompiled animations and optimized runtime structures\n */\n static parse(spec: CinematicSpec): CompiledSpec {\n const context: CompilationContext = {\n schemaVersion: spec.schemaVersion,\n assetPromises: new Map(),\n layerTypes: new Set(spec.scenes.flatMap(s => s.layers.map(l => l.type))),\n diagnostics: [],\n optimizations: {\n precompileAnimations: true,\n optimizeAssetLoading: true,\n enableObjectPooling: true,\n minimizeDOMUpdates: true,\n useWebWorkers: false // Disabled for now\n }\n };\n \n try {\n // Compile assets\n const compiledAssets = this.compileAssets(spec.assets || [], context);\n \n // Compile scenes first (needed for events)\n const compiledScenes = this.compileScenes(spec.scenes, context);\n \n // Compile events\n const compiledEvents = this.compileEvents(spec.events, compiledScenes, context);\n \n // Calculate total duration\n const totalDuration = Math.max(...Array.from(compiledEvents.values())\n .map(event => event.startTime + event.duration));\n \n const compiledSpec: CompiledSpec = {\n events: compiledEvents,\n scenes: compiledScenes,\n assets: compiledAssets,\n globalConfig: spec.engine,\n schemaVersion: spec.schemaVersion,\n totalDuration,\n compiledAt: Date.now()\n };\n \n // Log any compilation warnings\n if (context.diagnostics.length > 0) {\n console.warn('Compilation completed with warnings:', context.diagnostics);\n }\n \n return compiledSpec;\n } catch (error) {\n context.diagnostics.push({\n level: 'error',\n message: error instanceof Error ? error.message : 'Unknown compilation error',\n code: 'COMPILATION_ERROR'\n });\n throw new Error(`Compilation failed: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n }\n \n /**\n * Validates specification based on schema version\n */\n private static validateByVersion(spec: unknown, version: string): CinematicSpec {\n // For now, all supported versions use the same schema\n // In the future, this would handle version-specific differences\n switch (version) {\n case '1.0.0':\n case '1.1.0':\n return CinematicSpecSchema.parse(spec) as CinematicSpec;\n default:\n throw new Error(`Unsupported schema version: ${version}`);\n }\n }\n \n /**\n * Compiles asset definitions into runtime assets\n */\n private static compileAssets(assets: AssetDefinition[], _context: CompilationContext): Map<string, Asset> {\n const compiledAssets = new Map<string, Asset>();\n \n for (const assetDef of assets) {\n // Create a basic asset object (actual loading would happen in AssetManager)\n const asset: Asset = {\n id: assetDef.id,\n type: assetDef.type,\n src: assetDef.src,\n data: null,\n loaded: false,\n error: null,\n fallback: assetDef.fallback,\n metadata: {\n size: assetDef.metadata?.size || 0,\n mimeType: assetDef.metadata?.mimeType || '',\n cacheDuration: assetDef.metadata?.cacheDuration || 3600000, // 1 hour default\n dimensions: assetDef.metadata?.dimensions,\n duration: assetDef.metadata?.duration,\n quality: 1,\n streamable: false,\n priority: 'normal'\n },\n progress: 0\n };\n \n compiledAssets.set(assetDef.id, asset);\n }\n \n return compiledAssets;\n }\n \n /**\n * Compiles scene definitions into runtime scenes\n */\n private static compileScenes(scenes: CinematicScene[], context: CompilationContext): Map<string, CompiledScene> {\n const compiledScenes = new Map<string, CompiledScene>();\n let currentStartTime = 0;\n \n for (const scene of scenes) {\n const compiledLayers = this.compileLayers(scene.layers, context);\n const compiledAudioTracks = this.compileAudioTracks(scene.audio || [], context);\n \n const compiledScene: CompiledScene = {\n id: scene.id,\n name: scene.name,\n duration: scene.duration,\n layers: compiledLayers,\n audioTracks: compiledAudioTracks,\n startTime: currentStartTime,\n endTime: currentStartTime + scene.duration\n };\n \n compiledScenes.set(scene.id, compiledScene);\n currentStartTime += scene.duration;\n }\n \n return compiledScenes;\n }\n \n /**\n * Compiles layer specifications into runtime layers\n */\n private static compileLayers(layers: LayerSpec[], context: CompilationContext): CompiledLayer[] {\n return layers\n .sort((a, b) => a.zIndex - b.zIndex) // Sort by z-index for rendering order\n .map(layer => {\n const compiledAnimations = this.compileAnimationTracks(layer.animations || [], context);\n \n // Create a placeholder layer instance (actual instantiation happens in LayerRegistry)\n const layerInstance = {\n id: layer.id,\n type: layer.type,\n zIndex: layer.zIndex,\n mount: () => {},\n update: () => {},\n destroy: () => {}\n } as any; // Placeholder - real implementation in LayerRegistry\n \n const compiledLayer: CompiledLayer = {\n id: layer.id,\n type: layer.type,\n zIndex: layer.zIndex,\n instance: layerInstance,\n animations: compiledAnimations,\n initialConfig: { ...layer.config },\n active: true\n };\n \n return compiledLayer;\n });\n }\n \n /**\n * Compiles animation tracks into optimized runtime animations\n */\n private static compileAnimationTracks(tracks: AnimationTrackSpec[], _context: CompilationContext): CompiledAnimationTrack[] {\n return tracks.map(track => AnimationCompiler.compileTrack(track));\n }\n \n /**\n * Compiles audio tracks into runtime audio objects\n */\n private static compileAudioTracks(tracks: AudioTrackSpec[], _context: CompilationContext): CompiledAudioTrack[] {\n return tracks.map(track => {\n // Create placeholder asset reference (actual loading in AssetManager)\n const asset: Asset = {\n id: track.id,\n type: 'audio',\n src: track.src,\n data: null,\n loaded: false,\n error: null,\n metadata: {\n size: 0,\n mimeType: 'audio/mpeg',\n cacheDuration: 3600000,\n priority: 'normal'\n },\n progress: 0\n };\n \n const compiledTrack: CompiledAudioTrack = {\n id: track.id,\n type: track.type,\n asset,\n startMs: track.startMs,\n endMs: track.endMs || 0, // Will be set when audio loads\n volume: track.volume || 1,\n fadeIn: track.fadeIn || 0,\n fadeOut: track.fadeOut || 0,\n loop: track.loop || false\n };\n \n return compiledTrack;\n });\n }\n \n /**\n * Compiles event definitions into runtime events\n */\n private static compileEvents(events: CinematicEvent[], scenes: Map<string, CompiledScene>, context: CompilationContext): Map<string, CompiledEvent> {\n const compiledEvents = new Map<string, CompiledEvent>();\n let currentStartTime = 0;\n \n for (const event of events) {\n const eventScenes = event.scenes.map(sceneId => {\n const scene = scenes.get(sceneId);\n if (!scene) {\n throw new Error(`Scene with ID \"${sceneId}\" not found for event \"${event.id}\"`);\n }\n return scene;\n });\n \n const compiledTransitions = this.compileTransitions(event.transitions || [], context);\n const eventDuration = eventScenes.reduce((total, scene) => total + scene.duration, 0);\n \n const compiledEvent: CompiledEvent = {\n id: event.id,\n name: event.name,\n scenes: eventScenes,\n transitions: compiledTransitions,\n duration: eventDuration,\n startTime: currentStartTime\n };\n \n compiledEvents.set(event.id, compiledEvent);\n currentStartTime += eventDuration;\n }\n \n return compiledEvents;\n }\n \n /**\n * Compiles transition specifications into runtime transitions\n */\n private static compileTransitions(transitions: TransitionSpec[], _context: CompilationContext): CompiledTransition[] {\n return transitions.map(transition => {\n const easingFunction = AnimationCompiler.compileEasing(transition.easing || 'ease');\n \n // Create placeholder transition execution function\n const executeFunction = (progress: number, _fromElement: HTMLElement, _toElement: HTMLElement) => {\n // Actual implementation would be in the transition system\n // TODO: Implement transition execution logic\n void progress; // Suppress unused parameter warning\n };\n \n const compiledTransition: CompiledTransition = {\n type: transition.type,\n duration: transition.duration,\n easingFunction,\n config: transition.config || {},\n execute: executeFunction\n };\n \n return compiledTransition;\n });\n }\n \n /**\n * Formats Zod validation errors into human-readable messages\n */\n private static formatZodError(error: z.ZodError): string {\n const messages = error.errors.map(err => {\n const path = err.path.length > 0 ? `at ${err.path.join('.')}` : 'at root';\n return `${path}: ${err.message}`;\n });\n \n return `Specification validation failed:\\n${messages.join('\\n')}`;\n }\n}","/**\n * CLI tool for cinematic-renderer2d\n * \n * Provides commands for spec validation and preview functionality.\n * \n * Requirements: 11.5\n */\n\nimport { readFileSync, existsSync } from 'fs';\nimport { resolve } from 'path';\nimport { SpecParser } from '../parsing/SpecParser';\n\ninterface CLIOptions {\n command: 'validate' | 'preview';\n file: string;\n verbose?: boolean;\n output?: string;\n}\n\n/**\n * Main CLI entry point\n */\nasync function main() {\n const args = process.argv.slice(2);\n \n if (args.length === 0) {\n showHelp();\n process.exit(0);\n }\n \n try {\n const options = parseArgs(args);\n await executeCommand(options);\n } catch (error) {\n console.error('Error:', error instanceof Error ? error.message : 'Unknown error');\n process.exit(1);\n }\n}\n\n/**\n * Parse command line arguments\n */\nfunction parseArgs(args: string[]): CLIOptions {\n const options: Partial<CLIOptions> = {};\n \n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n \n switch (arg) {\n case 'validate':\n case 'preview':\n if (options.command) {\n throw new Error('Multiple commands specified. Use only one command.');\n }\n options.command = arg;\n break;\n \n case '-f':\n case '--file':\n if (i + 1 >= args.length) {\n throw new Error('--file requires a file path');\n }\n const fileArg = args[i + 1];\n if (!fileArg) {\n throw new Error('--file requires a file path');\n }\n options.file = fileArg;\n i++; // Skip the next argument since we consumed it\n break;\n \n case '-v':\n case '--verbose':\n options.verbose = true;\n break;\n \n case '-o':\n case '--output':\n if (i + 1 >= args.length) {\n throw new Error('--output requires a file path');\n }\n const outputArg = args[i + 1];\n if (!outputArg) {\n throw new Error('--output requires a file path');\n }\n options.output = outputArg;\n i++; // Skip the next argument since we consumed it\n break;\n \n case '-h':\n case '--help':\n showHelp();\n process.exit(0);\n break;\n \n default:\n // If no command is set and this doesn't start with -, treat as file\n if (arg && !options.command && !arg.startsWith('-')) {\n throw new Error(`Unknown command: ${arg}. Use 'validate' or 'preview'.`);\n } else if (arg && !options.file && !arg.startsWith('-')) {\n options.file = arg;\n } else if (arg) {\n throw new Error(`Unknown option: ${arg}`);\n }\n }\n }\n \n if (!options.command) {\n throw new Error('No command specified. Use \"validate\" or \"preview\".');\n }\n \n if (!options.file) {\n throw new Error('No file specified. Use --file or provide file path.');\n }\n \n return options as CLIOptions;\n}\n\n/**\n * Execute the specified command\n */\nasync function executeCommand(options: CLIOptions): Promise<void> {\n switch (options.command) {\n case 'validate':\n await validateCommand(options);\n break;\n case 'preview':\n await previewCommand(options);\n break;\n default:\n throw new Error(`Unknown command: ${options.command}`);\n }\n}\n\n/**\n * Validate command implementation\n */\nasync function validateCommand(options: CLIOptions): Promise<void> {\n const filePath = resolve(options.file);\n \n if (!existsSync(filePath)) {\n throw new Error(`File not found: ${filePath}`);\n }\n \n if (options.verbose) {\n console.log(`Validating specification: ${filePath}`);\n }\n \n try {\n // Read and parse the JSON file\n const fileContent = readFileSync(filePath, 'utf-8');\n let jsonSpec: unknown;\n \n try {\n jsonSpec = JSON.parse(fileContent);\n } catch (parseError) {\n throw new Error(`Invalid JSON format: ${parseError instanceof Error ? parseError.message : 'Unknown JSON error'}`);\n }\n \n // Validate the specification\n const validatedSpec = SpecParser.validate(jsonSpec);\n \n // Compile the specification to check for compilation errors\n const compiledSpec = SpecParser.parse(validatedSpec);\n \n // Success output\n console.log('✅ Specification is valid!');\n \n if (options.verbose) {\n console.log('\\nSpecification Details:');\n console.log(` Schema Version: ${validatedSpec.schemaVersion}`);\n console.log(` Events: ${validatedSpec.events.length}`);\n console.log(` Scenes: ${validatedSpec.scenes.length}`);\n console.log(` Assets: ${validatedSpec.assets?.length || 0}`);\n console.log(` Total Duration: ${compiledSpec.totalDuration}ms`);\n console.log(` Target FPS: ${validatedSpec.engine.targetFps}`);\n console.log(` Quality: ${validatedSpec.engine.quality}`);\n \n // Show layer types used\n const layerTypes = new Set(validatedSpec.scenes.flatMap(s => s.layers.map(l => l.type)));\n console.log(` Layer Types: ${Array.from(layerTypes).join(', ')}`);\n \n // Show audio tracks\n const audioTracks = validatedSpec.scenes.flatMap(s => s.audio || []);\n if (audioTracks.length > 0) {\n console.log(` Audio Tracks: ${audioTracks.length}`);\n const audioTypes = new Set(audioTracks.map(a => a.type));\n console.log(` Audio Types: ${Array.from(audioTypes).join(', ')}`);\n }\n }\n \n // Save validation report if output specified\n if (options.output) {\n const report = {\n valid: true,\n file: filePath,\n validatedAt: new Date().toISOString(),\n spec: {\n schemaVersion: validatedSpec.schemaVersion,\n events: validatedSpec.events.length,\n scenes: validatedSpec.scenes.length,\n assets: validatedSpec.assets?.length || 0,\n totalDuration: compiledSpec.totalDuration,\n targetFps: validatedSpec.engine.targetFps,\n quality: validatedSpec.engine.quality\n }\n };\n \n const { writeFileSync } = await import('fs');\n writeFileSync(options.output, JSON.stringify(report, null, 2));\n console.log(`📄 Validation report saved to: ${options.output}`);\n }\n \n } catch (error) {\n console.error('❌ Specification validation failed:');\n console.error(error instanceof Error ? error.message : 'Unknown validation error');\n \n // Save error report if output specified\n if (options.output) {\n const errorReport = {\n valid: false,\n file: filePath,\n validatedAt: new Date().toISOString(),\n error: error instanceof Error ? error.message : 'Unknown validation error'\n };\n \n const { writeFileSync } = await import('fs');\n writeFileSync(options.output, JSON.stringify(errorReport, null, 2));\n console.log(`📄 Error report saved to: ${options.output}`);\n }\n \n process.exit(1);\n }\n}\n\n/**\n * Preview command implementation\n */\nasync function previewCommand(options: CLIOptions): Promise<void> {\n const filePath = resolve(options.file);\n \n if (!existsSync(filePath)) {\n throw new Error(`File not found: ${filePath}`);\n }\n \n if (options.verbose) {\n console.log(`Generating preview for: ${filePath}`);\n }\n \n try {\n // Read and validate the specification first\n const fileContent = readFileSync(filePath, 'utf-8');\n let jsonSpec: unknown;\n \n try {\n jsonSpec = JSON.parse(fileContent);\n } catch (parseError) {\n throw new Error(`Invalid JSON format: ${parseError instanceof Error ? parseError.message : 'Unknown JSON error'}`);\n }\n \n const validatedSpec = SpecParser.validate(jsonSpec);\n const compiledSpec = SpecParser.parse(validatedSpec);\n \n // Generate HTML preview\n const previewHtml = generatePreviewHtml(validatedSpec, compiledSpec, filePath);\n \n // Save or display preview\n if (options.output) {\n const { writeFileSync } = await import('fs');\n writeFileSync(options.output, previewHtml);\n console.log(`🎬 Preview saved to: ${options.output}`);\n console.log(` Open in browser to view the cinematic experience.`);\n } else {\n // Create temporary file and try to open it\n const { tmpdir } = await import('os');\n const { join } = await import('path');\n const tempFile = join(tmpdir(), `cinematic-preview-${Date.now()}.html`);\n \n const { writeFileSync } = await import('fs');\n writeFileSync(tempFile, previewHtml);\n \n console.log(`🎬 Preview generated: ${tempFile}`);\n console.log(` Open this file in your browser to view the cinematic experience.`);\n \n // Try to open in default browser (optional)\n try {\n const { exec } = await import('child_process');\n const command = process.platform === 'darwin' ? 'open' : \n process.platform === 'win32' ? 'start' : 'xdg-open';\n exec(`${command} \"${tempFile}\"`);\n console.log(` Opening in default browser...`);\n } catch {\n // Silently fail if can't open browser\n }\n }\n \n } catch (error) {\n console.error('❌ Preview generation failed:');\n console.error(error instanceof Error ? error.message : 'Unknown preview error');\n process.exit(1);\n }\n}\n\n/**\n * Generate HTML preview for the specification\n */\nfunction generatePreviewHtml(spec: any, compiledSpec: any, filePath: string): string {\n const specJson = JSON.stringify(spec, null, 2);\n \n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>Cinematic Preview - ${spec.events[0]?.name || 'Untitled'}</title>\n <style>\n body {\n margin: 0;\n padding: 20px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n background: #1a1a1a;\n color: #ffffff;\n }\n .container {\n max-width: 1200px;\n margin: 0 auto;\n }\n .header {\n text-align: center;\n margin-bottom: 30px;\n }\n .preview-area {\n background: #000;\n border-radius: 8px;\n margin-bottom: 30px;\n position: relative;\n aspect-ratio: 16/9;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 2px solid #333;\n }\n .placeholder {\n text-align: center;\n color: #666;\n }\n .controls {\n display: flex;\n justify-content: center;\n gap: 10px;\n margin-bottom: 30px;\n }\n .btn {\n padding: 10px 20px;\n background: #007acc;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n }\n .btn:hover {\n background: #005a9e;\n }\n .btn:disabled {\n background: #333;\n cursor: not-allowed;\n }\n .info-panel {\n background: #2a2a2a;\n border-radius: 8px;\n padding: 20px;\n margin-bottom: 20px;\n }\n .info-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 15px;\n }\n .info-item {\n background: #333;\n padding: 15px;\n border-radius: 4px;\n }\n .info-label {\n font-size: 12px;\n color: #999;\n text-transform: uppercase;\n margin-bottom: 5px;\n }\n .info-value {\n font-size: 16px;\n font-weight: 600;\n }\n .spec-details {\n background: #2a2a2a;\n border-radius: 8px;\n padding: 20px;\n }\n .spec-json {\n background: #1a1a1a;\n border-radius: 4px;\n padding: 15px;\n overflow-x: auto;\n font-family: 'Monaco', 'Menlo', monospace;\n font-size: 12px;\n line-height: 1.4;\n max-height: 400px;\n overflow-y: auto;\n }\n .warning {\n background: #ff6b35;\n color: white;\n padding: 15px;\n border-radius: 4px;\n margin-bottom: 20px;\n }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <div class=\"header\">\n <h1>🎬 Cinematic Preview</h1>\n <p>Specification: <code>${filePath}</code></p>\n </div>\n \n <div class=\"warning\">\n <strong>⚠️ Preview Mode:</strong> This is a static preview of your specification. \n For full interactive playback, integrate the cinematic-renderer2d library into your application.\n </div>\n \n <div class=\"preview-area\">\n <div class=\"placeholder\">\n <h2>🎭 Cinematic Renderer Preview</h2>\n <p>Interactive preview would appear here</p>\n <p>Total Duration: ${compiledSpec.totalDuration}ms</p>\n </div>\n </div>\n \n <div class=\"controls\">\n <button class=\"btn\" disabled>▶️ Play</button>\n <button class=\"btn\" disabled>⏸️ Pause</button>\n <button class=\"btn\" disabled>⏹️ Stop</button>\n <button class=\"btn\" disabled>⏮️ Previous</button>\n <button class=\"btn\" disabled>⏭️ Next</button>\n </div>\n \n <div class=\"info-panel\">\n <h3>Specification Overview</h3>\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <div class=\"info-label\">Schema Version</div>\n <div class=\"info-value\">${spec.schemaVersion}</div>\n </div>\n <div class=\"info-item\">\n <div class=\"info-label\">Events</div>\n <div class=\"info-value\">${spec.events.length}</div>\n </div>\n <div class=\"info-item\">\n <div class=\"info-label\">Scenes</div>\n <div class=\"info-value\">${spec.scenes.length}</div>\n </div>\n <div class=\"info-item\">\n <div class=\"info-label\">Assets</div>\n <div class=\"info-value\">${spec.assets?.length || 0}</div>\n </div>\n <div class=\"info-item\">\n <div class=\"info-label\">Target FPS</div>\n <div class=\"info-value\">${spec.engine.targetFps}</div>\n </div>\n <div class=\"info-item\">\n <div class=\"info-label\">Quality</div>\n <div class=\"info-value\">${spec.engine.quality}</div>\n </div>\n <div class=\"info-item\">\n <div class=\"info-label\">Total Duration</div>\n <div class=\"info-value\">${Math.round(compiledSpec.totalDuration / 1000)}s</div>\n </div>\n <div class=\"info-item\">\n <div class=\"info-label\">Layer Types</div>\n <div class=\"info-value\">${Array.from(new Set(spec.scenes.flatMap((s: any) => s.layers.map((l: any) => l.type)))).join(', ')}</div>\n </div>\n </div>\n </div>\n \n <div class=\"spec-details\">\n <h3>Specification Details</h3>\n <pre class=\"spec-json\">${specJson}</pre>\n </div>\n </div>\n</body>\n</html>`;\n}\n\n/**\n * Show CLI help information\n */\nfunction showHelp(): void {\n console.log(`\n🎬 Cinematic Renderer 2D CLI\n\nUSAGE:\n cinematic-cli <command> [options]\n\nCOMMANDS:\n validate Validate a JSON specification file\n preview Generate an HTML preview of the specification\n\nOPTIONS:\n -f, --file <path> Specification file to process (required)\n -v, --verbose Show detailed output\n -o, --output <path> Output file path (optional)\n -h, --help Show this help message\n\nEXAMPLES:\n # Validate a specification\n cinematic-cli validate --file my-spec.json\n\n # Validate with verbose output\n cinematic-cli validate --file my-spec.json --verbose\n\n # Generate preview\n cinematic-cli preview --file my-spec.json\n\n # Save preview to specific file\n cinematic-cli preview --file my-spec.json --output preview.html\n\n # Save validation report\n cinematic-cli validate --file my-spec.json --output report.json\n`);\n}\n\n// Run the CLI if this file is executed directly\nif (import.meta.url === `file://${process.argv[1]}`) {\n main().catch(error => {\n console.error('Fatal error:', error);\n process.exit(1);\n });\n}\n\nexport { main as runCLI };"]}
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
'use strict';var zod=require('zod');var E=class{static compileTrack(e){let t=this.compileEasing(e.easing||"ease"),i=this.compileInterpolation(e.from,e.to,t);return {property:e.property,startMs:e.startMs,endMs:e.endMs,interpolate:i,loop:e.loop||false,yoyo:e.yoyo||false,easingType:e.easing||"ease",currentLoop:0,isReverse:false}}static compileEasing(e){if(typeof e=="string"&&e.startsWith("cubic-bezier("))return this.compileCubicBezier(e);switch(e){case "linear":return t=>t;case "ease":return this.cubicBezier(.25,.1,.25,1);case "ease-in":return this.cubicBezier(.42,0,1,1);case "ease-out":return this.cubicBezier(0,0,.58,1);case "ease-in-out":return this.cubicBezier(.42,0,.58,1);case "ease-in-sine":return t=>1-Math.cos(t*Math.PI/2);case "ease-out-sine":return t=>Math.sin(t*Math.PI/2);case "ease-in-out-sine":return t=>-(Math.cos(Math.PI*t)-1)/2;case "ease-in-quad":return t=>t*t;case "ease-out-quad":return t=>1-(1-t)*(1-t);case "ease-in-out-quad":return t=>t<.5?2*t*t:1-Math.pow(-2*t+2,2)/2;case "ease-in-cubic":return t=>t*t*t;case "ease-out-cubic":return t=>1-Math.pow(1-t,3);case "ease-in-out-cubic":return t=>t<.5?4*t*t*t:1-Math.pow(-2*t+2,3)/2;case "ease-in-quart":return t=>t*t*t*t;case "ease-out-quart":return t=>1-Math.pow(1-t,4);case "ease-in-out-quart":return t=>t<.5?8*t*t*t*t:1-Math.pow(-2*t+2,4)/2;case "ease-in-quint":return t=>t*t*t*t*t;case "ease-out-quint":return t=>1-Math.pow(1-t,5);case "ease-in-out-quint":return t=>t<.5?16*t*t*t*t*t:1-Math.pow(-2*t+2,5)/2;case "ease-in-expo":return t=>t===0?0:Math.pow(2,10*(t-1));case "ease-out-expo":return t=>t===1?1:1-Math.pow(2,-10*t);case "ease-in-out-expo":return t=>t===0?0:t===1?1:t<.5?Math.pow(2,20*t-10)/2:(2-Math.pow(2,-20*t+10))/2;case "ease-in-circ":return t=>1-Math.sqrt(1-Math.pow(t,2));case "ease-out-circ":return t=>Math.sqrt(1-Math.pow(t-1,2));case "ease-in-out-circ":return t=>t<.5?(1-Math.sqrt(1-Math.pow(2*t,2)))/2:(Math.sqrt(1-Math.pow(-2*t+2,2))+1)/2;case "ease-in-back":return this.backEasing(1.70158,"in");case "ease-out-back":return this.backEasing(1.70158,"out");case "ease-in-out-back":return this.backEasing(1.70158,"in-out");case "ease-in-elastic":return this.elasticEasing(2*Math.PI/3,"in");case "ease-out-elastic":return this.elasticEasing(2*Math.PI/3,"out");case "ease-in-out-elastic":return this.elasticEasing(2*Math.PI/4.5,"in-out");case "ease-in-bounce":return t=>1-this.bounceOut(1-t);case "ease-out-bounce":return this.bounceOut;case "ease-in-out-bounce":return t=>t<.5?(1-this.bounceOut(1-2*t))/2:(1+this.bounceOut(2*t-1))/2;default:return this.cubicBezier(.25,.1,.25,1)}}static compileInterpolation(e,t,i){let r=this.getValueType(e),s=this.getValueType(t);if(r!==s)return n=>i(Math.max(0,Math.min(1,n)))<.5?e:t;switch(r){case "number":return this.compileNumberInterpolation(e,t,i);case "string":return this.compileStringInterpolation(e,t,i);case "boolean":return this.compileBooleanInterpolation(e,t,i);case "object":return this.compileObjectInterpolation(e,t,i);default:return n=>i(Math.max(0,Math.min(1,n)))<.5?e:t}}static cubicBezier(e,t,i,r){return s=>{let n=3*e,a=3*(i-e)-n,c=1-n-a,m=3*t,h=3*(r-t)-m,y=1-m-h,f=s;for(let v=0;v<8;v++){let d=((c*f+a)*f+n)*f,u=(3*c*f+2*a)*f+n;if(Math.abs(u)<1e-6)break;f=f-(d-s)/u;}return ((y*f+h)*f+m)*f}}static compileCubicBezier(e){let t=e.match(/cubic-bezier\(([^)]+)\)/);if(!t||!t[1])return this.cubicBezier(.25,.1,.25,1);let i=t[1].split(",").map(r=>parseFloat(r.trim()));return i.length!==4||i.some(r=>isNaN(r))?this.cubicBezier(.25,.1,.25,1):this.cubicBezier(i[0],i[1],i[2],i[3])}static backEasing(e,t){let i=e,r=i*1.525,s=i+1;switch(t){case "in":return n=>s*n*n*n-i*n*n;case "out":return n=>1+s*Math.pow(n-1,3)+i*Math.pow(n-1,2);case "in-out":return n=>n<.5?Math.pow(2*n,2)*((r+1)*2*n-r)/2:(Math.pow(2*n-2,2)*((r+1)*(n*2-2)+r)+2)/2;default:return n=>n}}static elasticEasing(e,t){switch(t){case "in":return i=>i===0?0:i===1?1:-Math.pow(2,10*i-10)*Math.sin((i*10-10.75)*e);case "out":return i=>i===0?0:i===1?1:Math.pow(2,-10*i)*Math.sin((i*10-.75)*e)+1;case "in-out":return i=>i===0?0:i===1?1:i<.5?-(Math.pow(2,20*i-10)*Math.sin((20*i-11.125)*e))/2:Math.pow(2,-20*i+10)*Math.sin((20*i-11.125)*e)/2+1;default:return i=>i}}static bounceOut(e){return e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375}static getValueType(e){return typeof e=="number"?"number":typeof e=="string"?"string":typeof e=="boolean"?"boolean":"object"}static compileNumberInterpolation(e,t,i){let r=t-e;return s=>{let n=i(Math.max(0,Math.min(1,s)));return e+r*n}}static compileStringInterpolation(e,t,i){let r=e.match(/^([+-]?\d*\.?\d+)(.*)$/),s=t.match(/^([+-]?\d*\.?\d+)(.*)$/);if(r&&s&&r[2]===s[2]){let n=parseFloat(r[1]),a=parseFloat(s[1]),c=r[2],m=a-n;return h=>{let y=i(Math.max(0,Math.min(1,h))),f=n+m*y;return `${Math.round(f*1e6)/1e6}${c}`}}return n=>i(Math.max(0,Math.min(1,n)))<.5?e:t}static compileBooleanInterpolation(e,t,i){return r=>i(Math.max(0,Math.min(1,r)))<.5?e:t}static compileObjectInterpolation(e,t,i){let r=new Map,s=new Set([...Object.keys(e),...Object.keys(t)]);for(let n of s){let a=e[n],c=t[n];a!==void 0&&c!==void 0?r.set(n,this.compileInterpolation(a,c,i)):a!==void 0?r.set(n,()=>a):r.set(n,m=>i(Math.max(0,Math.min(1,m)))<.5?void 0:c);}return n=>{let a={};for(let[c,m]of r){let h=m(n);h!==void 0&&(a[c]=h);}return a}}};var Z=["1.0.0","1.1.0"],ue=zod.z.enum(["low","medium","high","ultra","auto"]),de=zod.z.enum(["gradient","image","textBlock","vignette","glowOrb","noiseOverlay","particles","starfield","dust","nebulaNoise","webgl-custom"]),se=zod.z.enum(["linear","ease","ease-in","ease-out","ease-in-out","ease-in-sine","ease-out-sine","ease-in-out-sine","ease-in-quad","ease-out-quad","ease-in-out-quad","ease-in-cubic","ease-out-cubic","ease-in-out-cubic","ease-in-quart","ease-out-quart","ease-in-out-quart","ease-in-quint","ease-out-quint","ease-in-out-quint","ease-in-expo","ease-out-expo","ease-in-out-expo","ease-in-circ","ease-out-circ","ease-in-out-circ","ease-in-back","ease-out-back","ease-in-out-back","ease-in-elastic","ease-out-elastic","ease-in-out-elastic","ease-in-bounce","ease-out-bounce","ease-in-out-bounce"]).or(zod.z.string().regex(/^cubic-bezier\(\d*\.?\d+,\d*\.?\d+,\d*\.?\d+,\d*\.?\d+\)$/)),me=zod.z.enum(["voiceover","ambience","transition","music","sfx"]),he=zod.z.enum(["fade","slide","zoom","wipe","dissolve","blur"]),pe=zod.z.enum(["image","video","audio","font","json","binary"]),fe=zod.z.object({x:zod.z.union([zod.z.number(),zod.z.string()]).optional(),y:zod.z.union([zod.z.number(),zod.z.string()]).optional(),scale:zod.z.number().optional(),rotation:zod.z.number().optional(),origin:zod.z.string().optional()}).optional(),ye=zod.z.object({opacity:zod.z.number().min(0).max(1).optional(),visible:zod.z.boolean().optional(),transform:fe}).catchall(zod.z.any()),re=zod.z.union([zod.z.number(),zod.z.string(),zod.z.boolean(),zod.z.record(zod.z.union([zod.z.number(),zod.z.string(),zod.z.boolean()]))]),ve=zod.z.object({property:zod.z.string().min(1),from:re,to:re,startMs:zod.z.number().min(0),endMs:zod.z.number().min(0),easing:se.optional().default("ease"),loop:zod.z.boolean().optional().default(false),yoyo:zod.z.boolean().optional().default(false)}).refine(p=>p.endMs>p.startMs,{message:"endMs must be greater than startMs",path:["endMs"]}),ge=zod.z.object({id:zod.z.string().min(1),type:me,src:zod.z.string().min(1),startMs:zod.z.number().min(0),endMs:zod.z.number().min(0).optional(),volume:zod.z.number().min(0).max(1).optional().default(1),fadeIn:zod.z.number().min(0).optional().default(0),fadeOut:zod.z.number().min(0).optional().default(0),loop:zod.z.boolean().optional().default(false)}),be=zod.z.object({direction:zod.z.enum(["up","down","left","right","in","out"]).optional(),blurAmount:zod.z.number().min(0).optional()}).catchall(zod.z.any()).optional(),xe=zod.z.object({type:he,duration:zod.z.number().min(0),easing:se.optional().default("ease"),config:be}),_e=zod.z.object({size:zod.z.number().min(0).optional(),mimeType:zod.z.string().optional(),cacheDuration:zod.z.number().min(0).optional(),dimensions:zod.z.object({width:zod.z.number().min(1),height:zod.z.number().min(1)}).optional(),duration:zod.z.number().min(0).optional()}).optional(),Ce=zod.z.object({id:zod.z.string().min(1),type:pe,src:zod.z.string().min(1),preload:zod.z.boolean().optional().default(true),fallback:zod.z.string().optional(),metadata:_e}),Te=zod.z.object({id:zod.z.string().min(1),type:de,zIndex:zod.z.number(),config:ye,animations:zod.z.array(ve).optional().default([])}),we=zod.z.object({id:zod.z.string().min(1),name:zod.z.string().min(1),duration:zod.z.number().min(0),layers:zod.z.array(Te).min(1),audio:zod.z.array(ge).optional().default([])}),Me=zod.z.object({id:zod.z.string().min(1),name:zod.z.string().min(1),scenes:zod.z.array(zod.z.string().min(1)).min(1),transitions:zod.z.array(xe).optional().default([])}),Se=zod.z.object({targetFps:zod.z.number().min(1).max(240).optional().default(60),quality:ue.optional().default("auto"),debug:zod.z.boolean().optional().default(false),autoplay:zod.z.boolean().optional().default(false)}),Le=zod.z.object({schemaVersion:zod.z.string().min(1),engine:Se,events:zod.z.array(Me).min(1),scenes:zod.z.array(we).min(1),assets:zod.z.array(Ce).optional().default([])}).refine(p=>{let e=new Set(p.scenes.map(i=>i.id)),t=new Set(p.events.flatMap(i=>i.scenes));for(let i of t)if(!e.has(i))return false;return true},{message:"All scene IDs referenced in events must exist in the scenes array",path:["events"]}).refine(p=>{let e=p.events.map(r=>r.id),t=p.scenes.map(r=>r.id),i=p.assets?.map(r=>r.id)||[];return new Set(e).size===e.length&&new Set(t).size===t.length&&new Set(i).size===i.length},{message:"All IDs must be unique within their respective collections",path:["events","scenes","assets"]}),P=class{static validate(e){try{if(typeof e!="object"||e===null)throw new Error("Specification must be a valid object");let i=e.schemaVersion;if(!i||typeof i!="string")throw new Error("Missing or invalid schemaVersion. Current supported versions: "+Z.join(", "));if(!Z.includes(i))throw new Error(`Unsupported schema version: ${i}. Supported versions: ${Z.join(", ")}`);return this.validateByVersion(e,i)}catch(t){throw t instanceof zod.z.ZodError?new Error(this.formatZodError(t)):t}}static parse(e){let t={schemaVersion:e.schemaVersion,assetPromises:new Map,layerTypes:new Set(e.scenes.flatMap(i=>i.layers.map(r=>r.type))),diagnostics:[],optimizations:{precompileAnimations:true,optimizeAssetLoading:true,enableObjectPooling:true,minimizeDOMUpdates:true,useWebWorkers:false}};try{let i=this.compileAssets(e.assets||[],t),r=this.compileScenes(e.scenes,t),s=this.compileEvents(e.events,r,t),n=Math.max(...Array.from(s.values()).map(c=>c.startTime+c.duration)),a={events:s,scenes:r,assets:i,globalConfig:e.engine,schemaVersion:e.schemaVersion,totalDuration:n,compiledAt:Date.now()};return t.diagnostics.length>0&&console.warn("Compilation completed with warnings:",t.diagnostics),a}catch(i){throw t.diagnostics.push({level:"error",message:i instanceof Error?i.message:"Unknown compilation error",code:"COMPILATION_ERROR"}),new Error(`Compilation failed: ${i instanceof Error?i.message:"Unknown error"}`)}}static validateByVersion(e,t){switch(t){case "1.0.0":case "1.1.0":return Le.parse(e);default:throw new Error(`Unsupported schema version: ${t}`)}}static compileAssets(e,t){let i=new Map;for(let r of e){let s={id:r.id,type:r.type,src:r.src,data:null,loaded:false,error:null,fallback:r.fallback,metadata:{size:r.metadata?.size||0,mimeType:r.metadata?.mimeType||"",cacheDuration:r.metadata?.cacheDuration||36e5,dimensions:r.metadata?.dimensions,duration:r.metadata?.duration,quality:1,streamable:false,priority:"normal"},progress:0};i.set(r.id,s);}return i}static compileScenes(e,t){let i=new Map,r=0;for(let s of e){let n=this.compileLayers(s.layers,t),a=this.compileAudioTracks(s.audio||[],t),c={id:s.id,name:s.name,duration:s.duration,layers:n,audioTracks:a,startTime:r,endTime:r+s.duration};i.set(s.id,c),r+=s.duration;}return i}static compileLayers(e,t){return e.sort((i,r)=>i.zIndex-r.zIndex).map(i=>{let r=this.compileAnimationTracks(i.animations||[],t),s={id:i.id,type:i.type,zIndex:i.zIndex,mount:()=>{},update:()=>{},destroy:()=>{}};return {id:i.id,type:i.type,zIndex:i.zIndex,instance:s,animations:r,initialConfig:{...i.config},active:true}})}static compileAnimationTracks(e,t){return e.map(i=>E.compileTrack(i))}static compileAudioTracks(e,t){return e.map(i=>{let r={id:i.id,type:"audio",src:i.src,data:null,loaded:false,error:null,metadata:{size:0,mimeType:"audio/mpeg",cacheDuration:36e5,priority:"normal"},progress:0};return {id:i.id,type:i.type,asset:r,startMs:i.startMs,endMs:i.endMs||0,volume:i.volume||1,fadeIn:i.fadeIn||0,fadeOut:i.fadeOut||0,loop:i.loop||false}})}static compileEvents(e,t,i){let r=new Map,s=0;for(let n of e){let a=n.scenes.map(y=>{let f=t.get(y);if(!f)throw new Error(`Scene with ID "${y}" not found for event "${n.id}"`);return f}),c=this.compileTransitions(n.transitions||[],i),m=a.reduce((y,f)=>y+f.duration,0),h={id:n.id,name:n.name,scenes:a,transitions:c,duration:m,startTime:s};r.set(n.id,h),s+=m;}return r}static compileTransitions(e,t){return e.map(i=>{let r=E.compileEasing(i.easing||"ease"),s=(a,c,m)=>{};return {type:i.type,duration:i.duration,easingFunction:r,config:i.config||{},execute:s}})}static formatZodError(e){return `Specification validation failed:
|
|
2
|
+
${e.errors.map(i=>`${i.path.length>0?`at ${i.path.join(".")}`:"at root"}: ${i.message}`).join(`
|
|
3
|
+
`)}`}};var z=class{constructor(e={}){this.isRunning=false;this.animationFrameId=null;this.lastFrameTime=0;this.frameCallbacks=[];this.frameNumber=0;this.frameTimes=[];this.currentFps=0;this.lastMonitoringTime=0;this.qualityChangeCallbacks=[];this.options={targetFps:e.targetFps||60,fpsWindowSize:e.fpsWindowSize||60,monitoringInterval:e.monitoringInterval||1e3,enableAdaptiveQuality:e.enableAdaptiveQuality!==false},this.performanceMetrics={fps:0,frameTime:0,activeParticles:0,activeLayers:0,domNodes:0,drawCalls:0};}start(){this.isRunning||(this.isRunning=true,this.frameNumber=0,this.frameTimes=[],this.lastFrameTime=performance.now(),this.lastMonitoringTime=this.lastFrameTime,this.scheduleFrame());}stop(){this.isRunning=false,this.animationFrameId!==null&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.frameNumber=0,this.frameTimes=[],this.currentFps=0;}addFrameCallback(e){this.frameCallbacks.push(e);}removeFrameCallback(e){let t=this.frameCallbacks.indexOf(e);t>-1&&this.frameCallbacks.splice(t,1);}addQualityChangeCallback(e){this.qualityChangeCallbacks.push(e);}removeQualityChangeCallback(e){let t=this.qualityChangeCallbacks.indexOf(e);t>-1&&this.qualityChangeCallbacks.splice(t,1);}getCurrentFps(){return this.currentFps}getPerformanceMetrics(){return {...this.performanceMetrics}}updateMetrics(e){this.performanceMetrics={...this.performanceMetrics,...e};}scheduleFrame(){this.isRunning&&(this.animationFrameId=requestAnimationFrame(e=>{let t=e-this.lastFrameTime;this.lastFrameTime=e,this.frameNumber++,this.updateFpsTracking(t),this.performanceMetrics.fps=this.currentFps,this.performanceMetrics.frameTime=t;let i={deltaMs:t,currentTime:e,fps:this.currentFps,frameNumber:this.frameNumber,metrics:{...this.performanceMetrics}};this.frameCallbacks.forEach(r=>{try{r(i);}catch(s){console.error("Error in frame callback:",s);}}),this.options.enableAdaptiveQuality&&e-this.lastMonitoringTime>=this.options.monitoringInterval&&(this.performPerformanceCheck(),this.lastMonitoringTime=e),this.scheduleFrame();}));}updateFpsTracking(e){if(this.frameTimes.push(e),this.frameTimes.length>this.options.fpsWindowSize&&this.frameTimes.shift(),this.frameTimes.length>0){let t=this.frameTimes.reduce((i,r)=>i+r,0)/this.frameTimes.length;this.currentFps=t>0?1e3/t:0;}}performPerformanceCheck(){let e=this.options.targetFps;this.currentFps/e;this.qualityChangeCallbacks.forEach(n=>{try{n(this.performanceMetrics);}catch(a){console.error("Error in quality change callback:",a);}}),typeof process<"u"&&process.env;}getAverageFrameTime(){return this.frameTimes.length===0?0:this.frameTimes.reduce((e,t)=>e+t,0)/this.frameTimes.length}getFrameTimeVariance(){if(this.frameTimes.length<2)return 0;let e=this.getAverageFrameTime();return this.frameTimes.reduce((i,r)=>{let s=r-e;return i+s*s},0)/this.frameTimes.length}isPerformanceStable(){let e=this.getFrameTimeVariance(),t=this.getAverageFrameTime();return e<t*.1}getPerformanceGrade(){let e=this.currentFps/this.options.targetFps,t=this.isPerformanceStable();return e>=.95&&t?"A":e>=.85&&t?"B":e>=.7?"C":e>=.5?"D":"F"}};var I=class{constructor(e={}){this.currentQuality="auto";this.performanceHistory=[];this.badFrameCount=0;this.goodFrameCount=0;this.lastQualityChange=0;this.eventCallbacks=[];if(this.config={monitoringInterval:e.monitoringInterval||1e3,fpsThreshold:e.fpsThreshold||50,badFrameThreshold:e.badFrameThreshold||5,goodFrameThreshold:e.goodFrameThreshold||30,respectUserPreferences:e.respectUserPreferences!==false,useDeviceDetection:e.useDeviceDetection!==false,customLevels:e.customLevels||{}},this.deviceCapabilities=this.detectDeviceCapabilities(),this.currentQuality="auto",this.currentSettings=this.getQualitySettings("auto"),this.config.useDeviceDetection){let t=this.determineInitialQuality();t!=="auto"&&(this.currentQuality=t,this.currentSettings=this.getQualitySettings(t));}}setQuality(e){if(this.currentQuality===e)return;let t=this.currentQuality;this.currentQuality=e,this.currentSettings=this.getQualitySettings(e),this.lastQualityChange=performance.now(),this.badFrameCount=0,this.goodFrameCount=0,this.emitEvent({type:"quality-change",metrics:this.getLatestMetrics(),previousQuality:t,newQuality:e,timestamp:performance.now()});}getCurrentQuality(){return this.currentQuality}getCurrentSettings(){return {...this.currentSettings}}getDeviceCapabilities(){return {...this.deviceCapabilities}}updatePerformanceMetrics(e){this.performanceHistory.push({...e,timestamp:performance.now()});let t=performance.now()-6e4;this.performanceHistory=this.performanceHistory.filter(i=>i.timestamp>t),this.currentQuality==="auto"&&this.evaluatePerformanceAndAdjust(e),this.checkPerformanceWarnings(e);}addEventListener(e){this.eventCallbacks.push(e);}removeEventListener(e){let t=this.eventCallbacks.indexOf(e);t>-1&&this.eventCallbacks.splice(t,1);}getQualitySettings(e){if(this.config.customLevels[e])return {...this.config.customLevels[e]};let t=this.getQualityPresets();if(e==="auto"){let i=this.determineAutoQuality();return {...t[i]}}return {...t[e]}}getQualityPresets(){return {low:{particleCount:50,canvasResolution:.5,animationPrecision:30,enableBlur:false,enableShadows:false,targetFps:30,enableAdvancedEffects:false,textureQuality:.5,useHardwareAcceleration:false},medium:{particleCount:200,canvasResolution:.75,animationPrecision:60,enableBlur:true,enableShadows:false,targetFps:60,enableAdvancedEffects:false,textureQuality:.75,useHardwareAcceleration:true},high:{particleCount:500,canvasResolution:1,animationPrecision:60,enableBlur:true,enableShadows:true,targetFps:60,enableAdvancedEffects:true,textureQuality:1,useHardwareAcceleration:true},ultra:{particleCount:1e3,canvasResolution:1.5,animationPrecision:120,enableBlur:true,enableShadows:true,targetFps:120,enableAdvancedEffects:true,textureQuality:1.5,useHardwareAcceleration:true},auto:{particleCount:200,canvasResolution:1,animationPrecision:60,enableBlur:true,enableShadows:true,targetFps:60,enableAdvancedEffects:true,textureQuality:1,useHardwareAcceleration:true}}}detectDeviceCapabilities(){let e=navigator,t=()=>typeof window<"u"&&window.matchMedia?window.matchMedia("(prefers-reduced-motion: reduce)").matches:false,i=()=>typeof window<"u"&&window.devicePixelRatio?window.devicePixelRatio:1,r=()=>{if(typeof screen<"u"&&screen.refreshRate)return screen.refreshRate};return {memory:e.deviceMemory,cores:e.hardwareConcurrency,prefersReducedMotion:t(),devicePixelRatio:i(),supportsHardwareAcceleration:this.detectHardwareAcceleration(),isMobile:this.detectMobile(),connectionType:this.detectConnectionType(),refreshRate:r()}}detectHardwareAcceleration(){try{if(typeof document>"u")return !1;let e=document.createElement("canvas");return !!(e.getContext("webgl")||e.getContext("experimental-webgl"))}catch{return false}}detectMobile(){return typeof navigator>"u"?false:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}detectConnectionType(){if(typeof navigator>"u")return;let e=navigator,t=e.connection||e.mozConnection||e.webkitConnection;if(t)return t.effectiveType||t.type}determineInitialQuality(){let e=this.deviceCapabilities;return this.config.respectUserPreferences&&e.prefersReducedMotion?"low":e.isMobile?"medium":e.memory&&e.memory<4?"low":e.memory&&e.memory>=8&&e.cores&&e.cores>=8?"high":"medium"}determineAutoQuality(){let e=this.getRecentMetrics();if(e.length===0)return this.determineInitialQuality();let t=e.reduce((r,s)=>r+s.fps,0)/e.length,i=this.currentSettings.targetFps;if(t>=i*.95){if(this.currentQuality==="low")return "medium";if(this.currentQuality==="medium")return "high";if(this.currentQuality==="high"&&!this.deviceCapabilities.isMobile)return "ultra"}else if(t<i*.8){if(this.currentQuality==="ultra")return "high";if(this.currentQuality==="high")return "medium";if(this.currentQuality==="medium")return "low"}return this.currentQuality}evaluatePerformanceAndAdjust(e){let t=this.currentSettings.targetFps,i=e.fps;performance.now()-this.lastQualityChange<this.config.monitoringInterval*2||(i<t*.8?(this.badFrameCount++,this.goodFrameCount=0):i>=t*.95&&(this.goodFrameCount++,this.badFrameCount=0),this.badFrameCount>=this.config.badFrameThreshold?this.reduceQuality():this.goodFrameCount>=this.config.goodFrameThreshold&&this.increaseQuality());}reduceQuality(){let e=["ultra","high","medium","low"],t=e.indexOf(this.currentQuality);if(t<e.length-1){let i=e[t+1];i&&this.setQuality(i);}}increaseQuality(){let e=["low","medium","high","ultra"],t=e.indexOf(this.currentQuality),i=this.deviceCapabilities.isMobile?"high":"ultra",r=e.indexOf(i);if(t<r){let s=e[t+1];s&&this.setQuality(s);}}checkPerformanceWarnings(e){e.fps<this.config.fpsThreshold&&this.emitEvent({type:"fps-drop",metrics:e,timestamp:performance.now()}),e.memoryUsage&&e.memoryUsage>100&&this.emitEvent({type:"memory-warning",metrics:e,timestamp:performance.now()}),e.fps>=this.currentSettings.targetFps*.95&&this.emitEvent({type:"performance-good",metrics:e,timestamp:performance.now()});}getRecentMetrics(){let e=performance.now()-this.config.monitoringInterval;return this.performanceHistory.filter(t=>t.timestamp>e)}getLatestMetrics(){if(this.performanceHistory.length>0){let e=this.performanceHistory[this.performanceHistory.length-1];if(e)return e}return {fps:0,frameTime:0,activeParticles:0,activeLayers:0,domNodes:0,drawCalls:0}}emitEvent(e){this.eventCallbacks.forEach(t=>{try{t(e);}catch(i){console.error("Error in performance event callback:",i);}});}};var F=class{constructor(e={}){this._eventListeners=new Map;this._audioContext=null;this._masterGainNode=null;this._activeTracks=new Map;this._compiledTracks=new Map;this._isInitialized=false;this._currentTime=0;this._isPlaying=false;this._userInteracted=false;this._config={sampleRate:e.sampleRate||44100,masterVolume:e.masterVolume||1,preferWebAudio:e.preferWebAudio!==false,maxConcurrentTracks:e.maxConcurrentTracks||8,defaultFadeDuration:e.defaultFadeDuration||1e3},this._setupUserInteractionDetection();}async initialize(){if(!this._isInitialized)try{this._config.preferWebAudio&&typeof AudioContext<"u"&&await this._initializeWebAudio(),this._isInitialized=!0;}catch(e){console.warn("AudioSystem: WebAudio initialization failed, using HTMLAudio fallback:",e),this._isInitialized=true;}}async loadTracks(e){this._isInitialized||await this.initialize();for(let t of e)if(this._compiledTracks.set(t.id,t),this._audioContext&&t.asset.data instanceof ArrayBuffer)try{let i=await this._audioContext.decodeAudioData(t.asset.data.slice(0));t.audioNode=i;}catch(i){console.warn(`AudioSystem: Failed to decode audio for track ${t.id}:`,i),this._createHTMLAudioElement(t);}else t.asset.data instanceof HTMLAudioElement?t.audioElement=t.asset.data:this._createHTMLAudioElement(t);}play(){this._isPlaying=true,this._audioContext&&this._audioContext.state==="suspended"&&(this._userInteracted?this._audioContext.resume().catch(e=>{console.warn("AudioSystem: Failed to resume audio context:",e),this._emit("context-suspended");}):this._emit("autoplay-blocked","system"));}pause(){this._isPlaying=false;for(let e of this._activeTracks.values())e.isPlaying&&this._pauseTrack(e);}stop(){this._isPlaying=false,this._currentTime=0;for(let e of this._activeTracks.values())this._stopTrack(e);this._activeTracks.clear();}update(e){if(this._currentTime=e,!!this._isPlaying)for(let t of this._compiledTracks.values()){let i=e>=t.startMs&&(t.endMs===void 0||e<t.endMs),r=this._activeTracks.get(t.id);i&&!r?this._startTrack(t,e):!i&&r&&r.isPlaying?this._stopTrack(r):r&&r.isPlaying&&this._updateTrack(r,e);}}seek(e){this._currentTime=e;for(let t of this._activeTracks.values())t.isPlaying&&this._stopTrack(t);this._isPlaying&&this.update(e);}setMasterVolume(e){this._config.masterVolume=Math.max(0,Math.min(1,e)),this._masterGainNode&&this._masterGainNode.gain.setValueAtTime(this._config.masterVolume,this._audioContext.currentTime);for(let t of this._activeTracks.values())t.audioElement&&(t.audioElement.volume=this._config.masterVolume*t.volume);}getMasterVolume(){return this._config.masterVolume}isWebAudioAvailable(){return this._audioContext!==null&&this._audioContext.state!=="closed"}getAudioContextState(){return this._audioContext?.state||null}getActiveTrackCount(){return Array.from(this._activeTracks.values()).filter(e=>e.isPlaying).length}destroy(){this.stop(),this._audioContext&&(typeof this._audioContext.close=="function"&&this._audioContext.close(),this._audioContext=null,this._masterGainNode=null),this._compiledTracks.clear(),this._eventListeners.clear(),this._isInitialized=false;}on(e,t){this._eventListeners.has(e)||this._eventListeners.set(e,[]),this._eventListeners.get(e).push(t);}off(e,t){let i=this._eventListeners.get(e);if(i){let r=i.indexOf(t);r>-1&&i.splice(r,1);}}async _initializeWebAudio(){let e=window.AudioContext||window.webkitAudioContext;if(!e)throw new Error("WebAudio API not supported");this._audioContext=new e({sampleRate:this._config.sampleRate}),this._masterGainNode=this._audioContext.createGain(),this._masterGainNode.gain.setValueAtTime(this._config.masterVolume,this._audioContext.currentTime),this._masterGainNode.connect(this._audioContext.destination),this._audioContext.addEventListener("statechange",()=>{this._audioContext.state==="suspended"?this._emit("context-suspended"):this._audioContext.state==="running"&&this._emit("context-resumed");});}_createHTMLAudioElement(e){let t=new Audio;t.src=e.asset.src,t.preload="auto",t.loop=e.loop,t.onerror=()=>{this._emit("track-error",e.id,new Error(`Failed to load audio: ${e.asset.src}`));},e.audioElement=t;}_startTrack(e,t){if(this._activeTracks.size>=this._config.maxConcurrentTracks){console.warn(`AudioSystem: Maximum concurrent tracks (${this._config.maxConcurrentTracks}) reached`);return}let i={id:e.id,type:e.type,startTime:e.startMs,endTime:e.endMs,volume:e.volume,fadeIn:e.fadeIn,fadeOut:e.fadeOut,loop:e.loop,audioNode:e.audioNode,audioElement:e.audioElement,isPlaying:false,isPaused:false,currentTime:t-e.startMs};this._activeTracks.set(i.id,i);try{if(this._audioContext&&i.audioNode)this._startWebAudioTrack(i,e);else if(i.audioElement)this._startHTMLAudioTrack(i);else throw new Error("No audio source available");i.isPlaying=!0,this._emit("track-started",i.id);}catch(r){console.error(`AudioSystem: Failed to start track ${i.id}:`,r),this._emit("track-error",i.id,r),this._activeTracks.delete(i.id);}}_startWebAudioTrack(e,t){if(!this._audioContext||!this._masterGainNode)throw new Error("WebAudio context not available");let i=this._audioContext.createBufferSource();i.buffer=e.audioNode,i.loop=e.loop;let r=this._audioContext.createGain();e.gainNode=r,i.connect(r),r.connect(this._masterGainNode);let s=this._audioContext.currentTime;e.fadeIn>0?(r.gain.setValueAtTime(0,s),r.gain.linearRampToValueAtTime(e.volume,s+e.fadeIn/1e3)):r.gain.setValueAtTime(e.volume,s),i.onended=()=>{e.isPlaying&&(e.isPlaying=false,this._emit("track-ended",e.id),this._activeTracks.delete(e.id));};let n=Math.max(0,e.currentTime/1e3);i.start(0,n),e.source=i;}_startHTMLAudioTrack(e){if(!e.audioElement)throw new Error("HTMLAudio element not available");let t=e.audioElement;t.volume=this._config.masterVolume*e.volume,e.currentTime>0&&(t.currentTime=e.currentTime/1e3),e.fadeIn>0&&(t.volume=0,this._fadeHTMLAudio(t,this._config.masterVolume*e.volume,e.fadeIn)),t.onended=()=>{e.isPlaying&&(e.isPlaying=false,this._emit("track-ended",e.id),this._activeTracks.delete(e.id));},t.onerror=()=>{this._emit("track-error",e.id,new Error("HTMLAudio playback error"));};let i=t.play();i&&i.catch(r=>{r.name==="NotAllowedError"?this._emit("autoplay-blocked",e.id):this._emit("track-error",e.id,r);});}_pauseTrack(e){e.isPaused=true,e.source?(e.source.stop(),e.source=void 0):e.audioElement&&e.audioElement.pause();}_stopTrack(e){if(e.isPlaying=false,e.isPaused=false,e.fadeOut>0)if(e.gainNode&&this._audioContext){let t=this._audioContext.currentTime;e.gainNode.gain.linearRampToValueAtTime(0,t+e.fadeOut/1e3),setTimeout(()=>{this._forceStopTrack(e);},e.fadeOut);}else e.audioElement&&this._fadeHTMLAudio(e.audioElement,0,e.fadeOut).then(()=>{this._forceStopTrack(e);});else this._forceStopTrack(e);}_forceStopTrack(e){if(e.source){try{e.source.stop();}catch{}e.source=void 0;}e.audioElement&&(e.audioElement.pause(),e.audioElement.currentTime=0),this._activeTracks.delete(e.id);}_updateTrack(e,t){if(e.currentTime=t-e.startTime,e.endTime&&e.fadeOut>0){let i=e.endTime-t;if(i<=e.fadeOut&&i>0){let r=1-i/e.fadeOut,s=e.volume*(1-r);e.gainNode&&this._audioContext?e.gainNode.gain.setValueAtTime(s,this._audioContext.currentTime):e.audioElement&&(e.audioElement.volume=this._config.masterVolume*s);}}}async _fadeHTMLAudio(e,t,i){let r=e.volume,s=performance.now();return new Promise(n=>{let a=()=>{let c=performance.now()-s,m=Math.min(c/i,1);e.volume=r+(t-r)*m,m<1?requestAnimationFrame(a):n();};a();})}_setupUserInteractionDetection(){let e=["click","touchstart","keydown"],t=()=>{this._userInteracted=true,e.forEach(i=>{document.removeEventListener(i,t);}),this._audioContext&&this._audioContext.state==="suspended"&&this._audioContext.resume();};e.forEach(i=>{document.addEventListener(i,t,{once:true,passive:true});});}_emit(e,...t){let i=this._eventListeners.get(e);i&&i.forEach(r=>{try{r(...t);}catch(s){console.error(`Error in audio system event listener for "${e}":`,s);}});}};var D=class{constructor(e,t,i={}){this.overlayElement=null;this.updateTimer=null;this.isVisible=false;this.fpsHistory=[];this.frameTimeHistory=[];this.lastUpdateTime=0;this.renderer=e,this.container=t,this.options={position:i.position||"top-left",opacity:i.opacity||.9,fontSize:i.fontSize||12,updateInterval:i.updateInterval||100,showPerformanceGraph:i.showPerformanceGraph||true,maxGraphPoints:i.maxGraphPoints||60},this.createOverlay(),this.setupEventListeners();}show(){this.isVisible||(this.isVisible=true,this.overlayElement&&(this.overlayElement.style.display="block"),this.startUpdating());}hide(){this.isVisible&&(this.isVisible=false,this.overlayElement&&(this.overlayElement.style.display="none"),this.stopUpdating());}toggle(){this.isVisible?this.hide():this.show();}destroy(){this.stopUpdating(),this.overlayElement&&this.overlayElement.parentNode&&this.overlayElement.parentNode.removeChild(this.overlayElement),this.overlayElement=null;}createOverlay(){this.overlayElement=document.createElement("div"),this.overlayElement.className="cinematic-debug-overlay";let e=this.getOverlayStyles();Object.assign(this.overlayElement.style,e),this.overlayElement.style.display="none",this.container.appendChild(this.overlayElement);}getOverlayStyles(){let e={position:"fixed",zIndex:"10000",backgroundColor:"rgba(0, 0, 0, 0.8)",color:"#ffffff",fontFamily:'Monaco, Menlo, "Courier New", monospace',fontSize:`${this.options.fontSize}px`,lineHeight:"1.4",padding:"12px",borderRadius:"4px",opacity:this.options.opacity.toString(),pointerEvents:"none",userSelect:"none",minWidth:"200px",maxWidth:"300px",border:"1px solid rgba(255, 255, 255, 0.2)",backdropFilter:"blur(4px)"};switch(this.options.position){case "top-left":e.top="10px",e.left="10px";break;case "top-right":e.top="10px",e.right="10px";break;case "bottom-left":e.bottom="10px",e.left="10px";break;case "bottom-right":e.bottom="10px",e.right="10px";break}return e}setupEventListeners(){this.renderer.on("frame",e=>{this.updatePerformanceHistory(e.fps,e.deltaMs);}),document.addEventListener("keydown",e=>{(e.key==="d"||e.key==="D")&&(e.ctrlKey||e.metaKey)&&(e.preventDefault(),this.toggle());});}startUpdating(){if(this.updateTimer)return;let e=()=>{this.isVisible&&(this.updateDisplay(),this.updateTimer=window.setTimeout(e,this.options.updateInterval));};e();}stopUpdating(){this.updateTimer&&(clearTimeout(this.updateTimer),this.updateTimer=null);}updateDisplay(){if(!this.overlayElement)return;let e=this.gatherDebugInfo(),t=this.generateDebugHTML(e);this.overlayElement.innerHTML=t;}gatherDebugInfo(){let e=this.renderer.getCurrentTime(),t=this.renderer.getDuration(),i=this.renderer.getCurrentFps(),r=this.renderer.getPerformanceMetrics();return {fps:Math.round(i*10)/10,currentTime:e,duration:t,currentEvent:this.renderer.getCurrentEvent(),currentScene:this.renderer.getCurrentScene(),quality:this.renderer.getQuality(),activeLayers:r.activeLayers||0,activeParticles:r.activeParticles||0,domNodes:r.domNodes||0,drawCalls:r.drawCalls||0,memoryUsage:this.getMemoryUsage(),isPlaying:this.renderer.isPlaying(),isPaused:this.renderer.isPaused()}}generateDebugHTML(e){let t=a=>{let c=Math.floor(a/1e3),m=Math.floor(c/60),h=c%60,y=Math.floor(a%1e3);return m>0?`${m}:${h.toString().padStart(2,"0")}.${y.toString().padStart(3,"0")}`:`${h}.${y.toString().padStart(3,"0")}s`},i=(a,c)=>c===0?"0%":`${Math.round(a/c*100)}%`,r=e.isPlaying?"\u25B6\uFE0F":e.isPaused?"\u23F8\uFE0F":"\u23F9\uFE0F",s=this.getQualityColor(e.quality),n=`
|
|
4
|
+
<div style="margin-bottom: 8px; font-weight: bold; color: #00ff88;">
|
|
5
|
+
\u{1F3AC} cinematicRenderer2D Debug
|
|
6
|
+
</div>
|
|
7
|
+
|
|
8
|
+
<div style="margin-bottom: 6px;">
|
|
9
|
+
<span style="color: #888;">FPS:</span>
|
|
10
|
+
<span style="color: ${this.getFpsColor(e.fps)}; font-weight: bold;">
|
|
11
|
+
${e.fps}
|
|
12
|
+
</span>
|
|
13
|
+
<span style="color: #888;"> / Target: ${this.getTargetFps()}</span>
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
<div style="margin-bottom: 6px;">
|
|
17
|
+
<span style="color: #888;">Quality:</span>
|
|
18
|
+
<span style="color: ${s}; font-weight: bold;">
|
|
19
|
+
${e.quality.toUpperCase()}
|
|
20
|
+
</span>
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<div style="margin-bottom: 8px;">
|
|
24
|
+
<span style="color: #888;">Timeline:</span> ${r}
|
|
25
|
+
<div style="margin-left: 10px; font-size: ${this.options.fontSize-1}px;">
|
|
26
|
+
${t(e.currentTime)} / ${t(e.duration)}
|
|
27
|
+
<div style="color: #666;">
|
|
28
|
+
${i(e.currentTime,e.duration)} complete
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
|
|
33
|
+
<div style="margin-bottom: 8px;">
|
|
34
|
+
<span style="color: #888;">Current:</span>
|
|
35
|
+
<div style="margin-left: 10px; font-size: ${this.options.fontSize-1}px;">
|
|
36
|
+
<div>Event: <span style="color: #88ccff;">${e.currentEvent||"None"}</span></div>
|
|
37
|
+
<div>Scene: <span style="color: #ffcc88;">${e.currentScene||"None"}</span></div>
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
40
|
+
|
|
41
|
+
<div style="margin-bottom: 8px;">
|
|
42
|
+
<span style="color: #888;">Rendering:</span>
|
|
43
|
+
<div style="margin-left: 10px; font-size: ${this.options.fontSize-1}px;">
|
|
44
|
+
<div>Layers: <span style="color: #88ff88;">${e.activeLayers}</span></div>
|
|
45
|
+
<div>Particles: <span style="color: #ff8888;">${e.activeParticles}</span></div>
|
|
46
|
+
<div>DOM Nodes: <span style="color: #8888ff;">${e.domNodes}</span></div>
|
|
47
|
+
<div>Draw Calls: <span style="color: #ffff88;">${e.drawCalls}</span></div>
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
`;return e.memoryUsage!==void 0&&(n+=`
|
|
51
|
+
<div style="margin-bottom: 8px;">
|
|
52
|
+
<span style="color: #888;">Memory:</span>
|
|
53
|
+
<span style="color: #ff88ff;">${(e.memoryUsage/1024/1024).toFixed(1)} MB</span>
|
|
54
|
+
</div>
|
|
55
|
+
`),this.options.showPerformanceGraph&&this.fpsHistory.length>1&&(n+=this.generatePerformanceGraph()),n+=`
|
|
56
|
+
<div style="margin-top: 8px; font-size: ${this.options.fontSize-2}px; color: #666; border-top: 1px solid #333; padding-top: 4px;">
|
|
57
|
+
Press Ctrl+D to toggle debug overlay
|
|
58
|
+
</div>
|
|
59
|
+
`,n}generatePerformanceGraph(){let i=Math.max(60,Math.max(...this.fpsHistory)),r=Math.min(0,Math.min(...this.fpsHistory)),s=i-r;if(s===0)return "";let n=this.fpsHistory.map((a,c)=>{let m=c/(this.fpsHistory.length-1)*180,h=40-(a-r)/s*40;return `${m},${h}`}).join(" ");return `
|
|
60
|
+
<div style="margin-top: 8px;">
|
|
61
|
+
<div style="color: #888; font-size: ${this.options.fontSize-2}px; margin-bottom: 2px;">
|
|
62
|
+
FPS Graph (${r.toFixed(1)} - ${i.toFixed(1)})
|
|
63
|
+
</div>
|
|
64
|
+
<svg width="180" height="40" style="background: rgba(255,255,255,0.1); border-radius: 2px;">
|
|
65
|
+
<polyline
|
|
66
|
+
points="${n}"
|
|
67
|
+
fill="none"
|
|
68
|
+
stroke="#00ff88"
|
|
69
|
+
stroke-width="1.5"
|
|
70
|
+
opacity="0.8"
|
|
71
|
+
/>
|
|
72
|
+
<line
|
|
73
|
+
x1="0" y1="${40-(60-r)/s*40}"
|
|
74
|
+
x2="180" y2="${40-(60-r)/s*40}"
|
|
75
|
+
stroke="#ffff00"
|
|
76
|
+
stroke-width="1"
|
|
77
|
+
opacity="0.5"
|
|
78
|
+
stroke-dasharray="2,2"
|
|
79
|
+
/>
|
|
80
|
+
</svg>
|
|
81
|
+
</div>
|
|
82
|
+
`}updatePerformanceHistory(e,t){let i=performance.now();i-this.lastUpdateTime<100||(this.lastUpdateTime=i,this.fpsHistory.push(e),this.frameTimeHistory.push(t),this.fpsHistory.length>this.options.maxGraphPoints&&(this.fpsHistory.shift(),this.frameTimeHistory.shift()));}getFpsColor(e){return e>=55?"#00ff88":e>=45?"#ffff00":e>=30?"#ff8800":"#ff4444"}getQualityColor(e){switch(e){case "ultra":return "#ff00ff";case "high":return "#00ff88";case "medium":return "#ffff00";case "low":return "#ff8800";case "auto":return "#88ccff";default:return "#ffffff"}}getTargetFps(){return 60}getMemoryUsage(){if("memory"in performance)return performance.memory.usedJSHeapSize}};function x(p,e){if(typeof p=="string"&&p.endsWith("%")){let t=parseFloat(p)/100;return e*t}return typeof p=="number"?p:parseFloat(p)||0}var T=class{constructor(e,t,i){this.mounted=false;this.id=e,this.type=t,this.zIndex=i.zIndex||0,this.config=i;}destroy(){this.mounted=false;}setVisible(e){this.mounted;}setOpacity(e){this.mounted;}resize(e,t){this.mounted;}},k=class extends T{constructor(e,t){super(e,"gradient",t);}mount(e){if(this.mounted)return;let t=e.renderer;if(t.createLayerElement){this.element=t.createLayerElement(this.id,this.zIndex);let{colors:i=["#000000","#ffffff"],direction:r="to bottom",opacity:s=1,width:n="100%",height:a="100%"}=this.config,c=i.join(", ");this.element&&(this.element.style.cssText+=`
|
|
83
|
+
background: linear-gradient(${r}, ${c});
|
|
84
|
+
opacity: ${s};
|
|
85
|
+
width: ${typeof n=="number"?n+"px":n};
|
|
86
|
+
height: ${typeof a=="number"?a+"px":a};
|
|
87
|
+
position: absolute;
|
|
88
|
+
`);}this.mounted=true;}update(e){if(!this.mounted||!this.element)return;let{x:t=0,y:i=0,scale:r=1,rotation:s=0,opacity:n=1}=this.config,a=x(t,e.viewport.width),c=x(i,e.viewport.height);this.element.style.transform=`translate3d(${a}px, ${c}px, 0) scale(${r}) rotate(${s}deg)`,this.element.style.opacity=n.toString();}destroy(){if(this.element){let e=this.element.parentElement?.parentElement;e&&e.removeLayerElement&&e.removeLayerElement(this.id);}super.destroy();}},$=class extends T{constructor(e,t){super(e,"image",t);}mount(e){if(this.mounted)return;let t=e.renderer;if(t.createLayerElement){this.element=t.createLayerElement(this.id,this.zIndex),this.img=document.createElement("img");let{src:i,alt:r="",objectFit:s="cover",opacity:n=1}=this.config;this.img&&this.element&&(this.img.src=i,this.img.alt=r,this.img.style.cssText=`
|
|
89
|
+
width: 100%;
|
|
90
|
+
height: 100%;
|
|
91
|
+
object-fit: ${s};
|
|
92
|
+
opacity: ${n};
|
|
93
|
+
display: block;
|
|
94
|
+
`,this.element.appendChild(this.img));}this.mounted=true;}update(e){if(!this.mounted||!this.element)return;let{x:t=0,y:i=0,scale:r=1,rotation:s=0,opacity:n=1}=this.config,a=x(t,e.viewport.width),c=x(i,e.viewport.height);this.element.style.transform=`translate3d(${a}px, ${c}px, 0) scale(${r}) rotate(${s}deg)`,this.element.style.opacity=n.toString();}destroy(){if(this.element){let e=this.element.parentElement?.parentElement;e&&e.removeLayerElement&&e.removeLayerElement(this.id);}super.destroy();}},Q=class extends T{constructor(e,t){super(e,"textBlock",t);}mount(e){if(this.mounted)return;let t=e.renderer;if(t.createLayerElement){this.element=t.createLayerElement(this.id,this.zIndex);let{text:i="",fontSize:r="16px",fontFamily:s="Arial, sans-serif",color:n="#ffffff",textAlign:a="center",opacity:c=1,textShadow:m="none",fontWeight:h="normal",letterSpacing:y="normal"}=this.config;this.element&&(this.element.innerHTML=i,this.element.style.cssText+=`
|
|
95
|
+
font-size: ${typeof r=="number"?r+"px":r};
|
|
96
|
+
font-family: ${s};
|
|
97
|
+
color: ${n};
|
|
98
|
+
text-align: ${a};
|
|
99
|
+
opacity: ${c};
|
|
100
|
+
text-shadow: ${m};
|
|
101
|
+
font-weight: ${h};
|
|
102
|
+
letter-spacing: ${y};
|
|
103
|
+
display: flex;
|
|
104
|
+
align-items: center;
|
|
105
|
+
justify-content: ${a==="left"?"flex-start":a==="right"?"flex-end":"center"};
|
|
106
|
+
white-space: pre-wrap;
|
|
107
|
+
position: absolute;
|
|
108
|
+
width: auto;
|
|
109
|
+
height: auto;
|
|
110
|
+
min-width: max-content;
|
|
111
|
+
`);}this.mounted=true;}update(e){if(!this.mounted||!this.element)return;let{x:t=0,y:i=0,scale:r=1,rotation:s=0,opacity:n=1,textAlign:a="center"}=this.config,c=x(t,e.viewport.width),m=x(i,e.viewport.height),h="center center",y="-50%",f="-50%";a==="left"?(h="left center",y="0%"):a==="right"&&(h="right center",y="-100%"),this.element.style.transformOrigin=h,this.element.style.transform=`translate3d(${c}px, ${m}px, 0) translate(${y}, ${f}) scale(${r}) rotate(${s}deg)`,this.element.style.opacity=n.toString();}destroy(){if(this.element){let e=this.element.parentElement?.parentElement;e&&e.removeLayerElement&&e.removeLayerElement(this.id);}super.destroy();}},O=class extends T{constructor(e,t){super(e,"vignette",t);}mount(e){if(this.mounted)return;let t=e.renderer;if(t.createLayerElement){this.element=t.createLayerElement(this.id,this.zIndex);let{color:i="#000000",intensity:r=.5,size:s="50%",opacity:n=1}=this.config;this.element&&(this.element.style.cssText+=`
|
|
112
|
+
background: radial-gradient(ellipse ${s} ${s} at center, transparent 0%, ${i} 100%);
|
|
113
|
+
opacity: ${n*r};
|
|
114
|
+
pointer-events: none;
|
|
115
|
+
`);}this.mounted=true;}update(e){if(!this.mounted||!this.element)return;let{x:t=0,y:i=0,scale:r=1,rotation:s=0,opacity:n=1}=this.config,a=x(t,e.viewport.width),c=x(i,e.viewport.height);this.element.style.transform=`translate3d(${a}px, ${c}px, 0) scale(${r}) rotate(${s}deg)`,this.element.style.opacity=n.toString();}destroy(){if(this.element){let e=this.element.parentElement?.parentElement;e&&e.removeLayerElement&&e.removeLayerElement(this.id);}super.destroy();}},H=class extends T{constructor(e,t){super(e,"glowOrb",t);}mount(e){if(this.mounted)return;let t=e.renderer;if(t.createLayerElement){this.element=t.createLayerElement(this.id,this.zIndex);let{color:i="#ffffff",radius:r=50,blur:s=20,intensity:n=.8}=this.config;this.element&&(this.element.style.cssText+=`
|
|
116
|
+
background: radial-gradient(circle, ${i} 0%, transparent 70%);
|
|
117
|
+
width: ${r*2}px;
|
|
118
|
+
height: ${r*2}px;
|
|
119
|
+
border-radius: 50%;
|
|
120
|
+
filter: blur(${s}px);
|
|
121
|
+
opacity: ${n};
|
|
122
|
+
pointer-events: none;
|
|
123
|
+
position: absolute;
|
|
124
|
+
`);}this.mounted=true;}update(e){if(!this.mounted||!this.element)return;let{x:t=0,y:i=0,scale:r=1,rotation:s=0,intensity:n=.8,radius:a=50}=this.config,c=x(t,e.viewport.width)-a,m=x(i,e.viewport.height)-a;this.element.style.transform=`translate3d(${c}px, ${m}px, 0) scale(${r}) rotate(${s}deg)`,this.element.style.opacity=n.toString();}destroy(){if(this.element){let e=this.element.parentElement?.parentElement;e&&e.removeLayerElement&&e.removeLayerElement(this.id);}super.destroy();}},N=class extends T{constructor(e,t){super(e,"noiseOverlay",t);}mount(e){if(this.mounted)return;let t=e.renderer;if(t.createLayerElement){this.element=t.createLayerElement(this.id,this.zIndex),this.canvas=document.createElement("canvas");let i=this.canvas.getContext("2d");i&&(this.ctx=i);let{opacity:r=.1}=this.config;this.canvas&&this.element&&(this.canvas.style.cssText=`
|
|
125
|
+
width: 100%;
|
|
126
|
+
height: 100%;
|
|
127
|
+
opacity: ${r};
|
|
128
|
+
mix-blend-mode: overlay;
|
|
129
|
+
pointer-events: none;
|
|
130
|
+
`,this.element.appendChild(this.canvas),this.generateNoise());}this.mounted=true;}update(e){if(!this.mounted||!this.element)return;let{x:t=0,y:i=0,scale:r=1,rotation:s=0,opacity:n=.1}=this.config,a=x(t,e.viewport.width),c=x(i,e.viewport.height);this.element.style.transform=`translate3d(${a}px, ${c}px, 0) scale(${r}) rotate(${s}deg)`,this.element.style.opacity=n.toString();let{animated:m=false,animationSpeed:h=100}=this.config;m&&e.timeMs%h<e.deltaMs&&this.generateNoise();}generateNoise(){if(!this.canvas||!this.ctx)return;let{width:e=256,height:t=256,intensity:i=.5}=this.config;this.canvas.width=e,this.canvas.height=t;let r=this.ctx.createImageData(e,t),s=r.data;for(let n=0;n<s.length;n+=4){let a=Math.random()*255*i;s[n]=a,s[n+1]=a,s[n+2]=a,s[n+3]=255;}this.ctx.putImageData(r,0,0);}resize(e,t){this.canvas&&this.generateNoise();}destroy(){if(this.element){let e=this.element.parentElement?.parentElement;e&&e.removeLayerElement&&e.removeLayerElement(this.id);}super.destroy();}},q=class extends T{constructor(t,i){super(t,"particles",i);this.particles=[];}mount(t){if(!this.mounted){if(this.canvas2DRenderer=t.renderer,this.canvas2DRenderer&&this.canvas2DRenderer.createLayerCanvas){let{width:i=t.container.clientWidth,height:r=t.container.clientHeight}=this.config;if(this.canvas=this.canvas2DRenderer.createLayerCanvas(i,r),this.canvas){let s=this.canvas.getContext("2d");this.ctx=s||void 0,this.canvas.style.cssText+=`
|
|
131
|
+
position: absolute;
|
|
132
|
+
top: 0;
|
|
133
|
+
left: 0;
|
|
134
|
+
pointer-events: none;
|
|
135
|
+
z-index: ${this.zIndex};
|
|
136
|
+
`,t.container.appendChild(this.canvas);}}this.mounted=true;}}update(t){if(!this.mounted||!this.canvas||!this.ctx)return;this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height);let{count:i=100,color:r="#ffffff",size:s=2,speed:n=1,opacity:a=.8,type:c="circle",x:m=0,y:h=0,scale:y=1,rotation:f=0}=this.config,v=x(m,t.viewport.width),d=x(h,t.viewport.height);if(this.ctx.save(),this.ctx.translate(v,d),this.ctx.scale(y,y),this.ctx.rotate(f*Math.PI/180),this.ctx.globalAlpha=a,this.particles.length===0)for(let u=0;u<i;u++)this.particles.push({x:Math.random()*t.viewport.width,y:Math.random()*t.viewport.height,vx:(Math.random()-.5)*n,vy:(Math.random()-.5)*n,size:s*(.5+Math.random()*.5),opacity:.5+Math.random()*.5,life:0,maxLife:5e3+Math.random()*1e4});this.ctx.fillStyle=r;for(let u of this.particles)u.x+=u.vx*t.deltaMs/16.67,u.y+=u.vy*t.deltaMs/16.67,u.life+=t.deltaMs,u.x<0&&(u.x=t.viewport.width),u.x>t.viewport.width&&(u.x=0),u.y<0&&(u.y=t.viewport.height),u.y>t.viewport.height&&(u.y=0),u.life>=u.maxLife&&(u.x=Math.random()*t.viewport.width,u.y=Math.random()*t.viewport.height,u.life=0),this.ctx.save(),this.ctx.globalAlpha=u.opacity*a,c==="circle"?(this.ctx.beginPath(),this.ctx.arc(u.x,u.y,u.size,0,Math.PI*2),this.ctx.fill()):c==="square"&&this.ctx.fillRect(u.x-u.size/2,u.y-u.size/2,u.size,u.size),this.ctx.restore();this.ctx.restore();}destroy(){this.canvas&&this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas),this.particles=[],super.destroy();}},V=class extends T{constructor(t,i){super(t,"starfield",i);this.stars=[];}mount(t){if(!this.mounted){if(this.canvas2DRenderer=t.renderer,this.canvas2DRenderer&&this.canvas2DRenderer.createLayerCanvas){let{width:i=t.container.clientWidth,height:r=t.container.clientHeight}=this.config;if(this.canvas=this.canvas2DRenderer.createLayerCanvas(i,r),this.canvas){let s=this.canvas.getContext("2d");this.ctx=s||void 0,this.canvas.style.cssText+=`
|
|
137
|
+
position: absolute;
|
|
138
|
+
top: 0;
|
|
139
|
+
left: 0;
|
|
140
|
+
pointer-events: none;
|
|
141
|
+
z-index: ${this.zIndex};
|
|
142
|
+
`,t.container.appendChild(this.canvas);}}this.mounted=true;}}update(t){if(!this.mounted||!this.canvas||!this.ctx)return;this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height);let{count:i=200,color:r="#ffffff",minSize:s=.5,maxSize:n=2,speed:a=.5,opacity:c=.8,twinkle:m=true,x:h=0,y=0,scale:f=1,rotation:v=0}=this.config,d=x(h,t.viewport.width),u=x(y,t.viewport.height);if(this.ctx.save(),this.ctx.translate(d,u),this.ctx.scale(f,f),this.ctx.rotate(v*Math.PI/180),this.ctx.globalAlpha=c,this.stars.length===0)for(let l=0;l<i;l++)this.stars.push({x:Math.random()*t.viewport.width,y:Math.random()*t.viewport.height,z:Math.random()*1e3,size:s+Math.random()*(n-s),baseOpacity:.3+Math.random()*.7,twinklePhase:Math.random()*Math.PI*2,twinkleSpeed:.5+Math.random()*1.5});this.ctx.fillStyle=r;for(let l of this.stars){l.z-=a*t.deltaMs/16.67,l.z<=0&&(l.z=1e3,l.x=Math.random()*t.viewport.width,l.y=Math.random()*t.viewport.height);let b=500,_=(l.x-t.viewport.width/2)*(b/l.z)+t.viewport.width/2,C=(l.y-t.viewport.height/2)*(b/l.z)+t.viewport.height/2,g=l.size*(b/l.z);if(_<-g||_>t.viewport.width+g||C<-g||C>t.viewport.height+g)continue;let w=l.baseOpacity;m&&(l.twinklePhase+=l.twinkleSpeed*t.deltaMs/1e3,w*=.5+.5*Math.sin(l.twinklePhase)),this.ctx.save(),this.ctx.globalAlpha=w*c,this.ctx.beginPath(),this.ctx.arc(_,C,Math.max(.5,g),0,Math.PI*2),this.ctx.fill(),this.ctx.restore();}this.ctx.restore();}destroy(){this.canvas&&this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas),this.stars=[],super.destroy();}},B=class extends T{constructor(t,i){super(t,"dust",i);this.dustParticles=[];}mount(t){if(!this.mounted){if(this.canvas2DRenderer=t.renderer,this.canvas2DRenderer&&this.canvas2DRenderer.createLayerCanvas){let{width:i=t.container.clientWidth,height:r=t.container.clientHeight}=this.config;if(this.canvas=this.canvas2DRenderer.createLayerCanvas(i,r),this.canvas){let s=this.canvas.getContext("2d");this.ctx=s||void 0,this.canvas.style.cssText+=`
|
|
143
|
+
position: absolute;
|
|
144
|
+
top: 0;
|
|
145
|
+
left: 0;
|
|
146
|
+
pointer-events: none;
|
|
147
|
+
z-index: ${this.zIndex};
|
|
148
|
+
`,t.container.appendChild(this.canvas);}}this.mounted=true;}}update(t){if(!this.mounted||!this.canvas||!this.ctx)return;this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height);let{count:i=50,color:r="#cccccc",minSize:s=1,maxSize:n=3,speed:a=.2,opacity:c=.4,drift:m=true,x:h=0,y=0,scale:f=1,rotation:v=0}=this.config;if(this.ctx.save(),this.ctx.translate(h,y),this.ctx.scale(f,f),this.ctx.rotate(v*Math.PI/180),this.ctx.globalAlpha=c,this.dustParticles.length===0)for(let d=0;d<i;d++)this.dustParticles.push({x:Math.random()*t.viewport.width,y:Math.random()*t.viewport.height,vx:(Math.random()-.5)*a,vy:(Math.random()-.5)*a,size:s+Math.random()*(n-s),baseOpacity:.2+Math.random()*.6,driftPhase:Math.random()*Math.PI*2,driftSpeed:.3+Math.random()*.7,life:0,maxLife:1e4+Math.random()*2e4});this.ctx.fillStyle=r;for(let d of this.dustParticles){let u=d.vx,l=d.vy;m&&(d.driftPhase+=d.driftSpeed*t.deltaMs/1e3,u+=Math.sin(d.driftPhase)*.1,l+=Math.cos(d.driftPhase*.7)*.1),d.x+=u*t.deltaMs/16.67,d.y+=l*t.deltaMs/16.67,d.life+=t.deltaMs,d.x<-d.size&&(d.x=t.viewport.width+d.size),d.x>t.viewport.width+d.size&&(d.x=-d.size),d.y<-d.size&&(d.y=t.viewport.height+d.size),d.y>t.viewport.height+d.size&&(d.y=-d.size),d.life>=d.maxLife&&(d.x=Math.random()*t.viewport.width,d.y=Math.random()*t.viewport.height,d.life=0);let b=d.life/d.maxLife,_=b<.1?b/.1:b>.9?(1-b)/.1:1;this.ctx.save(),this.ctx.globalAlpha=d.baseOpacity*_*c,this.ctx.beginPath(),this.ctx.arc(d.x,d.y,d.size,0,Math.PI*2),this.ctx.fill(),this.ctx.restore();}this.ctx.restore();}destroy(){this.canvas&&this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas),this.dustParticles=[],super.destroy();}},U=class extends T{constructor(e,t){super(e,"nebulaNoise",t);}mount(e){if(!this.mounted){if(this.canvas2DRenderer=e.renderer,this.canvas2DRenderer&&this.canvas2DRenderer.createLayerCanvas){let{width:t=e.container.clientWidth,height:i=e.container.clientHeight}=this.config;if(this.canvas=this.canvas2DRenderer.createLayerCanvas(t,i),this.canvas){let r=this.canvas.getContext("2d");this.ctx=r||void 0,this.canvas.style.cssText+=`
|
|
149
|
+
position: absolute;
|
|
150
|
+
top: 0;
|
|
151
|
+
left: 0;
|
|
152
|
+
pointer-events: none;
|
|
153
|
+
z-index: ${this.zIndex};
|
|
154
|
+
mix-blend-mode: screen;
|
|
155
|
+
`,e.container.appendChild(this.canvas);}}this.mounted=true;}}update(e){if(!this.mounted||!this.canvas||!this.ctx)return;this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height);let{colors:t=["#ff0080","#0080ff","#8000ff"],intensity:i=.3,scale:r=.01,opacity:s=.6,animated:n=true,speed:a=.001,octaves:c=3,x:m=0,y:h=0,scaleTransform:y=1,rotation:f=0}=this.config;this.ctx.save(),this.ctx.translate(m,h),this.ctx.scale(y,y),this.ctx.rotate(f*Math.PI/180),this.ctx.globalAlpha=s;let v=Math.floor(e.viewport.width/2),d=Math.floor(e.viewport.height/2);(!this.noiseData||this.noiseData.width!==v||this.noiseData.height!==d)&&(this.noiseData=this.ctx.createImageData(v,d));let u=this.noiseData.data,l=n?e.timeMs*a:0;for(let b=0;b<d;b++)for(let _=0;_<v;_++){let C=(b*v+_)*4,g=0,w=1,M=r;for(let ie=0;ie<c;ie++)g+=this.perlinNoise(_*M+l,b*M+l)*w,w*=.5,M*=2;g=(g+1)*.5,g=Math.max(0,Math.min(1,g*i));let K=Math.floor(g*(t.length-1)),ne=Math.min(K+1,t.length-1),Y=g*(t.length-1)-K,A=this.hexToRgb(t[K]),X=this.hexToRgb(t[ne]),ae=Math.floor(A.r+(X.r-A.r)*Y),oe=Math.floor(A.g+(X.g-A.g)*Y),ce=Math.floor(A.b+(X.b-A.b)*Y),le=Math.floor(g*255);u[C]=ae,u[C+1]=oe,u[C+2]=ce,u[C+3]=le;}this.ctx.putImageData(this.noiseData,0,0),this.ctx.drawImage(this.canvas,0,0,v,d,0,0,e.viewport.width,e.viewport.height),this.ctx.restore();}perlinNoise(e,t){let i=this.noise(Math.floor(e),Math.floor(t)),r=this.noise(Math.floor(e)+1,Math.floor(t)),s=this.noise(Math.floor(e),Math.floor(t)+1),n=this.noise(Math.floor(e)+1,Math.floor(t)+1),a=e-Math.floor(e),c=t-Math.floor(t),m=a*a*(3-2*a),h=c*c*(3-2*c),y=i+m*(r-i),f=s+m*(n-s);return y+h*(f-y)}noise(e,t){let i=Math.sin(e*12.9898+t*78.233)*43758.5453;return (i-Math.floor(i))*2-1}hexToRgb(e){let t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return t&&t[1]&&t[2]&&t[3]?{r:parseInt(t[1],16),g:parseInt(t[2],16),b:parseInt(t[3],16)}:{r:255,g:255,b:255}}destroy(){this.canvas&&this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas),this.noiseData=void 0,super.destroy();}};var S=class S{constructor(){this.layerTypes=new Map;this.registerBuiltInLayers();}static getInstance(){return S.instance||(S.instance=new S),S.instance}registerLayerType(e,t){this.layerTypes.has(e)&&console.warn(`Layer type '${e}' is already registered. Overriding existing registration.`),this.layerTypes.set(e,t);}createLayer(e,t,i){let r=this.layerTypes.get(e);if(!r)throw new Error(`Unknown layer type: ${e}. Available types: ${this.getRegisteredTypes().join(", ")}`);return r(t,i)}hasLayerType(e){return this.layerTypes.has(e)}getRegisteredTypes(){return Array.from(this.layerTypes.keys()).sort()}getBuiltInTypes(){return {dom:["gradient","image","textBlock","vignette","glowOrb","noiseOverlay"],canvas2d:["particles","starfield","dust","nebulaNoise"]}}isBuiltInType(e){let t=this.getBuiltInTypes();return t.dom.includes(e)||t.canvas2d.includes(e)}getCustomTypes(){return this.getRegisteredTypes().filter(e=>!this.isBuiltInType(e))}unregisterLayerType(e){return this.isBuiltInType(e)?(console.warn(`Cannot unregister built-in layer type '${e}'`),false):this.layerTypes.delete(e)}clearCustomTypes(){this.getCustomTypes().forEach(t=>this.layerTypes.delete(t));}registerBuiltInLayers(){this.layerTypes.set("gradient",(e,t)=>new k(e,t)),this.layerTypes.set("image",(e,t)=>new $(e,t)),this.layerTypes.set("textBlock",(e,t)=>new Q(e,t)),this.layerTypes.set("vignette",(e,t)=>new O(e,t)),this.layerTypes.set("glowOrb",(e,t)=>new H(e,t)),this.layerTypes.set("noiseOverlay",(e,t)=>new N(e,t)),this.layerTypes.set("particles",(e,t)=>new q(e,t)),this.layerTypes.set("starfield",(e,t)=>new V(e,t)),this.layerTypes.set("dust",(e,t)=>new B(e,t)),this.layerTypes.set("nebulaNoise",(e,t)=>new U(e,t));}};S.instance=null;var W=S;var L=class{constructor(e){this.container=e;}};var j=class extends L{constructor(){super(...arguments);this.layerElements=new Map;this.initialized=false;}initialize(){this.initialized||(this.domContainer=document.createElement("div"),this.domContainer.style.cssText=`
|
|
156
|
+
position: absolute;
|
|
157
|
+
top: 0;
|
|
158
|
+
left: 0;
|
|
159
|
+
width: 100%;
|
|
160
|
+
height: 100%;
|
|
161
|
+
overflow: hidden;
|
|
162
|
+
pointer-events: none;
|
|
163
|
+
`,this.container.appendChild(this.domContainer),this.initialized=true);}render(t,i){this.initialized||this.initialize();let r=[...t].sort((s,n)=>s.zIndex-n.zIndex);for(let s of r)s.update(i);}resize(t,i){if(this.initialized){this.domContainer.style.width=`${t}px`,this.domContainer.style.height=`${i}px`;for(let r of this.layerElements.values());}}destroy(){this.initialized&&(this.layerElements.clear(),this.domContainer&&this.domContainer.parentNode&&this.domContainer.parentNode.removeChild(this.domContainer),this.initialized=false);}createLayerElement(t,i){if(this.layerElements.has(t))return this.layerElements.get(t);let r=document.createElement("div");return r.id=`layer-${t}`,r.style.cssText=`
|
|
164
|
+
position: absolute;
|
|
165
|
+
top: 0;
|
|
166
|
+
left: 0;
|
|
167
|
+
width: 100%;
|
|
168
|
+
height: 100%;
|
|
169
|
+
will-change: transform, opacity, filter;
|
|
170
|
+
transform-style: preserve-3d;
|
|
171
|
+
backface-visibility: hidden;
|
|
172
|
+
z-index: ${i};
|
|
173
|
+
`,this.domContainer.appendChild(r),this.layerElements.set(t,r),r}removeLayerElement(t){let i=this.layerElements.get(t);i&&i.parentNode&&(i.parentNode.removeChild(i),this.layerElements.delete(t));}getDOMContainer(){return this.domContainer}getLayerElement(t){return this.layerElements.get(t)}};var R={low:{particleCount:50,canvasResolution:.5,animationPrecision:30,enableBlur:false,enableShadows:false,targetFps:30,enableAdvancedEffects:false,textureQuality:.5,useHardwareAcceleration:false},medium:{particleCount:200,canvasResolution:.75,animationPrecision:60,enableBlur:true,enableShadows:false,targetFps:60,enableAdvancedEffects:false,textureQuality:.75,useHardwareAcceleration:true},high:{particleCount:500,canvasResolution:1,animationPrecision:60,enableBlur:true,enableShadows:true,targetFps:60,enableAdvancedEffects:true,textureQuality:1,useHardwareAcceleration:true},ultra:{particleCount:1e3,canvasResolution:1.5,animationPrecision:120,enableBlur:true,enableShadows:true,targetFps:120,enableAdvancedEffects:true,textureQuality:1.5,useHardwareAcceleration:true},auto:{particleCount:200,canvasResolution:1,animationPrecision:60,enableBlur:true,enableShadows:true,targetFps:60,enableAdvancedEffects:true,textureQuality:1,useHardwareAcceleration:true}};var J=class{constructor(e,t,i=100){this.pool=[];this.createFn=e,this.resetFn=t;for(let r=0;r<i;r++)this.pool.push(this.createFn());}get(){return this.pool.length>0?this.pool.pop():this.createFn()}release(e){this.resetFn(e),this.pool.push(e);}clear(){this.pool.length=0;}get poolSize(){return this.pool.length}},G=class extends L{constructor(t){super(t);this.width=0;this.height=0;this.canvasWidth=0;this.canvasHeight=0;this.activeParticles=[];this.performanceMetrics={fps:60,frameTime:16.67,activeParticles:0,activeLayers:0,domNodes:0,drawCalls:0};this.lastFrameTime=0;this.frameCount=0;this.fpsUpdateTime=0;this.canvas=document.createElement("canvas"),this.canvas.style.cssText=`
|
|
174
|
+
position: absolute;
|
|
175
|
+
top: 0;
|
|
176
|
+
left: 0;
|
|
177
|
+
width: 100%;
|
|
178
|
+
height: 100%;
|
|
179
|
+
pointer-events: none;
|
|
180
|
+
z-index: 1000;
|
|
181
|
+
`;let i=this.canvas.getContext("2d");if(!i)throw new Error("Canvas2D context not available");this.ctx=i,this.devicePixelRatio=window.devicePixelRatio||1,this.particlePool=new J(()=>({x:0,y:0,vx:0,vy:0,size:1,opacity:1,color:"#ffffff",life:0,maxLife:1e3,rotation:0,rotationSpeed:0,active:false}),r=>{r.active=false,r.life=0,r.opacity=1;},500);}initialize(){this.container.appendChild(this.canvas);let t=this.container.getBoundingClientRect();this.resize(t.width,t.height),this.ctx.imageSmoothingEnabled=true,this.ctx.imageSmoothingQuality="high";}render(t,i){let r=performance.now();this.updatePerformanceMetrics(i),this.ctx.clearRect(0,0,this.canvasWidth,this.canvasHeight),this.ctx.save(),this.ctx.scale(this.devicePixelRatio,this.devicePixelRatio);let s=0,n=t.filter(a=>["particles","starfield","dust","nebulaNoise"].includes(a.type));for(let a of n)this.ctx.save(),a.type==="particles"||a.type==="starfield"||a.type==="dust"?s+=this.renderParticleLayer(a,i):a.type==="nebulaNoise"&&(s+=this.renderNoiseLayer(a,i)),this.ctx.restore();this.ctx.restore(),this.performanceMetrics.drawCalls=s,this.performanceMetrics.activeLayers=n.length,this.performanceMetrics.frameTime=performance.now()-r;}renderParticleLayer(t,i){let s=t.config||{},{count:n=100,color:a="#ffffff",size:c=2,speed:m=1,opacity:h=.8,type:y="circle"}=s,f=R[i.quality]||R.medium,v=Math.min(n,f.particleCount);for(;this.activeParticles.length<v;){let u=this.particlePool.get();this.initializeParticle(u,i.viewport),u.color=a,u.size=c,u.active=true,this.activeParticles.push(u);}for(;this.activeParticles.length>v;){let u=this.activeParticles.pop();u&&this.particlePool.release(u);}let d=0;for(let u=this.activeParticles.length-1;u>=0;u--){let l=this.activeParticles[u];if(!l||!l.active){this.activeParticles.splice(u,1),l&&this.particlePool.release(l);continue}l.x+=l.vx*m*i.deltaMs/16.67,l.y+=l.vy*m*i.deltaMs/16.67,l.rotation+=l.rotationSpeed*i.deltaMs/16.67,l.life+=i.deltaMs,(l.x<-l.size||l.x>i.viewport.width+l.size||l.y<-l.size||l.y>i.viewport.height+l.size||l.life>=l.maxLife)&&(this.initializeParticle(l,i.viewport),l.color=a,l.size=c),this.ctx.save(),this.ctx.globalAlpha=l.opacity*h,this.ctx.fillStyle=l.color,y==="circle"?(this.ctx.beginPath(),this.ctx.arc(l.x,l.y,l.size,0,Math.PI*2),this.ctx.fill()):y==="star"&&this.drawStar(l.x,l.y,l.size,l.rotation),this.ctx.restore(),d++;}return this.performanceMetrics.activeParticles=this.activeParticles.length,d}renderNoiseLayer(t,i){let s=t.config||{},{intensity:n=.5,scale:a=1,opacity:c=.3,animated:m=true,speed:h=.01}=s,f=(R[i.quality]||R.medium).canvasResolution,v=Math.floor(i.viewport.width*f),d=Math.floor(i.viewport.height*f),u=this.ctx.createImageData(v,d),l=u.data,b=m?i.timeMs*h:0;for(let _=0;_<d;_++)for(let C=0;C<v;C++){let g=(_*v+C)*4,w=this.simpleNoise(C*a+b,_*a+b)*n,M=Math.floor(w*255);l[g]=M,l[g+1]=M,l[g+2]=M,l[g+3]=Math.floor(c*255);}return this.ctx.save(),this.ctx.putImageData(u,0,0),this.ctx.restore(),1}initializeParticle(t,i){t.x=Math.random()*i.width,t.y=Math.random()*i.height,t.vx=(Math.random()-.5)*2,t.vy=(Math.random()-.5)*2,t.size=1+Math.random()*3,t.opacity=.5+Math.random()*.5,t.life=0,t.maxLife=5e3+Math.random()*1e4,t.rotation=Math.random()*Math.PI*2,t.rotationSpeed=(Math.random()-.5)*.02,t.active=true;}drawStar(t,i,r,s){let a=r,c=r*.4;this.ctx.save(),this.ctx.translate(t,i),this.ctx.rotate(s),this.ctx.beginPath();for(let m=0;m<10;m++){let h=m*Math.PI/5,y=m%2===0?a:c,f=Math.cos(h)*y,v=Math.sin(h)*y;m===0?this.ctx.moveTo(f,v):this.ctx.lineTo(f,v);}this.ctx.closePath(),this.ctx.fill(),this.ctx.restore();}simpleNoise(t,i){let r=Math.sin(t*12.9898+i*78.233)*43758.5453;return r-Math.floor(r)}updatePerformanceMetrics(t){let i=performance.now();if(this.lastFrameTime>0){i-this.lastFrameTime;this.frameCount++,i-this.fpsUpdateTime>=1e3&&(this.performanceMetrics.fps=Math.round(this.frameCount*1e3/(i-this.fpsUpdateTime)),this.frameCount=0,this.fpsUpdateTime=i);}this.lastFrameTime=i,this.performanceMetrics.frameTime=t.deltaMs;}resize(t,i){this.width=t,this.height=i,this.canvasWidth=Math.floor(t*this.devicePixelRatio),this.canvasHeight=Math.floor(i*this.devicePixelRatio),this.canvas.width=this.canvasWidth,this.canvas.height=this.canvasHeight,this.canvas.style.width=t+"px",this.canvas.style.height=i+"px",this.ctx.imageSmoothingEnabled=true,this.ctx.imageSmoothingQuality="high";}destroy(){this.particlePool.clear(),this.activeParticles.length=0,this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas);}getPerformanceMetrics(){return {...this.performanceMetrics}}createLayerCanvas(t,i){let r=document.createElement("canvas");r.width=Math.floor(t*this.devicePixelRatio),r.height=Math.floor(i*this.devicePixelRatio),r.style.width=t+"px",r.style.height=i+"px";let s=r.getContext("2d");return s&&(s.scale(this.devicePixelRatio,this.devicePixelRatio),s.imageSmoothingEnabled=true,s.imageSmoothingQuality="high"),r}};var ee=class{constructor(e){this.eventListeners=new Map;this._state="idle";this._currentTime=0;this._duration=0;this._currentEventId=null;this._currentSceneId=null;this._resizeListener=null;this._debugOverlay=null;this._domRenderer=null;this._canvas2DRenderer=null;this._layers=[];this._currentSceneLayers=[];this._resizeObserver=null;this._mounted=false;if(!e.container)throw new Error("CinematicRenderer2D: container element is required");if(!e.spec)throw new Error("CinematicRenderer2D: spec is required");let t=P.validate(e.spec),i=P.parse(t);this._container=e.container,this._spec=t,this._compiledSpec=i,this._options=e,this._quality=e.quality||this._spec.engine.quality||"auto",this._scheduler=new z({targetFps:this._spec.engine.targetFps||60,enableAdaptiveQuality:this._quality==="auto"}),this._qualitySystem=new I({respectUserPreferences:true,useDeviceDetection:true}),this._layerRegistry=W.getInstance(),this._audioSystem=new F({preferWebAudio:true,masterVolume:1,maxConcurrentTracks:8,defaultFadeDuration:1e3}),this._qualitySystem.setQuality(this._quality),this._scheduler.addQualityChangeCallback(r=>{this._qualitySystem.updatePerformanceMetrics(r);}),this._qualitySystem.addEventListener(r=>{r.type==="quality-change"&&(this._quality=r.newQuality,this.emit("qualityChange",{previousQuality:r.previousQuality,currentQuality:r.newQuality,metrics:r.metrics}));}),this._scheduler.addFrameCallback(r=>{this._onFrame(r);}),this._audioSystem.on("track-error",(r,s)=>{this.emit("audioError",{trackId:r,error:s});}),this._audioSystem.on("autoplay-blocked",r=>{this.emit("autoplayBlocked",{trackId:r});}),this._calculateDuration(),this._setupResizeObserver(),this._options.debug&&(this._debugOverlay=new D(this,this._container,{position:"top-right",showPerformanceGraph:true}));}async mount(){if(this._state==="destroyed")throw new Error("Cannot mount destroyed renderer");if(!this._mounted)try{if(this._setState("loading"),this.emit("loading"),!document.contains(this._container))throw new Error("Container element must be attached to the DOM");this._setupContainer(),this._initializeRenderers(),this._initializeLayers(),await this._audioSystem.initialize(),this._setupResizeListener(),this._debugOverlay&&this._debugOverlay.show(),this._mounted=!0,this._setState("ready"),this.emit("ready"),this._options.autoplay&&this.play();}catch(e){throw this._setState("idle"),this.emit("error",e),e}}play(){if(this._state==="destroyed")throw new Error("Cannot play destroyed renderer");if(!this._mounted)throw new Error("Must mount renderer before playing");if(this._state==="playing")return;let e=this._state;this._setState("playing"),this._scheduler.start(),this._audioSystem.play(),this._updateCurrentSceneLayers(),this.emit("play",{previousState:e,currentTime:this._currentTime});}pause(){if(this._state!=="playing")return;let e=this._state;this._setState("paused"),this._scheduler.stop(),this._audioSystem.pause(),this.emit("pause",{previousState:e,currentTime:this._currentTime});}stop(){if(this._state==="destroyed"||this._state==="idle")return;let e=this._state;this._setState("stopped"),this._scheduler.stop(),this._audioSystem.stop(),this._currentTime=0,this._currentEventId=null,this._currentSceneId=null,this._resetLayersToInitialState(),this.emit("stop",{previousState:e});}destroy(){if(this._state==="destroyed")return;let e=this._state;this.stop(),this._resizeObserver&&(this._resizeObserver.disconnect(),this._resizeObserver=null),this._destroyAllLayers(),this._domRenderer&&(this._domRenderer.destroy(),this._domRenderer=null),this._canvas2DRenderer&&(this._canvas2DRenderer.destroy(),this._canvas2DRenderer=null),this._audioSystem.destroy(),this._debugOverlay&&(this._debugOverlay.destroy(),this._debugOverlay=null),this._container.innerHTML="",typeof this._container.removeAttribute=="function"&&this._container.removeAttribute("style"),this.eventListeners.clear(),this._resizeListener&&(window.removeEventListener("resize",this._resizeListener),this._resizeListener=null),this._mounted=false,this._setState("destroyed"),this.emit("destroy",{previousState:e});}seek(e){if(this._state==="destroyed")throw new Error("Cannot seek on destroyed renderer");if(!this._mounted)throw new Error("Must mount renderer before seeking");let t=Math.max(0,Math.min(e,this._duration));this._currentTime;this._currentTime=t,this._updateCurrentEventAndScene(),this._updateCurrentSceneLayers(),this._audioSystem.seek(t),this.emit("seek",this._currentTime);}goToEvent(e){if(this._state==="destroyed")throw new Error("Cannot navigate on destroyed renderer");if(!this._mounted)throw new Error("Must mount renderer before navigation");if(!this._spec.events.find(r=>r.id===e)){this.emit("error",new Error(`Event with id "${e}" not found`));return}let i=this._calculateEventStartTime(e);this.seek(i),this.emit("eventChange",e);}goToScene(e){if(this._state==="destroyed")throw new Error("Cannot navigate on destroyed renderer");if(!this._mounted)throw new Error("Must mount renderer before navigation");if(!this._spec.scenes.find(r=>r.id===e)){this.emit("error",new Error(`Scene with id "${e}" not found`));return}let i=this._calculateSceneStartTime(e);this.seek(i),this.emit("sceneChange",e);}setQuality(e){if(this._quality===e)return;this._quality;this._quality=e,this._qualitySystem.setQuality(e),this.emit("qualityChange",e);}resize(e,t){this._state!=="destroyed"&&(this._container.style.width=`${e}px`,this._container.style.height=`${t}px`,this._domRenderer&&this._domRenderer.resize(e,t),this._canvas2DRenderer&&this._canvas2DRenderer.resize(e,t),this.emit("resize",{width:e,height:t}));}on(e,t){this.eventListeners.has(e)||this.eventListeners.set(e,[]),this.eventListeners.get(e).push(t);}off(e,t){let i=this.eventListeners.get(e);if(i){let r=i.indexOf(t);r>-1&&i.splice(r,1);}}getCurrentTime(){return this._currentTime}getDuration(){return this._duration}isPlaying(){return this._state==="playing"}isPaused(){return this._state==="paused"}getCurrentEvent(){return this._currentEventId}getCurrentScene(){return this._currentSceneId}getState(){return this._state}getQuality(){return this._quality}isMounted(){return this._mounted}getCurrentFps(){return this._scheduler.getCurrentFps()}getPerformanceMetrics(){return this._scheduler.getPerformanceMetrics()}getQualitySettings(){return this._qualitySystem.getCurrentSettings()}getDeviceCapabilities(){return this._qualitySystem.getDeviceCapabilities()}setMasterVolume(e){this._audioSystem.setMasterVolume(e);}getMasterVolume(){return this._audioSystem.getMasterVolume()}isWebAudioAvailable(){return this._audioSystem.isWebAudioAvailable()}getActiveAudioTrackCount(){return this._audioSystem.getActiveTrackCount()}isDebugEnabled(){return this._debugOverlay!==null}toggleDebug(){this._debugOverlay&&this._debugOverlay.toggle();}showDebug(){this._debugOverlay&&this._debugOverlay.show();}hideDebug(){this._debugOverlay&&this._debugOverlay.hide();}emit(e,...t){let i=this.eventListeners.get(e);i&&i.forEach(r=>{try{r(...t);}catch(s){console.error(`Error in event listener for "${e}":`,s);}});}_onFrame(e){if(this._state==="playing"){if(this._currentTime+=e.deltaMs,this._currentTime>=this._duration){this._currentTime=this._duration,this.stop(),this.emit("ended");return}this._updateCurrentEventAndScene(),this._updateCurrentSceneLayers(),this._scheduler.updateMetrics({activeLayers:this._currentSceneLayers.length,activeParticles:0,domNodes:this._container.querySelectorAll("*").length,drawCalls:0}),this._renderCurrentFrame(e),this._audioSystem.update(this._currentTime),this.emit("frame",{currentTime:this._currentTime,fps:e.fps,deltaMs:e.deltaMs,currentEvent:this._currentEventId,currentScene:this._currentSceneId});}}_setState(e){let t=this._state;this._state=e,t!==e&&this.emit("stateChange",{previousState:t,currentState:e});}_calculateDuration(){let e=0;for(let t of this._spec.events){let i=0;for(let r of t.scenes){let s=this._spec.scenes.find(n=>n.id===r);s&&(i+=s.duration);}e=Math.max(e,i);}this._duration=e;}_calculateEventStartTime(e){let t=0;for(let i of this._spec.events){if(i.id===e)return t;for(let r of i.scenes){let s=this._spec.scenes.find(n=>n.id===r);s&&(t+=s.duration);}}return 0}_calculateSceneStartTime(e){let t=0;for(let i of this._spec.events){let r=0;for(let s of i.scenes){if(s===e)return t+r;let n=this._spec.scenes.find(a=>a.id===s);n&&(r+=n.duration);}t+=r;}return 0}_updateCurrentEventAndScene(){let e=0;for(let t of this._spec.events){let i=e,r=0;for(let s of t.scenes){let n=this._spec.scenes.find(a=>a.id===s);if(n){let a=i+r,c=a+n.duration;if(this._currentTime>=a&&this._currentTime<c){this._currentEventId=t.id,this._currentSceneId=n.id;return}r+=n.duration;}}e+=r;}if(this._spec.events.length>0){let t=this._spec.events[this._spec.events.length-1];if(t&&t.scenes.length>0){let i=t.scenes[t.scenes.length-1];this._currentEventId=t.id,this._currentSceneId=i||null;}}}_setupContainer(){let e=this._container.style;(!e.position||e.position==="static")&&(e.position="relative"),!e.width&&!e.height&&(e.width="100%",e.height="100%"),e.overflow="hidden",this._container.classList.add("cinematic-renderer2d"),e.setProperty("--cinematic-quality",this._quality);}_setupResizeObserver(){typeof ResizeObserver<"u"&&(this._resizeObserver=new ResizeObserver(e=>{for(let t of e){let{width:i,height:r}=t.contentRect;this.resize(i,r);}}),this._resizeObserver.observe(this._container));}_setupResizeListener(){this._resizeListener=()=>{let e=this._container.getBoundingClientRect();this.resize(e.width,e.height);},window.addEventListener("resize",this._resizeListener);}_initializeRenderers(){this._domRenderer=new j(this._container),this._domRenderer.initialize(),this._canvas2DRenderer=new G(this._container),this._canvas2DRenderer.initialize();}_initializeLayers(){for(let e of this._spec.scenes)for(let t of e.layers)try{let i=this._layerRegistry.createLayer(t.type,t.id,t.config);this._layers.push(i);}catch(i){console.error(`Failed to create layer ${t.id} of type ${t.type}:`,i);}this._updateCurrentSceneLayers();}_updateCurrentSceneLayers(){let e=this._getCurrentScene();if(!e)return;let t=this._layers.filter(r=>e.layers.some(s=>s.id===r.id));if(t.length!==this._currentSceneLayers.length||t.some(r=>!this._currentSceneLayers.includes(r))){for(let r of this._currentSceneLayers)t.includes(r)||r.destroy();for(let r of t)this._currentSceneLayers.includes(r)||this._mountLayer(r);this._currentSceneLayers=t;}}_mountLayer(e){try{let t=this._layerRegistry.getBuiltInTypes(),i=this._domRenderer;if(t.canvas2d.includes(e.type)&&(i=this._canvas2DRenderer),!i){console.error(`No suitable renderer found for layer type: ${e.type}`);return}let r={container:this._container,renderer:i,assetManager:null,layerConfig:this._getLayerConfig(e.id)};e.mount(r);}catch(t){console.error(`Failed to mount layer ${e.id}:`,t);}}_renderCurrentFrame(e){let t={timeMs:this._currentTime,deltaMs:e.deltaMs,quality:this._quality,viewport:{width:this._container.clientWidth,height:this._container.clientHeight},devicePixelRatio:window.devicePixelRatio||1};if(this._domRenderer&&this._currentSceneLayers.length>0){let i=this._currentSceneLayers.filter(r=>this._layerRegistry.getBuiltInTypes().dom.includes(r.type));i.length>0&&this._domRenderer.render(i,t);}if(this._canvas2DRenderer&&this._currentSceneLayers.length>0){let i=this._currentSceneLayers.filter(r=>this._layerRegistry.getBuiltInTypes().canvas2d.includes(r.type));i.length>0&&this._canvas2DRenderer.render(i,t);}}_getCurrentScene(){return this._currentSceneId?this._spec.scenes.find(e=>e.id===this._currentSceneId):null}_getLayerConfig(e){for(let t of this._spec.scenes){let i=t.layers.find(r=>r.id===e);if(i)return i.config||{}}return {}}_resetLayersToInitialState(){for(let e of this._currentSceneLayers)e.destroy(),this._mountLayer(e);}_destroyAllLayers(){for(let e of this._layers)try{e.destroy();}catch(t){console.error(`Error destroying layer ${e.id}:`,t);}this._layers=[],this._currentSceneLayers=[];}};var te=class{constructor(e={}){this._assets=new Map;this._eventListeners=new Map;this._loadingQueue=[];this._activeLoads=new Set;this._cacheSize=0;this._loadStartTime=0;this._loadedBytes=0;this._config={maxConcurrentLoads:e.maxConcurrentLoads||6,defaultTimeout:e.defaultTimeout||3e4,defaultRetries:e.defaultRetries||3,baseUrl:e.baseUrl||"",cache:{maxSize:e.cache?.maxSize||100*1024*1024,defaultDuration:e.cache?.defaultDuration||1440*60*1e3,storageType:e.cache?.storageType||"memory",compress:e.cache?.compress||false,evictionStrategy:e.cache?.evictionStrategy||"lru"}};}async loadAssets(e){if(e.length===0)return [];this._loadStartTime=performance.now(),this._loadedBytes=0;let t=this._sortByPriority(e);t.map(a=>this._createAsset(a)).forEach(a=>this._assets.set(a.id,a)),this._loadingQueue=[...t];let r=[];for(;this._loadingQueue.length>0||this._activeLoads.size>0;){for(;this._loadingQueue.length>0&&this._activeLoads.size<this._config.maxConcurrentLoads;){let a=this._loadingQueue.shift(),c=this._assets.get(a.id);this._activeLoads.add(a.id);let m=this._loadSingleAsset(c,a);r.push(m),m.finally(()=>{this._activeLoads.delete(a.id);});}if(this._activeLoads.size>0){let a=r.filter(c=>c&&!this._isPromiseSettled(c));a.length>0&&await Promise.race(a);}this._emitProgress();}let n=(await Promise.allSettled(r)).filter(a=>a.status==="fulfilled").map(a=>a.value);return this._emit("complete",n),n}getAsset(e){return this._assets.get(e)||null}isAssetLoaded(e){let t=this._assets.get(e);return t?t.loaded&&!t.error:false}getAllAssets(){return Array.from(this._assets.values())}getAssetsByType(e){return Array.from(this._assets.values()).filter(t=>t.type===e)}async preloadAsset(e){let t=this._createAsset(e);return this._assets.set(t.id,t),this._loadSingleAsset(t,e)}clearCache(){this._assets.clear(),this._cacheSize=0;}removeAsset(e){let t=this._assets.get(e);return t?(this._cacheSize-=t.size||0,this._assets.delete(e),true):false}getCacheStats(){return {totalAssets:this._assets.size,cacheSize:this._cacheSize,maxCacheSize:this._config.cache.maxSize,cacheUtilization:this._cacheSize/this._config.cache.maxSize}}on(e,t){this._eventListeners.has(e)||this._eventListeners.set(e,[]),this._eventListeners.get(e).push(t);}off(e,t){let i=this._eventListeners.get(e);if(i){let r=i.indexOf(t);r>-1&&i.splice(r,1);}}_createAsset(e){return {id:e.id,type:e.type,src:this._resolveUrl(e.src),data:null,loaded:false,error:null,fallback:e.fallback,progress:0,metadata:this._createDefaultMetadata(e)}}_createDefaultMetadata(e){return {...{size:0,mimeType:this._getMimeType(e.type),cacheDuration:this._config.cache.defaultDuration,priority:e.metadata?.priority||"normal"},...e.metadata}}_resolveUrl(e){return e.startsWith("http")||e.startsWith("data:")||e.startsWith("blob:")?e:this._config.baseUrl+e}_getMimeType(e){return {image:"image/*",video:"video/*",audio:"audio/*",font:"font/*",json:"application/json",binary:"application/octet-stream",text:"text/plain"}[e]}_sortByPriority(e){let t={critical:0,high:1,normal:2,low:3,lazy:4};return [...e].sort((i,r)=>{let s=i.metadata?.priority||"normal",n=r.metadata?.priority||"normal";return t[s]-t[n]})}async _loadSingleAsset(e,t){let i={timeout:this._config.defaultTimeout,retries:this._config.defaultRetries,useCache:true},r=null;for(let s=0;s<=i.retries;s++)try{return await this._loadAssetData(e,i),e.loaded=!0,e.progress=1,e.size&&(this._cacheSize+=e.size,this._loadedBytes+=e.size),this._enforceCache(),this._emit("asset-loaded",e),e}catch(n){r=n,s<i.retries&&await new Promise(a=>setTimeout(a,Math.pow(2,s)*1e3));}if(t.fallback)try{let s={...e,src:this._resolveUrl(t.fallback)};return await this._loadAssetData(s,i),e.data=s.data,e.loaded=!0,e.progress=1,this._emit("asset-loaded",e),e}catch(s){r=s;}return e.error=r,e.progress=0,this._emit("asset-error",e.id,r),e}async _loadAssetData(e,t){switch(e.type){case "image":e.data=await this._loadImage(e.src,t);break;case "video":e.data=await this._loadVideo(e.src,t);break;case "audio":e.data=await this._loadAudio(e.src,t);break;case "font":e.data=await this._loadFont(e.src,t);break;case "json":e.data=await this._loadJson(e.src,t);break;case "text":e.data=await this._loadText(e.src,t);break;case "binary":e.data=await this._loadBinary(e.src,t);break;default:throw new Error(`Unsupported asset type: ${e.type}`)}if(!e.size&&e.data){let i=this._estimateAssetSize(e.data);e.size=i;}}async _loadImage(e,t){return new Promise((i,r)=>{let s=new Image,n=setTimeout(()=>{r(new Error(`Image load timeout: ${e}`));},t.timeout);s.onload=()=>{clearTimeout(n),i(s);},s.onerror=()=>{clearTimeout(n),r(new Error(`Failed to load image: ${e}`));},t.mode==="cors"&&(s.crossOrigin="anonymous"),s.src=e;})}async _loadVideo(e,t){return new Promise((i,r)=>{let s=document.createElement("video"),n=setTimeout(()=>{r(new Error(`Video load timeout: ${e}`));},t.timeout);s.oncanplaythrough=()=>{clearTimeout(n),i(s);},s.onerror=()=>{clearTimeout(n),r(new Error(`Failed to load video: ${e}`));},t.mode==="cors"&&(s.crossOrigin="anonymous"),s.preload="auto",s.src=e,s.load();})}async _loadAudio(e,t){return new Promise((i,r)=>{let s=new Audio,n=setTimeout(()=>{r(new Error(`Audio load timeout: ${e}`));},t.timeout);s.oncanplaythrough=()=>{clearTimeout(n),i(s);},s.onerror=()=>{clearTimeout(n),r(new Error(`Failed to load audio: ${e}`));},t.mode==="cors"&&(s.crossOrigin="anonymous"),s.preload="auto",s.src=e,s.load();})}async _loadFont(e,t){let r=await(await this._fetchWithTimeout(e,t)).arrayBuffer(),s=e.split("/").pop()?.split(".")[0]||"CustomFont",n=new FontFace(s,r);return await n.load(),typeof document<"u"&&document.fonts&&document.fonts.add(n),n}async _loadJson(e,t){return (await this._fetchWithTimeout(e,t)).json()}async _loadText(e,t){return (await this._fetchWithTimeout(e,t)).text()}async _loadBinary(e,t){return (await this._fetchWithTimeout(e,t)).arrayBuffer()}async _fetchWithTimeout(e,t){let i=new AbortController,r=setTimeout(()=>i.abort(),t.timeout);try{let s=await fetch(e,{signal:i.signal,mode:t.mode,credentials:t.credentials,headers:t.headers});if(!s.ok)throw new Error(`HTTP ${s.status}: ${s.statusText}`);return s}finally{clearTimeout(r);}}_estimateAssetSize(e){return e instanceof HTMLImageElement?e.width*e.height*4:e instanceof ArrayBuffer?e.byteLength:typeof e=="string"?e.length*2:e instanceof HTMLVideoElement||e instanceof HTMLAudioElement?1024*1024:0}_enforceCache(){if(this._cacheSize<=this._config.cache.maxSize)return;this._emit("cache-full",this._cacheSize);let e=Array.from(this._assets.values());switch(this._config.cache.evictionStrategy){case "lru":e.sort((t,i)=>(t.cachedAt||0)-(i.cachedAt||0));break;case "lfu":e.sort((t,i)=>(t.cachedAt||0)-(i.cachedAt||0));break;case "fifo":e.sort((t,i)=>(t.cachedAt||0)-(i.cachedAt||0));break}for(;this._cacheSize>this._config.cache.maxSize*.8&&e.length>0;){let t=e.shift();t&&this.removeAsset(t.id);}}_emitProgress(){let e=this._assets.size,t=Array.from(this._assets.values()).filter(n=>n.loaded||n.error).length,i=Array.from(this._assets.values()).find(n=>!n.loaded&&!n.error)?.id,r={loaded:t,total:e,currentAsset:i,percentage:e>0?t/e*100:0},s=performance.now()-this._loadStartTime;if(s>0&&this._loadedBytes>0){r.speed=this._loadedBytes/(s/1e3);let n=e-t;if(n>0&&r.speed>0){let a=this._loadedBytes/t,c=n*a;r.estimatedTimeRemaining=c/r.speed*1e3;}}this._emit("progress",r);}_emit(e,...t){let i=this._eventListeners.get(e);i&&i.forEach(r=>{try{r(...t);}catch(s){console.error(`Error in asset manager event listener for "${e}":`,s);}});}_isPromiseSettled(e){return false}};var it="0.1.0";exports.AnimationCompiler=E;exports.AssetManager=te;exports.AudioSystem=F;exports.Canvas2DRenderer=G;exports.CinematicRenderer2D=ee;exports.DOMRenderer=j;exports.DebugOverlay=D;exports.DustLayer=B;exports.GlowOrbLayer=H;exports.GradientLayer=k;exports.ImageLayer=$;exports.LayerRegistry=W;exports.NebulaNoiseLayer=U;exports.NoiseOverlayLayer=N;exports.ParticlesLayer=q;exports.QUALITY_PRESETS=R;exports.QualitySystem=I;exports.RenderBackend=L;exports.Scheduler=z;exports.SpecParser=P;exports.StarfieldLayer=V;exports.TextBlockLayer=Q;exports.VERSION=it;exports.VignetteLayer=O;//# sourceMappingURL=index.cjs.map
|
|
182
|
+
//# sourceMappingURL=index.cjs.map
|