{ "id": "gsap-8e939656defe", "sourceId": "gsap", "title": "Orchestrated easeReverse", "sourceUrl": "https://demos.gsap.com/demo/orchestrated-easereverse", "demoUrl": "https://codepen.io/GreenSock/pen/JoRMPLg", "sourceStatus": "unresolved", "sourceReason": "Public page unavailable through web browsing", "sourceRevision": null, "sourceLicense": null, "originalDemoAcquired": false, "disposition": "ready_for_independent_study", "evidenceBasis": "catalog_explanation_and_linked_api", "studyId": "gsap-8e939656defe", "sharedStudyCanonicalId": null, "label": "Independently authored documentation study; original Pen unavailable", "catalogEvidence": { "localPath": "artifacts/full-import/gsap/remaining-docs/catalog-evidence.json", "sha256": "4f2a4f9aa64456b85b905b562b60d7733629b41026787b3057cba29e8b10de69", "bytes": 30117, "recordId": "gsap-8e939656defe" }, "sourceInputs": [ { "kind": "authored-study-specification", "localPath": "artifacts/full-import/gsap/remaining-docs/study-specs.json", "sha256": "cbb89331eda8783b5cf2f173b326b9195eeabfb223374fb60019161d9f46d4a6", "bytes": 52279, "recordId": "gsap-8e939656defe" }, { "kind": "official-catalog-metadata", "localPath": "artifacts/full-import/gsap/remaining-docs/catalog-evidence.json", "sha256": "4f2a4f9aa64456b85b905b562b60d7733629b41026787b3057cba29e8b10de69", "bytes": 30117, "recordId": "gsap-8e939656defe" }, { "kind": "official-documentation-evidence", "localPath": "artifacts/full-import/gsap/remaining-docs/official-documentation-evidence.json", "sha256": "bfa25f561e61c597569cf1bc0b3538e6dce4b9985a932775ceab41e665ca24a2", "bytes": 11430, "recordIds": [ "tween", "reversed" ] }, { "kind": "original-library-source", "localPath": "artifacts/full-import/gsap/library/src/gsap-core.js", "sha256": "8063816e0e7c3e6c07970fb06feafb06146fd266db5d8346419176b3d496e284", "gitBlob": "c673b9e2e0ee04832afb13cb892ae75f503e268c", "revision": "13e2b790546426a1a2e0e9b409f3f8dc6d6611f2", "sourcePath": "src/gsap-core.js", "ranges": [ { "id": "direction-controls", "startLine": 1354, "endLine": 1391, "rangeSha256": "8e2f36127b2fc568686d2d934ad3b74a21274c78bf1045d210e376260598819f" }, { "id": "reverse-ease", "startLine": 2114, "endLine": 2136, "rangeSha256": "a94b1617e88c0c3328ce1d2038eaa0d44a03612cf5b33cbfeac7140245698555" } ] } ], "studiedPrinciple": "Coordinate several UI tweens in one timeline while assigning each child its own easeReverse response.", "namedApis": [ { "name": "easeReverse on each child tween", "purpose": "Choose reverse easing independently for the panel, items, and icon.", "libraryEvidence": [ "reverse-ease" ], "documentationEvidence": [ "tween" ], "minimumVersion": "3.15.0" }, { "name": "timeline.play() and timeline.reverse()", "purpose": "Reverse the existing orchestration from its current position.", "libraryEvidence": [ "direction-controls" ], "documentationEvidence": [ "reversed" ] } ], "implementationBrief": { "scene": "A newly authored compact menu with one panel, three item labels, and a simple two-bar icon. A settings area identifies the forward and reverse easing for each part.", "controls": [ { "label": "Open / Close", "type": "button", "action": "Play or reverse the existing timeline from its current position." }, { "label": "Reverse easing", "type": "checkbox", "action": "Rebuild from the closed base state with explicit easeReverse values or false for comparison." }, { "label": "Panel / Items / Icon reverse ease", "type": "three selects", "action": "Choose none, power2.in, or power3.in for each child group; reset closed and rebuild after a setting changes." }, { "label": "Reset", "type": "button", "action": "Restore the authored closed state and clear any pending motion." } ], "mechanismSteps": [ "Create a paused timeline containing separate child tweens for the panel, staggered item labels, and icon.", "Assign the selected easeReverse value to every affected child tween. Do not place it only on the parent timeline and assume it becomes an orchestration-level effect.", "Keep an explicit desiredOpen state. Opening calls play(); closing calls reverse() on the same timeline so mid-entry interruptions can be inspected.", "Recreate the timeline from declared closed styles when ease settings change. This study intentionally resets on setting changes rather than claiming continuity across a rebuilt configuration.", "Display the currently selected forward and reverse eases, and distinguish disabled easeReverse:false from using an ease string." ] }, "authoredDefaults": { "panel": { "duration": 0.65, "ease": "back.out(1.4)", "easeReverse": "power3.in" }, "items": { "count": 3, "duration": 0.4, "stagger": 0.08, "ease": "power2.out", "easeReverse": "power2.in" }, "icon": { "duration": 0.3, "ease": "power1.inOut", "easeReverse": "none" }, "parameterChangePolicy": "reset closed and rebuild" }, "verificationRequired": [ "Child tween vars contain the selected easeReverse values, and the loaded GSAP version is at least 3.15.0.", "Reverse halfway through entrance continues from the current rendered values without snapping to a new start.", "Changing a setting visibly resets to the declared closed state and leaves only one owned timeline.", "Disabled reverse easing and different selected eases produce inspectable motion while endpoint states stay consistent." ], "unsupportedClaims": [ "Original composition, assets, timing, breakpoint behavior, and live interaction are not observable in captured frames. This brief does not establish visual fidelity or recover original code.", "Original object count, menu artwork, exact durations, setting choices, and choreography offsets are unknown.", "The study does not establish a perceptual ranking of the easing choices." ], "dependencies": { "package": "gsap", "version": "3.15.0", "revision": "13e2b790546426a1a2e0e9b409f3f8dc6d6611f2", "repository": "https://github.com/greensock/GSAP", "plugins": [], "registration": "Core includes CSSPlugin; no separate plugin registration required.", "runtimeCandidates": [ { "path": "dist/gsap.js", "localPath": "artifacts/full-import/gsap/library/dist/gsap.js", "gitBlob": "ec5ffee3f099bc454f2f1c79cee6a55ba97e7400", "sha256": "01effe0e121c22ba0f885a3f091f3dc6d1f0d445c4fba37dcb298e314eca5cfb", "bytes": 179557 } ], "license": { "name": "GSAP Standard 'No Charge' License (custom, not MIT)", "localPath": "artifacts/full-import/gsap/licenses/gsap-standard-license.html", "sha256": "bf8536e67b77db780f7db0c14a645f184f554bb19e938d1e52d58986e2f10528", "bytes": 6988, "url": "https://gsap.com/community/standard-license/" }, "originalDependencyVersionKnown": false }, "runtimeVerified": false, "implementationWritten": false }