hyperframes 0.8.142 → 0.8.143

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 (189) hide show
  1. package/dist/{add-YS2RCWEK.js → add-Q5EYDUAY.js} +18 -17
  2. package/dist/{animatedGifPrep-SAMCDT7T.js → animatedGifPrep-H2DUQEZ3.js} +15 -14
  3. package/dist/{asset-BLWC2NWB.js → asset-C7JBYYX4.js} +4 -4
  4. package/dist/{assetCataloger-FVNBBRP3.js → assetCataloger-FRO4G6OU.js} +8 -7
  5. package/dist/{auth-DRZB7OAC.js → auth-FRWLCO36.js} +1 -1
  6. package/dist/{autoUpdate-I5I3BOJK.js → autoUpdate-E4OZXQK6.js} +2 -2
  7. package/dist/{backgroundChecks-VR2QHGNY.js → backgroundChecks-FSUVHN5L.js} +3 -3
  8. package/dist/backgroundChecksWorker.js +3 -3
  9. package/dist/{batchRender-4YUHQI6X.js → batchRender-4U73BYTU.js} +11 -10
  10. package/dist/{beats-7OT7ALV3.js → beats-U6KJWF35.js} +32 -27
  11. package/dist/{benchmark-Q2XQCRTR.js → benchmark-5ONT7V7B.js} +15 -14
  12. package/dist/{browser-7VAWQQZC.js → browser-R4DU46IE.js} +4 -4
  13. package/dist/{bundleWithLocalizedFonts-DDMLLL2R.js → bundleWithLocalizedFonts-VH55VOAL.js} +2 -2
  14. package/dist/{capture-HEJS6M5A.js → capture-26G2DPSI.js} +18 -17
  15. package/dist/{capture-U7ABPKS5.js → capture-OGQAEYKO.js} +2 -2
  16. package/dist/{catalog-DVJ3XPDN.js → catalog-RKORTIUE.js} +19 -18
  17. package/dist/{catch-up-DF6AVSN2.js → catch-up-4OBERRQO.js} +5 -5
  18. package/dist/{check-KXORRWAE.js → check-P2XDN57S.js} +43 -42
  19. package/dist/{checkBrowser-J7HZJTRH.js → checkBrowser-NTGJGAEA.js} +42 -41
  20. package/dist/{chunk-EFDXGAAD.js → chunk-2LBBHMKT.js} +1 -1
  21. package/dist/{chunk-IDX52YJN.js → chunk-33RZPZ4K.js} +189 -42
  22. package/dist/{chunk-JU6Y5TTZ.js → chunk-3NE7ZYU2.js} +2 -2
  23. package/dist/{chunk-TQFG7HTI.js → chunk-3RM2ETQT.js} +0 -168
  24. package/dist/{chunk-PFCFR3KZ.js → chunk-442JNXRM.js} +1 -1
  25. package/dist/{chunk-YFT3BL7N.js → chunk-4M4EC7JX.js} +19 -12
  26. package/dist/{chunk-AM5L5YIA.js → chunk-4OA4LDTU.js} +1 -1
  27. package/dist/{chunk-LQASVU3I.js → chunk-5FISWJ37.js} +12 -4
  28. package/dist/{chunk-JYYOAKHS.js → chunk-6IIGT7BX.js} +1 -1
  29. package/dist/chunk-6TPZSTCL.js +3681 -0
  30. package/dist/{chunk-QGRFOOLE.js → chunk-6XMFEICO.js} +263 -75
  31. package/dist/{chunk-YHRZQJXH.js → chunk-7UYBQ6NF.js} +260 -67
  32. package/dist/{chunk-U7E736AJ.js → chunk-BFDJ63J5.js} +32 -14
  33. package/dist/{chunk-WCJGTLPF.js → chunk-BHVFTYSI.js} +6 -3
  34. package/dist/{chunk-B6SMSALD.js → chunk-BT27OYYX.js} +9 -9
  35. package/dist/{chunk-IXCTG2WY.js → chunk-BYK73CR7.js} +4 -4
  36. package/dist/{chunk-75JJVANE.js → chunk-CLOH4LIB.js} +3 -3
  37. package/dist/{chunk-H2X52H2N.js → chunk-DF2BHILQ.js} +3 -3
  38. package/dist/{chunk-DPHJKWP5.js → chunk-F26LCYRY.js} +42 -34
  39. package/dist/{chunk-5Z63TBTX.js → chunk-FH7WODJH.js} +1 -1
  40. package/dist/{chunk-LTGGTEMA.js → chunk-FVYXDXEV.js} +2 -2
  41. package/dist/{chunk-KYN364DU.js → chunk-GNBGPUJ7.js} +6 -8
  42. package/dist/{chunk-RVCWIIZ7.js → chunk-GV5R5B7Q.js} +1 -1
  43. package/dist/{chunk-FZK35GT4.js → chunk-HC7EVDEL.js} +1 -1
  44. package/dist/{chunk-MVTUV4TP.js → chunk-HLYOEIWM.js} +14 -6
  45. package/dist/{chunk-WSGY5CDQ.js → chunk-HMT2RPZU.js} +6 -6
  46. package/dist/{chunk-JOTLPC6S.js → chunk-HW4AKJ5F.js} +1 -1
  47. package/dist/{chunk-IMY4QQTQ.js → chunk-I7QGQAZM.js} +8 -8
  48. package/dist/{chunk-JFKL3WAE.js → chunk-IWFLMU2N.js} +104 -19
  49. package/dist/{chunk-IHFUKJOR.js → chunk-K2FLNJVB.js} +8 -2
  50. package/dist/chunk-KJJLA674.js +121 -0
  51. package/dist/{chunk-BPZVDBHY.js → chunk-KO5QBV73.js} +1 -1
  52. package/dist/{chunk-WGVOWWVK.js → chunk-KQLGTGE5.js} +3 -3
  53. package/dist/{chunk-R2JEKLDZ.js → chunk-LVX6NK36.js} +3 -3
  54. package/dist/{chunk-6UYZB4TY.js → chunk-LW6HO6U3.js} +4 -4
  55. package/dist/{chunk-OZUQF4NB.js → chunk-MQZVBHEY.js} +123 -8
  56. package/dist/{chunk-7FCDA4RH.js → chunk-N3DQEVSI.js} +2 -2
  57. package/dist/{chunk-A4KQZXZI.js → chunk-NE55C6S5.js} +4 -2
  58. package/dist/{chunk-6RAD4BCC.js → chunk-OBXQRJWQ.js} +2 -2
  59. package/dist/{chunk-LBKDQKWV.js → chunk-OSSHSIMD.js} +1 -1
  60. package/dist/{chunk-TY6XOHEM.js → chunk-P7THMINS.js} +3 -3
  61. package/dist/{chunk-HMUF7FEO.js → chunk-PAGIICKN.js} +2 -2
  62. package/dist/{chunk-OSUKETIH.js → chunk-PJU63L6W.js} +1 -1
  63. package/dist/{chunk-GYE63V4P.js → chunk-POLR33RB.js} +20 -13
  64. package/dist/{chunk-7M4KAPAA.js → chunk-PUGIRFPX.js} +2 -2
  65. package/dist/{chunk-XGMNQQTJ.js → chunk-QFN7NVWM.js} +1 -1
  66. package/dist/{chunk-D2KNWIQ6.js → chunk-QFSCCQIR.js} +1 -1
  67. package/dist/{chunk-WTMUCJ6Z.js → chunk-QRKLPWEX.js} +1 -1
  68. package/dist/{chunk-XTLBLWOV.js → chunk-QVYVUCWD.js} +1 -1
  69. package/dist/{chunk-GK4AIFIH.js → chunk-SDYDNHEE.js} +34 -3
  70. package/dist/{chunk-2NCHQUPX.js → chunk-SQLK7SJL.js} +1 -1
  71. package/dist/{chunk-PMRBLBUP.js → chunk-T42U2W2R.js} +14 -2
  72. package/dist/{chunk-QXPCARFE.js → chunk-TAMQYQGJ.js} +1 -1
  73. package/dist/{chunk-PXSM4HPB.js → chunk-U3X3TPBW.js} +1 -1
  74. package/dist/{chunk-FWRNQOLT.js → chunk-UICWP23D.js} +1 -1
  75. package/dist/{chunk-OKCR3JTO.js → chunk-UM2GRYM3.js} +13 -10
  76. package/dist/{chunk-LJAU4TPS.js → chunk-VIVBA6E6.js} +2 -2
  77. package/dist/{chunk-DZEVA7DI.js → chunk-W35EKBS6.js} +2 -2
  78. package/dist/{chunk-YEIFI443.js → chunk-WPNE5NEP.js} +1 -1
  79. package/dist/{chunk-IW2CKH6A.js → chunk-XONFUK3M.js} +48 -25
  80. package/dist/{chunk-JLKMWY2T.js → chunk-Y6QL2LGO.js} +8 -5
  81. package/dist/{chunk-THXFSPLV.js → chunk-ZIRIDSDB.js} +1 -1
  82. package/dist/chunk-ZLW2V65P.js +209 -0
  83. package/dist/{chunk-6UM3R7PP.js → chunk-ZQQ3SEIE.js} +33 -32
  84. package/dist/{clean-KTHTV5G5.js → clean-YHGPY33K.js} +23 -22
  85. package/dist/cli.js +57 -159
  86. package/dist/{cloud-ARSZWALC.js → cloud-DOFI5ISR.js} +4 -4
  87. package/dist/{cloudrun-NM7RXOCL.js → cloudrun-KTZ4XDHL.js} +13 -12
  88. package/dist/commands/contrast-audit.browser.js +60 -4
  89. package/dist/commands/layout-audit.browser.js +68 -0
  90. package/dist/{compare-CY4UO3RW.js → compare-SMMIZN2C.js} +37 -36
  91. package/dist/{compiler-VTH2D3ID.js → compiler-TEXQWW6N.js} +14 -10
  92. package/dist/{component-FRUIAXIR.js → component-B3GCNGSS.js} +5 -5
  93. package/dist/{compositions-CUSY6ZYY.js → compositions-OQNZZTKF.js} +38 -33
  94. package/dist/{delete-KT3VHP4L.js → delete-EL5LVSEP.js} +4 -4
  95. package/dist/{deterministicFonts-F6WIVL2W.js → deterministicFonts-U2BIMGPG.js} +3 -3
  96. package/dist/{dist-7SZU7MA7.js → dist-5UVIRMSM.js} +7 -6
  97. package/dist/{dist-2GC6XKRQ.js → dist-XN234YFQ.js} +41 -39
  98. package/dist/{doctor-4ROTBL5U.js → doctor-UOL3OI2A.js} +17 -16
  99. package/dist/{dom-IROKGVJI.js → dom-37K6YOH4.js} +2 -2
  100. package/dist/{events-Q5PXT5UC.js → events-K2DB2PBC.js} +2 -2
  101. package/dist/{events-QJDVMKSR.js → events-NIZBS6S7.js} +3 -3
  102. package/dist/{feedback-PQ7TWESA.js → feedback-QMP4E6L7.js} +13 -12
  103. package/dist/{figma-JN5DDBDS.js → figma-2AUJRNVC.js} +3 -3
  104. package/dist/fontLocalizeCli.js +18 -17
  105. package/dist/{get-KT6OTERO.js → get-P5NC7SRM.js} +4 -4
  106. package/dist/{gpuPolicy-LCBWVGEH.js → gpuPolicy-7N5MCE2G.js} +15 -14
  107. package/dist/{grade-compare-VS3RP73G.js → grade-compare-HV5AFZ6P.js} +37 -36
  108. package/dist/{help-AD6FIZIO.js → help-3TSTXBLN.js} +1 -1
  109. package/dist/{history-ZRWYRY7R.js → history-D65XFJ6D.js} +6 -6
  110. package/dist/hyperframe-runtime.js +25 -25
  111. package/dist/hyperframe.manifest.json +1 -1
  112. package/dist/hyperframe.runtime.iife.js +25 -25
  113. package/dist/hyperframes-player.global.js +3 -3
  114. package/dist/hyperframes-slideshow.global.js +23 -23
  115. package/dist/{info-WBBQA2AX.js → info-TXV7MLFO.js} +17 -16
  116. package/dist/{init-A2XBDFGF.js → init-OSDMJZJV.js} +38 -37
  117. package/dist/{inspect-CLTZHA5O.js → inspect-RQQSAYIJ.js} +38 -37
  118. package/dist/{installer-WQDRVXH4.js → installer-CDOB32HE.js} +11 -10
  119. package/dist/{keyframes-3FYOK6H6.js → keyframes-V75Q6GRM.js} +10 -10
  120. package/dist/{lambda-Y2PA2BGS.js → lambda-RODV4RCX.js} +12 -11
  121. package/dist/{layout-4KP5O7IJ.js → layout-IZAI5SFC.js} +38 -37
  122. package/dist/{lint-V4GRFHOJ.js → lint-PLXOXY5R.js} +14 -13
  123. package/dist/{lintProject-RG2KGAXB.js → lintProject-OQ6H6XBR.js} +7 -6
  124. package/dist/{list-OQ4VED6E.js → list-BQBPNKDZ.js} +5 -5
  125. package/dist/{login-W47NKN5S.js → login-NP6F4FHC.js} +4 -4
  126. package/dist/{manager-DXB7JDHU.js → manager-GXYF4AVO.js} +2 -2
  127. package/dist/{manager-524RPYO7.js → manager-RFZNG5YT.js} +2 -2
  128. package/dist/{media-treatment-HJYL3EME.js → media-treatment-PXGMZ4A4.js} +22 -20
  129. package/dist/{models-DYBAD2GQ.js → models-CEZM6XZ7.js} +17 -16
  130. package/dist/{motionShot-7NE2YBB3.js → motionShot-R4GHYWYM.js} +25 -24
  131. package/dist/{normalize-IGLHCWTF.js → normalize-H6KUHHEI.js} +18 -7
  132. package/dist/{normalize-audio-INKCLMS2.js → normalize-audio-MQ7NFCOV.js} +10 -6
  133. package/dist/{open-TYC5THVY.js → open-AKQTGNXF.js} +5 -5
  134. package/dist/{pipeline-EVKEPQEW.js → pipeline-SYJYP2RM.js} +17 -16
  135. package/dist/{play-QMZEM6X3.js → play-NBH4B7PL.js} +31 -29
  136. package/dist/{present-Y7IK3C4W.js → present-XAX55CFS.js} +26 -25
  137. package/dist/{preview-5OQRYE6A.js → preview-OLANKNFA.js} +26 -25
  138. package/dist/{producer-Q6G6JU7B.js → producer-Q6YNZZUJ.js} +1 -1
  139. package/dist/{projectConfig-RJN3DKDB.js → projectConfig-EM26P45P.js} +13 -12
  140. package/dist/{publication-QCPGGN3U.js → publication-OXWJZKSX.js} +8 -7
  141. package/dist/{publish-VZLFIGYY.js → publish-4VBWP2UB.js} +17 -16
  142. package/dist/{remove-background-TKOEHBA5.js → remove-background-REB7427G.js} +19 -18
  143. package/dist/{render-XTXE5CRU.js → render-3CVZ2SZG.js} +13 -12
  144. package/dist/{render-KIIIF6PS.js → render-K25YOG3M.js} +19 -18
  145. package/dist/{render-X3NFNVEQ.js → render-TSE75QUL.js} +35 -34
  146. package/dist/{render-batch-M55YZLZ5.js → render-batch-GGUOK3DS.js} +13 -12
  147. package/dist/{renderCancellation-X5BEHAZU.js → renderCancellation-PZRWB53I.js} +15 -14
  148. package/dist/renderSetupWorker.js +7 -6
  149. package/dist/{resolver-GAMXRA42.js → resolver-S5VK6UCB.js} +10 -9
  150. package/dist/{sherpa-ZYTNFHD5.js → sherpa-LVIUEAGF.js} +18 -17
  151. package/dist/skills/hyperframes-cli/references/doctor-browser.md +24 -1
  152. package/dist/skills/media-use/scripts/lib/cache.mjs +28 -14
  153. package/dist/skills/media-use/scripts/lib/cache.test.mjs +110 -0
  154. package/dist/skills/media-use/scripts/lib/duck.mjs +2 -1
  155. package/dist/skills/media-use/scripts/lib/duck.test.mjs +87 -0
  156. package/dist/skills/media-use/scripts/lib/probe.mjs +6 -1
  157. package/dist/skills/media-use/scripts/lib/probe.test.mjs +73 -0
  158. package/dist/skills/media-use/scripts/lib/words.mjs +1 -1
  159. package/dist/{skills-CZHVAD3J.js → skills-I65FU5HD.js} +5 -5
  160. package/dist/{skillsUpdateCheck-6WLLX53A.js → skillsUpdateCheck-J57RNNIV.js} +3 -3
  161. package/dist/{slideshow-EJ4IMY6P.js → slideshow-4OJEPWNZ.js} +1 -1
  162. package/dist/{snapshot-K7BTJPYQ.js → snapshot-YROOGY22.js} +42 -38
  163. package/dist/{src-3I3RH3V5.js → src-JO5JOV7Y.js} +16 -13
  164. package/dist/{src-YUW26JU5.js → src-X426BZAG.js} +17 -16
  165. package/dist/{staticProjectServer-IKCSGN2B.js → staticProjectServer-5VMBS262.js} +23 -22
  166. package/dist/studio/assets/{hyperframes-player-sAsRuV73.js → hyperframes-player-BXSuksFh.js} +3 -3
  167. package/dist/studio/assets/{index-D3Vij9t1.js → index-BgOVCqjo.js} +1 -1
  168. package/dist/studio/assets/{index-D5q2_7Gw.js → index-FgyO_5Kv.js} +1 -1
  169. package/dist/studio/assets/{index-B-wffzRH.js → index-J7jpL4pj.js} +150 -150
  170. package/dist/studio/index.html +1 -1
  171. package/dist/studio/index.js +122 -160
  172. package/dist/studio/index.js.map +1 -1
  173. package/dist/{studio-api-SQ3NXFSM.js → studio-api-VRBZUGAE.js} +22 -17
  174. package/dist/{studioServer-VVEO7XCH.js → studioServer-DBNKZ6I6.js} +50 -49
  175. package/dist/{synthesize-77PTU6C5.js → synthesize-C3IWDAXF.js} +2 -2
  176. package/dist/{telemetry-FQDKR5XA.js → telemetry-CXAX3TO3.js} +3 -3
  177. package/dist/{timeline-N6ZASFNE.js → timeline-VQ34WH7J.js} +91 -69
  178. package/dist/{tokens-2OIIBBCW.js → tokens-62R7VFAZ.js} +4 -4
  179. package/dist/{transcribe-4F6MK73N.js → transcribe-7KR7IPJA.js} +18 -17
  180. package/dist/{transcribe-7YTUCXDX.js → transcribe-XOHPPL2O.js} +11 -11
  181. package/dist/{tts-TOHSPWEG.js → tts-MUV42JXT.js} +6 -6
  182. package/dist/{updateCheck-AZ2COZFR.js → updateCheck-POYNH3B5.js} +2 -2
  183. package/dist/{upgrade-QAJEYB4X.js → upgrade-NBNOT7J2.js} +2 -2
  184. package/dist/{urlDownloader-LSMFEO3R.js → urlDownloader-3NS63A7B.js} +14 -13
  185. package/dist/{validate-GW5MDL36.js → validate-Y2QDHAEP.js} +40 -27
  186. package/dist/{video-PRNOKUK3.js → video-SJDMTSTL.js} +15 -14
  187. package/package.json +1 -1
  188. package/dist/chunk-J4UX3RS3.js +0 -3717
  189. /package/dist/{chunk-HBBJFK6I.js → chunk-APDLWWFG.js} +0 -0
package/dist/cli.js CHANGED
@@ -9,8 +9,10 @@ import {
9
9
  registerRunningCli
10
10
  } from "./chunk-NXMYHJAL.js";
11
11
  import {
12
- isTextFile
13
- } from "./chunk-K4WKGXRC.js";
12
+ assertKnownFlags,
13
+ resolveExtraPositionals
14
+ } from "./chunk-KJJLA674.js";
15
+ import "./chunk-K4WKGXRC.js";
14
16
  import {
15
17
  isRenderSucceeded
16
18
  } from "./chunk-L3YOGIPG.js";
@@ -34,7 +36,7 @@ import {
34
36
  } from "./chunk-ISN5GRYI.js";
35
37
  import {
36
38
  VERSION
37
- } from "./chunk-DZEVA7DI.js";
39
+ } from "./chunk-W35EKBS6.js";
38
40
  import "./chunk-M2WBOQ2Q.js";
39
41
 
40
42
  // src/cli.ts
@@ -42,110 +44,6 @@ import { dirname, join, resolve } from "path";
42
44
  import { fileURLToPath } from "url";
43
45
  import { existsSync } from "fs";
44
46
 
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
47
  // src/utils/command-failure-tracking.ts
150
48
  function trackCommandFailures(load) {
151
49
  return () => load().then((cmd) => wrapCommand(cmd, commandName(cmd)));
@@ -181,7 +79,7 @@ function wrapCommand(cmd, path) {
181
79
  }
182
80
  async function reportCommandFailure(command2, err) {
183
81
  try {
184
- const { trackCommandFailure } = await import("./events-QJDVMKSR.js");
82
+ const { trackCommandFailure } = await import("./events-NIZBS6S7.js");
185
83
  trackCommandFailure(command2, err);
186
84
  } catch {
187
85
  }
@@ -253,54 +151,54 @@ async function assertStudioWorkspaceBuilt() {
253
151
  });
254
152
  }
255
153
  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),
154
+ init: () => import("./init-OSDMJZJV.js").then((m) => m.default),
155
+ add: () => import("./add-Q5EYDUAY.js").then((m) => m.default),
156
+ catalog: () => import("./catalog-RKORTIUE.js").then((m) => m.default),
259
157
  "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),
158
+ play: () => import("./play-NBH4B7PL.js").then((m) => m.default),
159
+ present: () => import("./present-XAX55CFS.js").then((m) => m.default),
160
+ preview: () => assertStudioWorkspaceBuilt().then(() => import("./preview-OLANKNFA.js").then((m) => m.default)),
161
+ publish: () => import("./publish-4VBWP2UB.js").then((m) => m.default),
162
+ open: () => import("./open-AKQTGNXF.js").then((m) => m.default),
163
+ "catch-up": () => import("./catch-up-4OBERRQO.js").then((m) => m.default),
164
+ render: () => import("./render-TSE75QUL.js").then((m) => m.default),
165
+ lint: () => import("./lint-PLXOXY5R.js").then((m) => m.default),
166
+ check: () => import("./check-P2XDN57S.js").then((m) => m.default),
167
+ beats: () => import("./beats-U6KJWF35.js").then((m) => m.default),
168
+ "normalize-audio": () => import("./normalize-audio-MQ7NFCOV.js").then((m) => m.default),
169
+ inspect: () => import("./inspect-RQQSAYIJ.js").then((m) => m.default),
170
+ keyframes: () => import("./keyframes-V75Q6GRM.js").then((m) => m.default),
171
+ layout: () => import("./layout-IZAI5SFC.js").then((m) => m.default),
172
+ info: () => import("./info-TXV7MLFO.js").then((m) => m.default),
173
+ compositions: () => import("./compositions-OQNZZTKF.js").then((m) => m.default),
174
+ timeline: () => import("./timeline-VQ34WH7J.js").then((m) => m.default),
175
+ history: () => import("./history-D65XFJ6D.js").then((m) => m.default),
176
+ benchmark: () => import("./benchmark-5ONT7V7B.js").then((m) => m.default),
177
+ browser: () => import("./browser-R4DU46IE.js").then((m) => m.default),
178
+ "remove-background": () => import("./remove-background-REB7427G.js").then((m) => m.default),
179
+ transcribe: () => import("./transcribe-XOHPPL2O.js").then((m) => m.default),
282
180
  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),
181
+ models: () => import("./models-CEZM6XZ7.js").then((m) => m.default),
182
+ tts: () => import("./tts-MUV42JXT.js").then((m) => m.default),
285
183
  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),
184
+ doctor: () => import("./doctor-UOL3OI2A.js").then((m) => m.default),
185
+ clean: () => import("./clean-YHGPY33K.js").then((m) => m.default),
186
+ upgrade: () => import("./upgrade-NBNOT7J2.js").then((m) => m.default),
187
+ skills: () => import("./skills-I65FU5HD.js").then((m) => m.default),
188
+ feedback: () => import("./feedback-QMP4E6L7.js").then((m) => m.default),
291
189
  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)
190
+ events: () => import("./events-K2DB2PBC.js").then((m) => m.default),
191
+ validate: () => import("./validate-Y2QDHAEP.js").then((m) => m.default),
192
+ snapshot: () => import("./snapshot-YROOGY22.js").then((m) => m.default),
193
+ "media-treatment": () => import("./media-treatment-PXGMZ4A4.js").then((m) => m.mediaTreatmentCommand),
194
+ "grade-compare": () => import("./grade-compare-HV5AFZ6P.js").then((m) => m.default),
195
+ compare: () => import("./compare-SMMIZN2C.js").then((m) => m.default),
196
+ capture: () => import("./capture-OGQAEYKO.js").then((m) => m.default),
197
+ lambda: () => import("./lambda-RODV4RCX.js").then((m) => m.default),
198
+ cloudrun: () => import("./cloudrun-KTZ4XDHL.js").then((m) => m.default),
199
+ cloud: () => import("./cloud-DOFI5ISR.js").then((m) => m.default),
200
+ auth: () => import("./auth-FRWLCO36.js").then((m) => m.default),
201
+ figma: () => import("./figma-2AUJRNVC.js").then((m) => m.default)
304
202
  };
305
203
  var subCommands = Object.fromEntries(
306
204
  Object.entries(commandLoaders).map(([name, load]) => [name, trackCommandFailures(load)])
@@ -324,7 +222,7 @@ var _printStalePinNotice;
324
222
  var _printSkillsUpdateNotice;
325
223
  var telemetryReady = Promise.resolve();
326
224
  if (!isHelp && command !== "telemetry" && command !== "events" && command !== "usage" && command !== "unknown") {
327
- telemetryReady = import("./telemetry-FQDKR5XA.js").then((mod) => {
225
+ telemetryReady = import("./telemetry-CXAX3TO3.js").then((mod) => {
328
226
  _flushSync = mod.flushSync;
329
227
  _trackCliError = mod.trackCliError;
330
228
  _trackCommandResult = mod.trackCommandResult;
@@ -334,23 +232,23 @@ if (!isHelp && command !== "telemetry" && command !== "events" && command !== "u
334
232
  });
335
233
  }
336
234
  if (!isHelp && !hasJsonFlag && command !== "upgrade" && command !== "events" && command !== "telemetry" && command !== "skills" && command !== "usage") {
337
- import("./autoUpdate-I5I3BOJK.js").then((mod) => mod.reportCompletedUpdate()).catch(() => {
235
+ import("./autoUpdate-E4OZXQK6.js").then((mod) => mod.reportCompletedUpdate()).catch(() => {
338
236
  });
339
- import("./updateCheck-AZ2COZFR.js").then(async (mod) => {
237
+ import("./updateCheck-POYNH3B5.js").then(async (mod) => {
340
238
  _printUpdateNotice = mod.printUpdateNotice;
341
239
  _printStalePinNotice = mod.printStalePinNotice;
342
240
  const result = mod.cachedUpdateCheck();
343
241
  if (result.updateAvailable) {
344
- const auto = await import("./autoUpdate-I5I3BOJK.js").catch(() => null);
242
+ const auto = await import("./autoUpdate-E4OZXQK6.js").catch(() => null);
345
243
  auto?.scheduleBackgroundInstall(result.latest, result.current);
346
244
  }
347
245
  }).catch(() => {
348
246
  });
349
- import("./skillsUpdateCheck-6WLLX53A.js").then((mod) => {
247
+ import("./skillsUpdateCheck-J57RNNIV.js").then((mod) => {
350
248
  _printSkillsUpdateNotice = mod.printSkillsUpdateNotice;
351
249
  }).catch(() => {
352
250
  });
353
- import("./backgroundChecks-VR2QHGNY.js").then((mod) => mod.launchBackgroundChecks()).catch(() => {
251
+ import("./backgroundChecks-FSUVHN5L.js").then((mod) => mod.launchBackgroundChecks()).catch(() => {
354
252
  });
355
253
  }
356
254
  var _appHistoryNotice = null;
@@ -468,7 +366,7 @@ process.on("unhandledRejection", (reason) => {
468
366
  emitCliErrorEvent("unhandled_rejection", error);
469
367
  });
470
368
  async function showUsage(cmd, parent) {
471
- const { showUsage: impl } = await import("./help-AD6FIZIO.js");
369
+ const { showUsage: impl } = await import("./help-3TSTXBLN.js");
472
370
  return impl(cmd, parent);
473
371
  }
474
372
  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-K25YOG3M.js").then((m) => m.default),
59
+ list: () => import("./list-BQBPNKDZ.js").then((m) => m.default),
60
+ get: () => import("./get-P5NC7SRM.js").then((m) => m.default),
61
+ delete: () => import("./delete-EL5LVSEP.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-LW6HO6U3.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-4M4EC7JX.js";
27
+ import "./chunk-6TPZSTCL.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-ZLW2V65P.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",
@@ -15,42 +15,42 @@ import {
15
15
  import "./chunk-MRF4AMKD.js";
16
16
  import {
17
17
  serveStaticProjectHtml
18
- } from "./chunk-LQASVU3I.js";
18
+ } from "./chunk-5FISWJ37.js";
19
19
  import "./chunk-XUHOIDKG.js";
20
20
  import "./chunk-X7MTZ4T2.js";
21
- import "./chunk-LTGGTEMA.js";
21
+ import "./chunk-FVYXDXEV.js";
22
22
  import {
23
23
  openSettledCompositionPage,
24
24
  seekCompositionTimeline
25
- } from "./chunk-WSGY5CDQ.js";
26
- import "./chunk-5Z63TBTX.js";
27
- import "./chunk-OSUKETIH.js";
28
- import "./chunk-TY6XOHEM.js";
29
- import "./chunk-YEIFI443.js";
30
- import "./chunk-IHFUKJOR.js";
31
- import "./chunk-YHRZQJXH.js";
32
- import "./chunk-OKCR3JTO.js";
25
+ } from "./chunk-HMT2RPZU.js";
26
+ import "./chunk-FH7WODJH.js";
27
+ import "./chunk-PJU63L6W.js";
28
+ import "./chunk-P7THMINS.js";
29
+ import "./chunk-WPNE5NEP.js";
30
+ import "./chunk-K2FLNJVB.js";
31
+ import "./chunk-7UYBQ6NF.js";
32
+ import "./chunk-UM2GRYM3.js";
33
33
  import "./chunk-QZ3AZTXI.js";
34
- import "./chunk-U7E736AJ.js";
35
- import "./chunk-6UM3R7PP.js";
34
+ import "./chunk-BFDJ63J5.js";
35
+ import "./chunk-ZQQ3SEIE.js";
36
36
  import "./chunk-G75ENCEZ.js";
37
37
  import "./chunk-EOVYQ3IG.js";
38
- import "./chunk-WTMUCJ6Z.js";
39
- import "./chunk-PFCFR3KZ.js";
40
- import "./chunk-EFDXGAAD.js";
38
+ import "./chunk-QRKLPWEX.js";
39
+ import "./chunk-442JNXRM.js";
40
+ import "./chunk-2LBBHMKT.js";
41
41
  import "./chunk-XT7X6QCP.js";
42
42
  import "./chunk-4YYJOFKS.js";
43
43
  import "./chunk-HVW7ABXD.js";
44
- import "./chunk-JOTLPC6S.js";
45
- import "./chunk-75JJVANE.js";
46
- import "./chunk-QXPCARFE.js";
44
+ import "./chunk-HW4AKJ5F.js";
45
+ import "./chunk-CLOH4LIB.js";
46
+ import "./chunk-TAMQYQGJ.js";
47
47
  import "./chunk-AWDFDFI3.js";
48
48
  import "./chunk-P6LJ4Y32.js";
49
49
  import "./chunk-374QQGBQ.js";
50
50
  import {
51
51
  trackCompareSheet
52
- } from "./chunk-XGMNQQTJ.js";
53
- import "./chunk-LBKDQKWV.js";
52
+ } from "./chunk-QFN7NVWM.js";
53
+ import "./chunk-OSSHSIMD.js";
54
54
  import "./chunk-VWG7OQKU.js";
55
55
  import "./chunk-GQJZORQP.js";
56
56
  import "./chunk-AMKC3AXA.js";
@@ -64,37 +64,38 @@ import {
64
64
  } from "./chunk-PBN6GBJE.js";
65
65
  import "./chunk-KC5XXX3X.js";
66
66
  import "./chunk-TJSTGSAW.js";
67
- import "./chunk-IDX52YJN.js";
68
- import "./chunk-DPHJKWP5.js";
69
- import "./chunk-A4KQZXZI.js";
67
+ import "./chunk-33RZPZ4K.js";
68
+ import "./chunk-F26LCYRY.js";
69
+ import "./chunk-NE55C6S5.js";
70
70
  import "./chunk-USDEMXXL.js";
71
- import "./chunk-YFT3BL7N.js";
72
- import "./chunk-OZUQF4NB.js";
73
- import "./chunk-DPVXBVLL.js";
74
- import "./chunk-J4UX3RS3.js";
71
+ import "./chunk-4M4EC7JX.js";
72
+ import "./chunk-6TPZSTCL.js";
75
73
  import "./chunk-VC76R6W2.js";
76
74
  import "./chunk-YA62XGXS.js";
75
+ import "./chunk-MQZVBHEY.js";
77
76
  import "./chunk-OFQWTKPW.js";
77
+ import "./chunk-DPVXBVLL.js";
78
78
  import "./chunk-T76PLPD6.js";
79
79
  import "./chunk-FXMKHHPO.js";
80
80
  import "./chunk-RQVDTPGD.js";
81
81
  import "./chunk-TWWSYAKJ.js";
82
- import "./chunk-IW2CKH6A.js";
83
- import "./chunk-JFKL3WAE.js";
84
- import "./chunk-HBBJFK6I.js";
82
+ import "./chunk-XONFUK3M.js";
83
+ import "./chunk-IWFLMU2N.js";
84
+ import "./chunk-APDLWWFG.js";
85
85
  import "./chunk-PJ3HDUCY.js";
86
- import "./chunk-TQFG7HTI.js";
87
- import "./chunk-GK4AIFIH.js";
86
+ import "./chunk-3RM2ETQT.js";
87
+ import "./chunk-ZLW2V65P.js";
88
+ import "./chunk-SDYDNHEE.js";
88
89
  import "./chunk-2PSPARWP.js";
89
- import "./chunk-PMRBLBUP.js";
90
+ import "./chunk-T42U2W2R.js";
90
91
  import {
91
92
  withMeta
92
- } from "./chunk-JLKMWY2T.js";
93
+ } from "./chunk-Y6QL2LGO.js";
93
94
  import "./chunk-K4WIOZFP.js";
94
95
  import "./chunk-XUXGIA7H.js";
95
96
  import "./chunk-WERLJGIC.js";
96
97
  import "./chunk-ISN5GRYI.js";
97
- import "./chunk-DZEVA7DI.js";
98
+ import "./chunk-W35EKBS6.js";
98
99
  import {
99
100
  normalizeErrorMessage
100
101
  } from "./chunk-KNU5COPB.js";
@@ -282,7 +283,7 @@ function cleanupPreparedCompareVariants(variants) {
282
283
  }
283
284
  async function renderCompareVariant(variant, opts) {
284
285
  try {
285
- const { bundleToSingleHtml } = await import("./compiler-VTH2D3ID.js");
286
+ const { bundleToSingleHtml } = await import("./compiler-TEXQWW6N.js");
286
287
  const html = await bundleToSingleHtml(variant.projectDir);
287
288
  const server = await serveStaticProjectHtml(variant.projectDir, html);
288
289
  try {