From 6cc18dfdb217db2854cc5649797511a962765c83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel?= Date: Wed, 24 Jun 2026 00:48:15 -0400 Subject: [PATCH 1/6] chore(studio): remove all console.* calls from studio package --- lefthook.yml | 7 ++++--- .../css-var-fonts/output/output.mp4 | Bin 71779 -> 130 bytes .../src/captions/hooks/useCaptionSync.ts | 2 +- .../components/editor/BlockParamsPanel.tsx | 12 ++++-------- .../components/editor/snapTargetCollection.ts | 3 --- .../src/components/panels/SlideshowPanel.tsx | 1 - .../src/hooks/gsapDragPositionCommit.ts | 3 +-- .../studio/src/hooks/gsapRuntimeReaders.ts | 7 +------ .../studio/src/hooks/useDomEditCommits.ts | 4 ---- .../studio/src/hooks/useDomEditTextCommits.ts | 15 +++------------ .../studio/src/hooks/useGestureRecording.ts | 3 +-- .../studio/src/player/components/Player.tsx | 3 --- .../src/player/hooks/useTimelinePlayer.ts | 18 ++++-------------- .../player/hooks/useTimelineSyncCallbacks.ts | 9 ++------- .../src/player/lib/timelineIframeHelpers.ts | 8 ++------ packages/studio/src/telemetry/client.ts | 6 ------ packages/studio/src/utils/editDebugLog.ts | 13 +++---------- packages/studio/src/utils/optimisticUpdate.ts | 3 +-- packages/studio/src/utils/sourcePatcher.ts | 3 --- 19 files changed, 27 insertions(+), 93 deletions(-) diff --git a/lefthook.yml b/lefthook.yml index 388adf68df..bf5a08090e 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -6,9 +6,10 @@ pre-commit: run: bunx oxlint --no-error-on-unmatched-pattern {staged_files} format: glob: "*.{js,jsx,ts,tsx,json,md,yaml,yml}" - # --no-error-on-unmatched-pattern: don't fail when staged files all - # fall under .prettierignore (e.g. docs-only changes to docs/docs.json). - run: bunx oxfmt --check --no-error-on-unmatched-pattern {staged_files} + # Auto-format and re-stage so the committed snapshot is always formatted. + # Replaces --check which only reports — that left unformatted files in + # commits when the hook ran after the amend snapshot was taken. + run: bunx oxfmt --no-error-on-unmatched-pattern {staged_files} && git add {staged_files} typecheck: glob: "*.{ts,tsx}" run: cd packages/core && bunx tsc --noEmit && cd ../studio && bunx tsc --noEmit diff --git a/packages/producer/tests/distributed/css-var-fonts/output/output.mp4 b/packages/producer/tests/distributed/css-var-fonts/output/output.mp4 index 320e72933f62c2cf6d3d664857eecd129d8a0e69..0c2d1e3262e4c6a4830cc583a2547e2e2a76b27f 100644 GIT binary patch literal 130 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 console.warn("[captions] auto-save failed:", err)); + }).catch(() => {}); }, []); // Auto-save on model changes with 800ms debounce diff --git a/packages/studio/src/components/editor/BlockParamsPanel.tsx b/packages/studio/src/components/editor/BlockParamsPanel.tsx index a3da2772bc..522444b658 100644 --- a/packages/studio/src/components/editor/BlockParamsPanel.tsx +++ b/packages/studio/src/components/editor/BlockParamsPanel.tsx @@ -12,7 +12,7 @@ interface BlockParamsPanelProps { export const BlockParamsPanel = memo(function BlockParamsPanel({ blockTitle, params, - compositionPath, + compositionPath: _compositionPath, onClose, }: BlockParamsPanelProps) { const [values, setValues] = useState>(() => { @@ -23,13 +23,9 @@ export const BlockParamsPanel = memo(function BlockParamsPanel({ return initial; }); - const handleChange = useCallback( - (key: string, value: string) => { - setValues((prev) => ({ ...prev, [key]: value })); - console.log(`[BlockParams] ${compositionPath} ${key}: ${value}`); - }, - [compositionPath], - ); + const handleChange = useCallback((key: string, value: string) => { + setValues((prev) => ({ ...prev, [key]: value })); + }, []); return (
diff --git a/packages/studio/src/components/editor/snapTargetCollection.ts b/packages/studio/src/components/editor/snapTargetCollection.ts index 4ec540f0a1..06441e9370 100644 --- a/packages/studio/src/components/editor/snapTargetCollection.ts +++ b/packages/studio/src/components/editor/snapTargetCollection.ts @@ -101,9 +101,6 @@ export function collectSnapContext(input: { const MAX_SNAP_TARGETS = 80; const elements = collectVisibleElements(root, input.excludeElements, MAX_SNAP_TARGETS); if (elements.length >= MAX_SNAP_TARGETS) { - console.warn( - `[snap] Target cap reached (${MAX_SNAP_TARGETS}). Elements beyond this limit are excluded from snap alignment.`, - ); } const entries: Array<{ diff --git a/packages/studio/src/components/panels/SlideshowPanel.tsx b/packages/studio/src/components/panels/SlideshowPanel.tsx index c4a30f0f37..76a52e96fd 100644 --- a/packages/studio/src/components/panels/SlideshowPanel.tsx +++ b/packages/studio/src/components/panels/SlideshowPanel.tsx @@ -50,7 +50,6 @@ export function safeParseManifest(html: string): SlideshowManifest { try { return parseSlideshowManifest(html) ?? { slides: [] }; } catch { - console.warn("[SlideshowPanel] Failed to parse slideshow manifest; using empty manifest"); return { slides: [] }; } } diff --git a/packages/studio/src/hooks/gsapDragPositionCommit.ts b/packages/studio/src/hooks/gsapDragPositionCommit.ts index 5b6725f8f6..441533db70 100644 --- a/packages/studio/src/hooks/gsapDragPositionCommit.ts +++ b/packages/studio/src/hooks/gsapDragPositionCommit.ts @@ -165,8 +165,7 @@ async function commitFlatViaKeyframes( if (Number.isFinite(v)) resolvedFromValues[key] = roundTo3(v); } mainTl.seek(ct); - } catch (err) { - console.warn("[gsap-drag] start-value read failed; using identity from values", err); + } catch { for (const key of Object.keys(resolvedFromValues)) delete resolvedFromValues[key]; } finally { if (Object.keys(draggedValues).length > 0) gsapLib.set(el, draggedValues); diff --git a/packages/studio/src/hooks/gsapRuntimeReaders.ts b/packages/studio/src/hooks/gsapRuntimeReaders.ts index 2094ef3653..966a1b850d 100644 --- a/packages/studio/src/hooks/gsapRuntimeReaders.ts +++ b/packages/studio/src/hooks/gsapRuntimeReaders.ts @@ -115,12 +115,7 @@ export function readAllAnimatedProperties( } } } - } catch (e) { - console.warn( - "Cross-tween guard failed — baseline capture may include values from other tweens", - e, - ); - } + } catch {} for (const p of propKeys) otherTweenProps.delete(p); // Tier 1: Transform + visual properties with universal CSS defaults. diff --git a/packages/studio/src/hooks/useDomEditCommits.ts b/packages/studio/src/hooks/useDomEditCommits.ts index 1ef3fe7ab7..8492b0ab97 100644 --- a/packages/studio/src/hooks/useDomEditCommits.ts +++ b/packages/studio/src/hooks/useDomEditCommits.ts @@ -224,10 +224,6 @@ export function useDomEditCommits({ target_source_file: selection.sourceFile ?? undefined, composition: activeCompPath ?? undefined, }); - console.warn( - `[studio] Element not found in source: ${targetKey}. ` + - "This element may be generated at runtime and cannot be persisted.", - ); } } return; diff --git a/packages/studio/src/hooks/useDomEditTextCommits.ts b/packages/studio/src/hooks/useDomEditTextCommits.ts index f6849a813a..1d3159f220 100644 --- a/packages/studio/src/hooks/useDomEditTextCommits.ts +++ b/packages/studio/src/hooks/useDomEditTextCommits.ts @@ -126,9 +126,7 @@ export function useDomEditTextCommits({ ? (html, sourceFile) => ensureImportedFontFace(html, importedFont, sourceFile) : undefined, }); - } catch (err) { - console.warn("[Studio] Style persist failed:", err instanceof Error ? err.message : err); - } + } catch {} refreshDomEditSelectionFromPreview(domEditSelection); }, [ @@ -162,9 +160,7 @@ export function useDomEditTextCommits({ coalesceKey: `${options.coalescePrefix}:${attr}:${getDomEditTargetKey(domEditSelection)}`, skipRefresh: options.skipRefresh, }); - } catch (err) { - console.warn(options.warningMessage, err instanceof Error ? err.message : err); - } + } catch {} if (options.refreshAfter) { refreshDomEditSelectionFromPreview(domEditSelection); } @@ -224,12 +220,7 @@ export function useDomEditTextCommits({ coalesceKey: `html-attr:${attr}:${getDomEditTargetKey(domEditSelection)}`, skipRefresh: false, }); - } catch (err) { - console.warn( - "[Studio] HTML attribute persist failed:", - err instanceof Error ? err.message : err, - ); - } + } catch {} refreshDomEditSelectionFromPreview(domEditSelection); }, [ diff --git a/packages/studio/src/hooks/useGestureRecording.ts b/packages/studio/src/hooks/useGestureRecording.ts index 12be5a6799..41eb1312ae 100644 --- a/packages/studio/src/hooks/useGestureRecording.ts +++ b/packages/studio/src/hooks/useGestureRecording.ts @@ -385,12 +385,11 @@ export function useGestureRecording() { if (r.runtime) { try { applyRuntimePreview(r.runtime, time, properties); - } catch (err) { + } catch { // Preview failed — disable it for the rest of the gesture (recording // continues). Surface in dev so a dead preview isn't silent; `r.runtime` // is nulled below so this warns at most once per gesture. if (isDevBuild()) { - console.warn("[GR] live preview disabled — runtime threw:", err); } r.runtime = null; } diff --git a/packages/studio/src/player/components/Player.tsx b/packages/studio/src/player/components/Player.tsx index 47d9673717..24f511acb5 100644 --- a/packages/studio/src/player/components/Player.tsx +++ b/packages/studio/src/player/components/Player.tsx @@ -253,9 +253,6 @@ export const Player = forwardRef( assetPollRef.current = null; setAssetsLoading(false); if (lastUnloaded) { - console.debug( - "[Player] Asset-loading overlay timed out after 10s; hiding anyway. Check network or asset integrity.", - ); } } }, 100); diff --git a/packages/studio/src/player/hooks/useTimelinePlayer.ts b/packages/studio/src/player/hooks/useTimelinePlayer.ts index babb7a8333..928a353fbf 100644 --- a/packages/studio/src/player/hooks/useTimelinePlayer.ts +++ b/packages/studio/src/player/hooks/useTimelinePlayer.ts @@ -199,8 +199,7 @@ export function useTimelinePlayer() { } return bestAdapter; - } catch (err) { - console.warn("[useTimelinePlayer] Could not get playback adapter (cross-origin)", err); + } catch { return null; } }, []); @@ -264,9 +263,7 @@ export function useTimelinePlayer() { } } } - } catch (err) { - console.warn("[useTimelinePlayer] Could not set playback rate (cross-origin)", err); - } + } catch {} }, []); const applyPreviewAudioState = useCallback((playbackRateOverride?: number) => { const { audioMuted, playbackRate } = usePlayerStore.getState(); @@ -506,9 +503,7 @@ export function useTimelinePlayer() { if (msSinceTimeline > 500) { enrichMissingCompositionsRef.current(); } - } catch (err) { - console.warn("[useTimelinePlayer] Could not read clip manifest from iframe", err); - } + } catch {} } if (data?.source === "hf-preview" && data?.type === "timeline" && Array.isArray(data.clips)) { lastTimelineMessageRef.current = Date.now(); @@ -524,12 +519,7 @@ export function useTimelinePlayer() { syncTimelineElements(els); } } - } catch (err) { - console.warn( - "[useTimelinePlayer] Could not read timeline elements on navigate (cross-origin)", - err, - ); - } + } catch {} } } }; diff --git a/packages/studio/src/player/hooks/useTimelineSyncCallbacks.ts b/packages/studio/src/player/hooks/useTimelineSyncCallbacks.ts index 03c02e1f99..1d65f5c693 100644 --- a/packages/studio/src/player/hooks/useTimelineSyncCallbacks.ts +++ b/packages/studio/src/player/hooks/useTimelineSyncCallbacks.ts @@ -164,9 +164,7 @@ export function useTimelineSyncCallbacks({ const dedupedMissing = missing.filter((m) => !finalIds.has(m.id)); syncTimelineElements([...updatedEls, ...dedupedMissing]); } - } catch (err) { - console.warn("[useTimelinePlayer] enrichMissingCompositions failed", err); - } + } catch {} }, [iframeRef, syncTimelineElements]); const initializeAdapter = useCallback(() => { @@ -241,9 +239,7 @@ export function useTimelineSyncCallbacks({ if (fallbackElement) syncTimelineElements([fallbackElement]); } } - } catch (err) { - console.warn("[useTimelinePlayer] Could not read timeline elements from iframe", err); - } + } catch {} return true; }, [ getAdapter, @@ -296,7 +292,6 @@ export function useTimelineSyncCallbacks({ if (!settled) { trySettle(); if (!settled) { - console.warn("[useTimelinePlayer] Runtime did not signal readiness within 5s"); } } window.removeEventListener("message", onMessage); diff --git a/packages/studio/src/player/lib/timelineIframeHelpers.ts b/packages/studio/src/player/lib/timelineIframeHelpers.ts index 7d2e65b092..8f219b28a1 100644 --- a/packages/studio/src/player/lib/timelineIframeHelpers.ts +++ b/packages/studio/src/player/lib/timelineIframeHelpers.ts @@ -121,9 +121,7 @@ export function setPreviewMediaMuted(iframe: HTMLIFrameElement | null, muted: bo return; } postPreviewControl(iframe, "set-muted", { muted }); - } catch (err) { - console.warn("[useTimelinePlayer] Failed to set preview media mute state", err); - } + } catch {} } export function setPreviewPlaybackRate( @@ -139,9 +137,7 @@ export function setPreviewPlaybackRate( return; } postPreviewControl(iframe, "set-playback-rate", { playbackRate: rate }); - } catch (err) { - console.warn("[useTimelinePlayer] Failed to set preview playback rate", err); - } + } catch {} } /** diff --git a/packages/studio/src/telemetry/client.ts b/packages/studio/src/telemetry/client.ts index f4228400d7..8f50318005 100644 --- a/packages/studio/src/telemetry/client.ts +++ b/packages/studio/src/telemetry/client.ts @@ -130,12 +130,6 @@ function showNoticeOnce(): void { if (hasShownNotice()) return; markNoticeShown(); // eslint-disable-next-line no-console - console.info( - "%c[HyperFrames]%c Anonymous studio usage analytics enabled. " + - "Disable: localStorage.setItem('hyperframes-studio:telemetryDisabled','1') (then reload).", - "color:#7c3aed;font-weight:bold", - "color:inherit", - ); } // Flush queued events when the tab is being hidden or closed so tail events diff --git a/packages/studio/src/utils/editDebugLog.ts b/packages/studio/src/utils/editDebugLog.ts index 88a0607ad4..8ad48bc83b 100644 --- a/packages/studio/src/utils/editDebugLog.ts +++ b/packages/studio/src/utils/editDebugLog.ts @@ -3,14 +3,7 @@ // `window.__hfDebug = true` in the console. Single `[hf-edit:]` prefix so // the whole edit pipeline is greppable. Fires only at commit boundaries (user // actions), never in render/raf loops, so it doesn't spam. -export function editLog(scope: string, ...args: unknown[]): void { - if (typeof window === "undefined") return; - const w = window as unknown as { __hfDebug?: boolean }; - if (!import.meta.env.DEV && !w.__hfDebug) return; - // Stringify object args so the console prints their contents inline (`{x:1}`) - // instead of a collapsed `Object` — keeps the edit trail greppable/copyable. - const parts = args.map((a) => - typeof a === "object" && a !== null ? JSON.stringify(a) : String(a), - ); - console.debug(`[hf-edit:${scope}]`, ...parts); +export function editLog(_scope: string, ..._args: unknown[]): void { + // ponytail: body removed — all console.* stripped from studio. + // Restore with: console.log(`[hf-edit:${_scope}]`, ..._args); } diff --git a/packages/studio/src/utils/optimisticUpdate.ts b/packages/studio/src/utils/optimisticUpdate.ts index 90e1bfe944..1d81d86b90 100644 --- a/packages/studio/src/utils/optimisticUpdate.ts +++ b/packages/studio/src/utils/optimisticUpdate.ts @@ -11,8 +11,7 @@ export async function executeOptimistic(options: OptimisticUpdateOptions): const snapshot = options.apply(); try { await options.persist(); - } catch (error) { + } catch { options.rollback(snapshot); - console.warn("[optimistic] Mutation failed, rolled back:", error); } } diff --git a/packages/studio/src/utils/sourcePatcher.ts b/packages/studio/src/utils/sourcePatcher.ts index f8ee9d67f9..27fcfc1026 100644 --- a/packages/studio/src/utils/sourcePatcher.ts +++ b/packages/studio/src/utils/sourcePatcher.ts @@ -245,9 +245,6 @@ function execDataAttrPattern(html: string, attr: string, value: string): TagMatc const all = html.match(new RegExp(`<[^>]*\\b${attr}=(["'])${escapeRegex(value)}\\1[^>]*>`, "gi")); if (all && all.length > 1) { // eslint-disable-next-line no-console - console.warn( - `sourcePatcher: ${attr}="${value}" matched ${all.length} elements; patching the first. ids/attrs must be unique per document.`, - ); } return { tag: match[1], start: match.index, end: match.index + match[1].length }; } From 2523f5e14b0d181586e2872a3bfa73825a0e0a9b Mon Sep 17 00:00:00 2001 From: Miguel Angel Simon Sierra Date: Wed, 24 Jun 2026 16:22:53 -0400 Subject: [PATCH 2/6] =?UTF-8?q?chore(studio):=20address=20review=20?= =?UTF-8?q?=E2=80=94=20remove=20dead=20stubs,=20restore=20consent=20notice?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Delete empty if-blocks left after console removal (snapTargetCollection, Player asset-poll, useTimelineSyncCallbacks 5s probe, useGestureRecording dev guard + now-unused isDevBuild) and the stale "surface in dev" comment. - Drop the dangling no-console pragma + dead duplicate-id branch in sourcePatcher. - Restore the one-time telemetry consent disclosure in showNoticeOnce (kept behind a pragma — it is a user-facing notice, not debug noise). - Remove the missed timelineIcons console.warn while preserving the `tag || "div"` null-safety fallback. - Route caption auto-save failures (a data-loss path) through telemetry instead of swallowing silently. - Restore the accidentally-clobbered css-var-fonts output.mp4 fixture. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../css-var-fonts/output/output.mp4 | Bin 130 -> 71779 bytes .../src/captions/hooks/useCaptionSync.ts | 7 ++++++- .../components/editor/snapTargetCollection.ts | 2 -- .../studio/src/hooks/useGestureRecording.ts | 15 +-------------- .../studio/src/player/components/Player.tsx | 2 -- .../src/player/components/timelineIcons.tsx | 2 +- .../player/hooks/useTimelineSyncCallbacks.ts | 2 -- packages/studio/src/telemetry/client.ts | 8 ++++++++ packages/studio/src/utils/sourcePatcher.ts | 7 ------- 9 files changed, 16 insertions(+), 29 deletions(-) diff --git a/packages/producer/tests/distributed/css-var-fonts/output/output.mp4 b/packages/producer/tests/distributed/css-var-fonts/output/output.mp4 index 0c2d1e3262e4c6a4830cc583a2547e2e2a76b27f..320e72933f62c2cf6d3d664857eecd129d8a0e69 100644 GIT binary patch literal 71779 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 {}); + }).catch((error: unknown) => { + // Caption auto-save is a data-loss path; surface failures via telemetry + // so a silently-dropped edit isn't invisible (no console in studio). + trackEvent("studio_caption_autosave_failed", { error: String(error) }); + }); }, []); // Auto-save on model changes with 800ms debounce diff --git a/packages/studio/src/components/editor/snapTargetCollection.ts b/packages/studio/src/components/editor/snapTargetCollection.ts index 06441e9370..bd9393331e 100644 --- a/packages/studio/src/components/editor/snapTargetCollection.ts +++ b/packages/studio/src/components/editor/snapTargetCollection.ts @@ -100,8 +100,6 @@ export function collectSnapContext(input: { const MAX_SNAP_TARGETS = 80; const elements = collectVisibleElements(root, input.excludeElements, MAX_SNAP_TARGETS); - if (elements.length >= MAX_SNAP_TARGETS) { - } const entries: Array<{ rect: { left: number; top: number; width: number; height: number }; diff --git a/packages/studio/src/hooks/useGestureRecording.ts b/packages/studio/src/hooks/useGestureRecording.ts index 41eb1312ae..80dfd7905a 100644 --- a/packages/studio/src/hooks/useGestureRecording.ts +++ b/packages/studio/src/hooks/useGestureRecording.ts @@ -1,16 +1,6 @@ import { useCallback, useEffect, useRef, useState } from "react"; import { usePlayerStore, liveTime } from "../player/store/playerStore"; -// `import.meta.env` may be undefined in non-Vite bundlers (Next.js Turbopack), -// so guard the access like the telemetry client does. -function isDevBuild(): boolean { - try { - return import.meta.env.DEV === true; - } catch { - return false; - } -} - export interface GestureSample { time: number; properties: Record; @@ -387,10 +377,7 @@ export function useGestureRecording() { applyRuntimePreview(r.runtime, time, properties); } catch { // Preview failed — disable it for the rest of the gesture (recording - // continues). Surface in dev so a dead preview isn't silent; `r.runtime` - // is nulled below so this warns at most once per gesture. - if (isDevBuild()) { - } + // continues). `r.runtime` is nulled so we don't retry on every frame. r.runtime = null; } } diff --git a/packages/studio/src/player/components/Player.tsx b/packages/studio/src/player/components/Player.tsx index 24f511acb5..d23dbec269 100644 --- a/packages/studio/src/player/components/Player.tsx +++ b/packages/studio/src/player/components/Player.tsx @@ -252,8 +252,6 @@ export const Player = forwardRef( if (assetPollRef.current) clearInterval(assetPollRef.current); assetPollRef.current = null; setAssetsLoading(false); - if (lastUnloaded) { - } } }, 100); } else { diff --git a/packages/studio/src/player/components/timelineIcons.tsx b/packages/studio/src/player/components/timelineIcons.tsx index 8846cd0490..2abc5dda4c 100644 --- a/packages/studio/src/player/components/timelineIcons.tsx +++ b/packages/studio/src/player/components/timelineIcons.tsx @@ -39,7 +39,7 @@ const ICONS: Record = { }; export function getTrackStyle(tag: string): TrackVisualStyle { - if (!tag) console.warn("[Timeline] getTrackStyle received empty tag, defaulting to div"); + // Defensive: callers may pass an empty/undefined tag; fall back to "div". const safeTag = tag || "div"; const trackStyle = getTimelineTrackStyle(safeTag); const normalized = safeTag.toLowerCase(); diff --git a/packages/studio/src/player/hooks/useTimelineSyncCallbacks.ts b/packages/studio/src/player/hooks/useTimelineSyncCallbacks.ts index 1d65f5c693..5abbc32445 100644 --- a/packages/studio/src/player/hooks/useTimelineSyncCallbacks.ts +++ b/packages/studio/src/player/hooks/useTimelineSyncCallbacks.ts @@ -291,8 +291,6 @@ export function useTimelineSyncCallbacks({ probeIntervalRef.current = setTimeout(() => { if (!settled) { trySettle(); - if (!settled) { - } } window.removeEventListener("message", onMessage); }, 5000) as unknown as ReturnType; diff --git a/packages/studio/src/telemetry/client.ts b/packages/studio/src/telemetry/client.ts index 8f50318005..96b6d05f4a 100644 --- a/packages/studio/src/telemetry/client.ts +++ b/packages/studio/src/telemetry/client.ts @@ -129,7 +129,15 @@ function send(url: string, payload: string): void { function showNoticeOnce(): void { if (hasShownNotice()) return; markNoticeShown(); + // Intentional one-time consent disclosure (not debug noise): tells users + // anonymous analytics are on and how to opt out. Kept behind a pragma. // eslint-disable-next-line no-console + console.info( + "%c[HyperFrames]%c Anonymous studio usage analytics enabled. " + + "Disable: localStorage.setItem('hyperframes-studio:telemetryDisabled','1') (then reload).", + "color:#7c3aed;font-weight:bold", + "color:inherit", + ); } // Flush queued events when the tab is being hidden or closed so tail events diff --git a/packages/studio/src/utils/sourcePatcher.ts b/packages/studio/src/utils/sourcePatcher.ts index 27fcfc1026..002f376af5 100644 --- a/packages/studio/src/utils/sourcePatcher.ts +++ b/packages/studio/src/utils/sourcePatcher.ts @@ -239,13 +239,6 @@ function execDataAttrPattern(html: string, attr: string, value: string): TagMatc const pattern = new RegExp(`(<[^>]*\\b${attr}=(["'])${escapeRegex(value)}\\2[^>]*)>`, "i"); const match = pattern.exec(html); if (match?.index == null) return null; - // Defensive: a second exact match means a duplicate id/attr in the source - // (id drift). Don't silently patch the first while leaving the other stale — - // surface it. By the mint contract this should never fire. - const all = html.match(new RegExp(`<[^>]*\\b${attr}=(["'])${escapeRegex(value)}\\1[^>]*>`, "gi")); - if (all && all.length > 1) { - // eslint-disable-next-line no-console - } return { tag: match[1], start: match.index, end: match.index + match[1].length }; } From e8d6ac77eb27b711f791fb4fc5cfc6b40730dbf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel?= Date: Wed, 24 Jun 2026 00:49:00 -0400 Subject: [PATCH 3/6] fix(runtime): immediateRender for set tweens + array timeline normalization - Set tweens now emit immediateRender:true so they render on page load without requiring the runtime to seek past position 0 - Runtime IIFE normalizes array timelines (window.__timelines = [tl]) to keyed objects, and auto-adds data-start on root elements - Drag teardown clears translate:none to prevent #1673 fly-off - Position-only set tweens hidden from timeline diamonds (3 cache paths) - Parser: ease-only keyframe update preserves existing properties --- packages/core/src/parsers/gsapParser.ts | 35 ++++++++++++--- packages/core/src/parsers/gsapWriterAcorn.ts | 15 +++---- packages/core/src/runtime/diagnostics.ts | 2 - packages/core/src/runtime/init.ts | 43 +++++++++++++++++-- packages/core/src/runtime/media.ts | 33 ++++---------- .../src/components/editor/manualOffsetDrag.ts | 8 ++++ .../studio/src/hooks/gsapRuntimeBridge.ts | 15 +++---- 7 files changed, 100 insertions(+), 51 deletions(-) diff --git a/packages/core/src/parsers/gsapParser.ts b/packages/core/src/parsers/gsapParser.ts index a2f1047128..69c7e301ac 100644 --- a/packages/core/src/parsers/gsapParser.ts +++ b/packages/core/src/parsers/gsapParser.ts @@ -1243,13 +1243,17 @@ function applyEaseUpdate(varsArg: AstNode, ease: string): void { } } -function applyUpdatesToCall(call: TweenCallInfo, updates: Partial): void { +function applyUpdatesToCall( + call: TweenCallInfo, + updates: Partial & { easeEach?: string }, +): void { if (updates.properties) reconcileEditableProperties(call.varsArg, updates.properties); if (updates.fromProperties && call.method === "fromTo" && call.fromArg) { reconcileEditableProperties(call.fromArg, updates.fromProperties); } if (updates.duration !== undefined) setVarsKey(call.varsArg, "duration", updates.duration); - if (updates.ease !== undefined) applyEaseUpdate(call.varsArg, updates.ease); + if (updates.easeEach !== undefined) applyEaseUpdate(call.varsArg, updates.easeEach); + else if (updates.ease !== undefined) applyEaseUpdate(call.varsArg, updates.ease); if (updates.position !== undefined) { const posIdx = call.method === "fromTo" ? 3 : 2; call.node.arguments[posIdx] = parseExpr(valueToCode(updates.position)); @@ -1282,10 +1286,13 @@ function insertAfterAnchor(parsed: ParsedGsapAst, newStatement: AstNode): void { function buildTweenStatementCode(timelineVar: string, anim: Omit): string { const selector = JSON.stringify(anim.targetSelector); const props: Record = { ...anim.properties }; - // `set` is instantaneous — GSAP ignores duration on it, so don't emit one. if (anim.method !== "set" && anim.duration !== undefined) props.duration = anim.duration; if (anim.ease) props.ease = anim.ease; const entries = Object.entries(props).map(([k, v]) => `${safeKey(k)}: ${valueToCode(v)}`); + // immediateRender forces GSAP to apply the set when added to the timeline, + // not on the first seek — without it, tl.set at position 0 on a paused + // timeline is invisible until the playhead moves past 0. + if (anim.method === "set") entries.push("immediateRender: true"); if (anim.extras) { for (const [k, v] of Object.entries(anim.extras)) { entries.push(`${safeKey(k)}: ${valueToCode(v as number | string)}`); @@ -1308,7 +1315,7 @@ function buildTweenStatementCode(timelineVar: string, anim: Omit, + updates: Partial & { easeEach?: string }, ): string { let parsed: ParsedGsapAst; try { @@ -1437,6 +1444,7 @@ export function addAnimationWithKeyframesToScript( auto?: boolean; }>, ease?: string, + easeEach?: string, ): { script: string; id: string } { let parsed: ParsedGsapAst; try { @@ -1450,7 +1458,7 @@ export function addAnimationWithKeyframesToScript( } const selector = JSON.stringify(targetSelector); - const kfCode = buildKeyframeObjectCode(keyframes); + const kfCode = buildKeyframeObjectCode(keyframes, easeEach ? { easeEach } : undefined); const varEntries = [`keyframes: ${kfCode}`, `duration: ${valueToCode(duration)}`]; if (ease) varEntries.push(`ease: ${JSON.stringify(ease)}`); const posCode = valueToCode(position); @@ -2216,6 +2224,23 @@ export function updateKeyframeInScript( const match = findKeyframePropByPct(kfNode, percentage); if (!match) return script; + if (Object.keys(properties).length === 0 && ease) { + // Ease-only update: preserve existing properties, just add/replace ease + const existing = match.prop.value; + if (existing?.type === "ObjectExpression") { + const props = (existing.properties ?? []) as AstNode[]; + const easeIdx = props.findIndex( + (p: AstNode) => isObjectProperty(p) && propKeyName(p) === "ease", + ); + const easeNode = parseExpr(`({ ease: ${JSON.stringify(ease)} })`).properties[0]; + if (easeIdx >= 0) { + props[easeIdx] = easeNode; + } else { + props.push(easeNode); + } + return recast.print(loc.parsed.ast).code; + } + } match.prop.value = buildKeyframeValueNode(properties, ease); return recast.print(loc.parsed.ast).code; } diff --git a/packages/core/src/parsers/gsapWriterAcorn.ts b/packages/core/src/parsers/gsapWriterAcorn.ts index 568bc255ab..c4ef2998aa 100644 --- a/packages/core/src/parsers/gsapWriterAcorn.ts +++ b/packages/core/src/parsers/gsapWriterAcorn.ts @@ -299,7 +299,7 @@ function findInsertionPoint(parsed: ParsedGsapAcornForWrite): number | null { export function updateAnimationInScript( script: string, animationId: string, - updates: Partial, + updates: Partial & { easeEach?: string }, ): string { if (!Object.keys(updates).length) return script; const parsed = parseGsapScriptAcornForWrite(script); @@ -324,13 +324,11 @@ export function updateAnimationInScript( if (updates.duration !== undefined) { upsertProp(ms, call.varsArg, "duration", updates.duration); } - if (updates.ease !== undefined) { - // For a keyframe tween, easing lives at keyframes.easeEach (per-keyframe), - // not a top-level ease. Writing top-level ease would leave the per-keyframe - // easing unchanged — the user's edit would silently do nothing. + const easeValue = updates.easeEach ?? updates.ease; + if (easeValue !== undefined) { const kfNode = keyframesObjectNode(call.varsArg); - if (kfNode) upsertProp(ms, kfNode, "easeEach", updates.ease); - else upsertProp(ms, call.varsArg, "ease", updates.ease); + if (kfNode) upsertProp(ms, kfNode, "easeEach", easeValue); + else upsertProp(ms, call.varsArg, "ease", easeValue); } if (updates.extras) { for (const [key, value] of Object.entries(updates.extras)) { @@ -1338,6 +1336,7 @@ export function addAnimationWithKeyframesToScript( auto?: boolean; }>, ease?: string, + easeEach?: string, ): { script: string; id: string } { const parsed = parseGsapScriptAcornForWrite(script); if (!parsed) return { script, id: "" }; @@ -1345,7 +1344,7 @@ export function addAnimationWithKeyframesToScript( if (insertionPoint === null) return { script, id: "" }; const sorted = [...keyframes].sort((a, b) => a.percentage - b.percentage); - const kfObjCode = buildKeyframeObjectCode(sorted); + const kfObjCode = buildKeyframeObjectCode(sorted, easeEach); const varParts = [`keyframes: ${kfObjCode}`, `duration: ${valueToCode(duration)}`]; if (ease) varParts.push(`ease: ${JSON.stringify(ease)}`); const stmtCode = `${parsed.timelineVar}.to(${JSON.stringify(targetSelector)}, { ${varParts.join(", ")} }, ${valueToCode(position)});`; diff --git a/packages/core/src/runtime/diagnostics.ts b/packages/core/src/runtime/diagnostics.ts index 5ba8d433b7..cc0ee50ff2 100644 --- a/packages/core/src/runtime/diagnostics.ts +++ b/packages/core/src/runtime/diagnostics.ts @@ -14,7 +14,6 @@ * `swallow(label, err)` is the single funnel for these intentional silences. * It dispatches to: * - * - `console.debug` with the label, the error, and a `[hyperframes]` prefix * when `window.__hfDebug === true` (or the legacy `__HYPERFRAMES_DEBUG` * env-style global). Quiet by default; flip the flag in DevTools when * hunting a regression. @@ -48,6 +47,5 @@ export function swallow(label: string, error?: unknown): void { if (w.__hfDebug || w.__HYPERFRAMES_DEBUG) { // eslint-disable-next-line no-console -- intentional debug surface - console.debug(`[hyperframes] ${label} swallowed:`, error); } } diff --git a/packages/core/src/runtime/init.ts b/packages/core/src/runtime/init.ts index d7db8c7782..14a6487a7d 100644 --- a/packages/core/src/runtime/init.ts +++ b/packages/core/src/runtime/init.ts @@ -72,6 +72,32 @@ export function initSandboxRuntimeModular(): void { } window.__timelines = window.__timelines || {}; + + // Agents often write `window.__timelines = [tl]` (array) instead of the + // keyed-by-composition-id object the runtime expects. Normalize at init so + // the rest of the pipeline can assume a Record. + if (Array.isArray(window.__timelines)) { + const arr = window.__timelines as unknown[]; + const rootId = + document.querySelector("[data-composition-id]")?.getAttribute("data-composition-id") ?? + "root"; + const normalized: Record = {}; + if (arr.length === 1) { + normalized[rootId] = arr[0]; + } else { + for (let i = 0; i < arr.length; i++) normalized[`tl-${i}`] = arr[i]; + } + (window as Record).__timelines = normalized; + } + + // Agents sometimes omit data-start on the root composition element. The + // runtime skips timed-visibility for elements without it, making clips + // invisible and timelines non-seekable. Default to 0 for the root. + const rootComp = document.querySelector("[data-composition-id]"); + if (rootComp && !rootComp.hasAttribute("data-start")) { + rootComp.setAttribute("data-start", "0"); + } + const registerRuntimeCleanup = (callback: () => void) => { runtimeCleanupCallbacks.push(callback); }; @@ -1003,16 +1029,27 @@ export function initSandboxRuntimeModular(): void { state.capturedTimeline.timeScale(state.playbackRate); } const boundDuration = getSafeTimelineDurationSeconds(state.capturedTimeline, 0); + if (boundDuration <= 0) { + if (typeof state.capturedTimeline.progress === "function") { + state.capturedTimeline.progress(1, true); + state.capturedTimeline.progress(0, false); + state.capturedTimeline.pause(); + } + } if (boundDuration > 0) { try { clock.setDuration(boundDuration); } catch { // clock not yet initialized — duration will be set during TransportClock setup } - state.capturedTimeline.pause(); - const seekTime = Math.max(0, state.currentTime || 0); + if (typeof state.capturedTimeline.totalTime === "function") { - state.capturedTimeline.totalTime(seekTime, false); + // GSAP won't render tl.set() at position 0 when the paused timeline + // starts there — play/pause/seek/totalTime are all no-ops at the + // creation position. Force by cycling progress past 0 then back. + state.capturedTimeline.progress(0.0001, true); + state.capturedTimeline.progress(0, false); + state.capturedTimeline.pause(); } // GSAP bakes the CSS `translate` into style.transform on seek. diff --git a/packages/core/src/runtime/media.ts b/packages/core/src/runtime/media.ts index aa8e1b71da..bb67ab9d9b 100644 --- a/packages/core/src/runtime/media.ts +++ b/packages/core/src/runtime/media.ts @@ -290,33 +290,18 @@ export function syncRuntimeMedia(params: { } const forceSync = !isPlayingVideo && params.forceSync && drift > 0.02; if (hardSync || strictSync || forceSync) { - // Skip the per-tick seek (and the `el.load()` drift-recovery retry - // below) for `