hyperframes 0.8.111 → 0.8.112

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 (182) hide show
  1. package/dist/{add-M5WN2AM2.js → add-NIVC2YMT.js} +15 -15
  2. package/dist/{agentPromptGenerator-QL2KAWEP.js → agentPromptGenerator-VIIPZCJ3.js} +1 -1
  3. package/dist/{animatedGifPrep-NMGFOSIL.js → animatedGifPrep-NWAJKCHG.js} +6 -6
  4. package/dist/{asset-GUASPIKN.js → asset-O6JJKF3Z.js} +2 -2
  5. package/dist/{assetCataloger-FXEHOUA3.js → assetCataloger-DJSPW3RL.js} +2 -2
  6. package/dist/{auth-3YMEVUKJ.js → auth-6XRZQQQS.js} +2 -2
  7. package/dist/{autoUpdate-FYCGHBPC.js → autoUpdate-GZHLQBLS.js} +2 -2
  8. package/dist/{backgroundChecks-ZLYIRMTS.js → backgroundChecks-4QQRGJ5S.js} +3 -3
  9. package/dist/backgroundChecksWorker.js +3 -3
  10. package/dist/{batchRender-ZTHFMHZY.js → batchRender-PJGNXN7F.js} +3 -3
  11. package/dist/{beats-GXY5ZBPB.js → beats-VYR6B4UB.js} +10 -10
  12. package/dist/{benchmark-MJFVBVNW.js → benchmark-CGP2NKIP.js} +12 -12
  13. package/dist/{browser-ZDI7IX6H.js → browser-ZWD4ETXK.js} +9 -9
  14. package/dist/{bundleWithLocalizedFonts-4Q3ETTHW.js → bundleWithLocalizedFonts-JWHKLSZM.js} +2 -2
  15. package/dist/{capture-4OPH4PMK.js → capture-C4MPRLJV.js} +40 -42
  16. package/dist/{capture-OG6532RA.js → capture-IQ7AUK6M.js} +3 -3
  17. package/dist/{captureFile-JOPOCRU7.js → captureFile-LYOJOUIE.js} +3 -1
  18. package/dist/{catalog-23DP7KCW.js → catalog-RZ7PWQMS.js} +15 -15
  19. package/dist/{check-5X6BJA2P.js → check-7UU4SSO6.js} +50 -38
  20. package/dist/{checkBrowser-3QHBTMYM.js → checkBrowser-6KYNYIU7.js} +32 -31
  21. package/dist/{chunk-CFC3EEDQ.js → chunk-2BEOCUAG.js} +1 -1
  22. package/dist/{chunk-6CI65KCP.js → chunk-2GXKCB7J.js} +1 -1
  23. package/dist/{chunk-HQGJLZB6.js → chunk-36XLW2TP.js} +2 -2
  24. package/dist/{chunk-NH75EKOP.js → chunk-3Q7HXIXZ.js} +1 -1
  25. package/dist/{chunk-2JXJ5SGK.js → chunk-4BXTKKRD.js} +6 -6
  26. package/dist/{chunk-XYVFPDNU.js → chunk-5SDXALUQ.js} +1 -1
  27. package/dist/{chunk-ITBEN3QD.js → chunk-7G25WGTA.js} +2 -2
  28. package/dist/{chunk-YIXEH4TF.js → chunk-7OJSZTJK.js} +2 -2
  29. package/dist/{chunk-5ER3PYYP.js → chunk-7VIXEM6Q.js} +1 -1
  30. package/dist/{chunk-HPEHQUJX.js → chunk-A6GVXZZ3.js} +1 -1
  31. package/dist/{chunk-YLOSZHA2.js → chunk-BD3MHTSR.js} +2 -2
  32. package/dist/{chunk-Q2QNAFQV.js → chunk-BLI5XATY.js} +1 -1
  33. package/dist/{chunk-N32ITJ7L.js → chunk-BSBIG74E.js} +15 -12
  34. package/dist/{chunk-ZU54D6MI.js → chunk-BZGWHPRW.js} +3 -3
  35. package/dist/{chunk-B25H4M4V.js → chunk-C4JINRJK.js} +1 -1
  36. package/dist/{chunk-5ON5GH3X.js → chunk-CS4IE5G7.js} +1 -1
  37. package/dist/{chunk-EE6SV6KW.js → chunk-E664L6K3.js} +3 -3
  38. package/dist/{chunk-J4RPT4QW.js → chunk-E6RPWJVC.js} +1 -1
  39. package/dist/{chunk-TQKKC4MB.js → chunk-EA4LCCJI.js} +5 -5
  40. package/dist/{chunk-LFUXJBYA.js → chunk-GODQ5XA4.js} +16 -8
  41. package/dist/{chunk-LAQEZHOH.js → chunk-H3WFEPV2.js} +1 -1
  42. package/dist/{chunk-U4TDAJZE.js → chunk-J2S4MY2M.js} +2 -2
  43. package/dist/{chunk-CQRF7VU3.js → chunk-JRULOVZK.js} +1 -1
  44. package/dist/{chunk-C4TZBEHY.js → chunk-KIIKVKHB.js} +2 -2
  45. package/dist/{chunk-M224DAMG.js → chunk-KPSRL2NB.js} +1 -1
  46. package/dist/{chunk-JTTAS7N6.js → chunk-KQ3VNA6R.js} +1 -1
  47. package/dist/{chunk-ZXSNGIYS.js → chunk-KS5HFREQ.js} +4 -4
  48. package/dist/{chunk-AMSBTN6L.js → chunk-LYBFDHXD.js} +3 -3
  49. package/dist/{chunk-AWUZ3AUD.js → chunk-M4RYK5OF.js} +1 -1
  50. package/dist/chunk-MRF4AMKD.js +104 -0
  51. package/dist/{chunk-JWPSBANO.js → chunk-NOOBRCMC.js} +3 -3
  52. package/dist/{chunk-TIZQC44K.js → chunk-OWN3ZIIK.js} +1 -1
  53. package/dist/{chunk-NIGUNLOO.js → chunk-OXZO4WQI.js} +9 -8
  54. package/dist/{chunk-JUP65S7D.js → chunk-P3AQVFY2.js} +3 -3
  55. package/dist/{chunk-OF3RKOPU.js → chunk-P74PW7KR.js} +189 -111
  56. package/dist/{chunk-PFEKMIN5.js → chunk-POEGJGEA.js} +1 -1
  57. package/dist/{chunk-BQYGGX3B.js → chunk-PRETPA7Z.js} +1 -1
  58. package/dist/{chunk-QMAXDSCH.js → chunk-Q7U7QRC7.js} +2 -2
  59. package/dist/chunk-S6TH5G6Z.js +3541 -0
  60. package/dist/{chunk-MGFVNTIB.js → chunk-TSZU5JMC.js} +2 -2
  61. package/dist/{chunk-MR2LOG32.js → chunk-TXVN43SX.js} +8 -8
  62. package/dist/{chunk-V4HKT2LV.js → chunk-UTXMQVB2.js} +9 -9
  63. package/dist/{chunk-I5WWEBDG.js → chunk-VHRHI3CU.js} +1 -1
  64. package/dist/{chunk-E4AYSXMS.js → chunk-VW6CVKVA.js} +2 -2
  65. package/dist/{chunk-BAVM2XBR.js → chunk-YAFO7V4A.js} +209 -33
  66. package/dist/{chunk-32P7FTFC.js → chunk-YQ5MFXWG.js} +8 -7
  67. package/dist/{clean-ATMEGSGP.js → clean-263PH5CR.js} +15 -15
  68. package/dist/cli.js +50 -50
  69. package/dist/{cloud-ZFGUHACY.js → cloud-STLYEQNN.js} +4 -4
  70. package/dist/{cloudrun-LVZ4OPPC.js → cloudrun-7ZVNB6FY.js} +3 -3
  71. package/dist/commands/layout-audit.browser.js +178 -202
  72. package/dist/commands/motion-sample.browser.js +24 -71
  73. package/dist/commands/motion-signature.browser.js +374 -0
  74. package/dist/{compare-55LEUY7M.js → compare-33JLJ52D.js} +26 -26
  75. package/dist/{compiler-C32VXLE2.js → compiler-H3QAMMC2.js} +3 -3
  76. package/dist/{component-3EDFANIC.js → component-O5JLM26B.js} +3 -3
  77. package/dist/{compositions-OPU6U6GM.js → compositions-CN4ZVT5G.js} +11 -11
  78. package/dist/{contactSheet-54AJDSR5.js → contactSheet-27SRU7A4.js} +2 -2
  79. package/dist/{delete-PJE4P3HH.js → delete-Z23A45R3.js} +2 -2
  80. package/dist/{deploy-4T3RMA5G.js → deploy-PJLSZMUH.js} +1 -1
  81. package/dist/{destroy-EYDBVHGF.js → destroy-IPUDK6YN.js} +1 -1
  82. package/dist/{dist-YUIPB7OX.js → dist-7VEVT4NT.js} +2 -2
  83. package/dist/{dist-FMHQMEMX.js → dist-ICXYT7XK.js} +1 -1
  84. package/dist/docker/Dockerfile.render +1 -1
  85. package/dist/{doctor-EIVBJJAF.js → doctor-6QLXSGPK.js} +10 -10
  86. package/dist/{events-ISMT4RDW.js → events-EAAIWITP.js} +8 -8
  87. package/dist/{events-NP666TF4.js → events-UA4DJUO2.js} +9 -9
  88. package/dist/{feedback-4OSLMKBW.js → feedback-2CIRCBHY.js} +10 -10
  89. package/dist/{figma-Y7ZHFCOU.js → figma-DFCCII66.js} +3 -3
  90. package/dist/fontLocalizeCli.js +8 -8
  91. package/dist/{get-E4GBRHQK.js → get-UQ2AAXWM.js} +2 -2
  92. package/dist/{gpuPolicy-CA6KRFQQ.js → gpuPolicy-CPCLBMS5.js} +6 -6
  93. package/dist/{grade-compare-B2EHEOLR.js → grade-compare-THUUFHO3.js} +24 -24
  94. package/dist/{help-ISGUWGOR.js → help-SR2MRL3U.js} +1 -1
  95. package/dist/{history-FNRU3TL4.js → history-WLI7KFXB.js} +15 -15
  96. package/dist/hyperframe-runtime.js +49 -49
  97. package/dist/hyperframe.manifest.json +1 -1
  98. package/dist/hyperframe.runtime.iife.js +49 -49
  99. package/dist/hyperframes-player.global.js +1 -1
  100. package/dist/{info-FO7VR5NC.js → info-DFJM3YRJ.js} +11 -11
  101. package/dist/{init-IGW4DTVC.js → init-HEAMOTGH.js} +22 -22
  102. package/dist/{inspect-D4GUGDW7.js → inspect-TO2EXJNK.js} +25 -25
  103. package/dist/{installer-NBEN3ZIP.js → installer-REA7ZASD.js} +4 -4
  104. package/dist/{keyframes-CXZLEC3R.js → keyframes-XHEBAJY7.js} +12 -12
  105. package/dist/{lambda-BFHJMMCG.js → lambda-MSWYKDNT.js} +6 -6
  106. package/dist/{layout-XEDEOLAH.js → layout-UQXCTFFV.js} +25 -25
  107. package/dist/{lint-LLGMCVZ5.js → lint-BSMZ526C.js} +12 -12
  108. package/dist/{lintProject-X7L7EZWZ.js → lintProject-VNE322A7.js} +1 -1
  109. package/dist/{list-LUCWSLK6.js → list-RNP5EMTX.js} +2 -2
  110. package/dist/{login-SMWYXJWJ.js → login-S6V75HG5.js} +4 -4
  111. package/dist/{media-treatment-OYTNU6PX.js → media-treatment-IHEEEDUQ.js} +15 -14
  112. package/dist/{models-RILNQV3Z.js → models-OQEBKNJI.js} +7 -7
  113. package/dist/{motionShot-5F4DCMWC.js → motionShot-EAIFVJ2I.js} +10 -10
  114. package/dist/{normalize-audio-4LHYKFON.js → normalize-audio-4ACUR6W6.js} +11 -11
  115. package/dist/{pipeline-5UY45ELH.js → pipeline-SOQHD5YN.js} +6 -6
  116. package/dist/{play-D4AHRZQD.js → play-3WJPS3FE.js} +20 -20
  117. package/dist/{preflight-3V5IHGWQ.js → preflight-ZUADCOLZ.js} +7 -7
  118. package/dist/{present-VUH7PLOO.js → present-MU23WZZA.js} +16 -16
  119. package/dist/{preview-NCFC65VR.js → preview-VOTNRX67.js} +17 -17
  120. package/dist/{producer-7JGAPEAF.js → producer-HKRMTCPU.js} +1 -1
  121. package/dist/{projectConfig-JHEWPAA5.js → projectConfig-H37MQGE6.js} +6 -6
  122. package/dist/{publication-7XA2H7UB.js → publication-QVDKMAKD.js} +2 -2
  123. package/dist/{publish-257VZMWI.js → publish-54IPKU5O.js} +8 -8
  124. package/dist/{remove-background-EV6XVADN.js → remove-background-KQQ2WPKP.js} +7 -7
  125. package/dist/{render-DHCMWKFV.js → render-HJQ44SEI.js} +12 -12
  126. package/dist/{render-DKXGFQVW.js → render-P7727PLY.js} +21 -21
  127. package/dist/{render-4C3YKVZI.js → render-S2T3SLI4.js} +3 -3
  128. package/dist/{render-batch-AFDBPDMM.js → render-batch-DUFAHD6F.js} +3 -3
  129. package/dist/{renderCancellation-VIZELWDD.js → renderCancellation-BSVXXGZM.js} +6 -6
  130. package/dist/renderSetupWorker.js +1 -1
  131. package/dist/{resolver-S72XBTEQ.js → resolver-PHWKDEH2.js} +4 -4
  132. package/dist/{screenshotCapture-FA5HPN7Q.js → screenshotCapture-ECBTLCU6.js} +3 -3
  133. package/dist/{sherpa-BAADWCHB.js → sherpa-GHQOWXFV.js} +7 -7
  134. package/dist/skills/hyperframes/references/frame-worker-core.md +2 -2
  135. package/dist/skills/hyperframes-cli/references/lint-validate-inspect.md +2 -2
  136. package/dist/skills/media-use/audio/references/bgm.md +1 -1
  137. package/dist/skills/media-use/audio/references/tts.md +1 -1
  138. package/dist/skills/media-use/audio/scripts/lib/python.mjs +19 -5
  139. package/dist/skills/media-use/audio/scripts/lib/python.test.mjs +69 -1
  140. package/dist/{skills-2BGFBUR6.js → skills-SOCMD66Y.js} +40 -14
  141. package/dist/{skillsUpdateCheck-5LYFYHUF.js → skillsUpdateCheck-PONPICQM.js} +3 -3
  142. package/dist/{snapshot-Z37DZL4T.js → snapshot-ECXEZ4TY.js} +50 -29
  143. package/dist/{src-GD7RGV5U.js → src-LVBNYMJW.js} +5 -5
  144. package/dist/{src-GRC63B6L.js → src-RQE5HXZK.js} +7 -7
  145. package/dist/{staticProjectServer-SFINO3DE.js → staticProjectServer-TQYP44CW.js} +14 -14
  146. package/dist/{status-LXQL3L3H.js → status-HVI7QZHE.js} +6 -6
  147. package/dist/studio/assets/{hyperframes-player-DvJeHBHi.js → hyperframes-player-CBpg41JM.js} +1 -1
  148. package/dist/studio/assets/{index-Bt4vDkfw.js → index-BFitquwi.js} +1 -1
  149. package/dist/studio/assets/{index-SFktf7O1.js → index-BKy_birQ.js} +194 -194
  150. package/dist/studio/assets/{index--G6c4Q_x.js → index-CZfrSyU9.js} +1 -1
  151. package/dist/studio/assets/{index-C7apTvpr.css → index-DbfKVTId.css} +1 -1
  152. package/dist/studio/{chunk-PQFEBX32.js → chunk-BIUXP3PG.js} +2 -2
  153. package/dist/studio/{chunk-6LUNLTHR.js → chunk-K47E2ZJA.js} +13 -8
  154. package/dist/studio/chunk-K47E2ZJA.js.map +1 -0
  155. package/dist/studio/{chunk-QUXZVHOJ.js → chunk-VWT7STY3.js} +2 -2
  156. package/dist/studio/{domEditingLayers-JQPQGGT7.js → domEditingLayers-V67MS4WP.js} +3 -3
  157. package/dist/studio/index.d.ts +80 -46
  158. package/dist/studio/index.html +2 -2
  159. package/dist/studio/index.js +7294 -6844
  160. package/dist/studio/index.js.map +1 -1
  161. package/dist/studio/player.js +2 -2
  162. package/dist/studio/styles.css +1 -1
  163. package/dist/{studio-api-WRSCXPWS.js → studio-api-EKF6TFDB.js} +8 -8
  164. package/dist/{studioServer-HTLRGC5G.js → studioServer-BSNDGK63.js} +38 -38
  165. package/dist/{system-EEWYEHYX.js → system-NLNIE7PO.js} +6 -6
  166. package/dist/{telemetry-NLEEMXO2.js → telemetry-XNDAM6JU.js} +9 -9
  167. package/dist/{timeline-7C4KM3KD.js → timeline-IKWTTCNY.js} +15 -15
  168. package/dist/{tokens-QQLJXW4G.js → tokens-KOTFKBAK.js} +2 -2
  169. package/dist/{transcribe-GCKJF5A6.js → transcribe-ELJHKA5B.js} +7 -7
  170. package/dist/{transcribe-TGR5CTA7.js → transcribe-STEYOXIO.js} +12 -12
  171. package/dist/{updateCheck-73JM5QR3.js → updateCheck-OJMEQUST.js} +2 -2
  172. package/dist/{upgrade-V6E5P53C.js → upgrade-NIS32YR6.js} +2 -2
  173. package/dist/{urlDownloader-NYXPEBUN.js → urlDownloader-KJSQAFN7.js} +5 -5
  174. package/dist/{validate-INP7WJAK.js → validate-7MCKNH5K.js} +15 -15
  175. package/dist/{video-KWQ5TSVD.js → video-TUXP3VGQ.js} +17 -9
  176. package/package.json +1 -1
  177. package/dist/chunk-5GQAJ43Q.js +0 -31
  178. package/dist/chunk-YLVI7VL5.js +0 -3541
  179. package/dist/studio/chunk-6LUNLTHR.js.map +0 -1
  180. /package/dist/studio/{chunk-PQFEBX32.js.map → chunk-BIUXP3PG.js.map} +0 -0
  181. /package/dist/studio/{chunk-QUXZVHOJ.js.map → chunk-VWT7STY3.js.map} +0 -0
  182. /package/dist/studio/{domEditingLayers-JQPQGGT7.js.map → domEditingLayers-V67MS4WP.js.map} +0 -0
@@ -0,0 +1,374 @@
1
+ // Shared "what counts as motion" classifier, injected before layout-audit.browser.js and motion-sample.browser.js.
2
+ // The frozen-sweep guard (sweep_static) and keepsMoving liveness (motion_frozen) meet in one decision, so both
3
+ // must count the same channels as motion; only quantization differs (liveness buckets 2px and 0.08 opacity).
4
+ // A channel reader returns a string equal across samples iff it did not visibly change, "" when it does not apply.
5
+ (function () {
6
+ const IGNORE_TAGS = new Set(["SCRIPT", "STYLE", "TEMPLATE", "NOSCRIPT", "META", "LINK"]);
7
+ const MEDIA_TAGS = new Set(["CANVAS", "VIDEO", "IMG"]);
8
+ const FNV_OFFSET_BASIS = 2166136261;
9
+ const FNV_PRIME = 16777619;
10
+ const LIVENESS_POSITION_BUCKET_PX = 2;
11
+ const LIVENESS_OPACITY_BUCKET = 0.08;
12
+ const IGNORE_SELECTOR = "[data-layout-ignore], [data-layout-check='ignore']";
13
+ // counter(name) / counters(name, sep) in generated content. A list-item box
14
+ // whose ::marker content is `normal` paints counter(list-item) implicitly.
15
+ const COUNTER_FUNCTION = /counters?\(\s*([^\s,)]+)/g;
16
+ const IMPLICIT_MARKER_CONTENT = "counter(list-item)";
17
+ const LIST_ITEM_DISPLAY = /\blist-item\b/;
18
+ // Whether an element sits inside skipped contents is not on its computed style; only checkVisibility knows.
19
+ // PAINTED_OPTIONS matches layout-audit.browser.js isVisibleElement's opacity-floor path. happy-dom lacks
20
+ // checkVisibility, so callers keep a computed-style fallback.
21
+ const RENDERED_BOX_OPTIONS = { contentVisibilityAuto: true };
22
+ const PAINTED_OPTIONS = {
23
+ opacityProperty: true,
24
+ visibilityProperty: true,
25
+ contentVisibilityAuto: true,
26
+ };
27
+ // Stand-in for the ::before/::after of an element whose contents are skipped:
28
+ // no pseudo box exists, so nothing it declares (content, counter-*) paints.
29
+ const NO_BOX = Object.freeze({ display: "none" });
30
+ const SKIPPED_PSEUDO = Object.freeze({ before: NO_BOX, after: NO_BOX });
31
+ // content-visibility skips contents only where size containment applies (css-contain-2); hosts matching this
32
+ // paint everything. It mirrors Chromium 152 where that differs from the spec: a table-cell host skips, a
33
+ // table-caption host does not. Replaced elements (MEDIA_TAGS) are atomic even at display:inline.
34
+ const NOT_CONTAINABLE_DISPLAY =
35
+ /^(inline( list-item)?|contents|table|inline-table|table-(?!cell$)[a-z-]+|ruby[a-z-]*)$/;
36
+
37
+ function skipsContents(element, style) {
38
+ if (style.contentVisibility !== "hidden") return false;
39
+ return MEDIA_TAGS.has(element.tagName) || !NOT_CONTAINABLE_DISPLAY.test(style.display);
40
+ }
41
+
42
+ function round(value) {
43
+ return Math.round(value * 100) / 100;
44
+ }
45
+
46
+ function opacityChain(element) {
47
+ let opacity = 1;
48
+ for (let current = element; current; current = current.parentElement) {
49
+ const parsed = Number.parseFloat(getComputedStyle(current).opacity || "1");
50
+ if (Number.isFinite(parsed)) opacity *= parsed;
51
+ }
52
+ return opacity;
53
+ }
54
+
55
+ function compositionRoot() {
56
+ return (
57
+ document.querySelector("[data-composition-id][data-width][data-height]") ||
58
+ document.querySelector("[data-composition-id]") ||
59
+ document.body
60
+ );
61
+ }
62
+
63
+ function isHiddenStyle(style) {
64
+ return (
65
+ style.display === "none" || style.visibility === "hidden" || style.visibility === "collapse"
66
+ );
67
+ }
68
+
69
+ // Kept local rather than shared with layout-audit, which is installed and tested on its own. The author
70
+ // opt-out is not applied: an asserted selector outranks it, and compositionSignature applies it itself.
71
+ // clip-path is a channel, not a visibility probe, so a wipe over a static box counts as motion.
72
+ // fallow-ignore-next-line complexity
73
+ function isVisibleElement(element, style, opacity) {
74
+ if (IGNORE_TAGS.has(element.tagName)) return false;
75
+ if (
76
+ typeof element.checkVisibility === "function" &&
77
+ !element.checkVisibility(PAINTED_OPTIONS)
78
+ ) {
79
+ return false;
80
+ }
81
+ if (isHiddenStyle(style || getComputedStyle(element))) return false;
82
+ if ((opacity === undefined ? opacityChain(element) : opacity) < 0.2) return false;
83
+ const rect = element.getBoundingClientRect();
84
+ return rect.width > 0.5 && rect.height > 0.5;
85
+ }
86
+
87
+ function foldField(hash, value) {
88
+ hash ^= value.length;
89
+ hash = Math.imul(hash, FNV_PRIME);
90
+ for (let i = 0; i < value.length; i++) {
91
+ hash ^= value.charCodeAt(i);
92
+ hash = Math.imul(hash, FNV_PRIME);
93
+ }
94
+ return hash;
95
+ }
96
+
97
+ function hashFields(fields) {
98
+ let hash = FNV_OFFSET_BASIS;
99
+ for (const field of fields) hash = foldField(hash, field);
100
+ return (hash >>> 0).toString(36);
101
+ }
102
+
103
+ // `none` / `normal` are the computed initial values of content, counter-*,
104
+ // clip-path, and font-variation-settings; collapse them so unused channels
105
+ // stay "".
106
+ function cssValue(value) {
107
+ return value === "none" || value === "normal" ? "" : value || "";
108
+ }
109
+
110
+ // --- Per-element channels: (element, ctx) => string --------------------------
111
+
112
+ function boxChannel(element, ctx) {
113
+ const rect = element.getBoundingClientRect();
114
+ const box = [rect.left, rect.top, rect.width, rect.height];
115
+ if (ctx.quantize) {
116
+ return box.map((value) => Math.round(value / LIVENESS_POSITION_BUCKET_PX)).join(",");
117
+ }
118
+ return box.map(round).join(",");
119
+ }
120
+
121
+ function opacityChannel(element, ctx) {
122
+ return String(
123
+ ctx.quantize ? Math.round(ctx.opacity / LIVENESS_OPACITY_BUCKET) : round(ctx.opacity),
124
+ );
125
+ }
126
+
127
+ // Variable-font axis animation moves no geometry and no opacity; in a
128
+ // DUPLEXED face (Recursive holds one advance width at every weight) not even
129
+ // the line width shifts, so without this channel the whole run reads frozen.
130
+ function fontAxesChannel(element, ctx) {
131
+ const axes = cssValue(ctx.style.fontVariationSettings);
132
+ return axes ? hashFields([axes]) : "";
133
+ }
134
+
135
+ // A clip-path wipe (inset(0 100% 0 0) → inset(0)) reveals a box that never
136
+ // moves; the computed clip-path string is the only thing that changes.
137
+ function clipPathChannel(element, ctx) {
138
+ const clip = cssValue(ctx.style.clipPath);
139
+ return clip ? hashFields([clip]) : "";
140
+ }
141
+
142
+ // Direct text nodes only: descendants are signed separately, and a hidden
143
+ // descendant's text mutation must not masquerade as visible motion.
144
+ function textChannel(element) {
145
+ const text = Array.from(element.childNodes)
146
+ .filter((node) => node.nodeType === 3)
147
+ .map((node) => node.textContent)
148
+ .join("");
149
+ return text && hashFields([text]);
150
+ }
151
+
152
+ function flag(value) {
153
+ return value ? "1" : "0";
154
+ }
155
+
156
+ function selectState(element) {
157
+ const fields = [String(element.selectedIndex), element.value || ""];
158
+ for (const option of element.options) fields.push(flag(option.selected));
159
+ return fields;
160
+ }
161
+
162
+ // A control's value is painted by its inner (shadow) contents, which
163
+ // content-visibility: hidden skips; the widget itself (its type, a
164
+ // checkbox/radio glyph) is theme paint of the control's own box and still
165
+ // shows. Hence two channels.
166
+ const CONTROL_VALUE = {
167
+ INPUT: (element) => [element.value || ""],
168
+ TEXTAREA: (element) => [element.value || ""],
169
+ SELECT: selectState,
170
+ };
171
+
172
+ function controlValueChannel(element) {
173
+ const read = CONTROL_VALUE[element.tagName];
174
+ return read ? hashFields(read(element)) : "";
175
+ }
176
+
177
+ function controlWidgetChannel(element) {
178
+ if (element.tagName !== "INPUT") return "";
179
+ return hashFields([element.type || "", flag(element.checked), flag(element.indeterminate)]);
180
+ }
181
+
182
+ // Chromium substitutes attr() in computed pseudo content, so this is the
183
+ // platform-owned rendered string rather than a CSS expression to reparse.
184
+ // counter() is NOT substituted — that is what the counter channel is for.
185
+ function generatedContentChannel(element, ctx) {
186
+ const before = cssValue(ctx.pseudo.before.content);
187
+ const after = cssValue(ctx.pseudo.after.content);
188
+ return before || after ? hashFields([before, after]) : "";
189
+ }
190
+
191
+ // Pixel-only media motion (canvas repaint, playing video, same-size <img> swap) is invisible to DOM channels,
192
+ // so fold in an 8x8 downsample. Unreadable media hashes to a constant; iframe media is a separate document.
193
+ // fallow-ignore-next-line complexity
194
+ function mediaPixelChannel(element) {
195
+ if (!MEDIA_TAGS.has(element.tagName)) return "";
196
+ try {
197
+ const rect = element.getBoundingClientRect();
198
+ const sourceWidth = element.videoWidth || element.width || rect.width;
199
+ const sourceHeight = element.videoHeight || element.height || rect.height;
200
+ if (!sourceWidth || !sourceHeight) return "x";
201
+ const off = document.createElement("canvas");
202
+ off.width = 8;
203
+ off.height = 8;
204
+ const ctx2d = off.getContext("2d");
205
+ if (!ctx2d) return "x";
206
+ ctx2d.drawImage(element, 0, 0, 8, 8);
207
+ const data = ctx2d.getImageData(0, 0, 8, 8).data;
208
+ let hash = 0;
209
+ for (let i = 0; i < data.length; i++) hash = (hash * 31 + data[i]) >>> 0;
210
+ return String(hash);
211
+ } catch {
212
+ return "x";
213
+ }
214
+ }
215
+
216
+ // The element's own box still paints when its contents are skipped
217
+ // (content-visibility: hidden) — including a checkbox's check glyph; its
218
+ // text, pseudo boxes, control value, and replaced content (a canvas/video/img's
219
+ // pixels) do not.
220
+ const BOX_CHANNELS = [
221
+ boxChannel,
222
+ opacityChannel,
223
+ fontAxesChannel,
224
+ clipPathChannel,
225
+ controlWidgetChannel,
226
+ ];
227
+ const CONTENT_CHANNELS = [
228
+ textChannel,
229
+ controlValueChannel,
230
+ generatedContentChannel,
231
+ mediaPixelChannel,
232
+ ];
233
+ const ELEMENT_CHANNELS = [...BOX_CHANNELS, ...CONTENT_CHANNELS];
234
+
235
+ // --- Composition-level counter channel ------------------------------------
236
+ // Counter declarations often live on zero-box owners while a pseudo-element elsewhere paints the value, so
237
+ // every box-generating element is an owner, but only declarations naming a painted counter fold in.
238
+ // The gate is by name, not scope: enough for catching frozen timelines. <ol start> and <li value> are missed.
239
+
240
+ // Generated content of one box owner that reaches the screen, including a list-item's ::marker.
241
+ // Callers have already excluded opted-out hosts and hosts whose contents are skipped.
242
+ function markerContent(element, style) {
243
+ if (isHiddenStyle(style) || !LIST_ITEM_DISPLAY.test(style.display)) return "";
244
+ return cssValue(getComputedStyle(element, "::marker").content) || IMPLICIT_MARKER_CONTENT;
245
+ }
246
+
247
+ function paintedContent(element, style, pseudo, opacity) {
248
+ if (opacity < 0.2) return [];
249
+ const boxes = [pseudo.before, pseudo.after].filter((box) => !isHiddenStyle(box));
250
+ return [...boxes.map((box) => cssValue(box.content)), markerContent(element, style)];
251
+ }
252
+
253
+ // The author opt-out applies to elements INSIDE the measured root, never to
254
+ // the root itself or its ancestors: a keepsMoving scope (or the composition
255
+ // root) is explicitly asserted, and an assertion naming an element outranks
256
+ // a layout-audit opt-out — see isVisibleElement.
257
+ function isOptedOut(element, root) {
258
+ for (let current = element; current && current !== root; current = current.parentElement) {
259
+ if (current.matches(IGNORE_SELECTOR)) return true;
260
+ }
261
+ return false;
262
+ }
263
+
264
+ function consumedCounterNames(owners) {
265
+ const names = new Set();
266
+ for (const owner of owners) {
267
+ for (const content of owner.painted) {
268
+ for (const match of content.matchAll(COUNTER_FUNCTION)) names.add(match[1]);
269
+ }
270
+ }
271
+ return names;
272
+ }
273
+
274
+ // `counter-reset: a 10 b 3` → does any named counter get painted?
275
+ function namesConsumedCounter(declaration, consumed) {
276
+ return declaration.split(/\s+/).some((token) => consumed.has(token));
277
+ }
278
+
279
+ function counterState(style, consumed) {
280
+ const fields = [style.counterReset, style.counterIncrement, style.counterSet]
281
+ .map(cssValue)
282
+ .filter((declaration) => declaration && namesConsumedCounter(declaration, consumed));
283
+ return fields.length > 0 ? "c:" + hashFields(fields) : "";
284
+ }
285
+
286
+ function counterParts(root, owners) {
287
+ const consumed = consumedCounterNames(owners);
288
+ if (consumed.size === 0) return [];
289
+ const parts = [];
290
+ function push(style) {
291
+ const state = counterState(style, consumed);
292
+ if (state) parts.push(state);
293
+ }
294
+ for (let ancestor = root.parentElement; ancestor; ancestor = ancestor.parentElement) {
295
+ push(getComputedStyle(ancestor));
296
+ }
297
+ for (const owner of owners) {
298
+ push(owner.style);
299
+ push(owner.pseudo.before);
300
+ push(owner.pseudo.after);
301
+ }
302
+ return parts;
303
+ }
304
+
305
+ // One signature of everything under `root`, root included, that a viewer could see change between seeks.
306
+ // Opted-out elements inside the root may animate off the timeline, so they are neither signed nor counter
307
+ // consumers, but stay counter owners; the root itself is always measured.
308
+ // fallow-ignore-next-line complexity
309
+ function compositionSignature(root, options) {
310
+ if (!root) return "";
311
+ const quantize = !!(options && options.quantize);
312
+ const parts = [];
313
+ const boxOwners = [];
314
+ // Unrendered elements paint nothing and feed no counter(). A display:contents child of a skipping host
315
+ // paints nothing either, which checkVisibility cannot tell from an ordinary one, so the parent's
316
+ // skipsContents verdict decides. A display:contents child of an off-screen `auto` host is missed.
317
+ const unrenderedBelow = new Set();
318
+ const skippedHosts = new Set();
319
+ for (const element of [root, ...root.querySelectorAll("*")]) {
320
+ if (IGNORE_TAGS.has(element.tagName)) continue;
321
+ const style = getComputedStyle(element);
322
+ const parent = element.parentElement;
323
+ const platformDecides = typeof element.checkVisibility === "function";
324
+ const noBox = platformDecides
325
+ ? !element.checkVisibility(RENDERED_BOX_OPTIONS)
326
+ : style.display === "none";
327
+ const boxlessOwner = style.display === "contents" && !skippedHosts.has(parent);
328
+ if (unrenderedBelow.has(parent) || (noBox && !boxlessOwner)) {
329
+ unrenderedBelow.add(element);
330
+ continue;
331
+ }
332
+ // A skipping host paints its box but not its contents. Its counter-* stay in: in Chromium its
333
+ // increment and set still reach a sibling's painted counter(). Off-screen `auto` hosts are missed.
334
+ const skipped = skipsContents(element, style);
335
+ if (skipped) skippedHosts.add(element);
336
+ if (skipped && !platformDecides) unrenderedBelow.add(element);
337
+ const pseudo = skipped
338
+ ? SKIPPED_PSEUDO
339
+ : {
340
+ before: getComputedStyle(element, "::before"),
341
+ after: getComputedStyle(element, "::after"),
342
+ };
343
+ const opacity = opacityChain(element);
344
+ const optedOut = isOptedOut(element, root);
345
+ const paintsContent = !optedOut && !skipped;
346
+ boxOwners.push({
347
+ style,
348
+ pseudo,
349
+ painted: paintsContent ? paintedContent(element, style, pseudo, opacity) : [],
350
+ });
351
+ if (optedOut || !isVisibleElement(element, style, opacity)) continue;
352
+ const ctx = { style, pseudo, opacity, quantize };
353
+ const channels = skipped ? BOX_CHANNELS : ELEMENT_CHANNELS;
354
+ parts.push(channels.map((channel) => channel(element, ctx)).join(","));
355
+ }
356
+ parts.push(...counterParts(root, boxOwners));
357
+ return parts.join("|");
358
+ }
359
+
360
+ window.__hyperframesMotionSignature = {
361
+ compositionRoot,
362
+ isVisibleElement,
363
+ opacityChain,
364
+ round,
365
+ compositionSignature,
366
+ };
367
+
368
+ // Frozen-sweep guard entry point (checkBrowser.ts collectLayoutGeometry).
369
+ // The name predates the textual/media channels and is kept for driver
370
+ // compatibility.
371
+ window.__hyperframesLayoutGeometry = function collectLayoutGeometry() {
372
+ return compositionSignature(compositionRoot(), { quantize: false });
373
+ };
374
+ })();
@@ -6,8 +6,8 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  createContactSheet
9
- } from "./chunk-J4RPT4QW.js";
10
- import "./chunk-5GQAJ43Q.js";
9
+ } from "./chunk-E6RPWJVC.js";
10
+ import "./chunk-MRF4AMKD.js";
11
11
  import {
12
12
  displayPathFromInput,
13
13
  readOptionalString,
@@ -15,45 +15,45 @@ import {
15
15
  } from "./chunk-ZKDMAOFU.js";
16
16
  import {
17
17
  serveStaticProjectHtml
18
- } from "./chunk-JWPSBANO.js";
18
+ } from "./chunk-NOOBRCMC.js";
19
19
  import "./chunk-XUHOIDKG.js";
20
- import "./chunk-ITBEN3QD.js";
20
+ import "./chunk-7G25WGTA.js";
21
21
  import "./chunk-X7MTZ4T2.js";
22
22
  import {
23
23
  openSettledCompositionPage,
24
24
  seekCompositionTimeline
25
- } from "./chunk-32P7FTFC.js";
25
+ } from "./chunk-YQ5MFXWG.js";
26
26
  import "./chunk-5Z63TBTX.js";
27
27
  import "./chunk-262C25DQ.js";
28
- import "./chunk-TIZQC44K.js";
28
+ import "./chunk-OWN3ZIIK.js";
29
29
  import "./chunk-YEIFI443.js";
30
- import "./chunk-MR2LOG32.js";
31
- import "./chunk-ZU54D6MI.js";
30
+ import "./chunk-TXVN43SX.js";
31
+ import "./chunk-BZGWHPRW.js";
32
32
  import "./chunk-WEATBQTR.js";
33
- import "./chunk-5ON5GH3X.js";
34
- import "./chunk-MGFVNTIB.js";
33
+ import "./chunk-CS4IE5G7.js";
34
+ import "./chunk-TSZU5JMC.js";
35
35
  import "./chunk-IHFUKJOR.js";
36
36
  import "./chunk-PFCFR3KZ.js";
37
- import "./chunk-LAQEZHOH.js";
37
+ import "./chunk-H3WFEPV2.js";
38
38
  import "./chunk-XT7X6QCP.js";
39
39
  import "./chunk-4YYJOFKS.js";
40
40
  import "./chunk-HVW7ABXD.js";
41
- import "./chunk-M224DAMG.js";
42
- import "./chunk-XYVFPDNU.js";
43
- import "./chunk-HQGJLZB6.js";
44
- import "./chunk-AWUZ3AUD.js";
41
+ import "./chunk-KPSRL2NB.js";
42
+ import "./chunk-5SDXALUQ.js";
43
+ import "./chunk-36XLW2TP.js";
44
+ import "./chunk-M4RYK5OF.js";
45
45
  import "./chunk-AWDFDFI3.js";
46
46
  import "./chunk-GMECXFAN.js";
47
47
  import "./chunk-RDMAU7AJ.js";
48
48
  import {
49
49
  trackCompareSheet
50
- } from "./chunk-AMSBTN6L.js";
51
- import "./chunk-EE6SV6KW.js";
50
+ } from "./chunk-LYBFDHXD.js";
51
+ import "./chunk-E664L6K3.js";
52
52
  import "./chunk-VWG7OQKU.js";
53
53
  import {
54
54
  c
55
55
  } from "./chunk-ZTZA4UWZ.js";
56
- import "./chunk-CQRF7VU3.js";
56
+ import "./chunk-JRULOVZK.js";
57
57
  import "./chunk-AMKC3AXA.js";
58
58
  import {
59
59
  defineCommand
@@ -64,16 +64,16 @@ import {
64
64
  } from "./chunk-PBN6GBJE.js";
65
65
  import "./chunk-KC5XXX3X.js";
66
66
  import "./chunk-TJSTGSAW.js";
67
- import "./chunk-OF3RKOPU.js";
68
- import "./chunk-B25H4M4V.js";
67
+ import "./chunk-P74PW7KR.js";
68
+ import "./chunk-C4JINRJK.js";
69
69
  import "./chunk-UUDQD62L.js";
70
70
  import "./chunk-DPVXBVLL.js";
71
- import "./chunk-U4TDAJZE.js";
72
- import "./chunk-YLVI7VL5.js";
71
+ import "./chunk-J2S4MY2M.js";
72
+ import "./chunk-S6TH5G6Z.js";
73
73
  import "./chunk-VC76R6W2.js";
74
74
  import "./chunk-OFQWTKPW.js";
75
75
  import "./chunk-TWWSYAKJ.js";
76
- import "./chunk-BAVM2XBR.js";
76
+ import "./chunk-YAFO7V4A.js";
77
77
  import "./chunk-HBBJFK6I.js";
78
78
  import "./chunk-PJ3HDUCY.js";
79
79
  import "./chunk-TQFG7HTI.js";
@@ -81,12 +81,12 @@ import "./chunk-GK4AIFIH.js";
81
81
  import "./chunk-2PSPARWP.js";
82
82
  import {
83
83
  withMeta
84
- } from "./chunk-Q2QNAFQV.js";
84
+ } from "./chunk-BLI5XATY.js";
85
85
  import "./chunk-K4WIOZFP.js";
86
86
  import "./chunk-XUXGIA7H.js";
87
87
  import "./chunk-WERLJGIC.js";
88
88
  import "./chunk-ISN5GRYI.js";
89
- import "./chunk-YLOSZHA2.js";
89
+ import "./chunk-BD3MHTSR.js";
90
90
  import {
91
91
  normalizeErrorMessage
92
92
  } from "./chunk-KNU5COPB.js";
@@ -273,7 +273,7 @@ function cleanupPreparedCompareVariants(variants) {
273
273
  }
274
274
  async function renderCompareVariant(variant, opts) {
275
275
  try {
276
- const { bundleToSingleHtml } = await import("./compiler-C32VXLE2.js");
276
+ const { bundleToSingleHtml } = await import("./compiler-H3QAMMC2.js");
277
277
  const html = await bundleToSingleHtml(variant.projectDir);
278
278
  const server = await serveStaticProjectHtml(variant.projectDir, html);
279
279
  try {
@@ -26,7 +26,7 @@ import {
26
26
  styleElementsFor,
27
27
  validateHyperframeHtmlContract,
28
28
  wrapScopedCompositionScript
29
- } from "./chunk-U4TDAJZE.js";
29
+ } from "./chunk-J2S4MY2M.js";
30
30
  import {
31
31
  AUDIO_GROUP_RENDER_ID_ATTR,
32
32
  MEDIA_RENDER_ID_ATTR,
@@ -47,10 +47,10 @@ import {
47
47
  shouldClampMediaDuration,
48
48
  shouldClampResolvedMediaDuration,
49
49
  stripEmbeddedRuntimeScripts
50
- } from "./chunk-YLVI7VL5.js";
50
+ } from "./chunk-S6TH5G6Z.js";
51
51
  import "./chunk-VC76R6W2.js";
52
52
  import "./chunk-OFQWTKPW.js";
53
- import "./chunk-BAVM2XBR.js";
53
+ import "./chunk-YAFO7V4A.js";
54
54
  import "./chunk-HBBJFK6I.js";
55
55
  import "./chunk-PJ3HDUCY.js";
56
56
  import {
@@ -7,7 +7,7 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  downloadRender,
9
9
  runAssetImport
10
- } from "./chunk-QMAXDSCH.js";
10
+ } from "./chunk-Q7U7QRC7.js";
11
11
  import {
12
12
  FigmaClientError,
13
13
  createFigmaClient,
@@ -16,7 +16,7 @@ import {
16
16
  readBindings,
17
17
  resolveBindings,
18
18
  withFigmaErrors
19
- } from "./chunk-BQYGGX3B.js";
19
+ } from "./chunk-PRETPA7Z.js";
20
20
  import "./chunk-IHFUKJOR.js";
21
21
  import "./chunk-ZTZA4UWZ.js";
22
22
  import {
@@ -159,7 +159,7 @@ var component_default = defineCommand({
159
159
  `${result.unresolved.length} binding(s) reference tokens not yet imported \u2014 colors baked as literals (flagged data-figma-unresolved). Run \`hyperframes figma tokens\` on the source/library file, then re-import to link them.`
160
160
  );
161
161
  }
162
- const { trackFigmaImport } = await import("./telemetry-NLEEMXO2.js");
162
+ const { trackFigmaImport } = await import("./telemetry-XNDAM6JU.js");
163
163
  trackFigmaImport({
164
164
  phase: "component",
165
165
  unresolvedBindings: result.unresolved.length,
@@ -6,18 +6,18 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  resolveProject
9
- } from "./chunk-HPEHQUJX.js";
9
+ } from "./chunk-A6GVXZZ3.js";
10
10
  import "./chunk-IHFUKJOR.js";
11
11
  import {
12
12
  ensureDOMParser
13
13
  } from "./chunk-PFCFR3KZ.js";
14
- import "./chunk-AMSBTN6L.js";
15
- import "./chunk-EE6SV6KW.js";
14
+ import "./chunk-LYBFDHXD.js";
15
+ import "./chunk-E664L6K3.js";
16
16
  import "./chunk-VWG7OQKU.js";
17
17
  import {
18
18
  c
19
19
  } from "./chunk-ZTZA4UWZ.js";
20
- import "./chunk-CQRF7VU3.js";
20
+ import "./chunk-JRULOVZK.js";
21
21
  import "./chunk-AMKC3AXA.js";
22
22
  import {
23
23
  defineCommand
@@ -26,18 +26,18 @@ import "./chunk-54HJ63Q2.js";
26
26
  import "./chunk-PBN6GBJE.js";
27
27
  import {
28
28
  resolveReferencedStart
29
- } from "./chunk-OF3RKOPU.js";
30
- import "./chunk-B25H4M4V.js";
29
+ } from "./chunk-P74PW7KR.js";
30
+ import "./chunk-C4JINRJK.js";
31
31
  import "./chunk-UUDQD62L.js";
32
32
  import "./chunk-DPVXBVLL.js";
33
- import "./chunk-U4TDAJZE.js";
34
- import "./chunk-YLVI7VL5.js";
33
+ import "./chunk-J2S4MY2M.js";
34
+ import "./chunk-S6TH5G6Z.js";
35
35
  import "./chunk-VC76R6W2.js";
36
36
  import "./chunk-OFQWTKPW.js";
37
37
  import "./chunk-TWWSYAKJ.js";
38
38
  import {
39
39
  readProjectFile
40
- } from "./chunk-BAVM2XBR.js";
40
+ } from "./chunk-YAFO7V4A.js";
41
41
  import "./chunk-HBBJFK6I.js";
42
42
  import "./chunk-PJ3HDUCY.js";
43
43
  import "./chunk-TQFG7HTI.js";
@@ -45,12 +45,12 @@ import "./chunk-GK4AIFIH.js";
45
45
  import "./chunk-2PSPARWP.js";
46
46
  import {
47
47
  withMeta
48
- } from "./chunk-Q2QNAFQV.js";
48
+ } from "./chunk-BLI5XATY.js";
49
49
  import "./chunk-K4WIOZFP.js";
50
50
  import "./chunk-XUXGIA7H.js";
51
51
  import "./chunk-WERLJGIC.js";
52
52
  import "./chunk-ISN5GRYI.js";
53
- import "./chunk-YLOSZHA2.js";
53
+ import "./chunk-BD3MHTSR.js";
54
54
  import "./chunk-KNU5COPB.js";
55
55
  import "./chunk-3GXQPCJC.js";
56
56
  import "./chunk-RQVDTPGD.js";
@@ -10,8 +10,8 @@ import {
10
10
  createScrollContactSheet,
11
11
  createSnapshotContactSheet,
12
12
  createSvgContactSheet
13
- } from "./chunk-J4RPT4QW.js";
14
- import "./chunk-5GQAJ43Q.js";
13
+ } from "./chunk-E6RPWJVC.js";
14
+ import "./chunk-MRF4AMKD.js";
15
15
  import "./chunk-M2WBOQ2Q.js";
16
16
  export {
17
17
  createAssetContactSheet,
@@ -26,12 +26,12 @@ import {
26
26
  import "./chunk-OFQWTKPW.js";
27
27
  import {
28
28
  withMeta
29
- } from "./chunk-Q2QNAFQV.js";
29
+ } from "./chunk-BLI5XATY.js";
30
30
  import "./chunk-K4WIOZFP.js";
31
31
  import "./chunk-XUXGIA7H.js";
32
32
  import "./chunk-WERLJGIC.js";
33
33
  import "./chunk-ISN5GRYI.js";
34
- import "./chunk-YLOSZHA2.js";
34
+ import "./chunk-BD3MHTSR.js";
35
35
  import "./chunk-KNU5COPB.js";
36
36
  import "./chunk-M2WBOQ2Q.js";
37
37
 
@@ -9,7 +9,7 @@ import {
9
9
  locateSamTemplate,
10
10
  repoRoot,
11
11
  samDeploy
12
- } from "./chunk-NH75EKOP.js";
12
+ } from "./chunk-3Q7HXIXZ.js";
13
13
  import {
14
14
  DEFAULT_STACK_NAME,
15
15
  writeStackOutputs
@@ -7,7 +7,7 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  repoRoot,
9
9
  samDelete
10
- } from "./chunk-NH75EKOP.js";
10
+ } from "./chunk-3Q7HXIXZ.js";
11
11
  import {
12
12
  deleteStackOutputs,
13
13
  requireStack
@@ -77,7 +77,7 @@ import {
77
77
  serializeVfxChain,
78
78
  toFps,
79
79
  validateVariables
80
- } from "./chunk-B25H4M4V.js";
80
+ } from "./chunk-C4JINRJK.js";
81
81
  import {
82
82
  CANVAS_DIMENSIONS,
83
83
  COMPOSITION_VARIABLE_TYPES,
@@ -165,7 +165,7 @@ import {
165
165
  sourceTimeAt,
166
166
  stripEmbeddedRuntimeScripts,
167
167
  timeAtSourceTime
168
- } from "./chunk-YLVI7VL5.js";
168
+ } from "./chunk-S6TH5G6Z.js";
169
169
  import "./chunk-VC76R6W2.js";
170
170
  import {
171
171
  ProjectRootMissingError,
@@ -11,7 +11,7 @@ import {
11
11
  lintMediaUrls,
12
12
  lintProject,
13
13
  shouldBlockRender
14
- } from "./chunk-BAVM2XBR.js";
14
+ } from "./chunk-YAFO7V4A.js";
15
15
  import "./chunk-HBBJFK6I.js";
16
16
  import "./chunk-PJ3HDUCY.js";
17
17
  import "./chunk-TQFG7HTI.js";