hyperframes 0.7.45 → 0.7.47

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.
@@ -1,4 +1,4 @@
1
- import{n as Qi}from"./index-CZUbpYhQ.js";/*!
1
+ import{n as Qi}from"./index-VsAbY3rl.js";/*!
2
2
  * Copyright (c) 2026-present, Vanilagy and contributors
3
3
  *
4
4
  * This Source Code Form is subject to the terms of the Mozilla Public
@@ -52,9 +52,12 @@ interface ClipManifestClip {
52
52
  start: number;
53
53
  duration: number;
54
54
  track: number;
55
+ zIndex?: number;
56
+ stackingContextId?: string | null;
55
57
  kind: "video" | "audio" | "image" | "element" | "composition";
56
58
  tagName: string | null;
57
59
  compositionId: string | null;
60
+ compositionAncestors?: string[];
58
61
  parentCompositionId: string | null;
59
62
  compositionSrc: string | null;
60
63
  assetUrl: string | null;
@@ -83,6 +86,16 @@ interface TimelineElement {
83
86
  start: number;
84
87
  duration: number;
85
88
  track: number;
89
+ /** Resolved z-index for stacking-aware timeline ordering. */
90
+ zIndex?: number;
91
+ /** True when the effective z-index was authored inline or through CSS, not auto. */
92
+ hasExplicitZIndex?: boolean;
93
+ /** Stacking context this element belongs to; root clips use the root composition id. */
94
+ stackingContextId?: string | null;
95
+ /** Nearest parent composition context, matching RuntimeTimelineClip. */
96
+ parentCompositionId?: string | null;
97
+ /** Composition ancestry from root to nearest parent, matching RuntimeTimelineClip. */
98
+ compositionAncestors?: string[];
86
99
  domId?: string;
87
100
  /** Stable `data-hf-id` attribute value — used as primary patch target when present */
88
101
  hfId?: string;
@@ -164,8 +177,10 @@ interface PlayerState {
164
177
  setAutoKeyframeEnabled: (enabled: boolean) => void;
165
178
  /** Multi-select: additional selected elements beyond selectedElementId. */
166
179
  selectedElementIds: Set<string>;
180
+ setSelection: (ids: Iterable<string>, anchor?: string | null) => void;
181
+ addSelectedElementId: (id: string) => void;
167
182
  toggleSelectedElementId: (id: string) => void;
168
- clearSelectedElementIds: () => void;
183
+ clearSelection: () => void;
169
184
  /** Keyframe data per element id, populated from parsed GSAP animations. */
170
185
  keyframeCache: Map<string, KeyframeCacheEntry>;
171
186
  setKeyframeCache: (elementId: string, data: KeyframeCacheEntry | undefined) => void;
@@ -179,7 +194,9 @@ interface PlayerState {
179
194
  setBeatDragging: (dragging: boolean) => void;
180
195
  setElements: (elements: TimelineElement[]) => void;
181
196
  setSelectedElementId: (id: string | null) => void;
182
- updateElement: (elementId: string, updates: Partial<Pick<TimelineElement, "start" | "duration" | "track" | "playbackStart" | "hidden">>) => void;
197
+ /** Move the selection anchor within an active multi-selection without collapsing it. */
198
+ setSelectionAnchor: (id: string | null) => void;
199
+ updateElement: (elementId: string, updates: Partial<Pick<TimelineElement, "start" | "duration" | "track" | "zIndex" | "hasExplicitZIndex" | "playbackStart" | "hidden">>) => void;
183
200
  setZoomMode: (mode: ZoomMode) => void;
184
201
  setManualZoomPercent: (percent: number) => void;
185
202
  setInPoint: (time: number | null) => void;
@@ -247,8 +264,77 @@ declare const liveTime: {
247
264
  };
248
265
  declare const usePlayerStore: zustand.UseBoundStore<zustand.StoreApi<PlayerState>>;
249
266
 
267
+ type TimelineLayerDropPlacement = {
268
+ type: "onto";
269
+ layerId: string;
270
+ } | {
271
+ type: "between";
272
+ beforeLayerId: string;
273
+ afterLayerId: string;
274
+ } | {
275
+ type: "above";
276
+ layerId: string;
277
+ } | {
278
+ type: "below";
279
+ layerId: string;
280
+ };
281
+ interface TimelineStackingZIndexChange {
282
+ key: string;
283
+ zIndex: number;
284
+ domId?: string;
285
+ selector?: string;
286
+ selectorIndex?: number;
287
+ sourceFile?: string;
288
+ }
289
+ interface TimelineStackingReorderIntent {
290
+ contextKey: string;
291
+ placement: TimelineLayerDropPlacement;
292
+ zIndexChanges: TimelineStackingZIndexChange[];
293
+ }
294
+
250
295
  type BlockedTimelineEditIntent = "move" | "resize-start" | "resize-end";
251
296
 
297
+ /**
298
+ * Source Patcher — Maps visual property edits back to source HTML files.
299
+ * Handles inline style updates, attribute changes, and text content.
300
+ */
301
+ interface PatchOperation {
302
+ type: "inline-style" | "attribute" | "text-content" | "html-attribute";
303
+ property: string;
304
+ value: string | null;
305
+ childSelector?: string;
306
+ childIndex?: number;
307
+ }
308
+ interface PatchTarget {
309
+ id?: string | null;
310
+ hfId?: string;
311
+ selector?: string;
312
+ selectorIndex?: number;
313
+ }
314
+ /**
315
+ * Find which source file contains an element by its ID.
316
+ */
317
+ declare function resolveSourceFile(elementId: string | null, selector: string, files: Record<string, string>): string | null;
318
+ /**
319
+ * Apply a patch operation to an HTML source file.
320
+ */
321
+ declare function applyPatch(html: string, elementId: string, op: PatchOperation): string;
322
+
323
+ interface TimelineGroupMoveChange {
324
+ element: TimelineElement;
325
+ start: number;
326
+ }
327
+ interface TimelineGroupResizeChange {
328
+ element: TimelineElement;
329
+ start: number;
330
+ duration: number;
331
+ playbackStart?: number;
332
+ }
333
+ interface TimelineGroupCommitOptions {
334
+ beforeTiming?: Promise<void>;
335
+ coalesceKey?: string;
336
+ }
337
+
252
338
  /**
253
339
  * Shared callback signatures for timeline editing operations.
254
340
  * Used by NLELayout, Timeline, and any component that passes through
@@ -269,9 +355,16 @@ interface TimelineDropCallbacks {
269
355
  }) => Promise<void> | void;
270
356
  }
271
357
  interface TimelineEditCallbacks {
272
- onMoveElement?: (element: TimelineElement, updates: Pick<TimelineElement, "start" | "track">) => Promise<void> | void;
358
+ onMoveElement?: (element: TimelineElement, updates: Pick<TimelineElement, "start" | "track"> & {
359
+ stackingReorder?: TimelineStackingReorderIntent | null;
360
+ }) => Promise<void> | void;
273
361
  onResizeElement?: (element: TimelineElement, updates: Pick<TimelineElement, "start" | "duration" | "playbackStart">) => Promise<void> | void;
362
+ onMoveElements?: (changes: TimelineGroupMoveChange[], options?: TimelineGroupCommitOptions) => Promise<void> | void;
363
+ onResizeElements?: (changes: TimelineGroupResizeChange[], options?: TimelineGroupCommitOptions) => Promise<void> | void;
364
+ onPreviewMoveElements?: (changes: TimelineGroupMoveChange[]) => void;
365
+ onPreviewResizeElements?: (changes: TimelineGroupResizeChange[]) => void;
274
366
  onToggleTrackHidden?: (track: number, hidden: boolean) => Promise<void> | void;
367
+ onToggleElementHidden?: (elementKey: string, hidden: boolean) => Promise<void> | void;
275
368
  onBlockedEditAttempt?: (element: TimelineElement, intent: BlockedTimelineEditIntent) => void;
276
369
  onSplitElement?: (element: TimelineElement, splitTime: number) => Promise<void> | void;
277
370
  onRazorSplit?: (element: TimelineElement, splitTime: number) => Promise<void> | void;
@@ -490,32 +583,6 @@ interface SourceEditorProps {
490
583
  }
491
584
  declare const SourceEditor: react.NamedExoticComponent<SourceEditorProps>;
492
585
 
493
- /**
494
- * Source Patcher — Maps visual property edits back to source HTML files.
495
- * Handles inline style updates, attribute changes, and text content.
496
- */
497
- interface PatchOperation {
498
- type: "inline-style" | "attribute" | "text-content" | "html-attribute";
499
- property: string;
500
- value: string | null;
501
- childSelector?: string;
502
- childIndex?: number;
503
- }
504
- interface PatchTarget {
505
- id?: string | null;
506
- hfId?: string;
507
- selector?: string;
508
- selectorIndex?: number;
509
- }
510
- /**
511
- * Find which source file contains an element by its ID.
512
- */
513
- declare function resolveSourceFile(elementId: string | null, selector: string, files: Record<string, string>): string | null;
514
- /**
515
- * Apply a patch operation to an HTML source file.
516
- */
517
- declare function applyPatch(html: string, elementId: string, op: PatchOperation): string;
518
-
519
586
  interface DomEditCapabilities {
520
587
  canSelect: boolean;
521
588
  canEditStyles: boolean;
@@ -5,8 +5,8 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
6
6
  <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
7
7
  <title>HyperFrames Studio</title>
8
- <script type="module" crossorigin src="/assets/index-CZUbpYhQ.js"></script>
9
- <link rel="stylesheet" crossorigin href="/assets/index-DoVLXke0.css">
8
+ <script type="module" crossorigin src="/assets/index-VsAbY3rl.js"></script>
9
+ <link rel="stylesheet" crossorigin href="/assets/index-Dq7FEg0K.css">
10
10
  </head>
11
11
  <body>
12
12
  <div data-hf-id="hf-aph5" id="root"></div>