@vvfx/ge-ir 0.0.1-beat.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +66 -0
  3. package/dist/ge2ir/converter.d.ts +3 -0
  4. package/dist/ge2ir/index.d.ts +2 -0
  5. package/dist/ge2ir/merge/merge.d.ts +9 -0
  6. package/dist/ge2ir/parsers/animation-parser.d.ts +4 -0
  7. package/dist/ge2ir/parsers/component-parser.d.ts +16 -0
  8. package/dist/ge2ir/parsers/keyframe-parser.d.ts +7 -0
  9. package/dist/ge2ir/parsers/timeline-parser.d.ts +9 -0
  10. package/dist/ge2ir/parsers/transform-parser.d.ts +3 -0
  11. package/dist/ge2ir/pool/pool.d.ts +4 -0
  12. package/dist/ge2ir/reverse/blend-mode.d.ts +2 -0
  13. package/dist/ge2ir/reverse/coordinate.d.ts +1 -0
  14. package/dist/ge2ir/reverse/end-behavior.d.ts +3 -0
  15. package/dist/ge2ir/reverse/timing.d.ts +2 -0
  16. package/dist/ge2ir/scene-reader.d.ts +3 -0
  17. package/dist/ge2ir/types.d.ts +24 -0
  18. package/dist/index.d.ts +17 -0
  19. package/dist/index.js +4812 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/index.mjs +4790 -0
  22. package/dist/index.mjs.map +1 -0
  23. package/dist/ir2ge/assembly/generator.d.ts +23 -0
  24. package/dist/ir2ge/assembly/scene-assembly.d.ts +11 -0
  25. package/dist/ir2ge/builders/animation.d.ts +4 -0
  26. package/dist/ir2ge/builders/bezier.d.ts +44 -0
  27. package/dist/ir2ge/builders/component.d.ts +13 -0
  28. package/dist/ir2ge/builders/effects.d.ts +9 -0
  29. package/dist/ir2ge/builders/layer.d.ts +5 -0
  30. package/dist/ir2ge/builders/timeline.d.ts +9 -0
  31. package/dist/ir2ge/builders/timing.d.ts +17 -0
  32. package/dist/ir2ge/index.d.ts +14 -0
  33. package/dist/ir2ge/ir/anchor-strategy.d.ts +24 -0
  34. package/dist/ir2ge/ir/layer-dimensions.d.ts +13 -0
  35. package/dist/ir2ge/ir/layer-utils.d.ts +14 -0
  36. package/dist/ir2ge/ir/parent-link.d.ts +15 -0
  37. package/dist/ir2ge/ir/specific.d.ts +14 -0
  38. package/dist/ir2ge/post-process/ge-mask-remap.d.ts +18 -0
  39. package/dist/ir2ge/post-process/index.d.ts +31 -0
  40. package/dist/ir2ge/post-process/mask.d.ts +26 -0
  41. package/dist/ir2ge/post-process/parenting.d.ts +3 -0
  42. package/dist/ir2ge/post-process/visibility.d.ts +26 -0
  43. package/dist/ir2ge/types.d.ts +37 -0
  44. package/dist/ir2ge/utils.d.ts +14 -0
  45. package/dist/shared/coordinate.d.ts +11 -0
  46. package/dist/shared/ge2ir-metadata.d.ts +17 -0
  47. package/dist/shared/types.d.ts +60 -0
  48. package/package.json +42 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../node_modules/.pnpm/@swc+helpers@0.5.21/node_modules/@swc/helpers/esm/_extends.js","../../../node_modules/.pnpm/@swc+helpers@0.5.21/node_modules/@swc/helpers/esm/_array_like_to_array.js","../../../node_modules/.pnpm/@swc+helpers@0.5.21/node_modules/@swc/helpers/esm/_unsupported_iterable_to_array.js","../../../node_modules/.pnpm/@swc+helpers@0.5.21/node_modules/@swc/helpers/esm/_create_for_of_iterator_helper_loose.js","../src/shared/coordinate.ts","../src/ir2ge/utils.ts","../src/ir2ge/builders/timeline.ts","../src/ir2ge/builders/bezier.ts","../src/ir2ge/ir/parent-link.ts","../src/ir2ge/builders/timing.ts","../src/ir2ge/ir/layer-utils.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.21/node_modules/@swc/helpers/esm/_type_of.js","../src/shared/ge2ir-metadata.ts","../src/ir2ge/builders/animation.ts","../src/ir2ge/builders/effects.ts","../src/ir2ge/ir/layer-dimensions.ts","../src/ir2ge/builders/component.ts","../src/ir2ge/ir/anchor-strategy.ts","../src/ir2ge/builders/layer.ts","../src/ir2ge/assembly/scene-assembly.ts","../src/ir2ge/post-process/parenting.ts","../src/ir2ge/post-process/mask.ts","../src/ir2ge/post-process/ge-mask-remap.ts","../src/ir2ge/post-process/visibility.ts","../src/ir2ge/post-process/index.ts","../src/ir2ge/assembly/generator.ts","../src/ge2ir/pool/pool.ts","../src/ge2ir/reverse/end-behavior.ts","../src/ge2ir/scene-reader.ts","../src/ge2ir/parsers/timeline-parser.ts","../src/ge2ir/reverse/coordinate.ts","../src/ge2ir/parsers/transform-parser.ts","../src/ge2ir/parsers/keyframe-parser.ts","../src/ge2ir/parsers/animation-parser.ts","../src/ge2ir/reverse/blend-mode.ts","../src/ge2ir/parsers/component-parser.ts","../src/ge2ir/reverse/timing.ts","../src/ge2ir/merge/merge.ts","../src/ge2ir/converter.ts","../src/ir2ge/ir/specific.ts"],"sourcesContent":["function _extends() {\n _extends = Object.assign || function assign(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\nexport { _extends as _ };\n","function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\nexport { _array_like_to_array as _ };\n","import { _ as _array_like_to_array } from \"./_array_like_to_array.js\";\n\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n\n var n = Object.prototype.toString.call(o).slice(8, -1);\n\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\nexport { _unsupported_iterable_to_array as _ };\n","import { _ as _unsupported_iterable_to_array } from \"./_unsupported_iterable_to_array.js\";\n\nfunction _create_for_of_iterator_helper_loose(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (it) return (it = it.call(o)).next.bind(it);\n // Fallback for engines without symbol support\n if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n\n var i = 0;\n\n return function() {\n if (i >= o.length) return { done: true };\n\n return { done: false, value: o[i++] };\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _create_for_of_iterator_helper_loose as _ };\n","export const DEFAULT_CAMERA_Z = 8;\nexport const DEFAULT_CAMERA_FOV = 60;\n\nexport const DEFAULT_CLIP_MODE = 1;\n\n/** 2D pixel space -> GE 3D world unit ratio for a given canvas size. */\nexport function get2dTo3dRatio (width: number, height: number): number {\n let ratio =\n (2 / height) * DEFAULT_CAMERA_Z * Math.tan((DEFAULT_CAMERA_FOV / 2) * (Math.PI / 180)) +\n 1e-6;\n\n if (DEFAULT_CLIP_MODE === 1) {\n ratio *= height / width;\n }\n\n return ratio;\n}\n\n/**\n * Convert a 2D point in canvas pixel space (origin top-left) to a GE 3D world\n * point (origin centered, Y flipped). The `z` parameter applies the GE camera\n * adapter to stay perspective-correct for non-zero Z layers.\n */\nexport function convert2dTo3dPoint (\n x: number,\n y: number,\n z: number,\n width: number,\n height: number,\n): [number, number, number] {\n const ratio = get2dTo3dRatio(width, height);\n const adaptRatioZ = (DEFAULT_CAMERA_Z - z) / DEFAULT_CAMERA_Z;\n const offsetX = (x - width / 2.0) * ratio * adaptRatioZ;\n const offsetY = (height / 2.0 - y) * ratio * adaptRatioZ;\n\n return [offsetX, offsetY, z];\n}\n","import { v4 } from 'uuid';\nimport type { DataPath } from '@galacean/effects-specification';\n\n// ── IDs ──\n\n/** Generate a 32-char hex GE entity id (UUID v4 with dashes stripped). */\nexport function createId (): string {\n return v4().replace(/-/g, '');\n}\n\n/** Wrap an id into a `{ id }` GE DataPath reference. */\nexport function toDataPath (id: string): DataPath {\n return { id };\n}\n\n// ── Numbers ──\n\n/** Round a number to the given decimal precision (default 4). */\nexport function roundNumber (value: number, precision = 4): number {\n const factor = 10 ** precision;\n\n return Math.round(value * factor) / factor;\n}\n\n/** Linear interpolation between `a` and `b` by `factor` ∈ [0, 1]. */\nexport function lerp (a: number, b: number, factor: number): number {\n return (1 - factor) * a + factor * b;\n}\n\n// ── Text metrics ──\n\n/**\n * Rough text width estimate used when the IR layer does not record a\n * measured width. Average character width ≈ 0.6 × fontSize.\n */\nexport function estimateTextWidth (text: string, fontSize: number, letterSpacing?: number): number {\n if (text.length === 0) {\n return 0;\n }\n\n const avgCharWidth = fontSize * 0.6;\n const spacing = (letterSpacing ?? 0) * (text.length - 1);\n\n return text.length * avgCharWidth + spacing;\n}\n","import type { DataPath, TimelineClipData } from '@galacean/effects-specification';\nimport { roundNumber, createId, toDataPath } from '../utils';\nimport type { ECSCollector, TransformAnimation } from '../types';\n\n/**\n * Build the ObjectBindingTrack + Activation/Transform/SpriteColor child tracks\n * for one VFX item. Shared by lottie2ge and dsl2ge generators.\n *\n * The SpriteColor track is omitted for null layers (itemType `'null'` or\n * the GE numeric code `'3'`).\n */\nexport function buildTimelineTracks (\n collector: ECSCollector,\n delay: number,\n duration: number,\n endBehavior: number,\n animation: TransformAnimation,\n itemType: string,\n): string {\n const objectBindingTrackId = createId();\n const childTrackIds: DataPath[] = [];\n\n childTrackIds.push(toDataPath(buildActivationTrack(collector, delay, duration, endBehavior)));\n childTrackIds.push(toDataPath(buildTransformTrack(collector, delay, duration, endBehavior, animation)));\n\n if (!isNullItemType(itemType)) {\n childTrackIds.push(toDataPath(buildSpriteColorTrack(collector, delay, duration, endBehavior, animation)));\n }\n\n collector.miscs.push({\n id: objectBindingTrackId,\n dataType: 'ObjectBindingTrack',\n children: childTrackIds,\n clips: [],\n });\n\n return objectBindingTrackId;\n}\n\nfunction isNullItemType (itemType: string): boolean {\n return itemType === 'null' || itemType === '3';\n}\n\nfunction buildActivationTrack (\n collector: ECSCollector,\n delay: number,\n duration: number,\n endBehavior: number,\n): string {\n const assetId = createId();\n\n collector.miscs.push({ id: assetId, dataType: 'ActivationPlayableAsset' });\n\n const trackId = createId();\n const clip: TimelineClipData = {\n start: roundNumber(delay, 4),\n duration: roundNumber(duration, 4),\n endBehavior,\n asset: toDataPath(assetId),\n };\n\n collector.miscs.push({\n id: trackId,\n dataType: 'ActivationTrack',\n children: [],\n clips: [clip],\n });\n\n return trackId;\n}\n\nfunction buildTransformTrack (\n collector: ECSCollector,\n delay: number,\n duration: number,\n endBehavior: number,\n animation: TransformAnimation,\n): string {\n const assetId = createId();\n const asset: Record<string, unknown> = {\n id: assetId,\n dataType: 'TransformPlayableAsset',\n positionOverLifetime: animation.positionOverLifetime ?? {},\n };\n\n if (animation.rotationOverLifetime != null) {\n asset['rotationOverLifetime'] = animation.rotationOverLifetime;\n }\n if (animation.sizeOverLifetime != null) {\n asset['sizeOverLifetime'] = animation.sizeOverLifetime;\n }\n collector.miscs.push(asset);\n\n const trackId = createId();\n\n collector.miscs.push({\n id: trackId,\n dataType: 'TransformTrack',\n children: [],\n clips: [{\n start: roundNumber(delay, 4),\n duration: roundNumber(duration, 4),\n endBehavior,\n asset: toDataPath(assetId),\n }],\n });\n\n return trackId;\n}\n\nfunction buildSpriteColorTrack (\n collector: ECSCollector,\n delay: number,\n duration: number,\n endBehavior: number,\n animation: TransformAnimation,\n): string {\n const assetId = createId();\n const asset: Record<string, unknown> = {\n id: assetId,\n dataType: 'SpriteColorPlayableAsset',\n startColor: [1, 1, 1, 1],\n };\n\n if (animation.colorOverLifetime != null) {\n asset['colorOverLifetime'] = animation.colorOverLifetime;\n }\n collector.miscs.push(asset);\n\n const trackId = createId();\n\n collector.miscs.push({\n id: trackId,\n dataType: 'SpriteColorTrack',\n children: [],\n clips: [{\n start: roundNumber(delay, 4),\n duration: roundNumber(duration, 4),\n endBehavior,\n asset: toDataPath(assetId),\n }],\n });\n\n return trackId;\n}\n","/**\n * Converts IR keyframe-based animation data to GE BezierKeyframeValue format.\n *\n * GE BezierKeyframeValue format per keyframe:\n * - First: [EASE_OUT(3), [t, v, out_cp_x, out_cp_y]]\n * - Middle: [EASE(1), [in_cp_x, in_cp_y, t, v, out_cp_x, out_cp_y]]\n * - Last: [EASE_IN(2), [in_cp_x, in_cp_y, t, v]]\n *\n * Time is normalized to [0, 1] based on the layer's visible frame range (ip → op).\n */\n\nimport type { IRAnimatedProperty, IRBezierHandle, IRKeyframe, IRVec3 } from '@vvfx/animation-ir';\nimport { type BezierKeyframeValue, BezierKeyframeType } from '@galacean/effects-specification';\nimport { lerp, roundNumber } from '../utils';\n\nexport interface IRToGETimeContext {\n /** Layer visible start frame. */\n startFrame: number;\n /** Layer visible end frame. */\n endFrame: number;\n}\n\nexport interface IRPositionGEResult {\n /** Timing curves in BezierKeyframeValue format (1D, time-domain only). */\n curves: BezierKeyframeValue[][];\n /** Path points per segment: [[start_x, start_y], [end_x, end_y]]. */\n pathPoints: [[number, number], [number, number]][];\n /** Spatial control points per segment: [[to_x, to_y], [ti_x, ti_y]]. */\n controlPoints: [[number, number], [number, number]][];\n}\n\nconst DEFAULT_OUT_TANGENT: IRBezierHandle = { x: 0.33, y: 0.33 };\nconst DEFAULT_IN_TANGENT: IRBezierHandle = { x: 0.67, y: 0.67 };\n\nfunction normalizeTime (frameTime: number, startFrame: number, endFrame: number): number {\n const frames = Math.max(1, endFrame - startFrame);\n\n return (frameTime - startFrame) / frames;\n}\n\nfunction getScalarValue (keyframe: IRKeyframe, dimensionIndex?: number): number {\n const value = keyframe.value;\n\n if (typeof value === 'number') {\n return value;\n }\n\n if (Array.isArray(value) && dimensionIndex != null) {\n return value[dimensionIndex] ?? 0;\n }\n\n return 0;\n}\n\n/**\n * Convert a 1D animated property (opacity / rotation) to GE BezierKeyframeValue[][].\n * Returns a single-element outer array with the full curve.\n */\nexport function irScalarKeyframesToGE (\n property: IRAnimatedProperty<number>,\n timeContext: IRToGETimeContext,\n): BezierKeyframeValue[][] | undefined {\n if (!property.keyframed || property.keyframes == null || property.keyframes.length < 2) {\n return undefined;\n }\n\n const curve = buildCurveForDimension(property.keyframes, timeContext, undefined);\n\n return curve != null ? [curve] : undefined;\n}\n\n/**\n * Convert a multi-dimensional animated property (scale / anchor) to GE BezierKeyframeValue[][].\n * Returns one curve per dimension in the outer array.\n */\nexport function irVectorKeyframesToGE (\n property: IRAnimatedProperty<IRVec3>,\n timeContext: IRToGETimeContext,\n): BezierKeyframeValue[][] | undefined {\n if (!property.keyframed || property.keyframes == null || property.keyframes.length < 2) {\n return undefined;\n }\n\n const firstValue = property.keyframes[0].value;\n const dimensions = Array.isArray(firstValue) ? firstValue.length : 1;\n const curves: BezierKeyframeValue[][] = [];\n\n for (let d = 0; d < dimensions; d++) {\n const curve = buildCurveForDimension(property.keyframes, timeContext, d);\n\n curves.push(curve ?? []);\n }\n\n return curves.length > 0 ? curves : undefined;\n}\n\n/**\n * Convert position keyframes to GE path animation format (pp/cp + timing curves).\n */\nexport function irPositionKeyframesToGE (\n property: IRAnimatedProperty<IRVec3>,\n timeContext: IRToGETimeContext,\n): IRPositionGEResult | undefined {\n if (!property.keyframed || property.keyframes == null || property.keyframes.length < 2) {\n return undefined;\n }\n\n const keyframes = property.keyframes;\n const pathPoints: [[number, number], [number, number]][] = [];\n const controlPoints: [[number, number], [number, number]][] = [];\n const timingCurvePoints: Array<{\n t: number;\n outTangent: IRBezierHandle;\n inTangent: IRBezierHandle;\n }> = [];\n\n for (let i = 0; i < keyframes.length; i++) {\n const kf = keyframes[i];\n const normalizedT = normalizeTime(kf.t, timeContext.startFrame, timeContext.endFrame);\n\n timingCurvePoints.push({\n t: normalizedT,\n outTangent: kf.outTangent ?? DEFAULT_OUT_TANGENT,\n inTangent: kf.inTangent ?? DEFAULT_IN_TANGENT,\n });\n\n if (i < keyframes.length - 1) {\n const nextKf = keyframes[i + 1];\n const startPos = kf.value ?? [0, 0, 0];\n // Lottie segment end value: kf.endValue is authoritative; falls back to kf.value (mirrors master's `e ?? s`).\n // nextKf.value is only used later in the path-fixup pass to stitch adjacent segments.\n const segmentEnd = kf.hold === true ? startPos : (kf.endValue ?? startPos);\n const stitchEnd = kf.hold === true ? startPos : (nextKf.value ?? [0, 0, 0]);\n\n pathPoints.push([\n [startPos[0] ?? 0, startPos[1] ?? 0],\n [stitchEnd[0] ?? 0, stitchEnd[1] ?? 0],\n ]);\n\n // Spatial control points (per IRKeyframe convention): outgoing CP from\n // kf[i].spatialOut, incoming CP from kf[i+1].spatialIn. Without explicit\n // spatial handles on either side, use linear one-third handles.\n let toPoint: [number, number];\n let tiPoint: [number, number];\n\n if (kf.spatialOut != null && nextKf.spatialIn != null) {\n toPoint = [kf.spatialOut[0] ?? 0, kf.spatialOut[1] ?? 0];\n tiPoint = [nextKf.spatialIn[0] ?? 0, nextKf.spatialIn[1] ?? 0];\n } else {\n const sx = startPos[0] ?? 0;\n const sy = startPos[1] ?? 0;\n const ex = segmentEnd[0] ?? 0;\n const ey = segmentEnd[1] ?? 0;\n\n toPoint = [-sx / 3 + ex / 3, -sy / 3 + ey / 3];\n tiPoint = [sx / 3 - ex / 3, sy / 3 - ey / 3];\n }\n controlPoints.push([toPoint, tiPoint]);\n }\n }\n\n // Fix up path points: adjacent segments should share endpoints\n for (let i = 0; i < pathPoints.length - 1; i++) {\n pathPoints[i][1] = pathPoints[i + 1][0];\n }\n\n // Prepend a static segment if the first keyframe doesn't start at t=0.\n // The bridge segment runs synthetic-at-t=0 → original-kf[0]; for it to be a\n // flat hold the END-side tangent (which `buildPositionTimingCurves` reads as\n // `next.inTangent`) must be {1, 1}. Override the original first kf's\n // inTangent before unshifting (its previous value was either DEFAULT, since\n // the IR convention leaves a first-kf inTangent undefined, or whatever the\n // producer set as a no-op).\n if (timingCurvePoints.length > 0 && timingCurvePoints[0].t > 0) {\n timingCurvePoints[0].inTangent = { x: 1, y: 1 };\n timingCurvePoints.unshift({\n t: 0,\n outTangent: { x: 0, y: 0 },\n inTangent: { x: 1, y: 1 },\n });\n pathPoints.unshift([pathPoints[0]?.[0] ?? [0, 0], pathPoints[0]?.[0] ?? [0, 0]]);\n controlPoints.unshift([[0, 0], [0, 0]]);\n }\n\n // Build timing-only bezier curves (in time-time domain)\n const timingCurves = buildPositionTimingCurves(timingCurvePoints);\n\n return {\n curves: timingCurves != null ? [timingCurves] : [[]],\n pathPoints,\n controlPoints,\n };\n}\n\n// ─── Internal helpers ───────────────────────────────────────\n\nfunction makeEaseOut (seg: number[]): BezierKeyframeValue {\n return [BezierKeyframeType.EASE_OUT, [\n roundNumber(seg[0], 4), roundNumber(seg[1], 4), roundNumber(seg[2], 4), roundNumber(seg[3], 4),\n ], BezierKeyframeType.EASE_OUT] as BezierKeyframeValue;\n}\n\nfunction makeEaseIn (prevSeg: number[]): BezierKeyframeValue {\n return [BezierKeyframeType.EASE_IN, [\n roundNumber(prevSeg[4], 4), roundNumber(prevSeg[5], 4), roundNumber(prevSeg[6], 4), roundNumber(prevSeg[7], 4),\n ], BezierKeyframeType.EASE_IN] as BezierKeyframeValue;\n}\n\nfunction makeEase (prevSeg: number[], currSeg: number[]): BezierKeyframeValue {\n return [BezierKeyframeType.EASE, [\n roundNumber(prevSeg[4], 4), roundNumber(prevSeg[5], 4), roundNumber(prevSeg[6], 4), roundNumber(prevSeg[7], 4),\n roundNumber(currSeg[2], 4), roundNumber(currSeg[3], 4),\n ], BezierKeyframeType.EASE] as BezierKeyframeValue;\n}\n\nfunction buildCurveForDimension (\n keyframes: IRKeyframe[],\n timeContext: IRToGETimeContext,\n dimensionIndex: number | undefined,\n): BezierKeyframeValue[] | undefined {\n if (keyframes.length < 2) {\n return undefined;\n }\n\n // Build intermediate bezier representation\n const bezierCurves: number[][] = [];\n\n for (let i = 0; i < keyframes.length - 1; i++) {\n const kf = keyframes[i];\n const nextKf = keyframes[i + 1];\n const t0 = normalizeTime(kf.t, timeContext.startFrame, timeContext.endFrame);\n const t1 = normalizeTime(nextKf.t, timeContext.startFrame, timeContext.endFrame);\n const v0 = getScalarValue(kf, dimensionIndex);\n const v1 = kf.hold === true ? v0 : getScalarValue(nextKf, dimensionIndex);\n const outHandle = kf.hold === true\n ? { x: 0, y: 0 }\n : (kf.outTangent ?? DEFAULT_OUT_TANGENT);\n // Per IR convention, the incoming tangent for segment i lives on kf[i+1].\n const inHandle = kf.hold === true\n ? { x: 1, y: 1 }\n : (nextKf.inTangent ?? DEFAULT_IN_TANGENT);\n\n const outCpX = lerp(t0, t1, outHandle.x);\n const outCpY = lerp(v0, v1, outHandle.y);\n const inCpX = lerp(t0, t1, inHandle.x);\n const inCpY = lerp(v0, v1, inHandle.y);\n\n bezierCurves.push([\n t0, v0,\n outCpX, outCpY,\n inCpX, inCpY,\n t1, v1,\n ]);\n }\n\n if (bezierCurves.length === 0) {\n return undefined;\n }\n\n // Prepend a hold segment if first keyframe is not at t=0\n const firstT = bezierCurves[0][0];\n\n if (firstT > 0) {\n const firstV = bezierCurves[0][1];\n\n bezierCurves.unshift([0, firstV, 0, firstV, firstT, firstV, firstT, firstV]);\n }\n\n // Convert to GE BezierKeyframeValue format\n const result: BezierKeyframeValue[] = [];\n const totalPoints = bezierCurves.length + 1;\n\n for (let i = 0; i < totalPoints; i++) {\n if (i === 0) {\n result.push(makeEaseOut(bezierCurves[0]));\n } else if (i === totalPoints - 1) {\n result.push(makeEaseIn(bezierCurves[i - 1]));\n } else {\n result.push(makeEase(bezierCurves[i - 1], bezierCurves[i]));\n }\n }\n\n return result;\n}\n\nfunction buildPositionTimingCurves (\n points: Array<{ t: number; outTangent: IRBezierHandle; inTangent: IRBezierHandle }>,\n): BezierKeyframeValue[] | undefined {\n if (points.length < 2) {\n return undefined;\n }\n\n // For position, the bezier curve is in time-time domain\n const bezierCurves: number[][] = [];\n\n for (let i = 0; i < points.length - 1; i++) {\n const current = points[i];\n const next = points[i + 1];\n const t0 = current.t;\n const t1 = next.t;\n const outCpX = lerp(t0, t1, current.outTangent.x);\n const outCpY = lerp(t0, t1, current.outTangent.y);\n // Per IR convention: incoming tangent for segment current→next sits on next.\n const inCpX = lerp(t0, t1, next.inTangent.x);\n const inCpY = lerp(t0, t1, next.inTangent.y);\n\n bezierCurves.push([t0, t0, outCpX, outCpY, inCpX, inCpY, t1, t1]);\n }\n\n if (bezierCurves.length === 0) {\n return undefined;\n }\n\n const result: BezierKeyframeValue[] = [];\n const totalPoints = bezierCurves.length + 1;\n\n for (let i = 0; i < totalPoints; i++) {\n if (i === 0) {\n result.push(makeEaseOut(bezierCurves[0]));\n } else if (i === totalPoints - 1) {\n result.push(makeEaseIn(bezierCurves[i - 1]));\n } else {\n result.push(makeEase(bezierCurves[i - 1], bezierCurves[i]));\n }\n }\n\n return result;\n}\n\n/**\n * Determine if a property has enough keyframes to warrant keyframe mode (pkf/skf/rkf/okf).\n */\nexport function shouldUseKeyframeMode (property: IRAnimatedProperty): boolean {\n return property.keyframed === true\n && property.keyframes != null\n && property.keyframes.length > 12;\n}\n","import type { IRLayerNode } from '@vvfx/animation-ir';\n\n/**\n * True when the layer's parent only inherits transform — visibility and\n * lifetime are independent of the parent's window.\n *\n * Reads `IRLayerReference.linkKind` directly. Producers that don't set the\n * field (e.g. dsl2ge) effectively get `false` here, which is the correct\n * default for \"full\" parent containment.\n *\n * Lottie's parser sets `linkKind: 'transform-only'` when a child's parent\n * relationship comes from `layer.parent` rather than precomp expansion;\n * `applyPostProcess` consumes this to decide whether to advance the parent's\n * activation track when the child starts earlier.\n */\nexport function isTransformOnlyParentLink (layer: IRLayerNode): boolean {\n return layer.parent?.linkKind === 'transform-only';\n}\n","import type { IRLayerNode } from '@vvfx/animation-ir';\nimport { roundNumber } from '../utils';\n\n/**\n * Map an IR layer's time range to GE delay/duration in seconds, applying\n * the time-stretch and offset semantics from `IRTimeContext`.\n *\n * dsl-source IRs leave `stretch` and `offsetFrame` undefined, in which case\n * this collapses to `delay = startFrame / fr` and\n * `duration = (endFrame - startFrame) / fr` — exactly what dsl2ge used to\n * compute inline.\n *\n * Zero/negative durations are clamped to a 0.0001 epsilon so GE keeps the\n * activation track alive for the (degenerate) layer.\n */\nexport function computeLayerTiming (layer: IRLayerNode, frameRate: number): { delay: number; layerDuration: number } {\n const time = layer.time;\n const stretch = time.stretch ?? 1;\n const offsetFrame = time.offsetFrame ?? 0;\n\n const delay = roundNumber((offsetFrame + time.startFrame * stretch) / frameRate, 4);\n const rawDuration = (time.endFrame - time.startFrame) * stretch / frameRate;\n const layerDuration = rawDuration > 0 ? roundNumber(rawDuration, 4) : 0.0001;\n\n return { delay, layerDuration };\n}\n","import type { IRLayerNode } from '@vvfx/animation-ir';\nimport type { IRToGETimeContext } from '../builders/bezier';\nimport { convert2dTo3dPoint } from '../../shared/coordinate';\nimport type { LayerProcessingContext } from '../types';\nimport { isTransformOnlyParentLink } from './parent-link';\n\nexport { computeLayerTiming } from '../builders/timing';\n\nexport function computeStaticPosition (\n layer: IRLayerNode,\n ctx: LayerProcessingContext,\n anchorOffsetX = 0,\n anchorOffsetY = 0,\n): [number, number, number] {\n const transform = layer.transform;\n\n if (transform?.position?.keyframed) {\n return convert2dTo3dPoint(\n ctx.width / 2 + anchorOffsetX,\n ctx.height / 2 + anchorOffsetY,\n 0, ctx.width, ctx.height,\n );\n }\n\n const isNullType = layer.type === 'null' || layer.type === 'precomp';\n\n if (transform?.position != null && Array.isArray(transform.position.value)) {\n const pos = transform.position.value;\n\n return convert2dTo3dPoint(\n (pos[0] ?? 0) + anchorOffsetX,\n (pos[1] ?? 0) + anchorOffsetY,\n isNullType ? 0 : (pos[2] ?? 0),\n ctx.width, ctx.height,\n );\n }\n\n return convert2dTo3dPoint(\n ctx.width / 2 + anchorOffsetX,\n ctx.height / 2 + anchorOffsetY,\n 0, ctx.width, ctx.height,\n );\n}\n\nexport function getStaticAnchor (layer: IRLayerNode): [number, number] {\n const anchor = layer.transform?.anchor;\n\n if (anchor != null && !anchor.keyframed && Array.isArray(anchor.value) && anchor.value.length >= 2) {\n return [anchor.value[0], anchor.value[1]];\n }\n\n if (anchor?.keyframed && anchor.keyframes != null && anchor.keyframes.length > 0) {\n const firstVal = anchor.keyframes[0].value;\n\n if (Array.isArray(firstVal) && firstVal.length >= 2) {\n return [firstVal[0], firstVal[1]];\n }\n }\n\n return [0, 0];\n}\n\nfunction getStaticScaleFromIR (layer: IRLayerNode): [number, number] {\n const scale = layer.transform?.scale;\n\n if (scale == null || scale.keyframed) {\n return [1, 1];\n }\n const value = scale.value;\n\n if (!Array.isArray(value)) {\n return [1, 1];\n }\n\n return [value[0] ?? 1, value[1] ?? 1];\n}\n\nexport function applyScalePositionAdjust (\n position: [number, number, number],\n layer: IRLayerNode,\n layerWidth: number,\n layerHeight: number,\n ratio: number,\n): [number, number, number] {\n const staticScale = getStaticScaleFromIR(layer);\n\n if ((staticScale[0] === 1 && staticScale[1] === 1) || layerWidth <= 0 || layerHeight <= 0) {\n return position;\n }\n\n const anchor = getStaticAnchor(layer);\n const anchorDiffX = anchor[0] - layerWidth / 2;\n const anchorDiffY = anchor[1] - layerHeight / 2;\n\n if (Math.abs(anchorDiffX) <= 0.5 && Math.abs(anchorDiffY) <= 0.5) {\n return position;\n }\n\n return [\n position[0] + anchorDiffX * (1 - staticScale[0]) * ratio,\n position[1] - anchorDiffY * (1 - staticScale[1]) * ratio,\n position[2],\n ];\n}\n\nexport function computeAnchorInfo (\n layer: IRLayerNode,\n layerWidth: number,\n layerHeight: number,\n): { anchorScaleX: number; anchorScaleY: number; anchorOffsetX: number; anchorOffsetY: number } {\n const anchor = getStaticAnchor(layer);\n let anchorScaleX = 0.5;\n let anchorScaleY = 0.5;\n let anchorOffsetX = 0;\n let anchorOffsetY = 0;\n\n if (layerWidth > 0 && layerHeight > 0) {\n anchorScaleX = anchor[0] / layerWidth;\n anchorScaleY = anchor[1] / layerHeight;\n anchorOffsetX = -(anchor[0] - layerWidth / 2);\n anchorOffsetY = -(anchor[1] - layerHeight / 2);\n }\n\n if (layer.type === 'text' && layer.text != null && layerWidth > 0 && layerHeight > 0) {\n if (layer.text.anchorAdjust === true) {\n if (layer.text.textAlign === 'left') {\n anchorOffsetX = -(anchor[0] - layerWidth / 2);\n anchorScaleX = anchor[0] / layerWidth - 0.5;\n }\n if (layer.text.textAlign === 'center') {\n anchorOffsetX = -anchor[0];\n anchorScaleX = anchor[0] / layerWidth + 0.5;\n }\n if (layer.text.textAlign === 'right') {\n anchorOffsetX = -(anchor[0] + layerWidth / 2);\n anchorScaleX = anchor[0] / layerWidth + 1.5;\n }\n // GE renders glyphs in the lower half of the quad, so offset by half the\n // layer height to align the visible text center with Lottie's anchor.\n const textHeight = layerHeight / 2;\n\n anchorOffsetY = -(anchor[1] + textHeight);\n anchorScaleY = -anchor[1] / textHeight;\n }\n }\n\n const isSpriteForAnchor = layer.type === 'image' || layer.type === 'solid';\n const staticRotationZ = getStaticRotationZ(layer);\n const hasStaticRotation = staticRotationZ != null;\n\n if (\n isSpriteForAnchor\n && hasStaticRotation\n && isTransformOnlyParentLink(layer)\n && (anchorOffsetX !== 0 || anchorOffsetY !== 0)\n ) {\n const rotValue = staticRotationZ ?? 0;\n\n if (rotValue !== 0) {\n const rad = rotValue * Math.PI / 180;\n const cosR = Math.cos(rad);\n const sinR = Math.sin(rad);\n const rotatedX = anchorOffsetX * cosR - anchorOffsetY * sinR;\n const rotatedY = anchorOffsetX * sinR + anchorOffsetY * cosR;\n\n anchorOffsetX = rotatedX;\n anchorOffsetY = rotatedY;\n }\n }\n\n return { anchorScaleX, anchorScaleY, anchorOffsetX, anchorOffsetY };\n}\n\nfunction getStaticRotationZ (layer: IRLayerNode): number | undefined {\n const rotation = layer.transform?.rotation;\n\n if (rotation != null && !rotation.keyframed && Array.isArray(rotation.value)) {\n return rotation.value[2] ?? 0;\n }\n\n const separatedRotationZ = layer.transform?.separatedRotation?.z;\n\n if (separatedRotationZ != null && !separatedRotationZ.keyframed && typeof separatedRotationZ.value === 'number') {\n return separatedRotationZ.value;\n }\n\n return undefined;\n}\n\nexport function getTimeContext (layer: IRLayerNode): IRToGETimeContext {\n return {\n startFrame: layer.time.startFrame,\n endFrame: layer.time.endFrame,\n };\n}\n","function _type_of(obj) {\n \"@swc/helpers - typeof\";\n\n return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n}\nexport { _type_of as _ };\n","import type { IRComposition, IRLayerNode } from '@vvfx/animation-ir';\n\n/**\n * Round-trip passthrough contract written by ge2ir and consumed by ir2ge.\n *\n * Supported keys:\n * positionOverLifetime, rotationOverLifetime, sizeOverLifetime,\n * colorOverLifetime, geComponentId, geMask.\n */\nexport interface GE2IRPassthroughMetadata {\n positionOverLifetime?: Record<string, unknown>;\n rotationOverLifetime?: Record<string, unknown>;\n sizeOverLifetime?: Record<string, unknown>;\n colorOverLifetime?: Record<string, unknown>;\n geComponentId?: string;\n geMask?: Record<string, unknown>;\n}\n\nexport function readGE2IRMetadata (\n ir: IRComposition,\n layer: IRLayerNode,\n): GE2IRPassthroughMetadata | undefined {\n if (ir.source !== 'ge') {\n return undefined;\n }\n\n const metadata = layer.metadata;\n\n if (metadata == null) {\n return undefined;\n }\n\n const namespaced = metadata['ge2ir'];\n\n if (isRecord(namespaced)) {\n return namespaced as GE2IRPassthroughMetadata;\n }\n\n const legacy = readLegacyGE2IRMetadata(metadata);\n\n return Object.keys(legacy).length > 0 ? legacy : undefined;\n}\n\nfunction readLegacyGE2IRMetadata (metadata: Record<string, unknown>): GE2IRPassthroughMetadata {\n const legacy: GE2IRPassthroughMetadata = {};\n const positionOverLifetime = metadata['positionOverLifetime'];\n const rotationOverLifetime = metadata['rotationOverLifetime'];\n const sizeOverLifetime = metadata['sizeOverLifetime'];\n const colorOverLifetime = metadata['colorOverLifetime'];\n const geComponentId = metadata['geComponentId'];\n const geMask = metadata['geMask'];\n\n if (isRecord(positionOverLifetime)) {\n legacy.positionOverLifetime = positionOverLifetime;\n }\n if (isRecord(rotationOverLifetime)) {\n legacy.rotationOverLifetime = rotationOverLifetime;\n }\n if (isRecord(sizeOverLifetime)) {\n legacy.sizeOverLifetime = sizeOverLifetime;\n }\n if (isRecord(colorOverLifetime)) {\n legacy.colorOverLifetime = colorOverLifetime;\n }\n if (typeof geComponentId === 'string') {\n legacy.geComponentId = geComponentId;\n }\n if (isRecord(geMask)) {\n legacy.geMask = geMask;\n }\n\n return legacy;\n}\n\nfunction isRecord (value: unknown): value is Record<string, unknown> {\n return value != null && typeof value === 'object' && !Array.isArray(value);\n}\n","import type { IRAnimatedProperty, IRComposition, IRLayerNode, IRTransformChannels, IRVec3 } from '@vvfx/animation-ir';\nimport { irPositionKeyframesToGE, irScalarKeyframesToGE, irVectorKeyframesToGE, shouldUseKeyframeMode, type IRToGETimeContext } from './bezier';\nimport { type BezierKeyframeValue, ValueType } from '@galacean/effects-specification';\nimport { roundNumber } from '../utils';\nimport { convert2dTo3dPoint } from '../../shared/coordinate';\nimport { getTimeContext } from '../ir/layer-utils';\nimport { readGE2IRMetadata } from '../../shared/ge2ir-metadata';\nimport type { LayerProcessingContext, TransformAnimation } from '../types';\n\nexport function buildTransformAnimation (\n layer: IRLayerNode,\n ctx: LayerProcessingContext,\n): TransformAnimation {\n const transform = layer.transform;\n\n if (transform == null) {\n return {};\n }\n\n const timeContext = getTimeContext(layer);\n\n // Passthrough: ge2ir stores raw animation data in metadata to bypass the\n // IR keyframe conversion pipeline. Raw GE data is used verbatim when\n // available; otherwise the standard IR → GE conversion runs.\n const ge2irMetadata = readGE2IRMetadata(ctx.ir, layer);\n const passthroughPosition = ge2irMetadata?.positionOverLifetime;\n const passthroughRotation = ge2irMetadata?.rotationOverLifetime;\n const passthroughSize = ge2irMetadata?.sizeOverLifetime;\n\n const positionOverLifetime = passthroughPosition ?? buildPositionAnim(transform, timeContext, ctx);\n const rotationOverLifetime = passthroughRotation ?? buildRotationAnim(transform, timeContext);\n const sizeOverLifetime = passthroughSize ?? buildSizeAnim(transform, timeContext);\n\n return { positionOverLifetime, rotationOverLifetime, sizeOverLifetime };\n}\n\nfunction buildPositionAnim (\n transform: IRTransformChannels,\n timeContext: IRToGETimeContext,\n ctx: LayerProcessingContext,\n): Record<string, unknown> | undefined {\n if (transform.position == null || !transform.position.keyframed) {\n return undefined;\n }\n\n const posResult = irPositionKeyframesToGE(transform.position, timeContext);\n\n if (posResult == null) {\n return undefined;\n }\n\n const pathPoints: [number, number, number][] = [];\n const controlPoints: [number, number, number][] = [];\n const useKeyframeMode = shouldUseKeyframeMode(transform.position);\n\n for (const pp of posResult.pathPoints) {\n const point3d = convert2dTo3dPoint(\n pp[0][0], pp[0][1], 0,\n ctx.width, ctx.height,\n );\n\n pathPoints.push(point3d);\n }\n\n if (posResult.pathPoints.length > 0) {\n const lastPp = posResult.pathPoints[posResult.pathPoints.length - 1];\n const lastPoint3d = convert2dTo3dPoint(\n lastPp[1][0], lastPp[1][1], 0,\n ctx.width, ctx.height,\n );\n\n pathPoints.push(lastPoint3d);\n }\n\n for (let i = 0; i < posResult.controlPoints.length; i++) {\n const cp = posResult.controlPoints[i];\n const pp = posResult.pathPoints[i];\n\n if (useKeyframeMode) {\n const dx = pp[1][0] - pp[0][0];\n const dy = pp[1][1] - pp[0][1];\n const cp1 = convert2dTo3dPoint(dx / 3 + pp[0][0], dy / 3 + pp[0][1], 0, ctx.width, ctx.height);\n const cp2 = convert2dTo3dPoint(-dx / 3 + pp[1][0], -dy / 3 + pp[1][1], 0, ctx.width, ctx.height);\n\n controlPoints.push(cp1, cp2);\n } else {\n const cp1 = convert2dTo3dPoint(cp[0][0] + pp[0][0], cp[0][1] + pp[0][1], 0, ctx.width, ctx.height);\n const cp2 = convert2dTo3dPoint(cp[1][0] + pp[1][0], cp[1][1] + pp[1][1], 0, ctx.width, ctx.height);\n\n controlPoints.push(cp1, cp2);\n }\n }\n\n const curveData = posResult.curves[0] ?? [];\n const easingData: BezierKeyframeValue[] = curveData.map((kf: BezierKeyframeValue) => [kf[0], kf[1]] as BezierKeyframeValue);\n\n const roundedPathPoints = pathPoints.map(p => [\n roundNumber(p[0], 4), roundNumber(p[1], 4), p[2],\n ] as [number, number, number]);\n const roundedControlPoints = controlPoints.map(p => [\n roundNumber(p[0], 4), roundNumber(p[1], 4), p[2],\n ] as [number, number, number]);\n\n const pathPayload: unknown[] = [easingData, roundedPathPoints];\n\n if (roundedControlPoints.length > 0) {\n pathPayload.push(roundedControlPoints);\n }\n\n return {\n path: [ValueType.BEZIER_CURVE_PATH, pathPayload],\n };\n}\n\nfunction buildRotationAnim (\n transform: IRTransformChannels,\n timeContext: IRToGETimeContext,\n): Record<string, unknown> | undefined {\n const result: Record<string, unknown> = {};\n let hasZ = false;\n let hasX = false;\n let hasY = false;\n\n const rotation = transform.rotation;\n\n if (rotation != null) {\n if (rotation.keyframed) {\n const curves = irVectorKeyframesToGE(rotation, timeContext);\n\n if (curves != null && axisHasRotationValue(rotation, 0) && curves[0]?.length) {\n result['x'] = [ValueType.BEZIER_CURVE, curves[0]];\n hasX = true;\n }\n if (curves != null && axisHasRotationValue(rotation, 1) && curves[1]?.length) {\n result['y'] = [ValueType.BEZIER_CURVE, curves[1]];\n hasY = true;\n }\n if (curves != null && axisHasRotationValue(rotation, 2) && curves[2]?.length) {\n result['z'] = [ValueType.BEZIER_CURVE, curves[2]];\n hasZ = true;\n }\n } else if (rotation.value != null) {\n const [x = 0, y = 0, z = 0] = rotation.value;\n\n if (Math.abs(x) > 0.0001) {\n result['x'] = [ValueType.CONSTANT, x];\n hasX = true;\n }\n if (Math.abs(y) > 0.0001) {\n result['y'] = [ValueType.CONSTANT, y];\n hasY = true;\n }\n if (Math.abs(z) > 0.0001) {\n result['z'] = [ValueType.CONSTANT, z];\n hasZ = true;\n }\n }\n } else {\n const separated = transform.separatedRotation;\n\n if (separated?.x?.keyframed) {\n const curves = irScalarKeyframesToGE(separated.x, timeContext);\n\n if (curves != null) {\n result['x'] = [ValueType.BEZIER_CURVE, curves[0]];\n hasX = true;\n }\n } else if (separated?.x?.value != null && separated.x.value !== 0) {\n result['x'] = [ValueType.CONSTANT, separated.x.value];\n hasX = true;\n }\n\n if (separated?.y?.keyframed) {\n const curves = irScalarKeyframesToGE(separated.y, timeContext);\n\n if (curves != null) {\n result['y'] = [ValueType.BEZIER_CURVE, curves[0]];\n hasY = true;\n }\n } else if (separated?.y?.value != null && separated.y.value !== 0) {\n result['y'] = [ValueType.CONSTANT, separated.y.value];\n hasY = true;\n }\n\n if (separated?.z?.keyframed) {\n const curves = irScalarKeyframesToGE(separated.z, timeContext);\n\n if (curves != null) {\n result['z'] = [ValueType.BEZIER_CURVE, curves[0]];\n hasZ = true;\n }\n } else if (separated?.z?.value != null && separated.z.value !== 0) {\n result['z'] = [ValueType.CONSTANT, separated.z.value];\n hasZ = true;\n }\n }\n\n if (!hasZ && !hasX && !hasY) {\n return undefined;\n }\n\n result['asRotation'] = true;\n const axisCount = (hasX ? 1 : 0) + (hasY ? 1 : 0) + (hasZ ? 1 : 0);\n\n if (axisCount > 1 || hasX || hasY) {\n result['separateAxes'] = true;\n }\n\n return result;\n}\n\nfunction axisHasRotationValue (rotation: IRAnimatedProperty<IRVec3>, axis: number): boolean {\n if (!rotation.keyframed) {\n return Math.abs(rotation.value?.[axis] ?? 0) > 0.0001;\n }\n\n return rotation.keyframes?.some(keyframe => (\n Math.abs(keyframe.value[axis] ?? 0) > 0.0001 ||\n Math.abs(keyframe.endValue?.[axis] ?? 0) > 0.0001\n )) ?? false;\n}\n\nfunction buildSizeAnim (\n transform: IRTransformChannels,\n timeContext: IRToGETimeContext,\n): Record<string, unknown> | undefined {\n if (transform.scale == null) {\n return undefined;\n }\n\n if (transform.scale.keyframed) {\n const curves = irVectorKeyframesToGE(transform.scale, timeContext);\n\n if (curves != null && curves.length >= 2) {\n return {\n separateAxes: true,\n x: [ValueType.BEZIER_CURVE, curves[0]],\n y: [ValueType.BEZIER_CURVE, curves[1]],\n ...(curves.length >= 3 && { z: [ValueType.BEZIER_CURVE, curves[2]] }),\n };\n }\n\n return undefined;\n }\n\n const scale = transform.scale.value;\n\n if (Array.isArray(scale) && (Math.abs(scale[0] - 1) > 0.0001 || Math.abs(scale[1] - 1) > 0.0001)) {\n return {\n separateAxes: true,\n x: [ValueType.CONSTANT, scale[0]],\n y: [ValueType.CONSTANT, scale[1]],\n z: [ValueType.CONSTANT, scale[2] ?? 1],\n };\n }\n\n return undefined;\n}\n\nexport function buildColorAnimation (layer: IRLayerNode, ir: IRComposition): Record<string, unknown> | undefined {\n const passthroughColor = readGE2IRMetadata(ir, layer)?.colorOverLifetime;\n\n if (passthroughColor != null) {\n return passthroughColor;\n }\n\n const transform = layer.transform;\n\n if (transform?.opacity == null) {\n return undefined;\n }\n\n const timeContext = getTimeContext(layer);\n\n if (timeContext.endFrame - timeContext.startFrame <= 0) {\n return {\n opacity: [ValueType.CONSTANT, 0],\n };\n }\n\n if (transform.opacity.keyframed) {\n const curves = irScalarKeyframesToGE(transform.opacity, timeContext);\n\n if (curves != null) {\n return {\n opacity: [ValueType.BEZIER_CURVE, curves[0]],\n };\n }\n\n return undefined;\n }\n\n const opacityValue = transform.opacity.value;\n\n if (typeof opacityValue === 'number' && opacityValue !== 1) {\n return {\n opacity: [ValueType.CONSTANT, opacityValue],\n };\n }\n\n return undefined;\n}\n","import { type IRBlendMode, IRBlendMode as IRBlendModeConst } from '@vvfx/animation-ir';\nimport type { DataPath } from '@galacean/effects-specification';\nimport { createId, toDataPath } from '../utils';\nimport type { ECSCollector, GETransform } from '../types';\n\nexport { estimateTextWidth } from '../utils';\n\nexport function buildGETransform (\n position: [number, number, number],\n eulerHint: [number, number, number],\n scale: [number, number, number],\n): GETransform {\n return {\n position: { x: position[0], y: position[1], z: position[2] },\n eulerHint: { x: eulerHint[0], y: eulerHint[1], z: eulerHint[2] },\n scale: { x: scale[0], y: scale[1], z: scale[2] },\n };\n}\n\nexport function getGEItemType (type: string): string {\n switch (type) {\n case 'image':\n case 'solid':\n return 'sprite';\n case 'text':\n return 'text';\n case 'shape':\n return 'sprite';\n default:\n return 'null';\n }\n}\n\nexport function getGEItemTypeCode (type: string): string {\n switch (type) {\n case 'image':\n case 'solid':\n return '1';\n case 'text':\n return 'text';\n case 'shape':\n return 'shape';\n default:\n return '3';\n }\n}\n\nexport function registerTexture (\n collector: ECSCollector,\n imageUrl: string,\n cache: Map<string, DataPath>,\n): DataPath {\n const cached = cache.get(imageUrl);\n\n if (cached != null) {\n return cached;\n }\n\n const imageId = createId();\n const textureId = createId();\n\n collector.images.push({ id: imageId, url: imageUrl });\n collector.textures.push({\n id: textureId,\n dataType: 'Texture',\n source: toDataPath(imageId),\n flipY: true,\n });\n\n const dataPathRef = toDataPath(textureId);\n\n cache.set(imageUrl, dataPathRef);\n\n return dataPathRef;\n}\n\nconst GE_BLENDING_BY_IR_MODE: Record<IRBlendMode, number | undefined> = {\n [IRBlendModeConst.Normal]: undefined,\n [IRBlendModeConst.Multiply]: 6,\n [IRBlendModeConst.Screen]: 9,\n [IRBlendModeConst.Overlay]: 13,\n [IRBlendModeConst.Darken]: 2,\n [IRBlendModeConst.Lighten]: 3,\n [IRBlendModeConst.ColorDodge]: 10,\n [IRBlendModeConst.ColorBurn]: 7,\n [IRBlendModeConst.HardLight]: 14,\n [IRBlendModeConst.SoftLight]: 15,\n [IRBlendModeConst.Difference]: 4,\n [IRBlendModeConst.Exclusion]: 5,\n [IRBlendModeConst.Hue]: 11,\n [IRBlendModeConst.Saturation]: 12,\n [IRBlendModeConst.Color]: 8,\n [IRBlendModeConst.Luminosity]: 16,\n [IRBlendModeConst.Add]: 1,\n};\n\nexport function mapBlendingMode (blendMode: IRBlendMode | undefined): number | undefined {\n if (blendMode == null) {\n return undefined;\n }\n\n return GE_BLENDING_BY_IR_MODE[blendMode];\n}\n\n","import type { IRLayerNode } from '@vvfx/animation-ir';\n\nconst DEFAULT_DISPLAY_SIZE = { width: 1, height: 1 };\n\n/**\n * Read the producer-baked display size from an IR layer. When the producer\n * did not resolve one, returns `fallback` (defaults to `{ 1, 1 }` — the\n * value every existing call site was using inline).\n */\nexport function getLayerDisplaySize (\n layer: IRLayerNode,\n fallback: { width: number; height: number } = DEFAULT_DISPLAY_SIZE,\n): { width: number; height: number } {\n return layer.displaySize ?? fallback;\n}\n","import type { IRColor, IRComposition, IRCustomShapePath, IRLayerNode, IRShapeData, IRShapePaintData } from '@vvfx/animation-ir';\nimport { IRFillType, IRLineCap, IRLineJoin, IRShapeFillRule, IRShapePrimitiveType } from '@vvfx/animation-ir';\nimport { type DataPath, ValueType } from '@galacean/effects-specification';\nimport { roundNumber, createId, toDataPath } from '../utils';\nimport { estimateTextWidth, mapBlendingMode, registerTexture } from './effects';\nimport { getLayerDisplaySize } from '../ir/layer-dimensions';\nimport { readGE2IRMetadata } from '../../shared/ge2ir-metadata';\nimport type { LayerProcessingContext } from '../types';\n\nexport function buildComponent (\n layer: IRLayerNode,\n itemId: string,\n anchorScaleX: number,\n anchorScaleY: number,\n ctx: LayerProcessingContext,\n): string | undefined {\n switch (layer.type) {\n case 'image':\n case 'solid':\n return buildSpriteComponent(layer, itemId, anchorScaleX, anchorScaleY, ctx);\n case 'text':\n return buildTextComponent(layer, itemId, anchorScaleX, anchorScaleY, ctx);\n case 'shape':\n return buildShapeComponent(layer, itemId, ctx);\n default:\n return undefined;\n }\n}\n\n/**\n * Copy the raw GE mask object (from ge2ir passthrough metadata) onto a freshly\n * built component, as a top-level `mask` field matching GE's structure. For a\n * mask SOURCE this carries `{isMask:true, alphaMaskEnabled}`; for a TARGET it\n * carries `{isMask:false, reference, inverted}` where `reference.id` is still\n * the stale GE1 component id — `applyGeMaskRemap` rewrites it in post-process.\n * No-op for non-ge sources (Lottie masks go through the IRLayerNode.mask path).\n */\nexport function applyGeMask (ir: IRComposition, layer: IRLayerNode, component: Record<string, unknown>): void {\n const geMask = readGE2IRMetadata(ir, layer)?.geMask;\n\n if (geMask != null && component['mask'] == null) {\n component['mask'] = { ...geMask };\n }\n}\n\nfunction buildSpriteComponent (\n layer: IRLayerNode,\n itemId: string,\n anchorScaleX: number,\n anchorScaleY: number,\n ctx: LayerProcessingContext,\n): string {\n const componentId = createId();\n const blending = mapBlendingMode(layer.blendMode);\n const startColor = layer.solidColor != null\n ? [\n roundNumber(layer.solidColor[0], 4),\n roundNumber(layer.solidColor[1], 4),\n roundNumber(layer.solidColor[2], 4),\n roundNumber(layer.solidColor[3], 4),\n ]\n : [1, 1, 1, 1];\n\n let textureDataPath: DataPath | undefined;\n\n const textureUrl = layer.asset?.url ?? layer.asset?.refId;\n\n if (textureUrl != null && textureUrl !== '' && textureUrl !== 'mask://placeholder') {\n textureDataPath = registerTexture(ctx.collector, textureUrl, ctx.textureCache);\n }\n\n const component: Record<string, unknown> = {\n id: componentId,\n dataType: 'SpriteComponent',\n item: toDataPath(itemId),\n options: { startColor },\n renderer: {\n renderMode: 1,\n ...(blending !== undefined && { blending }),\n ...(textureDataPath != null && { texture: textureDataPath }),\n },\n };\n\n const isNonDefaultAnchor = Math.abs(anchorScaleX - 0.5) > 0.001 || Math.abs(anchorScaleY - 0.5) > 0.001;\n\n if (isNonDefaultAnchor) {\n (component['renderer'] as Record<string, unknown>)['anchor'] = [\n roundNumber(anchorScaleX, 4),\n roundNumber(anchorScaleY, 4),\n ];\n }\n\n applyGeMask(ctx.ir, layer, component);\n ctx.collector.components.push(component);\n\n return componentId;\n}\n\nfunction buildTextComponent (\n layer: IRLayerNode,\n itemId: string,\n anchorScaleX: number,\n anchorScaleY: number,\n ctx: LayerProcessingContext,\n): string | undefined {\n const textInfo = layer.text;\n\n if (textInfo == null) {\n return undefined;\n }\n\n const componentId = createId();\n const blending = mapBlendingMode(layer.blendMode);\n const textColor: number[] = [\n roundNumber(textInfo.color[0], 4),\n roundNumber(textInfo.color[1], 4),\n roundNumber(textInfo.color[2], 4),\n textInfo.color[3],\n ];\n const textWidth = textInfo.width ?? estimateTextWidth(textInfo.content, textInfo.fontSize, textInfo.letterSpacing);\n const lineHeight = typeof textInfo.lineHeight === 'number' && textInfo.lineHeight > 0\n ? textInfo.lineHeight\n : textInfo.fontSize;\n const textHeight = Math.max(textInfo.height ?? textInfo.fontSize * 1.2, lineHeight);\n\n const { width: layerWidth, height: layerHeight } = getLayerDisplaySize(layer);\n const textSizeW = roundNumber(ctx.ratio * layerWidth, 4);\n const textSizeH = roundNumber(ctx.ratio * layerHeight, 4);\n\n const component: Record<string, unknown> = {\n id: componentId,\n dataType: 'TextComponent',\n item: toDataPath(itemId),\n options: {\n text: textInfo.content,\n fontSize: textInfo.fontSize,\n textColor,\n fontFamily: textInfo.fontFamily || 'sans-serif',\n fontWeight: textInfo.fontWeight,\n textAlign: textInfo.textAlign === 'center' ? 1 : textInfo.textAlign === 'right' ? 2 : 0,\n fontStyle: textInfo.fontStyle,\n letterSpace: textInfo.letterSpacing,\n lineHeight,\n textWidth,\n textHeight,\n autoWidth: textInfo.autoWidth,\n size: [textSizeW, textSizeH],\n },\n renderer: {\n renderMode: 1,\n anchor: [anchorScaleX, anchorScaleY],\n ...(blending !== undefined && { blending }),\n },\n };\n\n applyGeMask(ctx.ir, layer, component);\n ctx.collector.components.push(component);\n\n return componentId;\n}\n\nfunction buildShapeComponent (\n layer: IRLayerNode,\n itemId: string,\n ctx: LayerProcessingContext,\n): string | undefined {\n if (layer.shapes == null || layer.shapes.length === 0) {\n return undefined;\n }\n\n const shapeData = layer.shapes[0];\n const componentId = createId();\n const blending = mapBlendingMode(layer.blendMode);\n\n const component: Record<string, unknown> = {\n id: componentId,\n dataType: 'ShapeComponent',\n item: toDataPath(itemId),\n ...buildShapeOptions(shapeData, ctx.ratio, ctx),\n renderer: {\n renderMode: 1,\n ...(blending !== undefined && { blending }),\n },\n };\n\n applyGeMask(ctx.ir, layer, component);\n ctx.collector.components.push(component);\n\n return componentId;\n}\n\nexport function buildShapeOptions (\n shapeData: IRShapeData,\n ratio: number,\n ctx?: LayerProcessingContext,\n): Record<string, unknown> {\n const options: Record<string, unknown> = {\n type: mapShapePrimitiveType(shapeData.primitiveType),\n };\n\n if (shapeData.size != null) {\n options['xSize'] = roundNumber(shapeData.size[0] * ratio, 4);\n options['ySize'] = roundNumber(shapeData.size[1] * ratio, 4);\n }\n\n setScaledNumber(options, shapeData, 'xRadius', ratio);\n setScaledNumber(options, shapeData, 'yRadius', ratio);\n setScaledNumber(options, shapeData, 'width', ratio);\n setScaledNumber(options, shapeData, 'height', ratio);\n setScaledNumber(options, shapeData, 'innerRadius', ratio);\n setScaledNumber(options, shapeData, 'outerRadius', ratio);\n setScaledNumber(options, shapeData, 'radius', ratio);\n setRawNumber(options, shapeData, 'roundness');\n setRawNumber(options, shapeData, 'pointCount');\n setRawNumber(options, shapeData, 'innerRoundness');\n setRawNumber(options, shapeData, 'outerRoundness');\n\n if (shapeData.fills != null && shapeData.fills.length > 0) {\n options['fills'] = shapeData.fills\n .map(fill => mapShapePaint(fill, ratio, ctx))\n .filter((fill): fill is Record<string, unknown> => fill != null);\n } else {\n options['fills'] = [];\n }\n if (shapeData.strokes != null && shapeData.strokes.length > 0) {\n options['strokes'] = shapeData.strokes\n .map(stroke => mapShapePaint(stroke, ratio, ctx))\n .filter((stroke): stroke is Record<string, unknown> => stroke != null);\n } else {\n options['strokes'] = [];\n }\n if (typeof shapeData.strokeWidth === 'number') {\n options['strokeWidth'] = roundNumber(shapeData.strokeWidth * ratio, 4);\n }\n if (shapeData.strokeCap != null) {\n options['strokeCap'] = mapLineCap(shapeData.strokeCap);\n }\n if (shapeData.strokeJoin != null) {\n options['strokeJoin'] = mapLineJoin(shapeData.strokeJoin);\n }\n if (shapeData.fillRule != null) {\n options['fillRule'] = mapShapeFillRule(shapeData.fillRule);\n }\n if (shapeData.customPaths != null && shapeData.customPaths.length > 0) {\n Object.assign(options, mapCustomPaths(shapeData.customPaths, ratio));\n }\n if (shapeData.trimPath != null) {\n options['trimPath'] = shapeData.trimPath;\n }\n if (shapeData.repeater != null) {\n options['repeater'] = shapeData.repeater;\n }\n\n return options;\n}\n\nconst SHAPE_PRIMITIVE_TYPE_TO_GE: Record<IRShapeData['primitiveType'], number> = {\n [IRShapePrimitiveType.Custom]: 0,\n [IRShapePrimitiveType.Rectangle]: 1,\n [IRShapePrimitiveType.Ellipse]: 2,\n [IRShapePrimitiveType.Polygon]: 3,\n [IRShapePrimitiveType.Star]: 4,\n};\n\nconst FILL_TYPE_TO_GE: Record<IRShapePaintData['type'], number> = {\n [IRFillType.Solid]: 0,\n [IRFillType.LinearGradient]: 1,\n [IRFillType.RadialGradient]: 2,\n [IRFillType.AngularGradient]: 3,\n [IRFillType.Texture]: 4,\n};\n\nconst LINE_CAP_TO_GE: Record<string, number> = {\n [IRLineCap.Butt]: 0,\n [IRLineCap.Round]: 1,\n [IRLineCap.Square]: 2,\n};\n\nconst LINE_JOIN_TO_GE: Record<string, number> = {\n [IRLineJoin.Round]: 0,\n [IRLineJoin.Bevel]: 1,\n [IRLineJoin.Miter]: 2,\n};\n\nconst SHAPE_FILL_RULE_TO_GE: Record<string, number> = {\n [IRShapeFillRule.NonZero]: 0,\n [IRShapeFillRule.EvenOdd]: 1,\n};\n\nfunction mapShapePrimitiveType (primitiveType: IRShapeData['primitiveType']): number {\n return SHAPE_PRIMITIVE_TYPE_TO_GE[primitiveType];\n}\n\nfunction mapLineCap (lineCap: string): number {\n return LINE_CAP_TO_GE[lineCap] ?? 0;\n}\n\nfunction mapLineJoin (lineJoin: string): number {\n return LINE_JOIN_TO_GE[lineJoin] ?? 2;\n}\n\nfunction mapShapeFillRule (fillRule: string): number {\n return SHAPE_FILL_RULE_TO_GE[fillRule] ?? 0;\n}\n\nfunction mapShapePaint (\n paint: IRShapePaintData,\n ratio: number,\n ctx: LayerProcessingContext | undefined,\n): Record<string, unknown> | undefined {\n if (paint.type === IRFillType.Solid) {\n return {\n type: FILL_TYPE_TO_GE[paint.type],\n color: colorToGE(paint.color),\n };\n }\n\n if (\n paint.type === IRFillType.LinearGradient ||\n paint.type === IRFillType.RadialGradient ||\n paint.type === IRFillType.AngularGradient\n ) {\n return {\n type: FILL_TYPE_TO_GE[paint.type],\n gradientStops: [ValueType.GRADIENT_COLOR, paint.gradientStops],\n startPoint: vec2ToGE(paint.gradientStart, ratio),\n endPoint: vec2ToGE(paint.gradientEnd, ratio),\n ...(paint.color != null && { color: colorToGE(paint.color) }),\n };\n }\n\n if (paint.type === IRFillType.Texture) {\n const textureUrl = paint.texture.url ?? paint.texture.refId ?? paint.texture.id;\n const texture = textureUrl != null && ctx != null\n ? registerTexture(ctx.collector, textureUrl, ctx.textureCache)\n : undefined;\n\n return {\n type: FILL_TYPE_TO_GE[paint.type],\n ...(texture != null && { texture }),\n scaleMode: paint.scaleMode ?? 0,\n };\n }\n\n return undefined;\n}\n\nfunction colorToGE (color: IRColor): { r: number; g: number; b: number; a: number } {\n return {\n r: roundNumber(color[0], 4),\n g: roundNumber(color[1], 4),\n b: roundNumber(color[2], 4),\n a: roundNumber(color[3], 4),\n };\n}\n\nfunction vec2ToGE (\n value: [number, number] | undefined,\n ratio: number,\n): { x: number; y: number } {\n return {\n x: roundNumber((value?.[0] ?? 0) * ratio, 4),\n y: roundNumber(-(value?.[1] ?? 0) * ratio, 4),\n };\n}\n\nfunction mapCustomPaths (paths: IRCustomShapePath[], ratio: number): Record<string, unknown> {\n const points: Array<{ x: number; y: number }> = [];\n const easingIns: Array<{ x: number; y: number }> = [];\n const easingOuts: Array<{ x: number; y: number }> = [];\n const shapes: Array<{\n close: boolean;\n indexes: Array<{ point: number; easingIn: number; easingOut: number }>;\n }> = [];\n\n for (const path of paths) {\n const indexes: Array<{ point: number; easingIn: number; easingOut: number }> = [];\n\n for (let index = 0; index < path.points.length; index++) {\n const point = path.points[index];\n const easingIn = path.easingIns[index];\n const easingOut = path.easingOuts[index];\n const pointIndex = points.length;\n\n points.push({\n x: roundNumber(point.x * ratio, 4),\n y: roundNumber(-point.y * ratio, 4),\n });\n easingIns.push({\n x: roundNumber((easingIn?.x ?? 0) * ratio, 4),\n y: roundNumber(-(easingIn?.y ?? 0) * ratio, 4),\n });\n easingOuts.push({\n x: roundNumber((easingOut?.x ?? 0) * ratio, 4),\n y: roundNumber(-(easingOut?.y ?? 0) * ratio, 4),\n });\n indexes.push({ point: pointIndex, easingIn: pointIndex, easingOut: pointIndex });\n }\n\n shapes.push({ close: path.close, indexes });\n }\n\n return { points, easingIns, easingOuts, shapes };\n}\n\nfunction setScaledNumber (\n options: Record<string, unknown>,\n shapeData: IRShapeData,\n key: keyof Pick<IRShapeData, 'xRadius' | 'yRadius' | 'width' | 'height' | 'innerRadius' | 'outerRadius' | 'radius'>,\n ratio: number,\n): void {\n const value = shapeData[key];\n\n if (typeof value === 'number') {\n options[key] = roundNumber(value * ratio, 4);\n }\n}\n\nfunction setRawNumber (\n options: Record<string, unknown>,\n shapeData: IRShapeData,\n key: keyof Pick<IRShapeData, 'roundness' | 'pointCount' | 'innerRoundness' | 'outerRoundness'>,\n): void {\n const value = shapeData[key];\n\n if (typeof value === 'number') {\n options[key] = value;\n }\n}\n","import type { IRComposition, IRLayerNode } from '@vvfx/animation-ir';\nimport {\n computeAnchorInfo,\n getStaticAnchor,\n} from './layer-utils';\nimport { getLayerDisplaySize } from './layer-dimensions';\n\n/**\n * How the generator should handle a layer's anchor offset.\n *\n * - `inline-anchor` — emit one VFX item with `renderer.anchor` baked into the\n * GE renderer and `anchorOffset` shifted into `transform.position`. Centered\n * layers also use this kind with `anchorScale = [0.5, 0.5]` and\n * `anchorOffset = [0, 0]`.\n * - `split-null-sprite` — emit a null+sprite hierarchy so the transform pivot\n * sits at the anchor; the sprite carries the visual content and is parented\n * to the null with an anchor-relative position.\n *\n * The split decision is read from `IRLayerNode.transformSplit` when set by the\n * producer; for lottie IR without that flag the accessor falls back to\n * runtime geometry checks (rotation/scale animation + off-center anchor).\n */\nexport type AnchorStrategy =\n | {\n kind: 'inline-anchor';\n anchorScale: [number, number];\n anchorOffset: [number, number];\n }\n | { kind: 'split-null-sprite' };\n\nexport function getStaticAnchorBehavior (\n ir: IRComposition,\n layer: IRLayerNode,\n): AnchorStrategy {\n if (layer.transformSplit === true) {\n return { kind: 'split-null-sprite' };\n }\n\n // B-class real semantic difference — kept as source branch because pre-baking\n // anchorScale/anchorOffset into the IR would require pulling computeAnchorInfo's\n // full input set (text anchorAdjust, static-rotation anchor rotation, display\n // size fallback) into the producer, at high cost with no readability benefit.\n // The split gate itself is already pre-baked via `transformSplit` above.\n //\n // ge source shares the lottie inline-anchor math: ge2ir reverses GE's\n // `renderer.anchor` into IRLayerNode.transform.anchor (px) + displaySize, so\n // computeAnchorInfo reproduces the exact anchorScale/anchorOffset that GE had.\n // Without this, ge layers fall through to the centered [0.5,0.5] default and\n // their authored anchor (e.g. a top-anchored sweep) is lost on round-trip.\n // ge never reaches the lottieNeedsTransformSplit geometry check — its split\n // decision is pre-baked via `transformSplit` by the ge2ir null+sprite merger.\n if (ir.source === 'lottie' || ir.source === 'ge') {\n if (ir.source === 'lottie' && lottieNeedsTransformSplit(layer)) {\n return { kind: 'split-null-sprite' };\n }\n // The inline-anchor math needs non-zero dimensions to avoid divide-by-zero\n // in `computeAnchorInfo`; substitute the legacy {1, 1} fallback at the call site\n // so the field-level default stays neutral.\n const { width, height } = getLayerDisplaySize(layer);\n const info = computeAnchorInfo(layer, width, height);\n\n return {\n kind: 'inline-anchor',\n anchorScale: [info.anchorScaleX, info.anchorScaleY],\n anchorOffset: [info.anchorOffsetX, info.anchorOffsetY],\n };\n }\n\n // dsl layers with off-center anchor have `transformSplit = true` set by the\n // producer, caught by the guard at the top. Any layer reaching here is\n // centered — return the default inline-anchor.\n return { kind: 'inline-anchor', anchorScale: [0.5, 0.5], anchorOffset: [0, 0] };\n}\n\nfunction lottieNeedsTransformSplit (layer: IRLayerNode): boolean {\n if (layer.type !== 'image' && layer.type !== 'solid') {\n return false;\n }\n // Without a producer-baked displaySize we cannot decide off-center;\n // fall through to inline-anchor (matches the pre-displaySize behavior\n // where missing dimensions returned the {1, 1} default and never split).\n const size = layer.displaySize;\n\n if (size == null) {\n return false;\n }\n const { width, height } = size;\n\n if (width <= 0 || height <= 0) {\n return false;\n }\n const anchor = getStaticAnchor(layer);\n const anchorOffCenter = Math.abs(anchor[0] - width / 2) > 0.5 || Math.abs(anchor[1] - height / 2) > 0.5;\n\n if (!anchorOffCenter) {\n return false;\n }\n const transform = layer.transform;\n const sep = transform?.separatedRotation;\n const hasRotationAnim = transform?.rotation?.keyframed === true\n || sep?.x?.keyframed === true\n || sep?.y?.keyframed === true\n || sep?.z?.keyframed === true;\n const hasScaleAnim = transform?.scale?.keyframed === true;\n\n return hasRotationAnim || hasScaleAnim;\n}\n","import type { IRLayerNode } from '@vvfx/animation-ir';\nimport { roundNumber, createId, toDataPath } from '../utils';\nimport { buildTimelineTracks } from './timeline';\nimport { buildColorAnimation, buildTransformAnimation } from './animation';\nimport { applyGeMask, buildComponent, buildShapeOptions } from './component';\nimport { buildGETransform, getGEItemType, getGEItemTypeCode, mapBlendingMode } from './effects';\nimport { applyScalePositionAdjust, computeAnchorInfo, computeLayerTiming, computeStaticPosition, getStaticAnchor } from '../ir/layer-utils';\nimport { getLayerDisplaySize } from '../ir/layer-dimensions';\nimport { getStaticAnchorBehavior } from '../ir/anchor-strategy';\nimport type { GEItem, LayerProcessingContext, TransformAnimation } from '../types';\n\nexport function processNullLayer (layer: IRLayerNode, ctx: LayerProcessingContext): void {\n const itemId = createId();\n const layerIndex = layer.index;\n\n ctx.layerToItemId[layerIndex] = itemId;\n\n const { delay, layerDuration } = computeLayerTiming(layer, ctx.frameRate);\n const animation = buildTransformAnimation(layer, ctx);\n const position = computeStaticPosition(layer, ctx);\n\n const objectBindingTrackId = buildTimelineTracks(\n ctx.collector, delay, layerDuration, 4, animation, 'null',\n );\n\n const item: GEItem = {\n id: itemId,\n dataType: 'VFXItemData',\n name: layer.name,\n duration: layerDuration,\n type: '3',\n visible: layer.visibility.enabled && !layer.visibility.hidden,\n endBehavior: 4,\n delay,\n renderLevel: 'B+',\n content: { options: { startColor: [1, 1, 1, 1] } },\n components: [],\n transform: buildGETransform(position, [0, 0, 0], [1, 1, 1]),\n };\n\n ctx.collector.items.push(item);\n ctx.processedItems.push({ itemId, objectBindingTrackId, layerIndex });\n}\n\n/**\n * Emit a null+sprite pair: the null carries the layer transform and sits at\n * the layer's logical position; the sprite/text child carries the visual\n * content offset by the anchor so the pivot is at the right point.\n *\n * Used by both `processParentLayer` (layers referenced as `parent` by others)\n * and `processTransformSplitLayer` (layers with `transformSplit=true`). The\n * only knob is `childScale` — parent-layer callers pass a text-aware scale\n * while transformSplit always uses `[1, 1, 1]`.\n */\nfunction emitNullSpritePair (\n layer: IRLayerNode,\n ctx: LayerProcessingContext,\n childScale: [number, number, number],\n): void {\n const layerIndex = layer.index;\n const { delay, layerDuration } = computeLayerTiming(layer, ctx.frameRate);\n const { width: layerWidth, height: layerHeight } = getLayerDisplaySize(layer);\n\n const nullItemId = createId();\n\n ctx.layerToItemId[layerIndex] = nullItemId;\n\n const nullAnimation = buildTransformAnimation(layer, ctx);\n const nullPosition = computeStaticPosition(layer, ctx);\n\n const nullTrackId = buildTimelineTracks(\n ctx.collector, delay, layerDuration, 4, nullAnimation, 'null',\n );\n\n const nullItem: GEItem = {\n id: nullItemId,\n dataType: 'VFXItemData',\n name: layer.name,\n duration: layerDuration,\n type: '3',\n visible: true,\n endBehavior: 4,\n delay,\n renderLevel: 'B+',\n content: { options: { startColor: [1, 1, 1, 1] } },\n components: [],\n transform: buildGETransform(nullPosition, [0, 0, 0], [1, 1, 1]),\n };\n\n ctx.collector.items.push(nullItem);\n ctx.processedItems.push({ itemId: nullItemId, objectBindingTrackId: nullTrackId, layerIndex });\n\n const childItemId = createId();\n\n const anchor = getStaticAnchor(layer);\n const childPosition: [number, number, number] = [\n -ctx.ratio * (anchor[0] - layerWidth / 2),\n ctx.ratio * (anchor[1] - layerHeight / 2),\n 0,\n ];\n\n const childColorAnim = buildColorAnimation(layer, ctx.ir);\n const childTrackId = buildTimelineTracks(\n ctx.collector, delay, layerDuration, 0,\n { colorOverLifetime: childColorAnim }, getGEItemType(layer.type),\n );\n\n const componentId = buildComponent(layer, childItemId, 0.5, 0.5, ctx);\n\n if (componentId != null) {\n ctx.layerToComponentId[layerIndex] = componentId;\n }\n\n const scaledW = roundNumber(ctx.ratio * layerWidth, 4);\n const scaledH = roundNumber(ctx.ratio * layerHeight, 4);\n\n const childItem: GEItem = {\n id: childItemId,\n dataType: 'VFXItemData',\n name: layer.name,\n duration: layerDuration,\n type: getGEItemTypeCode(layer.type),\n visible: layer.visibility.enabled && !layer.visibility.hidden,\n endBehavior: 0,\n delay,\n renderLevel: 'B+',\n components: componentId != null ? [toDataPath(componentId)] : [],\n transform: {\n ...buildGETransform(childPosition, [0, 0, 0], childScale),\n anchor: { x: 0, y: 0 },\n size: { x: scaledW, y: scaledH },\n },\n parentId: nullItemId,\n };\n\n ctx.collector.items.push(childItem);\n ctx.processedItems.push({ itemId: childItemId, objectBindingTrackId: childTrackId, layerIndex });\n}\n\nexport function processParentLayer (layer: IRLayerNode, ctx: LayerProcessingContext): void {\n const { width: layerWidth, height: layerHeight } = getLayerDisplaySize(layer);\n const scaledW = roundNumber(ctx.ratio * layerWidth, 4);\n const scaledH = roundNumber(ctx.ratio * layerHeight, 4);\n const childScale: [number, number, number] = layer.type === 'text'\n ? [scaledW, scaledH, 1]\n : [1, 1, 1];\n\n emitNullSpritePair(layer, ctx, childScale);\n}\n\nexport function processVisualLayer (layer: IRLayerNode, ctx: LayerProcessingContext): void {\n if (layer.type === 'shape' && layer.shapes != null && layer.shapes.length > 0) {\n processShapeLayerMultiItem(layer, ctx);\n\n return;\n }\n\n const strategy = getStaticAnchorBehavior(ctx.ir, layer);\n\n if (strategy.kind === 'split-null-sprite') {\n processTransformSplitLayer(layer, ctx);\n\n return;\n }\n\n const itemId = createId();\n const layerIndex = layer.index;\n\n ctx.layerToItemId[layerIndex] = itemId;\n\n const { delay, layerDuration } = computeLayerTiming(layer, ctx.frameRate);\n const { width: layerWidth, height: layerHeight } = getLayerDisplaySize(layer);\n const scaledW = ctx.ratio * layerWidth;\n const scaledH = ctx.ratio * layerHeight;\n\n const [anchorScaleX, anchorScaleY] = strategy.anchorScale;\n const [anchorOffsetX, anchorOffsetY] = strategy.anchorOffset;\n const animation = buildTransformAnimation(layer, ctx);\n const colorAnimation = buildColorAnimation(layer, ctx.ir);\n const fullAnimation: TransformAnimation = {\n ...animation,\n colorOverLifetime: colorAnimation,\n };\n\n const rawPosition = computeStaticPosition(layer, ctx, anchorOffsetX, anchorOffsetY);\n const position = applyScalePositionAdjust(rawPosition, layer, layerWidth, layerHeight, ctx.ratio);\n\n const itemType = getGEItemType(layer.type);\n const objectBindingTrackId = buildTimelineTracks(\n ctx.collector, delay, layerDuration, 0, fullAnimation, itemType,\n );\n\n const componentId = buildComponent(layer, itemId, anchorScaleX, anchorScaleY, ctx);\n\n if (componentId != null) {\n ctx.layerToComponentId[layerIndex] = componentId;\n }\n\n // GE 2.x TextComponent.updateTexture overwrites transform.size to\n // (textWidth × 0.0123, textHeight × 0.0123) regardless of what we emit,\n // so the only knob left to control on-screen size is transform.scale.\n // Pre-bake it so version36Migration's scaleFactor = (preScale / textWidth) / 0.0123\n // resolves to ctx.ratio / 0.0123 — the correct ratio for this composition.\n const itemScale: [number, number, number] = layer.type === 'text'\n ? [scaledW, scaledH, 1]\n : [1, 1, 1];\n\n const item: GEItem = {\n id: itemId,\n dataType: 'VFXItemData',\n name: layer.name,\n duration: layerDuration,\n type: getGEItemTypeCode(layer.type),\n visible: layer.visibility.enabled && !layer.visibility.hidden,\n endBehavior: 0,\n delay,\n renderLevel: 'B+',\n components: componentId != null ? [toDataPath(componentId)] : [],\n transform: {\n ...buildGETransform(position, [0, 0, 0], itemScale),\n anchor: { x: 0, y: 0 },\n size: { x: roundNumber(scaledW, 4), y: roundNumber(scaledH, 4) },\n },\n };\n\n ctx.collector.items.push(item);\n ctx.processedItems.push({ itemId, objectBindingTrackId, layerIndex });\n}\n\nfunction processTransformSplitLayer (layer: IRLayerNode, ctx: LayerProcessingContext): void {\n emitNullSpritePair(layer, ctx, [1, 1, 1]);\n}\n\nfunction processShapeLayerMultiItem (layer: IRLayerNode, ctx: LayerProcessingContext): void {\n const layerIndex = layer.index;\n const { delay, layerDuration } = computeLayerTiming(layer, ctx.frameRate);\n const { width: layerWidth, height: layerHeight } = getLayerDisplaySize(layer);\n const anchor = getStaticAnchor(layer);\n const { anchorOffsetX, anchorOffsetY } = computeAnchorInfo(layer, layerWidth, layerHeight);\n const animation = buildTransformAnimation(layer, ctx);\n const colorAnimation = buildColorAnimation(layer, ctx.ir);\n const fullAnimation: TransformAnimation = { ...animation, colorOverLifetime: colorAnimation };\n const basePosition = computeStaticPosition(layer, ctx, anchorOffsetX, anchorOffsetY);\n const blending = mapBlendingMode(layer.blendMode);\n\n for (let shapeIdx = 0; shapeIdx < layer.shapes!.length; shapeIdx++) {\n const shapeData = layer.shapes![shapeIdx];\n const shapeItemId = createId();\n\n if (shapeIdx === 0) {\n ctx.layerToItemId[layerIndex] = shapeItemId;\n }\n\n const shapeOffsetX = ctx.ratio * (shapeData.position[0] - anchor[0]);\n const shapeOffsetY = -ctx.ratio * (shapeData.position[1] - anchor[1]);\n const shapePosition: [number, number, number] = [\n basePosition[0] + shapeOffsetX,\n basePosition[1] + shapeOffsetY,\n basePosition[2],\n ];\n\n const shapeComponentId = createId();\n\n const component: Record<string, unknown> = {\n id: shapeComponentId,\n dataType: 'ShapeComponent',\n item: toDataPath(shapeItemId),\n ...buildShapeOptions(shapeData, ctx.ratio, ctx),\n renderer: {\n renderMode: 1,\n ...(blending !== undefined && { blending }),\n },\n };\n\n // Mask source shape (isMask:true) — copy onto the first shape item only.\n if (shapeIdx === 0) {\n applyGeMask(ctx.ir, layer, component);\n }\n\n ctx.collector.components.push(component);\n if (shapeIdx === 0) {\n ctx.layerToComponentId[layerIndex] = shapeComponentId;\n }\n\n const objectBindingTrackId = buildTimelineTracks(\n ctx.collector, delay, layerDuration, 0, fullAnimation, 'shape',\n );\n\n const shapeItem: GEItem = {\n id: shapeItemId,\n dataType: 'VFXItemData',\n name: shapeIdx === 0 ? layer.name : `${layer.name}_shape_${shapeIdx}`,\n duration: layerDuration,\n type: 'shape',\n visible: layer.visibility.enabled && !layer.visibility.hidden,\n endBehavior: 0,\n delay,\n renderLevel: 'B+',\n components: [toDataPath(shapeComponentId)],\n transform: {\n ...buildGETransform(shapePosition, [0, 0, 0], [1, 1, 1]),\n anchor: { x: 0, y: 0 },\n },\n };\n\n ctx.collector.items.push(shapeItem);\n ctx.processedItems.push({ itemId: shapeItemId, objectBindingTrackId, layerIndex });\n }\n}\n","import { IREndBehavior, type IRComposition, type IRColor } from '@vvfx/animation-ir';\nimport { type DataPath, type JSONScene, JSONSceneVersion } from '@galacean/effects-specification';\nimport { DEFAULT_CLIP_MODE, DEFAULT_CAMERA_FOV, DEFAULT_CAMERA_Z } from '../../shared/coordinate';\nimport { roundNumber, createId, toDataPath } from '../utils';\nimport type { ECSCollector, ProcessedItem } from '../types';\n\nconst DEFAULT_PLAYER_VERSION = {\n web: '2.8.9',\n native: '0.0.1.202311221223',\n};\n\n/**\n * Assemble the top-level GE JSONScene wrapper from a populated collector.\n *\n * Reads composition-level properties (`name`, `width`/`height`, `endBehavior`,\n * `backgroundColor`) directly from the IR. The optional `duration` arg is a\n * caller override — when omitted, derived from `(outPoint - inPoint) / frameRate`.\n */\nexport function assembleScene (\n ir: IRComposition,\n collector: ECSCollector,\n processedItems: ProcessedItem[],\n duration?: number,\n): JSONScene {\n const finalDuration = duration ?? deriveDuration(ir);\n const timelineAssetId = createId();\n const objectBindingTrackRefs: DataPath[] = processedItems.map(pi => toDataPath(pi.objectBindingTrackId));\n\n collector.miscs.push({\n id: timelineAssetId,\n dataType: 'TimelineAsset',\n tracks: objectBindingTrackRefs,\n });\n\n const compositionComponentId = createId();\n const compositionId = createId();\n const sceneBindings = processedItems.map(pi => ({\n key: toDataPath(pi.objectBindingTrackId),\n value: toDataPath(pi.itemId),\n }));\n const allItemRefs: DataPath[] = processedItems.map(pi => toDataPath(pi.itemId));\n\n collector.components.push({\n id: compositionComponentId,\n dataType: 'CompositionComponent',\n item: toDataPath(compositionId),\n items: allItemRefs,\n timelineAsset: toDataPath(timelineAssetId),\n sceneBindings,\n });\n\n const composition: Record<string, unknown> = {\n id: compositionId,\n name: ir.name,\n duration: finalDuration,\n startTime: 0,\n endBehavior: mapCompositionEndBehavior(ir.endBehavior),\n previewSize: [ir.width, ir.height],\n camera: {\n fov: DEFAULT_CAMERA_FOV,\n far: 40,\n near: 0.1,\n clipMode: DEFAULT_CLIP_MODE,\n position: [0, 0, DEFAULT_CAMERA_Z],\n rotation: [0, 0, 0],\n },\n components: [toDataPath(compositionComponentId)],\n };\n\n if (ir.backgroundColor != null) {\n composition['background'] = { color: colorToRoundedRgba(ir.backgroundColor) };\n }\n\n return {\n version: JSONSceneVersion['3_6'],\n playerVersion: DEFAULT_PLAYER_VERSION,\n images: collector.images,\n fonts: [],\n plugins: [],\n type: 'ge',\n compositionId,\n compositions: [composition],\n components: collector.components,\n geometries: [],\n materials: [],\n items: collector.items as unknown as Record<string, unknown>[],\n shaders: [],\n bins: [],\n textures: collector.textures,\n animations: [],\n miscs: collector.miscs,\n } as unknown as JSONScene;\n}\n\nfunction deriveDuration (ir: IRComposition): number {\n return ir.frameRate > 0 ? (ir.outPoint - ir.inPoint) / ir.frameRate : 0;\n}\n\n/**\n * Map IR composition end behavior to GE's numeric end-behavior.\n * Lottie IR currently leaves this unset; treat undefined as Loop (5) so the\n * legacy lottie behavior is preserved. dsl2ge writes either Loop or Stop.\n */\nfunction mapCompositionEndBehavior (eb: IREndBehavior | undefined): number {\n if (eb == null || eb === IREndBehavior.Loop) {\n return 5;\n }\n if (eb === IREndBehavior.Hold) {\n return 4;\n }\n\n return 0;\n}\n\nfunction colorToRoundedRgba (color: IRColor): number[] {\n return [\n roundNumber(color[0]),\n roundNumber(color[1]),\n roundNumber(color[2]),\n roundNumber(color[3], 4),\n ];\n}\n","import type { IRLayerNode } from '@vvfx/animation-ir';\nimport { getStaticAnchor } from '../ir/layer-utils';\nimport type { GEItem } from '../types';\n\nexport function applyParenting (\n layers: IRLayerNode[],\n items: GEItem[],\n layerToItemId: Record<number, string>,\n ratio: number,\n width: number,\n height: number,\n): void {\n const layerByIndex = new Map<number, IRLayerNode>();\n\n for (const layer of layers) {\n layerByIndex.set(layer.index, layer);\n }\n\n const itemById = new Map<string, GEItem>();\n\n for (const item of items) {\n itemById.set(item.id, item);\n }\n\n for (const layer of layers) {\n if (layer.parent == null) {\n continue;\n }\n\n const childItemId = layerToItemId[layer.index];\n const parentLayer = layerByIndex.get(layer.parent.index);\n\n if (parentLayer == null || childItemId == null) {\n continue;\n }\n\n const parentItemId = layerToItemId[parentLayer.index];\n\n if (parentItemId == null) {\n continue;\n }\n\n const childItem = itemById.get(childItemId);\n\n if (childItem == null) {\n continue;\n }\n\n childItem.parentId = parentItemId;\n\n const parentAnchor = getStaticAnchor(parentLayer);\n const adjustX = -ratio * (parentAnchor[0] - width / 2);\n const adjustY = ratio * (parentAnchor[1] - height / 2);\n\n childItem.transform.position.x += adjustX;\n childItem.transform.position.y += adjustY;\n }\n}\n","/**\n * Mask post-process: emits a mask shape item + component for each layer that\n * carries `IRMaskData`, propagating the mask reference to the layer's renderer\n * component or — for parent layers — to descendant renderers.\n *\n * The decision to emit (per-layer) is gated solely on `layer.mask != null`,\n * so any IR producer can opt in by writing the field. Currently only lottie\n * IR has masks; dsl IR leaves `mask` undefined and this module no-ops for it.\n *\n * The lookup callbacks let each pipeline plug in its own layer-to-emitted-id\n * mapping — lottie keeps `layerToItemId`/`layerToComponentId`/`parentIndexSet`\n * during emission, dsl tracks differently. Mask handling stays generic.\n */\nimport type { IRComposition, IRCustomShapePath, IRLayerNode, IRMaskData } from '@vvfx/animation-ir';\nimport { roundNumber, createId, toDataPath } from '../utils';\nimport { buildTimelineTracks } from '../builders/timeline';\nimport { computeLayerTiming } from '../builders/timing';\nimport { getStaticAnchor } from '../ir/layer-utils';\nimport type { ECSCollector, GEItem, ProcessedItem } from '../types';\n\n/**\n * Pipeline-specific lookups consumed during mask emission. A pipeline that\n * never produces masks can pass stub callbacks (the iterator skips layers\n * without `mask`, so the callbacks are never invoked in that case).\n */\nexport interface MaskLayerLookup {\n getItemId(layerIndex: number): string | undefined;\n getComponentId(layerIndex: number): string | undefined;\n isParentLayer(layerIndex: number): boolean;\n}\n\n/**\n * Per-component bookkeeping for whichever mask currently occupies a renderer\n * component's single mask slot. Used only to arbitrate propagation; kept out of\n * the emitted ref so GE-irrelevant hints never reach the scene JSON.\n */\ntype MaskSlotMeta = Map<string, { isAutoMask: boolean; area: number }>;\n\nexport function applyMasks (\n ir: IRComposition,\n collector: ECSCollector,\n processedItems: ProcessedItem[],\n ratio: number,\n width: number,\n height: number,\n frameRate: number,\n lookup: MaskLayerLookup,\n): void {\n const layers = ir.layers;\n const maskSlotMeta: MaskSlotMeta = new Map();\n\n const componentById = new Map<string, Record<string, unknown>>();\n\n for (const comp of collector.components) {\n componentById.set(comp['id'] as string, comp);\n }\n\n for (let i = layers.length - 1; i >= 0; i--) {\n const layer = layers[i];\n const maskData = layer.mask;\n\n if (maskData == null) {\n continue;\n }\n\n if (isMaskExactCrop(maskData, layer, width, height, lookup)) {\n continue;\n }\n\n const layerItemId = lookup.getItemId(layer.index);\n\n if (layerItemId == null) {\n continue;\n }\n\n const layerComponentId = lookup.getComponentId(layer.index);\n\n buildMaskForLayer(layer, layerItemId, layerComponentId, collector, processedItems, ratio, width, height, frameRate, lookup, maskSlotMeta, componentById, maskData);\n }\n}\n\nfunction getPrimaryPath (mask: IRMaskData): IRCustomShapePath | undefined {\n return mask.paths[0];\n}\n\nfunction buildMaskForLayer (\n layer: IRLayerNode,\n layerItemId: string,\n layerComponentId: string | undefined,\n collector: ECSCollector,\n processedItems: ProcessedItem[],\n ratio: number,\n width: number,\n height: number,\n frameRate: number,\n lookup: MaskLayerLookup,\n maskSlotMeta: MaskSlotMeta,\n componentById: Map<string, Record<string, unknown>>,\n maskData?: IRMaskData,\n): void {\n const mask = maskData ?? layer.mask!;\n const maskItemId = createId();\n const maskComponentId = createId();\n const maskBounds = getMaskBounds(mask);\n\n const [anchorX, anchorY] = getStaticAnchor(layer);\n const maskPosX = roundNumber((maskBounds.cx - anchorX) * ratio, 4);\n const maskPosY = roundNumber(-(maskBounds.cy - anchorY) * ratio, 4);\n\n const timing = computeLayerTiming(layer, frameRate);\n const delay = timing.delay;\n const maskDuration = timing.layerDuration;\n\n const layerIsParent = lookup.isParentLayer(layer.index)\n || layer.type === 'null'\n || layer.type === 'precomp';\n\n const isAutoMask = mask.isAutoMask === true;\n const maskArea = maskBounds.width * maskBounds.height;\n\n if (layerIsParent) {\n const hasDescendants = hasClaimableRendererDescendants(\n collector.items, componentById, layerItemId, isAutoMask, maskArea, maskSlotMeta,\n );\n\n if (!hasDescendants) {\n return;\n }\n }\n\n const maskItem: GEItem = {\n id: maskItemId,\n dataType: 'VFXItemData',\n name: `${layer.name}_mask`,\n duration: maskDuration,\n type: 'shape',\n visible: true,\n endBehavior: 0,\n delay: roundNumber(delay, 4),\n renderLevel: 'B+',\n components: [toDataPath(maskComponentId)],\n transform: {\n position: { x: maskPosX, y: maskPosY, z: 0 },\n eulerHint: { x: 0, y: 0, z: 0 },\n anchor: { x: 0, y: 0 },\n scale: { x: 1, y: 1, z: 1 },\n },\n parentId: layerItemId,\n };\n\n const maskComponent: Record<string, unknown> = isSimpleRectMask(mask)\n ? {\n id: maskComponentId,\n item: toDataPath(maskItemId),\n type: 1,\n dataType: 'ShapeComponent',\n width: roundNumber(maskBounds.width * ratio, 4),\n height: roundNumber(maskBounds.height * ratio, 4),\n roundness: 0,\n fills: [{ type: 0, color: { r: 1, g: 1, b: 1, a: 0 } }],\n strokes: [],\n strokeWidth: 0,\n strokeCap: 0,\n strokeJoin: 0,\n renderer: { renderMode: 1 },\n mask: { isMask: true, alphaMaskEnabled: false },\n }\n : buildPolygonMaskComponent(maskComponentId, maskItemId, mask, maskBounds, ratio);\n\n collector.items.push(maskItem);\n collector.components.push(maskComponent);\n componentById.set(maskComponentId, maskComponent);\n\n if (layerIsParent) {\n applyMaskReferenceToDescendants(collector.items, componentById, layerItemId, maskComponentId, isAutoMask, maskArea, maskSlotMeta);\n } else if (layerComponentId != null) {\n const targetComponent = componentById.get(layerComponentId);\n\n if (targetComponent != null) {\n targetComponent['mask'] = buildMaskRef(maskComponentId);\n maskSlotMeta.set(layerComponentId, { isAutoMask, area: maskArea });\n }\n }\n\n const maskTrackId = buildTimelineTracks(\n collector, delay, maskDuration, 0, {}, 'shape',\n );\n\n processedItems.push({ itemId: maskItemId, objectBindingTrackId: maskTrackId, layerIndex: -1 });\n}\n\nfunction buildMaskRef (maskComponentId: string): Record<string, unknown> {\n return {\n isMask: false,\n reference: toDataPath(maskComponentId),\n inverted: false,\n };\n}\n\nfunction applyMaskReferenceToDescendants (\n items: GEItem[],\n componentById: Map<string, Record<string, unknown>>,\n parentItemId: string,\n maskComponentId: string,\n isAutoMask: boolean,\n maskArea: number,\n maskSlotMeta: MaskSlotMeta,\n): void {\n function visit (targetParentId: string): void {\n for (const item of items) {\n if (item.parentId !== targetParentId) {\n continue;\n }\n\n if (item.type === 'shape' && item.name.endsWith('_mask')) {\n continue;\n }\n\n const componentRefs = item.components;\n\n if (componentRefs != null && componentRefs.length > 0) {\n const compRef = componentRefs[0];\n const component = componentById.get(compRef.id);\n\n if (component != null && component['renderer'] != null\n && shouldClaimMaskSlot(component['mask'] != null, maskSlotMeta.get(compRef.id), isAutoMask, maskArea)) {\n component['mask'] = buildMaskRef(maskComponentId);\n maskSlotMeta.set(compRef.id, { isAutoMask, area: maskArea });\n }\n }\n\n visit(item.id);\n }\n }\n\n visit(parentItemId);\n}\n\n/**\n * Decide whether a propagating mask should take a renderer component's single\n * mask slot. Preserves the original arbitration: an empty slot is always taken;\n * an authored mask is never displaced; an auto mask yields to an authored mask\n * or to a tighter (smaller-area) auto mask.\n */\nfunction shouldClaimMaskSlot (\n hasExistingMask: boolean,\n existing: { isAutoMask: boolean; area: number } | undefined,\n isAutoMask: boolean,\n maskArea: number,\n): boolean {\n if (!hasExistingMask) {\n return true;\n }\n\n if (existing?.isAutoMask !== true) {\n return false;\n }\n\n if (!isAutoMask) {\n return true;\n }\n\n return maskArea < existing.area;\n}\n\nfunction hasClaimableRendererDescendants (\n items: GEItem[],\n componentById: Map<string, Record<string, unknown>>,\n parentItemId: string,\n isCurrentAutoMask: boolean,\n currentMaskArea: number,\n maskSlotMeta: MaskSlotMeta,\n): boolean {\n function visit (targetParentId: string): boolean {\n for (const item of items) {\n if (item.parentId !== targetParentId) {\n continue;\n }\n\n const componentRefs = item.components;\n\n if (componentRefs != null && componentRefs.length > 0) {\n const compRef = componentRefs[0];\n const component = componentById.get(compRef.id);\n\n if (component != null && component['renderer'] != null\n && shouldClaimMaskSlot(component['mask'] != null, maskSlotMeta.get(compRef.id), isCurrentAutoMask, currentMaskArea)) {\n return true;\n }\n }\n\n if (visit(item.id)) {\n return true;\n }\n }\n\n return false;\n }\n\n return visit(parentItemId);\n}\n\nfunction computePointBounds (points: Array<{ x: number; y: number }>): { minX: number; minY: number; maxX: number; maxY: number } {\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n\n for (const point of points) {\n minX = Math.min(minX, point.x);\n minY = Math.min(minY, point.y);\n maxX = Math.max(maxX, point.x);\n maxY = Math.max(maxY, point.y);\n }\n\n return { minX, minY, maxX, maxY };\n}\n\nfunction isMaskExactCrop (mask: IRMaskData, layer: IRLayerNode, width: number, height: number, lookup: MaskLayerLookup): boolean {\n const path = getPrimaryPath(mask);\n\n if (path == null || path.points.length === 0) {\n return true;\n }\n\n const { minX, minY, maxX, maxY } = computePointBounds(path.points);\n\n const maskW = maxX - minX;\n const maskH = maxY - minY;\n\n if (mask.isAutoMask === true) {\n if (Math.abs(maskW - width) < 1 && Math.abs(maskH - height) < 1) {\n return true;\n }\n }\n\n const layerIsParent = lookup.isParentLayer(layer.index)\n || layer.type === 'null'\n || layer.type === 'precomp';\n\n if (mask.isAutoMask !== true && layerIsParent && isSimpleRectMask(mask)) {\n const precompW = layer.asset?.width;\n const precompH = layer.asset?.height;\n\n if (precompW != null && precompH != null && precompW > 0 && precompH > 0) {\n if (minX <= 0 && minY <= 0 && maxX >= precompW && maxY >= precompH) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nfunction getMaskBounds (mask: IRMaskData): { cx: number; cy: number; width: number; height: number } {\n const path = getPrimaryPath(mask);\n\n if (path == null || path.points.length === 0) {\n return { cx: 0, cy: 0, width: 0, height: 0 };\n }\n\n const { minX, minY, maxX, maxY } = computePointBounds(path.points);\n\n return {\n cx: (minX + maxX) / 2,\n cy: (minY + maxY) / 2,\n width: maxX - minX,\n height: maxY - minY,\n };\n}\n\nfunction isSimpleRectMask (mask: IRMaskData): boolean {\n const path = getPrimaryPath(mask);\n\n if (path == null) {\n return false;\n }\n\n return path.points.length === 4\n && path.easingIns.every(e => Math.abs(e.x) < 0.01 && Math.abs(e.y) < 0.01)\n && path.easingOuts.every(e => Math.abs(e.x) < 0.01 && Math.abs(e.y) < 0.01);\n}\n\nfunction buildPolygonMaskComponent (\n maskComponentId: string,\n maskItemId: string,\n mask: IRMaskData,\n bounds: { cx: number; cy: number; width: number; height: number },\n ratio: number,\n): Record<string, unknown> {\n const path = getPrimaryPath(mask);\n const customPoints: Array<{ x: number; y: number }> = [];\n const customEasingIns: Array<{ x: number; y: number }> = [];\n const customEasingOuts: Array<{ x: number; y: number }> = [];\n const customIndexes: Array<{ point: number; easingIn: number; easingOut: number }> = [];\n\n if (path != null) {\n for (let idx = 0; idx < path.points.length; idx++) {\n const pt = path.points[idx];\n const ei = path.easingIns[idx];\n const eo = path.easingOuts[idx];\n\n customPoints.push({\n x: roundNumber((pt.x - bounds.cx) * ratio, 4),\n y: roundNumber(-(pt.y - bounds.cy) * ratio, 4),\n });\n customEasingIns.push({\n x: roundNumber((ei?.x ?? 0) * ratio, 4),\n y: roundNumber(-(ei?.y ?? 0) * ratio, 4),\n });\n customEasingOuts.push({\n x: roundNumber((eo?.x ?? 0) * ratio, 4),\n y: roundNumber(-(eo?.y ?? 0) * ratio, 4),\n });\n customIndexes.push({ point: idx, easingIn: idx, easingOut: idx });\n }\n }\n\n return {\n id: maskComponentId,\n item: toDataPath(maskItemId),\n type: 0,\n dataType: 'ShapeComponent',\n points: customPoints,\n easingIns: customEasingIns,\n easingOuts: customEasingOuts,\n shapes: [{ close: path?.close ?? true, indexes: customIndexes }],\n fills: [{ type: 0, color: { r: 1, g: 1, b: 1, a: 0 } }],\n strokes: [],\n strokeWidth: 0,\n strokeCap: 0,\n strokeJoin: 0,\n renderer: { renderMode: 1 },\n mask: { isMask: true, alphaMaskEnabled: false },\n };\n}\n","import { toDataPath } from '../utils';\nimport type { ECSCollector } from '../types';\n\n/**\n * Remap GE mask references after ge2ir round-trip.\n *\n * ge2ir carries each masked component's raw `mask` object verbatim (via\n * `IRLayerNode.metadata.ge2ir.geMask`), but `mask.reference.id` still points at the\n * ORIGINAL (GE1) mask-source component id, which ir2ge has regenerated. This\n * pass rewrites every target's `reference.id` from the stale GE1 id to the\n * freshly-minted GE2 component id, using the `geComponentId → newId` map built\n * during the layer walk.\n *\n * Mirrors `applyParenting`: an IR-side reference (here the stale id stored in\n * data) → map → regenerated id → written in place. Mask SOURCE components have\n * no `reference` and are skipped. Dangling references (source not regenerated —\n * e.g. dropped by the null+sprite merger) have their `mask` removed so the GE\n * runtime doesn't choke on an id that resolves to nothing.\n */\nexport function applyGeMaskRemap (\n collector: ECSCollector,\n geComponentIdToNewId: Record<string, string>,\n): void {\n for (const component of collector.components) {\n const mask = component['mask'] as Record<string, unknown> | undefined;\n\n if (mask == null) {\n continue;\n }\n\n const reference = mask['reference'] as { id?: string } | undefined;\n const oldId = reference?.id;\n\n if (oldId == null) {\n // Mask source (isMask:true) — no reference to remap.\n continue;\n }\n\n const newId = geComponentIdToNewId[oldId];\n\n if (newId == null) {\n // Dangling: the referenced source was not regenerated. Drop the mask so\n // the target renders unmasked rather than referencing a nonexistent id.\n delete component['mask'];\n\n continue;\n }\n\n mask['reference'] = toDataPath(newId);\n }\n}\n","import type { DataPath, TimelineClipData } from '@galacean/effects-specification';\n\ninterface ProcessedItemRef {\n itemId: string;\n objectBindingTrackId: string;\n}\n\ninterface NormalizeVisibilityParams {\n items: Record<string, unknown>[];\n miscs: Record<string, unknown>[];\n processedItems: ProcessedItemRef[];\n /** Item IDs whose parent-child relationship only inherits transform, not visibility. */\n transformOnlyParentLinkItemIds?: Set<string>;\n roundNumber: (value: number, precision: number) => number;\n}\n\n/**\n * Normalize child visibility delays so children never appear before their parent.\n *\n * Topologically sorts items (parent-first) so by the time we process any child\n * its parent's delay/duration are already finalized. For transform-only\n * parent-link children, we instead advance the parent's delay/duration so the\n * child can render from its own start time (GE requires the parent to be active\n * for transform inheritance, but the parent-link relationship does not propagate\n * visibility). Only the ActivationTrack clip is updated; TransformTrack\n * keyframes are normalized to the original time range and would hold their\n * first frame value if the track started earlier.\n */\nexport function normalizeChildVisibilityByParentDelays ({\n items,\n miscs,\n processedItems,\n transformOnlyParentLinkItemIds = new Set<string>(),\n roundNumber,\n}: NormalizeVisibilityParams): void {\n const itemById = new Map<string, Record<string, unknown>>();\n\n for (const item of items) {\n itemById.set(item['id'] as string, item);\n }\n\n const processedByItemId = new Map<string, ProcessedItemRef>();\n\n for (const pi of processedItems) {\n processedByItemId.set(pi.itemId, pi);\n }\n\n const miscById = new Map<string, Record<string, unknown>>();\n\n for (const misc of miscs) {\n miscById.set(misc['id'] as string, misc);\n }\n\n // Phase 1: Advance transform-only parent-link parents so their children can\n // render from the child's own start time.\n advanceTransformOnlyParentLinkParents(\n items,\n itemById,\n processedByItemId,\n miscById,\n transformOnlyParentLinkItemIds,\n roundNumber,\n );\n\n // Phase 2: Normalize precomp child visibility (unchanged).\n const effectiveDelayCache = new Map<string, number>();\n\n function getEffectiveDelay (itemId: string, visited = new Set<string>()): number {\n if (effectiveDelayCache.has(itemId)) {\n return effectiveDelayCache.get(itemId) as number;\n }\n if (visited.has(itemId)) {\n return 0;\n }\n\n visited.add(itemId);\n\n const item = itemById.get(itemId);\n\n if (item == null) {\n return 0;\n }\n\n let delay = (item['delay'] as number) ?? 0;\n const parentId = item['parentId'] as string | undefined;\n\n if (parentId != null && parentId !== '') {\n delay = Math.max(delay, getEffectiveDelay(parentId, visited));\n }\n\n effectiveDelayCache.set(itemId, delay);\n\n return delay;\n }\n\n // Build topological order (parent-first) so that when processing any child,\n // its parent's delay/duration are already finalized.\n const sortedItems = topologicalSort(items, itemById);\n\n for (const item of sortedItems) {\n const itemId = item['id'] as string;\n const originalDelay = (item['delay'] as number) ?? 0;\n const originalDuration = (item['duration'] as number) ?? 0;\n const effectiveDelay = getEffectiveDelay(itemId);\n\n if (effectiveDelay <= originalDelay) {\n continue;\n }\n\n const parentId = item['parentId'] as string | undefined;\n const parentItem = (parentId != null && parentId !== '') ? itemById.get(parentId) : undefined;\n const parentDuration = parentItem ? ((parentItem['duration'] as number) ?? 0) : 0;\n\n // Distinguish time-contained children from global-time parent-link children:\n // Precomp children live entirely within the parent's time range (delay + duration <= parentDuration).\n // Parent-link children share the global time coordinate with their parent.\n const isPrecompChild = parentItem != null\n && (originalDelay + originalDuration) <= parentDuration + 0.001;\n\n let newDuration: number;\n\n if (isPrecompChild) {\n // Precomp child: keep duration unchanged (clamped to parent boundary).\n newDuration = Math.min(originalDuration, parentDuration - originalDelay);\n } else {\n // Parent-link child: trim the invisible portion before effectiveDelay.\n const timeDiff = effectiveDelay - originalDelay;\n\n newDuration = originalDuration - timeDiff;\n }\n\n if (newDuration <= 0) {\n newDuration = 0.0001;\n }\n\n item['delay'] = roundNumber(effectiveDelay, 4);\n item['duration'] = roundNumber(newDuration, 4);\n\n syncTimelineClips(itemId, effectiveDelay, newDuration, processedByItemId, miscById, roundNumber);\n }\n}\n\nfunction advanceTransformOnlyParentLinkParents (\n items: Record<string, unknown>[],\n itemById: Map<string, Record<string, unknown>>,\n processedByItemId: Map<string, ProcessedItemRef>,\n miscById: Map<string, Record<string, unknown>>,\n transformOnlyParentLinkItemIds: Set<string>,\n roundNumber: (value: number, precision: number) => number,\n): void {\n if (transformOnlyParentLinkItemIds.size === 0) {\n return;\n }\n\n // Collect the maximum advance (head) and extension (tail) needed per parent.\n const parentAdvanceMap = new Map<string, number>();\n const parentExtendMap = new Map<string, number>();\n\n for (const item of items) {\n if (!transformOnlyParentLinkItemIds.has(item['id'] as string)) {\n continue;\n }\n\n const parentId = item['parentId'] as string | undefined;\n\n if (parentId == null || parentId === '') {\n continue;\n }\n\n const parentItem = itemById.get(parentId);\n\n if (parentItem == null) {\n continue;\n }\n\n const childDelay = (item['delay'] as number) ?? 0;\n const childDuration = (item['duration'] as number) ?? 0;\n const parentDelay = (parentItem['delay'] as number) ?? 0;\n const parentDuration = (parentItem['duration'] as number) ?? 0;\n\n if (childDelay < parentDelay) {\n const advance = parentDelay - childDelay;\n const existing = parentAdvanceMap.get(parentId) ?? 0;\n\n if (advance > existing) {\n parentAdvanceMap.set(parentId, advance);\n }\n }\n\n const childEnd = childDelay + childDuration;\n const parentEnd = parentDelay + parentDuration;\n\n if (childEnd > parentEnd + 0.001) {\n const extend = childEnd - parentEnd;\n const existing = parentExtendMap.get(parentId) ?? 0;\n\n if (extend > existing) {\n parentExtendMap.set(parentId, extend);\n }\n }\n }\n\n // Merge all parent IDs that need adjustment.\n const allParentIds = new Set([...parentAdvanceMap.keys(), ...parentExtendMap.keys()]);\n\n // Apply adjustments: update parent item delay/duration and sync ActivationTrack clips.\n for (const parentId of allParentIds) {\n const parentItem = itemById.get(parentId);\n\n if (parentItem == null) {\n continue;\n }\n\n const advance = parentAdvanceMap.get(parentId) ?? 0;\n const extend = parentExtendMap.get(parentId) ?? 0;\n const parentDelay = (parentItem['delay'] as number) ?? 0;\n const parentDuration = (parentItem['duration'] as number) ?? 0;\n const newDelay = roundNumber(parentDelay - advance, 4);\n const newDuration = roundNumber(parentDuration + advance + extend, 4);\n\n parentItem['delay'] = newDelay;\n parentItem['duration'] = newDuration;\n\n // Only sync ActivationTrack — TransformTrack keyframes are normalized to\n // the original time range and will hold their last frame value when the\n // track extends beyond the original duration.\n const processed = processedByItemId.get(parentId);\n\n if (processed != null) {\n const obt = miscById.get(processed.objectBindingTrackId);\n\n if (obt != null && Array.isArray(obt['children'])) {\n for (const childRef of obt['children'] as DataPath[]) {\n const childTrack = miscById.get(childRef.id);\n\n if (childTrack?.['dataType'] === 'ActivationTrack' && Array.isArray(childTrack['clips'])) {\n for (const clip of childTrack['clips'] as TimelineClipData[]) {\n clip.start = newDelay;\n clip.duration = newDuration;\n }\n }\n }\n }\n }\n }\n}\n\n/**\n * Topological sort: parents are processed before their children.\n * Falls back to original order for items without parent relationships.\n */\nfunction topologicalSort (\n items: Record<string, unknown>[],\n itemById: Map<string, Record<string, unknown>>,\n): Record<string, unknown>[] {\n const sorted: Record<string, unknown>[] = [];\n const visited = new Set<string>();\n\n function visit (item: Record<string, unknown>): void {\n const itemId = item['id'] as string;\n\n if (visited.has(itemId)) {\n return;\n }\n\n visited.add(itemId);\n\n const parentId = item['parentId'] as string | undefined;\n\n if (parentId != null && parentId !== '') {\n const parentItem = itemById.get(parentId);\n\n if (parentItem != null) {\n visit(parentItem);\n }\n }\n\n sorted.push(item);\n }\n\n for (const item of items) {\n visit(item);\n }\n\n return sorted;\n}\n\nfunction syncTimelineClips (\n itemId: string,\n delay: number,\n duration: number,\n processedByItemId: Map<string, ProcessedItemRef>,\n miscById: Map<string, Record<string, unknown>>,\n roundNumber: (value: number, precision: number) => number,\n): void {\n const processedItem = processedByItemId.get(itemId);\n\n if (processedItem == null) {\n return;\n }\n\n const obt = miscById.get(processedItem.objectBindingTrackId);\n\n if (obt == null || !Array.isArray(obt['children'])) {\n return;\n }\n\n for (const childRef of obt['children'] as DataPath[]) {\n const childTrack = miscById.get(childRef.id);\n\n if (childTrack == null || !Array.isArray(childTrack['clips'])) {\n continue;\n }\n\n const trackType = childTrack['dataType'] as string;\n\n if (trackType !== 'ActivationTrack' && trackType !== 'TransformTrack' && trackType !== 'SpriteColorTrack') {\n continue;\n }\n\n for (const clip of childTrack['clips'] as TimelineClipData[]) {\n clip.start = roundNumber(delay, 4);\n clip.duration = roundNumber(duration, 4);\n }\n }\n}\n","import type { IRComposition } from '@vvfx/animation-ir';\nimport type { ECSCollector, ProcessedItem } from '../types';\nimport { applyParenting } from './parenting';\nimport { applyMasks, type MaskLayerLookup } from './mask';\nimport { applyGeMaskRemap } from './ge-mask-remap';\nimport { normalizeChildVisibilityByParentDelays } from './visibility';\nimport { isTransformOnlyParentLink } from '../ir/parent-link';\nimport { roundNumber } from '../utils';\n\nexport type { MaskLayerLookup } from './mask';\n\n/**\n * Post-emit state populated by the unified pipeline's per-layer walk.\n * All fields beyond `collector` + `processedItems` are optional — each\n * post-process step is gated on the presence of the data it needs, not\n * on `ir.source`. Steps that only apply to certain sources naturally\n * no-op when the relevant data is absent (e.g. dsl IR has no masks).\n */\nexport interface PostProcessState {\n collector: ECSCollector;\n processedItems: ProcessedItem[];\n /** Per-layer lookups consumed by the shared mask post-process. */\n maskLookup?: MaskLayerLookup;\n layerToItemId?: Record<number, string>;\n parentIndexSet?: Set<number>;\n ratio?: number;\n width?: number;\n height?: number;\n frameRate?: number;\n /** GE1→GE2 component-id map for remapping ge2ir mask passthrough references. */\n geComponentIdToNewId?: Record<string, string>;\n}\n\n/**\n * Run post-emit mutations on the collector before `assembleScene`.\n * Order: parenting → mask → visibility. Each step is gated on whether\n * the pipeline supplied the required tracking state.\n */\nexport function applyPostProcess (ir: IRComposition, state: PostProcessState): void {\n applyParentingStep(ir, state);\n applySharedMaskPostProcess(ir, state);\n applyGeMaskRemapStep(ir, state);\n applyVisibilityStep(ir, state);\n}\n\nfunction applyGeMaskRemapStep (ir: IRComposition, state: PostProcessState): void {\n // Only ge-sourced compositions carry passthrough mask references that need\n // remapping. Lottie/dsl masks are built with correct ids by applyMasks and\n // must not be touched (their reference ids are absent from the ge map, so a\n // blind remap would wrongly delete them).\n if (ir.source !== 'ge' || state.geComponentIdToNewId == null) {\n return;\n }\n\n applyGeMaskRemap(state.collector, state.geComponentIdToNewId);\n}\n\nfunction applySharedMaskPostProcess (ir: IRComposition, state: PostProcessState): void {\n if (state.maskLookup == null\n || state.ratio == null\n || state.width == null\n || state.height == null\n || state.frameRate == null\n ) {\n return;\n }\n\n applyMasks(\n ir,\n state.collector,\n state.processedItems,\n state.ratio,\n state.width,\n state.height,\n state.frameRate,\n state.maskLookup,\n );\n}\n\nfunction applyParentingStep (ir: IRComposition, state: PostProcessState): void {\n const { collector, layerToItemId, ratio, width, height } = state;\n\n if (layerToItemId == null || ratio == null || width == null || height == null) {\n return;\n }\n\n applyParenting(ir.layers, collector.items, layerToItemId, ratio, width, height);\n}\n\nfunction applyVisibilityStep (ir: IRComposition, state: PostProcessState): void {\n const { collector, processedItems, layerToItemId } = state;\n\n if (layerToItemId == null) {\n return;\n }\n\n const transformOnlyParentLinkItemIds = new Set<string>();\n\n for (const layer of ir.layers) {\n if (isTransformOnlyParentLink(layer)) {\n const itemId = layerToItemId[layer.index];\n\n if (itemId != null) {\n transformOnlyParentLinkItemIds.add(itemId);\n }\n }\n }\n\n normalizeChildVisibilityByParentDelays({\n items: collector.items as unknown as Record<string, unknown>[],\n miscs: collector.miscs,\n processedItems,\n transformOnlyParentLinkItemIds,\n roundNumber,\n });\n}\n","/**\n * Unified IR → GE scene generation pipeline. All IR sources (lottie, dsl2ge,\n * future) are processed here. Source-specific features are gated by data\n * existence (e.g. mask, precomp, shape layers are absent in dsl IR and\n * naturally skipped); `ir.source` branches are used only for B-class real\n * semantic differences that cannot be expressed via data existence.\n */\n\nimport type { IRComposition, IRLayerNode } from '@vvfx/animation-ir';\nimport { validateIRCompositionWithWarnings } from '@vvfx/animation-ir';\nimport type { DataPath, JSONScene } from '@galacean/effects-specification';\nimport { get2dTo3dRatio } from '../../shared/coordinate';\nimport { processNullLayer, processParentLayer, processVisualLayer } from '../builders/layer';\nimport { assembleScene } from './scene-assembly';\nimport { applyPostProcess } from '../post-process';\nimport { readGE2IRMetadata } from '../../shared/ge2ir-metadata';\nimport type { ECSCollector, LayerProcessingContext, ProcessedItem } from '../types';\n\n/**\n * Convert an IR composition to a GE JSONScene.\n *\n * All IR sources (lottie, dsl2ge, future) go through this single unified\n * pipeline. Source-specific features are gated by data existence (e.g. mask,\n * precomp, shape layers are absent in dsl IR and naturally skipped);\n * `ir.source` branches are used only for B-class real semantic differences\n * that cannot be expressed via data existence.\n *\n * The optional `duration` arg is a caller override; lottie2ge currently passes\n * the duration computed from the raw json upstream. When omitted, the\n * canonical assembler derives it from `(outPoint - inPoint) / frameRate`.\n */\nexport function convertIRToGE (\n ir: IRComposition,\n duration?: number,\n): JSONScene {\n validateIRCompositionWithWarnings(ir);\n\n const { width, height, frameRate } = ir;\n const ratio = get2dTo3dRatio(width, height);\n\n const collector: ECSCollector = {\n images: [],\n components: [],\n items: [],\n textures: [],\n miscs: [],\n };\n const processedItems: ProcessedItem[] = [];\n const layerToItemId: Record<number, string> = {};\n const layerToComponentId: Record<number, string> = {};\n const textureCache = new Map<string, DataPath>();\n\n const parentIndexSet = new Set<number>();\n\n for (const layer of ir.layers) {\n if (layer.parent != null) {\n parentIndexSet.add(layer.parent.index);\n }\n }\n\n const workingIR: IRComposition = {\n ...ir,\n layers: getLayersWithExtendedParentEndFrames(ir.layers, parentIndexSet),\n };\n\n const ctx: LayerProcessingContext = {\n ir: workingIR,\n collector,\n processedItems,\n layerToItemId,\n layerToComponentId,\n textureCache,\n parentIndexSet,\n ratio,\n width,\n height,\n frameRate,\n };\n\n for (const layer of workingIR.layers) {\n processLayer(layer, ctx);\n }\n\n // Build GE1-component-id → regenerated-component-id map for mask reference\n // remapping (ge2ir round-trip). Keyed by the original GE component id that\n // ge2ir stored in metadata; value is the component id this layer minted.\n const geComponentIdToNewId: Record<string, string> = {};\n\n for (const layer of workingIR.layers) {\n const geComponentId = readGE2IRMetadata(workingIR, layer)?.geComponentId;\n const newId = layerToComponentId[layer.index];\n\n if (geComponentId != null && newId != null) {\n geComponentIdToNewId[geComponentId] = newId;\n }\n }\n\n applyPostProcess(workingIR, {\n collector,\n processedItems,\n layerToItemId,\n parentIndexSet,\n ratio,\n width,\n height,\n frameRate,\n geComponentIdToNewId,\n maskLookup: {\n getItemId: idx => layerToItemId[idx],\n getComponentId: idx => layerToComponentId[idx],\n isParentLayer: idx => parentIndexSet.has(idx),\n },\n });\n\n collector.items.reverse();\n processedItems.reverse();\n\n return assembleScene(workingIR, collector, processedItems, duration);\n}\n\nfunction processLayer (layer: IRLayerNode, ctx: LayerProcessingContext): void {\n if (layer.type === 'null' || layer.type === 'precomp') {\n processNullLayer(layer, ctx);\n } else if (ctx.parentIndexSet.has(layer.index)) {\n processParentLayer(layer, ctx);\n } else {\n processVisualLayer(layer, ctx);\n }\n}\n\n/**\n * Extend parent layers' endFrame to cover transform-only children's time spans.\n *\n * In Lottie, child layers (linked via layer.parent) inherit the parent's transform\n * even after the parent becomes invisible. GE requires the parent item to be active\n * for transform inheritance to work, so we extend the parent's endFrame to cover\n * the full lifetime of its transform-only children.\n *\n * Keyframes beyond the extended endFrame are NOT included — they represent animation\n * that never plays in Lottie (layer is invisible and has no child needing it).\n */\nfunction getLayersWithExtendedParentEndFrames (layers: IRLayerNode[], parentIndexSet: Set<number>): IRLayerNode[] {\n const clonedLayers = layers.map(layer => ({\n ...layer,\n time: { ...layer.time },\n }));\n\n for (const layer of clonedLayers) {\n if (!parentIndexSet.has(layer.index)) {\n continue;\n }\n\n let maxEnd = layer.time.endFrame;\n\n for (const child of clonedLayers) {\n if (child.parent?.index === layer.index && child.parent.linkKind === 'transform-only') {\n if (child.time.endFrame > maxEnd) {\n maxEnd = child.time.endFrame;\n }\n }\n }\n\n if (maxEnd > layer.time.endFrame) {\n layer.time.endFrame = maxEnd;\n }\n }\n\n return clonedLayers;\n}\n","import type { GEPoolIndex, GERecord } from '../../shared/types';\n\nexport function buildPoolIndex (pool: GERecord[] | undefined): GEPoolIndex {\n const map: GEPoolIndex = new Map();\n\n if (!Array.isArray(pool)) {\n return map;\n }\n\n for (const entry of pool) {\n const id = entry['id'];\n\n if (typeof id === 'string') {\n map.set(id, entry);\n }\n }\n\n return map;\n}\n\nexport function resolveDataPath (\n pool: GEPoolIndex,\n ref: unknown,\n): GERecord | undefined {\n if (ref == null || typeof ref !== 'object') {\n return undefined;\n }\n\n const id = (ref as GERecord)['id'];\n\n if (typeof id !== 'string') {\n return undefined;\n }\n\n return pool.get(id);\n}\n\nexport function resolveDataPathId (ref: unknown): string | undefined {\n if (ref == null || typeof ref !== 'object') {\n return undefined;\n }\n\n const id = (ref as GERecord)['id'];\n\n return typeof id === 'string' ? id : undefined;\n}\n","import { IREndBehavior } from '@vvfx/animation-ir';\nimport type { IREndBehavior as IREndBehaviorType } from '@vvfx/animation-ir';\n\nexport function reverseEndBehavior (geBehavior: number | undefined): IREndBehaviorType | undefined {\n if (geBehavior == null) {\n return undefined;\n }\n\n switch (geBehavior) {\n case 0:\n return IREndBehavior.Stop;\n case 4:\n return IREndBehavior.Hold;\n case 5:\n return IREndBehavior.Loop;\n default:\n return undefined;\n }\n}\n\nexport function reverseCompositionEndBehavior (geBehavior: number | undefined): IREndBehaviorType | undefined {\n return reverseEndBehavior(geBehavior);\n}\n","import type { IRColor } from '@vvfx/animation-ir';\nimport { get2dTo3dRatio } from '../shared/coordinate';\nimport { buildPoolIndex, resolveDataPath, resolveDataPathId } from './pool/pool';\nimport { reverseCompositionEndBehavior } from './reverse/end-behavior';\nimport type { GE2IROptions, GESceneContext } from './types';\n\nexport function buildSceneContext (scene: Record<string, unknown>, options: GE2IROptions): GESceneContext {\n const compositionId = scene['compositionId'] as string;\n const compositions = scene['compositions'] as Record<string, unknown>[];\n const composition = compositions?.find(c => c['id'] === compositionId);\n\n if (composition == null) {\n throw new Error(`[ge2ir] composition not found for id: ${compositionId}`);\n }\n\n const previewSize = composition['previewSize'] as [number, number] | undefined;\n const width = previewSize?.[0] ?? 512;\n const height = previewSize?.[1] ?? 512;\n const duration = composition['duration'] as number ?? 1;\n const frameRate = options.frameRate;\n const ratio = get2dTo3dRatio(width, height);\n\n const inPoint = 0;\n const outPoint = Math.round(duration * frameRate);\n\n const endBehavior = reverseCompositionEndBehavior(composition['endBehavior'] as number | undefined);\n\n let backgroundColor: IRColor | undefined;\n const bg = composition['background'] as Record<string, unknown> | undefined;\n\n if (bg != null) {\n const color = bg['color'] as number[] | undefined;\n\n if (color != null && color.length >= 4) {\n backgroundColor = [color[0], color[1], color[2], color[3]];\n }\n }\n\n const compositionName = (composition['name'] as string) ?? 'Untitled';\n\n const items = scene['items'] as Record<string, unknown>[] | undefined;\n const components = scene['components'] as Record<string, unknown>[] | undefined;\n const miscs = scene['miscs'] as Record<string, unknown>[] | undefined;\n const images = scene['images'] as Record<string, unknown>[] | undefined;\n const textures = scene['textures'] as Record<string, unknown>[] | undefined;\n\n const itemById = buildPoolIndex(items);\n const componentById = buildPoolIndex(components);\n const miscById = buildPoolIndex(miscs);\n const imageById = buildPoolIndex(images);\n const textureById = buildPoolIndex(textures);\n\n const itemIdToTrackId = buildSceneBindings(componentById, miscById, composition);\n\n return {\n width,\n height,\n frameRate,\n ratio,\n duration,\n inPoint,\n outPoint,\n compositionName,\n endBehavior,\n backgroundColor,\n itemById,\n componentById,\n miscById,\n imageById,\n textureById,\n itemIdToTrackId,\n };\n}\n\nfunction buildSceneBindings (\n componentById: Map<string, Record<string, unknown>>,\n miscById: Map<string, Record<string, unknown>>,\n composition: Record<string, unknown>,\n): Map<string, string> {\n const map = new Map<string, string>();\n const compositionComponent = findCompositionComponent(componentById, composition);\n\n if (compositionComponent == null) {\n return map;\n }\n\n const bindings = compositionComponent['sceneBindings'] as Array<{\n key: { id: string };\n value: { id: string };\n }> | undefined;\n\n if (bindings == null) {\n return map;\n }\n\n for (const binding of bindings) {\n const trackId = resolveDataPathId(binding.key);\n const itemId = resolveDataPathId(binding.value);\n\n if (trackId != null && itemId != null) {\n map.set(itemId, trackId);\n }\n }\n\n return map;\n}\n\nfunction findCompositionComponent (\n componentById: Map<string, Record<string, unknown>>,\n composition: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n const compRefs = composition['components'] as Array<{ id: string }> | undefined;\n\n if (compRefs == null || compRefs.length === 0) {\n return undefined;\n }\n\n for (const ref of compRefs) {\n const component = resolveDataPath(componentById, ref);\n\n if (component?.['dataType'] === 'CompositionComponent') {\n return component;\n }\n }\n\n return undefined;\n}\n\nexport function getCompositionItemIds (scene: Record<string, unknown>): string[] {\n const compositionId = scene['compositionId'] as string;\n const compositions = scene['compositions'] as Record<string, unknown>[];\n const composition = compositions?.find(c => c['id'] === compositionId);\n\n if (composition == null) {\n return [];\n }\n\n const componentById = buildPoolIndex(scene['components'] as Record<string, unknown>[] | undefined);\n const compositionComponent = findCompositionComponent(componentById, composition);\n\n if (compositionComponent == null) {\n return [];\n }\n\n const itemRefs = compositionComponent['items'] as Array<{ id: string }> | undefined;\n\n if (itemRefs == null) {\n return [];\n }\n\n return itemRefs.map(ref => ref.id).filter((id): id is string => typeof id === 'string');\n}\n","import { resolveDataPath, resolveDataPathId } from '../pool/pool';\nimport type { GESceneContext } from '../types';\n\nexport interface TimelineData {\n delay: number;\n duration: number;\n endBehavior: number;\n transformAsset?: Record<string, unknown>;\n spriteColorAsset?: Record<string, unknown>;\n}\n\nexport function parseTimeline (\n itemId: string,\n ctx: GESceneContext,\n): TimelineData | undefined {\n const trackId = ctx.itemIdToTrackId.get(itemId);\n\n if (trackId == null) {\n return undefined;\n }\n\n const objectBindingTrack = ctx.miscById.get(trackId);\n\n if (objectBindingTrack == null) {\n return undefined;\n }\n\n const childRefs = objectBindingTrack['children'] as Array<{ id: string }> | undefined;\n\n if (childRefs == null) {\n return undefined;\n }\n\n let delay = 0;\n let duration = 0;\n let endBehavior = 0;\n let transformAsset: Record<string, unknown> | undefined;\n let spriteColorAsset: Record<string, unknown> | undefined;\n\n for (const ref of childRefs) {\n const childTrackId = resolveDataPathId(ref);\n\n if (childTrackId == null) {\n continue;\n }\n\n const childTrack = ctx.miscById.get(childTrackId);\n\n if (childTrack == null) {\n continue;\n }\n\n const dataType = childTrack['dataType'] as string;\n const clips = childTrack['clips'] as Array<Record<string, unknown>> | undefined;\n\n if (clips == null || clips.length === 0) {\n continue;\n }\n\n const clip = clips[0];\n\n if (dataType === 'ActivationTrack') {\n delay = (clip['start'] as number) ?? 0;\n duration = (clip['duration'] as number) ?? 0;\n endBehavior = (clip['endBehavior'] as number) ?? 0;\n } else if (dataType === 'TransformTrack') {\n const assetRef = clip['asset'] as { id: string } | undefined;\n\n if (assetRef != null) {\n transformAsset = resolveDataPath(ctx.miscById, assetRef);\n }\n } else if (dataType === 'SpriteColorTrack') {\n const assetRef = clip['asset'] as { id: string } | undefined;\n\n if (assetRef != null) {\n spriteColorAsset = resolveDataPath(ctx.miscById, assetRef);\n }\n }\n }\n\n return { delay, duration, endBehavior, transformAsset, spriteColorAsset };\n}\n","import { DEFAULT_CAMERA_Z, get2dTo3dRatio } from '../../shared/coordinate';\n\nexport function convert3dTo2dPoint (\n x: number,\n y: number,\n z: number,\n width: number,\n height: number,\n): [number, number, number] {\n const ratio = get2dTo3dRatio(width, height);\n const adaptRatioZ = (DEFAULT_CAMERA_Z - z) / DEFAULT_CAMERA_Z;\n const effectiveRatio = Math.abs(adaptRatioZ) > 1e-10 ? ratio * adaptRatioZ : ratio;\n const px = x / effectiveRatio + width / 2;\n const py = height / 2 - y / effectiveRatio;\n\n return [px, py, z];\n}\n","import type { IRTransformChannels, IRVec3 } from '@vvfx/animation-ir';\nimport { convert3dTo2dPoint } from '../reverse/coordinate';\nimport type { GESceneContext } from '../types';\n\nexport function parseStaticTransform (\n itemTransform: Record<string, unknown>,\n ctx: GESceneContext,\n): Partial<IRTransformChannels> {\n const channels: Partial<IRTransformChannels> = {};\n\n const position = itemTransform['position'] as { x: number; y: number; z: number } | undefined;\n\n if (position != null) {\n const pos2d = convert3dTo2dPoint(position.x, position.y, position.z ?? 0, ctx.width, ctx.height);\n\n channels.position = { keyframed: false, value: pos2d };\n }\n\n const scale = itemTransform['scale'] as { x: number; y: number; z: number } | undefined;\n\n if (scale != null) {\n const sv: IRVec3 = [scale.x ?? 1, scale.y ?? 1, scale.z ?? 1];\n const isDefault = Math.abs(sv[0] - 1) < 1e-6 && Math.abs(sv[1] - 1) < 1e-6 && Math.abs(sv[2] - 1) < 1e-6;\n\n if (!isDefault) {\n channels.scale = { keyframed: false, value: sv };\n }\n }\n\n const eulerHint = itemTransform['eulerHint'] as { x: number; y: number; z: number } | undefined;\n\n if (eulerHint != null) {\n const hasRotation = Math.abs(eulerHint.x) > 1e-6 || Math.abs(eulerHint.y) > 1e-6 || Math.abs(eulerHint.z) > 1e-6;\n\n if (hasRotation) {\n channels.rotation = { keyframed: false, value: [eulerHint.x, eulerHint.y, eulerHint.z] };\n }\n }\n\n return channels;\n}\n","import type { IRBezierHandle, IRKeyframe } from '@vvfx/animation-ir';\n\nfunction inverseLerp (a: number, b: number, value: number): number {\n const range = b - a;\n\n if (Math.abs(range) < 1e-10) {\n return 0;\n }\n\n return (value - a) / range;\n}\n\nexport function parseBezierKeyframes (\n curves: unknown[],\n startFrame: number,\n endFrame: number,\n): IRKeyframe<number>[] {\n if (curves.length === 0) {\n return [];\n }\n\n const segments = extractSegments(curves);\n\n if (segments.length === 0) {\n return [];\n }\n\n const frames = endFrame - startFrame;\n const keyframes: IRKeyframe<number>[] = [];\n\n const firstSeg = segments[0];\n const firstT = firstSeg[0];\n const firstV = firstSeg[1];\n\n if (segments.length > 0) {\n const hasPrependedHold = segments.length >= 2\n && Math.abs(firstV - segments[0][7]) < 1e-6\n && Math.abs(firstV - firstSeg[1]) < 1e-6\n && Math.abs(firstT) < 1e-10;\n\n if (hasPrependedHold && Math.abs(firstSeg[6] - segments[1]?.[0]) < 1e-6 && Math.abs(firstV - firstSeg[7]) < 1e-6) {\n segments.shift();\n }\n }\n\n for (let i = 0; i < segments.length; i++) {\n const seg = segments[i];\n const t0 = seg[0];\n const v0 = seg[1];\n const outCpX = seg[2];\n const outCpY = seg[3];\n const t1 = seg[6];\n const v1 = seg[7];\n\n const frameTime = t0 * frames + startFrame;\n\n const isHold = Math.abs(v0 - v1) < 1e-6\n && Math.abs(outCpY - v0) < 1e-6\n && Math.abs(seg[5] - v0) < 1e-6;\n\n const outTangent: IRBezierHandle = {\n x: inverseLerp(t0, t1, outCpX),\n y: inverseLerp(v0, v1, outCpY),\n };\n\n if (i === 0) {\n keyframes.push({\n t: frameTime,\n value: v0,\n ...(isHold ? { hold: true } : { outTangent }),\n });\n } else {\n const prevSeg = segments[i - 1];\n const prevInCpX = prevSeg[4];\n const prevInCpY = prevSeg[5];\n const prevT0 = prevSeg[0];\n const prevV0 = prevSeg[1];\n const prevT1 = prevSeg[6];\n const prevV1 = prevSeg[7];\n\n const inTangent: IRBezierHandle = {\n x: inverseLerp(prevT0, prevT1, prevInCpX),\n y: inverseLerp(prevV0, prevV1, prevInCpY),\n };\n\n keyframes.push({\n t: frameTime,\n value: v0,\n inTangent,\n ...(isHold ? { hold: true } : { outTangent }),\n });\n }\n }\n\n const lastSeg = segments[segments.length - 1];\n const lastT1 = lastSeg[6];\n const lastV1 = lastSeg[7];\n const lastFrameTime = lastT1 * frames + startFrame;\n\n const lastInTangent: IRBezierHandle = {\n x: inverseLerp(lastSeg[0], lastSeg[6], lastSeg[4]),\n y: inverseLerp(lastSeg[1], lastSeg[7], lastSeg[5]),\n };\n\n keyframes.push({\n t: lastFrameTime,\n value: lastV1,\n inTangent: lastInTangent,\n });\n\n return keyframes;\n}\n\nfunction extractSegments (curves: unknown[]): number[][] {\n const segments: number[][] = [];\n\n for (let i = 0; i < curves.length; i++) {\n const entry = curves[i] as [number, number[], number];\n const type = entry[0];\n const data = entry[1];\n\n if (type === 3) {\n // EASE_OUT: [t, v, out_cx, out_cy] — first keyframe of a segment\n\n if (i + 1 < curves.length) {\n const nextEntry = curves[i + 1] as [number, number[], number];\n const nextType = nextEntry[0];\n const nextData = nextEntry[1];\n\n if (nextType === 2) {\n // EASE_IN immediately follows: single segment\n segments.push([\n data[0], data[1], data[2], data[3],\n nextData[0], nextData[1], nextData[2], nextData[3],\n ]);\n } else if (nextType === 1) {\n // EASE follows\n segments.push([\n data[0], data[1], data[2], data[3],\n nextData[0], nextData[1], nextData[2], nextData[3],\n ]);\n }\n }\n } else if (type === 1 && i + 1 < curves.length) {\n // EASE: [in_cx, in_cy, t, v, out_cx, out_cy] — middle keyframe\n const nextEntry = curves[i + 1] as [number, number[], number];\n const nextType = nextEntry[0];\n const nextData = nextEntry[1];\n\n if (nextType === 2) {\n segments.push([\n data[2], data[3], data[4], data[5],\n nextData[0], nextData[1], nextData[2], nextData[3],\n ]);\n } else if (nextType === 1) {\n segments.push([\n data[2], data[3], data[4], data[5],\n nextData[0], nextData[1], nextData[2], nextData[3],\n ]);\n }\n }\n }\n\n return segments;\n}\n\nexport function parsePositionTimingKeyframes (\n curves: unknown[],\n startFrame: number,\n endFrame: number,\n): Array<{ t: number; outTangent?: IRBezierHandle; inTangent?: IRBezierHandle }> {\n const segments = extractSegments(curves);\n\n if (segments.length === 0) {\n return [];\n }\n\n const frames = endFrame - startFrame;\n const result: Array<{ t: number; outTangent?: IRBezierHandle; inTangent?: IRBezierHandle }> = [];\n\n for (let i = 0; i < segments.length; i++) {\n const seg = segments[i];\n const t0 = seg[0];\n const outCpX = seg[2];\n const outCpY = seg[3];\n const t1 = seg[6];\n\n const frameTime = t0 * frames + startFrame;\n\n const outTangent: IRBezierHandle = {\n x: inverseLerp(t0, t1, outCpX),\n y: inverseLerp(t0, t1, outCpY),\n };\n\n if (i === 0) {\n result.push({ t: frameTime, outTangent });\n } else {\n const prevSeg = segments[i - 1];\n const inTangent: IRBezierHandle = {\n x: inverseLerp(prevSeg[0], prevSeg[6], prevSeg[4]),\n y: inverseLerp(prevSeg[0], prevSeg[6], prevSeg[5]),\n };\n\n result.push({ t: frameTime, outTangent, inTangent });\n }\n }\n\n const lastSeg = segments[segments.length - 1];\n const lastFrameTime = lastSeg[6] * frames + startFrame;\n\n const lastInTangent: IRBezierHandle = {\n x: inverseLerp(lastSeg[0], lastSeg[6], lastSeg[4]),\n y: inverseLerp(lastSeg[0], lastSeg[6], lastSeg[5]),\n };\n\n result.push({ t: lastFrameTime, inTangent: lastInTangent });\n\n return result;\n}\n","import type { IRAnimatedProperty, IRKeyframe, IRTransformChannels, IRVec3 } from '@vvfx/animation-ir';\nimport { parseBezierKeyframes, parsePositionTimingKeyframes } from './keyframe-parser';\nimport { convert3dTo2dPoint } from '../reverse/coordinate';\nimport type { GESceneContext } from '../types';\n\nexport function parseTransformAnimation (\n asset: Record<string, unknown>,\n startFrame: number,\n endFrame: number,\n ctx: GESceneContext,\n): Partial<IRTransformChannels> {\n const channels: Partial<IRTransformChannels> = {};\n\n const posOverLifetime = asset['positionOverLifetime'] as Record<string, unknown> | undefined;\n\n if (posOverLifetime != null) {\n const posAnim = parsePositionAnimation(posOverLifetime, startFrame, endFrame, ctx);\n\n if (posAnim != null) {\n channels.position = posAnim;\n }\n }\n\n const rotOverLifetime = asset['rotationOverLifetime'] as Record<string, unknown> | undefined;\n\n if (rotOverLifetime != null) {\n const rotResult = parseRotationAnimation(rotOverLifetime, startFrame, endFrame);\n\n if (rotResult.rotation != null) {\n channels.rotation = rotResult.rotation;\n }\n if (rotResult.separatedRotation != null) {\n channels.separatedRotation = rotResult.separatedRotation;\n }\n }\n\n const sizeOverLifetime = asset['sizeOverLifetime'] as Record<string, unknown> | undefined;\n\n if (sizeOverLifetime != null) {\n const scaleAnim = parseScaleAnimation(sizeOverLifetime, startFrame, endFrame);\n\n if (scaleAnim != null) {\n channels.scale = scaleAnim;\n }\n }\n\n return channels;\n}\n\nexport function parseOpacityAnimation (\n asset: Record<string, unknown>,\n startFrame: number,\n endFrame: number,\n): IRAnimatedProperty<number> | undefined {\n const colorOverLifetime = asset['colorOverLifetime'] as Record<string, unknown> | undefined;\n\n if (colorOverLifetime == null) {\n return undefined;\n }\n\n const opacity = colorOverLifetime['opacity'] as unknown[] | undefined;\n\n if (opacity == null || !Array.isArray(opacity) || opacity.length < 2) {\n return undefined;\n }\n\n const valueType = opacity[0] as number;\n\n if (valueType === 0) {\n return { keyframed: false, value: opacity[1] as number };\n }\n\n if (valueType === 13) {\n const curves = opacity[1] as unknown[];\n const keyframes = parseBezierKeyframes(curves, startFrame, endFrame);\n\n if (keyframes.length >= 2) {\n return { keyframed: true, keyframes };\n }\n }\n\n return undefined;\n}\n\nfunction parsePositionAnimation (\n posOverLifetime: Record<string, unknown>,\n startFrame: number,\n endFrame: number,\n ctx: GESceneContext,\n): IRAnimatedProperty<IRVec3> | undefined {\n const pathData = posOverLifetime['path'] as unknown[] | undefined;\n\n if (pathData == null || !Array.isArray(pathData) || pathData.length < 2) {\n return undefined;\n }\n\n const valueType = pathData[0] as number;\n\n if (valueType !== 22) {\n return undefined;\n }\n\n const payload = pathData[1] as unknown[];\n\n if (!Array.isArray(payload) || payload.length < 2) {\n return undefined;\n }\n\n const easingData = payload[0] as unknown[];\n const pathPoints = payload[1] as [number, number, number][];\n const controlPointsRaw = payload[2] as [number, number, number][] | undefined;\n\n if (!Array.isArray(pathPoints) || pathPoints.length < 2) {\n return undefined;\n }\n\n const timingKfs = parsePositionTimingKeyframes(easingData, startFrame, endFrame);\n\n if (timingKfs.length < 2) {\n return undefined;\n }\n\n // Detect and skip prepended hold segment\n let startIdx = 0;\n\n if (timingKfs.length > 2) {\n const firstPP = pathPoints[0];\n const secondPP = pathPoints[1];\n\n if (\n firstPP != null && secondPP != null\n && Math.abs(firstPP[0] - secondPP[0]) < 1e-6\n && Math.abs(firstPP[1] - secondPP[1]) < 1e-6\n ) {\n startIdx = 1;\n }\n }\n\n const keyframes: IRKeyframe<IRVec3>[] = [];\n const pendingSpatialIn = new Map<number, number[]>();\n\n for (let i = startIdx; i < timingKfs.length; i++) {\n const timing = timingKfs[i];\n const pp = pathPoints[Math.min(i, pathPoints.length - 1)];\n const pos2d = convert3dTo2dPoint(pp[0], pp[1], pp[2] ?? 0, ctx.width, ctx.height);\n\n const kf: IRKeyframe<IRVec3> = {\n t: timing.t,\n value: pos2d,\n };\n\n if (i > startIdx && timing.inTangent != null) {\n kf.inTangent = timing.inTangent;\n }\n if (i < timingKfs.length - 1 && timing.outTangent != null) {\n kf.outTangent = timing.outTangent;\n }\n\n const kfIndex = keyframes.length;\n const pendingSI = pendingSpatialIn.get(kfIndex);\n\n if (pendingSI != null) {\n kf.spatialIn = pendingSI;\n }\n\n if (controlPointsRaw != null && i - startIdx < timingKfs.length - startIdx - 1) {\n const segIdx = i - startIdx;\n const cp1Idx = segIdx * 2;\n const cp2Idx = segIdx * 2 + 1;\n\n if (cp1Idx < controlPointsRaw.length && cp2Idx < controlPointsRaw.length) {\n const cp1 = controlPointsRaw[cp1Idx];\n const cp2 = controlPointsRaw[cp2Idx];\n const ppStart = pathPoints[i];\n const ppEnd = pathPoints[Math.min(i + 1, pathPoints.length - 1)];\n const ppStart2d = convert3dTo2dPoint(ppStart[0], ppStart[1], ppStart[2] ?? 0, ctx.width, ctx.height);\n const ppEnd2d = convert3dTo2dPoint(ppEnd[0], ppEnd[1], ppEnd[2] ?? 0, ctx.width, ctx.height);\n const cp1_2d = convert3dTo2dPoint(cp1[0], cp1[1], cp1[2] ?? 0, ctx.width, ctx.height);\n const cp2_2d = convert3dTo2dPoint(cp2[0], cp2[1], cp2[2] ?? 0, ctx.width, ctx.height);\n\n kf.spatialOut = [cp1_2d[0] - ppStart2d[0], cp1_2d[1] - ppStart2d[1]];\n\n pendingSpatialIn.set(kfIndex + 1, [cp2_2d[0] - ppEnd2d[0], cp2_2d[1] - ppEnd2d[1]]);\n }\n }\n\n keyframes.push(kf);\n }\n\n if (keyframes.length < 2) {\n return undefined;\n }\n\n return { keyframed: true, keyframes };\n}\n\nfunction parseRotationAnimation (\n rotOverLifetime: Record<string, unknown>,\n startFrame: number,\n endFrame: number,\n): { rotation?: IRAnimatedProperty<IRVec3>; separatedRotation?: { x?: IRAnimatedProperty<number>; y?: IRAnimatedProperty<number>; z?: IRAnimatedProperty<number> } } {\n const separateAxes = rotOverLifetime['separateAxes'] as boolean | undefined;\n const xData = rotOverLifetime['x'] as unknown[] | undefined;\n const yData = rotOverLifetime['y'] as unknown[] | undefined;\n const zData = rotOverLifetime['z'] as unknown[] | undefined;\n\n if (separateAxes === true) {\n const x = parseScalarChannel(xData, startFrame, endFrame);\n const y = parseScalarChannel(yData, startFrame, endFrame);\n const z = parseScalarChannel(zData, startFrame, endFrame);\n\n const hasMultiAxis = (x != null ? 1 : 0) + (y != null ? 1 : 0) + (z != null ? 1 : 0) > 1;\n const hasXOrY = x != null || y != null;\n\n if (hasMultiAxis || hasXOrY) {\n return {\n separatedRotation: {\n ...(x != null && { x }),\n ...(y != null && { y }),\n ...(z != null && { z }),\n },\n };\n }\n\n if (z != null) {\n return {\n separatedRotation: { z },\n };\n }\n }\n\n // Single-axis z rotation (non-separated)\n if (zData != null) {\n const z = parseScalarChannel(zData, startFrame, endFrame);\n\n if (z != null) {\n if (z.keyframed) {\n const vecKeyframes: IRKeyframe<IRVec3>[] = z.keyframes!.map(kf => {\n const result: IRKeyframe<IRVec3> = {\n t: kf.t,\n value: [0, 0, kf.value],\n };\n\n if (kf.hold != null) { result.hold = kf.hold; }\n if (kf.inTangent != null) { result.inTangent = kf.inTangent; }\n if (kf.outTangent != null) { result.outTangent = kf.outTangent; }\n\n return result;\n });\n\n return { rotation: { keyframed: true, keyframes: vecKeyframes } };\n }\n\n return { rotation: { keyframed: false, value: [0, 0, z.value!] } };\n }\n }\n\n return {};\n}\n\nfunction parseScaleAnimation (\n sizeOverLifetime: Record<string, unknown>,\n startFrame: number,\n endFrame: number,\n): IRAnimatedProperty<IRVec3> | undefined {\n const xData = sizeOverLifetime['x'] as unknown[] | undefined;\n const yData = sizeOverLifetime['y'] as unknown[] | undefined;\n const zData = sizeOverLifetime['z'] as unknown[] | undefined;\n\n const x = parseScalarChannel(xData, startFrame, endFrame);\n const y = parseScalarChannel(yData, startFrame, endFrame);\n const z = parseScalarChannel(zData, startFrame, endFrame);\n\n if (x == null && y == null && z == null) {\n return undefined;\n }\n\n const xKeyframed = x?.keyframed === true;\n const yKeyframed = y?.keyframed === true;\n const zKeyframed = z?.keyframed === true;\n\n if (!xKeyframed && !yKeyframed && !zKeyframed) {\n return {\n keyframed: false,\n value: [x?.value ?? 1, y?.value ?? 1, z?.value ?? 1],\n };\n }\n\n const xKfs = x?.keyframes ?? [{ t: startFrame, value: x?.value ?? 1 }, { t: endFrame, value: x?.value ?? 1 }];\n const yKfs = y?.keyframes ?? [{ t: startFrame, value: y?.value ?? 1 }, { t: endFrame, value: y?.value ?? 1 }];\n const zKfs = z?.keyframes ?? [{ t: startFrame, value: z?.value ?? 1 }, { t: endFrame, value: z?.value ?? 1 }];\n\n const allTimes = new Set<number>();\n\n for (const kf of xKfs) { allTimes.add(kf.t); }\n for (const kf of yKfs) { allTimes.add(kf.t); }\n for (const kf of zKfs) { allTimes.add(kf.t); }\n\n const sortedTimes = [...allTimes].sort((a, b) => a - b);\n\n const keyframes: IRKeyframe<IRVec3>[] = sortedTimes.map(t => {\n const xv = findValueAtTime(xKfs, t, x?.value ?? 1);\n const yv = findValueAtTime(yKfs, t, y?.value ?? 1);\n const zv = findValueAtTime(zKfs, t, z?.value ?? 1);\n\n const kf: IRKeyframe<IRVec3> = {\n t,\n value: [xv.value, yv.value, zv.value],\n };\n\n if (xv.outTangent != null) { kf.outTangent = xv.outTangent; }\n if (xv.inTangent != null) { kf.inTangent = xv.inTangent; }\n if (xv.hold === true) { kf.hold = true; }\n\n return kf;\n });\n\n return { keyframed: true, keyframes };\n}\n\nfunction parseScalarChannel (\n data: unknown[] | undefined,\n startFrame: number,\n endFrame: number,\n): IRAnimatedProperty<number> | undefined {\n if (data == null || !Array.isArray(data) || data.length < 2) {\n return undefined;\n }\n\n const valueType = data[0] as number;\n\n if (valueType === 0) {\n return { keyframed: false, value: data[1] as number };\n }\n\n if (valueType === 13) {\n const curves = data[1] as unknown[];\n const keyframes = parseBezierKeyframes(curves, startFrame, endFrame);\n\n if (keyframes.length >= 2) {\n return { keyframed: true, keyframes };\n }\n }\n\n return undefined;\n}\n\nfunction findValueAtTime (\n keyframes: IRKeyframe<number>[],\n t: number,\n defaultValue: number,\n): { value: number; outTangent?: { x: number; y: number }; inTangent?: { x: number; y: number }; hold?: boolean } {\n for (const kf of keyframes) {\n if (Math.abs(kf.t - t) < 1e-6) {\n return { value: kf.value, outTangent: kf.outTangent, inTangent: kf.inTangent, hold: kf.hold };\n }\n }\n\n return { value: defaultValue };\n}\n","import { IRBlendMode } from '@vvfx/animation-ir';\nimport type { IRBlendMode as IRBlendModeType } from '@vvfx/animation-ir';\n\nconst IR_BLEND_MODE_BY_GE: Record<number, IRBlendModeType> = {\n 1: IRBlendMode.Add,\n 2: IRBlendMode.Darken,\n 3: IRBlendMode.Lighten,\n 4: IRBlendMode.Difference,\n 5: IRBlendMode.Exclusion,\n 6: IRBlendMode.Multiply,\n 7: IRBlendMode.ColorBurn,\n 8: IRBlendMode.Color,\n 9: IRBlendMode.Screen,\n 10: IRBlendMode.ColorDodge,\n 11: IRBlendMode.Hue,\n 12: IRBlendMode.Saturation,\n 13: IRBlendMode.Overlay,\n 14: IRBlendMode.HardLight,\n 15: IRBlendMode.SoftLight,\n 16: IRBlendMode.Luminosity,\n};\n\nexport function reverseBlendMode (geCode: number | undefined): IRBlendModeType | undefined {\n if (geCode == null) {\n return undefined;\n }\n\n return IR_BLEND_MODE_BY_GE[geCode];\n}\n","import type {\n IRAssetReference,\n IRBlendMode,\n IRColor,\n IRCustomShapePath,\n IRShapeData,\n IRShapePaintData,\n IRTextData,\n} from '@vvfx/animation-ir';\nimport { IRFillType, IRLineCap, IRLineJoin, IRShapeFillRule, IRShapePrimitiveType } from '@vvfx/animation-ir';\nimport { resolveDataPath, resolveDataPathId } from '../pool/pool';\nimport { reverseBlendMode } from '../reverse/blend-mode';\nimport type { GESceneContext } from '../types';\n\nexport interface ComponentData {\n type: 'image' | 'solid' | 'text' | 'shape';\n asset?: IRAssetReference;\n solidColor?: IRColor;\n text?: IRTextData;\n shapes?: IRShapeData[];\n blendMode?: IRBlendMode;\n anchorScale?: [number, number];\n /** Original GE component id — rendezvous key for cross-component references (masks). */\n geComponentId?: string;\n /** Raw GE component-level `mask` object (source: {isMask:true,...}, target: {isMask:false,reference,inverted}). */\n rawMask?: Record<string, unknown>;\n}\n\nexport function parseComponent (\n item: Record<string, unknown>,\n ctx: GESceneContext,\n): ComponentData | undefined {\n const componentRefs = item['components'] as Array<{ id: string }> | undefined;\n\n if (componentRefs == null || componentRefs.length === 0) {\n return undefined;\n }\n\n for (const ref of componentRefs) {\n const compId = resolveDataPathId(ref);\n\n if (compId == null) {\n continue;\n }\n\n const component = ctx.componentById.get(compId);\n\n if (component == null) {\n continue;\n }\n\n const dataType = component['dataType'] as string;\n let result: ComponentData | undefined;\n\n if (dataType === 'SpriteComponent') {\n result = parseSpriteComponent(component, ctx);\n } else if (dataType === 'TextComponent') {\n result = parseTextComponent(component);\n } else if (dataType === 'ShapeComponent') {\n result = parseShapeComponent(component, ctx);\n }\n\n if (result == null) {\n continue;\n }\n\n result.geComponentId = component['id'] as string;\n\n const mask = component['mask'] as Record<string, unknown> | undefined;\n\n if (mask != null) {\n result.rawMask = mask;\n }\n\n return result;\n }\n\n return undefined;\n}\n\nfunction parseSpriteComponent (\n component: Record<string, unknown>,\n ctx: GESceneContext,\n): ComponentData {\n const renderer = component['renderer'] as Record<string, unknown> | undefined;\n const options = component['options'] as Record<string, unknown> | undefined;\n\n let asset: IRAssetReference | undefined;\n let solidColor: IRColor | undefined;\n let blendMode: IRBlendMode | undefined;\n let anchorScale: [number, number] | undefined;\n\n if (renderer != null) {\n const textureRef = renderer['texture'] as { id: string } | undefined;\n\n if (textureRef != null) {\n const texture = resolveDataPath(ctx.textureById, textureRef);\n\n if (texture != null) {\n const sourceRef = texture['source'] as { id: string } | undefined;\n const image = sourceRef != null ? resolveDataPath(ctx.imageById, sourceRef) : undefined;\n\n if (image != null) {\n asset = { url: image['url'] as string };\n }\n }\n }\n\n blendMode = reverseBlendMode(renderer['blending'] as number | undefined);\n\n const anchor = renderer['anchor'] as [number, number] | undefined;\n\n if (anchor != null && Array.isArray(anchor) && anchor.length >= 2) {\n anchorScale = [anchor[0], anchor[1]];\n }\n }\n\n if (options != null) {\n const startColor = options['startColor'] as number[] | undefined;\n\n if (startColor != null && startColor.length >= 4) {\n const isWhite = Math.abs(startColor[0] - 1) < 1e-4\n && Math.abs(startColor[1] - 1) < 1e-4\n && Math.abs(startColor[2] - 1) < 1e-4\n && Math.abs(startColor[3] - 1) < 1e-4;\n\n if (!isWhite) {\n solidColor = [startColor[0], startColor[1], startColor[2], startColor[3]];\n }\n }\n }\n\n const type = asset != null ? 'image' as const : 'solid' as const;\n\n return { type, asset, solidColor, blendMode, anchorScale };\n}\n\nfunction parseTextComponent (component: Record<string, unknown>): ComponentData {\n const options = component['options'] as Record<string, unknown> | undefined;\n const renderer = component['renderer'] as Record<string, unknown> | undefined;\n\n if (options == null) {\n return { type: 'text' };\n }\n\n const textColor = options['textColor'] as number[] | undefined;\n const color: IRColor = textColor != null && textColor.length >= 4\n ? [textColor[0], textColor[1], textColor[2], textColor[3]]\n : [0, 0, 0, 1];\n\n const textAlignNum = options['textAlign'] as number | undefined;\n const textAlign = textAlignNum === 1 ? 'center' : textAlignNum === 2 ? 'right' : 'left';\n\n const text: IRTextData = {\n content: (options['text'] as string) ?? '',\n fontSize: (options['fontSize'] as number) ?? 12,\n color,\n fontFamily: (options['fontFamily'] as string) ?? 'sans-serif',\n fontWeight: (options['fontWeight'] as IRTextData['fontWeight']) ?? 'normal',\n textAlign,\n fontStyle: (options['fontStyle'] as 'normal' | 'italic' | 'oblique') ?? 'normal',\n letterSpacing: (options['letterSpace'] as number) ?? 0,\n lineHeight: options['lineHeight'] as number | undefined,\n autoWidth: (options['autoWidth'] as boolean) ?? true,\n width: options['textWidth'] as number | undefined,\n height: options['textHeight'] as number | undefined,\n };\n\n let blendMode: IRBlendMode | undefined;\n let anchorScale: [number, number] | undefined;\n\n if (renderer != null) {\n blendMode = reverseBlendMode(renderer['blending'] as number | undefined);\n const anchor = renderer['anchor'] as [number, number] | undefined;\n\n if (anchor != null && Array.isArray(anchor) && anchor.length >= 2) {\n anchorScale = [anchor[0], anchor[1]];\n }\n }\n\n return { type: 'text', text, blendMode, anchorScale };\n}\n\nfunction parseShapeComponent (\n component: Record<string, unknown>,\n ctx: GESceneContext,\n): ComponentData {\n const renderer = component['renderer'] as Record<string, unknown> | undefined;\n let blendMode: IRBlendMode | undefined;\n\n if (renderer != null) {\n blendMode = reverseBlendMode(renderer['blending'] as number | undefined);\n }\n\n const shapeData = parseShapeOptions(component, ctx.ratio);\n\n return {\n type: 'shape',\n shapes: shapeData != null ? [shapeData] : undefined,\n blendMode,\n };\n}\n\nfunction parseShapeOptions (component: Record<string, unknown>, ratio: number): IRShapeData | undefined {\n const geType = component['type'] as number | undefined;\n const primitiveType = reverseShapePrimitiveType(geType ?? 0);\n\n const xSize = component['xSize'] as number | undefined;\n const ySize = component['ySize'] as number | undefined;\n const size: [number, number] = [\n xSize != null ? xSize / ratio : 0,\n ySize != null ? ySize / ratio : 0,\n ];\n\n const shape: IRShapeData = {\n primitiveType,\n position: [0, 0],\n size,\n fills: [],\n strokes: [],\n };\n\n const shapeRec = shape as unknown as Record<string, unknown>;\n\n reverseScaledNumber(shapeRec, component, 'xRadius', ratio);\n reverseScaledNumber(shapeRec, component, 'yRadius', ratio);\n reverseScaledNumber(shapeRec, component, 'width', ratio);\n reverseScaledNumber(shapeRec, component, 'height', ratio);\n reverseScaledNumber(shapeRec, component, 'innerRadius', ratio);\n reverseScaledNumber(shapeRec, component, 'outerRadius', ratio);\n reverseScaledNumber(shapeRec, component, 'radius', ratio);\n reverseRawNumber(shapeRec, component, 'roundness');\n reverseRawNumber(shapeRec, component, 'pointCount');\n reverseRawNumber(shapeRec, component, 'innerRoundness');\n reverseRawNumber(shapeRec, component, 'outerRoundness');\n\n const geFills = component['fills'] as Record<string, unknown>[] | undefined;\n\n if (geFills != null) {\n shape.fills = geFills.map(f => reverseShapePaint(f, ratio)).filter((f): f is IRShapePaintData => f != null);\n }\n\n const geStrokes = component['strokes'] as Record<string, unknown>[] | undefined;\n\n if (geStrokes != null) {\n shape.strokes = geStrokes.map(s => reverseShapePaint(s, ratio)).filter((s): s is IRShapePaintData => s != null);\n }\n\n const geStrokeWidth = component['strokeWidth'] as number | undefined;\n\n if (geStrokeWidth != null) {\n shape.strokeWidth = geStrokeWidth / ratio;\n }\n\n const geStrokeCap = component['strokeCap'] as number | undefined;\n\n if (geStrokeCap != null) {\n shape.strokeCap = reverseLineCap(geStrokeCap) as IRShapeData['strokeCap'];\n }\n\n const geStrokeJoin = component['strokeJoin'] as number | undefined;\n\n if (geStrokeJoin != null) {\n shape.strokeJoin = reverseLineJoin(geStrokeJoin) as IRShapeData['strokeJoin'];\n }\n\n const geFillRule = component['fillRule'] as number | undefined;\n\n if (geFillRule != null) {\n shape.fillRule = reverseShapeFillRule(geFillRule) as IRShapeData['fillRule'];\n }\n\n const geShapes = component['shapes'] as Array<Record<string, unknown>> | undefined;\n\n if (geShapes != null) {\n const paths = reverseCustomPaths(component, ratio);\n\n if (paths.length > 0) {\n shape.customPaths = paths;\n }\n }\n\n const trimPath = component['trimPath'] as Record<string, unknown> | undefined;\n\n if (trimPath != null) {\n shape.trimPath = trimPath as unknown as IRShapeData['trimPath'];\n }\n\n const repeater = component['repeater'] as Record<string, unknown> | undefined;\n\n if (repeater != null) {\n shape.repeater = repeater as unknown as IRShapeData['repeater'];\n }\n\n return shape;\n}\n\nconst GE_TO_SHAPE_PRIMITIVE_TYPE: Record<number, IRShapeData['primitiveType']> = {\n 0: IRShapePrimitiveType.Custom,\n 1: IRShapePrimitiveType.Rectangle,\n 2: IRShapePrimitiveType.Ellipse,\n 3: IRShapePrimitiveType.Polygon,\n 4: IRShapePrimitiveType.Star,\n};\n\nfunction reverseShapePrimitiveType (geType: number): IRShapeData['primitiveType'] {\n return GE_TO_SHAPE_PRIMITIVE_TYPE[geType] ?? IRShapePrimitiveType.Custom;\n}\n\nfunction reverseShapePaint (paint: Record<string, unknown>, ratio: number): IRShapePaintData | undefined {\n const geType = paint['type'] as number | undefined;\n\n if (geType === 0) {\n const color = paint['color'] as { r: number; g: number; b: number; a: number } | undefined;\n\n if (color == null) {\n return undefined;\n }\n\n return { type: IRFillType.Solid, color: [color.r, color.g, color.b, color.a] };\n }\n\n if (geType === 1 || geType === 2 || geType === 3) {\n const typeMap: Record<number, IRShapePaintData['type']> = {\n 1: IRFillType.LinearGradient,\n 2: IRFillType.RadialGradient,\n 3: IRFillType.AngularGradient,\n };\n\n const gradientStopsRaw = paint['gradientStops'] as [number, unknown] | undefined;\n const stops = Array.isArray(gradientStopsRaw) && gradientStopsRaw.length >= 2\n ? gradientStopsRaw[1] as [number, number, number, number, number][]\n : [];\n\n const startPoint = paint['startPoint'] as { x: number; y: number } | undefined;\n const endPoint = paint['endPoint'] as { x: number; y: number } | undefined;\n\n return {\n type: typeMap[geType] as 'linear-gradient' | 'radial-gradient' | 'angular-gradient',\n gradientStops: stops,\n gradientStart: startPoint != null ? [startPoint.x / ratio, -startPoint.y / ratio] : undefined,\n gradientEnd: endPoint != null ? [endPoint.x / ratio, -endPoint.y / ratio] : undefined,\n };\n }\n\n return undefined;\n}\n\nfunction reverseLineCap (geCode: number): string {\n const map: Record<number, string> = { 0: IRLineCap.Butt, 1: IRLineCap.Round, 2: IRLineCap.Square };\n\n return map[geCode] ?? IRLineCap.Butt;\n}\n\nfunction reverseLineJoin (geCode: number): string {\n const map: Record<number, string> = { 0: IRLineJoin.Round, 1: IRLineJoin.Bevel, 2: IRLineJoin.Miter };\n\n return map[geCode] ?? IRLineJoin.Miter;\n}\n\nfunction reverseShapeFillRule (geCode: number): string {\n const map: Record<number, string> = { 0: IRShapeFillRule.NonZero, 1: IRShapeFillRule.EvenOdd };\n\n return map[geCode] ?? IRShapeFillRule.NonZero;\n}\n\nfunction reverseCustomPaths (component: Record<string, unknown>, ratio: number): IRCustomShapePath[] {\n const points = component['points'] as Array<{ x: number; y: number }> | undefined;\n const easingIns = component['easingIns'] as Array<{ x: number; y: number }> | undefined;\n const easingOuts = component['easingOuts'] as Array<{ x: number; y: number }> | undefined;\n const shapes = component['shapes'] as Array<{ close: boolean; indexes: Array<{ point: number; easingIn: number; easingOut: number }> }> | undefined;\n\n if (points == null || shapes == null) {\n return [];\n }\n\n return shapes.map(shape => {\n const pathPoints: Array<{ x: number; y: number }> = [];\n const pathEasingIns: Array<{ x: number; y: number }> = [];\n const pathEasingOuts: Array<{ x: number; y: number }> = [];\n\n for (const idx of shape.indexes) {\n const pt = points[idx.point];\n const ei = easingIns?.[idx.easingIn];\n const eo = easingOuts?.[idx.easingOut];\n\n pathPoints.push({ x: pt.x / ratio, y: -pt.y / ratio });\n pathEasingIns.push({ x: (ei?.x ?? 0) / ratio, y: -(ei?.y ?? 0) / ratio });\n pathEasingOuts.push({ x: (eo?.x ?? 0) / ratio, y: -(eo?.y ?? 0) / ratio });\n }\n\n return {\n points: pathPoints,\n easingIns: pathEasingIns,\n easingOuts: pathEasingOuts,\n close: shape.close,\n };\n });\n}\n\nfunction reverseScaledNumber (\n shape: Record<string, unknown>,\n component: Record<string, unknown>,\n key: string,\n ratio: number,\n): void {\n const value = component[key];\n\n if (typeof value === 'number') {\n (shape)[key] = value / ratio;\n }\n}\n\nfunction reverseRawNumber (\n shape: Record<string, unknown>,\n component: Record<string, unknown>,\n key: string,\n): void {\n const value = component[key];\n\n if (typeof value === 'number') {\n (shape)[key] = value;\n }\n}\n","import type { IRTimeContext } from '@vvfx/animation-ir';\n\nexport function reverseLayerTiming (\n delay: number,\n duration: number,\n frameRate: number,\n): IRTimeContext {\n const startFrame = Math.round(delay * frameRate * 1000) / 1000;\n const endFrame = Math.round((delay + duration) * frameRate * 1000) / 1000;\n\n return { startFrame, endFrame };\n}\n","import type { IRLayerNode } from '@vvfx/animation-ir';\nimport type { GESceneContext } from '../types';\nimport { resolveDataPathId } from '../pool/pool';\nimport { parseTimeline } from '../parsers/timeline-parser';\n\nexport interface RawLayerDescriptor {\n itemId: string;\n item: Record<string, unknown>;\n layer: IRLayerNode;\n}\n\nexport function mergeNullSpritePairs (\n descriptors: RawLayerDescriptor[],\n ctx: GESceneContext,\n): RawLayerDescriptor[] {\n const childByParentId = new Map<string, RawLayerDescriptor[]>();\n\n for (const desc of descriptors) {\n const parentId = desc.item['parentId'] as string | undefined;\n\n if (parentId != null) {\n if (!childByParentId.has(parentId)) {\n childByParentId.set(parentId, []);\n }\n childByParentId.get(parentId)!.push(desc);\n }\n }\n\n // Pass 1: identify all merge pairs (null parent → sprite child)\n const mergedChildIds = new Set<string>();\n const mergeMap = new Map<string, RawLayerDescriptor>();\n\n for (const desc of descriptors) {\n const isNull = desc.item['type'] === '3';\n\n if (!isNull) {\n continue;\n }\n\n const children = childByParentId.get(desc.itemId);\n\n if (children == null || children.length === 0) {\n continue;\n }\n\n // Only merge an UNAMBIGUOUS emitNullSpritePair artifact: a null whose ONLY\n // child is exactly one same-name visual sprite. ir2ge's emitNullSpritePair\n // produces precisely this shape (null + one same-name child). If the null\n // has any OTHER children, it is a genuine Lottie parent null — merging it\n // into a transformSplit would change the anchor those other children are\n // parented against, shifting them. Leave such nulls intact.\n if (children.length !== 1) {\n continue;\n }\n\n const onlyChild = children[0];\n const childType = onlyChild.item['type'] as string;\n const isVisual = childType === '1' || childType === 'text' || childType === 'shape';\n const sameName = (onlyChild.item['name'] as string) === (desc.item['name'] as string);\n\n if (\n !isVisual\n || !sameName\n || !hasNoComponents(desc.item)\n || !hasVisualComponent(onlyChild, ctx)\n || !hasSplitPairTiming(desc, onlyChild, ctx)\n || !hasParentTransformSignal(desc, ctx)\n || !hasNoIndependentChildTransform(onlyChild, ctx)\n ) {\n continue;\n }\n\n const sameNameChild = onlyChild;\n\n mergedChildIds.add(sameNameChild.itemId);\n mergeMap.set(desc.itemId, mergeNullAndSprite(desc, sameNameChild, ctx));\n }\n\n // Pass 2: build result, replacing merged nulls and skipping merged children\n const result: RawLayerDescriptor[] = [];\n\n for (const desc of descriptors) {\n if (mergedChildIds.has(desc.itemId)) {\n continue;\n }\n\n const merged = mergeMap.get(desc.itemId);\n\n if (merged != null) {\n result.push(merged);\n } else {\n result.push(desc);\n }\n }\n\n return result;\n}\n\nfunction hasNoComponents (item: Record<string, unknown>): boolean {\n const components = item['components'];\n\n return !Array.isArray(components) || components.length === 0;\n}\n\nfunction hasVisualComponent (desc: RawLayerDescriptor, ctx: GESceneContext): boolean {\n const components = desc.item['components'];\n\n if (!Array.isArray(components) || components.length === 0) {\n return false;\n }\n\n return components.some(ref => {\n const componentId = resolveDataPathId(ref);\n const component = componentId != null ? ctx.componentById.get(componentId) : undefined;\n const dataType = component?.['dataType'];\n\n return dataType === 'SpriteComponent' || dataType === 'TextComponent' || dataType === 'ShapeComponent';\n });\n}\n\nfunction hasSplitPairTiming (\n parent: RawLayerDescriptor,\n child: RawLayerDescriptor,\n ctx: GESceneContext,\n): boolean {\n const parentTimeline = parseTimeline(parent.itemId, ctx);\n const childTimeline = parseTimeline(child.itemId, ctx);\n const parentEndBehavior = parentTimeline?.endBehavior ?? readItemEndBehavior(parent.item);\n const childEndBehavior = childTimeline?.endBehavior ?? readItemEndBehavior(child.item);\n\n if (parentEndBehavior !== 4 || childEndBehavior !== 0) {\n return false;\n }\n\n if (parentTimeline == null || childTimeline == null) {\n return true;\n }\n\n return nearlyEqual(parentTimeline.delay, childTimeline.delay)\n && nearlyEqual(parentTimeline.duration, childTimeline.duration);\n}\n\nfunction hasParentTransformSignal (desc: RawLayerDescriptor, ctx: GESceneContext): boolean {\n const timeline = parseTimeline(desc.itemId, ctx);\n\n if (hasTransformPayload(timeline?.transformAsset)) {\n return true;\n }\n\n const transform = desc.item['transform'];\n\n return isRecord(transform) && (hasNonDefaultScale(transform) || hasNonDefaultEulerHint(transform));\n}\n\nfunction hasNoIndependentChildTransform (desc: RawLayerDescriptor, ctx: GESceneContext): boolean {\n const timeline = parseTimeline(desc.itemId, ctx);\n\n return timeline?.transformAsset != null && !hasTransformPayload(timeline.transformAsset);\n}\n\nfunction hasTransformPayload (asset: Record<string, unknown> | undefined): boolean {\n if (asset == null) {\n return false;\n }\n\n return hasNonEmptyRecord(asset['positionOverLifetime'])\n || hasNonEmptyRecord(asset['rotationOverLifetime'])\n || hasNonEmptyRecord(asset['sizeOverLifetime']);\n}\n\nfunction hasNonDefaultScale (transform: Record<string, unknown>): boolean {\n const scale = transform['scale'];\n\n if (!isRecord(scale)) {\n return false;\n }\n\n const x = typeof scale['x'] === 'number' ? scale['x'] : 1;\n const y = typeof scale['y'] === 'number' ? scale['y'] : 1;\n const z = typeof scale['z'] === 'number' ? scale['z'] : 1;\n\n return Math.abs(x - 1) > 1e-6 || Math.abs(y - 1) > 1e-6 || Math.abs(z - 1) > 1e-6;\n}\n\nfunction hasNonDefaultEulerHint (transform: Record<string, unknown>): boolean {\n const eulerHint = transform['eulerHint'];\n\n if (!isRecord(eulerHint)) {\n return false;\n }\n\n const x = typeof eulerHint['x'] === 'number' ? eulerHint['x'] : 0;\n const y = typeof eulerHint['y'] === 'number' ? eulerHint['y'] : 0;\n const z = typeof eulerHint['z'] === 'number' ? eulerHint['z'] : 0;\n\n return Math.abs(x) > 1e-6 || Math.abs(y) > 1e-6 || Math.abs(z) > 1e-6;\n}\n\nfunction hasNonEmptyRecord (value: unknown): boolean {\n return isRecord(value) && Object.keys(value).length > 0;\n}\n\nfunction readItemEndBehavior (item: Record<string, unknown>): number | undefined {\n const endBehavior = item['endBehavior'];\n\n return typeof endBehavior === 'number' ? endBehavior : undefined;\n}\n\nfunction nearlyEqual (a: number, b: number): boolean {\n return Math.abs(a - b) < 1e-6;\n}\n\nfunction isRecord (value: unknown): value is Record<string, unknown> {\n return value != null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction mergeNullAndSprite (\n nullDesc: RawLayerDescriptor,\n childDesc: RawLayerDescriptor,\n ctx: GESceneContext,\n): RawLayerDescriptor {\n const merged = { ...nullDesc.layer };\n\n // Take type from child\n merged.type = childDesc.layer.type;\n merged.asset = childDesc.layer.asset;\n merged.text = childDesc.layer.text;\n merged.shapes = childDesc.layer.shapes;\n merged.shapeLayer = childDesc.layer.shapeLayer;\n merged.solidColor = childDesc.layer.solidColor;\n merged.blendMode = childDesc.layer.blendMode;\n merged.transformSplit = true;\n\n // Visibility from child\n merged.visibility = childDesc.layer.visibility;\n\n // Compute anchor from child position offset\n const childTransform = childDesc.item['transform'] as Record<string, unknown> | undefined;\n const childPosition = childTransform?.['position'] as { x: number; y: number; z: number } | undefined;\n const childSize = childTransform?.['size'] as { x: number; y: number } | undefined;\n\n if (childPosition != null && childSize != null) {\n const layerWidth = childSize.x / ctx.ratio;\n const layerHeight = childSize.y / ctx.ratio;\n\n const anchorX = -childPosition.x / ctx.ratio + layerWidth / 2;\n const anchorY = childPosition.y / ctx.ratio + layerHeight / 2;\n\n if (merged.transform == null) {\n merged.transform = {};\n }\n\n merged.transform.anchor = { keyframed: false, value: [anchorX, anchorY, 0] };\n merged.displaySize = { width: layerWidth, height: layerHeight };\n }\n\n // Opacity from child\n if (childDesc.layer.transform?.opacity != null) {\n if (merged.transform == null) {\n merged.transform = {};\n }\n merged.transform.opacity = childDesc.layer.transform.opacity;\n }\n\n // The merged layer renders the child's visual component, but the parent owns\n // transform animation passthrough. Deep-merge the ge2ir namespace so neither\n // side overwrites the other's GE round-trip data.\n if (childDesc.layer.metadata != null) {\n const parentGE2IR = isRecord(merged.metadata?.['ge2ir']) ? merged.metadata['ge2ir'] : undefined;\n const childGE2IR = isRecord(childDesc.layer.metadata['ge2ir']) ? childDesc.layer.metadata['ge2ir'] : undefined;\n\n merged.metadata = {\n ...merged.metadata,\n ...childDesc.layer.metadata,\n };\n\n if (parentGE2IR != null || childGE2IR != null) {\n merged.metadata['ge2ir'] = {\n ...(parentGE2IR ?? {}),\n ...(childGE2IR ?? {}),\n };\n }\n }\n\n return {\n itemId: nullDesc.itemId,\n item: nullDesc.item,\n layer: merged,\n };\n}\n\nexport function resolveHierarchy (\n descriptors: RawLayerDescriptor[],\n ctx: GESceneContext,\n): void {\n const idToIndex = new Map<string, number>();\n const idToDesc = new Map<string, RawLayerDescriptor>();\n\n for (const desc of descriptors) {\n idToIndex.set(desc.itemId, desc.layer.index);\n idToDesc.set(desc.itemId, desc);\n }\n\n for (const desc of descriptors) {\n const parentId = desc.item['parentId'] as string | undefined;\n\n if (parentId == null) {\n continue;\n }\n\n const parentIndex = idToIndex.get(parentId);\n const parentDesc = idToDesc.get(parentId);\n\n if (parentIndex == null || parentDesc == null) {\n continue;\n }\n\n desc.layer.parent = {\n index: parentIndex,\n name: parentDesc.layer.name,\n };\n\n const parentAnchor = getAnchorFromDesc(parentDesc);\n const pos = desc.layer.transform?.position;\n\n if (pos != null && !pos.keyframed && pos.value != null) {\n const pos2d = pos.value;\n\n desc.layer.transform!.position = {\n keyframed: false,\n value: [\n pos2d[0] + (parentAnchor[0] - ctx.width / 2),\n pos2d[1] + (parentAnchor[1] - ctx.height / 2),\n pos2d[2] ?? 0,\n ],\n };\n }\n }\n}\n\nfunction getAnchorFromDesc (desc: RawLayerDescriptor): [number, number] {\n const anchor = desc.layer.transform?.anchor;\n\n if (anchor != null && !anchor.keyframed && Array.isArray(anchor.value) && anchor.value.length >= 2) {\n return [anchor.value[0], anchor.value[1]];\n }\n\n return [0, 0];\n}\n","import type { IRComposition, IRLayerNode, IRLayerType, IRTransformChannels } from '@vvfx/animation-ir';\nimport { buildSceneContext, getCompositionItemIds } from './scene-reader';\nimport { parseTimeline } from './parsers/timeline-parser';\nimport { parseStaticTransform } from './parsers/transform-parser';\nimport { parseTransformAnimation, parseOpacityAnimation } from './parsers/animation-parser';\nimport { parseComponent } from './parsers/component-parser';\nimport { reverseLayerTiming } from './reverse/timing';\nimport { mergeNullSpritePairs, resolveHierarchy, type RawLayerDescriptor } from './merge/merge';\nimport type { GE2IROptions, GE2IRPassthroughMetadata, GESceneContext } from './types';\n\nexport function convertGEToIR (scene: Record<string, unknown>, options: GE2IROptions): IRComposition {\n const ctx = buildSceneContext(scene, options);\n const itemIds = getCompositionItemIds(scene);\n\n // Reverse: GE items are in display order (ir2ge reverses at the end),\n // IR layers need to be in push order so ir2ge's final reverse restores display order.\n const reversedItemIds = [...itemIds].reverse();\n const descriptors: RawLayerDescriptor[] = [];\n\n let layerIndex = 0;\n\n for (const itemId of reversedItemIds) {\n const item = ctx.itemById.get(itemId);\n\n if (item == null) {\n continue;\n }\n\n const layer = parseItemToLayer(item, itemId, layerIndex, ctx);\n\n descriptors.push({ itemId, item, layer });\n layerIndex++;\n }\n\n const merged = mergeNullSpritePairs(descriptors, ctx);\n\n // Re-index after merge\n for (let i = 0; i < merged.length; i++) {\n merged[i].layer.index = i;\n }\n\n resolveHierarchy(merged, ctx);\n\n const layers = merged.map(d => d.layer);\n\n return {\n source: 'ge',\n name: ctx.compositionName,\n width: ctx.width,\n height: ctx.height,\n frameRate: ctx.frameRate,\n inPoint: ctx.inPoint,\n outPoint: ctx.outPoint,\n backgroundColor: ctx.backgroundColor,\n endBehavior: ctx.endBehavior,\n layers,\n };\n}\n\nfunction parseItemToLayer (\n item: Record<string, unknown>,\n itemId: string,\n index: number,\n ctx: GESceneContext,\n): IRLayerNode {\n const name = (item['name'] as string) ?? `layer_${index}`;\n const geType = item['type'] as string;\n const visible = item['visible'] as boolean ?? true;\n let rawTransformPassthrough: GE2IRPassthroughMetadata | undefined;\n\n const timeline = parseTimeline(itemId, ctx);\n const delay = timeline?.delay ?? (item['delay'] as number ?? 0);\n const duration = timeline?.duration ?? (item['duration'] as number ?? 0);\n\n const time = reverseLayerTiming(delay, duration, ctx.frameRate);\n\n const componentData = parseComponent(item, ctx);\n let type: IRLayerType;\n\n if (geType === '3') {\n type = 'null';\n } else if (componentData?.type === 'text' || geType === 'text') {\n type = 'text';\n } else if (componentData?.type === 'shape' || geType === 'shape') {\n type = 'shape';\n } else if (componentData?.type === 'image') {\n type = 'image';\n } else if (componentData?.solidColor != null) {\n type = 'solid';\n } else if (geType === '1') {\n type = 'solid';\n } else {\n type = 'null';\n }\n\n // Parse transforms\n const itemTransform = item['transform'] as Record<string, unknown> | undefined;\n let transform: IRTransformChannels | undefined;\n\n if (itemTransform != null) {\n const staticChannels = parseStaticTransform(itemTransform, ctx);\n\n transform = { ...staticChannels };\n\n // Text layers carry their pixel-sizing scale on transform.scale\n // (scale = ratio × displaySize). ir2ge RECOMPUTES this item scale from\n // displaySize in processVisualLayer, so keeping it in the IR scale channel\n // would make buildSizeAnim emit a duplicate sizeOverLifetime constant that\n // double-scales the glyphs (garbled/stretched text). Drop the static scale\n // for text; genuine text scale animation still rides through\n // metadata.ge2ir.sizeOverLifetime passthrough.\n if (type === 'text') {\n delete transform.scale;\n }\n }\n\n // Parse animation from timeline tracks — passthrough raw GE animation data\n // via metadata. Converting to IR keyframes and back would lose data (ir2ge\n // only handles specific ValueType variants and makes assumptions about\n // static positions). The raw data is injected verbatim by ir2ge.\n if (timeline?.transformAsset != null) {\n const asset = timeline.transformAsset;\n const animChannels = parseTransformAnimation(asset, time.startFrame, time.endFrame, ctx);\n\n if (transform == null) {\n transform = {};\n }\n\n // Use parsed IR channels when available (CONSTANT/BEZIER_CURVE types),\n // but also store raw data for passthrough of unsupported types (LINE_SEGMENTS etc.)\n if (animChannels.rotation != null) {\n transform.rotation = animChannels.rotation;\n }\n if (animChannels.separatedRotation != null) {\n transform.separatedRotation = animChannels.separatedRotation;\n delete transform.rotation;\n }\n if (animChannels.scale != null) {\n transform.scale = animChannels.scale;\n }\n\n // Passthrough raw animation data for channels that can't round-trip through IR\n const rawPassthrough: GE2IRPassthroughMetadata = {};\n const posOL = asset['positionOverLifetime'] as Record<string, unknown> | undefined;\n const rotOL = asset['rotationOverLifetime'] as Record<string, unknown> | undefined;\n const sizeOL = asset['sizeOverLifetime'] as Record<string, unknown> | undefined;\n\n if (posOL != null && posOL['path'] != null) {\n rawPassthrough.positionOverLifetime = posOL;\n }\n if (rotOL != null && Object.keys(rotOL).length > 0) {\n rawPassthrough.rotationOverLifetime = rotOL;\n }\n if (sizeOL != null && Object.keys(sizeOL).length > 0) {\n rawPassthrough.sizeOverLifetime = sizeOL;\n }\n\n if (Object.keys(rawPassthrough).length > 0) {\n rawTransformPassthrough = rawPassthrough;\n }\n }\n\n // Parse opacity\n let rawColorOverLifetime: Record<string, unknown> | undefined;\n\n if (timeline?.spriteColorAsset != null) {\n const opacity = parseOpacityAnimation(timeline.spriteColorAsset, time.startFrame, time.endFrame);\n\n if (opacity != null) {\n if (transform == null) {\n transform = {};\n }\n transform.opacity = opacity;\n }\n\n const col = timeline.spriteColorAsset['colorOverLifetime'] as Record<string, unknown> | undefined;\n\n if (col != null && Object.keys(col).length > 0) {\n rawColorOverLifetime = col;\n }\n }\n\n // Anchor from component — default to center (0.5, 0.5) when not explicitly set\n if (type !== 'null') {\n const itemSize = (item['transform'] as Record<string, unknown>)?.['size'] as { x: number; y: number } | undefined;\n\n if (itemSize != null) {\n const layerWidth = itemSize.x / ctx.ratio;\n const layerHeight = itemSize.y / ctx.ratio;\n const anchorScale = componentData?.anchorScale ?? [0.5, 0.5];\n const anchorX = anchorScale[0] * layerWidth;\n const anchorY = anchorScale[1] * layerHeight;\n\n if (transform == null) {\n transform = {};\n }\n\n transform.anchor = {\n keyframed: false,\n value: [anchorX, anchorY, 0],\n };\n\n // Reverse the position adjustments ir2ge's processVisualLayer re-applies\n // for non-centered anchors, so they don't double-apply on round-trip.\n // Forward order (in 2D-px equivalent): pos += anchorOffset (computeStaticPosition),\n // then pos += scaleAdjust (applyScalePositionAdjust). We subtract both.\n const pos = transform.position;\n\n if (pos != null && !pos.keyframed && pos.value != null) {\n // anchorOffset = -(anchor - size/2), added to the raw 2D position.\n const anchorOffsetX = -(anchorX - layerWidth / 2);\n const anchorOffsetY = -(anchorY - layerHeight / 2);\n\n // scaleAdjust (only when static scale != 1 and anchor off-center by >0.5px):\n // 3D: x += anchorDiffX*(1-sx)*ratio ; y -= anchorDiffY*(1-sy)*ratio\n // In 2D-px (÷ratio, y-axis flips sign): x2d += anchorDiffX*(1-sx) ;\n // y2d += anchorDiffY*(1-sy) (the two sign flips cancel).\n const scale = transform.scale?.keyframed === false && Array.isArray(transform.scale.value)\n ? transform.scale.value\n : [1, 1, 1];\n const sx = scale[0] ?? 1;\n const sy = scale[1] ?? 1;\n const anchorDiffX = anchorX - layerWidth / 2;\n const anchorDiffY = anchorY - layerHeight / 2;\n const anchorOffCenter = Math.abs(anchorDiffX) > 0.5 || Math.abs(anchorDiffY) > 0.5;\n const hasStaticScale = !(sx === 1 && sy === 1);\n\n let scaleAdjustX = 0;\n let scaleAdjustY = 0;\n\n if (hasStaticScale && anchorOffCenter && layerWidth > 0 && layerHeight > 0) {\n scaleAdjustX = anchorDiffX * (1 - sx);\n scaleAdjustY = anchorDiffY * (1 - sy);\n }\n\n const totalX = anchorOffsetX + scaleAdjustX;\n const totalY = anchorOffsetY + scaleAdjustY;\n\n if (Math.abs(totalX) > 1e-6 || Math.abs(totalY) > 1e-6) {\n transform.position = {\n keyframed: false,\n value: [pos.value[0] - totalX, pos.value[1] - totalY, pos.value[2] ?? 0],\n };\n }\n }\n }\n }\n\n // Display size from item transform.size\n let displaySize: { width: number; height: number } | undefined;\n const itemSize = (item['transform'] as Record<string, unknown>)?.['size'] as { x: number; y: number } | undefined;\n\n if (itemSize != null) {\n displaySize = {\n width: itemSize.x / ctx.ratio,\n height: itemSize.y / ctx.ratio,\n };\n }\n\n const layer: IRLayerNode = {\n index,\n name,\n type,\n time,\n visibility: { hidden: !visible, enabled: visible },\n transform,\n displaySize,\n };\n\n if (componentData?.asset != null) {\n layer.asset = componentData.asset;\n }\n if (componentData?.solidColor != null) {\n layer.solidColor = componentData.solidColor;\n }\n if (componentData?.text != null) {\n layer.text = componentData.text;\n }\n if (componentData?.shapes != null) {\n layer.shapes = componentData.shapes;\n }\n if (componentData?.blendMode != null) {\n layer.blendMode = componentData.blendMode;\n }\n const geComponentId = componentData?.geComponentId;\n const rawMask = componentData?.rawMask;\n\n if (\n rawTransformPassthrough != null\n || rawColorOverLifetime != null\n || geComponentId != null\n || rawMask != null\n ) {\n // Mask round-trip: geComponentId is the rendezvous key linking a target's\n // mask.reference.id (a GE1 component id) to the regenerated GE2 component id.\n // ir2ge copies ge2ir.geMask onto the rebuilt component and a post-process pass\n // remaps the stale reference id.\n const ge2irMetadata: GE2IRPassthroughMetadata = {\n ...(rawTransformPassthrough ?? {}),\n ...(rawColorOverLifetime != null && { colorOverLifetime: rawColorOverLifetime }),\n ...(geComponentId != null && { geComponentId }),\n ...(rawMask != null && { geMask: rawMask }),\n };\n\n layer.metadata = {\n ...layer.metadata,\n ge2ir: ge2irMetadata,\n };\n }\n\n return layer;\n}\n","/**\n * Read-side accessors for the `IRLayerNode.specific.lottie` slot.\n *\n * The shared generator must not branch on lottie semantics directly — every\n * lottie-specific read goes through these helpers so the rest of `ir2ge` stays\n * agnostic to the producing tool.\n *\n * `isTransformOnlyParentLink` used to live here, reading\n * `specific.lottie.explicitParent`. It was promoted to a generic IR field\n * (`IRLayerReference.linkKind`); the accessor now lives at `./parent-link.ts`.\n */\n\nimport type { IRLayerNode, LottieLayerSpecific } from '@vvfx/animation-ir';\n\nexport type { LottieLayerSpecific };\n\nexport function readLottieSpecific (layer: IRLayerNode): LottieLayerSpecific | undefined {\n return layer.specific?.lottie;\n}\n"],"names":["_extends","Object","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","_array_like_to_array","arr","len","arr2","Array","_unsupported_iterable_to_array","o","minLen","n","toString","slice","name","from","test","_create_for_of_iterator_helper_loose","allowArrayLike","it","Symbol","iterator","next","bind","isArray","done","value","TypeError","DEFAULT_CAMERA_Z","DEFAULT_CAMERA_FOV","DEFAULT_CLIP_MODE","get2dTo3dRatio","width","height","ratio","Math","tan","PI","convert2dTo3dPoint","x","y","z","adaptRatioZ","offsetX","offsetY","createId","v4","replace","toDataPath","id","roundNumber","precision","factor","round","lerp","a","b","estimateTextWidth","text","fontSize","letterSpacing","avgCharWidth","spacing","buildTimelineTracks","collector","delay","duration","endBehavior","animation","itemType","objectBindingTrackId","childTrackIds","push","buildActivationTrack","buildTransformTrack","isNullItemType","buildSpriteColorTrack","miscs","dataType","children","clips","assetId","trackId","clip","start","asset","positionOverLifetime","rotationOverLifetime","sizeOverLifetime","startColor","colorOverLifetime","DEFAULT_OUT_TANGENT","DEFAULT_IN_TANGENT","normalizeTime","frameTime","startFrame","endFrame","frames","max","getScalarValue","keyframe","dimensionIndex","irScalarKeyframesToGE","property","timeContext","keyframed","keyframes","undefined","curve","buildCurveForDimension","irVectorKeyframesToGE","firstValue","dimensions","curves","d","irPositionKeyframesToGE","pathPoints","controlPoints","timingCurvePoints","kf","normalizedT","t","outTangent","inTangent","nextKf","startPos","stitchEnd","segmentEnd","hold","endValue","toPoint","tiPoint","spatialOut","spatialIn","sx","sy","ex","ey","unshift","timingCurves","buildPositionTimingCurves","makeEaseOut","seg","BezierKeyframeType","EASE_OUT","makeEaseIn","prevSeg","EASE_IN","makeEase","currSeg","EASE","bezierCurves","t0","t1","v0","v1","outHandle","inHandle","outCpX","outCpY","inCpX","inCpY","firstT","firstV","result","totalPoints","points","current","shouldUseKeyframeMode","isTransformOnlyParentLink","layer","parent","linkKind","computeLayerTiming","frameRate","time","stretch","offsetFrame","rawDuration","layerDuration","computeStaticPosition","ctx","anchorOffsetX","anchorOffsetY","transform","position","isNullType","type","pos","getStaticAnchor","anchor","firstVal","getStaticScaleFromIR","scale","applyScalePositionAdjust","layerWidth","layerHeight","staticScale","anchorDiffX","anchorDiffY","abs","computeAnchorInfo","anchorScaleX","anchorScaleY","anchorAdjust","textAlign","textHeight","isSpriteForAnchor","staticRotationZ","getStaticRotationZ","hasStaticRotation","rotValue","rad","cosR","cos","sinR","sin","rotatedX","rotatedY","rotation","separatedRotationZ","separatedRotation","getTimeContext","_type_of","obj","readGE2IRMetadata","ir","metadata","namespaced","isRecord","legacy","readLegacyGE2IRMetadata","keys","geComponentId","geMask","buildTransformAnimation","ge2irMetadata","passthroughPosition","passthroughRotation","passthroughSize","buildPositionAnim","buildRotationAnim","buildSizeAnim","posResult","useKeyframeMode","pp","point3d","lastPp","lastPoint3d","cp","dx","dy","cp1","cp2","curveData","easingData","map","roundedPathPoints","p","roundedControlPoints","pathPayload","path","ValueType","BEZIER_CURVE_PATH","hasZ","hasX","hasY","axisHasRotationValue","BEZIER_CURVE","CONSTANT","separated","axisCount","axis","some","separateAxes","buildColorAnimation","passthroughColor","opacity","opacityValue","buildGETransform","eulerHint","getGEItemType","getGEItemTypeCode","registerTexture","imageUrl","cache","cached","get","imageId","textureId","images","url","textures","flipY","dataPathRef","set","_obj","GE_BLENDING_BY_IR_MODE","IRBlendModeConst","Normal","Multiply","Screen","Overlay","Darken","Lighten","ColorDodge","ColorBurn","HardLight","SoftLight","Difference","Exclusion","Hue","Saturation","Color","Luminosity","Add","mapBlendingMode","blendMode","DEFAULT_DISPLAY_SIZE","getLayerDisplaySize","fallback","displaySize","buildComponent","itemId","buildSpriteComponent","buildTextComponent","buildShapeComponent","applyGeMask","component","componentId","blending","solidColor","textureDataPath","textureUrl","refId","textureCache","item","options","renderer","renderMode","texture","isNonDefaultAnchor","components","textInfo","textColor","color","textWidth","content","lineHeight","textSizeW","textSizeH","fontFamily","fontWeight","fontStyle","letterSpace","autoWidth","size","shapes","shapeData","buildShapeOptions","mapShapePrimitiveType","primitiveType","setScaledNumber","setRawNumber","fills","fill","mapShapePaint","filter","strokes","stroke","strokeWidth","strokeCap","mapLineCap","strokeJoin","mapLineJoin","fillRule","mapShapeFillRule","customPaths","mapCustomPaths","trimPath","repeater","SHAPE_PRIMITIVE_TYPE_TO_GE","IRShapePrimitiveType","Custom","Rectangle","Ellipse","Polygon","Star","FILL_TYPE_TO_GE","IRFillType","Solid","LinearGradient","RadialGradient","AngularGradient","Texture","LINE_CAP_TO_GE","IRLineCap","Butt","Round","Square","LINE_JOIN_TO_GE","IRLineJoin","Bevel","Miter","SHAPE_FILL_RULE_TO_GE","IRShapeFillRule","NonZero","EvenOdd","lineCap","lineJoin","paint","colorToGE","gradientStops","GRADIENT_COLOR","startPoint","vec2ToGE","gradientStart","endPoint","gradientEnd","scaleMode","r","g","paths","easingIns","easingOuts","indexes","index","point","easingIn","easingOut","pointIndex","close","getStaticAnchorBehavior","transformSplit","kind","lottieNeedsTransformSplit","info","anchorScale","anchorOffset","sep","anchorOffCenter","hasRotationAnim","hasScaleAnim","processNullLayer","layerIndex","layerToItemId","visible","visibility","enabled","hidden","renderLevel","items","processedItems","emitNullSpritePair","childScale","nullItemId","nullAnimation","nullPosition","nullTrackId","nullItem","childItemId","childPosition","childColorAnim","childTrackId","layerToComponentId","scaledW","scaledH","childItem","parentId","processParentLayer","processVisualLayer","processShapeLayerMultiItem","strategy","processTransformSplitLayer","colorAnimation","fullAnimation","rawPosition","itemScale","basePosition","shapeIdx","shapeItemId","shapeOffsetX","shapeOffsetY","shapePosition","shapeComponentId","shapeItem","DEFAULT_PLAYER_VERSION","web","native","assembleScene","finalDuration","deriveDuration","timelineAssetId","objectBindingTrackRefs","pi","tracks","compositionComponentId","compositionId","sceneBindings","allItemRefs","timelineAsset","composition","startTime","mapCompositionEndBehavior","previewSize","camera","fov","far","near","clipMode","backgroundColor","colorToRoundedRgba","version","JSONSceneVersion","playerVersion","fonts","plugins","compositions","geometries","materials","shaders","bins","animations","outPoint","inPoint","eb","IREndBehavior","Loop","Hold","applyParenting","layers","layerByIndex","Map","itemById","parentLayer","parentItemId","parentAnchor","adjustX","adjustY","applyMasks","lookup","maskSlotMeta","componentById","comp","maskData","mask","isMaskExactCrop","layerItemId","getItemId","layerComponentId","getComponentId","buildMaskForLayer","getPrimaryPath","maskItemId","maskComponentId","maskBounds","getMaskBounds","anchorX","anchorY","maskPosX","cx","maskPosY","cy","timing","maskDuration","layerIsParent","isParentLayer","isAutoMask","maskArea","hasDescendants","hasClaimableRendererDescendants","maskItem","maskComponent","isSimpleRectMask","roundness","isMask","alphaMaskEnabled","buildPolygonMaskComponent","applyMaskReferenceToDescendants","targetComponent","buildMaskRef","area","maskTrackId","reference","inverted","visit","targetParentId","endsWith","componentRefs","compRef","shouldClaimMaskSlot","hasExistingMask","existing","isCurrentAutoMask","currentMaskArea","computePointBounds","minX","Infinity","minY","maxX","maxY","min","maskW","maskH","precompW","precompH","every","e","bounds","customPoints","customEasingIns","customEasingOuts","customIndexes","idx","pt","ei","eo","applyGeMaskRemap","geComponentIdToNewId","oldId","newId","normalizeChildVisibilityByParentDelays","transformOnlyParentLinkItemIds","Set","processedByItemId","miscById","misc","advanceTransformOnlyParentLinkParents","effectiveDelayCache","getEffectiveDelay","visited","has","add","sortedItems","topologicalSort","parentItem","originalDelay","originalDuration","effectiveDelay","parentDuration","isPrecompChild","newDuration","timeDiff","syncTimelineClips","parentAdvanceMap","parentExtendMap","childDelay","childDuration","parentDelay","advance","childEnd","parentEnd","extend","allParentIds","newDelay","processed","obt","childRef","childTrack","sorted","processedItem","trackType","applyPostProcess","state","applyParentingStep","applySharedMaskPostProcess","applyGeMaskRemapStep","applyVisibilityStep","maskLookup","convertIRToGE","validateIRCompositionWithWarnings","parentIndexSet","workingIR","getLayersWithExtendedParentEndFrames","processLayer","reverse","clonedLayers","maxEnd","child","buildPoolIndex","pool","entry","resolveDataPath","ref","resolveDataPathId","reverseEndBehavior","geBehavior","Stop","reverseCompositionEndBehavior","buildSceneContext","scene","find","c","Error","bg","compositionName","imageById","textureById","itemIdToTrackId","buildSceneBindings","compositionComponent","findCompositionComponent","bindings","binding","compRefs","getCompositionItemIds","itemRefs","parseTimeline","objectBindingTrack","childRefs","transformAsset","spriteColorAsset","assetRef","convert3dTo2dPoint","effectiveRatio","px","py","parseStaticTransform","itemTransform","channels","pos2d","sv","isDefault","hasRotation","inverseLerp","range","parseBezierKeyframes","segments","extractSegments","firstSeg","hasPrependedHold","shift","isHold","prevInCpX","prevInCpY","prevT0","prevV0","prevT1","prevV1","lastSeg","lastT1","lastV1","lastFrameTime","lastInTangent","data","nextEntry","nextType","nextData","parsePositionTimingKeyframes","parseTransformAnimation","posOverLifetime","posAnim","parsePositionAnimation","rotOverLifetime","rotResult","parseRotationAnimation","scaleAnim","parseScaleAnimation","parseOpacityAnimation","valueType","pathData","payload","controlPointsRaw","timingKfs","startIdx","firstPP","secondPP","pendingSpatialIn","kfIndex","pendingSI","segIdx","cp1Idx","cp2Idx","ppStart","ppEnd","ppStart2d","ppEnd2d","cp1_2d","cp2_2d","xData","yData","zData","parseScalarChannel","hasMultiAxis","hasXOrY","vecKeyframes","xKeyframed","yKeyframed","zKeyframed","xKfs","yKfs","zKfs","allTimes","sortedTimes","sort","xv","findValueAtTime","yv","zv","defaultValue","IR_BLEND_MODE_BY_GE","IRBlendMode","reverseBlendMode","geCode","parseComponent","compId","parseSpriteComponent","parseTextComponent","parseShapeComponent","rawMask","textureRef","sourceRef","image","isWhite","textAlignNum","parseShapeOptions","geType","reverseShapePrimitiveType","xSize","ySize","shape","shapeRec","reverseScaledNumber","reverseRawNumber","geFills","f","reverseShapePaint","geStrokes","s","geStrokeWidth","geStrokeCap","reverseLineCap","geStrokeJoin","reverseLineJoin","geFillRule","reverseShapeFillRule","geShapes","reverseCustomPaths","GE_TO_SHAPE_PRIMITIVE_TYPE","typeMap","gradientStopsRaw","stops","pathEasingIns","pathEasingOuts","reverseLayerTiming","mergeNullSpritePairs","descriptors","childByParentId","desc","mergedChildIds","mergeMap","isNull","onlyChild","childType","isVisual","sameName","hasNoComponents","hasVisualComponent","hasSplitPairTiming","hasParentTransformSignal","hasNoIndependentChildTransform","sameNameChild","mergeNullAndSprite","merged","parentTimeline","childTimeline","parentEndBehavior","readItemEndBehavior","childEndBehavior","nearlyEqual","timeline","hasTransformPayload","hasNonDefaultScale","hasNonDefaultEulerHint","hasNonEmptyRecord","nullDesc","childDesc","shapeLayer","childTransform","childSize","parentGE2IR","childGE2IR","resolveHierarchy","idToIndex","idToDesc","parentIndex","parentDesc","getAnchorFromDesc","convertGEToIR","itemIds","reversedItemIds","parseItemToLayer","rawTransformPassthrough","componentData","staticChannels","animChannels","rawPassthrough","posOL","rotOL","sizeOL","rawColorOverLifetime","col","itemSize","hasStaticScale","scaleAdjustX","scaleAdjustY","totalX","totalY","ge2ir","readLottieSpecific","specific","lottie"],"mappings":"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","x_google_ignoreList":[0,1,2,3,11]}