hyperframes 0.8.142 → 0.8.144

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 (222) hide show
  1. package/dist/{add-YS2RCWEK.js → add-CWRTVGDB.js} +18 -17
  2. package/dist/{animatedGifPrep-SAMCDT7T.js → animatedGifPrep-JTOHIWI4.js} +15 -14
  3. package/dist/{asset-BLWC2NWB.js → asset-KU2Z4UFM.js} +4 -4
  4. package/dist/{assetCataloger-FVNBBRP3.js → assetCataloger-3CS2P7PA.js} +8 -7
  5. package/dist/{auth-DRZB7OAC.js → auth-IDSOIQWG.js} +1 -1
  6. package/dist/{autoUpdate-I5I3BOJK.js → autoUpdate-373B4BA2.js} +2 -2
  7. package/dist/{backgroundChecks-VR2QHGNY.js → backgroundChecks-53Q3NAMG.js} +3 -3
  8. package/dist/backgroundChecksWorker.js +3 -3
  9. package/dist/{batchRender-4YUHQI6X.js → batchRender-UKZA6BME.js} +11 -10
  10. package/dist/{beats-7OT7ALV3.js → beats-N5JGEOFR.js} +33 -28
  11. package/dist/{benchmark-Q2XQCRTR.js → benchmark-CUN3LN4V.js} +15 -14
  12. package/dist/{browser-7VAWQQZC.js → browser-NCZT5AP6.js} +40 -56
  13. package/dist/{bundleWithLocalizedFonts-DDMLLL2R.js → bundleWithLocalizedFonts-FWC7PE2D.js} +2 -2
  14. package/dist/{capture-HEJS6M5A.js → capture-QBLG3VJR.js} +26 -25
  15. package/dist/{capture-U7ABPKS5.js → capture-YLS32UHT.js} +2 -2
  16. package/dist/{catalog-DVJ3XPDN.js → catalog-HIWNAFHW.js} +19 -18
  17. package/dist/{catch-up-DF6AVSN2.js → catch-up-HGS7KIAC.js} +5 -5
  18. package/dist/{check-KXORRWAE.js → check-FH6UYYLO.js} +78 -66
  19. package/dist/{checkBrowser-J7HZJTRH.js → checkBrowser-RNWNOMCZ.js} +93 -41
  20. package/dist/{chunk-R2JEKLDZ.js → chunk-2DA2BBNY.js} +3 -3
  21. package/dist/{chunk-TQFG7HTI.js → chunk-3RM2ETQT.js} +0 -168
  22. package/dist/{chunk-YFT3BL7N.js → chunk-3VYNNWVA.js} +30 -12
  23. package/dist/{chunk-7FCDA4RH.js → chunk-3XTEXWNN.js} +8 -5
  24. package/dist/{chunk-PFCFR3KZ.js → chunk-442JNXRM.js} +1 -1
  25. package/dist/{chunk-BPZVDBHY.js → chunk-4LAR447G.js} +1 -1
  26. package/dist/{chunk-AM5L5YIA.js → chunk-4OA4LDTU.js} +1 -1
  27. package/dist/{chunk-DZEVA7DI.js → chunk-4OC7MQNB.js} +2 -2
  28. package/dist/{chunk-75JJVANE.js → chunk-54QISXOC.js} +3 -3
  29. package/dist/{chunk-FZK35GT4.js → chunk-5HJ343GH.js} +1 -1
  30. package/dist/{chunk-IDX52YJN.js → chunk-5VMR4WBS.js} +458 -159
  31. package/dist/{chunk-OSUKETIH.js → chunk-5WADG7PR.js} +1 -1
  32. package/dist/{chunk-JYYOAKHS.js → chunk-6IIGT7BX.js} +1 -1
  33. package/dist/{chunk-6UYZB4TY.js → chunk-7RAYSCYT.js} +4 -4
  34. package/dist/{chunk-WTMUCJ6Z.js → chunk-7SDCIWHQ.js} +11 -2
  35. package/dist/{chunk-LAOCA3MQ.js → chunk-A4Q7W4LV.js} +13 -8
  36. package/dist/{chunk-B6SMSALD.js → chunk-A53CBD24.js} +18 -12
  37. package/dist/{chunk-4PFZPP2N.js → chunk-A6S35NYA.js} +54 -16
  38. package/dist/{chunk-JOTLPC6S.js → chunk-AUBOF2PN.js} +1 -1
  39. package/dist/{chunk-WCJGTLPF.js → chunk-BHVFTYSI.js} +6 -3
  40. package/dist/chunk-BSQ7XANM.js +210 -0
  41. package/dist/{chunk-LCSMOLGX.js → chunk-BYSBRF24.js} +69 -8
  42. package/dist/{chunk-U7E736AJ.js → chunk-DDIVWXN7.js} +32 -14
  43. package/dist/{chunk-KOEWEFHK.js → chunk-DIRJ322I.js} +10 -5
  44. package/dist/{chunk-HMUF7FEO.js → chunk-EX6C672Y.js} +2 -2
  45. package/dist/{chunk-QGRFOOLE.js → chunk-F2SMS24Q.js} +288 -85
  46. package/dist/{chunk-5Z63TBTX.js → chunk-FH7WODJH.js} +1 -1
  47. package/dist/{chunk-XTLBLWOV.js → chunk-GEWKFRFI.js} +1 -1
  48. package/dist/{chunk-RVCWIIZ7.js → chunk-GV5R5B7Q.js} +1 -1
  49. package/dist/{chunk-TY6XOHEM.js → chunk-GZM2EFOE.js} +3 -3
  50. package/dist/chunk-GZVP4TWN.js +76 -0
  51. package/dist/{chunk-QXPCARFE.js → chunk-I5KY7EZP.js} +1 -1
  52. package/dist/{chunk-IW2CKH6A.js → chunk-IEIJRMLZ.js} +94 -59
  53. package/dist/chunk-IR35BCLK.js +13 -0
  54. package/dist/{chunk-JFKL3WAE.js → chunk-IWFLMU2N.js} +104 -19
  55. package/dist/{chunk-EFDXGAAD.js → chunk-JEHFZQYT.js} +1 -1
  56. package/dist/{chunk-IHFUKJOR.js → chunk-K2FLNJVB.js} +8 -2
  57. package/dist/{chunk-KDPYVTEU.js → chunk-KBB4RG6F.js} +6 -1
  58. package/dist/{chunk-LJAU4TPS.js → chunk-KFKZ3ISO.js} +2 -2
  59. package/dist/{sherpa-ZYTNFHD5.js → chunk-L5TUCXWR.js} +11 -44
  60. package/dist/{chunk-KYN364DU.js → chunk-LC3RQURJ.js} +7 -9
  61. package/dist/{chunk-IMY4QQTQ.js → chunk-LFX2HEYP.js} +8 -8
  62. package/dist/{chunk-PXSM4HPB.js → chunk-MAYCCGMQ.js} +12 -3
  63. package/dist/{chunk-OZUQF4NB.js → chunk-MQZVBHEY.js} +123 -8
  64. package/dist/{chunk-FWRNQOLT.js → chunk-MXNDKDFT.js} +3 -3
  65. package/dist/{chunk-A4KQZXZI.js → chunk-NE55C6S5.js} +4 -2
  66. package/dist/{chunk-GYE63V4P.js → chunk-NOPBBSLA.js} +24 -19
  67. package/dist/{chunk-H2X52H2N.js → chunk-NV4RXIQ7.js} +3 -3
  68. package/dist/{chunk-WGVOWWVK.js → chunk-OIDN7G42.js} +3 -3
  69. package/dist/{chunk-DPHJKWP5.js → chunk-OUSLVRO4.js} +107 -108
  70. package/dist/{chunk-JLKMWY2T.js → chunk-P6WH6QTV.js} +8 -5
  71. package/dist/{chunk-7M4KAPAA.js → chunk-PUGIRFPX.js} +2 -2
  72. package/dist/{chunk-6RAD4BCC.js → chunk-QATWIE4K.js} +2 -2
  73. package/dist/{chunk-D2KNWIQ6.js → chunk-QFSCCQIR.js} +1 -1
  74. package/dist/{chunk-XGMNQQTJ.js → chunk-RG3QWWIE.js} +1 -1
  75. package/dist/{chunk-MVTUV4TP.js → chunk-RI53TS2Y.js} +14 -6
  76. package/dist/{chunk-LQASVU3I.js → chunk-RVFEDAUV.js} +12 -4
  77. package/dist/{chunk-GK4AIFIH.js → chunk-SDYDNHEE.js} +34 -3
  78. package/dist/{chunk-WSGY5CDQ.js → chunk-SLCFKB3Y.js} +14 -10
  79. package/dist/{chunk-2NCHQUPX.js → chunk-SQLK7SJL.js} +1 -1
  80. package/dist/{chunk-PMRBLBUP.js → chunk-T42U2W2R.js} +14 -2
  81. package/dist/chunk-UPFUC4DB.js +136 -0
  82. package/dist/{chunk-IXCTG2WY.js → chunk-VYSUZEJG.js} +5 -5
  83. package/dist/chunk-WJB7WI4J.js +3753 -0
  84. package/dist/{chunk-YEIFI443.js → chunk-WPNE5NEP.js} +1 -1
  85. package/dist/{chunk-YHRZQJXH.js → chunk-XGFHYAYN.js} +265 -68
  86. package/dist/{chunk-LBKDQKWV.js → chunk-XU5GGV6R.js} +1 -1
  87. package/dist/{chunk-LTGGTEMA.js → chunk-Y6UPYWJS.js} +2 -2
  88. package/dist/{chunk-OKCR3JTO.js → chunk-YJXHMIZA.js} +13 -10
  89. package/dist/{chunk-JU6Y5TTZ.js → chunk-YUAXFWSQ.js} +3 -3
  90. package/dist/{chunk-TVCRUG2S.js → chunk-ZEUONDQG.js} +1 -1
  91. package/dist/{chunk-THXFSPLV.js → chunk-ZIRIDSDB.js} +1 -1
  92. package/dist/{chunk-6UM3R7PP.js → chunk-ZOA2SC4P.js} +129 -60
  93. package/dist/{clean-KTHTV5G5.js → clean-KPX27IKJ.js} +27 -26
  94. package/dist/cli.js +70 -160
  95. package/dist/{cloud-ARSZWALC.js → cloud-P7DAOISN.js} +4 -4
  96. package/dist/{cloudrun-NM7RXOCL.js → cloudrun-XM56TBOH.js} +13 -12
  97. package/dist/commands/contrast-audit.browser.js +60 -4
  98. package/dist/commands/layout-audit.browser.js +68 -0
  99. package/dist/{compare-CY4UO3RW.js → compare-F6YAFZZM.js} +37 -36
  100. package/dist/{compiler-VTH2D3ID.js → compiler-JZ4GNFMG.js} +16 -10
  101. package/dist/{component-FRUIAXIR.js → component-3CFOGIQA.js} +5 -5
  102. package/dist/{compositions-CUSY6ZYY.js → compositions-CPCMWF24.js} +38 -33
  103. package/dist/{delete-KT3VHP4L.js → delete-GYVKOKB6.js} +4 -4
  104. package/dist/{deterministicFonts-F6WIVL2W.js → deterministicFonts-U2BIMGPG.js} +3 -3
  105. package/dist/{dist-7SZU7MA7.js → dist-KDJTFJHA.js} +7 -6
  106. package/dist/{dist-2GC6XKRQ.js → dist-YPWQDWJ4.js} +42 -40
  107. package/dist/{doctor-4ROTBL5U.js → doctor-GWI3B6JT.js} +21 -20
  108. package/dist/{dom-IROKGVJI.js → dom-37K6YOH4.js} +2 -2
  109. package/dist/{events-QJDVMKSR.js → events-BRRUDPPT.js} +3 -3
  110. package/dist/{events-Q5PXT5UC.js → events-V2QFN4YM.js} +2 -2
  111. package/dist/{feedback-PQ7TWESA.js → feedback-CXMD7FWL.js} +14 -13
  112. package/dist/{ffmpeg-QIUFEFTY.js → ffmpeg-T5SH2EFJ.js} +3 -2
  113. package/dist/{figma-JN5DDBDS.js → figma-YABDWD66.js} +3 -3
  114. package/dist/fontLocalizeCli.js +18 -17
  115. package/dist/{get-KT6OTERO.js → get-L2SOQKHX.js} +4 -4
  116. package/dist/{gpuPolicy-LCBWVGEH.js → gpuPolicy-NBJNWHYS.js} +19 -16
  117. package/dist/{grade-compare-VS3RP73G.js → grade-compare-STXQPKYQ.js} +39 -38
  118. package/dist/{help-AD6FIZIO.js → help-4H6BSFLB.js} +2 -2
  119. package/dist/{history-ZRWYRY7R.js → history-4IQOLTHJ.js} +6 -6
  120. package/dist/hyperframe-runtime.js +56 -56
  121. package/dist/hyperframe.manifest.json +1 -1
  122. package/dist/hyperframe.runtime.iife.js +56 -56
  123. package/dist/hyperframes-player.global.js +3 -3
  124. package/dist/hyperframes-slideshow.global.js +23 -23
  125. package/dist/{info-WBBQA2AX.js → info-2CZOTNBC.js} +17 -16
  126. package/dist/{init-A2XBDFGF.js → init-6BXK42VS.js} +46 -46
  127. package/dist/{inspect-CLTZHA5O.js → inspect-VKU47TBH.js} +38 -37
  128. package/dist/{installer-WQDRVXH4.js → installer-T2BSSUDY.js} +11 -10
  129. package/dist/{keyframes-3FYOK6H6.js → keyframes-IEYVHRPI.js} +10 -10
  130. package/dist/{lambda-Y2PA2BGS.js → lambda-TIKG25CK.js} +12 -11
  131. package/dist/{layout-4KP5O7IJ.js → layout-XOI4PT7A.js} +38 -37
  132. package/dist/{lint-V4GRFHOJ.js → lint-DWCMVIX5.js} +14 -13
  133. package/dist/{lintProject-RG2KGAXB.js → lintProject-UBZ3TDHU.js} +7 -6
  134. package/dist/{list-OQ4VED6E.js → list-7GXKG5QM.js} +5 -5
  135. package/dist/{login-W47NKN5S.js → login-BQ5L2UHX.js} +4 -4
  136. package/dist/{manager-CT3D67CG.js → manager-BPSR6D3V.js} +2 -2
  137. package/dist/{manager-524RPYO7.js → manager-RFZNG5YT.js} +2 -2
  138. package/dist/{manager-DXB7JDHU.js → manager-YKMHR6LN.js} +9 -6
  139. package/dist/{media-treatment-HJYL3EME.js → media-treatment-IFB7OSZ3.js} +24 -22
  140. package/dist/{models-DYBAD2GQ.js → models-TY4PJ545.js} +68 -27
  141. package/dist/{motionShot-7NE2YBB3.js → motionShot-WXMFHICW.js} +33 -33
  142. package/dist/{normalize-IGLHCWTF.js → normalize-U3SL5VG3.js} +19 -8
  143. package/dist/{normalize-audio-INKCLMS2.js → normalize-audio-RFD776HQ.js} +10 -6
  144. package/dist/{open-TYC5THVY.js → open-7IXXGO2E.js} +5 -5
  145. package/dist/parakeetRunner-IHLYYMTZ.js +67 -0
  146. package/dist/{pipeline-EVKEPQEW.js → pipeline-TXKPLL2U.js} +20 -18
  147. package/dist/{play-QMZEM6X3.js → play-J2KP64UK.js} +31 -29
  148. package/dist/{preflight-Y5DN5D37.js → preflight-B4AFK3RG.js} +4 -4
  149. package/dist/{present-Y7IK3C4W.js → present-MHHNRVRA.js} +26 -25
  150. package/dist/{preview-5OQRYE6A.js → preview-CONUOFFQ.js} +28 -27
  151. package/dist/{producer-Q6G6JU7B.js → producer-ZI46K7HH.js} +1 -1
  152. package/dist/{projectConfig-RJN3DKDB.js → projectConfig-FGGVG5MV.js} +13 -12
  153. package/dist/{publication-QCPGGN3U.js → publication-TXFBMW6B.js} +8 -7
  154. package/dist/{publish-VZLFIGYY.js → publish-YZSPBFRD.js} +18 -17
  155. package/dist/{remove-background-TKOEHBA5.js → remove-background-4ATVLHLG.js} +22 -20
  156. package/dist/{render-KIIIF6PS.js → render-6FBYLYGJ.js} +20 -19
  157. package/dist/{render-XTXE5CRU.js → render-GFW5BPES.js} +13 -12
  158. package/dist/{render-X3NFNVEQ.js → render-MH4IUPWB.js} +41 -40
  159. package/dist/{render-batch-M55YZLZ5.js → render-batch-XUCZ2PUJ.js} +13 -12
  160. package/dist/{renderCancellation-X5BEHAZU.js → renderCancellation-XF7M7IUP.js} +18 -16
  161. package/dist/renderSetupWorker.js +37 -48
  162. package/dist/{resolver-GAMXRA42.js → resolver-W7AYCQGS.js} +10 -9
  163. package/dist/sherpa-LDUB5NLY.js +75 -0
  164. package/dist/sherpaWorker.js +2 -1
  165. package/dist/skills/hyperframes-cli/references/doctor-browser.md +24 -1
  166. package/dist/skills/hyperframes-cli/references/lint-validate-inspect.md +1 -1
  167. package/dist/skills/media-use/scripts/lib/cache.mjs +28 -14
  168. package/dist/skills/media-use/scripts/lib/cache.test.mjs +110 -0
  169. package/dist/skills/media-use/scripts/lib/duck.mjs +2 -1
  170. package/dist/skills/media-use/scripts/lib/duck.test.mjs +87 -0
  171. package/dist/skills/media-use/scripts/lib/probe.mjs +6 -1
  172. package/dist/skills/media-use/scripts/lib/probe.test.mjs +73 -0
  173. package/dist/skills/media-use/scripts/lib/words.mjs +1 -1
  174. package/dist/{skills-CZHVAD3J.js → skills-VENERS5X.js} +7 -7
  175. package/dist/{skillsUpdateCheck-6WLLX53A.js → skillsUpdateCheck-UXFYTACG.js} +3 -3
  176. package/dist/{slideshow-EJ4IMY6P.js → slideshow-4OJEPWNZ.js} +1 -1
  177. package/dist/{snapshot-K7BTJPYQ.js → snapshot-C6T74HTI.js} +44 -40
  178. package/dist/{src-YUW26JU5.js → src-FS5RSVEI.js} +17 -16
  179. package/dist/{src-3I3RH3V5.js → src-VUJ2FUFK.js} +18 -13
  180. package/dist/{staticProjectServer-IKCSGN2B.js → staticProjectServer-V2RZ4DWD.js} +23 -22
  181. package/dist/studio/assets/hyperframes-player-Bw_jIaSX.js +473 -0
  182. package/dist/studio/assets/{index-B-wffzRH.js → index-BVM9NuWl.js} +153 -153
  183. package/dist/studio/assets/{index-D3Vij9t1.js → index-Cj7W_c7p.js} +1 -1
  184. package/dist/studio/assets/{index-D5q2_7Gw.js → index-DyH9dT7b.js} +1 -1
  185. package/dist/studio/{chunk-TFLU2MGI.js → chunk-3GHTHPZD.js} +8 -1
  186. package/dist/studio/chunk-3GHTHPZD.js.map +1 -0
  187. package/dist/studio/{chunk-H2DUOXTF.js → chunk-G3EDKRZH.js} +3 -3
  188. package/dist/studio/{chunk-UYWON5AX.js → chunk-PEAKCOUW.js} +7 -3
  189. package/dist/studio/chunk-PEAKCOUW.js.map +1 -0
  190. package/dist/studio/{chunk-LOVBLSMR.js → chunk-Y2OHHNM2.js} +35 -19
  191. package/dist/studio/chunk-Y2OHHNM2.js.map +1 -0
  192. package/dist/studio/{domEditingLayers-KBTPQKGA.js → domEditingLayers-PYST4G45.js} +3 -3
  193. package/dist/studio/index.html +1 -1
  194. package/dist/studio/index.js +261 -230
  195. package/dist/studio/index.js.map +1 -1
  196. package/dist/studio/player.js +3 -3
  197. package/dist/studio/ui.d.ts +4 -5
  198. package/dist/studio/ui.js +1 -1
  199. package/dist/{studio-api-SQ3NXFSM.js → studio-api-TQE7KWKO.js} +22 -17
  200. package/dist/{studioServer-VVEO7XCH.js → studioServer-CYKSQK7L.js} +81 -64
  201. package/dist/{synthesize-77PTU6C5.js → synthesize-UCI4X5O7.js} +6 -6
  202. package/dist/{telemetry-FQDKR5XA.js → telemetry-A23PPRD6.js} +3 -3
  203. package/dist/{timeline-N6ZASFNE.js → timeline-T3QSGT3A.js} +143 -99
  204. package/dist/{tokens-2OIIBBCW.js → tokens-RT5HWA6C.js} +4 -4
  205. package/dist/{transcribe-7YTUCXDX.js → transcribe-FOLNOC5G.js} +116 -52
  206. package/dist/{transcribe-4F6MK73N.js → transcribe-HCF64LQK.js} +23 -20
  207. package/dist/{tts-TOHSPWEG.js → tts-B6AHFQEO.js} +6 -6
  208. package/dist/{updateCheck-AZ2COZFR.js → updateCheck-27PIP3AA.js} +2 -2
  209. package/dist/{upgrade-QAJEYB4X.js → upgrade-TVGXBUPJ.js} +2 -2
  210. package/dist/{urlDownloader-LSMFEO3R.js → urlDownloader-KBLBJKRL.js} +14 -13
  211. package/dist/{validate-GW5MDL36.js → validate-ZMYGK4QI.js} +40 -27
  212. package/dist/{video-PRNOKUK3.js → video-AVE5GIGM.js} +15 -14
  213. package/package.json +1 -1
  214. package/dist/chunk-J4UX3RS3.js +0 -3717
  215. package/dist/studio/assets/hyperframes-player-sAsRuV73.js +0 -473
  216. package/dist/studio/chunk-LOVBLSMR.js.map +0 -1
  217. package/dist/studio/chunk-TFLU2MGI.js.map +0 -1
  218. package/dist/studio/chunk-UYWON5AX.js.map +0 -1
  219. package/dist/{chunk-HBBJFK6I.js → chunk-APDLWWFG.js} +0 -0
  220. package/dist/{screenshotCapture-TEUIWXWN.js → screenshotCapture-3JXXUZND.js} +3 -3
  221. /package/dist/studio/{chunk-H2DUOXTF.js.map → chunk-G3EDKRZH.js.map} +0 -0
  222. /package/dist/studio/{domEditingLayers-KBTPQKGA.js.map → domEditingLayers-PYST4G45.js.map} +0 -0
package/dist/cli.js CHANGED
@@ -9,13 +9,19 @@ import {
9
9
  registerRunningCli
10
10
  } from "./chunk-NXMYHJAL.js";
11
11
  import {
12
- isTextFile
13
- } from "./chunk-K4WKGXRC.js";
12
+ resolveExtraPositionals
13
+ } from "./chunk-GZVP4TWN.js";
14
+ import "./chunk-K4WKGXRC.js";
15
+ import {
16
+ assertKnownFlags,
17
+ guardSwallowedFlagValues
18
+ } from "./chunk-UPFUC4DB.js";
14
19
  import {
15
20
  isRenderSucceeded
16
21
  } from "./chunk-L3YOGIPG.js";
17
22
  import {
18
23
  defineCommand,
24
+ parseArgs,
19
25
  runCommand
20
26
  } from "./chunk-S3S4TGEH.js";
21
27
  import {
@@ -34,7 +40,8 @@ import {
34
40
  } from "./chunk-ISN5GRYI.js";
35
41
  import {
36
42
  VERSION
37
- } from "./chunk-DZEVA7DI.js";
43
+ } from "./chunk-4OC7MQNB.js";
44
+ import "./chunk-ZTZA4UWZ.js";
38
45
  import "./chunk-M2WBOQ2Q.js";
39
46
 
40
47
  // src/cli.ts
@@ -42,110 +49,6 @@ import { dirname, join, resolve } from "path";
42
49
  import { fileURLToPath } from "url";
43
50
  import { existsSync } from "fs";
44
51
 
45
- // src/utils/reject-extra-positionals.ts
46
- var ACCEPTS_EXTRA_POSITIONALS = /* @__PURE__ */ new Set([
47
- "compare",
48
- "figma asset",
49
- "skills update",
50
- "timeline set"
51
- ]);
52
- var JOINS_EXTRA_POSITIONALS = /* @__PURE__ */ new Set(["catalog", "tts"]);
53
- var EXTRA_POSITIONAL_HINTS = {
54
- add: "Run add once per item, or pass a single tag to install every item tagged with it."
55
- };
56
- function wantsJson(value) {
57
- return value === true || typeof value === "string" && value !== "false" && value !== "0";
58
- }
59
- function declaredArgs(cmd) {
60
- const raw = cmd.args;
61
- return raw && typeof raw === "object" ? raw : {};
62
- }
63
- function usageLine(path, args) {
64
- const parts = ["hyperframes", path];
65
- let hasOptions = false;
66
- for (const [name, def] of Object.entries(args)) {
67
- if (def.type !== "positional") {
68
- hasOptions = true;
69
- continue;
70
- }
71
- const optional = def.required === false || def.default !== void 0;
72
- parts.push(optional ? `[${name.toUpperCase()}]` : `<${name.toUpperCase()}>`);
73
- }
74
- if (hasOptions) parts.push("[OPTIONS]");
75
- return parts.join(" ");
76
- }
77
- function resolveExtraPositionals(cmd, path, parsed) {
78
- if (ACCEPTS_EXTRA_POSITIONALS.has(path)) return;
79
- const args = declaredArgs(cmd);
80
- const positionals = Object.entries(args).filter(([, def]) => def.type === "positional");
81
- const given = (Array.isArray(parsed?._) ? parsed._ : []).map(String);
82
- const extra = given.slice(positionals.length);
83
- if (extra.length === 0) return;
84
- const last = positionals.at(-1)?.[0];
85
- const words = given.slice(positionals.length - 1);
86
- const ttsFile = path === "tts" && isTextFile(words[0]);
87
- if (parsed && last && JOINS_EXTRA_POSITIONALS.has(path) && !ttsFile) {
88
- parsed[last] = words.join(" ");
89
- return;
90
- }
91
- const plural = extra.length === 1 ? "" : "s";
92
- const message = `Unexpected extra argument${plural} for hyperframes ${path}: ${extra.join(", ")}
93
- Usage: ${usageLine(path, args)}` + (EXTRA_POSITIONAL_HINTS[path] ? `
94
- ${EXTRA_POSITIONAL_HINTS[path]}` : "");
95
- if (wantsJson(parsed?.json)) console.log(JSON.stringify({ ok: false, error: message }));
96
- else console.error(message);
97
- throw new CliUsageError(
98
- `${extra.length} unexpected extra argument${plural} for hyperframes ${path}`,
99
- {
100
- presented: true
101
- }
102
- );
103
- }
104
-
105
- // src/utils/reject-unknown-flags.ts
106
- var ALWAYS_KNOWN = /* @__PURE__ */ new Set(["help", "h", "version", "v", "json"]);
107
- function nameVariants(name) {
108
- const kebab = name.replace(/[A-Z]/g, (c) => "-" + c.toLowerCase());
109
- const camel = name.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
110
- return [name, kebab, camel];
111
- }
112
- function knownFlags(args) {
113
- const known = new Set(ALWAYS_KNOWN);
114
- for (const [name, def] of Object.entries(args ?? {})) {
115
- for (const v of nameVariants(name)) known.add(v);
116
- const alias = def?.alias;
117
- if (typeof alias === "string") known.add(alias);
118
- else if (Array.isArray(alias)) for (const a of alias) known.add(a);
119
- }
120
- return known;
121
- }
122
- function longFlagName(tok) {
123
- const name = tok.slice(2).split("=")[0] ?? "";
124
- return name.startsWith("no-") ? name.slice(3) : name;
125
- }
126
- function unknownFlagIn(tok, known) {
127
- if (tok === "-" || !tok.startsWith("-")) return null;
128
- if (tok.startsWith("--")) {
129
- const name = longFlagName(tok);
130
- return name && !known.has(name) ? `--${name}` : null;
131
- }
132
- for (const ch of tok.slice(1).split("=")[0] ?? "") {
133
- if (!known.has(ch)) return `-${ch}`;
134
- }
135
- return null;
136
- }
137
- function assertKnownFlags(cmd, rawArgs) {
138
- if (!Array.isArray(rawArgs)) return;
139
- const rawDef = cmd.args;
140
- const args = rawDef && typeof rawDef === "object" ? rawDef : void 0;
141
- const known = knownFlags(args);
142
- for (const tok of rawArgs) {
143
- if (tok === "--") break;
144
- const bad = unknownFlagIn(tok, known);
145
- if (bad) throw new Error(`Unknown flag: ${bad}`);
146
- }
147
- }
148
-
149
52
  // src/utils/command-failure-tracking.ts
150
53
  function trackCommandFailures(load) {
151
54
  return () => load().then((cmd) => wrapCommand(cmd, commandName(cmd)));
@@ -163,7 +66,7 @@ function wrapCommand(cmd, path) {
163
66
  const rawArgs = ctx?.rawArgs ?? [];
164
67
  const firstPositional = rawArgs.find((tok) => tok && !tok.startsWith("-"));
165
68
  const delegatesToSub = cmd.subCommands != null && firstPositional != null && Object.prototype.hasOwnProperty.call(cmd.subCommands, firstPositional);
166
- if (!delegatesToSub) assertKnownFlags(cmd, rawArgs);
69
+ if (!delegatesToSub) guardLeafFlags(cmd, path, ctx, rawArgs);
167
70
  if (!cmd.subCommands) resolveExtraPositionals(cmd, path, ctx?.args);
168
71
  return await run(ctx);
169
72
  };
@@ -179,9 +82,16 @@ function wrapCommand(cmd, path) {
179
82
  }
180
83
  return wrapped;
181
84
  }
85
+ function guardLeafFlags(cmd, path, ctx, rawArgs) {
86
+ assertKnownFlags(cmd, rawArgs);
87
+ const guarded = guardSwallowedFlagValues(cmd, path, rawArgs);
88
+ if (!guarded.rewritten) return;
89
+ ctx.rawArgs = guarded.rawArgs;
90
+ ctx.args = parseArgs(guarded.rawArgs, cmd.args ?? {});
91
+ }
182
92
  async function reportCommandFailure(command2, err) {
183
93
  try {
184
- const { trackCommandFailure } = await import("./events-QJDVMKSR.js");
94
+ const { trackCommandFailure } = await import("./events-BRRUDPPT.js");
185
95
  trackCommandFailure(command2, err);
186
96
  } catch {
187
97
  }
@@ -253,54 +163,54 @@ async function assertStudioWorkspaceBuilt() {
253
163
  });
254
164
  }
255
165
  var commandLoaders = {
256
- init: () => import("./init-A2XBDFGF.js").then((m) => m.default),
257
- add: () => import("./add-YS2RCWEK.js").then((m) => m.default),
258
- catalog: () => import("./catalog-DVJ3XPDN.js").then((m) => m.default),
166
+ init: () => import("./init-6BXK42VS.js").then((m) => m.default),
167
+ add: () => import("./add-CWRTVGDB.js").then((m) => m.default),
168
+ catalog: () => import("./catalog-HIWNAFHW.js").then((m) => m.default),
259
169
  "media-use": () => import("./media-use-4XXGABIL.js").then((m) => m.default),
260
- play: () => import("./play-QMZEM6X3.js").then((m) => m.default),
261
- present: () => import("./present-Y7IK3C4W.js").then((m) => m.default),
262
- preview: () => assertStudioWorkspaceBuilt().then(() => import("./preview-5OQRYE6A.js").then((m) => m.default)),
263
- publish: () => import("./publish-VZLFIGYY.js").then((m) => m.default),
264
- open: () => import("./open-TYC5THVY.js").then((m) => m.default),
265
- "catch-up": () => import("./catch-up-DF6AVSN2.js").then((m) => m.default),
266
- render: () => import("./render-X3NFNVEQ.js").then((m) => m.default),
267
- lint: () => import("./lint-V4GRFHOJ.js").then((m) => m.default),
268
- check: () => import("./check-KXORRWAE.js").then((m) => m.default),
269
- beats: () => import("./beats-7OT7ALV3.js").then((m) => m.default),
270
- "normalize-audio": () => import("./normalize-audio-INKCLMS2.js").then((m) => m.default),
271
- inspect: () => import("./inspect-CLTZHA5O.js").then((m) => m.default),
272
- keyframes: () => import("./keyframes-3FYOK6H6.js").then((m) => m.default),
273
- layout: () => import("./layout-4KP5O7IJ.js").then((m) => m.default),
274
- info: () => import("./info-WBBQA2AX.js").then((m) => m.default),
275
- compositions: () => import("./compositions-CUSY6ZYY.js").then((m) => m.default),
276
- timeline: () => import("./timeline-N6ZASFNE.js").then((m) => m.default),
277
- history: () => import("./history-ZRWYRY7R.js").then((m) => m.default),
278
- benchmark: () => import("./benchmark-Q2XQCRTR.js").then((m) => m.default),
279
- browser: () => import("./browser-7VAWQQZC.js").then((m) => m.default),
280
- "remove-background": () => import("./remove-background-TKOEHBA5.js").then((m) => m.default),
281
- transcribe: () => import("./transcribe-7YTUCXDX.js").then((m) => m.default),
170
+ play: () => import("./play-J2KP64UK.js").then((m) => m.default),
171
+ present: () => import("./present-MHHNRVRA.js").then((m) => m.default),
172
+ preview: () => assertStudioWorkspaceBuilt().then(() => import("./preview-CONUOFFQ.js").then((m) => m.default)),
173
+ publish: () => import("./publish-YZSPBFRD.js").then((m) => m.default),
174
+ open: () => import("./open-7IXXGO2E.js").then((m) => m.default),
175
+ "catch-up": () => import("./catch-up-HGS7KIAC.js").then((m) => m.default),
176
+ render: () => import("./render-MH4IUPWB.js").then((m) => m.default),
177
+ lint: () => import("./lint-DWCMVIX5.js").then((m) => m.default),
178
+ check: () => import("./check-FH6UYYLO.js").then((m) => m.default),
179
+ beats: () => import("./beats-N5JGEOFR.js").then((m) => m.default),
180
+ "normalize-audio": () => import("./normalize-audio-RFD776HQ.js").then((m) => m.default),
181
+ inspect: () => import("./inspect-VKU47TBH.js").then((m) => m.default),
182
+ keyframes: () => import("./keyframes-IEYVHRPI.js").then((m) => m.default),
183
+ layout: () => import("./layout-XOI4PT7A.js").then((m) => m.default),
184
+ info: () => import("./info-2CZOTNBC.js").then((m) => m.default),
185
+ compositions: () => import("./compositions-CPCMWF24.js").then((m) => m.default),
186
+ timeline: () => import("./timeline-T3QSGT3A.js").then((m) => m.default),
187
+ history: () => import("./history-4IQOLTHJ.js").then((m) => m.default),
188
+ benchmark: () => import("./benchmark-CUN3LN4V.js").then((m) => m.default),
189
+ browser: () => import("./browser-NCZT5AP6.js").then((m) => m.default),
190
+ "remove-background": () => import("./remove-background-4ATVLHLG.js").then((m) => m.default),
191
+ transcribe: () => import("./transcribe-FOLNOC5G.js").then((m) => m.default),
282
192
  usage: () => import("./usage-EC3KFUIJ.js").then((m) => m.default),
283
- models: () => import("./models-DYBAD2GQ.js").then((m) => m.default),
284
- tts: () => import("./tts-TOHSPWEG.js").then((m) => m.default),
193
+ models: () => import("./models-TY4PJ545.js").then((m) => m.default),
194
+ tts: () => import("./tts-B6AHFQEO.js").then((m) => m.default),
285
195
  docs: () => import("./docs-MPOM3PHH.js").then((m) => m.default),
286
- doctor: () => import("./doctor-4ROTBL5U.js").then((m) => m.default),
287
- clean: () => import("./clean-KTHTV5G5.js").then((m) => m.default),
288
- upgrade: () => import("./upgrade-QAJEYB4X.js").then((m) => m.default),
289
- skills: () => import("./skills-CZHVAD3J.js").then((m) => m.default),
290
- feedback: () => import("./feedback-PQ7TWESA.js").then((m) => m.default),
196
+ doctor: () => import("./doctor-GWI3B6JT.js").then((m) => m.default),
197
+ clean: () => import("./clean-KPX27IKJ.js").then((m) => m.default),
198
+ upgrade: () => import("./upgrade-TVGXBUPJ.js").then((m) => m.default),
199
+ skills: () => import("./skills-VENERS5X.js").then((m) => m.default),
200
+ feedback: () => import("./feedback-CXMD7FWL.js").then((m) => m.default),
291
201
  telemetry: () => import("./telemetry-W5AKPI4R.js").then((m) => m.default),
292
- events: () => import("./events-Q5PXT5UC.js").then((m) => m.default),
293
- validate: () => import("./validate-GW5MDL36.js").then((m) => m.default),
294
- snapshot: () => import("./snapshot-K7BTJPYQ.js").then((m) => m.default),
295
- "media-treatment": () => import("./media-treatment-HJYL3EME.js").then((m) => m.mediaTreatmentCommand),
296
- "grade-compare": () => import("./grade-compare-VS3RP73G.js").then((m) => m.default),
297
- compare: () => import("./compare-CY4UO3RW.js").then((m) => m.default),
298
- capture: () => import("./capture-U7ABPKS5.js").then((m) => m.default),
299
- lambda: () => import("./lambda-Y2PA2BGS.js").then((m) => m.default),
300
- cloudrun: () => import("./cloudrun-NM7RXOCL.js").then((m) => m.default),
301
- cloud: () => import("./cloud-ARSZWALC.js").then((m) => m.default),
302
- auth: () => import("./auth-DRZB7OAC.js").then((m) => m.default),
303
- figma: () => import("./figma-JN5DDBDS.js").then((m) => m.default)
202
+ events: () => import("./events-V2QFN4YM.js").then((m) => m.default),
203
+ validate: () => import("./validate-ZMYGK4QI.js").then((m) => m.default),
204
+ snapshot: () => import("./snapshot-C6T74HTI.js").then((m) => m.default),
205
+ "media-treatment": () => import("./media-treatment-IFB7OSZ3.js").then((m) => m.mediaTreatmentCommand),
206
+ "grade-compare": () => import("./grade-compare-STXQPKYQ.js").then((m) => m.default),
207
+ compare: () => import("./compare-F6YAFZZM.js").then((m) => m.default),
208
+ capture: () => import("./capture-YLS32UHT.js").then((m) => m.default),
209
+ lambda: () => import("./lambda-TIKG25CK.js").then((m) => m.default),
210
+ cloudrun: () => import("./cloudrun-XM56TBOH.js").then((m) => m.default),
211
+ cloud: () => import("./cloud-P7DAOISN.js").then((m) => m.default),
212
+ auth: () => import("./auth-IDSOIQWG.js").then((m) => m.default),
213
+ figma: () => import("./figma-YABDWD66.js").then((m) => m.default)
304
214
  };
305
215
  var subCommands = Object.fromEntries(
306
216
  Object.entries(commandLoaders).map(([name, load]) => [name, trackCommandFailures(load)])
@@ -324,7 +234,7 @@ var _printStalePinNotice;
324
234
  var _printSkillsUpdateNotice;
325
235
  var telemetryReady = Promise.resolve();
326
236
  if (!isHelp && command !== "telemetry" && command !== "events" && command !== "usage" && command !== "unknown") {
327
- telemetryReady = import("./telemetry-FQDKR5XA.js").then((mod) => {
237
+ telemetryReady = import("./telemetry-A23PPRD6.js").then((mod) => {
328
238
  _flushSync = mod.flushSync;
329
239
  _trackCliError = mod.trackCliError;
330
240
  _trackCommandResult = mod.trackCommandResult;
@@ -334,23 +244,23 @@ if (!isHelp && command !== "telemetry" && command !== "events" && command !== "u
334
244
  });
335
245
  }
336
246
  if (!isHelp && !hasJsonFlag && command !== "upgrade" && command !== "events" && command !== "telemetry" && command !== "skills" && command !== "usage") {
337
- import("./autoUpdate-I5I3BOJK.js").then((mod) => mod.reportCompletedUpdate()).catch(() => {
247
+ import("./autoUpdate-373B4BA2.js").then((mod) => mod.reportCompletedUpdate()).catch(() => {
338
248
  });
339
- import("./updateCheck-AZ2COZFR.js").then(async (mod) => {
249
+ import("./updateCheck-27PIP3AA.js").then(async (mod) => {
340
250
  _printUpdateNotice = mod.printUpdateNotice;
341
251
  _printStalePinNotice = mod.printStalePinNotice;
342
252
  const result = mod.cachedUpdateCheck();
343
253
  if (result.updateAvailable) {
344
- const auto = await import("./autoUpdate-I5I3BOJK.js").catch(() => null);
254
+ const auto = await import("./autoUpdate-373B4BA2.js").catch(() => null);
345
255
  auto?.scheduleBackgroundInstall(result.latest, result.current);
346
256
  }
347
257
  }).catch(() => {
348
258
  });
349
- import("./skillsUpdateCheck-6WLLX53A.js").then((mod) => {
259
+ import("./skillsUpdateCheck-UXFYTACG.js").then((mod) => {
350
260
  _printSkillsUpdateNotice = mod.printSkillsUpdateNotice;
351
261
  }).catch(() => {
352
262
  });
353
- import("./backgroundChecks-VR2QHGNY.js").then((mod) => mod.launchBackgroundChecks()).catch(() => {
263
+ import("./backgroundChecks-53Q3NAMG.js").then((mod) => mod.launchBackgroundChecks()).catch(() => {
354
264
  });
355
265
  }
356
266
  var _appHistoryNotice = null;
@@ -468,7 +378,7 @@ process.on("unhandledRejection", (reason) => {
468
378
  emitCliErrorEvent("unhandled_rejection", error);
469
379
  });
470
380
  async function showUsage(cmd, parent) {
471
- const { showUsage: impl } = await import("./help-AD6FIZIO.js");
381
+ const { showUsage: impl } = await import("./help-4H6BSFLB.js");
472
382
  return impl(cmd, parent);
473
383
  }
474
384
  async function showRequestedUsage() {
@@ -55,10 +55,10 @@ ${c.bold("AUTH:")}
55
55
  var cloud_default = defineCommand({
56
56
  meta: { name: "cloud", description: "Render HyperFrames compositions on the HeyGen cloud" },
57
57
  subCommands: {
58
- render: () => import("./render-KIIIF6PS.js").then((m) => m.default),
59
- list: () => import("./list-OQ4VED6E.js").then((m) => m.default),
60
- get: () => import("./get-KT6OTERO.js").then((m) => m.default),
61
- delete: () => import("./delete-KT3VHP4L.js").then((m) => m.default)
58
+ render: () => import("./render-6FBYLYGJ.js").then((m) => m.default),
59
+ list: () => import("./list-7GXKG5QM.js").then((m) => m.default),
60
+ get: () => import("./get-L2SOQKHX.js").then((m) => m.default),
61
+ delete: () => import("./delete-GYVKOKB6.js").then((m) => m.default)
62
62
  },
63
63
  async run({ args }) {
64
64
  if (!args._?.[0]) console.log(HELP);
@@ -6,37 +6,38 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  parseOutputResolutionFlag
9
- } from "./chunk-D2KNWIQ6.js";
9
+ } from "./chunk-QFSCCQIR.js";
10
10
  import {
11
11
  reportVariableIssues,
12
12
  resolveVariablesArg,
13
13
  validateVariablesAgainstProject
14
- } from "./chunk-6UYZB4TY.js";
14
+ } from "./chunk-7RAYSCYT.js";
15
15
  import {
16
16
  readAllowedCompositionFpsFromDir
17
- } from "./chunk-YEIFI443.js";
18
- import "./chunk-IHFUKJOR.js";
19
- import "./chunk-PFCFR3KZ.js";
17
+ } from "./chunk-WPNE5NEP.js";
18
+ import "./chunk-K2FLNJVB.js";
19
+ import "./chunk-442JNXRM.js";
20
20
  import {
21
21
  defineCommand
22
22
  } from "./chunk-S3S4TGEH.js";
23
23
  import {
24
24
  failCommand
25
25
  } from "./chunk-PBN6GBJE.js";
26
- import "./chunk-YFT3BL7N.js";
27
- import "./chunk-OZUQF4NB.js";
28
- import "./chunk-DPVXBVLL.js";
29
- import "./chunk-J4UX3RS3.js";
26
+ import "./chunk-3VYNNWVA.js";
27
+ import "./chunk-WJB7WI4J.js";
30
28
  import "./chunk-VC76R6W2.js";
31
29
  import "./chunk-YA62XGXS.js";
30
+ import "./chunk-MQZVBHEY.js";
32
31
  import "./chunk-OFQWTKPW.js";
32
+ import "./chunk-DPVXBVLL.js";
33
33
  import "./chunk-T76PLPD6.js";
34
34
  import "./chunk-FXMKHHPO.js";
35
35
  import "./chunk-RQVDTPGD.js";
36
- import "./chunk-TQFG7HTI.js";
37
- import "./chunk-GK4AIFIH.js";
36
+ import "./chunk-3RM2ETQT.js";
37
+ import "./chunk-BSQ7XANM.js";
38
+ import "./chunk-SDYDNHEE.js";
38
39
  import "./chunk-2PSPARWP.js";
39
- import "./chunk-PMRBLBUP.js";
40
+ import "./chunk-T42U2W2R.js";
40
41
  import {
41
42
  normalizeErrorMessage
42
43
  } from "./chunk-KNU5COPB.js";
@@ -104,7 +104,57 @@ window.__contrastAuditPrepare = function () {
104
104
  var CLIP_PROBE_COLS = [0.05, 0.25, 0.5, 0.75, 0.95];
105
105
  var CLIP_PROBE_ROWS = [0.25, 0.5, 0.75];
106
106
 
107
- function paintsAnyProbePoint(el, rect) {
107
+ var compositionBoxPaint = new WeakMap();
108
+ var COMPOSITION_BOX_TAGS = new Set(["DIV", "SECTION"]);
109
+
110
+ function hasContainerPaint(style) {
111
+ var background = parseColor(style.backgroundColor);
112
+ if (
113
+ style.backgroundColor &&
114
+ style.backgroundColor !== "transparent" &&
115
+ (!background || background[3] > 0)
116
+ )
117
+ return true;
118
+ if (
119
+ ["backgroundImage", "boxShadow", "filter", "backdropFilter"].some(function (property) {
120
+ return style[property] && style[property] !== "none";
121
+ })
122
+ )
123
+ return true;
124
+ if (parseFloat(style.outlineWidth) > 0 && style.outlineStyle !== "none") return true;
125
+ return ["Top", "Right", "Bottom", "Left"].some(function (side) {
126
+ return (
127
+ parseFloat(style["border" + side + "Width"]) > 0 &&
128
+ style["border" + side + "Style"] !== "none"
129
+ );
130
+ });
131
+ }
132
+
133
+ function isUnpaintedCompositionBox(el) {
134
+ if (!el || !el.matches("[data-composition-id], [data-hf-inner-root]")) return false;
135
+ if (!el.closest("[data-composition-id]")) return false;
136
+ if (
137
+ el.namespaceURI !== "http://www.w3.org/1999/xhtml" ||
138
+ !COMPOSITION_BOX_TAGS.has(el.tagName) ||
139
+ el.shadowRoot
140
+ )
141
+ return false;
142
+ if (compositionBoxPaint.has(el)) return !compositionBoxPaint.get(el);
143
+ var painted =
144
+ Array.from(el.childNodes).some(function (child) {
145
+ return child.nodeType === 3 && (child.textContent || "").trim().length > 0;
146
+ }) || hasContainerPaint(getComputedStyle(el));
147
+ if (!painted) {
148
+ painted = ["::before", "::after"].some(function (pseudo) {
149
+ var content = getComputedStyle(el, pseudo).content;
150
+ return content && content !== "none" && content !== "normal";
151
+ });
152
+ }
153
+ compositionBoxPaint.set(el, !!painted);
154
+ return !painted;
155
+ }
156
+
157
+ function paintsAnyProbePoint(el, rect, skipCompositionBoxes) {
108
158
  // Keep probe resolution aligned with layout-audit.browser.js. Edge strips
109
159
  // narrower than the nearest probe point are treated as clipped away to
110
160
  // avoid noisy typewriter pre-reveal contrast reports.
@@ -112,8 +162,14 @@ window.__contrastAuditPrepare = function () {
112
162
  for (var ri = 0; ri < CLIP_PROBE_ROWS.length; ri++) {
113
163
  var x = rect.left + rect.width * CLIP_PROBE_COLS[ci];
114
164
  var y = rect.top + rect.height * CLIP_PROBE_ROWS[ri];
115
- var hit = document.elementFromPoint(x, y);
116
- if (hit === el || el.contains(hit)) return true;
165
+ var hits =
166
+ skipCompositionBoxes && typeof document.elementsFromPoint === "function"
167
+ ? document.elementsFromPoint(x, y)
168
+ : [document.elementFromPoint(x, y)];
169
+ for (var hit of hits) {
170
+ if (hit === el || el.contains(hit)) return true;
171
+ if (!skipCompositionBoxes || !isUnpaintedCompositionBox(hit)) break;
172
+ }
117
173
  }
118
174
  }
119
175
  return false;
@@ -135,7 +191,7 @@ window.__contrastAuditPrepare = function () {
135
191
  function isIntentionallyOccluded(el, rect) {
136
192
  if (typeof document.elementFromPoint !== "function") return false;
137
193
  if (!el.closest || !el.closest("[data-layout-allow-occlusion]")) return false;
138
- return !paintsAnyProbePoint(el, rect);
194
+ return !paintsAnyProbePoint(el, rect, true);
139
195
  }
140
196
 
141
197
  var out = [];
@@ -1163,6 +1163,73 @@
1163
1163
  };
1164
1164
  }
1165
1165
 
1166
+ function layoutOffset(element) {
1167
+ let left = 0;
1168
+ let top = 0;
1169
+ for (let current = element; current instanceof HTMLElement; current = current.offsetParent) {
1170
+ left += current.offsetLeft;
1171
+ top += current.offsetTop;
1172
+ if (current !== element) {
1173
+ left += current.clientLeft;
1174
+ top += current.clientTop;
1175
+ }
1176
+ }
1177
+ return { left, top };
1178
+ }
1179
+
1180
+ function ancestorBackgroundPaintsText(element, textRect) {
1181
+ // Chromium 150+ includes independently painted descendants in text masks;
1182
+ // older builds drop their glyphs: https://github.com/heygen-com/hyperframes/issues/5117.
1183
+ const chromium = window.navigator.userAgent.match(/(?:HeadlessChrome|Chrome)\/(\d+)/);
1184
+ if (!chromium || Number(chromium[1]) < 150 || !(element instanceof HTMLElement)) return false;
1185
+
1186
+ for (
1187
+ let ancestor = element.parentElement;
1188
+ ancestor instanceof HTMLElement;
1189
+ ancestor = ancestor.parentElement
1190
+ ) {
1191
+ const style = getComputedStyle(ancestor);
1192
+ const clips = splitTopLevelCommas(
1193
+ style.webkitBackgroundClip || style.backgroundClip || "border-box",
1194
+ ).map((clip) => clip.trim());
1195
+ if (!clips.includes("text")) continue;
1196
+ // Chromium builds the mask before descendant transforms, so moving the
1197
+ // child must not move its glyphs out of the mask for this check.
1198
+ const offset = layoutOffset(element);
1199
+ const parentOffset = layoutOffset(ancestor);
1200
+ const elementRect = element.getBoundingClientRect();
1201
+ const scaleX = elementRect.width > 0 ? element.offsetWidth / elementRect.width : 1;
1202
+ const scaleY = elementRect.height > 0 ? element.offsetHeight / elementRect.height : 1;
1203
+ const backgroundRect = rectFromOrigin(0, 0, ancestor.offsetWidth, ancestor.offsetHeight);
1204
+ const overlaps =
1205
+ element.offsetWidth > 0 && element.offsetHeight > 0
1206
+ ? textClientRects(element, true).some((rect) => {
1207
+ const layoutRect = rectFromOrigin(
1208
+ offset.left - parentOffset.left + (rect.left - elementRect.left) * scaleX,
1209
+ offset.top - parentOffset.top + (rect.top - elementRect.top) * scaleY,
1210
+ rect.width * scaleX,
1211
+ rect.height * scaleY,
1212
+ );
1213
+ return intersectionArea(layoutRect, backgroundRect) > 0;
1214
+ })
1215
+ : !overflowFor(textRect, ancestor.getBoundingClientRect(), 2);
1216
+ if (!overlaps) continue;
1217
+
1218
+ const images = splitTopLevelCommas(style.backgroundImage || "none");
1219
+ const imagePaints = images.some(
1220
+ (image, index) =>
1221
+ clips[index % clips.length] === "text" &&
1222
+ /(?:linear|radial|conic)-gradient\(/i.test(image) &&
1223
+ gradientMaxAlpha(image) > 0.05,
1224
+ );
1225
+ const colorPaints =
1226
+ clips[(images.length - 1) % clips.length] === "text" &&
1227
+ colorAlpha(style.backgroundColor || "rgba(0, 0, 0, 0)") > 0.05;
1228
+ if (imagePaints || colorPaints) return true;
1229
+ }
1230
+ return false;
1231
+ }
1232
+
1166
1233
  // Text whose glyphs paint with an effectively transparent fill renders
1167
1234
  // invisibly even though the element, its box, opacity and color all read as
1168
1235
  // present — so geometry/occlusion/contrast audits miss it (contrast reads
@@ -1194,6 +1261,7 @@
1194
1261
  // clipped text. If nothing paints, fall through and report it.
1195
1262
  if (paintsGlyphs) return null;
1196
1263
  }
1264
+ if (ancestorBackgroundPaintsText(element, textRect)) return null;
1197
1265
  return {
1198
1266
  code: "text_not_painted",
1199
1267
  severity: "error",