hyperframes 0.8.94 → 0.8.95

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 (145) hide show
  1. package/dist/{add-62EBF76L.js → add-6RAMOHL4.js} +15 -15
  2. package/dist/{animatedGifPrep-ZAXAJRGY.js → animatedGifPrep-2TPGBBFQ.js} +5 -5
  3. package/dist/{asset-26GEJ6MG.js → asset-XDDZHUER.js} +2 -2
  4. package/dist/{assetCataloger-L6BH5XPE.js → assetCataloger-ZO2QHQ5I.js} +2 -2
  5. package/dist/{auth-Y5LOEYIG.js → auth-36PG6LFP.js} +2 -2
  6. package/dist/{autoUpdate-BK3SAE2C.js → autoUpdate-B55UUZVW.js} +2 -2
  7. package/dist/{backgroundChecks-5OBL2ZFK.js → backgroundChecks-YYEZLS53.js} +3 -3
  8. package/dist/backgroundChecksWorker.js +3 -3
  9. package/dist/{batchRender-P4PGKXMA.js → batchRender-GRGRDYVK.js} +3 -3
  10. package/dist/{beats-YAQFEASD.js → beats-3QCW5DPQ.js} +9 -9
  11. package/dist/{benchmark-ELQ43VMY.js → benchmark-GFH4IKMA.js} +11 -11
  12. package/dist/{browser-OVLDQCYN.js → browser-TW77URJ6.js} +8 -8
  13. package/dist/{bundleWithLocalizedFonts-TCS5G3P4.js → bundleWithLocalizedFonts-VPUVAVDB.js} +2 -2
  14. package/dist/{capture-AA2Z6KXD.js → capture-AWIT44B5.js} +2 -2
  15. package/dist/{capture-OIO7KTM3.js → capture-IIZWKNHD.js} +6 -6
  16. package/dist/{catalog-42G25U73.js → catalog-I675P4MG.js} +15 -15
  17. package/dist/{check-BJDE5KAL.js → check-RWCTGF4G.js} +29 -29
  18. package/dist/{checkBrowser-355KCC5L.js → checkBrowser-CZ5VREPO.js} +28 -28
  19. package/dist/{chunk-HIUTUAE2.js → chunk-2JW4TB2L.js} +1 -1
  20. package/dist/{chunk-OULCKWLN.js → chunk-36AHSDOU.js} +1 -1
  21. package/dist/{chunk-QOA4O3E7.js → chunk-427VCI2W.js} +2 -2
  22. package/dist/{chunk-UEBEC2XU.js → chunk-6DMUML2E.js} +3 -3
  23. package/dist/{chunk-BJMUZGSS.js → chunk-6UQDR7JX.js} +3 -3
  24. package/dist/{chunk-XLYKUO64.js → chunk-7B4MSF6O.js} +1 -1
  25. package/dist/{chunk-NMMNZRS2.js → chunk-7S376PTR.js} +1 -1
  26. package/dist/{chunk-54NKSH22.js → chunk-7TMRQRPP.js} +3 -3
  27. package/dist/{chunk-IGI5Q2AI.js → chunk-BIEBPTC7.js} +3 -3
  28. package/dist/{chunk-JMDM3WIJ.js → chunk-BLQZTY6I.js} +1 -1
  29. package/dist/{chunk-4VJUZHDP.js → chunk-CMCVX66K.js} +1 -1
  30. package/dist/{chunk-RAVVSXOF.js → chunk-CMXQC3IP.js} +8 -8
  31. package/dist/{chunk-ZZDVDZMP.js → chunk-DNE6TQXY.js} +2 -2
  32. package/dist/{chunk-6MNV6MGA.js → chunk-DPHSFGGU.js} +2 -2
  33. package/dist/{chunk-ZEBQBMB2.js → chunk-DUILJXNH.js} +1 -1
  34. package/dist/{chunk-QKKGOE4B.js → chunk-E7APSJCK.js} +1 -1
  35. package/dist/{chunk-MKUHSQ5W.js → chunk-EMT7BFPZ.js} +2 -2
  36. package/dist/{chunk-V4WFRE3S.js → chunk-EOUVZBBK.js} +1 -1
  37. package/dist/{chunk-UYRUCTKC.js → chunk-F7TFZPTZ.js} +6 -6
  38. package/dist/{chunk-UJC2WHB4.js → chunk-FH3HTCJQ.js} +5 -5
  39. package/dist/{chunk-KM5QZ2IJ.js → chunk-FU7G27S3.js} +1 -1
  40. package/dist/{chunk-CSXBOTPK.js → chunk-GYP2NZ4G.js} +1 -1
  41. package/dist/{chunk-JGC7NA6X.js → chunk-HLFJWXCB.js} +2 -2
  42. package/dist/{chunk-OF66WGOC.js → chunk-HV2BLHGT.js} +8 -8
  43. package/dist/{chunk-COZAH66K.js → chunk-I6KZR3XL.js} +1 -1
  44. package/dist/{chunk-QEK5OWWB.js → chunk-IA43GBD2.js} +2 -2
  45. package/dist/{chunk-7V4CFEKO.js → chunk-J22NNXPA.js} +1 -1
  46. package/dist/{chunk-OZMDUHEE.js → chunk-JODRVI4P.js} +1 -1
  47. package/dist/{chunk-256DRQ3G.js → chunk-KYQ2ZPXE.js} +2 -2
  48. package/dist/{chunk-GRUP33MY.js → chunk-MWIOBM3E.js} +7 -7
  49. package/dist/{chunk-LWTFVWUB.js → chunk-ORHO6YPJ.js} +4 -4
  50. package/dist/{chunk-CQJVNJVO.js → chunk-S43YUS3G.js} +1 -1
  51. package/dist/{chunk-IYECLKKI.js → chunk-SKU5I2NJ.js} +4 -4
  52. package/dist/{chunk-QTOATVZN.js → chunk-TMLX4DWM.js} +1 -1
  53. package/dist/{chunk-KP5DXFFF.js → chunk-UBA4UJ56.js} +1 -1
  54. package/dist/{chunk-JG3OS5WP.js → chunk-UU42C7QX.js} +2 -2
  55. package/dist/{chunk-DSMBTQNW.js → chunk-VFIH5VBE.js} +8 -8
  56. package/dist/{chunk-TYR5PE7M.js → chunk-XKMBC32Q.js} +4 -4
  57. package/dist/{chunk-PGIJDSBF.js → chunk-XRO2KCQM.js} +1 -1
  58. package/dist/{chunk-NG236JIF.js → chunk-XVBLYZUG.js} +2 -2
  59. package/dist/{chunk-EBYT5IKJ.js → chunk-Z57S2I4X.js} +1 -1
  60. package/dist/{chunk-7UNOH4HC.js → chunk-Z6VKTNCN.js} +1 -1
  61. package/dist/{clean-IDCWBLNM.js → clean-ZAZ3FLNH.js} +13 -13
  62. package/dist/cli.js +50 -50
  63. package/dist/{cloud-WW7IHWVK.js → cloud-R6SCQ6FG.js} +4 -4
  64. package/dist/{cloudrun-CBZJGN2M.js → cloudrun-PLFHQAGP.js} +3 -3
  65. package/dist/{compare-QO7KUZMU.js → compare-FLYKOPE4.js} +23 -23
  66. package/dist/{compiler-MTLZBZNF.js → compiler-TXFKUB2C.js} +2 -2
  67. package/dist/{component-WUUUYLLD.js → component-ZOV5ZBVD.js} +3 -3
  68. package/dist/{compositions-ZFX75QCU.js → compositions-HKXKOZ3X.js} +10 -10
  69. package/dist/{delete-G3X5E7AE.js → delete-2POU6Z65.js} +2 -2
  70. package/dist/{dist-U6VLQ542.js → dist-PLTBRZKU.js} +2 -2
  71. package/dist/{doctor-WMEVLW45.js → doctor-GRWL4OLH.js} +9 -9
  72. package/dist/{events-LB3B73XE.js → events-MSZSZE7Z.js} +7 -7
  73. package/dist/{events-7XIEDY3M.js → events-QFUY5ZH2.js} +8 -8
  74. package/dist/{feedback-DEJGD4OP.js → feedback-RDS3U27M.js} +9 -9
  75. package/dist/{figma-3RKMKXLM.js → figma-K47QCKV7.js} +3 -3
  76. package/dist/fontLocalizeCli.js +7 -7
  77. package/dist/{get-IYQXQUHU.js → get-745HOGGQ.js} +2 -2
  78. package/dist/{gpuPolicy-FNQJDYAE.js → gpuPolicy-HVCELA6G.js} +5 -5
  79. package/dist/{grade-compare-MN4QOS4A.js → grade-compare-AREHHPQM.js} +23 -23
  80. package/dist/{help-PCL4OHUN.js → help-A7DAMFLD.js} +1 -1
  81. package/dist/{history-BD74GY4E.js → history-3ZEODM2Y.js} +13 -13
  82. package/dist/hyperframe-runtime.js +55 -55
  83. package/dist/hyperframe.manifest.json +1 -1
  84. package/dist/hyperframe.runtime.iife.js +55 -55
  85. package/dist/hyperframes-player.global.js +1 -1
  86. package/dist/{info-TUITY3LM.js → info-ZCK45HMV.js} +10 -10
  87. package/dist/{init-3IBL3CDR.js → init-SHGYEAHA.js} +20 -20
  88. package/dist/{inspect-AITRWOGY.js → inspect-52AWXA22.js} +24 -24
  89. package/dist/{installer-BICT5ISF.js → installer-ZQV2YGAQ.js} +5 -5
  90. package/dist/{keyframes-API74S5F.js → keyframes-PNPQ7PTB.js} +11 -11
  91. package/dist/{lambda-ATYZYY2A.js → lambda-WCRVTB2Q.js} +4 -4
  92. package/dist/{layout-L2IKLR7Y.js → layout-DHHMJQM2.js} +24 -24
  93. package/dist/{lint-47JJJTGD.js → lint-KELUVQRR.js} +11 -11
  94. package/dist/{list-3AVTRIB5.js → list-GBYQONXZ.js} +2 -2
  95. package/dist/{login-GZ3XQXJI.js → login-GJFXUGJN.js} +4 -4
  96. package/dist/{media-treatment-OOIOWYDR.js → media-treatment-NEYSDH2R.js} +11 -11
  97. package/dist/{models-GP4GUVD4.js → models-RGIXFEJ2.js} +6 -6
  98. package/dist/{motionShot-HGTAANSQ.js → motionShot-B7WLM3E6.js} +9 -9
  99. package/dist/{normalize-audio-DXOWIRK6.js → normalize-audio-IM2UOCVG.js} +9 -9
  100. package/dist/{pipeline-EE4ONAMG.js → pipeline-JNVT4S34.js} +5 -5
  101. package/dist/{play-RZ4IA4XX.js → play-3S2Q27ZQ.js} +19 -19
  102. package/dist/{preflight-IESLP2FD.js → preflight-SW4TFAEV.js} +6 -6
  103. package/dist/{present-VZRBWL5Y.js → present-GW6IP4SX.js} +14 -14
  104. package/dist/{preview-YAQYBXZA.js → preview-7OPA42B4.js} +17 -17
  105. package/dist/{producer-L6G3DQ3D.js → producer-J2D5VCOP.js} +1 -1
  106. package/dist/{projectConfig-LKYZ2W5I.js → projectConfig-WMIW2GVE.js} +7 -7
  107. package/dist/{publication-33HZULNX.js → publication-SFKH4HXD.js} +3 -3
  108. package/dist/{publish-ZT4QTUT7.js → publish-LXO7V4FC.js} +8 -8
  109. package/dist/{remove-background-K53GPG52.js → remove-background-LBB4ONLL.js} +6 -6
  110. package/dist/{render-ABIQLIO4.js → render-OYVHAF2Q.js} +3 -3
  111. package/dist/{render-ZCAAV67S.js → render-ULXYCHOC.js} +11 -11
  112. package/dist/{render-RFYJ6BR3.js → render-YG7YGHXZ.js} +21 -21
  113. package/dist/{render-batch-LCQ2IMTQ.js → render-batch-LVUZ7BB3.js} +3 -3
  114. package/dist/{renderCancellation-MJ2IXXMV.js → renderCancellation-RKTG6LSF.js} +5 -5
  115. package/dist/{resolver-D7A53DNH.js → resolver-VI7FYBSX.js} +5 -5
  116. package/dist/{sherpa-EUE27RMH.js → sherpa-CHXU6XT5.js} +6 -6
  117. package/dist/{skills-7NEK5F7M.js → skills-UY6RCNIV.js} +10 -10
  118. package/dist/{skillsUpdateCheck-AK52M6EY.js → skillsUpdateCheck-NDFWZRXY.js} +3 -3
  119. package/dist/{snapshot-F2GZGCNT.js → snapshot-JUEZZOY3.js} +24 -24
  120. package/dist/{src-BVCQQJNL.js → src-RPL3ERVX.js} +6 -6
  121. package/dist/{src-HFIQQZG4.js → src-ZTMI3FQW.js} +4 -4
  122. package/dist/{staticProjectServer-R3ENYAFY.js → staticProjectServer-OVLTUKIX.js} +13 -13
  123. package/dist/{status-YCTO72L6.js → status-WXZGMRAU.js} +5 -5
  124. package/dist/studio/assets/{hyperframes-player-Bkm-3G56.js → hyperframes-player-DJJKab4_.js} +1 -1
  125. package/dist/studio/assets/{index-n2ZRiO44.js → index-C1dXTZvs.js} +1 -1
  126. package/dist/studio/assets/{index-BupvpoiM.js → index-Cc4by8r7.js} +176 -176
  127. package/dist/studio/assets/{index-BUn5H_np.js → index-DE1dn3QB.js} +1 -1
  128. package/dist/studio/index.d.ts +1 -0
  129. package/dist/studio/index.html +1 -1
  130. package/dist/studio/index.js +54 -13
  131. package/dist/studio/index.js.map +1 -1
  132. package/dist/{studio-api-LKMMVAVG.js → studio-api-Q52IZAIC.js} +6 -6
  133. package/dist/{studioServer-HZKH5BK2.js → studioServer-YDM5WJA4.js} +36 -36
  134. package/dist/{system-TRDN5G42.js → system-XYRK4U3J.js} +5 -5
  135. package/dist/{telemetry-4V6CYSZO.js → telemetry-L7RY5E6I.js} +8 -8
  136. package/dist/{timeline-LZG2X3LW.js → timeline-XPSLB7EY.js} +13 -13
  137. package/dist/{tokens-PJQNUFTP.js → tokens-U6K7FRCQ.js} +2 -2
  138. package/dist/{transcribe-FYRFP3L5.js → transcribe-77DCALN5.js} +6 -6
  139. package/dist/{transcribe-7S6MKV72.js → transcribe-ZN2VYR6A.js} +11 -11
  140. package/dist/{updateCheck-YIDLZWHO.js → updateCheck-JOXT4C5Q.js} +2 -2
  141. package/dist/{upgrade-KNEDIALO.js → upgrade-3HSPD72A.js} +2 -2
  142. package/dist/{urlDownloader-3DYGACLB.js → urlDownloader-5USGBBRZ.js} +4 -4
  143. package/dist/{validate-G7FIJEEO.js → validate-XGJEJLQH.js} +14 -14
  144. package/dist/{video-7MDJ2CIG.js → video-FRJVLVLF.js} +5 -5
  145. package/package.json +1 -1
@@ -1 +1 @@
1
- import{g as P}from"./index-BupvpoiM.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-Cc4by8r7.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};
@@ -1531,6 +1531,7 @@ type TimelineCanvasState = Omit<TimelineLaneBaseProps, "setRangeSelection" | "se
1531
1531
  playheadRef: React.RefObject<HTMLDivElement | null>;
1532
1532
  laneGapStrips: TimelineLaneGapStrips[];
1533
1533
  dropPreview: TimelineDropPlacement | null;
1534
+ acceptsMediaDrop: boolean;
1534
1535
  setRangeSelection: (value: TimelineRangeSelection | null) => void;
1535
1536
  setResizingClip: (value: ResizingClipState | null) => void;
1536
1537
  setDraggedClip: (value: TimelineLaneBaseProps["draggedClip"]) => void;
@@ -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-BupvpoiM.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-Cc4by8r7.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/assets/index-Dx79V1Se.css">
10
10
  </head>
11
11
  <body>
@@ -1944,8 +1944,8 @@ function getTimelineBeatEntries(beatTimes, beatStrengths, range, pinnedIndexes =
1944
1944
  function getTimelineLaneTop(laneIndex) {
1945
1945
  return TRACK_H + Math.max(0, Math.trunc(laneIndex)) * LANE_H;
1946
1946
  }
1947
- var TRACKS_TOP_PAD = 50;
1948
- var TRACKS_BOTTOM_PAD = Math.round(TRACK_H * 1.5);
1947
+ var TRACKS_TOP_PAD = 8;
1948
+ var TRACKS_BOTTOM_PAD = TRACK_H;
1949
1949
  var TRACKS_LEFT_PAD = 48;
1950
1950
  function trackHeights(tracks, expandedClipIds) {
1951
1951
  return tracks.map((clips) => {
@@ -12807,7 +12807,7 @@ function useTimelineProviderState({
12807
12807
  showAudioEffects = true,
12808
12808
  showKeyframes = true,
12809
12809
  trackPadding,
12810
- sessionEpoch = 0,
12810
+ sessionEpoch: sessionEpochProp,
12811
12811
  previewIframeRef,
12812
12812
  onZIndexReorder
12813
12813
  } = {}) {
@@ -12849,6 +12849,7 @@ function useTimelineProviderState({
12849
12849
  const currentTime = usePlayerStore((s) => s.currentTime);
12850
12850
  const beatDragging = usePlayerStore((s) => s.beatDragging);
12851
12851
  const timelineSessionEpoch = usePlayerStore((s) => s.timelineSessionEpoch);
12852
+ const sessionEpoch = sessionEpochProp ?? timelineSessionEpoch;
12852
12853
  const setFocusedEaseSegment = usePlayerStore((s) => s.setFocusedEaseSegment);
12853
12854
  const { zoomMode, manualZoomPercent, setZoomMode, setManualZoomPercent } = useTimelineZoom();
12854
12855
  const playheadRef = useRef25(null);
@@ -13164,6 +13165,7 @@ function useTimelineProviderState({
13164
13165
  marqueeRect,
13165
13166
  laneGapStrips,
13166
13167
  dropPreview: assetDrop.dropPreview,
13168
+ acceptsMediaDrop: !!(onFileDrop || onAssetDrop),
13167
13169
  theme,
13168
13170
  showAudioEffects,
13169
13171
  displayTrackOrder: displayLayout.displayTrackOrder,
@@ -19388,6 +19390,13 @@ function verifyTimelinesPopulated(win, targetKeys) {
19388
19390
  }
19389
19391
  return Object.keys(timelines).filter((k) => k !== "__proxied").length > 0;
19390
19392
  }
19393
+ function restoreAuthoredTransforms(style, authored) {
19394
+ style.transform = authored?.transform ?? "";
19395
+ if (!authored) return;
19396
+ for (const prop of ["translate", "rotate", "scale"]) {
19397
+ style.setProperty(prop, authored.getPropertyValue(prop));
19398
+ }
19399
+ }
19391
19400
  function finalizeSoftReload(win, currentTime) {
19392
19401
  win.__player?.seek?.(currentTime);
19393
19402
  win.__hfForceTimelineRebind?.();
@@ -19428,7 +19437,7 @@ function applySoftReload(iframe, scriptText, options = {}) {
19428
19437
  const currentTime = currentTimeOverride ?? win.__player?.getTime?.() ?? 0;
19429
19438
  let deferredToAsync = false;
19430
19439
  let authoredDoc;
19431
- const findAuthoredSource = (el) => {
19440
+ const findAuthoredStyle = (el) => {
19432
19441
  if (authoredDoc === void 0) {
19433
19442
  try {
19434
19443
  authoredDoc = authoredHtml ? parseSavedSource(authoredHtml) : null;
@@ -19436,13 +19445,10 @@ function applySoftReload(iframe, scriptText, options = {}) {
19436
19445
  authoredDoc = null;
19437
19446
  }
19438
19447
  }
19439
- return authoredDoc ? findAuthoredElement(authoredDoc, el) : null;
19440
- };
19441
- const readAuthoredOpacity = (el) => {
19442
- const source = findAuthoredSource(el);
19443
- if (source instanceof HTMLElement) return source.style.opacity;
19444
- return readStampedAuthoredOpacity(el);
19448
+ const source = authoredDoc ? findAuthoredElement(authoredDoc, el) : null;
19449
+ return source instanceof HTMLElement || source instanceof SVGElement ? source.style : null;
19445
19450
  };
19451
+ const readAuthoredOpacity = (el) => findAuthoredStyle(el)?.opacity ?? readStampedAuthoredOpacity(el);
19446
19452
  const doReload = () => {
19447
19453
  const timelines = win.__timelines;
19448
19454
  const allTargets = [];
@@ -19461,6 +19467,7 @@ function applySoftReload(iframe, scriptText, options = {}) {
19461
19467
  }
19462
19468
  }
19463
19469
  try {
19470
+ tl.clear?.();
19464
19471
  tl.kill?.();
19465
19472
  } catch {
19466
19473
  }
@@ -19487,7 +19494,7 @@ function applySoftReload(iframe, scriptText, options = {}) {
19487
19494
  for (const [el, css2] of saved2) {
19488
19495
  const s = el.style;
19489
19496
  s.cssText = css2;
19490
- s.removeProperty("transform");
19497
+ restoreAuthoredTransforms(s, findAuthoredStyle(el));
19491
19498
  const authored = readAuthoredOpacity(el);
19492
19499
  if (authored !== null) {
19493
19500
  applyAuthoredInlineOpacity(s, authored);
@@ -21239,6 +21246,9 @@ var TimelineCanvas = memo13(function TimelineCanvas2() {
21239
21246
  const dropTrackIndex = props.dropPreview ? displayTrackOrder2.indexOf(props.dropPreview.track) : -1;
21240
21247
  const dropRowIndex = dropTrackIndex < 0 ? displayTrackOrder2.length : dropTrackIndex;
21241
21248
  const insertLineRow = (draggedClip?.started ? draggedClip.insertRow : null) ?? props.dropPreview?.insertRow ?? null;
21249
+ const ghostLaneActive = (insertLineRow ?? -1) >= props.trackOrder.length || props.dropPreview?.insertRow == null && props.dropPreview != null && dropTrackIndex < 0;
21250
+ const showGhostLane = props.rowGeometry.padding.bottom >= TRACK_H;
21251
+ const ghostLaneRow = props.rowGeometry.getRowIndex(props.trackOrder.at(-1) ?? Number.NaN) + 1;
21242
21252
  const draggedRowHeight = getTimelineRowHeight(draggedRowIndex, props.rowHeights);
21243
21253
  const draggedClipHeight = Math.min(draggedRowHeight, TRACK_H) - CLIP_Y * 2;
21244
21254
  const beatDragging = props.beatDragging;
@@ -21281,6 +21291,22 @@ var TimelineCanvas = memo13(function TimelineCanvas2() {
21281
21291
  style: { height: props.rowsVirtualized ? 0 : props.rowGeometry.padding.bottom }
21282
21292
  }
21283
21293
  ),
21294
+ showGhostLane && /* @__PURE__ */ jsx55(
21295
+ "div",
21296
+ {
21297
+ "aria-hidden": "true",
21298
+ "data-testid": "timeline-ghost-lane",
21299
+ "data-active": ghostLaneActive || void 0,
21300
+ className: `pointer-events-none absolute flex items-center justify-center rounded-lg border border-dashed text-[11px] transition-colors duration-150 ${ghostLaneActive ? "border-studio-accent/60 bg-studio-accent/6 text-studio-accent" : "border-neutral-700/50 text-neutral-500"}`,
21301
+ style: {
21302
+ top: props.rowGeometry.getRowTop(ghostLaneRow) + CLIP_Y,
21303
+ left: props.contentOrigin,
21304
+ width: props.trackContentWidth,
21305
+ height: TRACK_H - CLIP_Y * 2
21306
+ },
21307
+ children: props.acceptsMediaDrop && "Drop media here"
21308
+ }
21309
+ ),
21284
21310
  props.laneGapStrips.map((strip) => {
21285
21311
  const rowIndex = displayTrackOrder2.indexOf(strip.track);
21286
21312
  if (rowIndex < 0) return null;
@@ -31613,7 +31639,11 @@ function reapplyRotations(doc) {
31613
31639
  }
31614
31640
  }
31615
31641
  }
31616
- var STUDIO_EDIT_ATTRS = [STUDIO_PATH_OFFSET_ATTR, STUDIO_BOX_SIZE_ATTR, STUDIO_ROTATION_ATTR].flatMap((attr) => [attr, `data-${attr}`]).concat(STUDIO_MOTION_ATTR);
31642
+ var STUDIO_EDIT_ATTRS = [
31643
+ STUDIO_PATH_OFFSET_ATTR,
31644
+ STUDIO_BOX_SIZE_ATTR,
31645
+ STUDIO_ROTATION_ATTR
31646
+ ].flatMap((attr) => [attr, `data-${attr}`]).concat(STUDIO_MOTION_ATTR);
31617
31647
  var STUDIO_EDIT_SELECTORS = STUDIO_EDIT_ATTRS.map(
31618
31648
  (attr) => attr === STUDIO_MOTION_ATTR ? `[${attr}]` : `[${attr}="true"]`
31619
31649
  );
@@ -68676,6 +68706,15 @@ function syncElementAttributes(target, source) {
68676
68706
  target.setAttribute(name, source.getAttribute(name) ?? "");
68677
68707
  }
68678
68708
  }
68709
+ function syncStaleEditMarks(doc, restored) {
68710
+ const restoredDoc = parseSavedSource(restored);
68711
+ for (const live of doc.querySelectorAll(STUDIO_EDIT_ATTRS.map((attr) => `[${attr}]`).join())) {
68712
+ const source = findAuthoredElement(restoredDoc, live);
68713
+ if (source && STUDIO_EDIT_ATTRS.some((a) => live.getAttribute(a) !== source.getAttribute(a))) {
68714
+ syncElementAttributes(live, source);
68715
+ }
68716
+ }
68717
+ }
68679
68718
  function readGsapScriptTexts(html2) {
68680
68719
  const doc = new DOMParser().parseFromString(html2, "text/html");
68681
68720
  return findGsapScriptElements(doc).map((script) => script.textContent ?? "");
@@ -68733,9 +68772,11 @@ function applyUndoRestoreToPreview(iframe, activeCompPath, files, currentTime, r
68733
68772
  const restoredScript = extractGsapScriptText(restored);
68734
68773
  const previousScript = extractGsapScriptText(previous);
68735
68774
  if (restoredScript && restoredScript !== previousScript) {
68775
+ syncStaleEditMarks(doc, restored);
68736
68776
  const result = applySoftReload(iframe, restoredScript, {
68737
68777
  onAsyncFailure: reloadPreview,
68738
- currentTimeOverride: currentTime
68778
+ currentTimeOverride: currentTime,
68779
+ authoredHtml: restored
68739
68780
  });
68740
68781
  if (result === "cannot-soft-reload") {
68741
68782
  reloadPreview();