@hyperframes/studio 0.8.53-desktop.0 → 0.8.54

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.
Files changed (42) hide show
  1. package/dist/assets/{hyperframes-player-PTEnAHhg.js → hyperframes-player-Cy_AwUa8.js} +1 -1
  2. package/dist/assets/{index-BjslOS9g.js → index-CTa-6Kso.js} +1 -1
  3. package/dist/assets/{index-CNyviK_l.js → index-DPUJoO8n.js} +203 -203
  4. package/dist/assets/{index--myXp8ui.js → index-DkAzKuPZ.js} +1 -1
  5. package/dist/assets/{index-BnXZuIJD.css → index-DrHQAuGO.css} +1 -1
  6. package/dist/index.d.ts +43 -8
  7. package/dist/index.html +2 -2
  8. package/dist/index.js +7896 -7717
  9. package/dist/index.js.map +1 -1
  10. package/dist/styles.css +1 -0
  11. package/package.json +8 -7
  12. package/src/components/StudioHeader.tsx +1 -1
  13. package/src/components/nle/TimelinePane.tsx +4 -1
  14. package/src/components/renders/RenderQueue.test.tsx +133 -25
  15. package/src/components/renders/RenderQueue.tsx +99 -92
  16. package/src/components/renders/RenderQueueItem.tsx +69 -64
  17. package/src/components/ui/Select.tsx +4 -0
  18. package/src/headerExports.test.tsx +23 -0
  19. package/src/hooks/timelineAudioGroupCreate.ts +17 -1
  20. package/src/hooks/timelineAudioGroupVolume.ts +35 -2
  21. package/src/hooks/timelineElementFxAttribute.ts +34 -2
  22. package/src/hooks/useRightPanelIntents.ts +2 -1
  23. package/src/hooks/useTimelineAssetDropOps.test.tsx +62 -4
  24. package/src/hooks/useTimelineAssetDropOps.ts +40 -3
  25. package/src/hooks/useTimelineEditing.test.tsx +160 -2
  26. package/src/hooks/useTimelineEditing.ts +76 -39
  27. package/src/index.ts +5 -2
  28. package/src/main.tsx +26 -0
  29. package/src/player/components/Timeline.tsx +6 -6
  30. package/src/player/components/TimelineTrackHeader.test.tsx +5 -26
  31. package/src/player/components/TimelineTrackHeader.tsx +1 -1
  32. package/src/player/components/TimelineTypes.ts +3 -0
  33. package/src/player/components/timelineTheme.test.ts +4 -4
  34. package/src/player/components/timelineTheme.ts +30 -30
  35. package/src/player/components/usePublishRangeSelection.test.tsx +60 -0
  36. package/src/player/components/usePublishRangeSelection.ts +42 -0
  37. package/src/player/index.ts +1 -0
  38. package/src/player/store/playerStore.ts +8 -51
  39. package/src/player/store/rangeSelectionSlice.ts +13 -0
  40. package/src/player/store/timelineResetState.ts +51 -0
  41. package/src/styles/hex-baseline.json +2 -2
  42. package/src/styles/theme.css +0 -27
package/dist/index.d.ts CHANGED
@@ -38,8 +38,15 @@ declare const buttonBase: string;
38
38
  * repeats the `hover:` and `active:` half exactly; the test pairs them.
39
39
  */
40
40
  declare const buttonVariants: Record<ButtonVariant, string>;
41
+ /**
42
+ * The three control heights, 24 / 28 / 32 px, from `--spacing-ctl-*`.
43
+ * Exported so the Capture download `<a href>` can wear the same recipe as a Button.
44
+ */
45
+ declare const buttonSizes: Record<ButtonSize, string>;
41
46
  declare const Button: react.ForwardRefExoticComponent<ButtonProps & react.RefAttributes<HTMLButtonElement>>;
42
47
 
48
+ declare function HyperframesLogo(): react_jsx_runtime.JSX.Element;
49
+
43
50
  interface IconButtonProps extends ButtonBaseProps {
44
51
  icon: ReactNode;
45
52
  "aria-label": string;
@@ -72,6 +79,20 @@ declare function Tab({ value, className, ...props }: TabProps): react_jsx_runtim
72
79
  /** The panel for one tab. Base UI wires `aria-labelledby` back to its tab. */
73
80
  declare function TabPanel({ className, ...props }: StyledProps$1<typeof Tabs$1.Panel>): react_jsx_runtime.JSX.Element;
74
81
 
82
+ interface HyperframesLoaderProps {
83
+ /** Status text shown below the mark. */
84
+ title: string;
85
+ /** Optional secondary detail line. */
86
+ detail?: string;
87
+ /** Optional monospace third line for IDs, counts, or percentages. */
88
+ mono?: string;
89
+ /** Pixel size of the mark itself; status text scales independently. */
90
+ size?: number;
91
+ /** Optional normalized progress value from 0 to 1. */
92
+ progress?: number;
93
+ }
94
+ declare function HyperframesLoader({ title, detail, mono, size, progress, }: HyperframesLoaderProps): react_jsx_runtime.JSX.Element;
95
+
75
96
  interface TooltipProps {
76
97
  label: string;
77
98
  /** A single element, wrapped in a box-less span so a disabled one still gets hover. */
@@ -227,6 +248,8 @@ declare function NumberField({ label, value, onCommit, onTrack, unit, min, max,
227
248
  interface SelectOption {
228
249
  label: string;
229
250
  value: string;
251
+ /** Offered but not choosable; the label stays visible so the reason stays visible too. */
252
+ disabled?: boolean;
230
253
  }
231
254
  interface SelectProps {
232
255
  /** Accessible name for the trigger. */
@@ -535,11 +558,14 @@ interface PlaybackReadinessSlice {
535
558
  }
536
559
  declare function createPlaybackReadinessSlice(set: StoreApi<PlaybackReadinessSlice>["setState"]): PlaybackReadinessSlice;
537
560
 
538
- type TimeListener = (time: number) => void;
539
- declare const liveTime: {
540
- notify: (time: number) => void;
541
- subscribe: (listener: TimeListener) => () => boolean;
542
- };
561
+ interface TimelineTimeRange {
562
+ t0: number;
563
+ t1: number;
564
+ }
565
+ interface RangeSelectionSlice {
566
+ /** Shift-drag ruler range in seconds, normalized so t0 <= t1. */
567
+ rangeSelection: TimelineTimeRange | null;
568
+ }
543
569
 
544
570
  /**
545
571
  * One row in the timeline: a clip as Studio needs it, translated from the
@@ -660,12 +686,18 @@ interface SubCompositionHostState {
660
686
  automation?: string;
661
687
  }
662
688
 
689
+ type TimeListener = (time: number) => void;
690
+ declare const liveTime: {
691
+ notify: (time: number) => void;
692
+ subscribe: (listener: TimeListener) => () => boolean;
693
+ };
694
+
663
695
  type ZoomMode = "fit" | "manual";
664
696
  type TimelineTool = "select" | "razor";
665
697
  interface SelectElementOptions {
666
698
  preserveSet?: boolean;
667
699
  }
668
- type PlayerStoreSlices = KeyframeSlice & AutomationSelectionSlice & ThumbnailSlice & EditingModeSlice & ReturnType<typeof createPlaybackReadinessSlice>;
700
+ type PlayerStoreSlices = KeyframeSlice & AutomationSelectionSlice & ThumbnailSlice & EditingModeSlice & ReturnType<typeof createPlaybackReadinessSlice> & RangeSelectionSlice;
669
701
  interface PlayerState extends PlayerStoreSlices {
670
702
  isPlaying: boolean;
671
703
  currentTime: number;
@@ -1293,6 +1325,8 @@ interface TimelineProps extends TimelineDropCallbacks, TimelineEditOverrides {
1293
1325
  renderClipOverlay?: (element: TimelineElement) => ReactNode;
1294
1326
  onDeleteElement?: (element: TimelineElement) => Promise<void> | void;
1295
1327
  onSelectElement?: (element: TimelineElement | null) => void;
1328
+ /** Notification only; null when cleared. The value lives in usePlayerStore.rangeSelection. */
1329
+ onRangeSelect?: (range: TimelineTimeRange | null) => void;
1296
1330
  onCopyClip?: () => boolean;
1297
1331
  onPasteClip?: () => Promise<void>;
1298
1332
  onDuplicateClip?: () => Promise<boolean>;
@@ -2130,6 +2164,7 @@ interface TimelinePaneProps {
2130
2164
  onCompositionDrop?: (sourcePath: string, placement: Pick<TimelineElement, "start" | "track">) => Promise<void> | void;
2131
2165
  onBlockedEditAttempt?: (element: TimelineElement, intent: BlockedTimelineEditIntent) => void;
2132
2166
  onSelectTimelineElement?: (element: TimelineElement | null) => void;
2167
+ onRangeSelect?: (range: TimelineTimeRange | null) => void;
2133
2168
  /** Copy/paste/duplicate act on the store's own selection, not a passed
2134
2169
  * element, so unlike onDeleteElement they need no composition-basis wrapper. */
2135
2170
  onCopyClip?: () => boolean;
@@ -2137,11 +2172,11 @@ interface TimelinePaneProps {
2137
2172
  onDuplicateClip?: () => Promise<boolean>;
2138
2173
  canPasteClip?: () => boolean;
2139
2174
  }
2140
- declare function TimelinePane({ timelineToolbar, timelineFooter, timelineOverlay, renderClipContent, onFileDrop, onDeleteElement, onAssetDrop, onBlockDrop, onCompositionDrop, onBlockedEditAttempt, onSelectTimelineElement, onCopyClip, onPasteClip, onDuplicateClip, canPasteClip, }: TimelinePaneProps): react_jsx_runtime.JSX.Element;
2175
+ declare function TimelinePane({ timelineToolbar, timelineFooter, timelineOverlay, renderClipContent, onFileDrop, onDeleteElement, onAssetDrop, onBlockDrop, onCompositionDrop, onBlockedEditAttempt, onSelectTimelineElement, onRangeSelect, onCopyClip, onPasteClip, onDuplicateClip, canPasteClip, }: TimelinePaneProps): react_jsx_runtime.JSX.Element;
2141
2176
 
2142
2177
  declare function TimelineEditProvider({ value, children, }: {
2143
2178
  value: TimelineEditCallbacks;
2144
2179
  children: ReactNode;
2145
2180
  }): react_jsx_runtime.JSX.Element;
2146
2181
 
2147
- export { type AgentModalAnchorPoint, type AgentPromptElementInfo, AskAgentModal, type AskAgentModalProps, type BlockedTimelineEditIntent, Button, type ButtonSize, type ButtonVariant, type CanEditTimelineElement, CompositionBreadcrumb, type CompositionDimensions, type CompositionLevel, CompositionThumbnail, ContextMenu, type EditHistoryHandle, EditorShell, type EditorShellProps, type ExternalFileChangeBlockedState, type ExternalFileChangeCoordinatorHandle, ExternalFileConflictBanner, type FfmpegStatus, FileTree, IconButton, Input, type InputProps, Menu, MenuItem, type MenuItemTone, MenuRadioGroup, MenuRadioItem, MenuSeparator, MenuShortcut, NLEPreview, NumberField, type NumberFieldProps, type PatchOperation, type PersistedRenderSettings, type PickedElement, Player, PlayerControls, Popover, type PopupPreviewState, type DomEditCompositionRect as PreviewCompositionRect, type PreviewState, PropertyPanel, type RenderJob, RenderQueue, type RenderQueueProps, type ResolutionPreset, Select, type SelectOption, type SelectProps, Slider, type SliderProps, SourceEditor, type StartRenderOptions, StudioApp, StudioFileConflictError, type StudioPendingEditsDrainResult, Tab, TabPanel, Tabs, TabsList, Timeline, type TimelineEditCallbacks, type TimelineEditPermission, TimelineEditProvider, type TimelineElement, TimelinePane, type TimelinePaneProps, Toggle, type ToggleProps, Tooltip, type UseEditHistoryActionsOptions, type UsePersistentEditHistoryOptions, type UseProjectFileWriterOptions, type UseTimelineEditingOptions, VideoThumbnail, applyPatch, buildPickerAgentContextPreview, buildPickerAgentPrompt, buttonBase, buttonVariants, cn, fieldBase, fieldText, findElementBlock, flushStudioPendingEdits, formatTime, getPersistedRenderSettings, liveTime, mergeStyleIntoTag, parseStyleString, persistRenderSettings, popupSurface, resolveIframe, resolveSourceFile, useEditHistoryActions, useElementPicker, usePersistentEditHistory, usePlayerStore, usePreviewCompositionRect, useProjectFileWriter, useRenderQueue, useTimelineEditing, useTimelinePlayer };
2182
+ export { type AgentModalAnchorPoint, type AgentPromptElementInfo, AskAgentModal, type AskAgentModalProps, type BlockedTimelineEditIntent, Button, type ButtonSize, type ButtonVariant, type CanEditTimelineElement, CompositionBreadcrumb, type CompositionDimensions, type CompositionLevel, CompositionThumbnail, ContextMenu, type EditHistoryHandle, EditorShell, type EditorShellProps, type ExternalFileChangeBlockedState, type ExternalFileChangeCoordinatorHandle, ExternalFileConflictBanner, type FfmpegStatus, FileTree, HyperframesLoader, type HyperframesLoaderProps, HyperframesLogo, IconButton, Input, type InputProps, Menu, MenuItem, type MenuItemTone, MenuRadioGroup, MenuRadioItem, MenuSeparator, MenuShortcut, NLEPreview, NumberField, type NumberFieldProps, type PatchOperation, type PersistedRenderSettings, type PickedElement, Player, PlayerControls, Popover, type PopupPreviewState, type DomEditCompositionRect as PreviewCompositionRect, type PreviewState, PropertyPanel, type RenderJob, RenderQueue, type RenderQueueProps, type ResolutionPreset, Select, type SelectOption, type SelectProps, Slider, type SliderProps, SourceEditor, type StartRenderOptions, StudioApp, StudioFileConflictError, type StudioPendingEditsDrainResult, Tab, TabPanel, Tabs, TabsList, Timeline, type TimelineEditCallbacks, type TimelineEditPermission, TimelineEditProvider, type TimelineElement, TimelinePane, type TimelinePaneProps, type TimelineTimeRange, Toggle, type ToggleProps, Tooltip, type UseEditHistoryActionsOptions, type UsePersistentEditHistoryOptions, type UseProjectFileWriterOptions, type UseTimelineEditingOptions, VideoThumbnail, applyPatch, buildPickerAgentContextPreview, buildPickerAgentPrompt, buttonBase, buttonSizes, buttonVariants, cn, fieldBase, fieldText, findElementBlock, flushStudioPendingEdits, formatTime, getPersistedRenderSettings, liveTime, mergeStyleIntoTag, parseStyleString, persistRenderSettings, popupSurface, resolveIframe, resolveSourceFile, useEditHistoryActions, useElementPicker, usePersistentEditHistory, usePlayerStore, usePreviewCompositionRect, useProjectFileWriter, useRenderQueue, useTimelineEditing, useTimelinePlayer };
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-CNyviK_l.js"></script>
9
- <link rel="stylesheet" crossorigin href="/assets/index-BnXZuIJD.css">
8
+ <script type="module" crossorigin src="/assets/index-DPUJoO8n.js"></script>
9
+ <link rel="stylesheet" crossorigin href="/assets/index-DrHQAuGO.css">
10
10
  </head>
11
11
  <body>
12
12
  <div data-hf-id="hf-aph5" id="root"></div>