From a27fa9c5756b9f1d8a06f51f536c3406e1bf9fc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel?= Date: Sun, 7 Jun 2026 20:00:22 -0400 Subject: [PATCH 1/2] feat(studio): motionpath arc motion + design panel redesign Arc motion, design panel redesign, timeline keyframe fixes, shape-adaptive overlays, export button, render controls, and auto-stamp with timed-ancestor guard for render parity. --- packages/core/src/generators/hyperframes.ts | 13 +- packages/core/src/parsers/gsapParser.test.ts | 135 ++++++++ packages/core/src/parsers/gsapParser.ts | 327 ++++++++++++++++++ packages/core/src/parsers/gsapSerialize.ts | 16 +- packages/core/src/runtime/init.ts | 60 ++++ .../helpers/studioMotionRenderScript.ts | 4 + packages/core/src/studio-api/routes/files.ts | 50 ++- packages/core/src/templates/constants.ts | 2 + packages/producer/build.mjs | 90 ++--- packages/studio/src/App.tsx | 1 + .../studio/src/components/StudioHeader.tsx | 13 + .../src/components/StudioRightPanel.tsx | 4 + .../src/components/editor/AnimationCard.tsx | 62 +++- .../src/components/editor/ArcPathControls.tsx | 131 +++++++ .../components/editor/BorderRadiusEditor.tsx | 8 +- .../src/components/editor/DomEditOverlay.tsx | 58 +++- .../components/editor/EaseCurveSection.tsx | 12 +- .../editor/GsapAnimationSection.tsx | 15 +- .../src/components/editor/KeyframeDiamond.tsx | 2 +- .../src/components/editor/LayersPanel.tsx | 24 +- .../components/editor/MotionPathOverlay.tsx | 146 ++++++++ .../src/components/editor/PropertyPanel.tsx | 77 ++--- .../components/editor/domEditingElement.ts | 17 + .../editor/manualEditingAvailability.ts | 2 +- .../src/components/editor/panelTokens.ts | 10 + .../components/editor/propertyPanelColor.tsx | 4 +- .../components/editor/propertyPanelFill.tsx | 2 +- .../components/editor/propertyPanelHelpers.ts | 17 +- .../editor/propertyPanelMediaSection.tsx | 2 +- .../editor/propertyPanelPrimitives.tsx | 63 ++-- .../editor/propertyPanelSections.tsx | 10 +- .../src/components/renders/RenderQueue.tsx | 221 ++++++------ .../components/renders/RenderQueueItem.tsx | 26 +- .../studio/src/contexts/DomEditContext.tsx | 6 + .../studio/src/hooks/gsapRuntimeKeyframes.ts | 99 ++++-- .../studio/src/hooks/useDomEditSession.ts | 21 ++ .../studio/src/hooks/useGsapScriptCommits.ts | 57 +++ .../studio/src/hooks/useGsapTweenCache.ts | 12 +- packages/studio/src/utils/gsapSoftReload.ts | 38 +- packages/studio/tailwind.config.js | 15 + 40 files changed, 1530 insertions(+), 342 deletions(-) create mode 100644 packages/studio/src/components/editor/ArcPathControls.tsx create mode 100644 packages/studio/src/components/editor/MotionPathOverlay.tsx create mode 100644 packages/studio/src/components/editor/panelTokens.ts diff --git a/packages/core/src/generators/hyperframes.ts b/packages/core/src/generators/hyperframes.ts index 68307921b..f8da4e69c 100644 --- a/packages/core/src/generators/hyperframes.ts +++ b/packages/core/src/generators/hyperframes.ts @@ -7,7 +7,12 @@ import { } from "../core.types"; import type { GsapAnimation } from "../parsers/gsapParser"; import { serializeGsapAnimations, keyframesToGsapAnimations } from "../parsers/gsapParser"; -import { GSAP_CDN, BASE_STYLES, ZOOM_CONTAINER_STYLES } from "../templates/constants"; +import { + GSAP_CDN, + MOTIONPATH_CDN, + BASE_STYLES, + ZOOM_CONTAINER_STYLES, +} from "../templates/constants"; const GOOGLE_FONTS_BASE = "https://fonts.googleapis.com/css2"; const FONT_WEIGHTS: Record = { @@ -337,6 +342,10 @@ export function generateHyperframesHtml( : ""; const gsapCdnTag = includeScripts ? ` ` : ""; + const motionPathCdnTag = + includeScripts && gsapScript && /motionPath\s*[:{]/.test(gsapScript) + ? `\n ` + : ""; const gsapScriptTag = includeScripts ? `