@hyperframes/studio 0.7.107 → 0.7.108
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.
- package/dist/assets/{hyperframes-player-BLrfwq5o.js → hyperframes-player-QqavTWRK.js} +1 -1
- package/dist/assets/{index-BA9yhzfR.js → index-BQjXA1pz.js} +1 -1
- package/dist/assets/{index-BSBk5srs.js → index-BhHHMprP.js} +1 -1
- package/dist/assets/index-DNkh9mbV.css +1 -0
- package/dist/assets/index-GqONLcOl.js +428 -0
- package/dist/index.d.ts +85 -2
- package/dist/index.html +2 -2
- package/dist/index.js +17696 -12512
- package/dist/index.js.map +1 -1
- package/package.json +7 -7
- package/src/components/StudioRightPanel.tsx +18 -1
- package/src/components/TimelineToolbar.test.tsx +46 -0
- package/src/components/TimelineToolbar.tsx +17 -0
- package/src/components/editor/PropertyPanel.test.tsx +5 -1
- package/src/components/editor/PropertyPanel.tsx +7 -23
- package/src/components/editor/PropertyPanelFlat.tsx +25 -0
- package/src/components/editor/audioFxSummary.test.ts +75 -0
- package/src/components/editor/audioFxSummary.ts +36 -0
- package/src/components/editor/audioFxTelemetry.test.ts +129 -0
- package/src/components/editor/audioFxTelemetry.ts +230 -0
- package/src/components/editor/propertyPanelAudioFxGroup.test.tsx +1830 -0
- package/src/components/editor/propertyPanelAudioFxGroup.tsx +299 -0
- package/src/components/editor/propertyPanelAudioFxGroupUtils.ts +21 -0
- package/src/components/editor/propertyPanelAutomation.test.ts +60 -0
- package/src/components/editor/propertyPanelAutomation.ts +97 -0
- package/src/components/editor/propertyPanelFlatMediaSection.tsx +37 -9
- package/src/components/editor/propertyPanelFlatProps.ts +1 -0
- package/src/components/editor/propertyPanelFxAddMenu.tsx +209 -0
- package/src/components/editor/propertyPanelFxBandRuler.tsx +72 -0
- package/src/components/editor/propertyPanelFxCarveModule.tsx +382 -0
- package/src/components/editor/propertyPanelFxControls.test.tsx +115 -0
- package/src/components/editor/propertyPanelFxControls.tsx +356 -0
- package/src/components/editor/propertyPanelFxEqModule.tsx +196 -0
- package/src/components/editor/propertyPanelFxFamily.ts +83 -0
- package/src/components/editor/propertyPanelFxNodeOpenBody.tsx +269 -0
- package/src/components/editor/propertyPanelFxNodeParams.tsx +112 -0
- package/src/components/editor/propertyPanelFxNodeRow.tsx +339 -0
- package/src/components/editor/propertyPanelFxPresetMenu.tsx +159 -0
- package/src/components/editor/propertyPanelFxPresetRun.tsx +215 -0
- package/src/components/editor/propertyPanelFxPresetStyle.test.ts +142 -0
- package/src/components/editor/propertyPanelFxPresetStyle.ts +216 -0
- package/src/components/editor/propertyPanelFxRackChain.tsx +202 -0
- package/src/components/editor/propertyPanelFxSection.test.tsx +1747 -0
- package/src/components/editor/propertyPanelFxSection.tsx +550 -0
- package/src/components/editor/propertyPanelFxSectionTypes.ts +91 -0
- package/src/components/editor/propertyPanelTypes.ts +5 -0
- package/src/components/editor/useFxAudition.ts +95 -0
- package/src/components/editor/useFxCarve.ts +0 -0
- package/src/components/editor/useFxChainObserved.ts +83 -0
- package/src/components/editor/useFxLevelling.ts +235 -0
- package/src/components/editor/useVolumeAutomation.test.tsx +122 -0
- package/src/components/editor/useVolumeAutomation.ts +54 -0
- package/src/contexts/DomEditContext.tsx +11 -0
- package/src/hooks/useAppHotkeys.test.ts +198 -0
- package/src/hooks/useAppHotkeys.ts +30 -3
- package/src/hooks/useAutomationSelectionKeyboard.test.tsx +429 -0
- package/src/hooks/useAutomationSelectionKeyboard.ts +371 -0
- package/src/hooks/useDomEditAttributeCommits.ts +90 -10
- package/src/hooks/useDomEditCommits.test.tsx +38 -0
- package/src/hooks/useDomEditCommits.ts +2 -0
- package/src/hooks/useDomEditSession.ts +2 -0
- package/src/hooks/useDomEditTextCommits.ts +2 -0
- package/src/hooks/useElementLifecycleOps.ts +3 -0
- package/src/hooks/useLivePlayheadTime.ts +49 -0
- package/src/hooks/usePreviewPersistence.ts +7 -0
- package/src/hooks/useTimelineEditing.ts +3 -0
- package/src/player/components/AutomationSelectionMenu.tsx +76 -0
- package/src/player/components/AutomationValueInput.tsx +51 -0
- package/src/player/components/LayerDisclosureRow.tsx +5 -4
- package/src/player/components/Timeline.test.ts +84 -0
- package/src/player/components/TimelineAutomationLane.test.tsx +1720 -0
- package/src/player/components/TimelineAutomationLane.tsx +674 -0
- package/src/player/components/TimelineAutomationLaneSlot.test.tsx +193 -0
- package/src/player/components/TimelineLanes.test.tsx +24 -5
- package/src/player/components/TimelineLanes.tsx +142 -154
- package/src/player/components/TimelineTrackHeader.test.tsx +212 -1
- package/src/player/components/TimelineTrackHeader.tsx +166 -6
- package/src/player/components/TimelineTrackRow.tsx +8 -1
- package/src/player/components/automationClipboard.test.ts +94 -0
- package/src/player/components/automationClipboard.ts +136 -0
- package/src/player/components/automationGestureKeys.test.ts +49 -0
- package/src/player/components/automationGestureKeys.ts +49 -0
- package/src/player/components/automationLaneData.test.ts +270 -0
- package/src/player/components/automationLaneData.ts +258 -0
- package/src/player/components/automationLaneDragMath.ts +194 -0
- package/src/player/components/automationLaneGeometry.test.ts +239 -0
- package/src/player/components/automationLaneGeometry.ts +287 -0
- package/src/player/components/automationLaneHeight.ts +15 -0
- package/src/player/components/automationLanePointer.ts +20 -0
- package/src/player/components/automationLaneSelection.test.ts +183 -0
- package/src/player/components/automationLaneSelection.ts +135 -0
- package/src/player/components/automationShapes.test.ts +82 -0
- package/src/player/components/automationShapes.ts +70 -0
- package/src/player/components/automationSimplify.test.ts +48 -0
- package/src/player/components/automationSimplify.ts +51 -0
- package/src/player/components/timelineClipGestureHandlers.ts +223 -0
- package/src/player/components/timelineLaneProps.ts +19 -0
- package/src/player/components/timelineLayout.ts +11 -5
- package/src/player/components/useAutomationEdgeStretch.test.ts +27 -0
- package/src/player/components/useAutomationEdgeStretch.ts +269 -0
- package/src/player/components/useAutomationLaneGestures.ts +537 -0
- package/src/player/components/useAutomationLanes.test.tsx +112 -0
- package/src/player/components/useAutomationLanes.ts +170 -0
- package/src/player/components/useAutomationRangeDrag.ts +114 -0
- package/src/player/components/useTimelineTrackLayout.test.ts +107 -1
- package/src/player/components/useTimelineTrackLayout.ts +83 -7
- package/src/player/hooks/useExpandedTimelineElements.ts +7 -0
- package/src/player/hooks/useTimelinePlayer.ts +13 -1
- package/src/player/lib/automationStoreSync.test.ts +83 -0
- package/src/player/lib/automationStoreSync.ts +56 -0
- package/src/player/lib/timelineDOM.test.ts +33 -0
- package/src/player/lib/timelineDOM.ts +12 -0
- package/src/player/store/automationSelectionSlice.test.ts +30 -0
- package/src/player/store/automationSelectionSlice.ts +54 -0
- package/src/player/store/playerStore.test.ts +15 -0
- package/src/player/store/playerStore.ts +54 -65
- package/src/player/store/timelineElement.ts +78 -0
- package/src/styles/studio.css +89 -0
- package/src/telemetry/agentRuntime.test.ts +45 -0
- package/src/telemetry/agentRuntime.ts +62 -0
- package/src/telemetry/system.ts +8 -0
- package/src/utils/studioFileHistory.test.ts +49 -0
- package/src/utils/studioFileHistory.ts +17 -1
- package/src/utils/studioTelemetry.ts +16 -10
- package/dist/assets/index-dF-CmLZu.js +0 -428
- package/dist/assets/index-zQ4JFwwB.css +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import * as react from 'react';
|
|
3
3
|
import { ReactNode, RefObject } from 'react';
|
|
4
|
+
import { GsapAnimation, PropertyGroupName } from '@hyperframes/core/gsap-parser';
|
|
4
5
|
import * as zustand from 'zustand';
|
|
5
6
|
import { MusicBeatAnalysis } from '@hyperframes/core/beats';
|
|
6
|
-
import { GsapAnimation, PropertyGroupName } from '@hyperframes/core/gsap-parser';
|
|
7
7
|
import { GsapAnimation as GsapAnimation$1, ArcPathSegment } from '@hyperframes/parsers/gsap-parser';
|
|
8
8
|
|
|
9
9
|
interface PlayerProps {
|
|
@@ -129,6 +129,40 @@ interface KeyframeSlice {
|
|
|
129
129
|
setKeyframeCache: (elementId: string, data: KeyframeCacheEntry | undefined) => void;
|
|
130
130
|
}
|
|
131
131
|
|
|
132
|
+
/**
|
|
133
|
+
* The active selection box on one automation lane.
|
|
134
|
+
*
|
|
135
|
+
* A store slice, not lane-local state, for the same reason keyframe selection
|
|
136
|
+
* is one: Delete/copy/paste handlers and the shape menu live outside the lane
|
|
137
|
+
* component and need to read it. Ephemeral by construction — nothing
|
|
138
|
+
* serializes store state, and the selection must never survive into a render.
|
|
139
|
+
*/
|
|
140
|
+
|
|
141
|
+
interface AutomationSelection {
|
|
142
|
+
/** TimelineElement key (key ?? id) of the clip that owns the lane. */
|
|
143
|
+
elementKey: string;
|
|
144
|
+
/** Lane target: "volume" or "fx.<nodeId>.<param>". */
|
|
145
|
+
target: string;
|
|
146
|
+
/** Clip-local seconds; always t0 <= t1 (ordered on write). */
|
|
147
|
+
t0: number;
|
|
148
|
+
t1: number;
|
|
149
|
+
/**
|
|
150
|
+
* The box's value bounds, in the parameter's own units; always v0 <= v1.
|
|
151
|
+
*
|
|
152
|
+
* What makes the selection a box rather than a time span: a point is caught
|
|
153
|
+
* only if it falls inside both axes. Span operations — copy, paste, shape
|
|
154
|
+
* insert, simplify — still read t0/t1 alone, because they act on the envelope
|
|
155
|
+
* over a stretch of time rather than on a set of breakpoints.
|
|
156
|
+
*/
|
|
157
|
+
v0: number;
|
|
158
|
+
v1: number;
|
|
159
|
+
}
|
|
160
|
+
interface AutomationSelectionSlice {
|
|
161
|
+
automationSelection: AutomationSelection | null;
|
|
162
|
+
setAutomationSelection: (sel: AutomationSelection) => void;
|
|
163
|
+
clearAutomationSelection: () => void;
|
|
164
|
+
}
|
|
165
|
+
|
|
132
166
|
interface TimelineFocusRequest {
|
|
133
167
|
id: string;
|
|
134
168
|
projectId: string | null;
|
|
@@ -149,6 +183,15 @@ declare const liveTime: {
|
|
|
149
183
|
subscribe: (listener: TimeListener) => () => boolean;
|
|
150
184
|
};
|
|
151
185
|
|
|
186
|
+
/**
|
|
187
|
+
* One row in the timeline: a clip as Studio needs it, translated from the
|
|
188
|
+
* runtime's manifest at createTimelineElementFromManifestClip.
|
|
189
|
+
*
|
|
190
|
+
* Split out of playerStore, which had reached the 600-line studio ceiling and
|
|
191
|
+
* could not carry another field. Re-exported from there, so every existing
|
|
192
|
+
* importer is unaffected.
|
|
193
|
+
*/
|
|
194
|
+
|
|
152
195
|
interface TimelineElement {
|
|
153
196
|
id: string;
|
|
154
197
|
label?: string;
|
|
@@ -194,6 +237,9 @@ interface TimelineElement {
|
|
|
194
237
|
playbackRate?: number;
|
|
195
238
|
sourceDuration?: number;
|
|
196
239
|
volume?: number;
|
|
240
|
+
/** Verbatim `data-fx-chain` / `data-automation`; see automationLaneData. */
|
|
241
|
+
fxChain?: string;
|
|
242
|
+
automation?: string;
|
|
197
243
|
/** Path from data-composition-src — identifies sub-composition elements */
|
|
198
244
|
compositionSrc?: string;
|
|
199
245
|
/** Whether this row came from authored clip timing or Studio's full-duration layer fallback. */
|
|
@@ -213,12 +259,13 @@ interface TimelineElement {
|
|
|
213
259
|
expandedParentStart?: number;
|
|
214
260
|
expandedHostKey?: string;
|
|
215
261
|
}
|
|
262
|
+
|
|
216
263
|
type ZoomMode = "fit" | "manual";
|
|
217
264
|
type TimelineTool = "select" | "razor";
|
|
218
265
|
interface SelectElementOptions {
|
|
219
266
|
preserveSet?: boolean;
|
|
220
267
|
}
|
|
221
|
-
interface PlayerState extends KeyframeSlice, ThumbnailSlice {
|
|
268
|
+
interface PlayerState extends KeyframeSlice, AutomationSelectionSlice, ThumbnailSlice {
|
|
222
269
|
isPlaying: boolean;
|
|
223
270
|
currentTime: number;
|
|
224
271
|
duration: number;
|
|
@@ -323,6 +370,37 @@ interface PlayerState extends KeyframeSlice, ThumbnailSlice {
|
|
|
323
370
|
requestedSeekTime: number | null;
|
|
324
371
|
requestSeek: (time: number) => void;
|
|
325
372
|
clearSeekRequest: () => void;
|
|
373
|
+
/**
|
|
374
|
+
* Request the transport start or stop from outside the player loop.
|
|
375
|
+
*
|
|
376
|
+
* The FX rack auditions a preset by writing it to the running graph, which is
|
|
377
|
+
* silent while the transport is paused — so hovering one has to start
|
|
378
|
+
* playback, and leaving has to put the playhead back where it was. Hovering is
|
|
379
|
+
* not an edit and must not cost the author their place.
|
|
380
|
+
*
|
|
381
|
+
* A nonce rather than a bare boolean: two hovers in a row both want play, and
|
|
382
|
+
* without it the second request is indistinguishable from the first having
|
|
383
|
+
* already been served.
|
|
384
|
+
*/
|
|
385
|
+
playbackRequest: {
|
|
386
|
+
playing: boolean;
|
|
387
|
+
returnTo: number | null;
|
|
388
|
+
nonce: number;
|
|
389
|
+
} | null;
|
|
390
|
+
requestPlayback: (playing: boolean, returnTo?: number | null) => void;
|
|
391
|
+
clearPlaybackRequest: () => void;
|
|
392
|
+
/**
|
|
393
|
+
* Request the timeline to scroll a clip into view (e.g. clicking an
|
|
394
|
+
* already-added asset card in the sidebar). Consumed and cleared by
|
|
395
|
+
* useTimelineRevealClip. The nonce makes repeat requests for the same
|
|
396
|
+
* clip observable so a second click re-reveals after the user scrolls away.
|
|
397
|
+
*/
|
|
398
|
+
clipRevealRequest: {
|
|
399
|
+
elementId: string;
|
|
400
|
+
nonce: number;
|
|
401
|
+
} | null;
|
|
402
|
+
requestClipReveal: (elementId: string) => void;
|
|
403
|
+
clearClipRevealRequest: () => void;
|
|
326
404
|
timelineFocus: TimelineFocusRequest | null;
|
|
327
405
|
timelineFocusNonce: number;
|
|
328
406
|
requestTimelineFocus: (id: string) => void;
|
|
@@ -853,6 +931,11 @@ interface PropertyPanelProps {
|
|
|
853
931
|
* `onSetAttribute` calls where omitted. */
|
|
854
932
|
onSetAttributes?: (selection: DomEditSelection, attrs: Record<string, string>) => Promise<void>;
|
|
855
933
|
onSetAttributeLive: (attr: string, value: string | null, onSettled?: (ok: boolean) => void) => void | Promise<void>;
|
|
934
|
+
/** Persists without reloading the preview, but re-reads the selection after —
|
|
935
|
+
* for attributes the runtime applies to the live graph itself, where a reload
|
|
936
|
+
* would only interrupt playback, and where the panel still has to see the
|
|
937
|
+
* value it just wrote to compute the next edit from. */
|
|
938
|
+
onSetAttributeQuiet?: (attr: string, value: string | null) => void | Promise<void>;
|
|
856
939
|
onApplyColorGradingScope?: (scope: "source-file" | "project", value: string | null) => Promise<{
|
|
857
940
|
changedFiles: number;
|
|
858
941
|
changedElements: number;
|
package/dist/index.html
CHANGED
|
@@ -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-
|
|
9
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-GqONLcOl.js"></script>
|
|
9
|
+
<link rel="stylesheet" crossorigin href="/assets/index-DNkh9mbV.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
|
12
12
|
<div data-hf-id="hf-aph5" id="root"></div>
|