@hyperframes/studio 0.8.50 → 0.8.52
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-CxxDxHTW.js → hyperframes-player-I5YRzB02.js} +3 -3
- package/dist/assets/{index-Dt3qBI-9.js → index-BTAfgesM.js} +1 -1
- package/dist/assets/index-CxAu_Okg.css +1 -0
- package/dist/assets/index-DocJlW2v.js +376 -0
- package/dist/assets/{index-DUAIWxkI.js → index-Du5x7KUR.js} +1 -1
- package/dist/index.d.ts +419 -20
- package/dist/index.html +2 -2
- package/dist/index.js +7496 -8288
- package/dist/index.js.map +1 -1
- package/dist/styles/tailwind-preset.js.map +1 -1
- package/package.json +13 -12
- package/src/App.tsx +131 -143
- package/src/captions/components/CaptionAnimationPanel.tsx +4 -4
- package/src/captions/components/CaptionOverlay.sender.test.tsx +52 -0
- package/src/captions/components/CaptionOverlay.tsx +8 -4
- package/src/captions/components/CaptionOverlayUtils.ts +2 -3
- package/src/captions/components/CaptionPropertyPanel.tsx +3 -3
- package/src/captions/components/CaptionTimeline.tsx +1 -1
- package/src/captions/components/shared.tsx +2 -2
- package/src/components/AskAgentModal.tsx +5 -5
- package/src/components/EditorShell.tsx +8 -7
- package/src/components/ExternalFileConflictBanner.tsx +16 -16
- package/src/components/LintModal.tsx +6 -16
- package/src/components/MediaPreview.tsx +2 -2
- package/src/components/RightPanelTabs.test.tsx +151 -0
- package/src/components/RightPanelTabs.tsx +59 -0
- package/src/components/SaveQueuePausedBanner.tsx +2 -2
- package/src/components/StudioHeader.dom.test.tsx +181 -0
- package/src/components/StudioHeader.tsx +110 -210
- package/src/components/StudioLeftSidebar.tsx +7 -4
- package/src/components/StudioOverlays.tsx +1 -1
- package/src/components/StudioRightPanel.tsx +51 -39
- package/src/components/StudioToast.tsx +2 -2
- package/src/components/TimelineHistoryButtons.dom.test.tsx +117 -0
- package/src/components/TimelineHistoryButtons.tsx +54 -0
- package/src/components/TimelineToolbar.test.tsx +8 -0
- package/src/components/TimelineToolbar.tsx +8 -12
- package/src/components/dock/Dock.test.tsx +260 -0
- package/src/components/dock/Dock.tsx +281 -0
- package/src/components/dock/dock.css +28 -0
- package/src/components/dock/dockAccessibility.test.ts +166 -0
- package/src/components/dock/dockAccessibility.ts +98 -0
- package/src/components/dock/dockLayout.test.ts +134 -0
- package/src/components/dock/dockLayout.ts +105 -0
- package/src/components/dock/dockLayoutSchema.ts +66 -0
- package/src/components/dock/dockLayoutStore.ts +91 -0
- package/src/components/dock/dockTestHarness.ts +11 -0
- package/src/components/dock/panelRegistry.ts +67 -0
- package/src/components/editor/AnimationCard.tsx +4 -4
- package/src/components/editor/AnimationCardParts.tsx +6 -6
- package/src/components/editor/BlockParamsPanel.tsx +4 -4
- package/src/components/editor/BorderRadiusEditor.tsx +1 -1
- package/src/components/editor/CanvasContextMenu.tsx +1 -1
- package/src/components/editor/ComputedTweenNotice.tsx +1 -1
- package/src/components/editor/DomEditOverlay.tsx +1 -1
- package/src/components/editor/EaseCurveSection.tsx +1 -1
- package/src/components/editor/EaseParamFields.tsx +5 -5
- package/src/components/editor/FileTree.tsx +4 -4
- package/src/components/editor/FileTreeIcons.tsx +1 -1
- package/src/components/editor/FileTreeNodes.tsx +13 -13
- package/src/components/editor/InlineTextToolbar.tsx +1 -1
- package/src/components/editor/InspectorHeaderActions.tsx +3 -3
- package/src/components/editor/KeyframeDiamond.tsx +1 -1
- package/src/components/editor/KeyframeEaseList.tsx +1 -1
- package/src/components/editor/LayersPanel.test.ts +97 -1
- package/src/components/editor/LayersPanel.tsx +7 -5
- package/src/components/editor/MarqueeOverlay.tsx +1 -1
- package/src/components/editor/OffCanvasIndicators.tsx +1 -1
- package/src/components/editor/PreviewGuides.tsx +1 -1
- package/src/components/editor/PromotableControl.tsx +2 -2
- package/src/components/editor/PropertyPanelEmptyState.tsx +7 -7
- package/src/components/editor/PropertyPanelFlatHeader.tsx +2 -2
- package/src/components/editor/SnapToolbar.tsx +2 -2
- package/src/components/editor/TimelineFxPopover.tsx +1 -1
- package/src/components/editor/TopologyLens.test.tsx +28 -0
- package/src/components/editor/TopologyLens.tsx +7 -5
- package/src/components/editor/Transform3DCube.tsx +2 -2
- package/src/components/editor/audioFxRevealTarget.ts +1 -0
- package/src/components/editor/domEditing.test.ts +1 -1
- package/src/components/editor/domEditingAgentPrompt.test.ts +8 -6
- package/src/components/editor/domEditingAgentPrompt.ts +4 -3
- package/src/components/editor/propertyPanelColor.tsx +11 -11
- package/src/components/editor/propertyPanelColorCurveGraph.tsx +1 -1
- package/src/components/editor/propertyPanelColorGradingControls.tsx +7 -9
- package/src/components/editor/propertyPanelColorGradingSection.tsx +6 -6
- package/src/components/editor/propertyPanelColorGradingSlider.tsx +5 -5
- package/src/components/editor/propertyPanelColorWheels.tsx +1 -1
- package/src/components/editor/propertyPanelCommitField.tsx +1 -1
- package/src/components/editor/propertyPanelFill.tsx +4 -4
- package/src/components/editor/propertyPanelFlatColorGradingAccessory.tsx +3 -3
- package/src/components/editor/propertyPanelFlatColorGradingSection.tsx +7 -7
- package/src/components/editor/propertyPanelFlatEffectsSection.tsx +4 -4
- package/src/components/editor/propertyPanelFlatMediaSection.tsx +3 -3
- package/src/components/editor/propertyPanelFlatOverlaysSection.tsx +1 -1
- package/src/components/editor/propertyPanelFlatPrimitives.tsx +10 -10
- package/src/components/editor/propertyPanelFlatSelectRow.tsx +3 -3
- package/src/components/editor/propertyPanelFlatTextSection.test.tsx +8 -9
- package/src/components/editor/propertyPanelFlatTextSection.tsx +5 -5
- package/src/components/editor/propertyPanelFlatToggle.tsx +1 -1
- package/src/components/editor/propertyPanelFont.tsx +5 -5
- package/src/components/editor/propertyPanelFxCarveModule.tsx +1 -1
- package/src/components/editor/propertyPanelFxControls.test.tsx +1 -1
- package/src/components/editor/propertyPanelFxControls.tsx +6 -6
- package/src/components/editor/propertyPanelFxEqModule.tsx +2 -2
- package/src/components/editor/propertyPanelFxPresetStyle.ts +2 -2
- package/src/components/editor/propertyPanelGradingNumberField.tsx +1 -1
- package/src/components/editor/propertyPanelMediaSection.tsx +1 -1
- package/src/components/editor/propertyPanelPrimitives.tsx +7 -7
- package/src/components/editor/propertyPanelSections.tsx +8 -8
- package/src/components/editor/useColorGradingController.test.ts +38 -0
- package/src/components/editor/useColorGradingController.ts +9 -1
- package/src/components/editor/useColorGradingPreviews.test.ts +76 -0
- package/src/components/editor/useColorGradingPreviews.ts +11 -1
- package/src/components/editor/usePreviewCompositionRect.test.tsx +95 -0
- package/src/components/editor/usePreviewCompositionRect.ts +21 -0
- package/src/components/feedback/StudioFeedbackCard.tsx +7 -7
- package/src/components/feedback/feedbackTrigger.ts +0 -1
- package/src/components/nle/AssetPreviewOverlay.tsx +6 -2
- package/src/components/nle/CompositionBreadcrumb.tsx +3 -3
- package/src/components/nle/NLEPreview.tsx +3 -3
- package/src/components/nle/PreviewOverlays.tsx +6 -6
- package/src/components/nle/PreviewPane.tsx +3 -3
- package/src/components/nle/TimelinePane.tsx +3 -3
- package/src/components/nle/TimelineResizeDivider.tsx +2 -2
- package/src/components/panels/SlideshowPanel.tsx +2 -2
- package/src/components/panels/SlideshowSubPanels.tsx +20 -17
- package/src/components/panels/VariablesBindElement.tsx +2 -2
- package/src/components/panels/VariablesDeclarationForm.tsx +2 -2
- package/src/components/panels/VariablesOtherCompositions.tsx +1 -1
- package/src/components/panels/VariablesPanel.tsx +3 -3
- package/src/components/panels/VariablesValueControls.tsx +2 -2
- package/src/components/pointerTargetSize.test.tsx +8 -0
- package/src/components/renders/FfmpegRequiredNotice.tsx +5 -5
- package/src/components/renders/RenderQueue.test.tsx +7 -0
- package/src/components/renders/RenderQueue.tsx +7 -7
- package/src/components/renders/RenderQueueItem.tsx +6 -6
- package/src/components/sidebar/AssetCard.tsx +8 -8
- package/src/components/sidebar/AssetContextMenu.tsx +8 -8
- package/src/components/sidebar/AssetsTab.tsx +2 -2
- package/src/components/sidebar/AudioRow.tsx +6 -6
- package/src/components/sidebar/BlocksTab.tsx +6 -6
- package/src/components/sidebar/CompositionsTab.tsx +5 -5
- package/src/components/sidebar/GlobalAssetsView.tsx +1 -1
- package/src/components/sidebar/LeftSidebar.lintBadge.test.tsx +58 -0
- package/src/components/sidebar/LeftSidebar.tsx +19 -5
- package/src/components/sidebar/PromptPreviewModal.tsx +3 -3
- package/src/components/timelineToolbarStyles.ts +5 -0
- package/src/components/ui/Button.test.tsx +252 -0
- package/src/components/ui/Button.tsx +89 -126
- package/src/components/ui/IconButton.tsx +38 -0
- package/src/components/ui/Input.tsx +115 -0
- package/src/components/ui/Menu.test.tsx +374 -0
- package/src/components/ui/Menu.tsx +213 -0
- package/src/components/ui/NumberField.tsx +122 -0
- package/src/components/ui/Popover.tsx +74 -0
- package/src/components/ui/SearchInput.tsx +2 -2
- package/src/components/ui/Select.tsx +100 -0
- package/src/components/ui/Slider.tsx +153 -0
- package/src/components/ui/Tabs.test.tsx +98 -0
- package/src/components/ui/Tabs.tsx +71 -0
- package/src/components/ui/Toggle.tsx +63 -0
- package/src/components/ui/Tooltip.test.tsx +110 -0
- package/src/components/ui/Tooltip.tsx +38 -112
- package/src/components/ui/cn.test.ts +30 -0
- package/src/components/ui/cn.ts +25 -0
- package/src/components/ui/index.ts +29 -2
- package/src/components/ui/mountHost.testHelpers.ts +24 -0
- package/src/components/ui/valueControls.test.tsx +524 -0
- package/src/hooks/useAppHotkeys.ts +21 -80
- package/src/hooks/useCaptionDetection.sender.test.tsx +46 -0
- package/src/hooks/useCaptionDetection.ts +3 -1
- package/src/hooks/useEditHistoryActions.test.tsx +90 -0
- package/src/hooks/useEditHistoryActions.ts +106 -0
- package/src/hooks/useLintModal.test.tsx +65 -0
- package/src/hooks/useLintModal.ts +3 -0
- package/src/hooks/useSdkSession.lifecycle.test.tsx +49 -4
- package/src/hooks/useSdkSession.ts +43 -10
- package/src/hooks/useServerConnection.hashProject.test.tsx +94 -0
- package/src/hooks/useServerConnection.ts +43 -10
- package/src/hooks/useTimelineAssetDropOps.test.tsx +41 -1
- package/src/hooks/useTimelineAssetDropOps.ts +52 -11
- package/src/index.ts +51 -0
- package/src/main.tsx +9 -3
- package/src/player/components/AudioWaveform.tsx +1 -1
- package/src/player/components/AutomationSelectionMenu.tsx +3 -3
- package/src/player/components/ClipContextMenu.tsx +3 -3
- package/src/player/components/CompositionThumbnail.test.ts +0 -3
- package/src/player/components/CompositionThumbnail.tsx +3 -4
- package/src/player/components/EditModal.tsx +1 -1
- package/src/player/components/ImageThumbnail.tsx +1 -1
- package/src/player/components/KeyframeDiamondContextMenu.tsx +4 -4
- package/src/player/components/LayerDisclosureRow.tsx +2 -2
- package/src/player/components/PlayerControls.tsx +1 -1
- package/src/player/components/ShortcutsPanel.tsx +9 -9
- package/src/player/components/SpeedMenu.tsx +3 -5
- package/src/player/components/Timeline.tsx +2 -1
- package/src/player/components/TimelineCanvas.tsx +21 -14
- package/src/player/components/TimelineClip.tsx +0 -1
- package/src/player/components/TimelineDiamondConnectors.tsx +1 -1
- package/src/player/components/TimelineEmptyState.tsx +5 -5
- package/src/player/components/TimelineFxButton.tsx +6 -6
- package/src/player/components/TimelineGroupHeader.tsx +5 -5
- package/src/player/components/TimelineGroupLaneLabels.tsx +1 -1
- package/src/player/components/TimelineGroupRow.tsx +1 -1
- package/src/player/components/TimelineLanes.test.tsx +32 -0
- package/src/player/components/TimelineLanes.tsx +2 -5
- package/src/player/components/TimelineLayerGroupHeader.tsx +2 -2
- package/src/player/components/TimelineRuler.tsx +1 -1
- package/src/player/components/TimelineShortcutHint.tsx +1 -1
- package/src/player/components/TimelineTrackHeader.tsx +1 -1
- package/src/player/components/TimelineTrackPlainHeader.tsx +3 -3
- package/src/player/components/TimelineTypes.ts +2 -1
- package/src/player/components/TrackGapContextMenu.tsx +1 -1
- package/src/player/components/VideoThumbnail.tsx +4 -2
- package/src/player/components/VolumeControl.tsx +2 -2
- package/src/player/components/timelineCallbacks.ts +8 -8
- package/src/player/components/timelineClipDragPreview.ts +51 -27
- package/src/player/components/timelineClipDragTypes.ts +3 -0
- package/src/player/components/timelineDragDrop.test.tsx +61 -1
- package/src/player/components/timelineDragDrop.ts +57 -15
- package/src/player/components/timelineLaneProps.ts +3 -0
- package/src/player/components/timelineSnapping.test.ts +27 -0
- package/src/player/components/timelineSnapping.ts +14 -1
- package/src/player/components/trackHeaderLabelRows.tsx +4 -4
- package/src/player/components/useTimelineClipDrag.resize.test.tsx +136 -2
- package/src/player/components/useTimelineClipDrag.ts +30 -3
- package/src/player/lib/describeClips.ts +3 -54
- package/src/player/lib/playbackShortcuts.ts +2 -0
- package/src/player/store/previewIframeStore.notify.test.tsx +75 -0
- package/src/player/store/previewIframeStore.test.tsx +29 -0
- package/src/player/store/previewIframeStore.ts +25 -0
- package/src/renderQueueExports.test.tsx +58 -0
- package/src/styles/classCandidates.test.ts +105 -0
- package/src/styles/classCandidates.ts +281 -0
- package/src/styles/hex-baseline.json +84 -0
- package/src/styles/hexRatchet.test.ts +201 -0
- package/src/styles/iconTokens.ts +20 -0
- package/src/styles/palette-reset.css +6 -0
- package/src/styles/studio.css +24 -21
- package/src/styles/styleSources.test.ts +20 -0
- package/src/styles/styleSources.ts +47 -0
- package/src/styles/tailwind-preset.shared.js +3 -0
- package/src/styles/theme.css +243 -0
- package/src/styles/theme.test.ts +183 -0
- package/src/styles/tokenGate.test.ts +109 -0
- package/src/utils/sourcePatcher.ts +1 -1
- package/src/utils/studioHelpers.test.ts +18 -0
- package/src/utils/studioHelpers.ts +11 -1
- package/src/utils/studioUiPreferences.ts +7 -0
- package/src/utils/timelineDropTrackInsert.test.ts +134 -0
- package/src/utils/timelineDropTrackInsert.ts +83 -0
- package/src/utils/typingTarget.ts +4 -0
- package/dist/assets/index-n2ml4tUn.js +0 -442
- package/dist/assets/index-pO6p0H27.css +0 -1
- package/src/components/PanelTabButton.tsx +0 -31
- package/src/components/storyboard/AgentChatMessageButton.test.tsx +0 -47
- package/src/components/storyboard/AgentChatMessageButton.tsx +0 -45
- package/src/components/storyboard/FramePoster.test.tsx +0 -61
- package/src/components/storyboard/FramePoster.tsx +0 -86
- package/src/components/storyboard/StoryboardDirection.tsx +0 -45
- package/src/components/storyboard/StoryboardFrameFocus.tsx +0 -412
- package/src/components/storyboard/StoryboardFrameTile.tsx +0 -117
- package/src/components/storyboard/StoryboardGrid.tsx +0 -55
- package/src/components/storyboard/StoryboardLoaded.tsx +0 -307
- package/src/components/storyboard/StoryboardReviewGuide.tsx +0 -300
- package/src/components/storyboard/StoryboardScriptPanel.tsx +0 -26
- package/src/components/storyboard/StoryboardSourceEditor.tsx +0 -231
- package/src/components/storyboard/StoryboardStatusLegend.tsx +0 -21
- package/src/components/storyboard/StoryboardView.tsx +0 -169
- package/src/components/storyboard/StoryboardViewModeGuard.test.tsx +0 -187
- package/src/components/storyboard/frameComments.test.ts +0 -95
- package/src/components/storyboard/frameComments.ts +0 -115
- package/src/components/storyboard/frameStatus.ts +0 -36
- package/src/components/storyboard/storyboardReviewStage.test.ts +0 -40
- package/src/components/storyboard/storyboardReviewStage.ts +0 -45
- package/src/components/storyboard/useFrameComments.ts +0 -98
- package/src/contexts/ViewModeContext.tsx +0 -142
- package/src/hooks/useProjectSignaturePoll.test.tsx +0 -135
- package/src/hooks/useProjectSignaturePoll.ts +0 -68
- package/src/hooks/useStoryboard.ts +0 -99
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as P}from"./index-
|
|
1
|
+
import{g as P}from"./index-DocJlW2v.js";function j(c,d){for(var s=0;s<d.length;s++){const a=d[s];if(typeof a!="string"&&!Array.isArray(a)){for(const i in a)if(i!=="default"&&!(i in c)){const l=Object.getOwnPropertyDescriptor(a,i);l&&Object.defineProperty(c,i,l.get?l:{enumerable:!0,get:()=>a[i]})}}}return Object.freeze(Object.defineProperty(c,Symbol.toStringTag,{value:"Module"}))}var v={},w;function k(){if(w)return v;w=1,Object.defineProperty(v,"__esModule",{value:!0}),v.default=d;var c=window.OfflineAudioContext||window.webkitOfflineAudioContext;function d(e){var r=a(e);return r.start(0),[i,y,O(e.sampleRate),s].reduce(function(t,o){return o(t)},r.buffer.getChannelData(0))}function s(e){return e.sort(function(r,t){return t.count-r.count}).splice(0,5)[0].tempo}function a(e){var r=e.length,t=e.numberOfChannels,o=e.sampleRate,n=new c(t,r,o),u=n.createBufferSource();u.buffer=e;var f=n.createBiquadFilter();return f.type="lowpass",u.connect(f),f.connect(n.destination),u}function i(e){for(var r=[],t=.9,o=.3,n=15;r.length<n&&t>=o;)r=l(e,t),t-=.05;if(r.length<n)throw new Error("Could not find enough samples for a reliable detection.");return r}function l(e,r){for(var t=[],o=0,n=e.length;o<n;o+=1)e[o]>r&&(t.push(o),o+=1e4);return t}function y(e){var r=[];return e.forEach(function(t,o){for(var n=function(x){var g=e[o+x]-t,_=r.some(function(h){if(h.interval===g)return h.count+=1});_||r.push({interval:g,count:1})},u=0;u<10;u+=1)n(u)}),r}function O(e){return function(r){var t=[];return r.forEach(function(o){if(o.interval!==0){for(var n=60/(o.interval/e);n<90;)n*=2;for(;n>180;)n/=2;n=Math.round(n);var u=t.some(function(f){if(f.tempo===n)return f.count+=o.count});u||t.push({tempo:n,count:o.count})}}),t}}return v}var p,b;function q(){return b||(b=1,p=k().default),p}var m=q();const A=P(m),D=j({__proto__:null,default:A},[m]);export{D as i};
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,280 @@
|
|
|
1
|
-
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
1
|
import * as react from 'react';
|
|
3
|
-
import { ReactNode, RefObject } from 'react';
|
|
2
|
+
import { ButtonHTMLAttributes, ReactNode, ElementType, ComponentPropsWithoutRef, ReactElement, RefObject } from 'react';
|
|
3
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
|
+
import { Tabs as Tabs$1 } from '@base-ui/react/tabs';
|
|
5
|
+
import * as node_modules_cn_dist_types from 'node_modules/cn/dist/types';
|
|
6
|
+
import { ContextMenu as ContextMenu$1 } from '@base-ui/react/context-menu';
|
|
7
|
+
import { Menu as Menu$1 } from '@base-ui/react/menu';
|
|
8
|
+
import { Popover as Popover$1 } from '@base-ui/react/popover';
|
|
4
9
|
import { RuntimeTimelineClipIdentity, HyperframePickerElementInfo } from '@hyperframes/core';
|
|
5
10
|
import { GsapAnimation, PropertyGroupName } from '@hyperframes/core/gsap-parser';
|
|
6
11
|
import * as zustand from 'zustand';
|
|
7
12
|
import { StoreApi } from 'zustand';
|
|
8
13
|
import { MusicBeatAnalysis } from '@hyperframes/core/beats';
|
|
9
14
|
import { GsapAnimation as GsapAnimation$1, ArcPathSegment } from '@hyperframes/parsers/gsap-parser';
|
|
15
|
+
import { CanvasResolution } from '@hyperframes/parsers';
|
|
16
|
+
|
|
17
|
+
type ButtonVariant = "primary" | "secondary" | "danger" | "ghost";
|
|
18
|
+
type ButtonSize = "sm" | "md" | "lg";
|
|
19
|
+
/** Forces one interactive look for a gallery shot. CSS-only; see the header. */
|
|
20
|
+
type PreviewState = "hover" | "active" | "focus";
|
|
21
|
+
interface ButtonBaseProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
22
|
+
variant?: ButtonVariant;
|
|
23
|
+
size?: ButtonSize;
|
|
24
|
+
"data-preview-state"?: PreviewState;
|
|
25
|
+
}
|
|
26
|
+
interface ButtonProps extends ButtonBaseProps {
|
|
27
|
+
loading?: boolean;
|
|
28
|
+
icon?: ReactNode;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Shared by Button and IconButton. `disabled:` keeps pointer events alive so a
|
|
32
|
+
* wrapping Tooltip can still explain why the control is disabled.
|
|
33
|
+
*/
|
|
34
|
+
declare const buttonBase: string;
|
|
35
|
+
/**
|
|
36
|
+
* One entry per variant. The `data-[preview-state=…]` half of each string
|
|
37
|
+
* repeats the `hover:` and `active:` half exactly; the test pairs them.
|
|
38
|
+
*/
|
|
39
|
+
declare const buttonVariants: Record<ButtonVariant, string>;
|
|
40
|
+
declare const Button: react.ForwardRefExoticComponent<ButtonProps & react.RefAttributes<HTMLButtonElement>>;
|
|
41
|
+
|
|
42
|
+
interface IconButtonProps extends ButtonBaseProps {
|
|
43
|
+
icon: ReactNode;
|
|
44
|
+
"aria-label": string;
|
|
45
|
+
}
|
|
46
|
+
declare const IconButton: react.ForwardRefExoticComponent<IconButtonProps & react.RefAttributes<HTMLButtonElement>>;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Base UI lets `className` be a function of the part's state. Studio's parts
|
|
50
|
+
* merge a string with `cn`, so the string form is the one they accept.
|
|
51
|
+
*/
|
|
52
|
+
type StyledProps$1<T extends ElementType> = Omit<ComponentPropsWithoutRef<T>, "className"> & {
|
|
53
|
+
className?: string;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Groups a tab list with its panels. Uncontrolled by default; pass `value` and
|
|
57
|
+
* `onValueChange` for a strip whose selection lives in a store.
|
|
58
|
+
*/
|
|
59
|
+
declare function Tabs(props: ComponentPropsWithoutRef<typeof Tabs$1.Root>): react_jsx_runtime.JSX.Element;
|
|
60
|
+
/** The strip. Give it an `aria-label`: a tablist with no name is unlabelled. */
|
|
61
|
+
declare function TabsList({ className, ...props }: StyledProps$1<typeof Tabs$1.List>): react_jsx_runtime.JSX.Element;
|
|
62
|
+
interface TabProps extends StyledProps$1<typeof Tabs$1.Tab> {
|
|
63
|
+
value: string;
|
|
64
|
+
"data-preview-state"?: PreviewState;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* aria-selected drives the selected look (Base UI sets it) so assistive tech
|
|
68
|
+
* and sighted users match. data-preview-state is for gallery shots only.
|
|
69
|
+
*/
|
|
70
|
+
declare function Tab({ value, className, ...props }: TabProps): react_jsx_runtime.JSX.Element;
|
|
71
|
+
/** The panel for one tab. Base UI wires `aria-labelledby` back to its tab. */
|
|
72
|
+
declare function TabPanel({ className, ...props }: StyledProps$1<typeof Tabs$1.Panel>): react_jsx_runtime.JSX.Element;
|
|
73
|
+
|
|
74
|
+
interface TooltipProps {
|
|
75
|
+
label: string;
|
|
76
|
+
/** A single element, wrapped in a box-less span so a disabled one still gets hover. */
|
|
77
|
+
children: ReactElement<{
|
|
78
|
+
"aria-describedby"?: string;
|
|
79
|
+
}>;
|
|
80
|
+
/** Hover delay in ms. */
|
|
81
|
+
delay?: number;
|
|
82
|
+
side?: "top" | "bottom" | "left" | "right";
|
|
83
|
+
}
|
|
84
|
+
declare function Tooltip({ label, children, delay, side }: TooltipProps): react_jsx_runtime.JSX.Element;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Studio's tailwind-merge config: teaches it the two scales `theme.css`
|
|
88
|
+
* invents (`text-step-*`, `ctl`/`ctl-sm`/`ctl-lg`) so overrides replace, not stack.
|
|
89
|
+
*/
|
|
90
|
+
declare const cn: node_modules_cn_dist_types.CnFunction;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Base UI lets `className` be a function of the part's state. Studio's parts
|
|
94
|
+
* merge a string with `cn`, so the string form is the one they accept.
|
|
95
|
+
*/
|
|
96
|
+
type StyledProps<T extends ElementType> = Omit<ComponentPropsWithoutRef<T>, "className"> & {
|
|
97
|
+
className?: string;
|
|
98
|
+
};
|
|
99
|
+
/** Forces the settled open look for a gallery shot; CSS-only, open state stays controlled. */
|
|
100
|
+
type PopupPreviewState = "open";
|
|
101
|
+
/** Where the portal puts the popup. `null` keeps it inline, next to its trigger. */
|
|
102
|
+
type PortalContainer$1 = ComponentPropsWithoutRef<typeof Menu$1.Portal>["container"];
|
|
103
|
+
/**
|
|
104
|
+
* Chrome shared by every floating panel (`Popover` too); callers add their own shadow token.
|
|
105
|
+
* `data-starting-style`/`data-ending-style` are Base UI's transition attributes.
|
|
106
|
+
*/
|
|
107
|
+
declare const popupSurface: string;
|
|
108
|
+
type MenuItemTone = "default" | "danger";
|
|
109
|
+
interface PositionedProps {
|
|
110
|
+
side?: "top" | "bottom" | "left" | "right";
|
|
111
|
+
align?: "start" | "center" | "end";
|
|
112
|
+
sideOffset?: number;
|
|
113
|
+
/** Portal target. Pass the shadow root when the trigger lives in one. */
|
|
114
|
+
container?: PortalContainer$1;
|
|
115
|
+
/** Names the popup for assistive tech. A menu with no name is unlabelled. */
|
|
116
|
+
"aria-label"?: string;
|
|
117
|
+
className?: string;
|
|
118
|
+
"data-preview-state"?: PopupPreviewState;
|
|
119
|
+
}
|
|
120
|
+
interface MenuProps extends PositionedProps, Omit<ComponentPropsWithoutRef<typeof Menu$1.Root>, "children"> {
|
|
121
|
+
/** A single element. It becomes the trigger; no wrapper is added around it. */
|
|
122
|
+
trigger: ReactElement;
|
|
123
|
+
/** The items: `MenuItem`, `MenuRadioGroup`, `MenuSeparator`. */
|
|
124
|
+
children: ReactNode;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* A menu opened by its trigger. Uncontrolled by default; pass `open` and
|
|
128
|
+
* `onOpenChange` for a menu whose state lives in a store.
|
|
129
|
+
*/
|
|
130
|
+
declare function Menu({ trigger, children, side, align, sideOffset, container, className, "aria-label": ariaLabel, "data-preview-state": previewState, ...root }: MenuProps): react_jsx_runtime.JSX.Element;
|
|
131
|
+
interface ContextMenuProps extends PositionedProps, Omit<ComponentPropsWithoutRef<typeof ContextMenu$1.Root>, "children"> {
|
|
132
|
+
/**
|
|
133
|
+
* The right-clickable area, as the caller's own element. Its children are
|
|
134
|
+
* kept: the trigger renders that element rather than wrapping it.
|
|
135
|
+
*/
|
|
136
|
+
trigger: ReactElement;
|
|
137
|
+
children: ReactNode;
|
|
138
|
+
}
|
|
139
|
+
/** Opened by right click or long press at the pointer, so `side` and `align` are not offered. */
|
|
140
|
+
declare function ContextMenu({ trigger, children, container, className, "aria-label": ariaLabel, "data-preview-state": previewState, ...root }: Omit<ContextMenuProps, "side" | "align" | "sideOffset">): react_jsx_runtime.JSX.Element;
|
|
141
|
+
/** Keyboard shortcut hint, mono and tabular; exported for hints that are not a plain string. */
|
|
142
|
+
declare function MenuShortcut({ className, ...props }: StyledProps<"span">): react_jsx_runtime.JSX.Element;
|
|
143
|
+
interface MenuItemProps extends StyledProps<typeof Menu$1.Item> {
|
|
144
|
+
/** Rendered as a dim mono hint on the trailing edge. Decorative. */
|
|
145
|
+
shortcut?: string;
|
|
146
|
+
/** `danger` for a destructive action (Delete, Remove). */
|
|
147
|
+
tone?: MenuItemTone;
|
|
148
|
+
"data-preview-state"?: "hover";
|
|
149
|
+
}
|
|
150
|
+
/** One action. `disabled` items are skipped by the arrow keys, not just dimmed. */
|
|
151
|
+
declare function MenuItem({ shortcut, tone, className, children, ...props }: MenuItemProps): react_jsx_runtime.JSX.Element;
|
|
152
|
+
/** Single-choice group; selection is `aria-checked` on each item, which the dot indicator draws from. */
|
|
153
|
+
declare function MenuRadioGroup(props: ComponentPropsWithoutRef<typeof Menu$1.RadioGroup>): react_jsx_runtime.JSX.Element;
|
|
154
|
+
interface MenuRadioItemProps extends StyledProps<typeof Menu$1.RadioItem> {
|
|
155
|
+
"data-preview-state"?: "hover";
|
|
156
|
+
}
|
|
157
|
+
/** One choice in a `MenuRadioGroup`. The dot renders only while it is checked. */
|
|
158
|
+
declare function MenuRadioItem({ className, children, ...props }: MenuRadioItemProps): react_jsx_runtime.JSX.Element;
|
|
159
|
+
/** A hairline between two groups of items. */
|
|
160
|
+
declare function MenuSeparator({ className, ...props }: StyledProps<typeof Menu$1.Separator>): react_jsx_runtime.JSX.Element;
|
|
161
|
+
|
|
162
|
+
type PortalContainer = ComponentPropsWithoutRef<typeof Popover$1.Portal>["container"];
|
|
163
|
+
interface PopoverProps extends Omit<ComponentPropsWithoutRef<typeof Popover$1.Root>, "children"> {
|
|
164
|
+
/** A single element. It becomes the trigger; no wrapper is added around it. */
|
|
165
|
+
trigger: ReactElement;
|
|
166
|
+
/** Arbitrary content. The popover owns none of its keys. */
|
|
167
|
+
children: ReactNode;
|
|
168
|
+
side?: "top" | "bottom" | "left" | "right";
|
|
169
|
+
align?: "start" | "center" | "end";
|
|
170
|
+
sideOffset?: number;
|
|
171
|
+
/** Portal target. Pass the shadow root when the trigger lives in one. */
|
|
172
|
+
container?: PortalContainer;
|
|
173
|
+
/** Names the popup for assistive tech. */
|
|
174
|
+
"aria-label"?: string;
|
|
175
|
+
/**
|
|
176
|
+
* What to focus on open. Defaults to Base UI's behaviour (the first tabbable
|
|
177
|
+
* element), which is what a rename field wants.
|
|
178
|
+
*/
|
|
179
|
+
initialFocus?: ComponentPropsWithoutRef<typeof Popover$1.Popup>["initialFocus"];
|
|
180
|
+
className?: string;
|
|
181
|
+
"data-preview-state"?: PopupPreviewState;
|
|
182
|
+
}
|
|
183
|
+
declare function Popover({ trigger, children, side, align, sideOffset, container, className, initialFocus, "aria-label": ariaLabel, "data-preview-state": previewState, ...root }: PopoverProps): react_jsx_runtime.JSX.Element;
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Shared field look (also used by NumberField and Select). Each interactive state is written
|
|
187
|
+
* twice, real and `data-[preview-state=...]`; `valueControls.test.tsx` asserts the lists match.
|
|
188
|
+
*/
|
|
189
|
+
declare const fieldBase: string;
|
|
190
|
+
/** The text itself, inside the box. The box owns the border and the ring. */
|
|
191
|
+
declare const fieldText: string;
|
|
192
|
+
interface InputProps extends Omit<ComponentPropsWithoutRef<"input">, "value" | "onChange" | "className"> {
|
|
193
|
+
/** The committed value. A draft lives inside until Enter or blur. */
|
|
194
|
+
value: string;
|
|
195
|
+
/** Called with the draft on Enter and on blur, only when it really changed. */
|
|
196
|
+
onCommit: (next: string) => void;
|
|
197
|
+
/** Called once per committed change, for design-input telemetry. */
|
|
198
|
+
onTrack?: () => void;
|
|
199
|
+
/** Marks the field invalid: red boundary and `aria-invalid`. */
|
|
200
|
+
invalid?: boolean;
|
|
201
|
+
className?: string;
|
|
202
|
+
"data-preview-state"?: PreviewState;
|
|
203
|
+
}
|
|
204
|
+
declare function Input({ value, onCommit, onTrack, invalid, disabled, className, "data-preview-state": previewState, ...props }: InputProps): react_jsx_runtime.JSX.Element;
|
|
205
|
+
|
|
206
|
+
interface NumberFieldProps {
|
|
207
|
+
/** Accessible name. The inspector's row label is the usual one. */
|
|
208
|
+
label: string;
|
|
209
|
+
/** The committed value. */
|
|
210
|
+
value: number;
|
|
211
|
+
/** Called when a commit boundary produces a value different from `value`. */
|
|
212
|
+
onCommit: (next: number) => void;
|
|
213
|
+
/** Called once per committed change, for design-input telemetry. */
|
|
214
|
+
onTrack?: () => void;
|
|
215
|
+
/** Rendered beside the number: "px", "%", "deg". Never part of the text. */
|
|
216
|
+
unit?: string;
|
|
217
|
+
min?: number;
|
|
218
|
+
max?: number;
|
|
219
|
+
step?: number;
|
|
220
|
+
disabled?: boolean;
|
|
221
|
+
className?: string;
|
|
222
|
+
"data-preview-state"?: PreviewState;
|
|
223
|
+
}
|
|
224
|
+
declare function NumberField({ label, value, onCommit, onTrack, unit, min, max, step, disabled, className, "data-preview-state": previewState, }: NumberFieldProps): react_jsx_runtime.JSX.Element;
|
|
225
|
+
|
|
226
|
+
interface SelectOption {
|
|
227
|
+
label: string;
|
|
228
|
+
value: string;
|
|
229
|
+
}
|
|
230
|
+
interface SelectProps {
|
|
231
|
+
/** Accessible name for the trigger. */
|
|
232
|
+
label: string;
|
|
233
|
+
value: string;
|
|
234
|
+
options: SelectOption[];
|
|
235
|
+
/** Called when a different option is chosen. */
|
|
236
|
+
onCommit: (next: string) => void;
|
|
237
|
+
/** Called once per committed change, for design-input telemetry. */
|
|
238
|
+
onTrack?: () => void;
|
|
239
|
+
disabled?: boolean;
|
|
240
|
+
className?: string;
|
|
241
|
+
"data-preview-state"?: PreviewState;
|
|
242
|
+
}
|
|
243
|
+
declare function Select({ label, value, options, onCommit, onTrack, disabled, className, "data-preview-state": previewState, }: SelectProps): react_jsx_runtime.JSX.Element;
|
|
244
|
+
|
|
245
|
+
interface SliderProps {
|
|
246
|
+
/** Accessible name for the thumb. The inspector's row label is the usual one. */
|
|
247
|
+
label: string;
|
|
248
|
+
/** The committed value. */
|
|
249
|
+
value: number;
|
|
250
|
+
min: number;
|
|
251
|
+
max: number;
|
|
252
|
+
step?: number;
|
|
253
|
+
/** Every intermediate value while dragging or stepping. Not a commit. */
|
|
254
|
+
onPreview?: (next: number) => void;
|
|
255
|
+
/** Called at a commit boundary when the value really changed. */
|
|
256
|
+
onCommit: (next: number) => void;
|
|
257
|
+
/** Called once per commit boundary, for design-input telemetry. */
|
|
258
|
+
onTrack?: () => void;
|
|
259
|
+
disabled?: boolean;
|
|
260
|
+
className?: string;
|
|
261
|
+
"data-preview-state"?: PreviewState;
|
|
262
|
+
}
|
|
263
|
+
declare function Slider({ label, value, min, max, step, onPreview, onCommit, onTrack, disabled, className, "data-preview-state": previewState, }: SliderProps): react_jsx_runtime.JSX.Element;
|
|
264
|
+
|
|
265
|
+
interface ToggleProps {
|
|
266
|
+
/** Accessible name. */
|
|
267
|
+
label: string;
|
|
268
|
+
checked: boolean;
|
|
269
|
+
/** Called on every flip. */
|
|
270
|
+
onCommit: (next: boolean) => void;
|
|
271
|
+
/** Called once per flip, for design-input telemetry. */
|
|
272
|
+
onTrack?: () => void;
|
|
273
|
+
disabled?: boolean;
|
|
274
|
+
className?: string;
|
|
275
|
+
"data-preview-state"?: PreviewState;
|
|
276
|
+
}
|
|
277
|
+
declare function Toggle({ label, checked, onCommit, onTrack, disabled, className, "data-preview-state": previewState, }: ToggleProps): react_jsx_runtime.JSX.Element;
|
|
10
278
|
|
|
11
279
|
interface PlayerProps {
|
|
12
280
|
projectId?: string;
|
|
@@ -587,10 +855,6 @@ interface BeatHistoryEntry {
|
|
|
587
855
|
}
|
|
588
856
|
declare const usePlayerStore: zustand.UseBoundStore<zustand.StoreApi<PlayerState>>;
|
|
589
857
|
|
|
590
|
-
/**
|
|
591
|
-
* Source Patcher — Maps visual property edits back to source HTML files.
|
|
592
|
-
* Handles inline style updates, attribute changes, and text content.
|
|
593
|
-
*/
|
|
594
858
|
interface PatchOperation {
|
|
595
859
|
type: "inline-style" | "attribute" | "text-content" | "html-attribute" | "rich-text";
|
|
596
860
|
property: string;
|
|
@@ -724,20 +988,25 @@ interface TimelinePropertyGroupKeyframeToggle {
|
|
|
724
988
|
properties: Record<string, number | string>;
|
|
725
989
|
remove: boolean;
|
|
726
990
|
}
|
|
991
|
+
/** Where an outside drop lands; `insertRow` opens a new track at that row boundary of `trackOrder`. */
|
|
992
|
+
type TimelineDropPlacement = {
|
|
993
|
+
start: number;
|
|
994
|
+
track: number;
|
|
995
|
+
} & ({
|
|
996
|
+
insertRow?: null;
|
|
997
|
+
trackOrder?: undefined;
|
|
998
|
+
} | {
|
|
999
|
+
insertRow: number;
|
|
1000
|
+
trackOrder: readonly number[];
|
|
1001
|
+
});
|
|
727
1002
|
/**
|
|
728
1003
|
* Shared callback signatures for timeline editing operations.
|
|
729
1004
|
* Used by NLELayout, Timeline, and any component that passes through
|
|
730
1005
|
* the standard set of timeline mutation handlers.
|
|
731
1006
|
*/
|
|
732
1007
|
interface TimelineDropCallbacks {
|
|
733
|
-
onFileDrop?: (files: File[], placement?:
|
|
734
|
-
|
|
735
|
-
track: number;
|
|
736
|
-
}) => Promise<void> | void;
|
|
737
|
-
onAssetDrop?: (assetPath: string, placement: {
|
|
738
|
-
start: number;
|
|
739
|
-
track: number;
|
|
740
|
-
}) => Promise<void> | void;
|
|
1008
|
+
onFileDrop?: (files: File[], placement?: TimelineDropPlacement) => Promise<void> | void;
|
|
1009
|
+
onAssetDrop?: (assetPath: string, placement: TimelineDropPlacement) => Promise<void> | void;
|
|
741
1010
|
onBlockDrop?: (blockName: string, placement: {
|
|
742
1011
|
start: number;
|
|
743
1012
|
track: number;
|
|
@@ -840,7 +1109,10 @@ interface TimelineClipRenderContext {
|
|
|
840
1109
|
interface TimelineProps extends TimelineDropCallbacks, TimelineEditOverrides {
|
|
841
1110
|
/** Project-scoped reset boundary; soft source refreshes retain the same epoch. */
|
|
842
1111
|
sessionEpoch?: number;
|
|
843
|
-
|
|
1112
|
+
/** keepPlaying: true preserves the current play state across the seek. */
|
|
1113
|
+
onSeek?: (time: number, options?: {
|
|
1114
|
+
keepPlaying?: boolean;
|
|
1115
|
+
}) => void;
|
|
844
1116
|
onDrillDown?: (element: TimelineElement) => void;
|
|
845
1117
|
renderClipContent?: (element: TimelineElement, style: {
|
|
846
1118
|
clip: string;
|
|
@@ -982,14 +1254,11 @@ type RenderClipContent = (element: TimelineElement, style: {
|
|
|
982
1254
|
clip: string;
|
|
983
1255
|
label: string;
|
|
984
1256
|
}) => ReactNode;
|
|
985
|
-
type TimelineDropPlacement = Pick<TimelineElement, "start" | "track">;
|
|
986
1257
|
interface EditorShellProps extends TimelineEditCallbackDeps {
|
|
987
1258
|
/** Left sidebar (media/library), rendered in the top row. */
|
|
988
1259
|
left: ReactNode;
|
|
989
1260
|
/** Right panel (inspector/design) or null when collapsed, in the top row. */
|
|
990
1261
|
right: ReactNode;
|
|
991
|
-
/** Hide the whole shell (e.g. while the storyboard view is active). */
|
|
992
|
-
hidden?: boolean;
|
|
993
1262
|
timelineToolbar: ReactNode;
|
|
994
1263
|
renderClipContent: RenderClipContent;
|
|
995
1264
|
handleTimelineElementDelete: (element: TimelineElement) => Promise<void> | void;
|
|
@@ -1013,9 +1282,13 @@ interface EditorShellProps extends TimelineEditCallbackDeps {
|
|
|
1013
1282
|
isGestureRecording?: boolean;
|
|
1014
1283
|
recordingState?: GestureRecordingState;
|
|
1015
1284
|
onToggleRecording?: () => void;
|
|
1285
|
+
/**
|
|
1286
|
+
* Host layer over the preview, positioned with `usePreviewCompositionRect`. Hidden in
|
|
1287
|
+
* fullscreen and during a block preview; below the selection overlay past z-index 10.
|
|
1288
|
+
*/
|
|
1016
1289
|
gestureOverlay?: ReactNode;
|
|
1017
1290
|
}
|
|
1018
|
-
declare function EditorShell({ left, right,
|
|
1291
|
+
declare function EditorShell({ left, right, timelineToolbar, renderClipContent, handleTimelineElementDelete, handleTimelineAssetDrop, handleTimelineBlockDrop, handleTimelineCompositionDrop, handlePreviewBlockDrop, handleTimelineFileDrop, handleTimelineElementMove, handleTimelineElementsMove, handleTimelineElementResize, handleTimelineGroupResize, handleToggleTrackHidden, setAudioGroupAttribute, handleGroupClips, setElementFxAttribute, handleBlockedTimelineEdit, handleTimelineElementSplit, handleRazorSplit, handleRazorSplitAll, onCopyClip, onPasteClip, onDuplicateClip, canPasteClip, setCompIdToSrc, setCompositionLoading, shouldShowMotionPath, shouldShowSelectedDomBounds, isGestureRecording, recordingState, onToggleRecording, blockPreview, gestureOverlay, }: EditorShellProps): react_jsx_runtime.JSX.Element;
|
|
1019
1292
|
|
|
1020
1293
|
interface NLEPreviewProps {
|
|
1021
1294
|
projectId: string;
|
|
@@ -1049,6 +1322,21 @@ interface CompositionBreadcrumbProps {
|
|
|
1049
1322
|
}
|
|
1050
1323
|
declare function CompositionBreadcrumb({ stack, onNavigate }: CompositionBreadcrumbProps): react_jsx_runtime.JSX.Element | null;
|
|
1051
1324
|
|
|
1325
|
+
interface DomEditCompositionRect {
|
|
1326
|
+
left: number;
|
|
1327
|
+
top: number;
|
|
1328
|
+
width: number;
|
|
1329
|
+
height: number;
|
|
1330
|
+
scaleX: number;
|
|
1331
|
+
scaleY: number;
|
|
1332
|
+
}
|
|
1333
|
+
|
|
1334
|
+
/**
|
|
1335
|
+
* Where the composition sits inside `overlayRef`, in overlay pixels, plus the scale from
|
|
1336
|
+
* composition units to pixels. Follows the live preview iframe across reloads.
|
|
1337
|
+
*/
|
|
1338
|
+
declare function usePreviewCompositionRect(overlayRef: RefObject<HTMLDivElement | null>): DomEditCompositionRect;
|
|
1339
|
+
|
|
1052
1340
|
interface SourceEditorProps {
|
|
1053
1341
|
content: string;
|
|
1054
1342
|
filePath?: string;
|
|
@@ -1268,6 +1556,117 @@ interface AskAgentModalProps {
|
|
|
1268
1556
|
}
|
|
1269
1557
|
declare function AskAgentModal({ selectionLabel, contextPreview, anchorPoint, onSubmit, onClose, }: AskAgentModalProps): react_jsx_runtime.JSX.Element;
|
|
1270
1558
|
|
|
1559
|
+
/**
|
|
1560
|
+
* What the dev server knows about this machine's FFmpeg, as reported by
|
|
1561
|
+
* `GET /api/environment/ffmpeg`. Studio asks when the Render panel opens so a
|
|
1562
|
+
* missing encoder is a prompt with an install command, not a failed export an
|
|
1563
|
+
* hour into the work.
|
|
1564
|
+
*/
|
|
1565
|
+
interface FfmpegStatus {
|
|
1566
|
+
ok: boolean;
|
|
1567
|
+
/** Short headline, e.g. "FFmpeg not found". Absent when ok. */
|
|
1568
|
+
title?: string;
|
|
1569
|
+
/** Why it cannot run, in the server's words. Absent when ok. */
|
|
1570
|
+
detail?: string;
|
|
1571
|
+
/** Prose remediation, including the manual route where one exists. */
|
|
1572
|
+
hint?: string;
|
|
1573
|
+
/** A single pasteable install command, when this platform has one. */
|
|
1574
|
+
command?: string;
|
|
1575
|
+
}
|
|
1576
|
+
|
|
1577
|
+
interface RenderJob {
|
|
1578
|
+
id: string;
|
|
1579
|
+
status: "rendering" | "complete" | "failed" | "cancelled";
|
|
1580
|
+
progress: number;
|
|
1581
|
+
stage?: string;
|
|
1582
|
+
error?: string;
|
|
1583
|
+
filename: string;
|
|
1584
|
+
createdAt: number;
|
|
1585
|
+
durationMs?: number;
|
|
1586
|
+
}
|
|
1587
|
+
type ResolutionPreset = CanvasResolution;
|
|
1588
|
+
interface StartRenderOptions {
|
|
1589
|
+
fps?: number;
|
|
1590
|
+
quality?: "draft" | "standard" | "high";
|
|
1591
|
+
format?: "mp4" | "webm" | "mov";
|
|
1592
|
+
/** `"auto"` (default) renders at the composition's authored dimensions. */
|
|
1593
|
+
resolution?: ResolutionPreset | "auto";
|
|
1594
|
+
/**
|
|
1595
|
+
* Render a specific composition file. Omit it to render the composition the
|
|
1596
|
+
* user currently has open — only the sidebar's per-composition Render button
|
|
1597
|
+
* names one, because it renders a card the user is not looking at.
|
|
1598
|
+
*/
|
|
1599
|
+
composition?: string;
|
|
1600
|
+
/**
|
|
1601
|
+
* Composition-variable overrides ({variableId: value}), forwarded to the
|
|
1602
|
+
* render route and injected as window.__hfVariables — the same channel
|
|
1603
|
+
* `hyperframes render --variables` uses.
|
|
1604
|
+
*/
|
|
1605
|
+
variables?: Record<string, unknown>;
|
|
1606
|
+
}
|
|
1607
|
+
declare function useRenderQueue(projectId: string | null, activeCompPathRef: {
|
|
1608
|
+
current: string | null;
|
|
1609
|
+
}): {
|
|
1610
|
+
jobs: RenderJob[];
|
|
1611
|
+
isRendering: boolean;
|
|
1612
|
+
loadError: string | null;
|
|
1613
|
+
actionError: string | null;
|
|
1614
|
+
dismissActionError: () => void;
|
|
1615
|
+
reloadRenders: () => Promise<void>;
|
|
1616
|
+
deleteRender: (jobId: string) => Promise<void>;
|
|
1617
|
+
cancelRender: (jobId: string) => Promise<void>;
|
|
1618
|
+
clearCompleted: () => void;
|
|
1619
|
+
startRender: (options: unknown) => Promise<void>;
|
|
1620
|
+
ffmpeg: FfmpegStatus | null;
|
|
1621
|
+
ffmpegMissing: boolean;
|
|
1622
|
+
ffmpegChecking: boolean;
|
|
1623
|
+
recheckFfmpeg: () => void;
|
|
1624
|
+
};
|
|
1625
|
+
|
|
1626
|
+
interface CompositionDimensions {
|
|
1627
|
+
width: number;
|
|
1628
|
+
height: number;
|
|
1629
|
+
}
|
|
1630
|
+
type StartRenderHandler = (format: "mp4" | "webm" | "mov", quality: "draft" | "standard" | "high", resolution: ResolutionPreset | "auto", fps: 24 | 30 | 60) => void | Promise<void>;
|
|
1631
|
+
interface RenderQueueProps {
|
|
1632
|
+
jobs: RenderJob[];
|
|
1633
|
+
projectId: string;
|
|
1634
|
+
onDelete: (jobId: string) => void;
|
|
1635
|
+
onCancel?: (jobId: string) => void;
|
|
1636
|
+
onClearCompleted: () => void;
|
|
1637
|
+
onStartRender: StartRenderHandler;
|
|
1638
|
+
isRendering: boolean;
|
|
1639
|
+
/** History fetch failure (null when the last load succeeded). */
|
|
1640
|
+
loadError?: string | null;
|
|
1641
|
+
/** Retry a failed history load. */
|
|
1642
|
+
onRetryLoad?: () => void;
|
|
1643
|
+
/** Failure of a delete/cancel action, shown inline until dismissed. */
|
|
1644
|
+
actionError?: string | null;
|
|
1645
|
+
onDismissActionError?: () => void;
|
|
1646
|
+
/**
|
|
1647
|
+
* Authored dimensions of the active composition. Used to pick the
|
|
1648
|
+
* matching preset (landscape / portrait / square) when the user selects
|
|
1649
|
+
* a 1080p or 4K scale. `null` falls back to landscape (legacy default).
|
|
1650
|
+
*/
|
|
1651
|
+
compositionDimensions?: CompositionDimensions | null;
|
|
1652
|
+
/**
|
|
1653
|
+
* Encoder availability, owned by useRenderQueue so the panel's Export button
|
|
1654
|
+
* and the header's agree. `null` means "no answer", not "missing".
|
|
1655
|
+
*/
|
|
1656
|
+
ffmpeg: FfmpegStatus | null;
|
|
1657
|
+
ffmpegChecking: boolean;
|
|
1658
|
+
onRecheckFfmpeg: () => void;
|
|
1659
|
+
}
|
|
1660
|
+
declare const RenderQueue: react.NamedExoticComponent<RenderQueueProps>;
|
|
1661
|
+
|
|
1662
|
+
interface PersistedRenderSettings {
|
|
1663
|
+
format: "mp4" | "webm" | "mov";
|
|
1664
|
+
quality: "draft" | "standard" | "high";
|
|
1665
|
+
fps: 24 | 30 | 60;
|
|
1666
|
+
}
|
|
1667
|
+
declare function getPersistedRenderSettings(): PersistedRenderSettings;
|
|
1668
|
+
declare function persistRenderSettings(format: PersistedRenderSettings["format"], quality: PersistedRenderSettings["quality"], fps: PersistedRenderSettings["fps"]): void;
|
|
1669
|
+
|
|
1271
1670
|
interface PickedElement {
|
|
1272
1671
|
id: string | null;
|
|
1273
1672
|
tagName: string;
|
|
@@ -1343,4 +1742,4 @@ declare function findElementBlock(html: string, elementId: string): {
|
|
|
1343
1742
|
isSelfClosing: boolean;
|
|
1344
1743
|
} | null;
|
|
1345
1744
|
|
|
1346
|
-
export { type AgentModalAnchorPoint, type AgentPromptElementInfo, AskAgentModal, type AskAgentModalProps, CompositionBreadcrumb, type CompositionLevel, CompositionThumbnail, EditorShell, FileTree, NLEPreview, type PatchOperation, type PickedElement, Player, PlayerControls, PropertyPanel, SourceEditor, StudioApp, Timeline, type TimelineElement, VideoThumbnail, applyPatch, buildPickerAgentContextPreview, buildPickerAgentPrompt, findElementBlock, formatTime, liveTime, mergeStyleIntoTag, parseStyleString, resolveIframe, resolveSourceFile, useElementPicker, usePlayerStore, useTimelinePlayer };
|
|
1745
|
+
export { type AgentModalAnchorPoint, type AgentPromptElementInfo, AskAgentModal, type AskAgentModalProps, Button, type ButtonSize, type ButtonVariant, CompositionBreadcrumb, type CompositionDimensions, type CompositionLevel, CompositionThumbnail, ContextMenu, EditorShell, type EditorShellProps, 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, Tab, TabPanel, Tabs, TabsList, Timeline, type TimelineElement, Toggle, type ToggleProps, Tooltip, VideoThumbnail, applyPatch, buildPickerAgentContextPreview, buildPickerAgentPrompt, buttonBase, buttonVariants, cn, fieldBase, fieldText, findElementBlock, formatTime, getPersistedRenderSettings, liveTime, mergeStyleIntoTag, parseStyleString, persistRenderSettings, popupSurface, resolveIframe, resolveSourceFile, useElementPicker, usePlayerStore, usePreviewCompositionRect, useRenderQueue, 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-
|
|
9
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-DocJlW2v.js"></script>
|
|
9
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CxAu_Okg.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
|
12
12
|
<div data-hf-id="hf-aph5" id="root"></div>
|