@hyperframes/studio 0.8.129 → 0.8.131

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 +1 @@
1
- import{g as P}from"./index-C9YkEyN4.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};
1
+ import{g as P}from"./index-BEcHKkGY.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};
@@ -1,4 +1,4 @@
1
- import{n as Qi}from"./index-C9YkEyN4.js";/*!
1
+ import{n as Qi}from"./index-BEcHKkGY.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
package/dist/index.d.ts CHANGED
@@ -2865,6 +2865,7 @@ declare function usePersistentEditHistory({ projectId }: UsePersistentEditHistor
2865
2865
  }[];
2866
2866
  };
2867
2867
  recordEdit: ({ label, coalesceKey, coalesceMs, files, created }: RecordEditInput$5) => Promise<void>;
2868
+ claimKey: (key: string) => string;
2868
2869
  undo: (callbacks: ApplyCallbacks) => Promise<ApplyResult>;
2869
2870
  redo: (callbacks: ApplyCallbacks) => Promise<ApplyResult>;
2870
2871
  predict: (direction: "undo" | "redo") => {
@@ -3767,6 +3768,66 @@ interface ConnectedDomEditOverlayProps extends HostInputProps {
3767
3768
  }
3768
3769
  declare function ConnectedDomEditOverlay({ activeCompositionPath, showHoverSelection, shouldShowSelectedDomBounds, isGestureRecording, canvasInput, allowBodyDrag, onTextEditingChange, onSelectionBoxClick, }: ConnectedDomEditOverlayProps): react_jsx_runtime.JSX.Element;
3769
3770
 
3771
+ interface StudioShellValue {
3772
+ projectId: string;
3773
+ activeCompPath: string | null;
3774
+ setActiveCompPath: (path: string | null) => void;
3775
+ showToast: (message: string, tone?: "error" | "info") => void;
3776
+ previewIframeRef: React.MutableRefObject<HTMLIFrameElement | null>;
3777
+ editHistory: {
3778
+ canUndo: boolean;
3779
+ canRedo: boolean;
3780
+ undoLabel: string | undefined;
3781
+ redoLabel: string | undefined;
3782
+ };
3783
+ /**
3784
+ * Why a composition write would be refused right now, or null when writes
3785
+ * are possible. Derived from the paused save queue and the external-file
3786
+ * conflict state, both of which are otherwise banners with no lock behind
3787
+ * them. One field rather than two, so there is one owner of the question.
3788
+ */
3789
+ writeBlockedReason: string | null;
3790
+ handleUndo: () => Promise<void>;
3791
+ handleRedo: () => Promise<void>;
3792
+ renderQueue: {
3793
+ jobs: unknown[];
3794
+ isRendering: boolean;
3795
+ loadError: string | null;
3796
+ actionError: string | null;
3797
+ dismissActionError: () => void;
3798
+ reloadRenders: () => void;
3799
+ deleteRender: (jobId: string) => void;
3800
+ cancelRender: (jobId: string) => void;
3801
+ clearCompleted: () => void;
3802
+ startRender: (options: unknown) => Promise<void>;
3803
+ /** Encoder availability. `null` means "no answer", not "missing". */
3804
+ ffmpeg: FfmpegStatus | null;
3805
+ /** True only when the server positively reported no usable FFmpeg. */
3806
+ ffmpegMissing: boolean;
3807
+ ffmpegChecking: boolean;
3808
+ recheckFfmpeg: () => void;
3809
+ };
3810
+ compositionDimensions: CompositionDimensions | null;
3811
+ waitForPendingDomEditSaves: () => Promise<void>;
3812
+ handlePreviewIframeRef: (iframe: HTMLIFrameElement | null) => void;
3813
+ }
3814
+ interface StudioPlaybackValue {
3815
+ captionEditMode: boolean;
3816
+ compositionLoading: boolean;
3817
+ refreshKey: number;
3818
+ setRefreshKey: React.Dispatch<React.SetStateAction<number>>;
3819
+ timelineElements: TimelineElement[];
3820
+ isPlaying: boolean;
3821
+ refreshPreviewDocumentVersion: () => void;
3822
+ }
3823
+
3824
+ /** Studio state the panel reads; passed by hosts outside Studio's providers. Keep previewIframeRef stable,
3825
+ * and bump refreshKey when the preview document is rebuilt without an iframe load. */
3826
+ type LayersPanelHost = Pick<StudioShellValue, "previewIframeRef" | "activeCompPath" | "showToast"> & Pick<StudioPlaybackValue, "timelineElements" | "isPlaying"> & Partial<Pick<StudioPlaybackValue, "refreshKey" | "compositionLoading">>;
3827
+ declare const LayersPanel: react.NamedExoticComponent<{
3828
+ host?: LayersPanelHost;
3829
+ }>;
3830
+
3770
3831
  interface DomEditZOrder {
3771
3832
  /** False in a read-only preview, for an element no longer in the live preview, or at that end of its stacking set. */
3772
3833
  enabled: (sel: DomEditSelection, action: ZOrderAction) => boolean;
@@ -4230,4 +4291,4 @@ declare function buildStudioTools(depsRef: {
4230
4291
  readonly current: StudioAgentToolsDeps;
4231
4292
  }): ModelContextTool[];
4232
4293
 
4233
- export { type AgentModalAnchorPoint, type AgentPromptElementInfo, AskAgentModal, type AskAgentModalProps, AudioMeterStrip, type AudioMeterStripProps, AudioWaveform, type AudioWaveformProps, type BlockedTimelineEditIntent, type CanEditTimelineElement, ColorField, CompositionBreadcrumb, type CompositionDimensions, type CompositionLevel, CompositionThumbnail, ConnectedDomEditOverlay, type ConnectedDomEditOverlayProps, DEFAULT_SHORTCUT_SECTIONS, Dock, type DockController, type DomEditCapabilities, type DomEditCommitDeclineReason, type DomEditCommitOutcome, type DomEditGroupPathOffsetCommit, DomEditOverlay, type DomEditOverlayProps, DomEditProvider, type DomEditSelection, type DomEditZOrder, type DomGeometryCommits, type EditHistoryHandle, EditorShell, type EditorShellProps, type ExternalFileChangeBlockedState, type ExternalFileChangeCoordinatorHandle, ExternalFileConflictBanner, type FadeEdge, type FadeHandleBox, type FadeHandleClipBox, type FfmpegStatus, FileTree, GradientField, GridOverlay, ImageThumbnail, type ImageThumbnailProps, type LinkShortcutCallbacks, type MarqueeGestures, type MarqueeGesturesDeps, MarqueeOverlay, type MarqueeOverlayProps, type Rect$1 as MarqueeRect, type ModelContextTool, NLEPreview, type PanelId, type PatchOperation, type PersistedRenderSettings, type PickedElement, PlayerControls, type PlayerHandle, type PlayerHandleElement, type PlayerHandleListener, type PlayerHandleTimeListener, type DomEditCompositionRect as PreviewCompositionRect, PreviewGuides, PreviewOverlayProvider, type PreviewOverlayProviderProps, type PreviewPromotion, PreviewReadOnlyProvider, type PreviewSnapPreferences, PropertyPanel, type RenderJob, RenderQueue, type RenderQueueProps, type ResolutionPreset, SNAP_THRESHOLD_PX, type ShortcutHint, type ShortcutSection, ShortcutsButton, type ShortcutsButtonProps, type SnapContext, type SnapEdge, type SnapGuide, SnapGuideOverlay, type SnapGuideOverlayProps, type SnapGuidesState, type Rect as SnapRect, type SnapResult, type SnapTarget, SnapToolbar, SourceEditor, type SpacingGuide, type StartRenderOptions, type StudioAgentToolsDeps, StudioApp, StudioFileConflictError, type StudioLookSnapshot, type StudioPendingEditsDrainResult, TRACK_H, type ThumbnailPriority, type ThumbnailStill, Timeline, TimelineClipMenu, type TimelineClipMenuItem, type TimelineClipRenderContext, type TimelineEditCallbacks, type TimelineEditOutcome, type TimelineEditPermission, TimelineEditPopover, TimelineEditProvider, type TimelineElement, TimelineEmptyStatePart, TimelineFrame, TimelineGapMenu, TimelineHistoryButtons, type TimelineHistoryButtonsProps, TimelineKeyframeMenu, TimelineLanes, TimelineOverlays, TimelinePane, type TimelinePaneProps, TimelinePlayhead, TimelineProvider, TimelineRazorGuide, TimelineRuler, TimelineShortcutHint, type TimelineTheme, type TimelineTimeRange$1 as TimelineTimeRange, TimelineToolbar, type TimelineToolbarProps, type TimelineTrackPadding, type TimelineZIndexReorderCommit, type ToolResult, type UseClipboardOptions, type UseDomEditSessionParams, type UseDomGeometryCommitOptions, type UseDomStyleCommitOptions, type UseEditHistoryActionsOptions, type UsePersistentEditHistoryOptions, type UsePreviewPersistenceParams, type UseProjectFileWriterOptions, type UseRenderClipContentOptions, type UseThumbnailStillOptions, type UseTimelineEditingOptions, VideoThumbnail, type ZOrderAction, applyPatch, buildCompositionSnapTarget, buildGridSnapEdges, buildPickerAgentContextPreview, buildPickerAgentPrompt, buildStudioTools, collectSnapContext, collectStudioLookScene, dispatchLinkShortcut, displayTrackOrder, extractSnapTargets, fadeHandleBoxes, findElementBlock, flushStudioPendingEdits, formatTime, getPersistedRenderSettings, liveTime, mergeStyleIntoTag, openAudioGainDialog, parseStyleString, persistRenderSettings, resolveDomEditSelection, resolveEquidistanceGuides, resolveGuideLineRect, resolveIframe, resolveSnapAdjustment, resolveSourceFile, revertNewestStudioPendingEdit, snapEngagedForTravel, useAudioGainDialogStore, useAudioMetersVisible, useClipboard, useCompositionStack, useDockLayoutStore, useDomEditSelectionContext, useDomEditSession, useDomEditZOrder, useDomGeometryCommit, useDomStyleCommit, useEditHistoryActions, useElementPicker, useLivePreviewIframe, useMarqueeGestures, usePersistentEditHistory, usePlayerHandle, usePlayerStore, usePreviewCompositionRect, usePreviewGuidesStore, usePreviewIframeStore, usePreviewOverlayContext, usePreviewPersistence, useProjectFileWriter, useRenderClipContent, useRenderQueue, useThumbnailStill, useTimelineContext, useTimelineEditing, useTimelinePlayer };
4294
+ export { type AgentModalAnchorPoint, type AgentPromptElementInfo, AskAgentModal, type AskAgentModalProps, AudioMeterStrip, type AudioMeterStripProps, AudioWaveform, type AudioWaveformProps, type BlockedTimelineEditIntent, type CanEditTimelineElement, ColorField, CompositionBreadcrumb, type CompositionDimensions, type CompositionLevel, CompositionThumbnail, ConnectedDomEditOverlay, type ConnectedDomEditOverlayProps, DEFAULT_SHORTCUT_SECTIONS, Dock, type DockController, type DomEditCapabilities, type DomEditCommitDeclineReason, type DomEditCommitOutcome, type DomEditGroupPathOffsetCommit, DomEditOverlay, type DomEditOverlayProps, DomEditProvider, type DomEditSelection, type DomEditZOrder, type DomGeometryCommits, type EditHistoryHandle, EditorShell, type EditorShellProps, type ExternalFileChangeBlockedState, type ExternalFileChangeCoordinatorHandle, ExternalFileConflictBanner, type FadeEdge, type FadeHandleBox, type FadeHandleClipBox, type FfmpegStatus, FileTree, GradientField, GridOverlay, ImageThumbnail, type ImageThumbnailProps, LayersPanel, type LayersPanelHost, type LinkShortcutCallbacks, type MarqueeGestures, type MarqueeGesturesDeps, MarqueeOverlay, type MarqueeOverlayProps, type Rect$1 as MarqueeRect, type ModelContextTool, NLEPreview, type PanelId, type PatchOperation, type PersistedRenderSettings, type PickedElement, PlayerControls, type PlayerHandle, type PlayerHandleElement, type PlayerHandleListener, type PlayerHandleTimeListener, type DomEditCompositionRect as PreviewCompositionRect, PreviewGuides, PreviewOverlayProvider, type PreviewOverlayProviderProps, type PreviewPromotion, PreviewReadOnlyProvider, type PreviewSnapPreferences, PropertyPanel, type RenderJob, RenderQueue, type RenderQueueProps, type ResolutionPreset, SNAP_THRESHOLD_PX, type ShortcutHint, type ShortcutSection, ShortcutsButton, type ShortcutsButtonProps, type SnapContext, type SnapEdge, type SnapGuide, SnapGuideOverlay, type SnapGuideOverlayProps, type SnapGuidesState, type Rect as SnapRect, type SnapResult, type SnapTarget, SnapToolbar, SourceEditor, type SpacingGuide, type StartRenderOptions, type StudioAgentToolsDeps, StudioApp, StudioFileConflictError, type StudioLookSnapshot, type StudioPendingEditsDrainResult, TRACK_H, type ThumbnailPriority, type ThumbnailStill, Timeline, TimelineClipMenu, type TimelineClipMenuItem, type TimelineClipRenderContext, type TimelineEditCallbacks, type TimelineEditOutcome, type TimelineEditPermission, TimelineEditPopover, TimelineEditProvider, type TimelineElement, TimelineEmptyStatePart, TimelineFrame, TimelineGapMenu, TimelineHistoryButtons, type TimelineHistoryButtonsProps, TimelineKeyframeMenu, TimelineLanes, TimelineOverlays, TimelinePane, type TimelinePaneProps, TimelinePlayhead, TimelineProvider, TimelineRazorGuide, TimelineRuler, TimelineShortcutHint, type TimelineTheme, type TimelineTimeRange$1 as TimelineTimeRange, TimelineToolbar, type TimelineToolbarProps, type TimelineTrackPadding, type TimelineZIndexReorderCommit, type ToolResult, type UseClipboardOptions, type UseDomEditSessionParams, type UseDomGeometryCommitOptions, type UseDomStyleCommitOptions, type UseEditHistoryActionsOptions, type UsePersistentEditHistoryOptions, type UsePreviewPersistenceParams, type UseProjectFileWriterOptions, type UseRenderClipContentOptions, type UseThumbnailStillOptions, type UseTimelineEditingOptions, VideoThumbnail, type ZOrderAction, applyPatch, buildCompositionSnapTarget, buildGridSnapEdges, buildPickerAgentContextPreview, buildPickerAgentPrompt, buildStudioTools, collectSnapContext, collectStudioLookScene, dispatchLinkShortcut, displayTrackOrder, extractSnapTargets, fadeHandleBoxes, findElementBlock, flushStudioPendingEdits, formatTime, getPersistedRenderSettings, liveTime, mergeStyleIntoTag, openAudioGainDialog, parseStyleString, persistRenderSettings, resolveDomEditSelection, resolveEquidistanceGuides, resolveGuideLineRect, resolveIframe, resolveSnapAdjustment, resolveSourceFile, revertNewestStudioPendingEdit, snapEngagedForTravel, useAudioGainDialogStore, useAudioMetersVisible, useClipboard, useCompositionStack, useDockLayoutStore, useDomEditSelectionContext, useDomEditSession, useDomEditZOrder, useDomGeometryCommit, useDomStyleCommit, useEditHistoryActions, useElementPicker, useLivePreviewIframe, useMarqueeGestures, usePersistentEditHistory, usePlayerHandle, usePlayerStore, usePreviewCompositionRect, usePreviewGuidesStore, usePreviewIframeStore, usePreviewOverlayContext, usePreviewPersistence, useProjectFileWriter, useRenderClipContent, useRenderQueue, useThumbnailStill, useTimelineContext, useTimelineEditing, useTimelinePlayer };
package/dist/index.html CHANGED
@@ -14,7 +14,7 @@
14
14
  document.documentElement.dataset.theme = "paper";
15
15
  }
16
16
  </script>
17
- <script type="module" crossorigin src="/assets/index-C9YkEyN4.js"></script>
17
+ <script type="module" crossorigin src="/assets/index-BEcHKkGY.js"></script>
18
18
  <link rel="stylesheet" crossorigin href="/assets/index-D11atkBt.css">
19
19
  </head>
20
20
  <body>
package/dist/index.js CHANGED
@@ -44064,7 +44064,7 @@ function useMirrorLaneMoveCommit() {
44064
44064
  (selectionKey, coalesceKey, resolveMove) => {
44065
44065
  const els = elementsRef.current;
44066
44066
  const element = selectionKey ? els.find((e) => (e.key ?? e.id) === selectionKey) : void 0;
44067
- if (!element) return Promise.resolve(false);
44067
+ if (!element || !onMoveElements) return Promise.resolve(false);
44068
44068
  const move = resolveMove(element, els);
44069
44069
  if (!move) return Promise.resolve(false);
44070
44070
  return commitZMirrorLaneMove(
@@ -73774,6 +73774,7 @@ function usePersistentEditHistory({ projectId }) {
73774
73774
  projectIdRef.current = projectId;
73775
73775
  const [own] = useState111(createOwnHistory);
73776
73776
  const [pageKeyScope] = useState111(generateId);
73777
+ const claimKey = useCallback100((key2) => `${pageKeyScope}:${key2}`, [pageKeyScope]);
73777
73778
  const refresh2 = useCallback100(async () => {
73778
73779
  if (!projectId) return;
73779
73780
  const seen = own.changes();
@@ -73805,7 +73806,7 @@ function usePersistentEditHistory({ projectId }) {
73805
73806
  paths,
73806
73807
  overwrote: await overwroteVersions(files),
73807
73808
  ...coalesceKey && {
73808
- coalesceKey: `${pageKeyScope}:${coalesceKey}`,
73809
+ coalesceKey: claimKey(coalesceKey),
73809
73810
  idleMs: coalesceMs ?? DEFAULT_COALESCE_MS
73810
73811
  }
73811
73812
  });
@@ -73817,7 +73818,7 @@ function usePersistentEditHistory({ projectId }) {
73817
73818
  heldClaimRef.current = claimed && coalesceKey ? { paths, at: Date.now() } : null;
73818
73819
  await refresh2();
73819
73820
  },
73820
- [projectId, refresh2, own, pageKeyScope]
73821
+ [projectId, refresh2, own, claimKey]
73821
73822
  );
73822
73823
  const step = useCallback100(
73823
73824
  async (direction, callbacks) => {
@@ -73891,6 +73892,7 @@ function usePersistentEditHistory({ projectId }) {
73891
73892
  redoPaths: view.forward?.paths ?? [],
73892
73893
  state,
73893
73894
  recordEdit,
73895
+ claimKey,
73894
73896
  undo,
73895
73897
  redo,
73896
73898
  predict: own.predict,
@@ -92634,9 +92636,25 @@ function createRafThrottle(run, throttleMs = 100) {
92634
92636
  }
92635
92637
  };
92636
92638
  }
92637
- var LayersPanel = memo50(function LayersPanel2() {
92638
- const { previewIframeRef, activeCompPath, showToast } = useStudioShellContext();
92639
- const { refreshKey, compositionLoading, timelineElements, isPlaying } = useStudioPlaybackContext();
92639
+ function useLayersPanelHost(host) {
92640
+ const shell = useStudioShellContextOptional();
92641
+ const playback = useStudioPlaybackContextOptional();
92642
+ if (host) return host;
92643
+ if (!shell || !playback) {
92644
+ throw new Error("LayersPanel needs a host prop outside Studio's shell and playback providers");
92645
+ }
92646
+ return { ...shell, ...playback };
92647
+ }
92648
+ var LayersPanel = memo50(function LayersPanel2({ host }) {
92649
+ const {
92650
+ previewIframeRef,
92651
+ activeCompPath,
92652
+ showToast,
92653
+ refreshKey,
92654
+ compositionLoading,
92655
+ timelineElements,
92656
+ isPlaying
92657
+ } = useLayersPanelHost(host);
92640
92658
  const currentTime = usePlayerStore((s) => s.currentTime);
92641
92659
  const zEditVersion = usePlayerStore((s) => s.zEditVersion);
92642
92660
  const {
@@ -99543,6 +99561,7 @@ export {
99543
99561
  IconButton,
99544
99562
  ImageThumbnail,
99545
99563
  Input,
99564
+ LayersPanel,
99546
99565
  MarqueeOverlay,
99547
99566
  Menu,
99548
99567
  MenuItem,