hyperframes 0.8.88 → 0.8.89

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 (94) hide show
  1. package/dist/{add-6EIX4VO2.js → add-JDX7VHMM.js} +5 -5
  2. package/dist/{asset-BYFQENI4.js → asset-ZQU3ZAHZ.js} +2 -2
  3. package/dist/{auth-CNYWEFA6.js → auth-ZI5X6SXG.js} +1 -1
  4. package/dist/{autoUpdate-FN4SJBTE.js → autoUpdate-BDREI4XN.js} +2 -2
  5. package/dist/{backgroundChecks-ODS4VEB5.js → backgroundChecks-52MY7SIC.js} +3 -3
  6. package/dist/backgroundChecksWorker.js +3 -3
  7. package/dist/{beats-RTVNXBLK.js → beats-77Z6UPMB.js} +4 -4
  8. package/dist/{benchmark-KKPDM7PU.js → benchmark-HR242B6Q.js} +5 -5
  9. package/dist/{browser-ADH34IWX.js → browser-CLQNZB5J.js} +3 -3
  10. package/dist/{catalog-5NIRSEF7.js → catalog-OAJVYTXP.js} +5 -5
  11. package/dist/{check-PRVHJKEC.js → check-AJB25CBI.js} +9 -9
  12. package/dist/{checkBrowser-CY3FMWQV.js → checkBrowser-RTZFBO62.js} +7 -7
  13. package/dist/{chunk-2KCIKXV3.js → chunk-BEZ5LKUM.js} +2 -2
  14. package/dist/{chunk-ICWOWWC6.js → chunk-C22UJWNH.js} +1 -1
  15. package/dist/{chunk-UP5KFGFZ.js → chunk-CZXT2DRB.js} +2 -2
  16. package/dist/{chunk-4ARA5OTM.js → chunk-EAJNP7C7.js} +1 -1
  17. package/dist/{chunk-F6D4LJQG.js → chunk-ELQAAO4F.js} +1 -1
  18. package/dist/{chunk-ZDAF2XYX.js → chunk-J4ZDN5N7.js} +2 -2
  19. package/dist/{chunk-BM25TRQX.js → chunk-LTCGOUKZ.js} +2 -2
  20. package/dist/{chunk-RXRF3N5D.js → chunk-PKK6QWAQ.js} +1 -1
  21. package/dist/{chunk-XDDHE52R.js → chunk-RLKPZQKI.js} +2 -2
  22. package/dist/{chunk-Q2FGKCVO.js → chunk-ROFOQAPQ.js} +2 -2
  23. package/dist/{chunk-AV7ASJOK.js → chunk-S2F6QM6J.js} +1 -1
  24. package/dist/{chunk-RIEQ7B3Q.js → chunk-SAYNFMCN.js} +1 -1
  25. package/dist/{chunk-UX3MPYCP.js → chunk-TQNLHVZB.js} +2 -2
  26. package/dist/{chunk-VGS3ZUDB.js → chunk-XMDQQAIB.js} +1 -1
  27. package/dist/{chunk-DDXTUSZ3.js → chunk-Z4LBLZ3I.js} +2 -2
  28. package/dist/{clean-ILEUS4I4.js → clean-YNSDX62K.js} +3 -3
  29. package/dist/cli.js +44 -44
  30. package/dist/{cloud-YKZ6FMFO.js → cloud-O6C6D2CC.js} +4 -4
  31. package/dist/{compare-A7HXMQA2.js → compare-32ZYX7EU.js} +4 -4
  32. package/dist/{component-GSYJQJH2.js → component-OX6ODG5G.js} +3 -3
  33. package/dist/{compositions-4K3YFH25.js → compositions-IAWH2EMO.js} +5 -5
  34. package/dist/{delete-5R7CYMLA.js → delete-4AGDWC2T.js} +2 -2
  35. package/dist/{doctor-HGGU5EPV.js → doctor-AH7IX5Z6.js} +3 -3
  36. package/dist/{events-CT5MGBWG.js → events-6M6FDQZZ.js} +3 -3
  37. package/dist/{events-RQHXK2BA.js → events-CJRCDPWV.js} +2 -2
  38. package/dist/{feedback-S5TP76SF.js → feedback-C6DJ6XKA.js} +4 -4
  39. package/dist/{figma-JVTSWBQC.js → figma-L5RHNGY7.js} +3 -3
  40. package/dist/fontLocalizeCli.js +1 -1
  41. package/dist/{get-B6QNBIOY.js → get-TBBCYF5B.js} +2 -2
  42. package/dist/{grade-compare-53VJQ6AR.js → grade-compare-FNPPD6UE.js} +4 -4
  43. package/dist/{help-74I7OBNZ.js → help-L4V4PV7C.js} +1 -1
  44. package/dist/{history-JAICBG5J.js → history-EEWE52BC.js} +5 -5
  45. package/dist/hyperframes-player.global.js +1 -1
  46. package/dist/{info-DPLY233F.js → info-VQYR7VW6.js} +5 -5
  47. package/dist/{init-GH473WVQ.js → init-L5BK5HGZ.js} +6 -6
  48. package/dist/{inspect-ALZBOAVC.js → inspect-4DSMPUHN.js} +6 -6
  49. package/dist/{keyframes-3IHD4566.js → keyframes-AXHMLOSU.js} +5 -5
  50. package/dist/{layout-DIE6IDNL.js → layout-ZV23GQU6.js} +6 -6
  51. package/dist/{lint-BK7RM2VI.js → lint-HZIRYUSA.js} +6 -6
  52. package/dist/{list-IETRGPUL.js → list-DLBDHWZ2.js} +2 -2
  53. package/dist/{login-6MOHVUEO.js → login-3PLQRQEP.js} +4 -4
  54. package/dist/{media-treatment-GLTDA25U.js → media-treatment-7TZ7L7NU.js} +5 -5
  55. package/dist/{normalize-audio-225AHD54.js → normalize-audio-SX64JNLW.js} +4 -4
  56. package/dist/{play-N2G5Z7OL.js → play-VX2LSHXR.js} +4 -4
  57. package/dist/{present-TVY4QRSP.js → present-F2DPEKZU.js} +4 -4
  58. package/dist/{preview-H5D4G6V6.js → preview-ARITZNNL.js} +5 -5
  59. package/dist/{render-JDBG7432.js → render-2VWTXUCT.js} +5 -5
  60. package/dist/{render-LDKZKOVA.js → render-FT4NTFKZ.js} +5 -5
  61. package/dist/skills/media-use/audio/references/bgm.md +2 -0
  62. package/dist/skills/media-use/audio/references/sfx.md +2 -3
  63. package/dist/skills/media-use/audio/references/tts.md +1 -1
  64. package/dist/skills/media-use/audio/scripts/audio.mjs +5 -2
  65. package/dist/skills/media-use/audio/scripts/audio.test.mjs +61 -8
  66. package/dist/skills/media-use/audio/scripts/gemini-pipeline.test.mjs +14 -3
  67. package/dist/skills/media-use/audio/scripts/lib/bgm.mjs +8 -4
  68. package/dist/skills/media-use/audio/scripts/lib/bgm.test.mjs +45 -1
  69. package/dist/skills/media-use/audio/scripts/lib/media-record.mjs +43 -2
  70. package/dist/skills/media-use/audio/scripts/lib/media-record.test.mjs +54 -2
  71. package/dist/skills/media-use/audio/scripts/lib/sfx.mjs +36 -17
  72. package/dist/skills/media-use/audio/scripts/lib/sfx.test.mjs +53 -1
  73. package/dist/skills/media-use/scripts/lib/manifest.mjs +3 -0
  74. package/dist/skills/media-use/scripts/resolve.mjs +4 -4
  75. package/dist/{skills-QWPGK2MN.js → skills-KDD7E5CB.js} +5 -5
  76. package/dist/{skillsUpdateCheck-JY23Q7EF.js → skillsUpdateCheck-DXGEK4AH.js} +3 -3
  77. package/dist/{snapshot-HCLMYOWI.js → snapshot-BSOD5KKR.js} +4 -4
  78. package/dist/studio/assets/{hyperframes-player-w3Bbv0kd.js → hyperframes-player-CVoS7kv8.js} +1 -1
  79. package/dist/studio/assets/{index-DE6cZYR5.js → index-BM8PwYby.js} +111 -111
  80. package/dist/studio/assets/{index-DldknZPp.js → index-D35-L_yn.js} +1 -1
  81. package/dist/studio/assets/{index-B6PGJTzp.js → index-DBub9qQY.js} +1 -1
  82. package/dist/studio/index.d.ts +39 -5
  83. package/dist/studio/index.html +1 -1
  84. package/dist/studio/index.js +105 -2
  85. package/dist/studio/index.js.map +1 -1
  86. package/dist/{studioServer-LZDGVKYT.js → studioServer-2IK5LLRR.js} +4 -4
  87. package/dist/{telemetry-Z3RLGWGK.js → telemetry-6P5WHWYI.js} +3 -3
  88. package/dist/{timeline-WOKBCYLM.js → timeline-QZ4Q2LED.js} +5 -5
  89. package/dist/{tokens-RTP2IROL.js → tokens-VXZYKHFV.js} +2 -2
  90. package/dist/{transcribe-ASVWZ3GP.js → transcribe-RQ6RHU2V.js} +3 -3
  91. package/dist/{updateCheck-5LM5GJCF.js → updateCheck-RRWEIZY7.js} +2 -2
  92. package/dist/{upgrade-YWWAFHLF.js → upgrade-LI5TVSQQ.js} +2 -2
  93. package/dist/{validate-EWNJ4VOI.js → validate-I56RAOC6.js} +6 -6
  94. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import{n as Qi}from"./index-DE6cZYR5.js";/*!
1
+ import{n as Qi}from"./index-BM8PwYby.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
@@ -1 +1 @@
1
- import{g as P}from"./index-DE6cZYR5.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-BM8PwYby.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};
@@ -3348,18 +3348,18 @@ interface DomEditOverlayProps {
3348
3348
  y: number;
3349
3349
  }, modifiers?: {
3350
3350
  altKey?: boolean;
3351
- }) => Promise<void> | void;
3352
- onGroupPathOffsetCommit: (updates: DomEditGroupPathOffsetCommit[]) => Promise<void> | void;
3351
+ }) => Promise<unknown> | void;
3352
+ onGroupPathOffsetCommit: (updates: DomEditGroupPathOffsetCommit[]) => Promise<unknown> | void;
3353
3353
  onBoxSizeCommit: (selection: DomEditSelection, next: {
3354
3354
  width: number;
3355
3355
  height: number;
3356
3356
  }, offset?: {
3357
3357
  x: number;
3358
3358
  y: number;
3359
- }, restore?: () => void) => Promise<void> | void;
3359
+ }, restore?: () => void) => Promise<unknown> | void;
3360
3360
  onRotationCommit: (selection: DomEditSelection, next: {
3361
3361
  angle: number;
3362
- }) => Promise<void> | void;
3362
+ }) => Promise<unknown> | void;
3363
3363
  onStyleCommit?: (property: string, value: string) => Promise<unknown> | void;
3364
3364
  recordingState?: GestureRecordingState;
3365
3365
  onToggleRecording?: () => void;
@@ -3421,6 +3421,40 @@ declare function useDomStyleCommit({ projectId, iframeRef, writeProjectFile, rec
3421
3421
  waitForPendingSaves: () => Promise<DomEditSaveDrainResult>;
3422
3422
  };
3423
3423
 
3424
+ /**
3425
+ * Studio's `Player` must show the project, with `beginTimelineSession(projectId)` run before it
3426
+ * mounts; drain `waitForPendingSaves` before switching projects.
3427
+ */
3428
+ interface UseDomGeometryCommitOptions extends UseDomStyleCommitOptions {
3429
+ /** Called when a save cannot patch the preview in place; defaults to reloading the iframe. */
3430
+ reloadPreview?: () => void;
3431
+ }
3432
+ interface DomGeometryCommits {
3433
+ commitPathOffset: (selection: DomEditSelection, next: {
3434
+ x: number;
3435
+ y: number;
3436
+ }, modifiers?: {
3437
+ altKey?: boolean;
3438
+ }) => Promise<DomEditCommitOutcome>;
3439
+ commitGroupPathOffset: (updates: DomEditGroupPathOffsetCommit[]) => Promise<DomEditCommitOutcome>;
3440
+ commitBoxSize: (selection: DomEditSelection, next: {
3441
+ width: number;
3442
+ height: number;
3443
+ }, offset?: {
3444
+ x: number;
3445
+ y: number;
3446
+ }, restore?: () => void) => Promise<DomEditCommitOutcome>;
3447
+ commitRotation: (selection: DomEditSelection, next: {
3448
+ angle: number;
3449
+ }) => Promise<DomEditCommitOutcome>;
3450
+ waitForPendingSaves: () => Promise<void>;
3451
+ }
3452
+ /**
3453
+ * Saves canvas moves, resizes and rotations through Studio's own GSAP-aware commits, for a host
3454
+ * without the editor. A failed save rejects, so DomEditOverlay undoes the live gesture.
3455
+ */
3456
+ declare function useDomGeometryCommit({ projectId, iframeRef, writeProjectFile, recordEdit, activeCompPath, showToast, reloadPreview, }: UseDomGeometryCommitOptions): DomGeometryCommits;
3457
+
3424
3458
  interface MarqueeGesturesDeps<T = DomEditSelection> {
3425
3459
  iframeRef: React.RefObject<HTMLIFrameElement | null>;
3426
3460
  overlayRef: React.RefObject<HTMLDivElement | null>;
@@ -3463,4 +3497,4 @@ interface MarqueeOverlayProps {
3463
3497
  */
3464
3498
  declare function MarqueeOverlay({ candidateRects, marqueeRect }: MarqueeOverlayProps): react_jsx_runtime.JSX.Element;
3465
3499
 
3466
- export { type AgentModalAnchorPoint, type AgentPromptElementInfo, AskAgentModal, type AskAgentModalProps, AudioMeterStrip, type AudioMeterStripProps, AudioWaveform, type AudioWaveformProps, type BlockedTimelineEditIntent, type CanEditTimelineElement, CompositionBreadcrumb, type CompositionDimensions, type CompositionLevel, CompositionThumbnail, ConnectedDomEditOverlay, type ConnectedDomEditOverlayProps, DEFAULT_SHORTCUT_SECTIONS, type DomEditCapabilities, type DomEditCommitDeclineReason, type DomEditCommitOutcome, type DomEditGroupPathOffsetCommit, DomEditOverlay, type DomEditOverlayProps, DomEditProvider, type DomEditSelection, type EditHistoryHandle, EditorShell, type EditorShellProps, type ExternalFileChangeBlockedState, type ExternalFileChangeCoordinatorHandle, ExternalFileConflictBanner, type FfmpegStatus, FileTree, GridOverlay, ImageThumbnail, type ImageThumbnailProps, type MarqueeGestures, type MarqueeGesturesDeps, MarqueeOverlay, type MarqueeOverlayProps, type Rect$1 as MarqueeRect, NLEPreview, type PatchOperation, type PersistedRenderSettings, type PickedElement, PlayerControls, type PlayerHandle, type PlayerHandleElement, type PlayerHandleListener, type PlayerHandleTimeListener, type DomEditCompositionRect as PreviewCompositionRect, PreviewGuides, PreviewOverlayProvider, type PreviewOverlayProviderProps, PreviewReadOnlyProvider, type PreviewSnapPreferences, PropertyPanel, type RenderJob, RenderQueue, type RenderQueueProps, type ResolutionPreset, SNAP_THRESHOLD_PX, type ShortcutHint, type ShortcutSection, 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, StudioApp, StudioFileConflictError, type StudioPendingEditsDrainResult, type ThumbnailPriority, Timeline, TimelineClipMenu, 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 TimelineZIndexReorderCommit, type UseClipboardOptions, type UseDomEditSessionParams, type UseDomStyleCommitOptions, type UseEditHistoryActionsOptions, type UsePersistentEditHistoryOptions, type UsePreviewPersistenceParams, type UseProjectFileWriterOptions, type UseRenderClipContentOptions, type UseTimelineEditingOptions, VideoThumbnail, applyPatch, buildCompositionSnapTarget, buildGridSnapEdges, buildPickerAgentContextPreview, buildPickerAgentPrompt, collectSnapContext, extractSnapTargets, findElementBlock, flushStudioPendingEdits, formatTime, getPersistedRenderSettings, liveTime, mergeStyleIntoTag, parseStyleString, persistRenderSettings, resolveDomEditSelection, resolveEquidistanceGuides, resolveGuideLineRect, resolveIframe, resolveSnapAdjustment, resolveSourceFile, snapEngagedForTravel, useClipboard, useCompositionStack, useDomEditSelectionContext, useDomEditSession, useDomStyleCommit, useEditHistoryActions, useElementPicker, useMarqueeGestures, usePersistentEditHistory, usePlayerHandle, usePlayerStore, usePreviewCompositionRect, usePreviewGuidesStore, usePreviewOverlayContext, usePreviewPersistence, useProjectFileWriter, useRenderClipContent, useRenderQueue, useTimelineContext, useTimelineEditing, useTimelinePlayer };
3500
+ export { type AgentModalAnchorPoint, type AgentPromptElementInfo, AskAgentModal, type AskAgentModalProps, AudioMeterStrip, type AudioMeterStripProps, AudioWaveform, type AudioWaveformProps, type BlockedTimelineEditIntent, type CanEditTimelineElement, CompositionBreadcrumb, type CompositionDimensions, type CompositionLevel, CompositionThumbnail, ConnectedDomEditOverlay, type ConnectedDomEditOverlayProps, DEFAULT_SHORTCUT_SECTIONS, type DomEditCapabilities, type DomEditCommitDeclineReason, type DomEditCommitOutcome, type DomEditGroupPathOffsetCommit, DomEditOverlay, type DomEditOverlayProps, DomEditProvider, type DomEditSelection, type DomGeometryCommits, type EditHistoryHandle, EditorShell, type EditorShellProps, type ExternalFileChangeBlockedState, type ExternalFileChangeCoordinatorHandle, ExternalFileConflictBanner, type FfmpegStatus, FileTree, GridOverlay, ImageThumbnail, type ImageThumbnailProps, type MarqueeGestures, type MarqueeGesturesDeps, MarqueeOverlay, type MarqueeOverlayProps, type Rect$1 as MarqueeRect, NLEPreview, type PatchOperation, type PersistedRenderSettings, type PickedElement, PlayerControls, type PlayerHandle, type PlayerHandleElement, type PlayerHandleListener, type PlayerHandleTimeListener, type DomEditCompositionRect as PreviewCompositionRect, PreviewGuides, PreviewOverlayProvider, type PreviewOverlayProviderProps, PreviewReadOnlyProvider, type PreviewSnapPreferences, PropertyPanel, type RenderJob, RenderQueue, type RenderQueueProps, type ResolutionPreset, SNAP_THRESHOLD_PX, type ShortcutHint, type ShortcutSection, 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, StudioApp, StudioFileConflictError, type StudioPendingEditsDrainResult, type ThumbnailPriority, Timeline, TimelineClipMenu, 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 TimelineZIndexReorderCommit, type UseClipboardOptions, type UseDomEditSessionParams, type UseDomGeometryCommitOptions, type UseDomStyleCommitOptions, type UseEditHistoryActionsOptions, type UsePersistentEditHistoryOptions, type UsePreviewPersistenceParams, type UseProjectFileWriterOptions, type UseRenderClipContentOptions, type UseTimelineEditingOptions, VideoThumbnail, applyPatch, buildCompositionSnapTarget, buildGridSnapEdges, buildPickerAgentContextPreview, buildPickerAgentPrompt, collectSnapContext, extractSnapTargets, findElementBlock, flushStudioPendingEdits, formatTime, getPersistedRenderSettings, liveTime, mergeStyleIntoTag, parseStyleString, persistRenderSettings, resolveDomEditSelection, resolveEquidistanceGuides, resolveGuideLineRect, resolveIframe, resolveSnapAdjustment, resolveSourceFile, snapEngagedForTravel, useClipboard, useCompositionStack, useDomEditSelectionContext, useDomEditSession, useDomGeometryCommit, useDomStyleCommit, useEditHistoryActions, useElementPicker, useMarqueeGestures, usePersistentEditHistory, usePlayerHandle, usePlayerStore, usePreviewCompositionRect, usePreviewGuidesStore, usePreviewOverlayContext, usePreviewPersistence, useProjectFileWriter, useRenderClipContent, useRenderQueue, useTimelineContext, useTimelineEditing, useTimelinePlayer };
@@ -5,7 +5,7 @@
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-DE6cZYR5.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-BM8PwYby.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/assets/index-Dx79V1Se.css">
10
10
  </head>
11
11
  <body>
@@ -77146,8 +77146,15 @@ function useGsapAwareEditing({
77146
77146
  );
77147
77147
  const handleGsapAwareBoxSizeCommit = useCallback135(
77148
77148
  async (selection, next, offset, restore = () => void 0) => {
77149
- const ownedAnimations = getGsapAnimationsForSelection(selection);
77150
- const targetAnimations = Array.isArray(ownedAnimations) ? ownedAnimations : await ownedAnimations;
77149
+ let targetAnimations;
77150
+ try {
77151
+ const ownedAnimations = getGsapAnimationsForSelection(selection);
77152
+ targetAnimations = Array.isArray(ownedAnimations) ? ownedAnimations : await ownedAnimations;
77153
+ } catch (error) {
77154
+ restore();
77155
+ trackGsapInteractionFailure(error, selection, "resize", "Resize animated layer");
77156
+ throw error;
77157
+ }
77151
77158
  const scaleRoute = targetAnimations.some((anim) => anim.propertyGroup === "scale");
77152
77159
  const selector = selectorFromSelection(selection);
77153
77160
  const hasLivePositionTween = selector ? hasNonHoldTweenForElement(
@@ -91832,6 +91839,101 @@ function useDomStyleCommit({
91832
91839
  return { commitStyle, waitForPendingSaves: queue2.waitForIdle };
91833
91840
  }
91834
91841
 
91842
+ // src/hooks/useDomGeometryCommit.ts
91843
+ import { useCallback as useCallback185, useMemo as useMemo81, useRef as useRef183 } from "react";
91844
+ var noop2 = () => {
91845
+ };
91846
+ var NO_SELECTED_ANIMATIONS = [];
91847
+ var noDomBoxSizeRoute = () => Promise.reject(new Error("Resize has no DOM route here"));
91848
+ function useDomGeometryCommit({
91849
+ projectId,
91850
+ iframeRef,
91851
+ writeProjectFile,
91852
+ recordEdit,
91853
+ activeCompPath = null,
91854
+ showToast = noop2,
91855
+ reloadPreview
91856
+ }) {
91857
+ const projectIdRef = useRef183(projectId);
91858
+ projectIdRef.current = projectId;
91859
+ const pending2 = useRef183(/* @__PURE__ */ new Set()).current;
91860
+ const editHistory = useMemo81(() => ({ recordEdit }), [recordEdit]);
91861
+ const reload = useCallback185(
91862
+ () => reloadPreview ? reloadPreview() : iframeRef.current?.contentWindow?.location.reload(),
91863
+ [reloadPreview, iframeRef]
91864
+ );
91865
+ const { bump: bumpGsapCache } = useGsapCacheVersion();
91866
+ const gsap3 = useGsapScriptCommits({
91867
+ projectIdRef,
91868
+ activeCompPath,
91869
+ previewIframeRef: iframeRef,
91870
+ editHistory,
91871
+ reloadPreview: reload,
91872
+ onCacheInvalidate: bumpGsapCache,
91873
+ showToast,
91874
+ writeProjectFile
91875
+ });
91876
+ const makeFetchFallback = useGsapAnimationFetchFallback(projectId);
91877
+ const trackGsapInteractionFailure = useGsapInteractionFailureTelemetry(activeCompPath, showToast);
91878
+ const {
91879
+ handleGsapAwarePathOffsetCommit,
91880
+ handleGsapAwareGroupPathOffsetCommit,
91881
+ handleGsapAwareBoxSizeCommit,
91882
+ handleGsapAwareRotationCommit
91883
+ } = useGsapAwareEditing({
91884
+ // The host owns selection, so every gesture reads its element's animations from the server.
91885
+ domEditSelection: null,
91886
+ selectedGsapAnimations: NO_SELECTED_ANIMATIONS,
91887
+ gsapCommitMutation: gsap3.commitMutation,
91888
+ previewIframeRef: iframeRef,
91889
+ showToast,
91890
+ bumpGsapCache,
91891
+ makeFetchFallback,
91892
+ trackGsapInteractionFailure,
91893
+ handleDomBoxSizeCommit: noDomBoxSizeRoute,
91894
+ addGsapAnimation: gsap3.addGsapAnimation,
91895
+ convertToKeyframes: gsap3.convertToKeyframes,
91896
+ setArcPath: gsap3.setArcPath,
91897
+ updateArcSegment: gsap3.updateArcSegment
91898
+ });
91899
+ const saved2 = useCallback185(
91900
+ async (commit, restore = noop2) => {
91901
+ const refusal2 = !projectIdRef.current ? "No project is open" : !isPreviewBooted(projectIdRef.current) ? "The preview for this project has not loaded yet" : null;
91902
+ if (refusal2) {
91903
+ restore();
91904
+ showToast(refusal2, "error");
91905
+ throw new Error(refusal2);
91906
+ }
91907
+ const run = commit();
91908
+ pending2.add(run);
91909
+ try {
91910
+ await run;
91911
+ } finally {
91912
+ pending2.delete(run);
91913
+ }
91914
+ return { ok: true };
91915
+ },
91916
+ [pending2, showToast]
91917
+ );
91918
+ return useMemo81(
91919
+ () => ({
91920
+ commitPathOffset: (selection, next, modifiers) => saved2(() => handleGsapAwarePathOffsetCommit(selection, next, modifiers)),
91921
+ commitGroupPathOffset: (updates) => saved2(() => handleGsapAwareGroupPathOffsetCommit(updates)),
91922
+ commitBoxSize: (selection, next, offset, restore) => saved2(() => handleGsapAwareBoxSizeCommit(selection, next, offset, restore), restore),
91923
+ commitRotation: (selection, next) => saved2(() => handleGsapAwareRotationCommit(selection, next)),
91924
+ waitForPendingSaves: () => Promise.allSettled([...pending2]).then(noop2)
91925
+ }),
91926
+ [
91927
+ saved2,
91928
+ pending2,
91929
+ handleGsapAwarePathOffsetCommit,
91930
+ handleGsapAwareGroupPathOffsetCommit,
91931
+ handleGsapAwareBoxSizeCommit,
91932
+ handleGsapAwareRotationCommit
91933
+ ]
91934
+ );
91935
+ }
91936
+
91835
91937
  // src/index.ts
91836
91938
  import {
91837
91939
  playSeamTransitionLoop
@@ -91941,6 +92043,7 @@ export {
91941
92043
  useCompositionStack,
91942
92044
  useDomEditSelectionContext,
91943
92045
  useDomEditSession,
92046
+ useDomGeometryCommit,
91944
92047
  useDomStyleCommit,
91945
92048
  useEditHistoryActions,
91946
92049
  useElementPicker,