gsap_tween_tail counts GSAP's force3D and autoRound flags as properties
Los mantenedores suelen responder en 1 día
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 78/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- cli, typescript
- Área
- cli
Línea de trabajo
La advertencia proviene de packages/cli/src/utils/gsapTweenTails.ts: la lista NOT_PROPERTIES (alrededor de las líneas 77-113) no incluye force3D ni autoRound, y plainProperties (alrededor de la línea 133) los conserva. Añade ambas claves a la lista y luego comprueba que la reproducción del issue ya no emite gsap_tween_tail, pero que una propiedad compartida real, como dos tweens de opacity, sí la sigue emitiendo. Está terminado cuando la reproducción esté limpia y los tests existentes de tween-tail sigan pasando.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- TypeScript
- Estrellas
- 54.1k
- Forks
- 4.9k
- Merge medio
- 8 h 32 min
- PR fusionados (30 d)
- 707
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de heygen-com/hyperframes
-
bug triage/needs-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
heygen-com/hyperframes#5681 ·
Los mantenedores suelen responder en 1 día
-
desktop-candidate difficulty/easy enhancement good first issue help wanted triage/ready
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
heygen-com/hyperframes#5582 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Studio: press ? to open the keyboard shortcuts panelPosiblemente ocupada @B-Payal la tomó hace 3 días. Abiertodesktop-candidate difficulty/easy enhancement good first issue help wanted triage/ready
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
heygen-com/hyperframes#5580 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
remotion-to-hyperframes: Easing.cubic is mapped to power3 (quartic); cubic is power2Posiblemente ocupada @user-github-me la tomó hace 3 días. Abiertodifficulty/easy documentation help wanted triage/ready
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
heygen-com/hyperframes#5538 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
`hyperframes docs examples` lists templates that don't existPosiblemente ocupada @Muhtasim-Munif-Fahim la tomó hace 6 días. Abiertobug difficulty/easy help wanted triage/ready
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
heygen-com/hyperframes#5393 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de heygen-com/hyperframes
Issues similares
-
Endpoint links in the tag operations list are below the 24px target sizePosiblemente ocupada @AdzerKI la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
ai-driven-qa bug Minor
Dificultad 2/5 1-3 horas Aptitud para principiantes 80/100
linagora/twake-tasks#435 ·
Los mantenedores suelen responder en 1 día
-
bug domain: database priority: p1 Stellar Wave
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
StellarState/SS-backend#632 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
A2A audit timestamps end in +00:00Z (invalid ISO 8601)Posiblemente ocupada @O1sumitkumar la tomó hoy. Abiertobug good first issue help wanted python
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
`cf complete zsh >> .zshrc` fails on vanilla zshQuizá libre de nuevo Un pull request para esta issue se cerró sin fusionarse. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
cloudflare/cf#340 ·
Los mantenedores suelen responder en 1 día