From 8371f42aed9d276ec8e64cd101ea00723f68dfa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel?= Date: Wed, 20 May 2026 02:13:25 -0400 Subject: [PATCH] feat(studio): hide text panel for elements inside locked compositions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Elements inside a data-timeline-locked sub-composition now have the TEXT property panel hidden. These elements are JS-generated — editing them in the panel won't persist since the script rebuilds the DOM on load. Uses findClosestByAttribute to detect the locked ancestor. --- packages/studio/src/components/editor/domEditingLayers.ts | 8 +++++++- packages/studio/src/components/editor/domEditingTypes.ts | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/studio/src/components/editor/domEditingLayers.ts b/packages/studio/src/components/editor/domEditingLayers.ts index 97711583d..ff1fc9fce 100644 --- a/packages/studio/src/components/editor/domEditingLayers.ts +++ b/packages/studio/src/components/editor/domEditingLayers.ts @@ -12,6 +12,7 @@ import type { } from "./domEditingTypes"; import { buildStableSelector, + findClosestByAttribute, getCuratedComputedStyles, getDataAttributes, getInlineStyles, @@ -318,6 +319,7 @@ export function resolveDomEditSelection( compositionPath, compositionSrc, isCompositionHost: Boolean(compositionSrc), + isInsideLockedComposition: Boolean(findClosestByAttribute(current, ["data-timeline-locked"])), label: buildElementLabel(current), tagName: current.tagName.toLowerCase(), boundingBox: { @@ -488,7 +490,11 @@ export function getDomEditTargetKey( } export function isTextEditableSelection(selection: DomEditSelection): boolean { - return selection.textFields.length > 0 && !selection.isCompositionHost; + return ( + selection.textFields.length > 0 && + !selection.isCompositionHost && + !selection.isInsideLockedComposition + ); } // buildElementAgentPrompt is in domEditingAgentPrompt.ts diff --git a/packages/studio/src/components/editor/domEditingTypes.ts b/packages/studio/src/components/editor/domEditingTypes.ts index b11fc519d..52446ed89 100644 --- a/packages/studio/src/components/editor/domEditingTypes.ts +++ b/packages/studio/src/components/editor/domEditingTypes.ts @@ -78,6 +78,7 @@ export interface DomEditSelection extends PatchTarget { compositionPath: string; compositionSrc?: string; isCompositionHost: boolean; + isInsideLockedComposition: boolean; boundingBox: { x: number; y: number; width: number; height: number }; textContent: string | null; dataAttributes: Record;