@hyperframes/studio 0.6.26 → 0.6.28

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,24 +1,18 @@
1
- import type { DomEditViewport, DomEditSelection } from "../components/editor/domEditing";
1
+ import type { DomEditViewport } from "../components/editor/domEditing";
2
2
  import { resolveVisualDomEditSelectionTarget } from "../components/editor/domEditing";
3
3
  import {
4
4
  getDomLayerPatchTarget,
5
5
  isElementComputedVisible,
6
6
  } from "../components/editor/domEditingElement";
7
- import { usePlayerStore, liveTime } from "../player";
8
7
  import { getEventTargetElement } from "./studioHelpers";
9
8
 
10
- export interface PreviewLocalPointer {
9
+ interface PreviewLocalPointer {
11
10
  x: number;
12
11
  y: number;
13
12
  viewport: DomEditViewport;
14
13
  }
15
14
 
16
- export interface PreviewPlayerCompat {
17
- getTime: () => number;
18
- renderSeek: (timeSeconds: number) => void;
19
- }
20
-
21
- export function resolvePreviewLocalPointer(
15
+ function resolvePreviewLocalPointer(
22
16
  iframe: HTMLIFrameElement,
23
17
  doc: Document,
24
18
  win: Window,
@@ -42,24 +36,6 @@ export function resolvePreviewLocalPointer(
42
36
  };
43
37
  }
44
38
 
45
- export function getPreviewLocalPointer(
46
- iframe: HTMLIFrameElement,
47
- clientX: number,
48
- clientY: number,
49
- ): PreviewLocalPointer | null {
50
- let doc: Document | null = null;
51
- let win: Window | null = null;
52
- try {
53
- doc = iframe.contentDocument;
54
- win = iframe.contentWindow;
55
- } catch {
56
- return null;
57
- }
58
- if (!doc || !win) return null;
59
-
60
- return resolvePreviewLocalPointer(iframe, doc, win, clientX, clientY);
61
- }
62
-
63
39
  const POINTER_EVENTS_OVERRIDE_ID = "__hf_studio_pointer_events_override__";
64
40
 
65
41
  function forcePointerEventsAuto(doc: Document): HTMLStyleElement | null {
@@ -122,21 +98,6 @@ export function getPreviewTargetFromPointer(
122
98
  }
123
99
  }
124
100
 
125
- export function buildRasterClickSelectionContext(
126
- selection: DomEditSelection,
127
- localPointer: PreviewLocalPointer,
128
- ): string {
129
- return [
130
- "The user clicked a large raster/background element in the Studio preview.",
131
- `Preview click: x=${Math.round(localPointer.x)}px, y=${Math.round(localPointer.y)}px in a ${Math.round(
132
- localPointer.viewport.width,
133
- )}x${Math.round(localPointer.viewport.height)} composition.`,
134
- `Selected target: <${selection.tagName}> ${selection.selector ?? selection.id ?? selection.label}.`,
135
- "Visible copy or artwork at that point may be baked into the selected image/background rather than a selectable DOM text layer.",
136
- "If the request mentions text seen at the click location, inspect or replace the image asset, or recreate that visible copy as editable DOM.",
137
- ].join("\n");
138
- }
139
-
140
101
  function objectLike(value: unknown): object | null {
141
102
  return value && (typeof value === "object" || typeof value === "function") ? value : null;
142
103
  }
@@ -162,33 +123,6 @@ function readPlaybackTime(target: object | null, key: string): number | null {
162
123
  }
163
124
  }
164
125
 
165
- export function getPreviewPlayer(win: Window | null | undefined): PreviewPlayerCompat | null {
166
- const player = objectLike(win ? Reflect.get(win, "__player") : null);
167
- if (!player) return null;
168
- const getTime = Reflect.get(player, "getTime");
169
- const renderSeek = Reflect.get(player, "renderSeek");
170
- if (typeof getTime !== "function" || typeof renderSeek !== "function") return null;
171
- return {
172
- getTime: () => {
173
- const value = getTime.call(player);
174
- return typeof value === "number" && Number.isFinite(value) ? value : 0;
175
- },
176
- renderSeek: (timeSeconds: number) => {
177
- renderSeek.call(player, timeSeconds);
178
- },
179
- };
180
- }
181
-
182
- export function seekStudioPreview(iframe: HTMLIFrameElement | null, timeSeconds: number): boolean {
183
- const player = getPreviewPlayer(iframe?.contentWindow);
184
- if (!player) return false;
185
- const nextTime = Math.max(0, timeSeconds);
186
- player.renderSeek(nextTime);
187
- usePlayerStore.getState().setCurrentTime(nextTime);
188
- liveTime.notify(nextTime);
189
- return true;
190
- }
191
-
192
126
  export function pauseStudioPreviewPlayback(iframe: HTMLIFrameElement | null): number | null {
193
127
  const win = iframe?.contentWindow;
194
128
  if (!win) return null;