Skip to content

Commit 8371f42

Browse files
committed
feat(studio): hide text panel for elements inside locked compositions
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.
1 parent 335ec45 commit 8371f42

2 files changed

Lines changed: 8 additions & 1 deletion

File tree

packages/studio/src/components/editor/domEditingLayers.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import type {
1212
} from "./domEditingTypes";
1313
import {
1414
buildStableSelector,
15+
findClosestByAttribute,
1516
getCuratedComputedStyles,
1617
getDataAttributes,
1718
getInlineStyles,
@@ -318,6 +319,7 @@ export function resolveDomEditSelection(
318319
compositionPath,
319320
compositionSrc,
320321
isCompositionHost: Boolean(compositionSrc),
322+
isInsideLockedComposition: Boolean(findClosestByAttribute(current, ["data-timeline-locked"])),
321323
label: buildElementLabel(current),
322324
tagName: current.tagName.toLowerCase(),
323325
boundingBox: {
@@ -488,7 +490,11 @@ export function getDomEditTargetKey(
488490
}
489491

490492
export function isTextEditableSelection(selection: DomEditSelection): boolean {
491-
return selection.textFields.length > 0 && !selection.isCompositionHost;
493+
return (
494+
selection.textFields.length > 0 &&
495+
!selection.isCompositionHost &&
496+
!selection.isInsideLockedComposition
497+
);
492498
}
493499

494500
// buildElementAgentPrompt is in domEditingAgentPrompt.ts

packages/studio/src/components/editor/domEditingTypes.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ export interface DomEditSelection extends PatchTarget {
7878
compositionPath: string;
7979
compositionSrc?: string;
8080
isCompositionHost: boolean;
81+
isInsideLockedComposition: boolean;
8182
boundingBox: { x: number; y: number; width: number; height: number };
8283
textContent: string | null;
8384
dataAttributes: Record<string, string>;

0 commit comments

Comments
 (0)