hyperframes 0.8.133 → 0.8.135

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 (169) hide show
  1. package/dist/{add-KIAMI737.js → add-7E2GRDW5.js} +16 -16
  2. package/dist/{animatedGifPrep-P2T6YM7Z.js → animatedGifPrep-3AKQSXPU.js} +7 -7
  3. package/dist/{asset-KRQ4APXQ.js → asset-43SXDTJI.js} +2 -2
  4. package/dist/{assetCataloger-VBLPHX24.js → assetCataloger-KBN5LNK4.js} +3 -3
  5. package/dist/{auth-M4XWYQDV.js → auth-BWQ4HPK7.js} +2 -2
  6. package/dist/{autoUpdate-J7LNL4BP.js → autoUpdate-JTHQKHG5.js} +2 -2
  7. package/dist/{backgroundChecks-LLNHXZPY.js → backgroundChecks-H43RKGRE.js} +3 -3
  8. package/dist/backgroundChecksWorker.js +3 -3
  9. package/dist/{batchRender-FT7AP7XH.js → batchRender-VFXGGGJG.js} +4 -4
  10. package/dist/{beats-NOF2NADU.js → beats-HAOQC7GJ.js} +13 -13
  11. package/dist/{benchmark-XVHUNNCM.js → benchmark-ANUXIEPD.js} +13 -13
  12. package/dist/{browser-URZ3PY73.js → browser-HEICRDNT.js} +10 -10
  13. package/dist/{bundleWithLocalizedFonts-5QOPOB5D.js → bundleWithLocalizedFonts-5ATL25BF.js} +2 -2
  14. package/dist/{capture-RLZA6EMR.js → capture-DYBK5LGE.js} +10 -10
  15. package/dist/{capture-SZZ4IYJK.js → capture-UEJG6BUX.js} +2 -2
  16. package/dist/{catalog-EJBGGESW.js → catalog-2F5L72ZT.js} +16 -16
  17. package/dist/{check-RXLKRRB2.js → check-WZ5QMBBF.js} +33 -33
  18. package/dist/{checkBrowser-DNUQDCGD.js → checkBrowser-FXVVADP6.js} +32 -32
  19. package/dist/{chunk-MWB3ZIFM.js → chunk-2BJCQN7K.js} +1 -1
  20. package/dist/{chunk-LYNI3FOL.js → chunk-32QEFPDS.js} +1 -1
  21. package/dist/{chunk-4NWOGZZS.js → chunk-374QQGBQ.js} +26 -3
  22. package/dist/{chunk-QC4FJVLM.js → chunk-37EDNWLQ.js} +1 -1
  23. package/dist/{chunk-KBJUXVOJ.js → chunk-3NCZ2SCH.js} +3 -3
  24. package/dist/{chunk-IUZFXWSV.js → chunk-4AXZWUQ6.js} +1 -1
  25. package/dist/{chunk-3ZP5DXE7.js → chunk-527WRFUQ.js} +1 -1
  26. package/dist/{chunk-ZMXUQLI2.js → chunk-5ALWCRBU.js} +47 -25
  27. package/dist/{chunk-JEFU7IHM.js → chunk-AV7FBRWP.js} +2 -2
  28. package/dist/{chunk-2YN64IN5.js → chunk-BHOKLX4F.js} +2 -2
  29. package/dist/{chunk-HRUGC23L.js → chunk-BSU7EOWJ.js} +1 -1
  30. package/dist/{chunk-FCSIGXXP.js → chunk-BWJ27MQP.js} +1 -1
  31. package/dist/{chunk-PDAMK4Q5.js → chunk-D2KNWIQ6.js} +1 -1
  32. package/dist/{chunk-RMHUQGRK.js → chunk-GK5W3SIJ.js} +4 -4
  33. package/dist/{chunk-GK3QVRBM.js → chunk-GN6GW6IP.js} +9 -9
  34. package/dist/{chunk-6CTIGJY7.js → chunk-H4UIYRZZ.js} +2 -2
  35. package/dist/{chunk-DIFXJN2V.js → chunk-HNUHWAHR.js} +1 -1
  36. package/dist/{chunk-S55PCW5S.js → chunk-I54AADBN.js} +1 -1
  37. package/dist/{chunk-5OZGQCAB.js → chunk-KZ7B3XK7.js} +1 -1
  38. package/dist/{chunk-7JZ4FXP2.js → chunk-KZJPREW7.js} +1 -1
  39. package/dist/{chunk-ARR5QKPH.js → chunk-LKCICE2T.js} +10 -10
  40. package/dist/{chunk-YQZNILVH.js → chunk-LO7L5PJ3.js} +5 -5
  41. package/dist/{chunk-S7NPLFWV.js → chunk-LYJNFBD6.js} +792 -671
  42. package/dist/{chunk-7XKF2OB5.js → chunk-N3DZEPNT.js} +1 -1
  43. package/dist/{chunk-K2FTXJYH.js → chunk-N3KRRPL7.js} +81 -24
  44. package/dist/{chunk-ETWKKKJI.js → chunk-NDKVPWBH.js} +3 -3
  45. package/dist/{chunk-XS4EJSKU.js → chunk-OSSVNAI5.js} +1 -1
  46. package/dist/{chunk-AVUUN2XD.js → chunk-OZUQF4NB.js} +5 -4
  47. package/dist/{chunk-Z6B37SNM.js → chunk-PGFP4FLW.js} +12 -158
  48. package/dist/{chunk-SF4GTH2H.js → chunk-PULS7UW7.js} +2 -2
  49. package/dist/{chunk-A2Z4Z4VL.js → chunk-RTURM45Q.js} +1 -1
  50. package/dist/{chunk-TCLGPL65.js → chunk-RVG35AL2.js} +2 -2
  51. package/dist/{chunk-HKGEEUZV.js → chunk-SMWYGLTD.js} +7 -7
  52. package/dist/chunk-SRXQEQWZ.js +3742 -0
  53. package/dist/{chunk-K2EQN4VU.js → chunk-T5LPCY6I.js} +1 -1
  54. package/dist/{chunk-MAWC5PUQ.js → chunk-TKSAWNNI.js} +3 -3
  55. package/dist/{chunk-Q7IU7MOR.js → chunk-V26IB6L2.js} +2 -2
  56. package/dist/{chunk-CWPVM2QV.js → chunk-V2J2ZWPR.js} +2 -2
  57. package/dist/{chunk-ZJUKFZ2P.js → chunk-VDQCNWQI.js} +2 -2
  58. package/dist/{chunk-CFKU7HTK.js → chunk-VNC6YQOC.js} +1 -1
  59. package/dist/{chunk-WPHMNO44.js → chunk-WJFCDDP7.js} +1 -1
  60. package/dist/{chunk-VTUOQTFU.js → chunk-WVRNPWVW.js} +1 -1
  61. package/dist/{chunk-7HG4BFIN.js → chunk-XE6S5CE6.js} +1 -1
  62. package/dist/{chunk-U7CKZ7BR.js → chunk-XFKPUKL7.js} +4 -4
  63. package/dist/{chunk-UEZXMWG3.js → chunk-XSWKLDVC.js} +2 -2
  64. package/dist/{chunk-64TQHBM7.js → chunk-XZVPQYLU.js} +5 -5
  65. package/dist/{chunk-LHSR3M4M.js → chunk-Z3EFUXL5.js} +2 -2
  66. package/dist/{chunk-MJ5XLLXY.js → chunk-Z3KAYWE5.js} +3 -3
  67. package/dist/{clean-XMQXSQI5.js → clean-SZMPUNNQ.js} +17 -17
  68. package/dist/cli.js +51 -51
  69. package/dist/{cloud-BAC5KWSE.js → cloud-L7RFQB5E.js} +4 -4
  70. package/dist/{cloudrun-AJUTHUEA.js → cloudrun-FA4XHPZS.js} +5 -5
  71. package/dist/{compare-QAV6WNL4.js → compare-DN5GHUAZ.js} +27 -27
  72. package/dist/{compiler-QO36EXLS.js → compiler-XZ654ZH2.js} +13 -11
  73. package/dist/{component-HAJPPCFF.js → component-RYYGPCCC.js} +3 -3
  74. package/dist/{compositions-A5PN3ILU.js → compositions-TF42YRGQ.js} +12 -12
  75. package/dist/{delete-L5LYQF6D.js → delete-KYGP772F.js} +2 -2
  76. package/dist/{deterministicFonts-HAEMV4TM.js → deterministicFonts-U2EXY2KQ.js} +2 -2
  77. package/dist/{dist-S3PJNPXQ.js → dist-HVJAGLHF.js} +5 -3
  78. package/dist/{dist-FNNGCKFS.js → dist-QS5WEGBE.js} +1 -1
  79. package/dist/{doctor-VAALU6RK.js → doctor-AWERBYTS.js} +11 -11
  80. package/dist/{events-53SD6Z6G.js → events-QMT3TXJ2.js} +10 -10
  81. package/dist/{events-FSZQPLB5.js → events-W4AILK4F.js} +9 -9
  82. package/dist/{feedback-HVIGQIBA.js → feedback-KNKJFGOK.js} +11 -11
  83. package/dist/{figma-OMHCIFA6.js → figma-D76N4WD7.js} +3 -3
  84. package/dist/fontLocalizeCli.js +10 -10
  85. package/dist/{get-VVCHOTHZ.js → get-JHNZVDVT.js} +2 -2
  86. package/dist/{gpuPolicy-2ZUZE5D6.js → gpuPolicy-ON3RMSWD.js} +7 -7
  87. package/dist/{grade-compare-VEQUV7SJ.js → grade-compare-22SRAVPO.js} +27 -27
  88. package/dist/{gsapParser-DIYYX6JT.js → gsapParser-2OL54XZ5.js} +61 -23
  89. package/dist/{gsapParserAcorn-E3GEIRZB.js → gsapParserAcorn-VXZ3ZIF2.js} +5 -3
  90. package/dist/{help-VWAFVPC6.js → help-CKKLDL3G.js} +1 -1
  91. package/dist/{history-NYADNWVR.js → history-44SS2VJQ.js} +17 -17
  92. package/dist/hyperframe-runtime.js +49 -49
  93. package/dist/hyperframe.manifest.json +1 -1
  94. package/dist/hyperframe.runtime.iife.js +49 -49
  95. package/dist/hyperframes-player.global.js +1 -1
  96. package/dist/{info-42A4ZXQZ.js → info-A2CXIT7G.js} +12 -12
  97. package/dist/{init-YUGOYCN6.js → init-6D2GNNON.js} +23 -23
  98. package/dist/{inspect-C66X5KGK.js → inspect-QLYCCDHV.js} +28 -28
  99. package/dist/{installer-K6O5WF44.js → installer-DDJVY4TO.js} +5 -5
  100. package/dist/{keyframes-CC4SVYGQ.js → keyframes-TBS3BUZ5.js} +13 -16
  101. package/dist/{lambda-D7UMN4DJ.js → lambda-LPLYOEYY.js} +6 -6
  102. package/dist/{layout-OBTKALAB.js → layout-YLBD2653.js} +28 -28
  103. package/dist/{lint-CDJ4BIB5.js → lint-6XERRN4E.js} +13 -13
  104. package/dist/{lintProject-OHBBM3DJ.js → lintProject-EPVG2EFE.js} +1 -1
  105. package/dist/{list-AMHMJLVP.js → list-DPVTICQX.js} +2 -2
  106. package/dist/{login-3FHM5JUX.js → login-FJJH3ZPU.js} +4 -4
  107. package/dist/{media-treatment-SGIJZZSW.js → media-treatment-CQWZZRHR.js} +13 -13
  108. package/dist/{models-C4E4IWJD.js → models-54NL5PRB.js} +8 -8
  109. package/dist/{motionShot-S4MIGMT5.js → motionShot-BSI4U6X7.js} +13 -13
  110. package/dist/{normalize-audio-U4QNHC3R.js → normalize-audio-2QQBNTAW.js} +12 -12
  111. package/dist/{open-DRIBRDFD.js → open-YCWBIUNN.js} +11 -11
  112. package/dist/{pipeline-TNGWUZQC.js → pipeline-P7QRGI5H.js} +7 -7
  113. package/dist/{play-NOBUJING.js → play-5OX76SR5.js} +22 -22
  114. package/dist/{preflight-SMNV6RW2.js → preflight-X3XFRJPQ.js} +8 -8
  115. package/dist/{present-Q4Q4V6JJ.js → present-UFG6NPCO.js} +18 -18
  116. package/dist/{preview-SEH3BNYZ.js → preview-AGS4TAWM.js} +18 -18
  117. package/dist/{producer-ECLEN5RP.js → producer-KQNJKM7F.js} +1 -1
  118. package/dist/{projectConfig-HYJMJ5BY.js → projectConfig-EAAQYRMP.js} +7 -7
  119. package/dist/{publication-HQ5Y3KBM.js → publication-H3G346EX.js} +3 -3
  120. package/dist/{publish-VHDYQASC.js → publish-NEGKIS35.js} +9 -9
  121. package/dist/{remove-background-W2YX2NVH.js → remove-background-HU4S4HH5.js} +8 -8
  122. package/dist/{render-AO5VX3YI.js → render-F3CNO2IE.js} +4 -4
  123. package/dist/{render-ZJYL6ZPT.js → render-KEZFDRDA.js} +22 -22
  124. package/dist/{render-XVKTOY2L.js → render-POQI3EKS.js} +13 -13
  125. package/dist/{render-batch-YH7CTWNY.js → render-batch-63CBIJYR.js} +4 -4
  126. package/dist/{renderCancellation-JPIHE47X.js → renderCancellation-FT3JJ7GB.js} +7 -7
  127. package/dist/renderSetupWorker.js +1 -1
  128. package/dist/{resolver-IZ647GBZ.js → resolver-YJJKOGQF.js} +5 -5
  129. package/dist/{sherpa-KKLNW6U2.js → sherpa-3BQDMJPJ.js} +8 -8
  130. package/dist/{skills-IIHWUS56.js → skills-L7SZ45NC.js} +12 -12
  131. package/dist/{skillsUpdateCheck-HG5HOSBY.js → skillsUpdateCheck-HP3GJFBP.js} +3 -3
  132. package/dist/{snapshot-SRSWE7B2.js → snapshot-CYB2PZPW.js} +28 -28
  133. package/dist/{src-PVYUYV3M.js → src-CUR36DBE.js} +8 -6
  134. package/dist/{src-6YQBJGWR.js → src-ZPAJ44CP.js} +9 -9
  135. package/dist/{staticProjectServer-7EU666GS.js → staticProjectServer-U5DMWKWA.js} +16 -16
  136. package/dist/{status-YM52BQ6S.js → status-6CGT2PJT.js} +7 -7
  137. package/dist/studio/assets/{hyperframes-player-Cjcwveg0.js → hyperframes-player-DFv9heE6.js} +1 -1
  138. package/dist/studio/assets/{index-CwgWmfgx.js → index-Buy06mZy.js} +1 -1
  139. package/dist/studio/assets/{index-ME-Z5jh6.js → index-CTp4loy9.js} +1 -1
  140. package/dist/studio/assets/{index-Dj21zXWA.js → index-N_4Ij4X6.js} +184 -183
  141. package/dist/studio/assets/{index-D11atkBt.css → index-syMK0_9C.css} +1 -1
  142. package/dist/studio/{chunk-5VSXRGIX.js → chunk-NM7BXNZ7.js} +1 -1
  143. package/dist/studio/chunk-NM7BXNZ7.js.map +1 -0
  144. package/dist/studio/{chunk-FOEID72M.js → chunk-QRLKWENQ.js} +2 -2
  145. package/dist/studio/index.d.ts +3 -1
  146. package/dist/studio/index.html +2 -2
  147. package/dist/studio/index.js +911 -691
  148. package/dist/studio/index.js.map +1 -1
  149. package/dist/studio/player.js +2 -2
  150. package/dist/studio/styles.css +1 -1
  151. package/dist/studio/ui.d.ts +3 -2
  152. package/dist/studio/ui.js +1 -1
  153. package/dist/{studio-api-PNQZRPX5.js → studio-api-KMBTUYG5.js} +10 -10
  154. package/dist/{studioServer-SKEFBCNM.js → studioServer-LOJ6IOWA.js} +42 -42
  155. package/dist/{system-EZYZNUFD.js → system-3BTZGJNK.js} +7 -7
  156. package/dist/{telemetry-TN6HXCPW.js → telemetry-MCEZ5JYB.js} +10 -10
  157. package/dist/{timeline-Y6RJY467.js → timeline-XWH4I5CF.js} +17 -17
  158. package/dist/{tokens-HWMQVD2T.js → tokens-6UTTSLVN.js} +2 -2
  159. package/dist/{transcribe-BNSJRR4M.js → transcribe-HC35FL6W.js} +8 -8
  160. package/dist/{transcribe-PZP553TY.js → transcribe-S3NI7SYU.js} +13 -13
  161. package/dist/{updateCheck-2HHCJUTZ.js → updateCheck-3YAKEXSX.js} +2 -2
  162. package/dist/{upgrade-Y55PMAGH.js → upgrade-JQPBH5RY.js} +2 -2
  163. package/dist/{urlDownloader-H6WRI2UE.js → urlDownloader-A5TT3AFE.js} +6 -6
  164. package/dist/{validate-BFYU5VTW.js → validate-BLUPV5H5.js} +17 -17
  165. package/dist/{video-FGSGKRSV.js → video-USXMJDEZ.js} +7 -7
  166. package/package.json +1 -1
  167. package/dist/chunk-HWKCIWQT.js +0 -3578
  168. package/dist/studio/chunk-5VSXRGIX.js.map +0 -1
  169. /package/dist/studio/{chunk-FOEID72M.js.map → chunk-QRLKWENQ.js.map} +0 -0
@@ -11,49 +11,49 @@ import {
11
11
  } from "./chunk-ZKDMAOFU.js";
12
12
  import {
13
13
  serveStaticProjectHtml
14
- } from "./chunk-KBJUXVOJ.js";
14
+ } from "./chunk-3NCZ2SCH.js";
15
15
  import "./chunk-XUHOIDKG.js";
16
- import "./chunk-UEZXMWG3.js";
16
+ import "./chunk-XSWKLDVC.js";
17
17
  import "./chunk-X7MTZ4T2.js";
18
18
  import {
19
19
  openSettledCompositionPage,
20
20
  runFfmpegOnce
21
- } from "./chunk-YQZNILVH.js";
21
+ } from "./chunk-LO7L5PJ3.js";
22
22
  import "./chunk-5Z63TBTX.js";
23
- import "./chunk-7HG4BFIN.js";
24
- import "./chunk-HRUGC23L.js";
23
+ import "./chunk-XE6S5CE6.js";
24
+ import "./chunk-BSU7EOWJ.js";
25
25
  import "./chunk-YEIFI443.js";
26
- import "./chunk-S7NPLFWV.js";
27
- import "./chunk-RMHUQGRK.js";
26
+ import "./chunk-LYJNFBD6.js";
27
+ import "./chunk-GK5W3SIJ.js";
28
28
  import "./chunk-EOVYQ3IG.js";
29
- import "./chunk-QC4FJVLM.js";
30
- import "./chunk-TCLGPL65.js";
29
+ import "./chunk-37EDNWLQ.js";
30
+ import "./chunk-RVG35AL2.js";
31
31
  import "./chunk-IHFUKJOR.js";
32
- import "./chunk-XS4EJSKU.js";
32
+ import "./chunk-OSSVNAI5.js";
33
33
  import "./chunk-PFCFR3KZ.js";
34
- import "./chunk-CFKU7HTK.js";
34
+ import "./chunk-VNC6YQOC.js";
35
35
  import "./chunk-XT7X6QCP.js";
36
36
  import "./chunk-4YYJOFKS.js";
37
37
  import "./chunk-HVW7ABXD.js";
38
- import "./chunk-LYNI3FOL.js";
39
- import "./chunk-CWPVM2QV.js";
40
- import "./chunk-A2Z4Z4VL.js";
38
+ import "./chunk-32QEFPDS.js";
39
+ import "./chunk-V2J2ZWPR.js";
40
+ import "./chunk-RTURM45Q.js";
41
41
  import "./chunk-AWDFDFI3.js";
42
42
  import "./chunk-P6LJ4Y32.js";
43
43
  import "./chunk-GMECXFAN.js";
44
44
  import {
45
45
  findFFmpeg
46
46
  } from "./chunk-TVCRUG2S.js";
47
- import "./chunk-4NWOGZZS.js";
47
+ import "./chunk-374QQGBQ.js";
48
48
  import {
49
49
  trackCompareSheet
50
- } from "./chunk-ETWKKKJI.js";
51
- import "./chunk-MJ5XLLXY.js";
50
+ } from "./chunk-NDKVPWBH.js";
51
+ import "./chunk-Z3KAYWE5.js";
52
52
  import "./chunk-VWG7OQKU.js";
53
53
  import {
54
54
  c
55
55
  } from "./chunk-ZTZA4UWZ.js";
56
- import "./chunk-IUZFXWSV.js";
56
+ import "./chunk-4AXZWUQ6.js";
57
57
  import "./chunk-AMKC3AXA.js";
58
58
  import {
59
59
  defineCommand
@@ -64,25 +64,25 @@ import {
64
64
  } from "./chunk-PBN6GBJE.js";
65
65
  import "./chunk-KC5XXX3X.js";
66
66
  import "./chunk-TJSTGSAW.js";
67
- import "./chunk-K2FTXJYH.js";
67
+ import "./chunk-N3KRRPL7.js";
68
68
  import {
69
69
  gsapCdnDist
70
- } from "./chunk-2YN64IN5.js";
71
- import "./chunk-AVUUN2XD.js";
70
+ } from "./chunk-BHOKLX4F.js";
71
+ import "./chunk-OZUQF4NB.js";
72
72
  import "./chunk-DPVXBVLL.js";
73
- import "./chunk-Z6B37SNM.js";
73
+ import "./chunk-PGFP4FLW.js";
74
74
  import {
75
75
  HF_COLOR_GRADING_ATTR,
76
76
  isHfColorGradingActive,
77
77
  normalizeHfColorGrading,
78
78
  parseCubeLut,
79
79
  serializeHfColorGrading
80
- } from "./chunk-HWKCIWQT.js";
80
+ } from "./chunk-SRXQEQWZ.js";
81
81
  import "./chunk-VC76R6W2.js";
82
82
  import "./chunk-OFQWTKPW.js";
83
83
  import "./chunk-LCSMOLGX.js";
84
84
  import "./chunk-TWWSYAKJ.js";
85
- import "./chunk-ZJUKFZ2P.js";
85
+ import "./chunk-VDQCNWQI.js";
86
86
  import "./chunk-HBBJFK6I.js";
87
87
  import "./chunk-PJ3HDUCY.js";
88
88
  import "./chunk-TQFG7HTI.js";
@@ -90,12 +90,12 @@ import "./chunk-GK4AIFIH.js";
90
90
  import "./chunk-2PSPARWP.js";
91
91
  import {
92
92
  withMeta
93
- } from "./chunk-5OZGQCAB.js";
93
+ } from "./chunk-KZ7B3XK7.js";
94
94
  import "./chunk-K4WIOZFP.js";
95
95
  import "./chunk-XUXGIA7H.js";
96
96
  import "./chunk-WERLJGIC.js";
97
97
  import "./chunk-ISN5GRYI.js";
98
- import "./chunk-JEFU7IHM.js";
98
+ import "./chunk-AV7FBRWP.js";
99
99
  import {
100
100
  normalizeErrorMessage
101
101
  } from "./chunk-KNU5COPB.js";
@@ -489,7 +489,7 @@ async function loadReferenceFrame(framePath) {
489
489
  };
490
490
  }
491
491
  async function captureGradeCompareSheet(projectDir, timeoutMs) {
492
- const { bundleToSingleHtml } = await import("./compiler-QO36EXLS.js");
492
+ const { bundleToSingleHtml } = await import("./compiler-XZ654ZH2.js");
493
493
  const html = await bundleToSingleHtml(projectDir);
494
494
  const server = await serveStaticProjectHtml(projectDir, html);
495
495
  const sheetPath = join(projectDir, "grade-compare.png");
@@ -110,23 +110,43 @@ function knownStart(animation) {
110
110
  if (animation.resolvedStart !== void 0) return animation.resolvedStart;
111
111
  return typeof animation.position === "number" ? animation.position : void 0;
112
112
  }
113
- function positionHoldForAnimation(animation, animations) {
113
+ var tweenSignature = (a) => JSON.stringify([a.targetSelector, a.method, a.position, a.duration, a.properties, a.keyframes]);
114
+ function holdScope(before, previous) {
115
+ const kept = new Set(previous?.map(tweenSignature));
116
+ const held = /* @__PURE__ */ new Map();
117
+ for (const a of before.filter((b) => b.method === "set" && b.properties?.data === "hf-hold")) {
118
+ const props = held.get(a.targetSelector) ?? /* @__PURE__ */ new Map();
119
+ for (const [property, value] of Object.entries(a.properties)) props.set(property, value);
120
+ held.set(a.targetSelector, props);
121
+ }
122
+ return {
123
+ touched: (a) => previous !== null && !kept.has(tweenSignature(a)),
124
+ held: (selector) => held.get(selector) ?? /* @__PURE__ */ new Map()
125
+ };
126
+ }
127
+ function keyframeHoldForAnimation(animation, animations, scope) {
114
128
  if (!animation.keyframes) return null;
115
- const start = knownStart(animation) ?? 0;
116
- if (!(start > 1e-3)) return null;
129
+ const start = knownStart(animation);
130
+ const lone = animation.keyframes.keyframes.length === 1;
131
+ if (start === void 0 || !(start > 1e-3) && !lone) return null;
117
132
  const atStart = animation.keyframes.keyframes.find((keyframe) => keyframe.percentage === 0);
118
133
  if (!atStart) return null;
119
134
  const earlier = animations.filter((other) => {
120
135
  const otherStart = knownStart(other);
121
136
  return other !== animation && !other.global && other.targetSelector === animation.targetSelector && otherStart !== void 0 && otherStart < start - 1e-3;
122
137
  });
123
- const position = {};
138
+ const touched = scope.touched(animation);
139
+ const pinned = scope.held(animation.targetSelector);
140
+ const kept = (property, value) => touched ? pinned.has(property) : pinned.get(property) === value;
141
+ const pins = (group, property, value) => group === "position" && start > 1e-3 || (group === "position" || group === "size") && (lone && touched || kept(property, value));
142
+ const hold = {};
124
143
  for (const [property, value] of Object.entries(atStart.properties)) {
125
- if (classifyPropertyGroup(property) !== "position" || typeof value !== "number") continue;
144
+ if (!pins(classifyPropertyGroup(property), property, value) || typeof value !== "number")
145
+ continue;
126
146
  if (earlier.some((other) => writesProperty(other, property))) continue;
127
- position[property] = value;
147
+ hold[property] = value;
128
148
  }
129
- return Object.keys(position).length > 0 ? position : null;
149
+ return Object.keys(hold).length > 0 ? hold : null;
130
150
  }
131
151
  var SUPPORTED_EASES = [
132
152
  "none",
@@ -256,6 +276,10 @@ function serializeValue(value) {
256
276
  if (typeof value === "string") return JSON.stringify(value);
257
277
  return String(value);
258
278
  }
279
+ function plainPercentKey(percentage) {
280
+ const text = Math.abs(percentage) < 1e-6 ? percentage.toFixed(20).replace(/\.?0+$/, "") : String(percentage);
281
+ return `${text}%`;
282
+ }
259
283
  function safeJsKey(key) {
260
284
  return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key) ? key : JSON.stringify(key);
261
285
  }
@@ -1212,9 +1236,6 @@ function tweenCallToAnimation(call, scope) {
1212
1236
  properties[key] = val;
1213
1237
  }
1214
1238
  }
1215
- if (keyframesData && typeof vars.easeEach === "string") {
1216
- keyframesData.easeEach = vars.easeEach;
1217
- }
1218
1239
  if (motionPathResult) {
1219
1240
  const { waypoints } = motionPathResult;
1220
1241
  if (!keyframesData) {
@@ -1770,7 +1791,14 @@ var STUDIO_HOLD_MARKER = "hf-hold";
1770
1791
  function isStudioHoldSet(anim) {
1771
1792
  return anim.method === "set" && anim.properties?.data === STUDIO_HOLD_MARKER;
1772
1793
  }
1773
- function syncPositionHoldsBeforeKeyframes(script) {
1794
+ function animationsOf(script) {
1795
+ try {
1796
+ return parseGsapScript(script).animations;
1797
+ } catch {
1798
+ return null;
1799
+ }
1800
+ }
1801
+ function syncPositionHoldsBeforeKeyframes(script, previous) {
1774
1802
  let parsed;
1775
1803
  try {
1776
1804
  parsed = parseGsapScript(script);
@@ -1786,8 +1814,12 @@ function syncPositionHoldsBeforeKeyframes(script) {
1786
1814
  } catch {
1787
1815
  return result;
1788
1816
  }
1817
+ const scope = holdScope(
1818
+ parsed.animations,
1819
+ previous === void 0 ? null : animationsOf(previous)
1820
+ );
1789
1821
  for (const anim of reparsed.animations) {
1790
- const posProps = positionHoldForAnimation(anim, reparsed.animations);
1822
+ const posProps = keyframeHoldForAnimation(anim, reparsed.animations, scope);
1791
1823
  if (!posProps) continue;
1792
1824
  result = insertInheritedStateSet(result, anim.targetSelector, 0, {
1793
1825
  ...posProps,
@@ -1905,7 +1937,7 @@ function buildKeyframeObjectCode(keyframes, options) {
1905
1937
  const props = keyframePropsToCode(kf);
1906
1938
  if (kf.ease) props.push(`ease: ${JSON.stringify(kf.ease)}`);
1907
1939
  if (kf.auto) props.push(`_auto: 1`);
1908
- return `${JSON.stringify(`${kf.percentage}%`)}: { ${props.join(", ")} }`;
1940
+ return `${JSON.stringify(plainPercentKey(kf.percentage))}: { ${props.join(", ")} }`;
1909
1941
  });
1910
1942
  if (options?.easeEach) entries.push(`easeEach: ${JSON.stringify(options.easeEach)}`);
1911
1943
  return `{ ${entries.join(", ")} }`;
@@ -2021,7 +2053,7 @@ function convertArrayKeyframesToObjectNode(varsArg, scope) {
2021
2053
  el.properties = (el.properties ?? []).filter(
2022
2054
  (property) => !isObjectProperty(property) || propKeyName(property) !== "duration"
2023
2055
  );
2024
- return `${JSON.stringify(`${timing.percentages[i]}%`)}: ${recast.print(el).code}`;
2056
+ return `${JSON.stringify(plainPercentKey(timing.percentages[i]))}: ${recast.print(el).code}`;
2025
2057
  });
2026
2058
  prop.value = parseExpr(`{ ${entries.join(", ")}, easeEach: "none" }`);
2027
2059
  return prop.value;
@@ -2046,7 +2078,7 @@ function locateKeyframeCtx(script, animationId, percentage) {
2046
2078
  if (!loc) return null;
2047
2079
  const kfNode = findKeyframesObjectNode(loc.target.call.varsArg);
2048
2080
  if (!kfNode) return null;
2049
- return { loc, kfNode, pctKey: `${percentage}%` };
2081
+ return { loc, kfNode, pctKey: plainPercentKey(percentage) };
2050
2082
  }
2051
2083
  function addKeyframeToScript(script, animationId, percentage, properties, ease, backfillDefaults) {
2052
2084
  let loc = locateAnimationWithFallback(script, animationId);
@@ -2062,7 +2094,7 @@ function addKeyframeToScript(script, animationId, percentage, properties, ease,
2062
2094
  kfNode = findKeyframesObjectNode(loc.target.call.varsArg);
2063
2095
  if (!kfNode) return script;
2064
2096
  }
2065
- const pctKey = `${percentage}%`;
2097
+ const pctKey = plainPercentKey(percentage);
2066
2098
  const newValueNode = buildKeyframeValueNode(properties, ease);
2067
2099
  const existing = findKeyframePropByPct(kfNode, percentage);
2068
2100
  if (existing) {
@@ -2190,11 +2222,16 @@ function moveKeyframeInScript(script, animationId, fromPercentage, toPercentage)
2190
2222
  }
2191
2223
  entries.push({ pct: toPercentage, value: movedValue });
2192
2224
  entries.sort((a, b) => a.pct - b.pct);
2193
- kfNode.properties = entries.map((e) => {
2194
- const p = parseExpr(`{ ${JSON.stringify(`${e.pct}%`)}: {} }`).properties[0];
2195
- p.value = e.value;
2196
- return p;
2197
- });
2225
+ const pctProps = new Set(filterPercentageProps(kfNode));
2226
+ const kept = (kfNode.properties ?? []).filter((p) => !pctProps.has(p));
2227
+ kfNode.properties = [
2228
+ ...entries.map((e) => {
2229
+ const p = parseExpr(`{ ${JSON.stringify(plainPercentKey(e.pct))}: {} }`).properties[0];
2230
+ p.value = e.value;
2231
+ return p;
2232
+ }),
2233
+ ...kept
2234
+ ];
2198
2235
  return recast.print(loc.parsed.ast).code;
2199
2236
  }
2200
2237
  function resizeKeyframedTweenInScript(script, animationId, newPosition, newDuration, pctRemap) {
@@ -2207,7 +2244,7 @@ function resizeKeyframedTweenInScript(script, animationId, newPosition, newDurat
2207
2244
  const match = findKeyframePropByPct(kfNode, from);
2208
2245
  if (!match || seen.has(match.prop)) continue;
2209
2246
  seen.add(match.prop);
2210
- match.prop.key = parseExpr(`{ ${JSON.stringify(`${to}%`)}: 0 }`).properties[0].key;
2247
+ match.prop.key = parseExpr(`{ ${JSON.stringify(plainPercentKey(to))}: 0 }`).properties[0].key;
2211
2248
  }
2212
2249
  applyUpdatesToCall(loc.target.call, {
2213
2250
  position: newPosition,
@@ -2717,7 +2754,8 @@ function splitIntoPropertyGroups(script, animationId) {
2717
2754
  typeof anim.position === "number" ? anim.position : 0,
2718
2755
  anim.duration ?? 0.5,
2719
2756
  groupKeyframes,
2720
- anim.keyframes.easeEach ?? anim.ease
2757
+ anim.keyframes.ease ?? anim.ease,
2758
+ anim.keyframes.easeEach
2721
2759
  );
2722
2760
  result = addResult.script;
2723
2761
  } else {
@@ -12,8 +12,9 @@ import {
12
12
  gsapScriptMotionPathFirstUseIndex,
13
13
  gsapScriptUsesMotionPath,
14
14
  parseGsapScriptAcorn,
15
- parseGsapScriptAcornForWrite
16
- } from "./chunk-4NWOGZZS.js";
15
+ parseGsapScriptAcornForWrite,
16
+ scriptShape
17
+ } from "./chunk-374QQGBQ.js";
17
18
  import "./chunk-2PSPARWP.js";
18
19
  import "./chunk-M2WBOQ2Q.js";
19
20
  export {
@@ -24,5 +25,6 @@ export {
24
25
  gsapScriptMotionPathFirstUseIndex,
25
26
  gsapScriptUsesMotionPath,
26
27
  parseGsapScriptAcorn,
27
- parseGsapScriptAcornForWrite
28
+ parseGsapScriptAcornForWrite,
29
+ scriptShape
28
30
  };
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-S3S4TGEH.js";
13
13
  import {
14
14
  VERSION
15
- } from "./chunk-JEFU7IHM.js";
15
+ } from "./chunk-AV7FBRWP.js";
16
16
  import "./chunk-M2WBOQ2Q.js";
17
17
 
18
18
  // src/help.ts
@@ -11,28 +11,28 @@ import {
11
11
  MAX_WINDOW_IDLE_MS,
12
12
  START,
13
13
  openProjectHistory
14
- } from "./chunk-S7NPLFWV.js";
15
- import "./chunk-RMHUQGRK.js";
14
+ } from "./chunk-LYJNFBD6.js";
15
+ import "./chunk-GK5W3SIJ.js";
16
16
  import "./chunk-EOVYQ3IG.js";
17
- import "./chunk-QC4FJVLM.js";
18
- import "./chunk-TCLGPL65.js";
17
+ import "./chunk-37EDNWLQ.js";
18
+ import "./chunk-RVG35AL2.js";
19
19
  import {
20
20
  resolveProject
21
- } from "./chunk-VTUOQTFU.js";
21
+ } from "./chunk-WVRNPWVW.js";
22
22
  import "./chunk-IHFUKJOR.js";
23
23
  import {
24
24
  AmbiguousPreviewServerError,
25
25
  findPreviewServerForProject,
26
26
  studioApiUrl
27
27
  } from "./chunk-DQBY7FRR.js";
28
- import "./chunk-4NWOGZZS.js";
28
+ import "./chunk-374QQGBQ.js";
29
29
  import {
30
30
  trackHistoryAction
31
- } from "./chunk-ETWKKKJI.js";
32
- import "./chunk-MJ5XLLXY.js";
31
+ } from "./chunk-NDKVPWBH.js";
32
+ import "./chunk-Z3KAYWE5.js";
33
33
  import "./chunk-VWG7OQKU.js";
34
34
  import "./chunk-ZTZA4UWZ.js";
35
- import "./chunk-IUZFXWSV.js";
35
+ import "./chunk-4AXZWUQ6.js";
36
36
  import "./chunk-AMKC3AXA.js";
37
37
  import {
38
38
  defineCommand
@@ -43,16 +43,16 @@ import {
43
43
  } from "./chunk-PBN6GBJE.js";
44
44
  import "./chunk-KC5XXX3X.js";
45
45
  import "./chunk-TJSTGSAW.js";
46
- import "./chunk-K2FTXJYH.js";
47
- import "./chunk-2YN64IN5.js";
48
- import "./chunk-AVUUN2XD.js";
46
+ import "./chunk-N3KRRPL7.js";
47
+ import "./chunk-BHOKLX4F.js";
48
+ import "./chunk-OZUQF4NB.js";
49
49
  import "./chunk-DPVXBVLL.js";
50
- import "./chunk-Z6B37SNM.js";
51
- import "./chunk-HWKCIWQT.js";
50
+ import "./chunk-PGFP4FLW.js";
51
+ import "./chunk-SRXQEQWZ.js";
52
52
  import "./chunk-VC76R6W2.js";
53
53
  import "./chunk-OFQWTKPW.js";
54
54
  import "./chunk-TWWSYAKJ.js";
55
- import "./chunk-ZJUKFZ2P.js";
55
+ import "./chunk-VDQCNWQI.js";
56
56
  import "./chunk-HBBJFK6I.js";
57
57
  import "./chunk-PJ3HDUCY.js";
58
58
  import "./chunk-TQFG7HTI.js";
@@ -60,12 +60,12 @@ import "./chunk-GK4AIFIH.js";
60
60
  import "./chunk-2PSPARWP.js";
61
61
  import {
62
62
  withMeta
63
- } from "./chunk-5OZGQCAB.js";
63
+ } from "./chunk-KZ7B3XK7.js";
64
64
  import "./chunk-K4WIOZFP.js";
65
65
  import "./chunk-XUXGIA7H.js";
66
66
  import "./chunk-WERLJGIC.js";
67
67
  import "./chunk-ISN5GRYI.js";
68
- import "./chunk-JEFU7IHM.js";
68
+ import "./chunk-AV7FBRWP.js";
69
69
  import "./chunk-KNU5COPB.js";
70
70
  import "./chunk-3GXQPCJC.js";
71
71
  import "./chunk-RQVDTPGD.js";