gsap_tween_tail counts GSAP's force3D and autoRound flags as properties
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 78/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- cli, typescript
- Ambito
- cli
Direzione di ricerca
L'avviso proviene da packages/cli/src/utils/gsapTweenTails.ts: la lista NOT_PROPERTIES (intorno alle righe 77-113) non include force3D e autoRound, mentre plainProperties (intorno alla riga 133) li mantiene. Aggiungi entrambe le chiavi alla lista, poi verifica che la riproduzione nell'issue non emetta più gsap_tween_tail, mentre una proprietà condivisa reale, come due tween di opacity, continui a emetterlo. È completato quando la riproduzione è pulita e i test esistenti sui tween-tail continuano a passare.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Describe the bug
check's runtime warning gsap_tween_tail treats GSAP's force3D and autoRound flags as tweened properties.
collectTweenRecords leaves out GSAP's special keys (NOT_PROPERTIES: duration, ease, overwrite, immediateRender, ...) but not force3D or autoRound. So tailBetween finds a shared "property" in any two overlapping tweens of one element that both pass them, whatever they animate, whenever the earlier one ends up to 0.25 s after the later one.
A composition that passes force3D: false, autoRound: false on every tween (ours does, for crisp scaled text) gets a warning for every such pair: about 60 on a 65 s composition, every one naming only force3D, autoRound, none a real property.
That hides the case the warning is for. We had two genuine pairs (two tweens of opacity on one element at once), found by their frames once 0.8.158's seek drew them in another order, and they were lost among the flag-only warnings.
Measured on 0.8.158 (0.8.152 has the same list). The code is unchanged in v0.8.162: NOT_PROPERTIES has neither key (packages/cli/src/utils/gsapTweenTails.ts, lines 77-113), and plainProperties keeps every other key of vars (line 133).
Minimal reproduction
npx hyperframes init repro --non-interactive --example blank
Then replace repro/index.html with the file below. Only the <script> differs from the blank template: one element, two overlapping tweens of different properties (x, then opacity), both with force3D: false, autoRound: false. The earlier tween ends 0.1 s after the later one.
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=1920, height=1080" />
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/gsap.min.js"></script>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html,
body {
margin: 0;
width: 1920px;
height: 1080px;
overflow: hidden;
background: #0a0a0a;
}
#root {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
font-family: Inter, ui-sans-serif, system-ui, sans-serif;
}
#title {
color: #f4f4f5;
font-size: 72px;
font-weight: 600;
letter-spacing: -0.03em;
}
</style>
</head>
<body>
<div
id="root"
data-composition-id="main"
data-start="0"
data-duration="10"
data-width="1920"
data-height="1080"
>
<h1 id="title" class="clip" data-start="0" data-duration="10" data-track-index="0">Title</h1>
</div>
<script>
const tl = gsap.timeline({ paused: true });
// One element, two overlapping tweens of different properties (x, then opacity).
// The earlier tween ends 0.1 s after the later one. Both pass force3D and autoRound.
tl.to("#title", { x: 200, duration: 1, force3D: false, autoRound: false }, 0);
tl.to("#title", { opacity: 0.5, duration: 0.4, force3D: false, autoRound: false }, 0.5);
window.__timelines["main"] = tl;
tl.seek(0);
</script>
</body>
</html>
Steps to reproduce
- Set up the reproduction above.
- In
repro, runnpx [email protected] check --json. - Look at
runtime.findings: onegsap_tween_tailwarning namingforce3D, autoRound. - For comparison, remove
, force3D: false, autoRound: falsefrom both tweens and run the check again:runtime.findingsis empty.
Expected behavior
No gsap_tween_tail warning. The two tweens share no tweened property (x and opacity). force3D and autoRound are GSAP flags, not properties a tween animates, so they should be left out as ease and overwrite are, and the warning should name only properties two tweens really share.
Actual behavior
check --json exits 0 with this runtime finding (other fields trimmed):
{
"code": "gsap_tween_tail",
"severity": "warning",
"message": "In timeline \"main\", a tween on force3D, autoRound of #title ends at 1.000 s, 0.100 s after a later tween on force3D, autoRound ends at 0.900 s. For that tail the earlier tween takes force3D, autoRound back and leaves its own end value on screen, so the later tween's end never shows. End the earlier tween by 0.500 s, or add overwrite: \"auto\" to the later tween.",
"sourceFile": "index.html",
"time": 0.9
}
The same composition without the two flags has no runtime findings.
Environment
OS: Windows 11 (build 26200)
Node.js: v24.14.0
HyperFrames: 0.8.158 (0.8.152 has the same NOT_PROPERTIES; code unchanged at v0.8.162)
Chrome: Chrome Headless Shell 152.0.7977.30
Additional context
Request: add force3D and autoRound to NOT_PROPERTIES (or leave out every GSAP flag that is not a tweened property), so the warning names only properties two tweens really share.
- Lingua principale
- TypeScript
- Stelle
- 54.1k
- Fork
- 4.9k
- Merge medio
- 8h 33m
- PR unite (30g)
- 665
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di heygen-com/hyperframes
-
product-launch-video: assemble-index.mjs is not idempotent — a second run drops every approved frame videoForse già presa @Dante-dan l’ha presa 1 giorno fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
heygen-com/hyperframes#5733 ·
I maintainer di solito rispondono entro 1 giorno
-
desktop-candidate difficulty/easy enhancement good first issue help wanted triage/ready
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
heygen-com/hyperframes#5582 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Studio: press ? to open the keyboard shortcuts panelForse già presa @B-Payal l’ha presa 4 giorni fa. Apertadesktop-candidate difficulty/easy enhancement good first issue help wanted triage/ready
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
heygen-com/hyperframes#5580 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
remotion-to-hyperframes: Easing.cubic is mapped to power3 (quartic); cubic is power2Forse già presa @user-github-me l’ha presa 4 giorni fa. Apertadifficulty/easy documentation help wanted triage/ready
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
heygen-com/hyperframes#5538 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
`hyperframes docs examples` lists templates that don't existForse già presa @Muhtasim-Munif-Fahim l’ha presa 7 giorni fa. Apertabug difficulty/easy help wanted triage/ready
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
heygen-com/hyperframes#5393 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di heygen-com/hyperframes
Issue simili
-
backend priority:P3 privacy-fix
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
[Bug]: 【优化】对话消息底部增加发送时间展示Apertabug desktop v3 windows
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
esengine/DeepSeek-Reasonix#13697 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
area:security documentation effort:S priority:P2
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
I maintainer di solito rispondono entro 1 giorno
-
app:web meta:ops
Difficoltà 2/5 Mezza giornata Idoneità per principianti 78/100
osu-tournament-rating/otr#1113 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100