From 1cc09735d92aee2fae57a04d3c9502e830bdffe1 Mon Sep 17 00:00:00 2001 From: Hunter Garrett Date: Wed, 14 Oct 2026 21:27:06 -0400 Subject: [PATCH 01/15] refactor(docs): share the WebGPU adapter check Move the favorites' WebGPU adapter request into lib/use-has-webgpu.ts. The Reactive feature card needs the same check without the hover gate, because its scene also runs on touch. --- .../components/favorites/favorites-list.tsx | 30 ++------------- apps/docs/src/lib/use-has-webgpu.ts | 38 +++++++++++++++++++ 2 files changed, 42 insertions(+), 26 deletions(-) create mode 100644 apps/docs/src/lib/use-has-webgpu.ts diff --git a/apps/docs/src/components/favorites/favorites-list.tsx b/apps/docs/src/components/favorites/favorites-list.tsx index 4d1aac31..88497f7f 100644 --- a/apps/docs/src/components/favorites/favorites-list.tsx +++ b/apps/docs/src/components/favorites/favorites-list.tsx @@ -17,6 +17,7 @@ import { ShaderPoster } from '@camp-dev/shaders/poster'; import { useHeroPause } from '@/components/home-hero/hero-pause'; import type { Favorite, FavoriteSlug } from '@/content/homepage'; import { useCanHover } from '@/lib/use-can-hover'; +import { useHasWebGpu } from '@/lib/use-has-webgpu'; import { CardTab } from './card-tab'; import { favoriteSceneBackdrop, preloadFavoriteScenes, useFavoriteScene } from './favorite-scenes'; @@ -325,34 +326,11 @@ function usePauseHeroWhilePlaying(playing: boolean) { /** * True where a favorite may mount its scene: the device passes the site's * hover gate (lib/use-can-hover.ts), and the browser hands out a WebGPU - * adapter. A phone or tablet fails the gate, so its favorites stay posters. - * Without an adapter, ShaderScene would fall back to WebGL2, and the - * favorites stay posters instead. Only a device that can hover asks for the - * adapter. + * adapter (lib/use-has-webgpu.ts). A phone or tablet fails the gate, so its + * favorites stay posters. Only a device that can hover asks for the adapter. */ function useCanGoLive(): boolean { const canHover = useCanHover(); - const [hasWebGpu, setHasWebGpu] = useState(false); - useEffect(() => { - // navigator.gpu is typed as always present, but it is missing in a - // browser without WebGPU and outside a secure context, so probe with `in`. - if (!canHover || !('gpu' in navigator)) return; - - let cancelled = false; - - void navigator.gpu - .requestAdapter() - // A browser that refuses the request has no WebGPU to offer either. - .catch(() => null) - .then((adapter) => { - if (!cancelled) setHasWebGpu(adapter !== null); - }); - - return () => { - cancelled = true; - }; - }, [canHover]); - - return canHover && hasWebGpu; + return useHasWebGpu(canHover); } diff --git a/apps/docs/src/lib/use-has-webgpu.ts b/apps/docs/src/lib/use-has-webgpu.ts new file mode 100644 index 00000000..e17ffc26 --- /dev/null +++ b/apps/docs/src/lib/use-has-webgpu.ts @@ -0,0 +1,38 @@ +/** + * Whether the browser hands out a WebGPU adapter. The favorites and the + * Reactive feature card mount a live scene only where it does. Without an + * adapter, ShaderScene would fall back to WebGL2, and they show an image + * instead. + */ +import { useEffect, useState } from 'react'; + +/** + * True once the browser has handed out a WebGPU adapter. False on the + * server, until the adapter arrives, and while `enabled` is false, which + * skips the request. + */ +export function useHasWebGpu(enabled = true): boolean { + const [hasWebGpu, setHasWebGpu] = useState(false); + + useEffect(() => { + // navigator.gpu is typed as always present, but it is missing in a + // browser without WebGPU and outside a secure context, so probe with `in`. + if (!enabled || !('gpu' in navigator)) return; + + let cancelled = false; + + void navigator.gpu + .requestAdapter() + // A browser that refuses the request has no WebGPU to offer either. + .catch(() => null) + .then((adapter) => { + if (!cancelled) setHasWebGpu(adapter !== null); + }); + + return () => { + cancelled = true; + }; + }, [enabled]); + + return enabled && hasWebGpu; +} From 9af61c614ff5508e903e26b47f64ca0c61effdad Mon Sep 17 00:00:00 2001 From: Hunter Garrett Date: Wed, 14 Oct 2026 21:27:41 -0400 Subject: [PATCH 02/15] feat(docs): draw the Reactive card's gradient live Replace the Reactive card's exported image with a live LiquidGradient, held still at a literal speed of 0, under the mock's pointer arrow. This is phase 1a of SHA-216's motion brief: the still frame without its held smudge, which waits on SHA-229. The image stays until the scene's first frame and without WebGPU. /dev/reactive-card is a temporary tuning route for the gradient's settings. It goes at the defaults gate, once the values move into reactive-gradient.ts. --- .../public/features/reactive-pointer-halo.svg | 5 + .../docs/public/features/reactive-pointer.svg | 3 + .../src/app/dev/reactive-card/page.dev.tsx | 12 ++ .../app/dev/reactive-card/tuning.module.css | 25 ++++ .../docs/src/app/dev/reactive-card/tuning.tsx | 98 +++++++++++++ .../docs/src/components/features/features.tsx | 11 +- .../components/features/reactive-gradient.ts | 39 +++++ .../features/reactive-illustration.module.css | 55 ++++++++ .../features/reactive-illustration.tsx | 133 ++++++++++++++++++ .../components/features/reactive-scene.tsx | 31 ++++ 10 files changed, 407 insertions(+), 5 deletions(-) create mode 100644 apps/docs/public/features/reactive-pointer-halo.svg create mode 100644 apps/docs/public/features/reactive-pointer.svg create mode 100644 apps/docs/src/app/dev/reactive-card/page.dev.tsx create mode 100644 apps/docs/src/app/dev/reactive-card/tuning.module.css create mode 100644 apps/docs/src/app/dev/reactive-card/tuning.tsx create mode 100644 apps/docs/src/components/features/reactive-gradient.ts create mode 100644 apps/docs/src/components/features/reactive-illustration.module.css create mode 100644 apps/docs/src/components/features/reactive-illustration.tsx create mode 100644 apps/docs/src/components/features/reactive-scene.tsx diff --git a/apps/docs/public/features/reactive-pointer-halo.svg b/apps/docs/public/features/reactive-pointer-halo.svg new file mode 100644 index 00000000..9e45db11 --- /dev/null +++ b/apps/docs/public/features/reactive-pointer-halo.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/docs/public/features/reactive-pointer.svg b/apps/docs/public/features/reactive-pointer.svg new file mode 100644 index 00000000..7c72c4ed --- /dev/null +++ b/apps/docs/public/features/reactive-pointer.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/docs/src/app/dev/reactive-card/page.dev.tsx b/apps/docs/src/app/dev/reactive-card/page.dev.tsx new file mode 100644 index 00000000..bf1e2400 --- /dev/null +++ b/apps/docs/src/app/dev/reactive-card/page.dev.tsx @@ -0,0 +1,12 @@ +'use client'; + +import dynamic from 'next/dynamic'; + +// The rig loads client-only, like every probe. The card's scene already +// loads three through import(), but the page has nothing to server-render. +// Dev route: invisible to production builds. +const Tuning = dynamic(() => import('./tuning'), { ssr: false }); + +export default function ReactiveCardPage() { + return ; +} diff --git a/apps/docs/src/app/dev/reactive-card/tuning.module.css b/apps/docs/src/app/dev/reactive-card/tuning.module.css new file mode 100644 index 00000000..c946b719 --- /dev/null +++ b/apps/docs/src/app/dev/reactive-card/tuning.module.css @@ -0,0 +1,25 @@ +.page { + padding: var(--spacing-6); +} + +.preview { + display: flex; + flex-direction: column; + gap: var(--spacing-6); + align-items: flex-start; +} + +/* The card's window at the mock's 312 CSS pixels. */ +.window { + width: 312px; +} + +/* The settings as JSON, to paste back into reactive-gradient.ts. */ +.values { + margin: 0; + color: var(--white); + font-family: var(--font-mono); + font-size: var(--font-size-xs); + line-height: 1.5; + user-select: all; +} diff --git a/apps/docs/src/app/dev/reactive-card/tuning.tsx b/apps/docs/src/app/dev/reactive-card/tuning.tsx new file mode 100644 index 00000000..5d0d4f03 --- /dev/null +++ b/apps/docs/src/app/dev/reactive-card/tuning.tsx @@ -0,0 +1,98 @@ +'use client'; + +/** + * Temporary tuning rig for the Reactive card's gradient (SHA-216, phase 1): + * the card's window at the mock's size, beside LiquidGradient's settings. + * At the defaults gate, bake the landed values into reactive-gradient.ts and + * delete this route. + */ +import { useMemo } from 'react'; + +import { + ColorInput, + ControlPanel, + ControlsProvider, + createControlStore, + DemoLayout, + ListInput, + NumberInput, + Section, + SliderInput, + useSnapshot, +} from '@/components/controls'; +import featureStyles from '@/components/features/features.module.css'; +import { REACTIVE_GRADIENT, type ReactiveGradient } from '@/components/features/reactive-gradient'; +import { ReactiveIllustration } from '@/components/features/reactive-illustration'; +import { createStop, newStopIndex, type PositionedStop } from '@/lib/stops'; + +import styles from './tuning.module.css'; + +// The card, and the settings it draws with as JSON, to paste back into +// reactive-gradient.ts. +function Preview() { + const gradient = useSnapshot(); + + return ( +
+
+ +
+
{JSON.stringify(gradient, null, 2)}
+
+ ); +} + +function Controls() { + return ( + +
+ + + +
+
+ + + +
+ + createItem={createStop} + insertIndex={newStopIndex} + itemLabel="stop" + label="Color stops" + max={6} + min={2} + path="stops" + > + {() => ( + <> + + + + )} + +
+ ); +} + +export default function Tuning() { + const store = useMemo(() => createControlStore(REACTIVE_GRADIENT), []); + + return ( + +
+ }> + + +
+
+ ); +} diff --git a/apps/docs/src/components/features/features.tsx b/apps/docs/src/components/features/features.tsx index 14a70727..7662120b 100644 --- a/apps/docs/src/components/features/features.tsx +++ b/apps/docs/src/components/features/features.tsx @@ -12,6 +12,7 @@ import { FEATURE_CARDS, type FeatureCardId } from '@/content/homepage'; import { ExtensibleIllustration } from './extensible-illustration'; import styles from './features.module.css'; import { PerformantIllustration } from './performant-illustration'; +import { ReactiveIllustration } from './reactive-illustration'; import { StoryCard } from './story'; // The illustration's size in the mock, in CSS pixels. The exported files are @@ -36,14 +37,14 @@ function StaticIllustration({ src }: { src: string }) { ); } -// Each card's illustration. Extensible's and Performant's are built in code. -// The others are the images exported from the mock until each card's own -// issue rebuilds its illustration in code and gives the card its story. A -// complete record, so a card with no illustration fails the type check. +// Each card's illustration. Extensible's, Performant's, and Reactive's are +// built in code. Composable's is the image exported from the mock until its +// own issue rebuilds it in code and gives the card its story. A complete +// record, so a card with no illustration fails the type check. const ILLUSTRATIONS: Record = { composable: , performant: , - reactive: , + reactive: , extensible: , }; diff --git a/apps/docs/src/components/features/reactive-gradient.ts b/apps/docs/src/components/features/reactive-gradient.ts new file mode 100644 index 00000000..4b5f7e1b --- /dev/null +++ b/apps/docs/src/components/features/reactive-gradient.ts @@ -0,0 +1,39 @@ +/** + * The Reactive card's LiquidGradient settings (SHA-216). The bands run from + * a deep violet in the upper right, where the arrow sits on a dark ground as + * it does in the mock, through violet and purple to a pale magenta in the + * lower left. The held smudge drags the bright corner up toward the arrow. + * The flow never drifts, so reactive-scene.tsx holds `speed` at a literal 0 + * and these settings leave it out. + */ +import { paletteOklch } from '@/lib/palette'; +import type { PositionedStop } from '@/lib/stops'; + +export interface ReactiveGradient { + angle: number; + repeat: number; + softness: number; + swirl: number; + scale: number; + seed: number; + stops: PositionedStop[]; +} + +// Assumed until the author tunes them at phase 1 on /dev/reactive-card. +// 50 degrees of hue, with 0.14 to 0.26 of lightness between stops. The +// darkest stop sits at the window's own lightness. +export const REACTIVE_GRADIENT: ReactiveGradient = { + // 225 runs the stops from the upper right to the lower left. + angle: 225, + repeat: 1, + softness: 1, + swirl: 0.9, + scale: 1.5, + seed: 0, + stops: [ + { color: paletteOklch.violet[2], position: 0 }, + { color: paletteOklch.violet[6], position: 0.55 }, + { color: paletteOklch.purple[9], position: 0.8 }, + { color: paletteOklch.magenta[10], position: 1 }, + ], +}; diff --git a/apps/docs/src/components/features/reactive-illustration.module.css b/apps/docs/src/components/features/reactive-illustration.module.css new file mode 100644 index 00000000..8c28e7db --- /dev/null +++ b/apps/docs/src/components/features/reactive-illustration.module.css @@ -0,0 +1,55 @@ +/* The Reactive illustration, after the Figma mock's node 939:964: a pointer + arrow over a live gradient. Every length is in the mock's pixels times + --mock-px, one mock pixel at the card window's current width. The window + is 312 mock pixels wide, and features.module.css makes it the container + that `cqw` measures, so the illustration scales like the image it + replaced at every column width. */ +.illustration { + --mock-px: calc(100cqw / 312); + + position: relative; + aspect-ratio: 312 / 309; +} + +/* The image exported from the mock at 2x. It covers the scene until the + scene's first frame, and stands in for it without WebGPU. */ +.still { + position: absolute; + inset: 0; + display: block; + width: 100%; + height: 100%; +} + +/* ---- The arrow ---- + The mock's pointer, 71.6 by 87.9, turned 76.89 degrees so it points up + and to the right. --arrow-x and --arrow-y place the point the arrow's body + trails from, and the pointer's box sits 31.56 to its left and 35.3 above + it. + + Both parts carry the whole placement themselves. A transform on a shared + parent would make that parent a group of its own, and the halo's overlay + blend would then have nothing under it to blend with. */ +.pointer { + position: absolute; + top: 0; + left: 0; + box-sizing: border-box; + width: calc(71.595 * var(--mock-px)); + height: calc(87.924 * var(--mock-px)); + rotate: 76.89deg; + translate: calc((var(--arrow-x) - 31.56) * var(--mock-px)) + calc((var(--arrow-y) - 35.3) * var(--mock-px)); +} + +/* The halo, the pointer's full box, in light gray with an overlay blend, + which lightens it over bright color and keeps it dim over dark. */ +.pointer[data-part='halo'] { + mix-blend-mode: overlay; +} + +/* The body, 58.9 by 75.2, inset in the halo's box as the mock draws it. */ +.pointer[data-part='body'] { + padding: calc(6.489 * var(--mock-px)) calc(6.49 * var(--mock-px)) calc(6.198 * var(--mock-px)) + calc(6.198 * var(--mock-px)); +} diff --git a/apps/docs/src/components/features/reactive-illustration.tsx b/apps/docs/src/components/features/reactive-illustration.tsx new file mode 100644 index 00000000..e13b774e --- /dev/null +++ b/apps/docs/src/components/features/reactive-illustration.tsx @@ -0,0 +1,133 @@ +'use client'; + +/** + * The Reactive feature card's illustration (SHA-216): the mock's pointer + * arrow over a live LiquidGradient (reactive-scene.tsx), where the browser + * has WebGPU. Anywhere else, and until the scene's first frame, the card + * shows the image exported from the mock. + */ +import Image from 'next/image'; +import { type ComponentType, type CSSProperties, useEffect, useState } from 'react'; + +import { useHasWebGpu } from '@/lib/use-has-webgpu'; + +import type { ReactiveGradient } from './reactive-gradient'; +import styles from './reactive-illustration.module.css'; +import type { ReactiveSceneProps } from './reactive-scene'; + +// --------------------------------------------- +// Loading the scene +// --------------------------------------------- + +type Scene = ComponentType; + +// The scene's component once its module has loaded, so a later mount reads +// it straight away. The module loads through a plain import() from an +// effect rather than next/dynamic, for the reason favorite-scenes.tsx gives, +// which also keeps three out of the server render. +let loadedScene: Scene | null = null; + +function loadScene(): Promise { + return import('./reactive-scene').then((module) => { + loadedScene = module.default; + + return module.default; + }); +} + +/** The scene's component once `enabled` and its module has loaded, otherwise null. */ +function useReactiveScene(enabled: boolean): Scene | null { + const [scene, setScene] = useState(() => loadedScene); + + useEffect(() => { + if (!enabled || scene) return undefined; + + let cancelled = false; + + loadScene() + .then((loaded) => { + if (!cancelled) setScene(() => loaded); + }) + .catch(() => { + // A module that fails to load leaves the card on its image. + }); + + return () => { + cancelled = true; + }; + }, [enabled, scene]); + + return enabled ? scene : null; +} + +// --------------------------------------------- +// The arrow +// --------------------------------------------- + +// Where the arrow sits in the still frame, in mock pixels, as the point its +// body trails from. reactive-illustration.module.css places the arrow from it. +type ArrowStyle = CSSProperties & { '--arrow-x': number; '--arrow-y': number }; + +const STILL_FRAME_ARROW: ArrowStyle = { '--arrow-x': 240, '--arrow-y': 101 }; + +// The mock's arrow: its body, and the light halo around it, which an +// overlay blend tints with whatever lies under it. Two elements side by +// side rather than one group, because a transform on a shared parent would +// cut the halo's blend off from the canvas beneath. +function Arrow() { + return ( + <> + + + + ); +} + +// --------------------------------------------- +// The illustration +// --------------------------------------------- + +// Hidden from screen readers: the card's title and description carry its +// message. `data-scene` says whether the live scene is on screen yet. +// `gradient` replaces the card's settings, for the tuning route only. +export function ReactiveIllustration({ gradient }: { gradient?: ReactiveGradient }) { + const Scene = useReactiveScene(useHasWebGpu()); + const [painted, setPainted] = useState(false); + + return ( +
+ {/* ShaderScene fills the illustration by itself. The arrow follows it + in the DOM, so it paints on top. */} + {Scene && setPainted(true)} />} + + {!painted && ( + + )} +
+ ); +} diff --git a/apps/docs/src/components/features/reactive-scene.tsx b/apps/docs/src/components/features/reactive-scene.tsx new file mode 100644 index 00000000..78330eaa --- /dev/null +++ b/apps/docs/src/components/features/reactive-scene.tsx @@ -0,0 +1,31 @@ +'use client'; + +/** + * The Reactive card's live scene: its LiquidGradient, held still. + * reactive-illustration.tsx loads this module with import() from an effect, + * which keeps three out of the server render (the SSR gotcha in + * docs/agents/docs-site.md). + */ +import { LiquidGradient, ShaderScene } from '@camp-dev/shaders'; + +import { REACTIVE_GRADIENT, type ReactiveGradient } from './reactive-gradient'; + +export interface ReactiveSceneProps { + /** Fires on the frame after the scene's first frame is on screen. */ + onFirstPaint: () => void; + /** Settings in place of the card's, from the /dev/reactive-card tuning route. */ + gradient?: ReactiveGradient; +} + +export default function ReactiveScene({ + onFirstPaint, + gradient = REACTIVE_GRADIENT, +}: ReactiveSceneProps) { + return ( + + {/* A literal 0 holds the flow still, so the scene parks after its + first frame. */} + + + ); +} From 4b0c46d7b840d6003e69ac4f3cec9314e2a816a4 Mon Sep 17 00:00:00 2001 From: Hunter Garrett Date: Thu, 15 Oct 2026 06:46:19 -0400 Subject: [PATCH 03/15] feat(docs): hold the Reactive card's smudge along the J The Reactive card's scene adds CursorSmudge at decay 0. After its first frame, it lays a scripted stroke along the J path with strokeAt, over the ending's 0.85 s swoop with --ease-out, so the gradient's bright lower left drags up to the arrow and stays. The image covers the card until the J lands. This is phase 1b of SHA-216's motion brief. /dev/reactive-card gains the smudge's strength, radius, and lay time, and a button that lays the J again on a fresh scene. --- .../docs/src/app/dev/reactive-card/tuning.tsx | 42 +++++++++--- .../features/reactive-illustration.module.css | 2 +- .../features/reactive-illustration.tsx | 29 +++++--- .../components/features/reactive-scene.tsx | 68 ++++++++++++++++--- .../components/features/reactive-smudge.ts | 45 ++++++++++++ 5 files changed, 154 insertions(+), 32 deletions(-) create mode 100644 apps/docs/src/components/features/reactive-smudge.ts diff --git a/apps/docs/src/app/dev/reactive-card/tuning.tsx b/apps/docs/src/app/dev/reactive-card/tuning.tsx index 5d0d4f03..a8176569 100644 --- a/apps/docs/src/app/dev/reactive-card/tuning.tsx +++ b/apps/docs/src/app/dev/reactive-card/tuning.tsx @@ -1,12 +1,12 @@ 'use client'; /** - * Temporary tuning rig for the Reactive card's gradient (SHA-216, phase 1): - * the card's window at the mock's size, beside LiquidGradient's settings. - * At the defaults gate, bake the landed values into reactive-gradient.ts and - * delete this route. + * Temporary tuning rig for the Reactive card's still frame (SHA-216, phase + * 1): the card's window at the mock's size, beside LiquidGradient's settings + * and the held smudge's. At the defaults gate, bake the landed values into + * reactive-gradient.ts and reactive-smudge.ts and delete this route. */ -import { useMemo } from 'react'; +import { useMemo, useState } from 'react'; import { ColorInput, @@ -23,21 +23,35 @@ import { import featureStyles from '@/components/features/features.module.css'; import { REACTIVE_GRADIENT, type ReactiveGradient } from '@/components/features/reactive-gradient'; import { ReactiveIllustration } from '@/components/features/reactive-illustration'; +import { REACTIVE_SMUDGE, type ReactiveSmudge } from '@/components/features/reactive-smudge'; import { createStop, newStopIndex, type PositionedStop } from '@/lib/stops'; import styles from './tuning.module.css'; +type TuningParams = ReactiveGradient & ReactiveSmudge; + // The card, and the settings it draws with as JSON, to paste back into -// reactive-gradient.ts. +// reactive-gradient.ts and reactive-smudge.ts. Laying the J again mounts a +// fresh scene, whose field starts empty. function Preview() { - const gradient = useSnapshot(); + const { strength, radius, laySeconds, ...gradient } = useSnapshot(); + const [lays, setLays] = useState(0); return (
- +
-
{JSON.stringify(gradient, null, 2)}
+ +
+        {JSON.stringify({ gradient, smudge: { strength, radius, laySeconds } }, null, 2)}
+      
); } @@ -50,6 +64,11 @@ function Controls() { +
+ + + +
@@ -84,7 +103,10 @@ function Controls() { } export default function Tuning() { - const store = useMemo(() => createControlStore(REACTIVE_GRADIENT), []); + const store = useMemo( + () => createControlStore({ ...REACTIVE_GRADIENT, ...REACTIVE_SMUDGE }), + [], + ); return ( diff --git a/apps/docs/src/components/features/reactive-illustration.module.css b/apps/docs/src/components/features/reactive-illustration.module.css index 8c28e7db..5cffc78c 100644 --- a/apps/docs/src/components/features/reactive-illustration.module.css +++ b/apps/docs/src/components/features/reactive-illustration.module.css @@ -12,7 +12,7 @@ } /* The image exported from the mock at 2x. It covers the scene until the - scene's first frame, and stands in for it without WebGPU. */ + scene has laid its smudge, and stands in for it without WebGPU. */ .still { position: absolute; inset: 0; diff --git a/apps/docs/src/components/features/reactive-illustration.tsx b/apps/docs/src/components/features/reactive-illustration.tsx index e13b774e..7a5b782c 100644 --- a/apps/docs/src/components/features/reactive-illustration.tsx +++ b/apps/docs/src/components/features/reactive-illustration.tsx @@ -2,9 +2,10 @@ /** * The Reactive feature card's illustration (SHA-216): the mock's pointer - * arrow over a live LiquidGradient (reactive-scene.tsx), where the browser - * has WebGPU. Anywhere else, and until the scene's first frame, the card - * shows the image exported from the mock. + * arrow over a live LiquidGradient with a smudge held along the J path + * (reactive-scene.tsx), where the browser has WebGPU. Anywhere else, and + * until the scene has laid the smudge, the card shows the image exported + * from the mock. */ import Image from 'next/image'; import { type ComponentType, type CSSProperties, useEffect, useState } from 'react'; @@ -14,6 +15,7 @@ import { useHasWebGpu } from '@/lib/use-has-webgpu'; import type { ReactiveGradient } from './reactive-gradient'; import styles from './reactive-illustration.module.css'; import type { ReactiveSceneProps } from './reactive-scene'; +import type { ReactiveSmudge } from './reactive-smudge'; // --------------------------------------------- // Loading the scene @@ -102,24 +104,31 @@ function Arrow() { // --------------------------------------------- // Hidden from screen readers: the card's title and description carry its -// message. `data-scene` says whether the live scene is on screen yet. -// `gradient` replaces the card's settings, for the tuning route only. -export function ReactiveIllustration({ gradient }: { gradient?: ReactiveGradient }) { +// message. `data-scene` says whether the live scene shows the still frame +// yet. `gradient` and `smudge` replace the card's settings, for the tuning +// route only. +export function ReactiveIllustration({ + gradient, + smudge, +}: { + gradient?: ReactiveGradient; + smudge?: ReactiveSmudge; +}) { const Scene = useReactiveScene(useHasWebGpu()); - const [painted, setPainted] = useState(false); + const [laid, setLaid] = useState(false); return (
{/* ShaderScene fills the illustration by itself. The arrow follows it in the DOM, so it paints on top. */} - {Scene && setPainted(true)} />} + {Scene && setLaid(true)} smudge={smudge} />} - {!painted && ( + {!laid && ( void; + /** Fires once the J's smudge is laid and the scene shows the still frame. */ + onStillFrame: () => void; /** Settings in place of the card's, from the /dev/reactive-card tuning route. */ gradient?: ReactiveGradient; + /** Settings in place of the card's, from the /dev/reactive-card tuning route. */ + smudge?: ReactiveSmudge; } export default function ReactiveScene({ - onFirstPaint, + onStillFrame, gradient = REACTIVE_GRADIENT, + smudge = REACTIVE_SMUDGE, }: ReactiveSceneProps) { + const progress = useMotionValue(0); + const point = useTransform(progress, pointOnJ); + const [laying, setLaying] = useState(false); + // The latest callback, so a new one from the parent doesn't restart the stroke. + const onStillFrameRef = useRef(onStillFrame); + + useEffect(() => { + onStillFrameRef.current = onStillFrame; + }); + + // The scene attaches the point in an effect of its own when `laying` + // turns on, reading the J's foot as the stroke's start. A child's effects + // run before its parent's, so the stroke never runs ahead of the attach. + useEffect(() => { + if (!laying) return undefined; + const controls = animate(progress, 1, { duration: smudge.laySeconds, ease: EASE_OUT }); + + void controls.then(() => { + setLaying(false); + onStillFrameRef.current(); + }); + + return () => controls.stop(); + }, [laying, progress, smudge.laySeconds]); + + // The stroke starts on the first frame, once the scene and its cursor + // input exist, so none of it is lost to the renderer starting up. A + // rebuilt renderer draws a first frame of its own, and lays the J again. + const layJ = () => { + progress.set(0); + setLaying(true); + }; + return ( - - {/* A literal 0 holds the flow still, so the scene parks after its - first frame. */} + + {/* A literal 0 holds the flow still, so the scene parks whenever + nothing strokes. */} + {/* Decay 0 holds the smudge for good. */} + ); } diff --git a/apps/docs/src/components/features/reactive-smudge.ts b/apps/docs/src/components/features/reactive-smudge.ts new file mode 100644 index 00000000..4a69c1dc --- /dev/null +++ b/apps/docs/src/components/features/reactive-smudge.ts @@ -0,0 +1,45 @@ +/** + * The Reactive card's held smudge (SHA-216): the J path its scripted stroke + * follows, and CursorSmudge's settings. The stroke drags the gradient's + * bright lower left up along the J to the arrow, and decay 0 holds it as the + * still frame. + */ + +export interface ReactiveSmudge { + /** CursorSmudge's strength: the furthest the stroke pulls, in canvas heights. */ + strength: number; + /** CursorSmudge's radius: how wide the stroke pulls, in canvas heights. */ + radius: number; + /** How long the stroke takes to run the J, in seconds. */ + laySeconds: number; +} + +// Assumed until the author tunes them at phase 1b on /dev/reactive-card. +// 0.85 s is the ending's swoop, which lays the same smudge. +export const REACTIVE_SMUDGE: ReactiveSmudge = { + strength: 0.12, + radius: 0.18, + laySeconds: 0.85, +}; + +// The J, as a cubic Bézier in 0..1 canvas units from the top-left: up from +// below the bottom edge near the left corner, bending over to the arrow at +// (240, 101) of the mock's 312 by 309. +const J_PATH = [ + [0.12, 1.15], + [0.15, 0.55], + [0.45, 0.35], + [240 / 312, 101 / 309], +] as const; + +/** The point `t` of the way along the J, from 0 at its foot to 1 at the arrow. */ +export function pointOnJ(t: number): [number, number] { + const [p0, p1, p2, p3] = J_PATH; + const u = 1 - t; + const weights = [u * u * u, 3 * u * u * t, 3 * u * t * t, t * t * t] as const; + + return [ + weights[0] * p0[0] + weights[1] * p1[0] + weights[2] * p2[0] + weights[3] * p3[0], + weights[0] * p0[1] + weights[1] * p1[1] + weights[2] * p2[1] + weights[3] * p3[1], + ]; +} From 02d00a1ca80c44caa6ad463ea7013a1218b3d915 Mon Sep 17 00:00:00 2001 From: Hunter Garrett Date: Thu, 15 Oct 2026 06:54:11 -0400 Subject: [PATCH 04/15] refactor(docs): settle the Reactive card's still frame The author picked the held smudge's look at phase 1b: strength 0.25 and radius 0.24, about twice CursorSmudge's defaults, so the streak reads as the mock's trail. With the gradient approved at phase 1a, the still frame is settled, so the temporary /dev/reactive-card tuning route goes, along with the props that let it override the card's settings. --- .../src/app/dev/reactive-card/page.dev.tsx | 12 -- .../app/dev/reactive-card/tuning.module.css | 25 ---- .../docs/src/app/dev/reactive-card/tuning.tsx | 120 ------------------ .../components/features/reactive-gradient.ts | 7 +- .../features/reactive-illustration.tsx | 15 +-- .../components/features/reactive-scene.tsx | 25 ++-- .../components/features/reactive-smudge.ts | 11 +- 7 files changed, 22 insertions(+), 193 deletions(-) delete mode 100644 apps/docs/src/app/dev/reactive-card/page.dev.tsx delete mode 100644 apps/docs/src/app/dev/reactive-card/tuning.module.css delete mode 100644 apps/docs/src/app/dev/reactive-card/tuning.tsx diff --git a/apps/docs/src/app/dev/reactive-card/page.dev.tsx b/apps/docs/src/app/dev/reactive-card/page.dev.tsx deleted file mode 100644 index bf1e2400..00000000 --- a/apps/docs/src/app/dev/reactive-card/page.dev.tsx +++ /dev/null @@ -1,12 +0,0 @@ -'use client'; - -import dynamic from 'next/dynamic'; - -// The rig loads client-only, like every probe. The card's scene already -// loads three through import(), but the page has nothing to server-render. -// Dev route: invisible to production builds. -const Tuning = dynamic(() => import('./tuning'), { ssr: false }); - -export default function ReactiveCardPage() { - return ; -} diff --git a/apps/docs/src/app/dev/reactive-card/tuning.module.css b/apps/docs/src/app/dev/reactive-card/tuning.module.css deleted file mode 100644 index c946b719..00000000 --- a/apps/docs/src/app/dev/reactive-card/tuning.module.css +++ /dev/null @@ -1,25 +0,0 @@ -.page { - padding: var(--spacing-6); -} - -.preview { - display: flex; - flex-direction: column; - gap: var(--spacing-6); - align-items: flex-start; -} - -/* The card's window at the mock's 312 CSS pixels. */ -.window { - width: 312px; -} - -/* The settings as JSON, to paste back into reactive-gradient.ts. */ -.values { - margin: 0; - color: var(--white); - font-family: var(--font-mono); - font-size: var(--font-size-xs); - line-height: 1.5; - user-select: all; -} diff --git a/apps/docs/src/app/dev/reactive-card/tuning.tsx b/apps/docs/src/app/dev/reactive-card/tuning.tsx deleted file mode 100644 index a8176569..00000000 --- a/apps/docs/src/app/dev/reactive-card/tuning.tsx +++ /dev/null @@ -1,120 +0,0 @@ -'use client'; - -/** - * Temporary tuning rig for the Reactive card's still frame (SHA-216, phase - * 1): the card's window at the mock's size, beside LiquidGradient's settings - * and the held smudge's. At the defaults gate, bake the landed values into - * reactive-gradient.ts and reactive-smudge.ts and delete this route. - */ -import { useMemo, useState } from 'react'; - -import { - ColorInput, - ControlPanel, - ControlsProvider, - createControlStore, - DemoLayout, - ListInput, - NumberInput, - Section, - SliderInput, - useSnapshot, -} from '@/components/controls'; -import featureStyles from '@/components/features/features.module.css'; -import { REACTIVE_GRADIENT, type ReactiveGradient } from '@/components/features/reactive-gradient'; -import { ReactiveIllustration } from '@/components/features/reactive-illustration'; -import { REACTIVE_SMUDGE, type ReactiveSmudge } from '@/components/features/reactive-smudge'; -import { createStop, newStopIndex, type PositionedStop } from '@/lib/stops'; - -import styles from './tuning.module.css'; - -type TuningParams = ReactiveGradient & ReactiveSmudge; - -// The card, and the settings it draws with as JSON, to paste back into -// reactive-gradient.ts and reactive-smudge.ts. Laying the J again mounts a -// fresh scene, whose field starts empty. -function Preview() { - const { strength, radius, laySeconds, ...gradient } = useSnapshot(); - const [lays, setLays] = useState(0); - - return ( -
-
- -
- -
-        {JSON.stringify({ gradient, smudge: { strength, radius, laySeconds } }, null, 2)}
-      
-
- ); -} - -function Controls() { - return ( - -
- - - -
-
- - - -
-
- - - -
- - createItem={createStop} - insertIndex={newStopIndex} - itemLabel="stop" - label="Color stops" - max={6} - min={2} - path="stops" - > - {() => ( - <> - - - - )} - -
- ); -} - -export default function Tuning() { - const store = useMemo( - () => createControlStore({ ...REACTIVE_GRADIENT, ...REACTIVE_SMUDGE }), - [], - ); - - return ( - -
- }> - - -
-
- ); -} diff --git a/apps/docs/src/components/features/reactive-gradient.ts b/apps/docs/src/components/features/reactive-gradient.ts index 4b5f7e1b..c2c48847 100644 --- a/apps/docs/src/components/features/reactive-gradient.ts +++ b/apps/docs/src/components/features/reactive-gradient.ts @@ -9,7 +9,7 @@ import { paletteOklch } from '@/lib/palette'; import type { PositionedStop } from '@/lib/stops'; -export interface ReactiveGradient { +interface ReactiveGradient { angle: number; repeat: number; softness: number; @@ -19,9 +19,8 @@ export interface ReactiveGradient { stops: PositionedStop[]; } -// Assumed until the author tunes them at phase 1 on /dev/reactive-card. -// 50 degrees of hue, with 0.14 to 0.26 of lightness between stops. The -// darkest stop sits at the window's own lightness. +// 50 degrees of hue across the stops, with 0.14 to 0.26 of lightness +// between each pair. The darkest stop sits at the window's own lightness. export const REACTIVE_GRADIENT: ReactiveGradient = { // 225 runs the stops from the upper right to the lower left. angle: 225, diff --git a/apps/docs/src/components/features/reactive-illustration.tsx b/apps/docs/src/components/features/reactive-illustration.tsx index 7a5b782c..6d49d521 100644 --- a/apps/docs/src/components/features/reactive-illustration.tsx +++ b/apps/docs/src/components/features/reactive-illustration.tsx @@ -12,10 +12,8 @@ import { type ComponentType, type CSSProperties, useEffect, useState } from 'rea import { useHasWebGpu } from '@/lib/use-has-webgpu'; -import type { ReactiveGradient } from './reactive-gradient'; import styles from './reactive-illustration.module.css'; import type { ReactiveSceneProps } from './reactive-scene'; -import type { ReactiveSmudge } from './reactive-smudge'; // --------------------------------------------- // Loading the scene @@ -105,15 +103,8 @@ function Arrow() { // Hidden from screen readers: the card's title and description carry its // message. `data-scene` says whether the live scene shows the still frame -// yet. `gradient` and `smudge` replace the card's settings, for the tuning -// route only. -export function ReactiveIllustration({ - gradient, - smudge, -}: { - gradient?: ReactiveGradient; - smudge?: ReactiveSmudge; -}) { +// yet. +export function ReactiveIllustration() { const Scene = useReactiveScene(useHasWebGpu()); const [laid, setLaid] = useState(false); @@ -126,7 +117,7 @@ export function ReactiveIllustration({ > {/* ShaderScene fills the illustration by itself. The arrow follows it in the DOM, so it paints on top. */} - {Scene && setLaid(true)} smudge={smudge} />} + {Scene && setLaid(true)} />} {!laid && ( void; - /** Settings in place of the card's, from the /dev/reactive-card tuning route. */ - gradient?: ReactiveGradient; - /** Settings in place of the card's, from the /dev/reactive-card tuning route. */ - smudge?: ReactiveSmudge; } -export default function ReactiveScene({ - onStillFrame, - gradient = REACTIVE_GRADIENT, - smudge = REACTIVE_SMUDGE, -}: ReactiveSceneProps) { +export default function ReactiveScene({ onStillFrame }: ReactiveSceneProps) { const progress = useMotionValue(0); const point = useTransform(progress, pointOnJ); const [laying, setLaying] = useState(false); @@ -47,7 +39,10 @@ export default function ReactiveScene({ // run before its parent's, so the stroke never runs ahead of the attach. useEffect(() => { if (!laying) return undefined; - const controls = animate(progress, 1, { duration: smudge.laySeconds, ease: EASE_OUT }); + const controls = animate(progress, 1, { + duration: REACTIVE_SMUDGE.laySeconds, + ease: EASE_OUT, + }); void controls.then(() => { setLaying(false); @@ -55,7 +50,7 @@ export default function ReactiveScene({ }); return () => controls.stop(); - }, [laying, progress, smudge.laySeconds]); + }, [laying, progress]); // The stroke starts on the first frame, once the scene and its cursor // input exist, so none of it is lost to the renderer starting up. A @@ -69,9 +64,9 @@ export default function ReactiveScene({ {/* A literal 0 holds the flow still, so the scene parks whenever nothing strokes. */} - + {/* Decay 0 holds the smudge for good. */} - + ); } diff --git a/apps/docs/src/components/features/reactive-smudge.ts b/apps/docs/src/components/features/reactive-smudge.ts index 4a69c1dc..7d577660 100644 --- a/apps/docs/src/components/features/reactive-smudge.ts +++ b/apps/docs/src/components/features/reactive-smudge.ts @@ -5,7 +5,7 @@ * still frame. */ -export interface ReactiveSmudge { +interface ReactiveSmudge { /** CursorSmudge's strength: the furthest the stroke pulls, in canvas heights. */ strength: number; /** CursorSmudge's radius: how wide the stroke pulls, in canvas heights. */ @@ -14,11 +14,12 @@ export interface ReactiveSmudge { laySeconds: number; } -// Assumed until the author tunes them at phase 1b on /dev/reactive-card. -// 0.85 s is the ending's swoop, which lays the same smudge. +// The author picked this strength and radius at phase 1b, about twice +// CursorSmudge's defaults, so the streak reads as the mock's trail. 0.85 s +// is the ending's swoop, which lays the same smudge. export const REACTIVE_SMUDGE: ReactiveSmudge = { - strength: 0.12, - radius: 0.18, + strength: 0.25, + radius: 0.24, laySeconds: 0.85, }; From 30913ca7f6c0bd78d94447d2ccf6112fe2945201 Mon Sep 17 00:00:00 2001 From: Hunter Garrett Date: Thu, 15 Oct 2026 07:06:36 -0400 Subject: [PATCH 05/15] refactor(docs): share the hero pause and let a held story follow the pointer The favorites' hook that pauses the homepage hero moves into hero-pause.ts as usePauseHeroWhile, so a feature card with a live story can pause the hero too. useHeldStory takes two options the Reactive card needs: enabled, which keeps a card on its still frame until its live scene shows it, and onPointerMove, which hands the illustration each pointer move over the card. The Extensible and Performant cards pass neither and don't change. --- .../components/favorites/favorites-list.tsx | 26 ++------- apps/docs/src/components/features/story.tsx | 53 ++++++++++++++----- .../components/home-hero/hero-pause.test.ts | 38 ++++++++++--- .../src/components/home-hero/hero-pause.ts | 45 ++++++++++++---- 4 files changed, 111 insertions(+), 51 deletions(-) diff --git a/apps/docs/src/components/favorites/favorites-list.tsx b/apps/docs/src/components/favorites/favorites-list.tsx index 88497f7f..2ba374c3 100644 --- a/apps/docs/src/components/favorites/favorites-list.tsx +++ b/apps/docs/src/components/favorites/favorites-list.tsx @@ -14,7 +14,7 @@ import { type CSSProperties, type RefObject, useEffect, useRef, useState } from import { ShaderPoster } from '@camp-dev/shaders/poster'; -import { useHeroPause } from '@/components/home-hero/hero-pause'; +import { usePauseHeroWhile } from '@/components/home-hero/hero-pause'; import type { Favorite, FavoriteSlug } from '@/content/homepage'; import { useCanHover } from '@/lib/use-can-hover'; import { useHasWebGpu } from '@/lib/use-has-webgpu'; @@ -73,7 +73,9 @@ export function FavoritesList({ : (hoveredSlug ?? focusedSlug); usePreloadScenesNearView(listRef, canGoLive); - usePauseHeroWhilePlaying(canGoLive && playingSlug !== null); + // A favorite plays only once the gate below opens, so with no WebGPU the + // hero keeps drawing. + usePauseHeroWhile(canGoLive && playingSlug !== null); const setEngaged = (slug: FavoriteSlug, engagement: Engagement, engaged: boolean) => { const setSlug = engagement === 'pointer' ? setHoveredSlug : setFocusedSlug; @@ -299,26 +301,6 @@ function usePreloadScenesNearView(listRef: RefObject, e }, [listRef, enabled]); } -// --------------------------------------------- -// Pausing the hero while a favorite plays -// --------------------------------------------- - -/** - * Pauses the homepage hero while a favorite plays, for the reason - * components/home-hero/hero-pause.ts gives. A favorite plays only once the - * gate below opens, so with no WebGPU the hero keeps drawing. - */ -function usePauseHeroWhilePlaying(playing: boolean) { - const heroPause = useHeroPause(); - - useEffect(() => { - if (!playing || !heroPause) return undefined; - heroPause.setPaused(true); - - return () => heroPause.setPaused(false); - }, [playing, heroPause]); -} - // --------------------------------------------- // The gate: a mouse or trackpad, and a WebGPU adapter // --------------------------------------------- diff --git a/apps/docs/src/components/features/story.tsx b/apps/docs/src/components/features/story.tsx index fa713741..776108ab 100644 --- a/apps/docs/src/components/features/story.tsx +++ b/apps/docs/src/components/features/story.tsx @@ -6,7 +6,8 @@ * Touch, keyboard, and reduced motion leave the card on its still frame. * StoryCard is the card. An illustration takes one of two story shapes: * useStory repeats a play while the pointer stays, and useHeldStory holds - * while the pointer stays, then plays its ending. + * while the pointer stays, then plays its ending. A held story can follow + * the pointer, and can wait for its live scene. */ import { createContext, @@ -52,23 +53,29 @@ export function StoryCard({ className, children }: { className?: string; childre /** * Follows the pointer on the illustration's StoryCard, behind the site's - * hover gate, and calls `onEnter` and any `onLeave` as it comes and goes. Only a - * pointer that passes the gate counts, and a touch never does, even on a - * touch-screen laptop that passes the gate. Under reduced motion nothing - * counts. Returns whether the pointer is on the card now, which only the - * ends of a story's parts read, so it lives in a ref rather than in state. + * hover gate, and calls `onEnter` and any `onLeave` as it comes and goes, + * and any `onMove` with each move over the card, starting with the move + * the pointer enters on. Only a pointer that passes the gate counts, and a + * touch never does, even on a touch-screen laptop that passes the gate. + * Under reduced motion, or while `enabled` is false, nothing counts. + * Returns whether the pointer is on the card now, which only the ends of a + * story's parts read, so it lives in a ref rather than in state. */ -function useCardPointer(onEnter: () => void, onLeave?: () => void): RefObject { +function useCardPointer( + onEnter: () => void, + onLeave?: () => void, + { enabled = true, onMove }: { enabled?: boolean; onMove?: (event: PointerEvent) => void } = {}, +): RefObject { const cardRef = useContext(CardContext); const canHover = useCanHover(); const reducedMotion = useReducedMotion() === true; const pointerOnCardRef = useRef(false); // The latest callbacks, so the listeners below call the current ones // without being added again on every render. - const callbacksRef = useRef({ onEnter, onLeave }); + const callbacksRef = useRef({ onEnter, onLeave, onMove }); useEffect(() => { - callbacksRef.current = { onEnter, onLeave }; + callbacksRef.current = { onEnter, onLeave, onMove }; }); // Listens to the card itself, so the whole card is the hover target, not @@ -76,13 +83,18 @@ function useCardPointer(onEnter: () => void, onLeave?: () => void): RefObject { const card = cardRef?.current; - if (!card || !canHover || reducedMotion) return undefined; + if (!card || !canHover || reducedMotion || !enabled) return undefined; const onPointerEnter = (event: PointerEvent) => { if (event.pointerType === 'touch') return; pointerOnCardRef.current = true; + callbacksRef.current.onMove?.(event); callbacksRef.current.onEnter(); }; + const onPointerMove = (event: PointerEvent) => { + if (event.pointerType === 'touch') return; + callbacksRef.current.onMove?.(event); + }; const onPointerLeave = (event: PointerEvent) => { if (event.pointerType === 'touch') return; pointerOnCardRef.current = false; @@ -90,12 +102,14 @@ function useCardPointer(onEnter: () => void, onLeave?: () => void): RefObject { card.removeEventListener('pointerenter', onPointerEnter); + card.removeEventListener('pointermove', onPointerMove); card.removeEventListener('pointerleave', onPointerLeave); if (pointerOnCardRef.current) { @@ -103,7 +117,7 @@ function useCardPointer(onEnter: () => void, onLeave?: () => void): RefObject void; } +/** How an illustration with a held story takes part in it. */ +export interface HeldStoryOptions { + /** + * False keeps the card on its still frame, ignoring the pointer, as a + * card does until its live scene shows the still frame. Defaults to true. + */ + enabled?: boolean; + /** + * Called with each pointer move over the card, starting with the move the + * pointer enters on, for a story that follows the pointer. + */ + onPointerMove?: (event: PointerEvent) => void; +} + /** * The held story of the illustration that calls it, played by a hover on * its StoryCard. Its ending runs to the still frame once it starts. A * pointer that comes back during the ending lets it land, then a fresh play * starts. */ -export function useHeldStory(): HeldStory { +export function useHeldStory({ enabled, onPointerMove }: HeldStoryOptions = {}): HeldStory { const [story, setStory] = useState<{ stage: HeldStage; plays: number }>({ stage: 'still', plays: 0, @@ -200,6 +228,7 @@ export function useHeldStory(): HeldStory { setStory((current) => current.stage === 'holding' ? { ...current, stage: 'ending' } : current, ), + { enabled, onMove: onPointerMove }, ); // Stable, so an illustration can list it in an effect's deps without diff --git a/apps/docs/src/components/home-hero/hero-pause.test.ts b/apps/docs/src/components/home-hero/hero-pause.test.ts index 732b003f..b2e9ae5a 100644 --- a/apps/docs/src/components/home-hero/hero-pause.test.ts +++ b/apps/docs/src/components/home-hero/hero-pause.test.ts @@ -9,22 +9,48 @@ describe('createHeroPause', () => { it('pauses the hero, then lets it play again', () => { const heroPause = createHeroPause(); + const release = heroPause.pause(); - heroPause.setPaused(true); expect(heroPause.isPaused()).toBe(true); - heroPause.setPaused(false); + release(); expect(heroPause.isPaused()).toBe(false); }); + // A playing favorite and a feature card's story can overlap, and the + // first to stop must not resume the hero under the other. + it('keeps the hero paused until every pause is released', () => { + const heroPause = createHeroPause(); + const releaseFavorite = heroPause.pause(); + const releaseCard = heroPause.pause(); + + releaseFavorite(); + expect(heroPause.isPaused()).toBe(true); + releaseCard(); + expect(heroPause.isPaused()).toBe(false); + }); + + it('counts a release only once', () => { + const heroPause = createHeroPause(); + const releaseFavorite = heroPause.pause(); + + heroPause.pause(); + releaseFavorite(); + releaseFavorite(); + expect(heroPause.isPaused()).toBe(true); + }); + it('tells subscribers only when the hero pauses or resumes', () => { const heroPause = createHeroPause(); const onChange = vi.fn(); heroPause.subscribe(onChange); - heroPause.setPaused(true); - heroPause.setPaused(true); + const releaseFirst = heroPause.pause(); + const releaseSecond = heroPause.pause(); + + expect(onChange).toHaveBeenCalledTimes(1); + releaseFirst(); expect(onChange).toHaveBeenCalledTimes(1); - heroPause.setPaused(false); + releaseSecond(); expect(onChange).toHaveBeenCalledTimes(2); }); @@ -34,7 +60,7 @@ describe('createHeroPause', () => { const unsubscribe = heroPause.subscribe(onChange); unsubscribe(); - heroPause.setPaused(true); + heroPause.pause(); expect(onChange).not.toHaveBeenCalled(); }); }); diff --git a/apps/docs/src/components/home-hero/hero-pause.ts b/apps/docs/src/components/home-hero/hero-pause.ts index 82b9f9b0..68bfb772 100644 --- a/apps/docs/src/components/home-hero/hero-pause.ts +++ b/apps/docs/src/components/home-hero/hero-pause.ts @@ -2,13 +2,18 @@ * Lets what rides in the homepage hero's pin pause the hero's scene. A * playing favorite pauses it (components/favorites/favorites-list.tsx): at * 2x on an M1 Max, the hero and Voronoi, the most expensive favorite, took - * about 7 ms of GPU time a frame together, over SHA-203's 4 ms limit. + * about 7 ms of GPU time a frame together, over SHA-203's 4 ms limit. A + * feature card's live story pauses it too (components/features). */ -import { createContext, useContext, useSyncExternalStore } from 'react'; +import { createContext, useContext, useEffect, useSyncExternalStore } from 'react'; export interface HeroPause { - /** Pauses the hero's scene, or lets it play again. */ - setPaused: (paused: boolean) => void; + /** + * Pauses the hero's scene, and returns the release. The hero stays paused + * until every pause is released, so a favorite and a feature card's story + * that overlap never resume it under each other. A release counts once. + */ + pause: () => () => void; /** Calls `onChange` whenever the hero pauses or resumes, and returns the unsubscribe. */ subscribe: (onChange: () => void) => () => void; isPaused: () => boolean; @@ -16,21 +21,32 @@ export interface HeroPause { /** The hero creates one and reads it through useIsHeroPaused, so a pause re-renders only its scene. */ export function createHeroPause(): HeroPause { - let paused = false; + let pauses = 0; const listeners = new Set<() => void>(); + const notify = () => { + for (const listener of listeners) listener(); + }; return { - setPaused(next) { - if (next === paused) return; - paused = next; - for (const listener of listeners) listener(); + pause() { + let released = false; + + pauses += 1; + if (pauses === 1) notify(); + + return () => { + if (released) return; + released = true; + pauses -= 1; + if (pauses === 0) notify(); + }; }, subscribe(onChange) { listeners.add(onChange); return () => listeners.delete(onChange); }, - isPaused: () => paused, + isPaused: () => pauses > 0, }; } @@ -45,6 +61,13 @@ export function useIsHeroPaused(heroPause: HeroPause): boolean { /** The hero's pause, for what rides in its pin. Null outside the hero, where there is nothing to pause. */ export const HeroPauseContext = createContext(null); -export function useHeroPause() { +function useHeroPause() { return useContext(HeroPauseContext); } + +/** Pauses the hero while `paused` holds, from inside the hero's pin. */ +export function usePauseHeroWhile(paused: boolean) { + const heroPause = useHeroPause(); + + useEffect(() => (paused && heroPause ? heroPause.pause() : undefined), [paused, heroPause]); +} From 97fc1ed0832a36394d514d1ce7b692b1c5103187 Mon Sep 17 00:00:00 2001 From: Hunter Garrett Date: Thu, 15 Oct 2026 07:06:36 -0400 Subject: [PATCH 06/15] feat(docs): hand the Reactive card's arrow to the pointer on hover Phase 2 of SHA-216's motion brief. When a mouse enters the card, the arrow flicks off the window along its heading over 0.25 s, then flies back in over 0.35 s from past the edge nearest where the pointer came in, landing with its tip on the pointer. Its tip lays a scripted smudge on both flights. From then on it follows the pointer 1:1, turning on a 0.2 s spring to point the way the pointer moves, and the window clips it past its edge. The real cursor hides over the illustration once the arrow lands. CursorSmudge's decay rises to 0.4, so the J ages out and each stroke eases back, and the homepage hero pauses while the story plays. reactive-arrow.ts works out the arrow's poses, its heading, and where it flies back in from. Leaving the card snaps the arrow back for now. Phase 3 brings the ending's swoop, which lays the J again. --- .../features/reactive-arrow.test.ts | 71 ++++ .../src/components/features/reactive-arrow.ts | 127 +++++++ .../features/reactive-illustration.module.css | 21 +- .../features/reactive-illustration.tsx | 349 ++++++++++++++++-- .../components/features/reactive-scene.tsx | 28 +- 5 files changed, 551 insertions(+), 45 deletions(-) create mode 100644 apps/docs/src/components/features/reactive-arrow.test.ts create mode 100644 apps/docs/src/components/features/reactive-arrow.ts diff --git a/apps/docs/src/components/features/reactive-arrow.test.ts b/apps/docs/src/components/features/reactive-arrow.test.ts new file mode 100644 index 00000000..f83b0d01 --- /dev/null +++ b/apps/docs/src/components/features/reactive-arrow.test.ts @@ -0,0 +1,71 @@ +// @vitest-environment node +import { describe, expect, it } from 'vitest'; + +import { + angleForHeading, + arrowAtPointer, + arrowTip, + entryPoint, + headingToward, + STILL_FRAME_ARROW, +} from './reactive-arrow'; + +describe('the Reactive arrow', () => { + // The mock's export at 2x draws the arrow's tip at about (548, 148). + it('puts the still frame tip where the mock draws it', () => { + const [x, y] = arrowTip(STILL_FRAME_ARROW); + + expect(Math.abs(x - 274)).toBeLessThan(3); + expect(Math.abs(y - 74)).toBeLessThan(3); + }); + + it('keeps the tip on the pointer at any heading', () => { + for (const heading of [-150, -40, 0, 90, 200]) { + const [x, y] = arrowTip(arrowAtPointer([120, 200], angleForHeading(heading))); + + expect(x).toBeCloseTo(120); + expect(y).toBeCloseTo(200); + } + }); + + // In the mock the arrow points up and to the right, about 40 degrees + // above the horizontal, which is a heading of about -40 with y down. + it('turns the arrow to the mock angle for the still frame heading', () => { + expect(Math.abs(angleForHeading(-40) - STILL_FRAME_ARROW.angle)).toBeLessThan(2); + }); + + describe('turning toward a move', () => { + it('heads the way the move goes', () => { + expect(headingToward(0, 0, 10)).toBeCloseTo(90); + expect(headingToward(10, -10, 0)).toBeCloseTo(180); + }); + + it('turns the short way round, past a full turn when it has to', () => { + // At 170 degrees, a move toward -170 is 20 degrees on, not 340 back. + const [dx, dy] = [Math.cos((-170 * Math.PI) / 180), Math.sin((-170 * Math.PI) / 180)]; + + expect(headingToward(170, dx, dy)).toBeCloseTo(190); + expect(headingToward(-190, dx, dy)).toBeCloseTo(-170); + }); + }); + + // The window is 312 by 309 mock pixels. The arrow starts its flight back + // in 90 past the edge, out of sight. + describe('where the arrow flies back in from', () => { + it('comes in past the edge the pointer came in over', () => { + expect(entryPoint([100, 340])).toEqual([100, 399]); + expect(entryPoint([-10, 150])).toEqual([-90, 150]); + expect(entryPoint([200, -20])).toEqual([200, -90]); + expect(entryPoint([330, 50])).toEqual([402, 50]); + }); + + it('comes in past the nearest edge for a pointer already inside', () => { + expect(entryPoint([20, 150])).toEqual([-90, 150]); + expect(entryPoint([150, 300])).toEqual([150, 399]); + }); + + it('slides along the edge for a pointer that came in past a corner', () => { + expect(entryPoint([-40, -10])).toEqual([-90, 0]); + }); + }); +}); diff --git a/apps/docs/src/components/features/reactive-arrow.ts b/apps/docs/src/components/features/reactive-arrow.ts new file mode 100644 index 00000000..e3d5738d --- /dev/null +++ b/apps/docs/src/components/features/reactive-arrow.ts @@ -0,0 +1,127 @@ +/** + * The Reactive card's arrow (SHA-216): its pose in the still frame, its + * pose while it follows the pointer, pointing the way the pointer moves, + * and where its tip is in any pose. Lengths are mock pixels in the 312 by + * 309 illustration, angles are degrees clockwise, as CSS turns them, and + * reactive-illustration.module.css draws the arrow from a pose. + */ + +/** The illustration's size in mock pixels, which everything here measures in. */ +export const MOCK_WIDTH = 312; +export const MOCK_HEIGHT = 309; + +// How far past the window's edge the arrow starts its flight back in: far +// enough that none of it shows. +const ENTRY_MARGIN = 90; + +/** Where the arrow is: the top-left of its box before it turns, and how far it turns, in degrees. */ +export interface ArrowPose { + x: number; + y: number; + angle: number; +} + +// The arrow's box: its halo's full size in the mock. CSS turns the box +// about its center. +const BOX = [71.595, 87.924] as const; + +// The tip, a cursor's hotspot, in the unturned box: the body's top corner, +// inset by the halo's padding. +const TIP = [8.6, 8.09] as const; + +// The notch at the arrow's tail, in the unturned box. The arrow points +// along the line from the notch to the tip. +const NOTCH = [35.38, 62.16] as const; + +// The heading the unturned arrow points along, in degrees with y down: +// up and a little to the left. +const UNTURNED_HEADING = (Math.atan2(TIP[1] - NOTCH[1], TIP[0] - NOTCH[0]) * 180) / Math.PI; + +const toRadians = (degrees: number) => (degrees * Math.PI) / 180; + +/** The mock's pose: at the upper right, turned to point up and to the right. */ +export const STILL_FRAME_ARROW: ArrowPose = { x: 208.44, y: 65.7, angle: 76.89 }; + +/** How far to turn the arrow so it points along `heading`. */ +export function angleForHeading(heading: number): number { + return heading - UNTURNED_HEADING; +} + +/** The still frame's heading: up and to the right, as the mock draws it. */ +export const STILL_FRAME_HEADING = STILL_FRAME_ARROW.angle + UNTURNED_HEADING; + +// Where the tip sits from the box's center once the box turns by `angle`. +function tipFromCenter(angle: number): [number, number] { + const fromCenterX = TIP[0] - BOX[0] / 2; + const fromCenterY = TIP[1] - BOX[1] / 2; + const turn = toRadians(angle); + + return [ + fromCenterX * Math.cos(turn) - fromCenterY * Math.sin(turn), + fromCenterX * Math.sin(turn) + fromCenterY * Math.cos(turn), + ]; +} + +/** The pose that turns the arrow by `angle` with its tip on `pointer`. */ +export function arrowAtPointer( + [pointerX, pointerY]: readonly [number, number], + angle: number, +): ArrowPose { + const [tipX, tipY] = tipFromCenter(angle); + + return { x: pointerX - BOX[0] / 2 - tipX, y: pointerY - BOX[1] / 2 - tipY, angle }; +} + +/** Where the tip is in `pose`. */ +export function arrowTip({ x, y, angle }: ArrowPose): [number, number] { + const [tipX, tipY] = tipFromCenter(angle); + + return [x + BOX[0] / 2 + tipX, y + BOX[1] / 2 + tipY]; +} + +/** + * The heading of a move by (`dx`, `dy`), counted on from `current` so the + * turn to it is never more than half a turn. A heading can run past 180, + * so a spring that follows it always turns the short way round. + */ +export function headingToward(current: number, dx: number, dy: number): number { + const target = (Math.atan2(dy, dx) * 180) / Math.PI; + const turn = ((((target - current) % 360) + 540) % 360) - 180; + + return current + turn; +} + +/** + * Where the arrow starts its flight back in to `pointer`: past the edge of + * the window nearest to it, out of sight. A pointer outside the window is + * nearest the edge it came in over, and one past a corner slides along the + * edge to the corner. + */ +export function entryPoint([x, y]: readonly [number, number]): [number, number] { + const alongX = Math.min(Math.max(x, 0), MOCK_WIDTH); + const alongY = Math.min(Math.max(y, 0), MOCK_HEIGHT); + // How far inside each edge the pointer is, negative past it. + const edges = [ + { inside: x, point: [-ENTRY_MARGIN, alongY] }, + { inside: MOCK_WIDTH - x, point: [MOCK_WIDTH + ENTRY_MARGIN, alongY] }, + { inside: y, point: [alongX, -ENTRY_MARGIN] }, + { inside: MOCK_HEIGHT - y, point: [alongX, MOCK_HEIGHT + ENTRY_MARGIN] }, + ] as const; + const nearest = edges.reduce((best, edge) => (edge.inside < best.inside ? edge : best)); + + return [nearest.point[0], nearest.point[1]]; +} + +/** The point `distance` on from `from` along `heading`. */ +export function pointAlong( + [x, y]: readonly [number, number], + heading: number, + distance: number, +): [number, number] { + const turn = toRadians(heading); + + return [x + Math.cos(turn) * distance, y + Math.sin(turn) * distance]; +} + +/** Where the tip sits in the still frame. */ +export const STILL_FRAME_TIP = arrowTip(STILL_FRAME_ARROW); diff --git a/apps/docs/src/components/features/reactive-illustration.module.css b/apps/docs/src/components/features/reactive-illustration.module.css index 5cffc78c..aca93b92 100644 --- a/apps/docs/src/components/features/reactive-illustration.module.css +++ b/apps/docs/src/components/features/reactive-illustration.module.css @@ -21,11 +21,19 @@ height: 100%; } +/* Once the arrow lands on the pointer and follows it, it stands in for the + cursor, so the real one hides over the illustration. While the arrow is + still flying in, the real one stays, so the visitor never loses it. */ +.illustration[data-arrow='following'] { + cursor: none; +} + /* ---- The arrow ---- - The mock's pointer, 71.6 by 87.9, turned 76.89 degrees so it points up - and to the right. --arrow-x and --arrow-y place the point the arrow's body - trails from, and the pointer's box sits 31.56 to its left and 35.3 above - it. + The mock's pointer, 71.6 by 87.9. --arrow-x and --arrow-y place the top + left of its box, and --arrow-angle turns the box about its center, in + degrees: 76.89 in the still frame points it up and to the right, and + while it follows the pointer, it turns to point the way the pointer + moves. reactive-arrow.ts works out the pose. Both parts carry the whole placement themselves. A transform on a shared parent would make that parent a group of its own, and the halo's overlay @@ -37,9 +45,8 @@ box-sizing: border-box; width: calc(71.595 * var(--mock-px)); height: calc(87.924 * var(--mock-px)); - rotate: 76.89deg; - translate: calc((var(--arrow-x) - 31.56) * var(--mock-px)) - calc((var(--arrow-y) - 35.3) * var(--mock-px)); + rotate: calc(var(--arrow-angle) * 1deg); + translate: calc(var(--arrow-x) * var(--mock-px)) calc(var(--arrow-y) * var(--mock-px)); } /* The halo, the pointer's full box, in light gray with an overlay blend, diff --git a/apps/docs/src/components/features/reactive-illustration.tsx b/apps/docs/src/components/features/reactive-illustration.tsx index 6d49d521..6312fb4b 100644 --- a/apps/docs/src/components/features/reactive-illustration.tsx +++ b/apps/docs/src/components/features/reactive-illustration.tsx @@ -5,15 +5,53 @@ * arrow over a live LiquidGradient with a smudge held along the J path * (reactive-scene.tsx), where the browser has WebGPU. Anywhere else, and * until the scene has laid the smudge, the card shows the image exported - * from the mock. + * from the mock. A hover sends the arrow off the window and back in to the + * visitor's pointer, which it then follows, pointing the way the pointer + * moves, while the pointer smudges the gradient (story.tsx's held story). */ import Image from 'next/image'; -import { type ComponentType, type CSSProperties, useEffect, useState } from 'react'; +import { + type ComponentType, + type RefObject, + useCallback, + useEffect, + useRef, + useState, +} from 'react'; +import { + animate, + domMin, + LazyMotion, + m, + type MotionStyle, + type MotionValue, + useMotionValue, + useSpring, + useTransform, +} from 'motion/react'; + +import { usePauseHeroWhile } from '@/components/home-hero/hero-pause'; +import { EASE_OUT } from '@/lib/easing'; import { useHasWebGpu } from '@/lib/use-has-webgpu'; +import { + angleForHeading, + arrowAtPointer, + type ArrowPose, + arrowTip, + entryPoint, + headingToward, + MOCK_HEIGHT, + MOCK_WIDTH, + pointAlong, + STILL_FRAME_ARROW, + STILL_FRAME_HEADING, + STILL_FRAME_TIP, +} from './reactive-arrow'; import styles from './reactive-illustration.module.css'; import type { ReactiveSceneProps } from './reactive-scene'; +import { type HeldStage, useHeldStory } from './story'; // --------------------------------------------- // Loading the scene @@ -64,16 +102,11 @@ function useReactiveScene(enabled: boolean): Scene | null { // The arrow // --------------------------------------------- -// Where the arrow sits in the still frame, in mock pixels, as the point its -// body trails from. reactive-illustration.module.css places the arrow from it. -type ArrowStyle = CSSProperties & { '--arrow-x': number; '--arrow-y': number }; - -const STILL_FRAME_ARROW: ArrowStyle = { '--arrow-x': 240, '--arrow-y': 101 }; - // The mock's arrow: its body, and the light halo around it, which an // overlay blend tints with whatever lies under it. Two elements side by // side rather than one group, because a transform on a shared parent would -// cut the halo's blend off from the canvas beneath. +// cut the halo's blend off from the canvas beneath. Both read their pose +// from the CSS variables the illustration sets. function Arrow() { return ( <> @@ -97,37 +130,293 @@ function Arrow() { ); } +// --------------------------------------------- +// The story +// --------------------------------------------- + +// The pose's CSS variables, which reactive-illustration.module.css reads. +type ArrowStyle = MotionStyle & { + '--arrow-x': MotionValue; + '--arrow-y': MotionValue; + '--arrow-angle': MotionValue; +}; + +// How long each leg of the handoff takes, in seconds: the arrow flicks off +// the window along its heading, then flies back in to the pointer. +const OUT_SECONDS = 0.25; +const IN_SECONDS = 0.35; + +// How far the arrow flies out along its heading, in mock pixels: past the +// window's edge from the still frame's spot. +const OUT_DISTANCE = 260; + +// How far the pointer travels, in mock pixels, before the arrow takes its +// heading from the move. A shorter move is a tremble, not a direction. +const HEADING_STEP = 4; + +// How the arrow turns to a new heading: a spring that settles in about +// 0.2 s, with no bounce. +const TURN_SPRING = { visualDuration: 0.2, bounce: 0 }; + +// CursorSmudge's decay while the story plays: a pull loses 90% in about +// 1.2 s, so the J ages out and each stroke eases back behind the cursor. +const STORY_DECAY = 0.4; + +/** The pointer over the card, in mock pixels, and the way it heads. */ +interface CardPointer { + x: MotionValue; + y: MotionValue; + /** In degrees with y down, unwrapped, so following it always turns the short way. */ + heading: MotionValue; + /** Where the pointer was when the hover started, or null before it has. */ + enteredAt: RefObject<[number, number] | null>; +} + +/** + * Tracks the pointer over the card from its moves. The heading follows the + * pointer once a move adds up to HEADING_STEP, so a still or trembling + * pointer keeps its heading. + */ +function useCardPointer(illustrationRef: RefObject) { + const x = useMotionValue(0); + const y = useMotionValue(0); + const heading = useMotionValue(STILL_FRAME_HEADING); + const enteredAt = useRef<[number, number] | null>(null); + // Where the move that sets the next heading started, or null before the + // first move of a hover. + const moveStartRef = useRef<[number, number] | null>(null); + + const onPointerMove = (event: PointerEvent) => { + const rect = illustrationRef.current?.getBoundingClientRect(); + + if (!rect || rect.width === 0 || rect.height === 0) return; + const nextX = ((event.clientX - rect.left) / rect.width) * MOCK_WIDTH; + const nextY = ((event.clientY - rect.top) / rect.height) * MOCK_HEIGHT; + const moveStart = moveStartRef.current; + + x.set(nextX); + y.set(nextY); + if (!moveStart) { + enteredAt.current = [nextX, nextY]; + moveStartRef.current = [nextX, nextY]; + + return; + } + const dx = nextX - moveStart[0]; + const dy = nextY - moveStart[1]; + + if (Math.hypot(dx, dy) < HEADING_STEP) return; + heading.set(headingToward(heading.get(), dx, dy)); + moveStartRef.current = [nextX, nextY]; + }; + + // Ready for the next hover. Stable, so the story's ending can list it in + // an effect's deps. + const reset = useCallback(() => { + enteredAt.current = null; + moveStartRef.current = null; + heading.jump(STILL_FRAME_HEADING); + }, [heading]); + + return { pointer: { x, y, heading, enteredAt } satisfies CardPointer, onPointerMove, reset }; +} + +/** Where the arrow is in a hover: resting, flying out, flying back in, or following the pointer. */ +type Leg = 'resting' | 'out' | 'in' | 'following'; + +// The tip of `pose`, in 0..1 canvas units, for a scripted stroke. +const canvasTip = (pose: ArrowPose): [number, number] => { + const [x, y] = arrowTip(pose); + + return [x / MOCK_WIDTH, y / MOCK_HEIGHT]; +}; + +/** + * The arrow's part in the held story. It rests in the still frame's pose. + * When a hover starts, it flicks off the window along its heading, then + * flies back in from past the edge nearest where the pointer came in, to + * the pointer, and from then on follows the pointer 1:1, turning to point + * the way the pointer moves. On both flights its tip lays a scripted + * stroke. Returns the leg, the pose's CSS variables, and the tip while it + * strokes. + * + * Phase 2 has no ending yet: leaving the card snaps the arrow back to its + * spot and ends the story at once. + */ +function useArrow( + stage: HeldStage, + plays: number, + onStoryEnd: () => void, + pointer: CardPointer, + resetPointer: () => void, +) { + // The last leg each play finished. Each play flies out, then back in, + // then follows the pointer. + const [finished, setFinished] = useState<{ play: number; leg: 'out' | 'in' } | null>(null); + let leg: Leg = 'following'; + + if (stage !== 'holding') leg = 'resting'; + else if (finished?.play !== plays) leg = 'out'; + else if (finished.leg === 'out') leg = 'in'; + + const out = useMotionValue(0); + const flightIn = useMotionValue(0); + const entryX = useMotionValue(0); + const entryY = useMotionValue(0); + const turn = useSpring(pointer.heading, TURN_SPRING); + + const outPose = useTransform(out, (progress) => + arrowAtPointer( + pointAlong(STILL_FRAME_TIP, STILL_FRAME_HEADING, progress * OUT_DISTANCE), + STILL_FRAME_ARROW.angle, + ), + ); + const inPose = useTransform(() => { + const progress = flightIn.get(); + const fromX = entryX.get(); + const fromY = entryY.get(); + + return arrowAtPointer( + [fromX + (pointer.x.get() - fromX) * progress, fromY + (pointer.y.get() - fromY) * progress], + angleForHeading(turn.get()), + ); + }); + // A computed motion value collects what it reads on each render, so this + // follows only the leg the arrow is on. + const pose = useTransform((): ArrowPose => { + if (leg === 'out') return outPose.get(); + if (leg === 'in') return inPose.get(); + if (leg === 'following') { + return arrowAtPointer([pointer.x.get(), pointer.y.get()], angleForHeading(turn.get())); + } + + return STILL_FRAME_ARROW; + }); + const arrowX = useTransform(pose, ({ x }) => x); + const arrowY = useTransform(pose, ({ y }) => y); + const arrowAngle = useTransform(pose, ({ angle }) => angle); + // Two tips, one per flight, so the scene starts a fresh stroke at the + // edge rather than drawing one from where the flight out left the window. + const outTip = useTransform(outPose, canvasTip); + const inTip = useTransform(inPose, canvasTip); + + // The scene attaches a flight's tip as a scripted stroke in an effect of + // its own, in the render where the leg starts, reading where the tip is + // as the stroke's start. A child's effects run before its parent's, so + // the flights below never run ahead of the attach, and the flight in is + // set up before its leg starts. + useEffect(() => { + if (leg !== 'out') return undefined; + const controls = animate(out, 1, { duration: OUT_SECONDS, ease: EASE_OUT }); + + void controls.then(() => { + const [fromX, fromY] = entryPoint( + pointer.enteredAt.current ?? [pointer.x.get(), pointer.y.get()], + ); + const heading = headingToward( + STILL_FRAME_HEADING, + pointer.x.get() - fromX, + pointer.y.get() - fromY, + ); + + entryX.jump(fromX); + entryY.jump(fromY); + flightIn.jump(0); + pointer.heading.jump(heading); + turn.jump(heading); + setFinished({ play: plays, leg: 'out' }); + }); + + return () => controls.stop(); + }, [leg, plays, out, flightIn, entryX, entryY, pointer, turn]); + + useEffect(() => { + if (leg !== 'in') return undefined; + const controls = animate(flightIn, 1, { duration: IN_SECONDS, ease: EASE_OUT }); + + void controls.then(() => setFinished({ play: plays, leg: 'in' })); + + return () => controls.stop(); + }, [leg, plays, flightIn]); + + useEffect(() => { + if (stage !== 'ending') return; + out.jump(0); + flightIn.jump(0); + resetPointer(); + turn.jump(STILL_FRAME_HEADING); + onStoryEnd(); + }, [stage, out, flightIn, resetPointer, turn, onStoryEnd]); + + const style: ArrowStyle = { + '--arrow-x': arrowX, + '--arrow-y': arrowY, + '--arrow-angle': arrowAngle, + }; + let strokeAt: MotionValue<[number, number]> | null = null; + + if (leg === 'out') strokeAt = outTip; + else if (leg === 'in') strokeAt = inTip; + + return { leg, style, strokeAt }; +} + // --------------------------------------------- // The illustration // --------------------------------------------- // Hidden from screen readers: the card's title and description carry its // message. `data-scene` says whether the live scene shows the still frame -// yet. +// yet, `data-stage` where the story is, and `data-arrow` where the arrow is +// in it. +// +// `m` under LazyMotion rather than `motion`, as in the other feature cards: +// the illustration only binds motion values to style, which domMin covers. export function ReactiveIllustration() { const Scene = useReactiveScene(useHasWebGpu()); const [laid, setLaid] = useState(false); + const illustrationRef = useRef(null); + const { pointer, onPointerMove, reset } = useCardPointer(illustrationRef); + // The story waits for the live scene's still frame, so a card showing the + // image, as it does without WebGPU, stays still. + const { stage, plays, onStoryEnd } = useHeldStory({ enabled: laid, onPointerMove }); + const arrow = useArrow(stage, plays, onStoryEnd, pointer, reset); + + usePauseHeroWhile(stage !== 'still'); return ( -
- {/* ShaderScene fills the illustration by itself. The arrow follows it - in the DOM, so it paints on top. */} - {Scene && setLaid(true)} />} - - {!laid && ( - - )} -
+ + + {/* ShaderScene fills the illustration by itself. The arrow follows + it in the DOM, so it paints on top. Phase 2 has no ending yet, so + once a story has played, the smudge keeps easing back and the J + does not return. */} + {Scene && ( + 0 ? STORY_DECAY : 0} + onStillFrame={() => setLaid(true)} + strokeAt={arrow.strokeAt} + /> + )} + + {!laid && ( + + )} + + ); } diff --git a/apps/docs/src/components/features/reactive-scene.tsx b/apps/docs/src/components/features/reactive-scene.tsx index 2a04c94f..7d5e6125 100644 --- a/apps/docs/src/components/features/reactive-scene.tsx +++ b/apps/docs/src/components/features/reactive-scene.tsx @@ -4,14 +4,16 @@ * The Reactive card's live scene: its LiquidGradient, held still, and a * CursorSmudge that holds a smudge along the J path (reactive-smudge.ts). * After the scene's first frame, a scripted stroke lays the J, and the - * still frame is ready once it lands. reactive-illustration.tsx loads this - * module with import() from an effect, which keeps three out of the server - * render (the SSR gotcha in docs/agents/docs-site.md). + * still frame is ready once it lands. The illustration sets the smudge's + * decay for its story, and can stroke it too, as the arrow glides. + * reactive-illustration.tsx loads this module with import() from an + * effect, which keeps three out of the server render (the SSR gotcha in + * docs/agents/docs-site.md). */ import { useEffect, useRef, useState } from 'react'; import { CursorSmudge, LiquidGradient, ShaderScene } from '@camp-dev/shaders'; -import { animate, useMotionValue, useTransform } from 'motion/react'; +import { animate, type MotionValue, useMotionValue, useTransform } from 'motion/react'; import { EASE_OUT } from '@/lib/easing'; @@ -21,9 +23,16 @@ import { pointOnJ, REACTIVE_SMUDGE } from './reactive-smudge'; export interface ReactiveSceneProps { /** Fires once the J's smudge is laid and the scene shows the still frame. */ onStillFrame: () => void; + /** CursorSmudge's decay. 0 holds the smudge, as the still frame does. */ + decay: number; + /** + * A point that strokes the smudge, in 0..1 canvas units, or null while + * nothing scripted strokes. The J's own stroke takes over while it lays. + */ + strokeAt: MotionValue<[number, number]> | null; } -export default function ReactiveScene({ onStillFrame }: ReactiveSceneProps) { +export default function ReactiveScene({ onStillFrame, decay, strokeAt }: ReactiveSceneProps) { const progress = useMotionValue(0); const point = useTransform(progress, pointOnJ); const [laying, setLaying] = useState(false); @@ -61,12 +70,15 @@ export default function ReactiveScene({ onStillFrame }: ReactiveSceneProps) { }; return ( - + {/* A literal 0 holds the flow still, so the scene parks whenever nothing strokes. */} - {/* Decay 0 holds the smudge for good. */} - + ); } From fe0998c3473a4426301a441e5a88222967e05c3c Mon Sep 17 00:00:00 2001 From: Hunter Garrett Date: Thu, 15 Oct 2026 09:26:32 -0400 Subject: [PATCH 07/15] feat(docs): end the Reactive card's story along the J, and smooth its turn Phase 3 of SHA-216's motion brief, as the author revised it. When the pointer leaves the card, the arrow follows the way it was heading off the window over 0.25 s, the visitor's smudges clear at decay 1 for 0.35 s while it's away, and it swoops back in from below the bottom-left along the J over 0.85 s with --ease-out, laying the still frame's smudge again. It points along the J as it flies and comes round to the mock's angle as it lands exactly on the still frame. The arrow's turn also changes, after the author found it laggy, then jittery, then jumpy. The heading now comes from a smoothing filter on the pointer's velocity, updated on every move, in place of a step every 4 pixels. A critically damped spring turns the arrow toward it, so the turning speed builds and settles. The spring is set by stiffness and damping, because Motion drops a time-defined spring's speed whenever its target changes, which would stall the turn on every pointer event. After a sharp turn, the arrow points within 10 degrees of the new way in about 135 ms. The pose's CSS variables move from the illustration onto the arrow's two images, so a frame restyles only them. --- .../features/reactive-arrow.test.ts | 30 ++ .../src/components/features/reactive-arrow.ts | 110 ++++- .../features/reactive-illustration.tsx | 377 ++++++++++++------ .../features/reactive-smudge.test.ts | 13 + .../components/features/reactive-smudge.ts | 16 + docs/agents/docs-site.md | 8 + 6 files changed, 407 insertions(+), 147 deletions(-) create mode 100644 apps/docs/src/components/features/reactive-smudge.test.ts diff --git a/apps/docs/src/components/features/reactive-arrow.test.ts b/apps/docs/src/components/features/reactive-arrow.test.ts index f83b0d01..5048e947 100644 --- a/apps/docs/src/components/features/reactive-arrow.test.ts +++ b/apps/docs/src/components/features/reactive-arrow.test.ts @@ -6,8 +6,10 @@ import { arrowAtPointer, arrowTip, entryPoint, + exitDistance, headingToward, STILL_FRAME_ARROW, + swoopPose, } from './reactive-arrow'; describe('the Reactive arrow', () => { @@ -68,4 +70,32 @@ describe('the Reactive arrow', () => { expect(entryPoint([-40, -10])).toEqual([-90, 0]); }); }); + + describe('flying off the window', () => { + // From the middle of the 312 by 309 window, heading right, the arrow + // clears the right edge and the 90 pixels past it. + it('flies far enough along its heading to leave the window out of sight', () => { + expect(exitDistance([156, 150], 0)).toBeCloseTo(312 + 90 - 156); + expect(exitDistance([156, 150], 90)).toBeCloseTo(309 + 90 - 150); + expect(exitDistance([156, 150], 180)).toBeCloseTo(156 + 90); + }); + + it('is out of sight already from past the margin', () => { + expect(exitDistance([500, 150], 0)).toBe(0); + }); + }); + + describe('the swoop back in along the J', () => { + it('lands exactly on the still frame', () => { + const pose = swoopPose(1); + + expect(pose.x).toBeCloseTo(STILL_FRAME_ARROW.x); + expect(pose.y).toBeCloseTo(STILL_FRAME_ARROW.y); + expect(pose.angle).toBeCloseTo(STILL_FRAME_ARROW.angle); + }); + + it('starts with its tip below the window, out of sight', () => { + expect(arrowTip(swoopPose(0))[1]).toBeGreaterThan(309); + }); + }); }); diff --git a/apps/docs/src/components/features/reactive-arrow.ts b/apps/docs/src/components/features/reactive-arrow.ts index e3d5738d..572582bc 100644 --- a/apps/docs/src/components/features/reactive-arrow.ts +++ b/apps/docs/src/components/features/reactive-arrow.ts @@ -1,10 +1,12 @@ /** * The Reactive card's arrow (SHA-216): its pose in the still frame, its * pose while it follows the pointer, pointing the way the pointer moves, - * and where its tip is in any pose. Lengths are mock pixels in the 312 by - * 309 illustration, angles are degrees clockwise, as CSS turns them, and + * its flights off and back on the window, its swoop back along the J, and + * where its tip is in any pose. Lengths are mock pixels in the 312 by 309 + * illustration, angles are degrees clockwise, as CSS turns them, and * reactive-illustration.module.css draws the arrow from a pose. */ +import { headingOnJ, pointOnJ } from './reactive-smudge'; /** The illustration's size in mock pixels, which everything here measures in. */ export const MOCK_WIDTH = 312; @@ -50,31 +52,44 @@ export function angleForHeading(heading: number): number { /** The still frame's heading: up and to the right, as the mock draws it. */ export const STILL_FRAME_HEADING = STILL_FRAME_ARROW.angle + UNTURNED_HEADING; -// Where the tip sits from the box's center once the box turns by `angle`. -function tipFromCenter(angle: number): [number, number] { - const fromCenterX = TIP[0] - BOX[0] / 2; - const fromCenterY = TIP[1] - BOX[1] / 2; +/** The way an arrow turned by `angle` points. */ +export function headingForAngle(angle: number): number { + return angle + UNTURNED_HEADING; +} + +// Where a point of the unturned box sits from the box's center once the +// box turns by `angle`. +function fromCenter([pointX, pointY]: readonly [number, number], angle: number): [number, number] { + const offsetX = pointX - BOX[0] / 2; + const offsetY = pointY - BOX[1] / 2; const turn = toRadians(angle); return [ - fromCenterX * Math.cos(turn) - fromCenterY * Math.sin(turn), - fromCenterX * Math.sin(turn) + fromCenterY * Math.cos(turn), + offsetX * Math.cos(turn) - offsetY * Math.sin(turn), + offsetX * Math.sin(turn) + offsetY * Math.cos(turn), ]; } -/** The pose that turns the arrow by `angle` with its tip on `pointer`. */ -export function arrowAtPointer( - [pointerX, pointerY]: readonly [number, number], +// The pose that turns the arrow by `angle` with its point `local`, in the +// unturned box, on `at`. +function arrowWithPointAt( + local: readonly [number, number], + [atX, atY]: readonly [number, number], angle: number, ): ArrowPose { - const [tipX, tipY] = tipFromCenter(angle); + const [offsetX, offsetY] = fromCenter(local, angle); - return { x: pointerX - BOX[0] / 2 - tipX, y: pointerY - BOX[1] / 2 - tipY, angle }; + return { x: atX - BOX[0] / 2 - offsetX, y: atY - BOX[1] / 2 - offsetY, angle }; +} + +/** The pose that turns the arrow by `angle` with its tip on `pointer`. */ +export function arrowAtPointer(pointer: readonly [number, number], angle: number): ArrowPose { + return arrowWithPointAt(TIP, pointer, angle); } /** Where the tip is in `pose`. */ export function arrowTip({ x, y, angle }: ArrowPose): [number, number] { - const [tipX, tipY] = tipFromCenter(angle); + const [tipX, tipY] = fromCenter(TIP, angle); return [x + BOX[0] / 2 + tipX, y + BOX[1] / 2 + tipY]; } @@ -85,10 +100,7 @@ export function arrowTip({ x, y, angle }: ArrowPose): [number, number] { * so a spring that follows it always turns the short way round. */ export function headingToward(current: number, dx: number, dy: number): number { - const target = (Math.atan2(dy, dx) * 180) / Math.PI; - const turn = ((((target - current) % 360) + 540) % 360) - 180; - - return current + turn; + return current + shortestTurn(current, (Math.atan2(dy, dx) * 180) / Math.PI); } /** @@ -112,6 +124,25 @@ export function entryPoint([x, y]: readonly [number, number]): [number, number] return [nearest.point[0], nearest.point[1]]; } +/** + * How far along `heading` the arrow flies from `point` to leave the window + * and ENTRY_MARGIN past it, out of sight, or 0 from there already. + */ +export function exitDistance([x, y]: readonly [number, number], heading: number): number { + const turn = toRadians(heading); + const across = (from: number, step: number, size: number) => { + if (step > 1e-9) return (size + ENTRY_MARGIN - from) / step; + if (step < -1e-9) return (-ENTRY_MARGIN - from) / step; + + return Infinity; + }; + + return Math.max( + 0, + Math.min(across(x, Math.cos(turn), MOCK_WIDTH), across(y, Math.sin(turn), MOCK_HEIGHT)), + ); +} + /** The point `distance` on from `from` along `heading`. */ export function pointAlong( [x, y]: readonly [number, number], @@ -125,3 +156,46 @@ export function pointAlong( /** Where the tip sits in the still frame. */ export const STILL_FRAME_TIP = arrowTip(STILL_FRAME_ARROW); + +/** The turn from `from` to `to`, in degrees, the short way round. */ +export function shortestTurn(from: number, to: number): number { + return ((((to - from) % 360) + 540) % 360) - 180; +} + +// The J's end, in mock pixels: where the still frame's smudge meets the +// arrow. +const J_END: readonly [number, number] = [ + pointOnJ(1)[0] * MOCK_WIDTH, + pointOnJ(1)[1] * MOCK_HEIGHT, +]; + +// The point of the unturned box the J's end meets in the still frame, so +// the swoop can carry that point along the J and land on the still frame. +const TRAIL = (() => { + const { x, y, angle } = STILL_FRAME_ARROW; + const turn = toRadians(-angle); + const offsetX = J_END[0] - (x + BOX[0] / 2); + const offsetY = J_END[1] - (y + BOX[1] / 2); + + return [ + BOX[0] / 2 + offsetX * Math.cos(turn) - offsetY * Math.sin(turn), + BOX[1] / 2 + offsetX * Math.sin(turn) + offsetY * Math.cos(turn), + ] as const; +})(); + +/** + * The arrow `t` of the way along its swoop back in along the J: from below + * the window's bottom-left, pointing the way the J runs, easing round to + * the still frame's heading as it lands on the still frame. + */ +export function swoopPose(t: number): ArrowPose { + const [x, y] = pointOnJ(t); + const pathHeading = headingOnJ(t); + // Smoothstep from 0.55 to 1, so the turn to the still frame's heading + // starts past halfway and settles as the arrow lands. + const settle = Math.min(Math.max((t - 0.55) / 0.45, 0), 1); + const blend = settle * settle * (3 - 2 * settle); + const heading = pathHeading + shortestTurn(pathHeading, STILL_FRAME_HEADING) * blend; + + return arrowWithPointAt(TRAIL, [x * MOCK_WIDTH, y * MOCK_HEIGHT], angleForHeading(heading)); +} diff --git a/apps/docs/src/components/features/reactive-illustration.tsx b/apps/docs/src/components/features/reactive-illustration.tsx index 6312fb4b..0d1dfde8 100644 --- a/apps/docs/src/components/features/reactive-illustration.tsx +++ b/apps/docs/src/components/features/reactive-illustration.tsx @@ -7,7 +7,9 @@ * until the scene has laid the smudge, the card shows the image exported * from the mock. A hover sends the arrow off the window and back in to the * visitor's pointer, which it then follows, pointing the way the pointer - * moves, while the pointer smudges the gradient (story.tsx's held story). + * moves, while the pointer smudges the gradient. When the pointer leaves, + * the arrow follows it off, then swoops back along the J and lays the + * still frame's smudge again (story.tsx's held story). */ import Image from 'next/image'; import { @@ -27,6 +29,7 @@ import { type MotionStyle, type MotionValue, useMotionValue, + useMotionValueEvent, useSpring, useTransform, } from 'motion/react'; @@ -41,16 +44,21 @@ import { type ArrowPose, arrowTip, entryPoint, + exitDistance, + headingForAngle, headingToward, MOCK_HEIGHT, MOCK_WIDTH, pointAlong, + shortestTurn, STILL_FRAME_ARROW, STILL_FRAME_HEADING, STILL_FRAME_TIP, + swoopPose, } from './reactive-arrow'; import styles from './reactive-illustration.module.css'; import type { ReactiveSceneProps } from './reactive-scene'; +import { pointOnJ, REACTIVE_SMUDGE } from './reactive-smudge'; import { type HeldStage, useHeldStory } from './story'; // --------------------------------------------- @@ -102,28 +110,40 @@ function useReactiveScene(enabled: boolean): Scene | null { // The arrow // --------------------------------------------- +// The pose's CSS variables, which reactive-illustration.module.css reads. +type ArrowStyle = MotionStyle & { + '--arrow-x': MotionValue; + '--arrow-y': MotionValue; + '--arrow-angle': MotionValue; +}; + +// next/image, able to bind motion values to its style. +const MotionImage = m.create(Image); + // The mock's arrow: its body, and the light halo around it, which an // overlay blend tints with whatever lies under it. Two elements side by // side rather than one group, because a transform on a shared parent would -// cut the halo's blend off from the canvas beneath. Both read their pose -// from the CSS variables the illustration sets. -function Arrow() { +// cut the halo's blend off from the canvas beneath. Each carries the pose's +// variables itself, so a frame restyles the two images and nothing else. +function Arrow({ style }: { style: ArrowStyle }) { return ( <> - - @@ -134,33 +154,47 @@ function Arrow() { // The story // --------------------------------------------- -// The pose's CSS variables, which reactive-illustration.module.css reads. -type ArrowStyle = MotionStyle & { - '--arrow-x': MotionValue; - '--arrow-y': MotionValue; - '--arrow-angle': MotionValue; -}; - -// How long each leg of the handoff takes, in seconds: the arrow flicks off -// the window along its heading, then flies back in to the pointer. +// How long the hover's flights take, in seconds: the arrow flicks off the +// window along its heading, then flies back in to the pointer. Leaving +// sends it off the same way. const OUT_SECONDS = 0.25; const IN_SECONDS = 0.35; -// How far the arrow flies out along its heading, in mock pixels: past the -// window's edge from the still frame's spot. +// How far the arrow flies out along its heading when a hover starts, in +// mock pixels: past the window's edge from the still frame's spot. const OUT_DISTANCE = 260; -// How far the pointer travels, in mock pixels, before the arrow takes its -// heading from the move. A shorter move is a tremble, not a direction. -const HEADING_STEP = 4; +// After the arrow leaves, how long the visitor's smudges clear before it +// swoops back in, in seconds. With the flight off, about 0.6 s at decay 1, +// which brings a full pull down to nothing. +const CLEAR_SECONDS = 0.35; -// How the arrow turns to a new heading: a spring that settles in about -// 0.2 s, with no bounce. -const TURN_SPRING = { visualDuration: 0.2, bounce: 0 }; +// How quickly the heading follows the way the pointer moves: the time +// constant of a smoothing filter on the pointer's velocity, in seconds. +const TURN_SMOOTHING = 0.025; -// CursorSmudge's decay while the story plays: a pull loses 90% in about -// 1.2 s, so the J ages out and each stroke eases back behind the cursor. +// How the arrow turns to the heading: a spring with no bounce, so the +// turning speed builds and settles rather than starting at full speed. The +// filtered heading changes only when a pointer event lands, and a real +// mouse's events are uneven, so the spring also carries the turn smoothly +// through every frame between. +// +// Stiffness and damping rather than visualDuration, which would stall the +// turn on every pointer event (the time-defined-spring gotcha in +// docs/agents/docs-site.md). These are what visualDuration 0.12 with no +// bounce works out to: critically damped, settling in about 120 ms. +const TURN_SPRING = { stiffness: 1900, damping: 87, mass: 1 }; + +// The slowest the pointer can move, in mock pixels a second, and still +// turn the arrow. Slower is a tremble, not a direction. +const MIN_TURN_SPEED = 40; + +// CursorSmudge's decay on each leg. 0 holds the J. While the visitor +// smudges, a pull loses 90% in about 1.2 s, so the J ages out and each +// stroke eases back. Once they leave, their smudges clear fast. +const HOLD_DECAY = 0; const STORY_DECAY = 0.4; +const CLEAR_DECAY = 1; /** The pointer over the card, in mock pixels, and the way it heads. */ interface CardPointer { @@ -174,17 +208,18 @@ interface CardPointer { /** * Tracks the pointer over the card from its moves. The heading follows the - * pointer once a move adds up to HEADING_STEP, so a still or trembling - * pointer keeps its heading. + * pointer's velocity through a smoothing filter, so it turns smoothly on + * every move, and a still or trembling pointer keeps it. */ function useCardPointer(illustrationRef: RefObject) { const x = useMotionValue(0); const y = useMotionValue(0); const heading = useMotionValue(STILL_FRAME_HEADING); const enteredAt = useRef<[number, number] | null>(null); - // Where the move that sets the next heading started, or null before the - // first move of a hover. - const moveStartRef = useRef<[number, number] | null>(null); + // The last move, in mock pixels and seconds, and the filtered velocity, + // in mock pixels a second. Null before the first move of a hover. + const lastMoveRef = useRef<{ x: number; y: number; time: number } | null>(null); + const velocityRef = useRef<[number, number]>([0, 0]); const onPointerMove = (event: PointerEvent) => { const rect = illustrationRef.current?.getBoundingClientRect(); @@ -192,37 +227,71 @@ function useCardPointer(illustrationRef: RefObject) { if (!rect || rect.width === 0 || rect.height === 0) return; const nextX = ((event.clientX - rect.left) / rect.width) * MOCK_WIDTH; const nextY = ((event.clientY - rect.top) / rect.height) * MOCK_HEIGHT; - const moveStart = moveStartRef.current; + const time = event.timeStamp / 1000; + const last = lastMoveRef.current; x.set(nextX); y.set(nextY); - if (!moveStart) { + lastMoveRef.current = { x: nextX, y: nextY, time }; + if (!last) { enteredAt.current = [nextX, nextY]; - moveStartRef.current = [nextX, nextY]; + velocityRef.current = [0, 0]; return; } - const dx = nextX - moveStart[0]; - const dy = nextY - moveStart[1]; - - if (Math.hypot(dx, dy) < HEADING_STEP) return; - heading.set(headingToward(heading.get(), dx, dy)); - moveStartRef.current = [nextX, nextY]; + const elapsed = Math.max(time - last.time, 1 / 240); + const keep = Math.exp(-elapsed / TURN_SMOOTHING); + const [velocityX, velocityY] = velocityRef.current; + const nextVelocity: [number, number] = [ + velocityX * keep + ((nextX - last.x) / elapsed) * (1 - keep), + velocityY * keep + ((nextY - last.y) / elapsed) * (1 - keep), + ]; + + velocityRef.current = nextVelocity; + if (Math.hypot(...nextVelocity) < MIN_TURN_SPEED) return; + heading.set(headingToward(heading.get(), ...nextVelocity)); }; // Ready for the next hover. Stable, so the story's ending can list it in // an effect's deps. const reset = useCallback(() => { enteredAt.current = null; - moveStartRef.current = null; + lastMoveRef.current = null; + velocityRef.current = [0, 0]; heading.jump(STILL_FRAME_HEADING); }, [heading]); return { pointer: { x, y, heading, enteredAt } satisfies CardPointer, onPointerMove, reset }; } -/** Where the arrow is in a hover: resting, flying out, flying back in, or following the pointer. */ -type Leg = 'resting' | 'out' | 'in' | 'following'; +/** + * Where the arrow is in a hover. It rests in the still frame, flies out, + * flies back in, and follows the pointer. Once the pointer leaves, it + * follows the pointer's way off the window, waits off it while the + * visitor's smudges clear, then swoops back along the J. + */ +type Leg = 'resting' | 'out' | 'in' | 'following' | 'leaving' | 'clearing' | 'swooping'; + +/** A leg that ends when a flight or a wait does, which moves the play to the next leg. */ +type TimedLeg = 'out' | 'in' | 'leaving' | 'clearing'; + +function legOf(stage: HeldStage, finished: TimedLeg | null): Leg { + if (stage === 'still') return 'resting'; + if (stage === 'holding') { + if (finished === null) return 'out'; + + return finished === 'out' ? 'in' : 'following'; + } + if (finished === 'leaving') return 'clearing'; + + return finished === 'clearing' ? 'swooping' : 'leaving'; +} + +function decayOf(leg: Leg): number { + if (leg === 'resting' || leg === 'swooping') return HOLD_DECAY; + + return leg === 'leaving' || leg === 'clearing' ? CLEAR_DECAY : STORY_DECAY; +} // The tip of `pose`, in 0..1 canvas units, for a scripted stroke. const canvasTip = (pose: ArrowPose): [number, number] => { @@ -232,16 +301,11 @@ const canvasTip = (pose: ArrowPose): [number, number] => { }; /** - * The arrow's part in the held story. It rests in the still frame's pose. - * When a hover starts, it flicks off the window along its heading, then - * flies back in from past the edge nearest where the pointer came in, to - * the pointer, and from then on follows the pointer 1:1, turning to point - * the way the pointer moves. On both flights its tip lays a scripted - * stroke. Returns the leg, the pose's CSS variables, and the tip while it + * The arrow's part in the held story, leg by leg (Leg says what each does). + * The tip lays a scripted stroke on the flights in and out of a hover, and + * the swoop lays the J again. Returns the leg, the smudge's decay, the + * pose's CSS variables, and the point a scripted stroke follows, if one * strokes. - * - * Phase 2 has no ending yet: leaving the card snaps the arrow back to its - * spot and ends the story at once. */ function useArrow( stage: HeldStage, @@ -250,19 +314,22 @@ function useArrow( pointer: CardPointer, resetPointer: () => void, ) { - // The last leg each play finished. Each play flies out, then back in, - // then follows the pointer. - const [finished, setFinished] = useState<{ play: number; leg: 'out' | 'in' } | null>(null); - let leg: Leg = 'following'; - - if (stage !== 'holding') leg = 'resting'; - else if (finished?.play !== plays) leg = 'out'; - else if (finished.leg === 'out') leg = 'in'; + // The last timed leg this play finished. + const [finished, setFinished] = useState<{ play: number; leg: TimedLeg } | null>(null); + const leg = legOf(stage, finished?.play === plays ? finished.leg : null); const out = useMotionValue(0); const flightIn = useMotionValue(0); + const leave = useMotionValue(0); + const swoop = useMotionValue(0); const entryX = useMotionValue(0); const entryY = useMotionValue(0); + // Where the arrow's tip was and the way it pointed when the pointer left, + // kept up to date while the visitor hovers, for the flight off. + const leftX = useMotionValue(STILL_FRAME_TIP[0]); + const leftY = useMotionValue(STILL_FRAME_TIP[1]); + const leftHeading = useMotionValue(STILL_FRAME_HEADING); + // The heading the arrow shows, which turns toward the pointer's. const turn = useSpring(pointer.heading, TURN_SPRING); const outPose = useTransform(out, (progress) => @@ -271,94 +338,153 @@ function useArrow( STILL_FRAME_ARROW.angle, ), ); + // Flying in, the arrow points the way it flies, and comes round to the + // pointer's own heading as it lands, so following picks up where it ends. const inPose = useTransform(() => { const progress = flightIn.get(); const fromX = entryX.get(); const fromY = entryY.get(); + const pointerX = pointer.x.get(); + const pointerY = pointer.y.get(); + const flying = (Math.atan2(pointerY - fromY, pointerX - fromX) * 180) / Math.PI; + const heading = flying + shortestTurn(flying, turn.get()) * progress * progress; + + return arrowAtPointer( + [fromX + (pointerX - fromX) * progress, fromY + (pointerY - fromY) * progress], + angleForHeading(heading), + ); + }); + const followPose = useTransform(() => + arrowAtPointer([pointer.x.get(), pointer.y.get()], angleForHeading(turn.get())), + ); + const leavePose = useTransform(() => { + const from: [number, number] = [leftX.get(), leftY.get()]; + const heading = leftHeading.get(); return arrowAtPointer( - [fromX + (pointer.x.get() - fromX) * progress, fromY + (pointer.y.get() - fromY) * progress], - angleForHeading(turn.get()), + pointAlong(from, heading, leave.get() * exitDistance(from, heading)), + angleForHeading(heading), ); }); + const swoopPoseValue = useTransform(swoop, swoopPose); // A computed motion value collects what it reads on each render, so this // follows only the leg the arrow is on. const pose = useTransform((): ArrowPose => { - if (leg === 'out') return outPose.get(); - if (leg === 'in') return inPose.get(); - if (leg === 'following') { - return arrowAtPointer([pointer.x.get(), pointer.y.get()], angleForHeading(turn.get())); + switch (leg) { + case 'out': + return outPose.get(); + case 'in': + return inPose.get(); + case 'following': + return followPose.get(); + case 'leaving': + case 'clearing': + return leavePose.get(); + case 'swooping': + return swoopPoseValue.get(); + default: + return STILL_FRAME_ARROW; } - - return STILL_FRAME_ARROW; }); - const arrowX = useTransform(pose, ({ x }) => x); - const arrowY = useTransform(pose, ({ y }) => y); - const arrowAngle = useTransform(pose, ({ angle }) => angle); - // Two tips, one per flight, so the scene starts a fresh stroke at the - // edge rather than drawing one from where the flight out left the window. + // One point per stroking leg, so the scene starts a fresh stroke on each + // rather than drawing one across the window from where the last left off. const outTip = useTransform(outPose, canvasTip); const inTip = useTransform(inPose, canvasTip); + const jPoint = useTransform(swoop, pointOnJ); + + // While the visitor hovers, keep where the arrow is, so it leaves from + // there whichever leg it was on. + const hoveringRef = useRef(false); - // The scene attaches a flight's tip as a scripted stroke in an effect of - // its own, in the render where the leg starts, reading where the tip is - // as the stroke's start. A child's effects run before its parent's, so - // the flights below never run ahead of the attach, and the flight in is - // set up before its leg starts. useEffect(() => { - if (leg !== 'out') return undefined; - const controls = animate(out, 1, { duration: OUT_SECONDS, ease: EASE_OUT }); - - void controls.then(() => { - const [fromX, fromY] = entryPoint( - pointer.enteredAt.current ?? [pointer.x.get(), pointer.y.get()], - ); - const heading = headingToward( - STILL_FRAME_HEADING, - pointer.x.get() - fromX, - pointer.y.get() - fromY, - ); - - entryX.jump(fromX); - entryY.jump(fromY); - flightIn.jump(0); - pointer.heading.jump(heading); - turn.jump(heading); - setFinished({ play: plays, leg: 'out' }); - }); - - return () => controls.stop(); - }, [leg, plays, out, flightIn, entryX, entryY, pointer, turn]); + hoveringRef.current = stage === 'holding'; + }, [stage]); + useMotionValueEvent(pose, 'change', (current) => { + if (!hoveringRef.current) return; + const [tipX, tipY] = arrowTip(current); + + leftX.set(tipX); + leftY.set(tipY); + leftHeading.set(headingForAngle(current.angle)); + }); + // The scene attaches a stroking leg's point in an effect of its own, in + // the render where the leg starts, reading where the point is as the + // stroke's start. A child's effects run before its parent's, so a flight + // never runs ahead of the attach. Each leg's point is set up before its + // leg starts. useEffect(() => { - if (leg !== 'in') return undefined; - const controls = animate(flightIn, 1, { duration: IN_SECONDS, ease: EASE_OUT }); + const finish = (timed: TimedLeg) => setFinished({ play: plays, leg: timed }); + const run = (value: MotionValue, duration: number, then: () => void) => { + const controls = animate(value, 1, { duration, ease: EASE_OUT }); - void controls.then(() => setFinished({ play: plays, leg: 'in' })); + void controls.then(then); - return () => controls.stop(); - }, [leg, plays, flightIn]); + return () => controls.stop(); + }; - useEffect(() => { - if (stage !== 'ending') return; - out.jump(0); - flightIn.jump(0); - resetPointer(); - turn.jump(STILL_FRAME_HEADING); - onStoryEnd(); - }, [stage, out, flightIn, resetPointer, turn, onStoryEnd]); + switch (leg) { + case 'out': + return run(out, OUT_SECONDS, () => { + const [fromX, fromY] = entryPoint( + pointer.enteredAt.current ?? [pointer.x.get(), pointer.y.get()], + ); + + entryX.jump(fromX); + entryY.jump(fromY); + flightIn.jump(0); + finish('out'); + }); + case 'in': + return run(flightIn, IN_SECONDS, () => finish('in')); + case 'leaving': + return run(leave, OUT_SECONDS, () => finish('leaving')); + case 'clearing': { + const wait = window.setTimeout(() => { + swoop.jump(0); + finish('clearing'); + }, CLEAR_SECONDS * 1000); + + return () => window.clearTimeout(wait); + } + case 'swooping': + return run(swoop, REACTIVE_SMUDGE.laySeconds, () => { + out.jump(0); + leave.jump(0); + resetPointer(); + turn.jump(STILL_FRAME_HEADING); + onStoryEnd(); + }); + default: + return undefined; + } + }, [ + leg, + plays, + out, + flightIn, + leave, + swoop, + entryX, + entryY, + pointer, + resetPointer, + turn, + onStoryEnd, + ]); const style: ArrowStyle = { - '--arrow-x': arrowX, - '--arrow-y': arrowY, - '--arrow-angle': arrowAngle, + '--arrow-x': useTransform(pose, ({ x }) => x), + '--arrow-y': useTransform(pose, ({ y }) => y), + '--arrow-angle': useTransform(pose, ({ angle }) => angle), }; let strokeAt: MotionValue<[number, number]> | null = null; if (leg === 'out') strokeAt = outTip; else if (leg === 'in') strokeAt = inTip; + else if (leg === 'swooping') strokeAt = jPoint; - return { leg, style, strokeAt }; + return { leg, decay: decayOf(leg), style, strokeAt }; } // --------------------------------------------- @@ -386,27 +512,20 @@ export function ReactiveIllustration() { return ( - {/* ShaderScene fills the illustration by itself. The arrow follows - it in the DOM, so it paints on top. Phase 2 has no ending yet, so - once a story has played, the smudge keeps easing back and the J - does not return. */} + it in the DOM, so it paints on top. */} {Scene && ( - 0 ? STORY_DECAY : 0} - onStillFrame={() => setLaid(true)} - strokeAt={arrow.strokeAt} - /> + setLaid(true)} strokeAt={arrow.strokeAt} /> )} - + {!laid && ( )} - +
); } diff --git a/apps/docs/src/components/features/reactive-smudge.test.ts b/apps/docs/src/components/features/reactive-smudge.test.ts new file mode 100644 index 00000000..934cee31 --- /dev/null +++ b/apps/docs/src/components/features/reactive-smudge.test.ts @@ -0,0 +1,13 @@ +// @vitest-environment node +import { describe, expect, it } from 'vitest'; + +import { headingOnJ } from './reactive-smudge'; + +describe('the J', () => { + // Degrees with y down: -90 is straight up and 0 is to the right. + it('rises from its foot and bends over to run right at the arrow', () => { + expect(headingOnJ(0)).toBeLessThan(-80); + expect(headingOnJ(0)).toBeGreaterThan(-95); + expect(Math.abs(headingOnJ(1))).toBeLessThan(10); + }); +}); diff --git a/apps/docs/src/components/features/reactive-smudge.ts b/apps/docs/src/components/features/reactive-smudge.ts index 7d577660..d383f7ca 100644 --- a/apps/docs/src/components/features/reactive-smudge.ts +++ b/apps/docs/src/components/features/reactive-smudge.ts @@ -44,3 +44,19 @@ export function pointOnJ(t: number): [number, number] { weights[0] * p0[1] + weights[1] * p1[1] + weights[2] * p2[1] + weights[3] * p3[1], ]; } + +/** + * The way the J runs at `t`, in degrees with y down, measured in mock + * pixels: straight up at its foot, and to the right at the arrow. + */ +export function headingOnJ(t: number): number { + const [p0, p1, p2, p3] = J_PATH; + const u = 1 - t; + const weights = [3 * u * u, 6 * u * t, 3 * t * t] as const; + const dx = + weights[0] * (p1[0] - p0[0]) + weights[1] * (p2[0] - p1[0]) + weights[2] * (p3[0] - p2[0]); + const dy = + weights[0] * (p1[1] - p0[1]) + weights[1] * (p2[1] - p1[1]) + weights[2] * (p3[1] - p2[1]); + + return (Math.atan2(dy * 309, dx * 312) * 180) / Math.PI; +} diff --git a/docs/agents/docs-site.md b/docs/agents/docs-site.md index 645ffd05..61ca66e4 100644 --- a/docs/agents/docs-site.md +++ b/docs/agents/docs-site.md @@ -45,6 +45,14 @@ These rules cover component defaults, demo palettes, and any gradient on the sit - Build depth from lightness, not hue. Keep at least 0.10 of OKLCH lightness between stops. - Keep backgrounds subtle and accents bold. Check text contrast at the lightest point and at the darkest point. +## Motion + +For motion and interaction polish, load the `design-engineering` skill first. The gotcha below is about Motion's API, not taste. + +### The time-defined-spring gotcha: a spring that follows a live value needs stiffness and damping + +`useSpring(source, options)` starts a fresh spring each time `source` changes. Motion drops the current speed of a spring defined by `visualDuration` or `duration`, so each new target starts the spring from rest. A spring that follows a value changing on every pointer event then stalls and restarts on each one, and the motion lags and stutters. With `visualDuration` 0.12, the Reactive card's arrow turned a sharp corner in about 220 ms, against 135 ms for the same spring set as `stiffness` 1900 and `damping` 87, which keeps its speed. A critically damped spring with `visualDuration` v works out to `stiffness` (2π / 1.2v)² and `damping` 2√stiffness, at `mass` 1. A spring that only runs to a fixed target can keep `visualDuration`. + ## Dev-only routes Name a debugging or probe page `page.dev.tsx`. The site is a static export, so every page the router sees lands in `out/`, and pagefind then indexes it for site search. `next.config.ts` adds `dev.tsx` and `dev.ts` to `pageExtensions` only when `INCLUDE_DEV_ROUTES=1`, so a plain `next build` never sees these pages. From 7bf29376f12edce9c6b7df3b23acd3c639ec744d Mon Sep 17 00:00:00 2001 From: Hunter Garrett Date: Thu, 15 Oct 2026 12:12:38 -0400 Subject: [PATCH 08/15] refactor(docs): move the held story's rules into a reducer, and let a scroll push hold it The held story's rules move from setState callbacks in useHeldStory into heldStoryReducer in story-state.ts, a pure reducer the docs app's Node tests can cover. useHeldStory also gains onPushStart and onPushEnd, for an illustration whose scene has scroll push on, and reports what holds the story in heldBy. A push holds the story as a hover does, only what started a hold ends it, and an ending that lands while a push still runs starts a fresh push hold. Under reduced motion, or while the story isn't enabled, a push holds nothing. The Extensible and Performant cards pass no push and don't change. --- GLOSSARY.md | 2 +- .../components/features/story-state.test.ts | 71 ++++++++++++++++ .../src/components/features/story-state.ts | 76 +++++++++++++++++ apps/docs/src/components/features/story.tsx | 84 +++++++++++-------- 4 files changed, 195 insertions(+), 38 deletions(-) create mode 100644 apps/docs/src/components/features/story-state.test.ts create mode 100644 apps/docs/src/components/features/story-state.ts diff --git a/GLOSSARY.md b/GLOSSARY.md index 267b9328..35903188 100644 --- a/GLOSSARY.md +++ b/GLOSSARY.md @@ -101,7 +101,7 @@ A card in the homepage's features section that illustrates one quality of the li _Avoid_: Benefit card, value prop, pillar, featured card **Story**: -The animation a feature card plays when the pointer moves over it. Once started, a story always finishes, and the card returns to its still frame. +The animation a feature card plays when the pointer moves over it, or, on the Reactive card, when a scroll push runs over it. Once started, a story always finishes, and the card returns to its still frame. _Avoid_: Intro, entrance, demo, hover effect **Still frame**: diff --git a/apps/docs/src/components/features/story-state.test.ts b/apps/docs/src/components/features/story-state.test.ts new file mode 100644 index 00000000..17302c61 --- /dev/null +++ b/apps/docs/src/components/features/story-state.test.ts @@ -0,0 +1,71 @@ +// @vitest-environment node +import { describe, expect, it } from 'vitest'; + +import { type HeldStoryEvent, heldStoryReducer, type HeldStoryState, STILL } from './story-state'; + +const play = (...events: HeldStoryEvent[]): HeldStoryState => + events.reduce(heldStoryReducer, STILL); + +const landed = (pointerOnCard = false, pushing = false): HeldStoryEvent => ({ + type: 'ending-landed', + pointerOnCard, + pushing, +}); + +describe('a held story', () => { + it('holds from a hover, ends when the pointer leaves, and rests once the ending lands', () => { + expect(play({ type: 'pointer-enter' })).toEqual({ + stage: 'holding', + plays: 1, + heldBy: 'pointer', + }); + expect(play({ type: 'pointer-enter' }, { type: 'pointer-leave' })).toMatchObject({ + stage: 'ending', + }); + expect(play({ type: 'pointer-enter' }, { type: 'pointer-leave' }, landed())).toMatchObject({ + stage: 'still', + plays: 1, + }); + }); + + it('lets the ending land before a hover during it starts a fresh hold', () => { + const ending = play( + { type: 'pointer-enter' }, + { type: 'pointer-leave' }, + { type: 'pointer-enter' }, + ); + + expect(ending).toMatchObject({ stage: 'ending', plays: 1 }); + expect(heldStoryReducer(ending, landed(true))).toEqual({ + stage: 'holding', + plays: 2, + heldBy: 'pointer', + }); + }); + + it('holds from a scroll push, which only the push ending ends', () => { + const pushed = play({ type: 'push-start' }); + + expect(pushed).toEqual({ stage: 'holding', plays: 1, heldBy: 'push' }); + expect(heldStoryReducer(pushed, { type: 'pointer-leave' })).toBe(pushed); + expect(heldStoryReducer(pushed, { type: 'push-end' })).toMatchObject({ stage: 'ending' }); + }); + + it('keeps a hover hold when a push starts or ends', () => { + const hovered = play({ type: 'pointer-enter' }); + + expect(heldStoryReducer(hovered, { type: 'push-start' })).toBe(hovered); + expect(heldStoryReducer(hovered, { type: 'push-end' })).toBe(hovered); + }); + + it('starts a fresh push hold when a push is still going as the ending lands', () => { + const ending = play({ type: 'push-start' }, { type: 'push-end' }, { type: 'push-start' }); + + expect(ending).toMatchObject({ stage: 'ending', plays: 1 }); + expect(heldStoryReducer(ending, landed(false, true))).toEqual({ + stage: 'holding', + plays: 2, + heldBy: 'push', + }); + }); +}); diff --git a/apps/docs/src/components/features/story-state.ts b/apps/docs/src/components/features/story-state.ts new file mode 100644 index 00000000..39b02e9c --- /dev/null +++ b/apps/docs/src/components/features/story-state.ts @@ -0,0 +1,76 @@ +/** + * Where a feature card's held story is, and how each event moves it + * (story.tsx). A pure reducer, so the rules are testable without a DOM. + */ + +/** + * Where a held story is. It rests on the still frame, holds while the + * pointer stays or a scroll push runs, and plays its ending back to the + * still frame once the hold ends. + */ +export type HeldStage = 'still' | 'holding' | 'ending'; + +/** + * What holds the story: a hovering pointer, or a touch that scrolls the + * page over the card, a scroll push, from its first push to its fling's + * end. + */ +export type HeldBy = 'pointer' | 'push'; + +export interface HeldStoryState { + stage: HeldStage; + /** + * Counts the story's plays. An illustration keys its animation by it, so + * every play starts from the still frame. + */ + plays: number; + /** What holds the current play, or held the last one. */ + heldBy: HeldBy; +} + +export type HeldStoryEvent = + | { type: 'pointer-enter' } + | { type: 'pointer-leave' } + | { type: 'push-start' } + | { type: 'push-end' } + /** The ending landed on the still frame, with what is on the card now. */ + | { type: 'ending-landed'; pointerOnCard: boolean; pushing: boolean }; + +export const STILL: HeldStoryState = { stage: 'still', plays: 0, heldBy: 'pointer' }; + +const hold = (state: HeldStoryState, heldBy: HeldBy): HeldStoryState => ({ + stage: 'holding', + plays: state.plays + 1, + heldBy, +}); + +// What each start and end event is about. +const STARTED_BY = { 'pointer-enter': 'pointer', 'push-start': 'push' } as const; +const ENDED_BY = { 'pointer-leave': 'pointer', 'push-end': 'push' } as const; + +// An ending that lands with the pointer still on the card, or a push still +// running, starts a fresh hold, the pointer's first. +function land(state: HeldStoryState, pointerOnCard: boolean, pushing: boolean): HeldStoryState { + if (pointerOnCard) return hold(state, 'pointer'); + if (pushing) return hold(state, 'push'); + + return { ...state, stage: 'still' }; +} + +/** + * Only the still frame starts a hold, so an event during a hold or an + * ending waits. Only what started a hold ends it, and only a landing ends + * an ending. + */ +export function heldStoryReducer(state: HeldStoryState, event: HeldStoryEvent): HeldStoryState { + if (event.type === 'ending-landed') { + return state.stage === 'ending' ? land(state, event.pointerOnCard, event.pushing) : state; + } + if (event.type === 'pointer-enter' || event.type === 'push-start') { + return state.stage === 'still' ? hold(state, STARTED_BY[event.type]) : state; + } + + return state.stage === 'holding' && state.heldBy === ENDED_BY[event.type] + ? { ...state, stage: 'ending' } + : state; +} diff --git a/apps/docs/src/components/features/story.tsx b/apps/docs/src/components/features/story.tsx index 776108ab..cad02d83 100644 --- a/apps/docs/src/components/features/story.tsx +++ b/apps/docs/src/components/features/story.tsx @@ -3,7 +3,8 @@ /** * The lifecycle every feature card's story shares (SHA-178): a hover plays * the story, and a story under way always finishes after the pointer leaves. - * Touch, keyboard, and reduced motion leave the card on its still frame. + * Keyboard and reduced motion leave the card on its still frame, and so does + * touch, unless the illustration passes a scroll push to a held story. * StoryCard is the card. An illustration takes one of two story shapes: * useStory repeats a play while the pointer stays, and useHeldStory holds * while the pointer stays, then plays its ending. A held story can follow @@ -16,6 +17,7 @@ import { useCallback, useContext, useEffect, + useReducer, useRef, useState, } from 'react'; @@ -24,6 +26,8 @@ import { useReducedMotion } from 'motion/react'; import { useCanHover } from '@/lib/use-can-hover'; +import { type HeldBy, type HeldStage, heldStoryReducer, STILL } from './story-state'; + // --------------------------------------------- // The card // --------------------------------------------- @@ -172,12 +176,7 @@ export function useStory(): Story { // A story that holds // --------------------------------------------- -/** - * Where a held story is. It rests on the still frame, holds from a hover - * for as long as the pointer stays, and plays its ending back to the still - * frame once the pointer leaves. - */ -export type HeldStage = 'still' | 'holding' | 'ending'; +export type { HeldBy, HeldStage } from './story-state'; /** Where an illustration's held story is, which play, and how to end it. */ export interface HeldStory { @@ -187,15 +186,26 @@ export interface HeldStory { * every play starts from the still frame. */ plays: number; + /** What holds the current play, or held the last one. */ + heldBy: HeldBy; /** Called by the illustration when its ending lands on the still frame. */ onStoryEnd: () => void; + /** + * For an illustration whose scene has scroll push on: holds the story + * from the touch's first push, as a hover does, and ends it once the + * fling settles. Stable. Under reduced motion, or while the story isn't + * enabled, a push holds nothing. + */ + onPushStart: () => void; + onPushEnd: () => void; } /** How an illustration with a held story takes part in it. */ export interface HeldStoryOptions { /** - * False keeps the card on its still frame, ignoring the pointer, as a - * card does until its live scene shows the still frame. Defaults to true. + * False keeps the card on its still frame, ignoring the pointer and any + * push, as a card does until its live scene shows the still frame. + * Defaults to true. */ enabled?: boolean; /** @@ -207,43 +217,43 @@ export interface HeldStoryOptions { /** * The held story of the illustration that calls it, played by a hover on - * its StoryCard. Its ending runs to the still frame once it starts. A - * pointer that comes back during the ending lets it land, then a fresh play - * starts. + * its StoryCard or by a scroll push the illustration passes on. Its ending + * runs to the still frame once it starts. A pointer or a push that comes + * back during the ending lets it land, then a fresh play starts + * (story-state.ts has the rules). */ -export function useHeldStory({ enabled, onPointerMove }: HeldStoryOptions = {}): HeldStory { - const [story, setStory] = useState<{ stage: HeldStage; plays: number }>({ - stage: 'still', - plays: 0, - }); +export function useHeldStory({ enabled = true, onPointerMove }: HeldStoryOptions = {}): HeldStory { + const [story, dispatch] = useReducer(heldStoryReducer, STILL); + const reducedMotion = useReducedMotion() === true; + // Whether a push runs now, which only the ending's landing reads. + const pushingRef = useRef(false); const pointerOnCardRef = useCardPointer( - // Only the still frame starts the story. A hover during the ending waits - // for it to land. - () => - setStory((current) => - current.stage === 'still' ? { stage: 'holding', plays: current.plays + 1 } : current, - ), - // Leaving during the hold ends the story. - () => - setStory((current) => - current.stage === 'holding' ? { ...current, stage: 'ending' } : current, - ), + () => dispatch({ type: 'pointer-enter' }), + () => dispatch({ type: 'pointer-leave' }), { enabled, onMove: onPointerMove }, ); + const canPush = enabled && !reducedMotion; + + const onPushStart = useCallback(() => { + if (!canPush) return; + pushingRef.current = true; + dispatch({ type: 'push-start' }); + }, [canPush]); + + const onPushEnd = useCallback(() => { + pushingRef.current = false; + dispatch({ type: 'push-end' }); + }, []); // Stable, so an illustration can list it in an effect's deps without // restarting the play under way on every render. const onStoryEnd = useCallback(() => { - const replaying = pointerOnCardRef.current; - - setStory((current) => { - if (current.stage !== 'ending') return current; - - return replaying - ? { stage: 'holding', plays: current.plays + 1 } - : { ...current, stage: 'still' }; + dispatch({ + type: 'ending-landed', + pointerOnCard: pointerOnCardRef.current, + pushing: pushingRef.current, }); }, [pointerOnCardRef]); - return { ...story, onStoryEnd }; + return { ...story, onStoryEnd, onPushStart, onPushEnd }; } From 4d0bcf3253e687aaba78c7df118a0bf9ae9a9457 Mon Sep 17 00:00:00 2001 From: Hunter Garrett Date: Thu, 15 Oct 2026 12:12:40 -0400 Subject: [PATCH 09/15] feat(docs): stir the Reactive card with a touch that scrolls the page The touch half of SHA-216's phase 3. The Reactive card's scene turns on scroll push, and passes each push's start and end to the held story. When a push starts, the arrow fades out over --fade-sm and the smudge eases back at decay 0.4 while the finger and the fling stir it. Once the fling settles, the ending clears the smudges and swoops the arrow back along the J, skipping the flight off, since the arrow is already hidden. The hero pauses while the push story plays. Under reduced motion, scroll push stays off, so a touch can't leave a smudge for the decay-0 still frame to hold. --- .../features/reactive-illustration.module.css | 7 ++ .../features/reactive-illustration.tsx | 65 ++++++++++++------- .../components/features/reactive-scene.tsx | 50 ++++++++++++-- 3 files changed, 96 insertions(+), 26 deletions(-) diff --git a/apps/docs/src/components/features/reactive-illustration.module.css b/apps/docs/src/components/features/reactive-illustration.module.css index aca93b92..01fc69f5 100644 --- a/apps/docs/src/components/features/reactive-illustration.module.css +++ b/apps/docs/src/components/features/reactive-illustration.module.css @@ -40,6 +40,7 @@ blend would then have nothing under it to blend with. */ .pointer { position: absolute; + transition: opacity var(--fade-sm) var(--ease-out); top: 0; left: 0; box-sizing: border-box; @@ -49,6 +50,12 @@ translate: calc(var(--arrow-x) * var(--mock-px)) calc(var(--arrow-y) * var(--mock-px)); } +/* A scroll push hides the arrow while the touch stirs the smudge. It shows + again as it swoops back in from off the window. */ +.illustration[data-arrow-hidden] .pointer { + opacity: 0; +} + /* The halo, the pointer's full box, in light gray with an overlay blend, which lightens it over bright color and keeps it dim over dark. */ .pointer[data-part='halo'] { diff --git a/apps/docs/src/components/features/reactive-illustration.tsx b/apps/docs/src/components/features/reactive-illustration.tsx index 0d1dfde8..3c878f1d 100644 --- a/apps/docs/src/components/features/reactive-illustration.tsx +++ b/apps/docs/src/components/features/reactive-illustration.tsx @@ -30,6 +30,7 @@ import { type MotionValue, useMotionValue, useMotionValueEvent, + useReducedMotion, useSpring, useTransform, } from 'motion/react'; @@ -59,7 +60,7 @@ import { import styles from './reactive-illustration.module.css'; import type { ReactiveSceneProps } from './reactive-scene'; import { pointOnJ, REACTIVE_SMUDGE } from './reactive-smudge'; -import { type HeldStage, useHeldStory } from './story'; +import { type HeldBy, type HeldStage, type HeldStory, useHeldStory } from './story'; // --------------------------------------------- // Loading the scene @@ -265,26 +266,30 @@ function useCardPointer(illustrationRef: RefObject) { } /** - * Where the arrow is in a hover. It rests in the still frame, flies out, - * flies back in, and follows the pointer. Once the pointer leaves, it - * follows the pointer's way off the window, waits off it while the - * visitor's smudges clear, then swoops back along the J. + * Where the arrow is in the story. It rests in the still frame. A hover + * sends it out, back in, and following the pointer. A scroll push hides it + * where it rests while the touch stirs the smudge. Once the hover or the + * push ends, it leaves the way the pointer did, if it was following, waits + * off the window while the smudges clear, then swoops back along the J. */ -type Leg = 'resting' | 'out' | 'in' | 'following' | 'leaving' | 'clearing' | 'swooping'; +type Leg = 'resting' | 'out' | 'in' | 'following' | 'pushing' | 'leaving' | 'clearing' | 'swooping'; /** A leg that ends when a flight or a wait does, which moves the play to the next leg. */ type TimedLeg = 'out' | 'in' | 'leaving' | 'clearing'; -function legOf(stage: HeldStage, finished: TimedLeg | null): Leg { +function legOf(stage: HeldStage, heldBy: HeldBy, finished: TimedLeg | null): Leg { if (stage === 'still') return 'resting'; if (stage === 'holding') { + if (heldBy === 'push') return 'pushing'; if (finished === null) return 'out'; return finished === 'out' ? 'in' : 'following'; } - if (finished === 'leaving') return 'clearing'; + if (finished === 'clearing') return 'swooping'; + // A push ending skips the flight off: the arrow is already hidden. + if (finished === 'leaving' || heldBy === 'push') return 'clearing'; - return finished === 'clearing' ? 'swooping' : 'leaving'; + return 'leaving'; } function decayOf(leg: Leg): number { @@ -308,15 +313,13 @@ const canvasTip = (pose: ArrowPose): [number, number] => { * strokes. */ function useArrow( - stage: HeldStage, - plays: number, - onStoryEnd: () => void, + { stage, plays, heldBy, onStoryEnd }: HeldStory, pointer: CardPointer, resetPointer: () => void, ) { // The last timed leg this play finished. const [finished, setFinished] = useState<{ play: number; leg: TimedLeg } | null>(null); - const leg = legOf(stage, finished?.play === plays ? finished.leg : null); + const leg = legOf(stage, heldBy, finished?.play === plays ? finished.leg : null); const out = useMotionValue(0); const flightIn = useMotionValue(0); @@ -378,8 +381,11 @@ function useArrow( case 'following': return followPose.get(); case 'leaving': - case 'clearing': return leavePose.get(); + case 'clearing': + // After a push the arrow waits hidden in its spot, and after a + // hover it waits where it left the window. + return heldBy === 'push' ? STILL_FRAME_ARROW : leavePose.get(); case 'swooping': return swoopPoseValue.get(); default: @@ -484,7 +490,11 @@ function useArrow( else if (leg === 'in') strokeAt = inTip; else if (leg === 'swooping') strokeAt = jPoint; - return { leg, decay: decayOf(leg), style, strokeAt }; + // Hidden while a push stirs the smudge and while it clears after, so the + // arrow only shows again as it swoops back in. + const hidden = leg === 'pushing' || (leg === 'clearing' && heldBy === 'push'); + + return { leg, hidden, decay: decayOf(leg), style, strokeAt }; } // --------------------------------------------- @@ -493,8 +503,8 @@ function useArrow( // Hidden from screen readers: the card's title and description carry its // message. `data-scene` says whether the live scene shows the still frame -// yet, `data-stage` where the story is, and `data-arrow` where the arrow is -// in it. +// yet, `data-stage` where the story is, `data-arrow` where the arrow is in +// it, and `data-arrow-hidden` whether a push has hidden it. // // `m` under LazyMotion rather than `motion`, as in the other feature cards: // the illustration only binds motion values to style, which domMin covers. @@ -505,10 +515,13 @@ export function ReactiveIllustration() { const { pointer, onPointerMove, reset } = useCardPointer(illustrationRef); // The story waits for the live scene's still frame, so a card showing the // image, as it does without WebGPU, stays still. - const { stage, plays, onStoryEnd } = useHeldStory({ enabled: laid, onPointerMove }); - const arrow = useArrow(stage, plays, onStoryEnd, pointer, reset); + const story = useHeldStory({ enabled: laid, onPointerMove }); + const arrow = useArrow(story, pointer, reset); + // A touch can only stir the smudge with motion allowed, so under reduced + // motion it can't leave a smudge for the decay-0 still frame to hold. + const reducedMotion = useReducedMotion() === true; - usePauseHeroWhile(stage !== 'still'); + usePauseHeroWhile(story.stage !== 'still'); return ( @@ -516,14 +529,22 @@ export function ReactiveIllustration() { aria-hidden className={styles.illustration} data-arrow={arrow.leg} + data-arrow-hidden={arrow.hidden || undefined} data-scene={laid ? 'laid' : 'still'} - data-stage={stage} + data-stage={story.stage} ref={illustrationRef} > {/* ShaderScene fills the illustration by itself. The arrow follows it in the DOM, so it paints on top. */} {Scene && ( - setLaid(true)} strokeAt={arrow.strokeAt} /> + setLaid(true)} + scrollPush={!reducedMotion} + strokeAt={arrow.strokeAt} + /> )} {!laid && ( diff --git a/apps/docs/src/components/features/reactive-scene.tsx b/apps/docs/src/components/features/reactive-scene.tsx index 7d5e6125..ea248aab 100644 --- a/apps/docs/src/components/features/reactive-scene.tsx +++ b/apps/docs/src/components/features/reactive-scene.tsx @@ -5,14 +5,16 @@ * CursorSmudge that holds a smudge along the J path (reactive-smudge.ts). * After the scene's first frame, a scripted stroke lays the J, and the * still frame is ready once it lands. The illustration sets the smudge's - * decay for its story, and can stroke it too, as the arrow glides. + * decay for its story, and can stroke it too, as the arrow flies. With + * scroll push on, a touch that scrolls the page over the card stirs the + * smudge, and the scene reports each push's start and end. * reactive-illustration.tsx loads this module with import() from an * effect, which keeps three out of the server render (the SSR gotcha in * docs/agents/docs-site.md). */ import { useEffect, useRef, useState } from 'react'; -import { CursorSmudge, LiquidGradient, ShaderScene } from '@camp-dev/shaders'; +import { CursorSmudge, LiquidGradient, ShaderScene, useShaderContext } from '@camp-dev/shaders'; import { animate, type MotionValue, useMotionValue, useTransform } from 'motion/react'; import { EASE_OUT } from '@/lib/easing'; @@ -30,9 +32,48 @@ export interface ReactiveSceneProps { * nothing scripted strokes. The J's own stroke takes over while it lays. */ strokeAt: MotionValue<[number, number]> | null; + /** Whether a touch that scrolls the page over the card stirs the smudge. */ + scrollPush: boolean; + /** Fires when a touch's push starts, and when its fling settles. */ + onPushStart: () => void; + onPushEnd: () => void; } -export default function ReactiveScene({ onStillFrame, decay, strokeAt }: ReactiveSceneProps) { +/** + * Passes the scene's scroll-push starts and ends on. A child of the scene, + * because only the scene's own context reaches its cursor input. + */ +function PushEvents({ onStart, onEnd }: { onStart: () => void; onEnd: () => void }) { + const context = useShaderContext(); + const callbacksRef = useRef({ onStart, onEnd }); + + useEffect(() => { + callbacksRef.current = { onStart, onEnd }; + }); + + useEffect(() => { + if (!context) return undefined; + const input = context.getCursorInput(); + const stopWatchingStart = input.onPushStart(() => callbacksRef.current.onStart()); + const stopWatchingEnd = input.onPushEnd(() => callbacksRef.current.onEnd()); + + return () => { + stopWatchingStart(); + stopWatchingEnd(); + }; + }, [context]); + + return null; +} + +export default function ReactiveScene({ + onStillFrame, + decay, + strokeAt, + scrollPush, + onPushStart, + onPushEnd, +}: ReactiveSceneProps) { const progress = useMotionValue(0); const point = useTransform(progress, pointOnJ); const [laying, setLaying] = useState(false); @@ -70,7 +111,7 @@ export default function ReactiveScene({ onStillFrame, decay, strokeAt }: Reactiv }; return ( - + {/* A literal 0 holds the flow still, so the scene parks whenever nothing strokes. */} @@ -79,6 +120,7 @@ export default function ReactiveScene({ onStillFrame, decay, strokeAt }: Reactiv radius={REACTIVE_SMUDGE.radius} strength={REACTIVE_SMUDGE.strength} /> + ); } From 9ba8dcac49f166fb135a1417bd87be6a5651bcbb Mon Sep 17 00:00:00 2001 From: Hunter Garrett Date: Thu, 15 Oct 2026 20:25:00 -0400 Subject: [PATCH 10/15] fix(docs): smooth Reactive cursor movement --- .../features/reactive-illustration.tsx | 39 +++++++++++++------ 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/apps/docs/src/components/features/reactive-illustration.tsx b/apps/docs/src/components/features/reactive-illustration.tsx index 3c878f1d..e4da2428 100644 --- a/apps/docs/src/components/features/reactive-illustration.tsx +++ b/apps/docs/src/components/features/reactive-illustration.tsx @@ -182,9 +182,16 @@ const TURN_SMOOTHING = 0.025; // // Stiffness and damping rather than visualDuration, which would stall the // turn on every pointer event (the time-defined-spring gotcha in -// docs/agents/docs-site.md). These are what visualDuration 0.12 with no -// bounce works out to: critically damped, settling in about 120 ms. -const TURN_SPRING = { stiffness: 1900, damping: 87, mass: 1 }; +// docs/agents/docs-site.md). Critical damping keeps the turn bounce-free. +// A turn from rest covers about 95% in 240 ms, then eases through its last +// few degrees. Lower stiffness stretches that settle; damping is twice +// the square root of stiffness at mass 1 to keep the same response. +const TURN_SPRING = { stiffness: 400, damping: 40, mass: 1 }; + +// Smooth the pointer's position between mouse events. At mass 1, damping +// 50 critically damps stiffness 625: about 95% of a move in 190 ms, with +// no bounce. Position catches up a little sooner than the arrow's turn. +const FOLLOW_SPRING = { stiffness: 625, damping: 50, mass: 1 }; // The slowest the pointer can move, in mock pixels a second, and still // turn the arrow. Slower is a tremble, not a direction. @@ -197,7 +204,7 @@ const HOLD_DECAY = 0; const STORY_DECAY = 0.4; const CLEAR_DECAY = 1; -/** The pointer over the card, in mock pixels, and the way it heads. */ +/** The eased pointer over the card, in mock pixels, and the way the mouse heads. */ interface CardPointer { x: MotionValue; y: MotionValue; @@ -208,13 +215,15 @@ interface CardPointer { } /** - * Tracks the pointer over the card from its moves. The heading follows the - * pointer's velocity through a smoothing filter, so it turns smoothly on - * every move, and a still or trembling pointer keeps it. + * Eases the pointer's position toward each mouse move without restarting + * its velocity. The heading follows the raw mouse velocity through a + * smoothing filter, and a still or trembling mouse keeps its heading. */ function useCardPointer(illustrationRef: RefObject) { - const x = useMotionValue(0); - const y = useMotionValue(0); + const targetX = useMotionValue(0); + const targetY = useMotionValue(0); + const x = useSpring(targetX, FOLLOW_SPRING); + const y = useSpring(targetY, FOLLOW_SPRING); const heading = useMotionValue(STILL_FRAME_HEADING); const enteredAt = useRef<[number, number] | null>(null); // The last move, in mock pixels and seconds, and the filtered velocity, @@ -231,10 +240,14 @@ function useCardPointer(illustrationRef: RefObject) { const time = event.timeStamp / 1000; const last = lastMoveRef.current; - x.set(nextX); - y.set(nextY); + targetX.set(nextX); + targetY.set(nextY); lastMoveRef.current = { x: nextX, y: nextY, time }; if (!last) { + // Start each hover at its entry point, without carrying motion from + // the previous hover into the arrow's flight back in. + x.jump(nextX); + y.jump(nextY); enteredAt.current = [nextX, nextY]; velocityRef.current = [0, 0]; @@ -396,6 +409,7 @@ function useArrow( // rather than drawing one across the window from where the last left off. const outTip = useTransform(outPose, canvasTip); const inTip = useTransform(inPose, canvasTip); + const followTip = useTransform(followPose, canvasTip); const jPoint = useTransform(swoop, pointOnJ); // While the visitor hovers, keep where the arrow is, so it leaves from @@ -488,6 +502,9 @@ function useArrow( if (leg === 'out') strokeAt = outTip; else if (leg === 'in') strokeAt = inTip; + // The smudge follows the eased tip too, rather than the raw mouse ahead + // of it. A scripted stroke takes precedence over mouse input. + else if (leg === 'following') strokeAt = followTip; else if (leg === 'swooping') strokeAt = jPoint; // Hidden while a push stirs the smudge and while it clears after, so the From 39ed91db96d311f3186489f7ffedced9eafb5c32 Mon Sep 17 00:00:00 2001 From: Hunter Garrett Date: Fri, 16 Oct 2026 05:53:19 -0400 Subject: [PATCH 11/15] feat(docs): show the Reactive card's captured still frame, and no scene under reduced motion The Reactive card's image was still the mock's export, so it showed the old trail for a moment before the live scene laid the J. It is now captured from the live still frame, arrow and all, by scripts/capture-reactive-still.mjs, so the swap to the live scene is invisible. The image also stands in under reduced motion, where the card now mounts no scene at all, so neither a hover nor a touch can stir it. With no scene under reduced motion, the scene keeps scroll push on. --- .fallowrc.json | 4 +- apps/docs/public/features/reactive.png | Bin 142574 -> 364265 bytes .../features/reactive-illustration.module.css | 6 +- .../features/reactive-illustration.tsx | 15 ++--- .../components/features/reactive-scene.tsx | 5 +- scripts/capture-reactive-still.mjs | 62 ++++++++++++++++++ 6 files changed, 76 insertions(+), 16 deletions(-) create mode 100644 scripts/capture-reactive-still.mjs diff --git a/.fallowrc.json b/.fallowrc.json index 948e567e..515620af 100644 --- a/.fallowrc.json +++ b/.fallowrc.json @@ -8,7 +8,9 @@ // Run by hand to regenerate blue-noise-tile.ts. "scripts/generate-blue-noise.mjs", // Run by build-posters.sh after each poster capture. - "scripts/build-thumbnail.mjs" + "scripts/build-thumbnail.mjs", + // Run by hand to recapture the Reactive feature card's still frame. + "scripts/capture-reactive-still.mjs" ], // The poster command esbuilds the harness at runtime, from a directory it // resolves by path in poster/bundle.ts. diff --git a/apps/docs/public/features/reactive.png b/apps/docs/public/features/reactive.png index 45a540294945b31fe571e684de3a49c48af408c6..96fc06714c21cfaa252b4548c0371ea7aeed5cc8 100644 GIT binary patch literal 364265 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%0DTwOOM%lBi{Yt?}Tr$oE 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
  • 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%0DnN6m%pxQvJ=XER-l(3F&GZ=LAN(u4G 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 diff --git a/apps/docs/src/components/features/reactive-scene.tsx b/apps/docs/src/components/features/reactive-scene.tsx index d03edcb2..962e4ffb 100644 --- a/apps/docs/src/components/features/reactive-scene.tsx +++ b/apps/docs/src/components/features/reactive-scene.tsx @@ -7,7 +7,8 @@ * still frame is ready once it lands. The illustration sets the smudge's * decay for its story, and can stroke it too, as the arrow flies. With * scroll push on, a touch that scrolls the page over the card stirs the - * smudge, and the scene reports each push's start and end. + * smudge, and the scene reports each push's start and end. A resize while + * the card rests lays the J again. * reactive-illustration.tsx loads this module with import() from an * effect, which keeps three out of the server render (the SSR gotcha in * docs/agents/docs-site.md). @@ -23,8 +24,12 @@ import { REACTIVE_GRADIENT } from './reactive-gradient'; import { pointOnJ, REACTIVE_SMUDGE } from './reactive-smudge'; export interface ReactiveSceneProps { - /** Fires once the J's smudge is laid and the scene shows the still frame. */ - onStillFrame: () => void; + /** + * Fires with true once the J's smudge is laid and the scene shows the + * still frame, and with false whenever it lays the J again: after a new + * renderer's first frame, or a resize while the card rests. + */ + onStillFrameChange: (ready: boolean) => void; /** CursorSmudge's decay. 0 holds the smudge, as the still frame does. */ decay: number; /** @@ -32,14 +37,22 @@ export interface ReactiveSceneProps { * nothing scripted strokes. The J's own stroke takes over while it lays. */ strokeAt: MotionValue<[number, number]> | null; - /** Fires when a touch's push starts, and when its fling settles. */ + /** Whether the card rests on its still frame, so a resize lays the J again. */ + resting: boolean; + /** + * Fire when a touch that scrolls the page over the card first pushes the + * smudge, and when its fling settles. A tap that never scrolls fires + * neither. + */ onPushStart: () => void; onPushEnd: () => void; } /** - * Passes the scene's scroll-push starts and ends on. A child of the scene, - * because only the scene's own context reaches its cursor input. + * Passes the scene's scroll pushes on, from a push's first stroke to its + * end. A child of the scene, because only the scene's own context reaches + * its cursor input. A push under way when the scene goes, as a renderer + * rebuild takes it, ends with it. */ function PushEvents({ onStart, onEnd }: { onStart: () => void; onEnd: () => void }) { const context = useShaderContext(); @@ -51,23 +64,68 @@ function PushEvents({ onStart, onEnd }: { onStart: () => void; onEnd: () => void useEffect(() => { if (!context) return undefined; + const { scheduler } = context; const input = context.getCursorInput(); - const stopWatchingStart = input.onPushStart(() => callbacksRef.current.onStart()); - const stopWatchingEnd = input.onPushEnd(() => callbacksRef.current.onEnd()); + let contact = false; + let pushing = false; + const end = () => { + contact = false; + if (!pushing) return; + pushing = false; + callbacksRef.current.onEnd(); + }; + // Runs after the input's own tick, which works out the frame's push. + const watch = () => { + if (!contact || pushing || !input.getPush()) return; + pushing = true; + callbacksRef.current.onStart(); + }; + const stopWatchingStart = input.onPushStart(() => { + contact = true; + }); + const stopWatchingEnd = input.onPushEnd(end); + + scheduler.add(watch); return () => { stopWatchingStart(); stopWatchingEnd(); + scheduler.remove(watch); + end(); }; }, [context]); return null; } +/** + * Lays the J again when the canvas resizes while the card rests: a resize + * clears CursorSmudge's field, and with it the still frame's smudge. + */ +function RelayOnResize({ resting, relay }: { resting: boolean; relay: () => void }) { + const context = useShaderContext(); + const latestRef = useRef({ resting, relay }); + + useEffect(() => { + latestRef.current = { resting, relay }; + }); + + useEffect(() => { + if (!context) return undefined; + + return context.canvasSize.on('change', () => { + if (latestRef.current.resting) latestRef.current.relay(); + }); + }, [context]); + + return null; +} + export default function ReactiveScene({ - onStillFrame, + onStillFrameChange, decay, strokeAt, + resting, onPushStart, onPushEnd, }: ReactiveSceneProps) { @@ -75,10 +133,10 @@ export default function ReactiveScene({ const point = useTransform(progress, pointOnJ); const [laying, setLaying] = useState(false); // The latest callback, so a new one from the parent doesn't restart the stroke. - const onStillFrameRef = useRef(onStillFrame); + const onStillFrameChangeRef = useRef(onStillFrameChange); useEffect(() => { - onStillFrameRef.current = onStillFrame; + onStillFrameChangeRef.current = onStillFrameChange; }); // The scene attaches the point in an effect of its own when `laying` @@ -93,7 +151,7 @@ export default function ReactiveScene({ void controls.then(() => { setLaying(false); - onStillFrameRef.current(); + onStillFrameChangeRef.current(true); }); return () => controls.stop(); @@ -101,8 +159,10 @@ export default function ReactiveScene({ // The stroke starts on the first frame, once the scene and its cursor // input exist, so none of it is lost to the renderer starting up. A - // rebuilt renderer draws a first frame of its own, and lays the J again. + // rebuilt renderer draws a first frame of its own, and lays the J again, + // as a resize does while the card rests. const layJ = () => { + onStillFrameChangeRef.current(false); progress.set(0); setLaying(true); }; @@ -118,6 +178,7 @@ export default function ReactiveScene({ strength={REACTIVE_SMUDGE.strength} /> + ); } diff --git a/apps/docs/src/components/features/reactive-smudge.ts b/apps/docs/src/components/features/reactive-smudge.ts index d383f7ca..935d1713 100644 --- a/apps/docs/src/components/features/reactive-smudge.ts +++ b/apps/docs/src/components/features/reactive-smudge.ts @@ -5,6 +5,10 @@ * still frame. */ +/** The illustration's size in mock pixels, which the arrow and the J measure in. */ +export const MOCK_WIDTH = 312; +export const MOCK_HEIGHT = 309; + interface ReactiveSmudge { /** CursorSmudge's strength: the furthest the stroke pulls, in canvas heights. */ strength: number; @@ -14,9 +18,9 @@ interface ReactiveSmudge { laySeconds: number; } -// The author picked this strength and radius at phase 1b, about twice -// CursorSmudge's defaults, so the streak reads as the mock's trail. 0.85 s -// is the ending's swoop, which lays the same smudge. +// About twice CursorSmudge's default strength and radius, so the streak +// reads as the mock's trail. 0.85 s is the ending's swoop, which lays the +// same smudge. export const REACTIVE_SMUDGE: ReactiveSmudge = { strength: 0.25, radius: 0.24, @@ -25,12 +29,12 @@ export const REACTIVE_SMUDGE: ReactiveSmudge = { // The J, as a cubic Bézier in 0..1 canvas units from the top-left: up from // below the bottom edge near the left corner, bending over to the arrow at -// (240, 101) of the mock's 312 by 309. +// (240, 101) in mock pixels. const J_PATH = [ [0.12, 1.15], [0.15, 0.55], [0.45, 0.35], - [240 / 312, 101 / 309], + [240 / MOCK_WIDTH, 101 / MOCK_HEIGHT], ] as const; /** The point `t` of the way along the J, from 0 at its foot to 1 at the arrow. */ @@ -58,5 +62,5 @@ export function headingOnJ(t: number): number { const dy = weights[0] * (p1[1] - p0[1]) + weights[1] * (p2[1] - p1[1]) + weights[2] * (p3[1] - p2[1]); - return (Math.atan2(dy * 309, dx * 312) * 180) / Math.PI; + return (Math.atan2(dy * MOCK_HEIGHT, dx * MOCK_WIDTH) * 180) / Math.PI; } diff --git a/apps/docs/src/components/features/story.tsx b/apps/docs/src/components/features/story.tsx index cad02d83..ded2fbeb 100644 --- a/apps/docs/src/components/features/story.tsx +++ b/apps/docs/src/components/features/story.tsx @@ -11,6 +11,7 @@ * the pointer, and can wait for its live scene. */ import { + type ComponentType, createContext, type ReactNode, type RefObject, @@ -24,7 +25,9 @@ import { import { useReducedMotion } from 'motion/react'; +import { usePauseHeroWhile } from '@/components/home-hero/hero-pause'; import { useCanHover } from '@/lib/use-can-hover'; +import { useHasWebGpu } from '@/lib/use-has-webgpu'; import { type HeldBy, type HeldStage, heldStoryReducer, STILL } from './story-state'; @@ -109,6 +112,14 @@ function useCardPointer( card.addEventListener('pointermove', onPointerMove); card.addEventListener('pointerleave', onPointerLeave); + // A pointer already on the card as the gate opens sends no + // pointerenter, so it counts as entering now. Its first move tells + // `onMove` where it is. + if (card.matches(':hover')) { + pointerOnCardRef.current = true; + callbacksRef.current.onEnter(); + } + // The gate closing counts as the pointer leaving, so a held story ends // rather than holding with no pointer to release it. return () => { @@ -201,7 +212,7 @@ export interface HeldStory { } /** How an illustration with a held story takes part in it. */ -export interface HeldStoryOptions { +interface HeldStoryOptions { /** * False keeps the card on its still frame, ignoring the pointer and any * push, as a card does until its live scene shows the still frame. @@ -213,6 +224,33 @@ export interface HeldStoryOptions { * pointer enters on, for a story that follows the pointer. */ onPointerMove?: (event: PointerEvent) => void; + /** + * Pauses the homepage hero while the story plays and the card is in view, + * for a story with a live scene, as a playing favorite does. Off screen + * the card's scene pauses, so the hero can draw. Defaults to false. + */ + pausesHero?: boolean; +} + +/** Whether the illustration's StoryCard is on screen, which only a live story's hero pause reads. */ +function useCardInView(watching: boolean): boolean { + const cardRef = useContext(CardContext); + const [inView, setInView] = useState(false); + + useEffect(() => { + const card = cardRef?.current; + + if (!watching || !card) return undefined; + const observer = new IntersectionObserver(([entry]) => + setInView(entry?.isIntersecting ?? false), + ); + + observer.observe(card); + + return () => observer.disconnect(); + }, [cardRef, watching]); + + return watching && inView; } /** @@ -222,7 +260,11 @@ export interface HeldStoryOptions { * back during the ending lets it land, then a fresh play starts * (story-state.ts has the rules). */ -export function useHeldStory({ enabled = true, onPointerMove }: HeldStoryOptions = {}): HeldStory { +export function useHeldStory({ + enabled = true, + onPointerMove, + pausesHero = false, +}: HeldStoryOptions = {}): HeldStory { const [story, dispatch] = useReducer(heldStoryReducer, STILL); const reducedMotion = useReducedMotion() === true; // Whether a push runs now, which only the ending's landing reads. @@ -245,6 +287,19 @@ export function useHeldStory({ enabled = true, onPointerMove }: HeldStoryOptions dispatch({ type: 'push-end' }); }, []); + // Pushes stopping counts as the push ending, as the hover gate closing + // counts as the pointer leaving, so a push hold never outlives them. + useEffect( + () => () => { + if (!pushingRef.current) return; + pushingRef.current = false; + dispatch({ type: 'push-end' }); + }, + [canPush], + ); + + usePauseHeroWhile(useCardInView(pausesHero) && story.stage !== 'still'); + // Stable, so an illustration can list it in an effect's deps without // restarting the play under way on every render. const onStoryEnd = useCallback(() => { @@ -257,3 +312,54 @@ export function useHeldStory({ enabled = true, onPointerMove }: HeldStoryOptions return { ...story, onStoryEnd, onPushStart, onPushEnd }; } + +// --------------------------------------------- +// A live scene +// --------------------------------------------- + +/** + * A live scene for an illustration's story: `load` imports its module. The + * returned hook gives the scene's component where the scene may run, a + * browser with a WebGPU adapter and motion allowed, once its module has + * loaded, and null until then and anywhere else, where the card shows its + * still frame as an image. The module loads as the card mounts, so the + * scene mounts before the card scrolls into view. It loads through a plain + * import() from an effect rather than next/dynamic, for the reason + * favorite-scenes.tsx gives, which also keeps three out of the server + * render. + */ +export function createLiveScene( + load: () => Promise<{ default: ComponentType }>, +): () => ComponentType | null { + // The component once its module has loaded, so a later mount reads it + // straight away. + let loaded: ComponentType | null = null; + + return function useLiveScene() { + const hasWebGpu = useHasWebGpu(); + const reducedMotion = useReducedMotion() === true; + const enabled = hasWebGpu && !reducedMotion; + const [scene, setScene] = useState(() => loaded); + + useEffect(() => { + if (!enabled || scene) return undefined; + + let cancelled = false; + + load() + .then((module) => { + loaded = module.default; + if (!cancelled) setScene(() => module.default); + }) + .catch(() => { + // A module that fails to load leaves the card on its image. + }); + + return () => { + cancelled = true; + }; + }, [enabled, scene]); + + return enabled ? scene : null; + }; +} From ca995bd2ddd93eb8cecd3d9274218434e3f719f4 Mon Sep 17 00:00:00 2001 From: Hunter Garrett Date: Wed, 21 Oct 2026 10:55:42 -0400 Subject: [PATCH 14/15] refactor(docs): move createLiveScene out of story.tsx story.tsx exported the factory beside its StoryCard component, so Fast Refresh could not keep the story's state across an edit to that file. The factory now lives in live-scene.ts. --- .../src/components/features/live-scene.ts | 58 +++++++++++++++++++ .../features/reactive-illustration.tsx | 11 +--- apps/docs/src/components/features/story.tsx | 55 +----------------- 3 files changed, 62 insertions(+), 62 deletions(-) create mode 100644 apps/docs/src/components/features/live-scene.ts diff --git a/apps/docs/src/components/features/live-scene.ts b/apps/docs/src/components/features/live-scene.ts new file mode 100644 index 00000000..d6814b7a --- /dev/null +++ b/apps/docs/src/components/features/live-scene.ts @@ -0,0 +1,58 @@ +/** + * Loads a feature card's live scene where it may run, for an illustration + * whose held story waits for its scene (story.tsx). It lives apart from + * story.tsx so that file exports only components and hooks, which Fast + * Refresh needs to keep their state across an edit. + */ +import { type ComponentType, useEffect, useState } from 'react'; + +import { useReducedMotion } from 'motion/react'; + +import { useHasWebGpu } from '@/lib/use-has-webgpu'; + +/** + * A live scene for an illustration's story: `load` imports its module. The + * returned hook gives the scene's component where the scene may run, a + * browser with a WebGPU adapter and motion allowed, once its module has + * loaded, and null until then and anywhere else, where the card shows its + * still frame as an image. The module loads as the card mounts, so the + * scene mounts before the card scrolls into view. It loads through a plain + * import() from an effect rather than next/dynamic, for the reason + * favorite-scenes.tsx gives, which also keeps three out of the server + * render. + */ +export function createLiveScene( + load: () => Promise<{ default: ComponentType }>, +): () => ComponentType | null { + // The component once its module has loaded, so a later mount reads it + // straight away. + let loaded: ComponentType | null = null; + + return function useLiveScene() { + const hasWebGpu = useHasWebGpu(); + const reducedMotion = useReducedMotion() === true; + const enabled = hasWebGpu && !reducedMotion; + const [scene, setScene] = useState(() => loaded); + + useEffect(() => { + if (!enabled || scene) return undefined; + + let cancelled = false; + + load() + .then((module) => { + loaded = module.default; + if (!cancelled) setScene(() => module.default); + }) + .catch(() => { + // A module that fails to load leaves the card on its image. + }); + + return () => { + cancelled = true; + }; + }, [enabled, scene]); + + return enabled ? scene : null; + }; +} diff --git a/apps/docs/src/components/features/reactive-illustration.tsx b/apps/docs/src/components/features/reactive-illustration.tsx index a00462fd..05bb0055 100644 --- a/apps/docs/src/components/features/reactive-illustration.tsx +++ b/apps/docs/src/components/features/reactive-illustration.tsx @@ -31,6 +31,7 @@ import { import { EASE_OUT } from '@/lib/easing'; +import { createLiveScene } from './live-scene'; import { angleForHeading, arrowAtPointer, @@ -49,19 +50,13 @@ import { } from './reactive-arrow'; import styles from './reactive-illustration.module.css'; import { MOCK_HEIGHT, MOCK_WIDTH, pointOnJ, REACTIVE_SMUDGE } from './reactive-smudge'; -import { - createLiveScene, - type HeldBy, - type HeldStage, - type HeldStory, - useHeldStory, -} from './story'; +import { type HeldBy, type HeldStage, type HeldStory, useHeldStory } from './story'; // --------------------------------------------- // The scene // --------------------------------------------- -// The live scene, where it may run (story.tsx's createLiveScene). +// The live scene, where it may run (live-scene.ts). const useReactiveScene = createLiveScene(() => import('./reactive-scene')); // --------------------------------------------- diff --git a/apps/docs/src/components/features/story.tsx b/apps/docs/src/components/features/story.tsx index ded2fbeb..63616e6f 100644 --- a/apps/docs/src/components/features/story.tsx +++ b/apps/docs/src/components/features/story.tsx @@ -8,10 +8,9 @@ * StoryCard is the card. An illustration takes one of two story shapes: * useStory repeats a play while the pointer stays, and useHeldStory holds * while the pointer stays, then plays its ending. A held story can follow - * the pointer, and can wait for its live scene. + * the pointer, and can wait for its live scene (live-scene.ts). */ import { - type ComponentType, createContext, type ReactNode, type RefObject, @@ -27,7 +26,6 @@ import { useReducedMotion } from 'motion/react'; import { usePauseHeroWhile } from '@/components/home-hero/hero-pause'; import { useCanHover } from '@/lib/use-can-hover'; -import { useHasWebGpu } from '@/lib/use-has-webgpu'; import { type HeldBy, type HeldStage, heldStoryReducer, STILL } from './story-state'; @@ -312,54 +310,3 @@ export function useHeldStory({ return { ...story, onStoryEnd, onPushStart, onPushEnd }; } - -// --------------------------------------------- -// A live scene -// --------------------------------------------- - -/** - * A live scene for an illustration's story: `load` imports its module. The - * returned hook gives the scene's component where the scene may run, a - * browser with a WebGPU adapter and motion allowed, once its module has - * loaded, and null until then and anywhere else, where the card shows its - * still frame as an image. The module loads as the card mounts, so the - * scene mounts before the card scrolls into view. It loads through a plain - * import() from an effect rather than next/dynamic, for the reason - * favorite-scenes.tsx gives, which also keeps three out of the server - * render. - */ -export function createLiveScene( - load: () => Promise<{ default: ComponentType }>, -): () => ComponentType | null { - // The component once its module has loaded, so a later mount reads it - // straight away. - let loaded: ComponentType | null = null; - - return function useLiveScene() { - const hasWebGpu = useHasWebGpu(); - const reducedMotion = useReducedMotion() === true; - const enabled = hasWebGpu && !reducedMotion; - const [scene, setScene] = useState(() => loaded); - - useEffect(() => { - if (!enabled || scene) return undefined; - - let cancelled = false; - - load() - .then((module) => { - loaded = module.default; - if (!cancelled) setScene(() => module.default); - }) - .catch(() => { - // A module that fails to load leaves the card on its image. - }); - - return () => { - cancelled = true; - }; - }, [enabled, scene]); - - return enabled ? scene : null; - }; -} From 439cc8eab3b869eade3d5fb509fe88b7c4fc508f Mon Sep 17 00:00:00 2001 From: Hunter Garrett Date: Wed, 21 Oct 2026 11:01:53 -0400 Subject: [PATCH 15/15] fix(docs): keep the Reactive card's story in step with its scene - The J's stroke and the ending's flights and wait now pause with the scene's loop, which stops off screen and in a hidden tab (scene-pause.ts). They ran on Motion's clock before, so a fling that scrolled the card away ended its story off screen, and the card came back with an old smudge and no J. - A resize while the J lays starts the J over with a fresh stroke. Each resize clears the smudge, so a window drag used to leave only the J's tail. - The ending holds a still scripted point while the smudges clear, so a pointer or a push that comes back can't lay a stroke for the swoop to keep. - A pointer already on the card when the hover gate opens enters on its first move, so the arrow flies to the pointer rather than to (0, 0). - The scene reports no still frame as it unmounts, so a scene that mounts later keeps the image up until it lays its own J. - Touches pass through the arrow to the canvas, so a push can start on the arrow. --- .../features/reactive-illustration.module.css | 6 +- .../features/reactive-illustration.tsx | 43 +++++--- .../components/features/reactive-scene.tsx | 102 ++++++++++++++---- .../components/features/scene-pause.test.ts | 81 ++++++++++++++ .../src/components/features/scene-pause.ts | 49 +++++++++ apps/docs/src/components/features/story.tsx | 18 +++- 6 files changed, 259 insertions(+), 40 deletions(-) create mode 100644 apps/docs/src/components/features/scene-pause.test.ts create mode 100644 apps/docs/src/components/features/scene-pause.ts diff --git a/apps/docs/src/components/features/reactive-illustration.module.css b/apps/docs/src/components/features/reactive-illustration.module.css index de59dce1..3f75a59d 100644 --- a/apps/docs/src/components/features/reactive-illustration.module.css +++ b/apps/docs/src/components/features/reactive-illustration.module.css @@ -37,9 +37,13 @@ Both parts carry the whole placement themselves. A transform on a shared parent would make that parent a group of its own, and the halo's overlay - blend would then have nothing under it to blend with. */ + blend would then have nothing under it to blend with. + + Touches pass through to the canvas, whose own touchstart starts a scroll + push, even while a push hides the arrow. */ .pointer { position: absolute; + pointer-events: none; transition: opacity var(--fade-sm) var(--ease-out); top: 0; left: 0; diff --git a/apps/docs/src/components/features/reactive-illustration.tsx b/apps/docs/src/components/features/reactive-illustration.tsx index 05bb0055..21e3847f 100644 --- a/apps/docs/src/components/features/reactive-illustration.tsx +++ b/apps/docs/src/components/features/reactive-illustration.tsx @@ -50,6 +50,7 @@ import { } from './reactive-arrow'; import styles from './reactive-illustration.module.css'; import { MOCK_HEIGHT, MOCK_WIDTH, pointOnJ, REACTIVE_SMUDGE } from './reactive-smudge'; +import { createScenePause, type ScenePause } from './scene-pause'; import { type HeldBy, type HeldStage, type HeldStory, useHeldStory } from './story'; // --------------------------------------------- @@ -379,7 +380,9 @@ function useArrowPoses(pointer: CardPointer, turn: MotionValue, flights: * in an effect of its own, in the render where the leg starts, reading * where the point is as the stroke's start. A child's effects run before * its parent's, so a flight never runs ahead of the attach, and each leg's - * point is set up before its leg starts. + * point is set up before its leg starts. Every flight and wait pauses with + * the scene (scene-pause.ts), so the strokes it lays and the smudges it + * waits on to clear keep the scene's time. */ function useLegTimeline( leg: Leg, @@ -390,11 +393,13 @@ function useLegTimeline( flights, turn, resetPointer, + scenePause, }: { pointer: CardPointer; flights: Flights; turn: MotionValue; resetPointer: () => void; + scenePause: ScenePause; }, ) { useEffect(() => { @@ -404,7 +409,7 @@ function useLegTimeline( void controls.then(then); - return () => controls.stop(); + return scenePause.hold(controls); }; const steps: Partial () => void>> = { out: () => @@ -422,12 +427,16 @@ function useLegTimeline( leaving: () => run(leave, OUT_SECONDS, () => finish('leaving')), clearing: () => { const seconds = heldBy === 'push' ? OUT_SECONDS + CLEAR_SECONDS : CLEAR_SECONDS; - const wait = window.setTimeout(() => { + // A wait rather than a flight, as an animation of nothing, so it + // pauses with the scene while the smudges clear. + const wait = animate(0, 1, { duration: seconds }); + + void wait.then(() => { swoop.jump(0); finish('clearing'); - }, seconds * 1000); + }); - return () => window.clearTimeout(wait); + return scenePause.hold(wait); }, swooping: () => run(swoop, REACTIVE_SMUDGE.laySeconds, () => { @@ -440,7 +449,7 @@ function useLegTimeline( }; return steps[leg]?.(); - }, [leg, plays, heldBy, finish, pointer, flights, turn, resetPointer, onStoryEnd]); + }, [leg, plays, heldBy, finish, pointer, flights, turn, resetPointer, scenePause, onStoryEnd]); } // After a push the arrow waits hidden in its spot while the smudges clear, @@ -502,7 +511,12 @@ function useHeldTip(pose: MotionValue, stage: HeldStage, flights: Fli * pose's CSS variables, and the point a scripted stroke follows, if one * strokes. */ -function useArrow(story: HeldStory, pointer: CardPointer, resetPointer: () => void) { +function useArrow( + story: HeldStory, + pointer: CardPointer, + resetPointer: () => void, + scenePause: ScenePause, +) { const { stage, plays, heldBy } = story; // The last timed leg this play finished. const [finished, setFinished] = useState<{ play: number; leg: TimedLeg } | null>(null); @@ -519,11 +533,13 @@ function useArrow(story: HeldStory, pointer: CardPointer, resetPointer: () => vo // A point that never moves, attached while the card rests: a scripted // stroke beats the mouse and the push, so a pointer on the card before // the story starts, or a mouse that fails the hover gate, can't smudge - // the still frame its decay 0 holds. + // the still frame its decay 0 holds. The ending attaches it too while + // the smudges clear, so a pointer or a push that comes back then can't + // lay a stroke for the swoop's decay 0 to keep. const stillPoint = useMotionValue<[number, number]>([0.5, 0.5]); useHeldTip(pose, stage, flights); - useLegTimeline(leg, story, finish, { pointer, flights, turn, resetPointer }); + useLegTimeline(leg, story, finish, { pointer, flights, turn, resetPointer, scenePause }); const strokeOn: Record | null> = { resting: stillPoint, @@ -531,8 +547,8 @@ function useArrow(story: HeldStory, pointer: CardPointer, resetPointer: () => vo in: tips.inTip, following: tips.followTip, pushing: null, - leaving: null, - clearing: null, + leaving: stillPoint, + clearing: stillPoint, swooping: tips.jPoint, }; const style: ArrowStyle = { @@ -567,12 +583,14 @@ export function ReactiveIllustration() { // laid, nor while a new renderer or a resize lays it again. const [stillFrameReady, setStillFrameReady] = useState(false); const live = Scene !== null && stillFrameReady; + // The story's timed legs pause with the scene's loop. + const [scenePause] = useState(createScenePause); const illustrationRef = useRef(null); const { pointer, onPointerMove, reset } = useEasedPointer(illustrationRef); // The story waits for the live still frame, so a card showing the image, // as it does without WebGPU and under reduced motion, stays still. const story = useHeldStory({ enabled: live, onPointerMove, pausesHero: true }); - const arrow = useArrow(story, pointer, reset); + const arrow = useArrow(story, pointer, reset, scenePause); return ( @@ -590,6 +608,7 @@ export function ReactiveIllustration() { {Scene && ( void; + /** + * Fires with true when the scene pauses its loop, off screen or in a + * hidden tab, and with false when it resumes. Fires with false as the + * scene unmounts, so a pause never outlives it. + */ + onPausedChange: (paused: boolean) => void; /** CursorSmudge's decay. 0 holds the smudge, as the still frame does. */ decay: number; /** @@ -98,9 +108,36 @@ function PushEvents({ onStart, onEnd }: { onStart: () => void; onEnd: () => void return null; } +/** + * Passes the scene's pauses on. A child of the scene, because only the + * scene's own context reaches its scheduler. + */ +function PauseEvents({ onChange }: { onChange: (paused: boolean) => void }) { + const context = useShaderContext(); + const onChangeRef = useRef(onChange); + + useEffect(() => { + onChangeRef.current = onChange; + }); + + useEffect(() => { + if (!context) return undefined; + const report = (paused: boolean) => onChangeRef.current(paused); + const stopWatching = context.scheduler.onPauseChange(report); + + return () => { + stopWatching(); + report(false); + }; + }, [context]); + + return null; +} + /** * Lays the J again when the canvas resizes while the card rests: a resize - * clears CursorSmudge's field, and with it the still frame's smudge. + * clears CursorSmudge's field, and with it the still frame's smudge. That + * includes a resize while the J lays, which clears what it has laid so far. */ function RelayOnResize({ resting, relay }: { resting: boolean; relay: () => void }) { const context = useShaderContext(); @@ -123,52 +160,70 @@ function RelayOnResize({ resting, relay }: { resting: boolean; relay: () => void export default function ReactiveScene({ onStillFrameChange, + onPausedChange, decay, strokeAt, resting, onPushStart, onPushEnd, }: ReactiveSceneProps) { - const progress = useMotionValue(0); - const point = useTransform(progress, pointOnJ); - const [laying, setLaying] = useState(false); - // The latest callback, so a new one from the parent doesn't restart the stroke. - const onStillFrameChangeRef = useRef(onStillFrameChange); + // The point of the J's stroke under way, or null while none lays. Each + // lay has a point of its own, so a lay that starts over attaches a fresh + // stroke at the J's foot rather than going on from where the last left + // off. + const [layPoint, setLayPoint] = useState | null>(null); + const [scenePause] = useState(createScenePause); + // The latest callbacks, so a new one from the parent doesn't restart the stroke. + const callbacksRef = useRef({ onStillFrameChange, onPausedChange }); useEffect(() => { - onStillFrameChangeRef.current = onStillFrameChange; + callbacksRef.current = { onStillFrameChange, onPausedChange }; }); - // The scene attaches the point in an effect of its own when `laying` - // turns on, reading the J's foot as the stroke's start. A child's effects + // The scene attaches the point in an effect of its own when the lay + // starts, reading the J's foot as the stroke's start. A child's effects // run before its parent's, so the stroke never runs ahead of the attach. useEffect(() => { - if (!laying) return undefined; - const controls = animate(progress, 1, { + if (!layPoint) return undefined; + const controls = animate(0, 1, { duration: REACTIVE_SMUDGE.laySeconds, ease: EASE_OUT, + onUpdate: (progress) => layPoint.set(pointOnJ(progress)), }); void controls.then(() => { - setLaying(false); - onStillFrameChangeRef.current(true); + setLayPoint(null); + callbacksRef.current.onStillFrameChange(true); }); - return () => controls.stop(); - }, [laying, progress]); + return scenePause.hold(controls); + }, [layPoint, scenePause]); + + // A scene that unmounts takes its still frame with it, so a scene that + // mounts later keeps the image up until it lays its own J. + useEffect(() => { + const dropStillFrame = () => callbacksRef.current.onStillFrameChange(false); + + return dropStillFrame; + }, []); // The stroke starts on the first frame, once the scene and its cursor // input exist, so none of it is lost to the renderer starting up. A // rebuilt renderer draws a first frame of its own, and lays the J again, // as a resize does while the card rests. const layJ = () => { - onStillFrameChangeRef.current(false); - progress.set(0); - setLaying(true); + callbacksRef.current.onStillFrameChange(false); + setLayPoint(motionValue(pointOnJ(0))); + }; + + // The J's stroke pauses with the scene, and the illustration hears of it. + const reportPause = (paused: boolean) => { + scenePause.setPaused(paused); + callbacksRef.current.onPausedChange(paused); }; return ( - + {/* A literal 0 holds the flow still, so the scene parks whenever nothing strokes. */} @@ -178,7 +233,8 @@ export default function ReactiveScene({ strength={REACTIVE_SMUDGE.strength} /> - + + ); } diff --git a/apps/docs/src/components/features/scene-pause.test.ts b/apps/docs/src/components/features/scene-pause.test.ts new file mode 100644 index 00000000..fc78bc33 --- /dev/null +++ b/apps/docs/src/components/features/scene-pause.test.ts @@ -0,0 +1,81 @@ +// @vitest-environment node +import type { AnimationPlaybackControlsWithThen } from 'motion/react'; +import { describe, expect, it, vi } from 'vitest'; + +import { createScenePause } from './scene-pause'; + +// Stand-in controls that track the play state the way Motion's do, and +// finish when the test says so. +function fakeControls() { + let finish = () => {}; + const finished = new Promise((resolve) => { + finish = resolve; + }); + const controls = { + state: 'running', + pause: vi.fn(() => { + controls.state = 'paused'; + }), + play: vi.fn(() => { + controls.state = 'running'; + }), + stop: vi.fn(() => { + controls.state = 'idle'; + }), + then: (resolve: () => void) => finished.then(resolve), + }; + + return { + controls, + held: controls as unknown as AnimationPlaybackControlsWithThen, + finish: async () => { + controls.state = 'finished'; + finish(); + await finished; + }, + }; +} + +describe('a scene pause', () => { + it('pauses what it holds while the scene is paused, and plays it on as the scene resumes', () => { + const scenePause = createScenePause(); + const { controls, held } = fakeControls(); + + scenePause.hold(held); + scenePause.setPaused(true); + expect(controls.state).toBe('paused'); + scenePause.setPaused(false); + expect(controls.state).toBe('running'); + }); + + it('starts an animation paused when the scene already is', () => { + const scenePause = createScenePause(); + const { controls, held } = fakeControls(); + + scenePause.setPaused(true); + scenePause.hold(held); + expect(controls.state).toBe('paused'); + }); + + it('never plays a finished animation again, which would restart it', async () => { + const scenePause = createScenePause(); + const { controls, held, finish } = fakeControls(); + + scenePause.hold(held); + await finish(); + scenePause.setPaused(true); + scenePause.setPaused(false); + expect(controls.play).not.toHaveBeenCalled(); + }); + + it('stops an animation and lets it go when its effect cleans up', () => { + const scenePause = createScenePause(); + const { controls, held } = fakeControls(); + const stop = scenePause.hold(held); + + stop(); + expect(controls.stop).toHaveBeenCalledOnce(); + scenePause.setPaused(true); + expect(controls.pause).not.toHaveBeenCalled(); + }); +}); diff --git a/apps/docs/src/components/features/scene-pause.ts b/apps/docs/src/components/features/scene-pause.ts new file mode 100644 index 00000000..32e0ed4c --- /dev/null +++ b/apps/docs/src/components/features/scene-pause.ts @@ -0,0 +1,49 @@ +/** + * Keeps a feature card's timed animations on its live scene's time. The + * scene pauses its loop off screen and in a hidden tab, and a scripted + * stroke and a smudge's decay advance only while it runs, but a Motion + * animation runs on regardless. One that strokes the scene, or waits for + * its smudge to clear, pauses with the scene instead, so a card that + * scrolls away mid-stroke finishes the stroke on its return. + * reactive-scene.tsx reports the pauses, and both it and + * reactive-illustration.tsx run their timed animations through one. + */ +import type { AnimationPlaybackControlsWithThen } from 'motion/react'; + +/** Pauses the animations it holds while the scene is paused. */ +export interface ScenePause { + /** Called with true when the scene pauses, and with false when it resumes. */ + setPaused: (paused: boolean) => void; + /** + * Holds `controls` until it finishes, paused whenever the scene is, + * starting now. Returns its stop, for the cleanup of the effect that + * started it. + */ + hold: (controls: AnimationPlaybackControlsWithThen) => () => void; +} + +export function createScenePause(): ScenePause { + let paused = false; + const held = new Set(); + + return { + setPaused(nowPaused) { + paused = nowPaused; + for (const controls of held) { + // Only a paused animation plays on: play() restarts a finished one. + if (nowPaused) controls.pause(); + else if (controls.state === 'paused') controls.play(); + } + }, + hold(controls) { + held.add(controls); + if (paused) controls.pause(); + void controls.then(() => held.delete(controls)); + + return () => { + held.delete(controls); + controls.stop(); + }; + }, + }; +} diff --git a/apps/docs/src/components/features/story.tsx b/apps/docs/src/components/features/story.tsx index 63616e6f..5b7b3165 100644 --- a/apps/docs/src/components/features/story.tsx +++ b/apps/docs/src/components/features/story.tsx @@ -60,7 +60,8 @@ export function StoryCard({ className, children }: { className?: string; childre * Follows the pointer on the illustration's StoryCard, behind the site's * hover gate, and calls `onEnter` and any `onLeave` as it comes and goes, * and any `onMove` with each move over the card, starting with the move - * the pointer enters on. Only a pointer that passes the gate counts, and a + * the pointer enters on, so `onEnter` never comes before the pointer's + * first position. Only a pointer that passes the gate counts, and a * touch never does, even on a touch-screen laptop that passes the gate. * Under reduced motion, or while `enabled` is false, nothing counts. * Returns whether the pointer is on the card now, which only the ends of a @@ -90,6 +91,9 @@ function useCardPointer( if (!card || !canHover || reducedMotion || !enabled) return undefined; + // Whether a pointer that was on the card as the gate opened still waits + // for its first move to enter (below). + let entersOnMove = false; const onPointerEnter = (event: PointerEvent) => { if (event.pointerType === 'touch') return; pointerOnCardRef.current = true; @@ -99,9 +103,13 @@ function useCardPointer( const onPointerMove = (event: PointerEvent) => { if (event.pointerType === 'touch') return; callbacksRef.current.onMove?.(event); + if (!entersOnMove) return; + entersOnMove = false; + callbacksRef.current.onEnter(); }; const onPointerLeave = (event: PointerEvent) => { if (event.pointerType === 'touch') return; + entersOnMove = false; pointerOnCardRef.current = false; callbacksRef.current.onLeave?.(); }; @@ -111,11 +119,13 @@ function useCardPointer( card.addEventListener('pointerleave', onPointerLeave); // A pointer already on the card as the gate opens sends no - // pointerenter, so it counts as entering now. Its first move tells - // `onMove` where it is. + // pointerenter, so it counts as entering now. A story that follows the + // pointer has no position for it until it moves, so there it enters on + // its first move instead. if (card.matches(':hover')) { pointerOnCardRef.current = true; - callbacksRef.current.onEnter(); + if (callbacksRef.current.onMove) entersOnMove = true; + else callbacksRef.current.onEnter(); } // The gate closing counts as the pointer leaving, so a held story ends

    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ⅇ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 diff --git a/apps/docs/src/components/features/reactive-illustration.module.css b/apps/docs/src/components/features/reactive-illustration.module.css index 01fc69f5..de59dce1 100644 --- a/apps/docs/src/components/features/reactive-illustration.module.css +++ b/apps/docs/src/components/features/reactive-illustration.module.css @@ -11,12 +11,12 @@ aspect-ratio: 312 / 309; } -/* The image exported from the mock at 2x. It covers the scene until the - scene has laid its smudge, and stands in for it without WebGPU. */ +/* The still frame, captured from the live scene at 2x with its arrow. It + covers the scene until the scene has laid its smudge, and stands in for + it without WebGPU and under reduced motion. */ .still { position: absolute; inset: 0; - display: block; width: 100%; height: 100%; } diff --git a/apps/docs/src/components/features/reactive-illustration.tsx b/apps/docs/src/components/features/reactive-illustration.tsx index e4da2428..2e4c243a 100644 --- a/apps/docs/src/components/features/reactive-illustration.tsx +++ b/apps/docs/src/components/features/reactive-illustration.tsx @@ -3,9 +3,9 @@ /** * The Reactive feature card's illustration (SHA-216): the mock's pointer * arrow over a live LiquidGradient with a smudge held along the J path - * (reactive-scene.tsx), where the browser has WebGPU. Anywhere else, and - * until the scene has laid the smudge, the card shows the image exported - * from the mock. A hover sends the arrow off the window and back in to the + * (reactive-scene.tsx), where the browser has WebGPU and motion is allowed. + * Anywhere else, and until the scene has laid the smudge, the card shows an + * image captured from that still frame. A hover sends the arrow off the window and back in to the * visitor's pointer, which it then follows, pointing the way the pointer * moves, while the pointer smudges the gradient. When the pointer leaves, * the arrow follows it off, then swoops back along the J and lays the @@ -526,7 +526,10 @@ function useArrow( // `m` under LazyMotion rather than `motion`, as in the other feature cards: // the illustration only binds motion values to style, which domMin covers. export function ReactiveIllustration() { - const Scene = useReactiveScene(useHasWebGpu()); + // Under reduced motion the card shows only the image, with no live scene + // behind it, so neither a hover nor a touch can stir it. + const reducedMotion = useReducedMotion() === true; + const Scene = useReactiveScene(useHasWebGpu() && !reducedMotion); const [laid, setLaid] = useState(false); const illustrationRef = useRef(null); const { pointer, onPointerMove, reset } = useCardPointer(illustrationRef); @@ -534,9 +537,6 @@ export function ReactiveIllustration() { // image, as it does without WebGPU, stays still. const story = useHeldStory({ enabled: laid, onPointerMove }); const arrow = useArrow(story, pointer, reset); - // A touch can only stir the smudge with motion allowed, so under reduced - // motion it can't leave a smudge for the decay-0 still frame to hold. - const reducedMotion = useReducedMotion() === true; usePauseHeroWhile(story.stage !== 'still'); @@ -559,7 +559,6 @@ export function ReactiveIllustration() { onPushEnd={story.onPushEnd} onPushStart={story.onPushStart} onStillFrame={() => setLaid(true)} - scrollPush={!reducedMotion} strokeAt={arrow.strokeAt} /> )} diff --git a/apps/docs/src/components/features/reactive-scene.tsx b/apps/docs/src/components/features/reactive-scene.tsx index ea248aab..d03edcb2 100644 --- a/apps/docs/src/components/features/reactive-scene.tsx +++ b/apps/docs/src/components/features/reactive-scene.tsx @@ -32,8 +32,6 @@ export interface ReactiveSceneProps { * nothing scripted strokes. The J's own stroke takes over while it lays. */ strokeAt: MotionValue<[number, number]> | null; - /** Whether a touch that scrolls the page over the card stirs the smudge. */ - scrollPush: boolean; /** Fires when a touch's push starts, and when its fling settles. */ onPushStart: () => void; onPushEnd: () => void; @@ -70,7 +68,6 @@ export default function ReactiveScene({ onStillFrame, decay, strokeAt, - scrollPush, onPushStart, onPushEnd, }: ReactiveSceneProps) { @@ -111,7 +108,7 @@ export default function ReactiveScene({ }; return ( - + {/* A literal 0 holds the flow still, so the scene parks whenever nothing strokes. */} diff --git a/scripts/capture-reactive-still.mjs b/scripts/capture-reactive-still.mjs new file mode 100644 index 00000000..644fbd55 --- /dev/null +++ b/scripts/capture-reactive-still.mjs @@ -0,0 +1,62 @@ +// Captures the Reactive feature card's still frame (SHA-216) from its live +// scene, arrow and all, into the image the card shows until the scene lays +// its smudge, without WebGPU, and under reduced motion. Rerun it whenever the +// still frame changes: the gradient, the J, the smudge, or the arrow. +// +// pnpm dev:docs # in another terminal +// node scripts/capture-reactive-still.mjs +// +// It needs the docs dev server on http://localhost:3000, and a Mac, where +// Chromium draws WebGPU on the Metal adapter. SwiftShader's software WebGPU +// on Linux draws slightly different pixels. +import { createRequire } from 'node:module'; +import { fileURLToPath } from 'node:url'; +import sharp from 'sharp'; + +const root = fileURLToPath(new URL('..', import.meta.url)); +// Playwright is a dependency of the docs tests, not of the repo root. +const require = createRequire(`${root}apps/docs-tests/package.json`); +const { chromium } = require('@playwright/test'); + +const OUTPUT = `${root}apps/docs/public/features/reactive.png`; +// The mock's 312 by 309 window at 2x, the size the image it replaces had. +const WIDTH = 624; +const HEIGHT = 618; + +const browser = await chromium.launch({ + channel: 'chromium', + args: ['--enable-unsafe-webgpu', '--ignore-gpu-blocklist', '--enable-gpu'], +}); + +try { + // Measure the window at 2x, then capture at a density that gives at least + // WIDTH pixels across it, so the image only ever scales down. + const measure = await browser.newPage({ viewport: { width: 1440, height: 900 } }); + + await measure.goto('http://localhost:3000/', { waitUntil: 'networkidle' }); + const cssWidth = await measure + .locator('[data-scene]') + .first() + .evaluate((el) => el.clientWidth); + + await measure.close(); + + const page = await browser.newPage({ + viewport: { width: 1440, height: 900 }, + deviceScaleFactor: Math.max(2, WIDTH / cssWidth), + }); + + await page.goto('http://localhost:3000/', { waitUntil: 'networkidle' }); + const illustration = page.locator('[data-scene]').first(); + + await illustration.scrollIntoViewIfNeeded(); + await page.waitForSelector('[data-scene="laid"]', { timeout: 60_000 }); + // Let the frame after the smudge lands draw. + await page.waitForTimeout(300); + const capture = await illustration.screenshot(); + + await sharp(capture).resize(WIDTH, HEIGHT, { fit: 'fill' }).png().toFile(OUTPUT); + console.log(`Wrote ${OUTPUT}`); +} finally { + await browser.close(); +} From b79c5ab2ceee7f370c5c0bcb4c44e6d189b97ff1 Mon Sep 17 00:00:00 2001 From: Hunter Garrett Date: Fri, 16 Oct 2026 05:53:19 -0400 Subject: [PATCH 12/15] test(docs-tests): cover the Reactive card's story A hover hands the arrow to the pointer, and leaving brings it back to the still frame. A hover during the ending lets it land, then plays again. A touch that scrolls the page over the card stirs it, then it settles. Under reduced motion the card shows its still image with no scene. The checks read the story's stage and the arrow's leg from data attributes, never timings, and the scene runs on SwiftShader's WebGPU. --- .../docs-tests/docs/features-reactive.spec.ts | 196 ++++++++++++++++++ apps/docs-tests/docs/homepage.spec.ts | 9 +- 2 files changed, 202 insertions(+), 3 deletions(-) create mode 100644 apps/docs-tests/docs/features-reactive.spec.ts diff --git a/apps/docs-tests/docs/features-reactive.spec.ts b/apps/docs-tests/docs/features-reactive.spec.ts new file mode 100644 index 00000000..1b1063ca --- /dev/null +++ b/apps/docs-tests/docs/features-reactive.spec.ts @@ -0,0 +1,196 @@ +import { expect, test } from '@playwright/test'; +import type { Locator, Page } from '@playwright/test'; + +/** + * The Reactive feature card's story (SHA-216). A hover sends the arrow off + * the window and back in to the pointer, which it follows until the pointer + * leaves. Then it swoops back along the J to the still frame. A hover during + * that ending lets it land, then plays again. A touch that scrolls the page + * over the card hides the arrow and stirs the smudge until the page stops. + * Under reduced motion the card shows its still image, with no live scene. + * Checks read where the story is and where the arrow is from the + * illustration's data attributes, never how long anything takes or its + * curve, so tuning the motion cannot break this. + */ + +// The card's live scene needs a WebGPU adapter. Headless Chromium hands out +// none, so this flag turns on its SwiftShader adapter, as +// favorites-hover.spec.ts does. A launch option forces a new browser, so it +// has to be set for the whole file. +test.use({ launchOptions: { args: ['--enable-unsafe-webgpu'] } }); + +// SwiftShader draws on the CPU, so the scene's first frame and its smudge +// can take a while, and every wait on the story allows for that. +const SCENE_TIMEOUT = 60_000; +const STORY_TIMEOUT = 20_000; + +const featuresList = (page: Page) => + page.getByRole('list', { name: 'We’ll handle the complex stuff' }); + +const reactiveCard = (page: Page) => + featuresList(page) + .getByRole('listitem') + .filter({ has: page.getByRole('heading', { name: 'Reactive' }) }); + +// The illustration, whose data attributes say where the story is. +const illustration = (card: Locator) => card.locator('[data-scene]'); + +const stage = (card: Locator) => illustration(card).getAttribute('data-stage'); +const arrowLeg = (card: Locator) => illustration(card).getAttribute('data-arrow'); + +// Scrolls the features section to the middle of the viewport, twice, for the +// reason favorites-hover.spec.ts gives: the section rides in the hero's +// sticky pin, and the hero finishes its change a frame after the first +// scroll, which moves the section again. Off screen, the hero's scene +// pauses, which leaves SwiftShader to the card's. +async function open(page: Page): Promise { + await page.goto('/'); + await page.waitForLoadState('networkidle'); + await featuresList(page).evaluate(async (list) => { + const section = list.closest('section')!; + const nextFrames = () => + new Promise((resolve) => requestAnimationFrame(() => requestAnimationFrame(resolve))); + + section.scrollIntoView({ block: 'center' }); + await nextFrames(); + section.scrollIntoView({ block: 'center' }); + }); +} + +/** Opens the page and waits for the card's live scene to show the still frame. */ +async function openLive(page: Page): Promise { + await open(page); + const card = reactiveCard(page); + + await expect(illustration(card)).toHaveAttribute('data-scene', 'laid', { + timeout: SCENE_TIMEOUT, + }); + + return card; +} + +/** Moves the pointer onto the illustration's middle. */ +async function hover(card: Locator): Promise { + const box = (await illustration(card).boundingBox())!; + + await card.page().mouse.move(box.x + box.width / 2, box.y + box.height / 2, { steps: 4 }); +} + +/** Moves the pointer off the card, onto the site header. */ +async function leave(page: Page): Promise { + await page.mouse.move(0, 0, { steps: 4 }); +} + +// Records the story's stage on every frame from the moment this is called. +async function recordStages(card: Locator): Promise<() => Promise> { + await illustration(card).evaluate((element) => { + const stages: string[] = []; + const record = () => { + const current = element.getAttribute('data-stage') ?? ''; + + if (stages.at(-1) !== current) stages.push(current); + requestAnimationFrame(record); + }; + + (window as unknown as { stages: string[] }).stages = stages; + record(); + }); + + return () => card.page().evaluate(() => (window as unknown as { stages: string[] }).stages); +} + +// --------------------------------------------- +// Hover +// --------------------------------------------- + +test('a hover hands the arrow to the pointer, and leaving brings it back to the still frame', async ({ + page, +}) => { + const card = await openLive(page); + + await hover(card); + await expect.poll(() => stage(card)).toBe('holding'); + await expect.poll(() => arrowLeg(card), { timeout: STORY_TIMEOUT }).toBe('following'); + // The arrow stands in for the cursor once it follows the pointer. + await expect(illustration(card)).toHaveCSS('cursor', 'none'); + + await leave(page); + await expect.poll(() => stage(card)).toBe('ending'); + await expect.poll(() => stage(card), { timeout: STORY_TIMEOUT }).toBe('still'); + expect(await arrowLeg(card)).toBe('resting'); +}); + +test('a hover during the ending lets it land, then plays again', async ({ page }) => { + const card = await openLive(page); + + await hover(card); + await expect.poll(() => arrowLeg(card), { timeout: STORY_TIMEOUT }).toBe('following'); + + const stages = await recordStages(card); + + await leave(page); + await expect.poll(() => stage(card)).toBe('ending'); + await hover(card); + // The pointer is back, but the ending carries on. + expect(await stage(card)).toBe('ending'); + + await expect.poll(stages, { timeout: STORY_TIMEOUT }).toEqual(['holding', 'ending', 'holding']); +}); + +// --------------------------------------------- +// Touch +// --------------------------------------------- + +test.describe('on a touch device', () => { + test.use({ hasTouch: true, isMobile: true, viewport: { width: 412, height: 839 } }); + + test('a touch that scrolls the page over the card stirs it, then it settles on the still frame', async ({ + page, + }) => { + const card = await openLive(page); + const box = (await illustration(card).boundingBox())!; + const client = await page.context().newCDPSession(page); + const touch = ( + type: 'touchStart' | 'touchMove' | 'touchEnd', + points: Array<{ x: number; y: number; id: number }>, + ) => client.send('Input.dispatchTouchEvent', { type, touchPoints: points }); + const x = box.x + box.width / 2; + const y = box.y + box.height * 0.7; + const scrollBefore = await page.evaluate(() => window.scrollY); + + await touch('touchStart', [{ x, y, id: 1 }]); + for (let step = 1; step <= 16; step += 1) { + await touch('touchMove', [{ x, y: y - step * 12, id: 1 }]); + await page.waitForTimeout(30); + } + + await expect.poll(() => stage(card)).toBe('holding'); + expect(await arrowLeg(card)).toBe('pushing'); + await expect(illustration(card)).toHaveAttribute('data-arrow-hidden', 'true'); + + await touch('touchEnd', []); + await expect.poll(() => stage(card), { timeout: STORY_TIMEOUT }).toBe('still'); + expect(await page.evaluate(() => window.scrollY)).toBeGreaterThan(scrollBefore + 50); + }); +}); + +// --------------------------------------------- +// Reduced motion +// --------------------------------------------- + +test.describe('under reduced motion', () => { + test('the card shows its still image, and a hover leaves it there', async ({ page }) => { + await page.emulateMedia({ reducedMotion: 'reduce' }); + await open(page); + + const card = reactiveCard(page); + + await expect(card.locator('img[src*="/features/reactive.png"]')).toBeVisible(); + await hover(card); + await page.waitForTimeout(1_000); + + expect(await stage(card)).toBe('still'); + await expect(illustration(card)).toHaveAttribute('data-scene', 'still'); + await expect(card.locator('canvas')).toHaveCount(0); + }); +}); diff --git a/apps/docs-tests/docs/homepage.spec.ts b/apps/docs-tests/docs/homepage.spec.ts index 29dd0544..c977c8ae 100644 --- a/apps/docs-tests/docs/homepage.spec.ts +++ b/apps/docs-tests/docs/homepage.spec.ts @@ -281,10 +281,13 @@ test('each feature card shows its illustration, hidden from screen readers', asy continue; } - const image = item.locator('img'); + // An image, alone or under a live illustration's other parts, such as + // the Reactive card's arrow. Without WebGPU, as here, the Reactive card + // keeps showing its still image. + const image = item.locator(`img[src="${card.illustration.src}"]`); - await expect(image).toHaveAttribute('aria-hidden', 'true'); - await expect(image).toHaveAttribute('src', card.illustration.src); + await expect(image).toBeVisible(); + expect(await image.evaluate((element) => !!element.closest('[aria-hidden="true"]'))).toBe(true); await expect .poll(() => image.evaluate((element: HTMLImageElement) => element.complete && element.naturalWidth > 0), From 831186d63017e50548d6bd01b000993e32361833 Mon Sep 17 00:00:00 2001 From: Hunter Garrett Date: Fri, 16 Oct 2026 06:23:10 -0400 Subject: [PATCH 13/15] fix(docs): harden the Reactive card's story - The story starts for a pointer already on the card when its gate opens. That pointer sends no pointerenter. - A push hold ends when the card stops taking pushes, as a hover hold ends when the hover gate closes. - The card pauses the hero only while it is on screen and its story plays. Off screen, the card's own scene pauses and the hero can draw. - A push starts the story on its first stroke, so a tap that never scrolls the page leaves the card still. - While the card rests, a still scripted point keeps the mouse and any push off the held smudge. - A resize while the card rests lays the J again, and the image covers the card until the J lands. - After a push, the arrow waits OUT_SECONDS plus CLEAR_SECONDS before it swoops, so the smudge has as long to clear as after a hover. - The scene loader moves to story.tsx as createLiveScene, and useArrow splits into useArrowPoses and useLegTimeline. - MOCK_WIDTH and MOCK_HEIGHT move to reactive-smudge.ts, in place of its 312 and 309 literals. --- .../src/components/features/reactive-arrow.ts | 53 +- .../features/reactive-illustration.tsx | 472 ++++++++++-------- .../components/features/reactive-scene.tsx | 87 +++- .../components/features/reactive-smudge.ts | 16 +- apps/docs/src/components/features/story.tsx | 110 +++- 5 files changed, 476 insertions(+), 262 deletions(-) diff --git a/apps/docs/src/components/features/reactive-arrow.ts b/apps/docs/src/components/features/reactive-arrow.ts index 572582bc..67b3b38c 100644 --- a/apps/docs/src/components/features/reactive-arrow.ts +++ b/apps/docs/src/components/features/reactive-arrow.ts @@ -6,11 +6,7 @@ * illustration, angles are degrees clockwise, as CSS turns them, and * reactive-illustration.module.css draws the arrow from a pose. */ -import { headingOnJ, pointOnJ } from './reactive-smudge'; - -/** The illustration's size in mock pixels, which everything here measures in. */ -export const MOCK_WIDTH = 312; -export const MOCK_HEIGHT = 309; +import { headingOnJ, MOCK_HEIGHT, MOCK_WIDTH, pointOnJ } from './reactive-smudge'; // How far past the window's edge the arrow starts its flight back in: far // enough that none of it shows. @@ -41,6 +37,13 @@ const UNTURNED_HEADING = (Math.atan2(TIP[1] - NOTCH[1], TIP[0] - NOTCH[0]) * 180 const toRadians = (degrees: number) => (degrees * Math.PI) / 180; +// The offset (`x`, `y`) turned clockwise by `angle`, as CSS turns it. +function rotate(x: number, y: number, angle: number): [number, number] { + const turn = toRadians(angle); + + return [x * Math.cos(turn) - y * Math.sin(turn), x * Math.sin(turn) + y * Math.cos(turn)]; +} + /** The mock's pose: at the upper right, turned to point up and to the right. */ export const STILL_FRAME_ARROW: ArrowPose = { x: 208.44, y: 65.7, angle: 76.89 }; @@ -49,25 +52,18 @@ export function angleForHeading(heading: number): number { return heading - UNTURNED_HEADING; } -/** The still frame's heading: up and to the right, as the mock draws it. */ -export const STILL_FRAME_HEADING = STILL_FRAME_ARROW.angle + UNTURNED_HEADING; - /** The way an arrow turned by `angle` points. */ export function headingForAngle(angle: number): number { return angle + UNTURNED_HEADING; } +/** The still frame's heading: up and to the right, as the mock draws it. */ +export const STILL_FRAME_HEADING = headingForAngle(STILL_FRAME_ARROW.angle); + // Where a point of the unturned box sits from the box's center once the // box turns by `angle`. function fromCenter([pointX, pointY]: readonly [number, number], angle: number): [number, number] { - const offsetX = pointX - BOX[0] / 2; - const offsetY = pointY - BOX[1] / 2; - const turn = toRadians(angle); - - return [ - offsetX * Math.cos(turn) - offsetY * Math.sin(turn), - offsetX * Math.sin(turn) + offsetY * Math.cos(turn), - ]; + return rotate(pointX - BOX[0] / 2, pointY - BOX[1] / 2, angle); } // The pose that turns the arrow by `angle` with its point `local`, in the @@ -130,9 +126,13 @@ export function entryPoint([x, y]: readonly [number, number]): [number, number] */ export function exitDistance([x, y]: readonly [number, number], heading: number): number { const turn = toRadians(heading); + // How far along the heading the arrow crosses the far side of one axis. + // A heading straight along the other axis never crosses it. Its step + // along this axis comes out of cos or sin as a rounding error, about + // 1e-16 rather than 0, so anything under STRAIGHT counts as 0. const across = (from: number, step: number, size: number) => { - if (step > 1e-9) return (size + ENTRY_MARGIN - from) / step; - if (step < -1e-9) return (-ENTRY_MARGIN - from) / step; + if (step > STRAIGHT) return (size + ENTRY_MARGIN - from) / step; + if (step < -STRAIGHT) return (-ENTRY_MARGIN - from) / step; return Infinity; }; @@ -143,6 +143,9 @@ export function exitDistance([x, y]: readonly [number, number], heading: number) ); } +// A step along an axis small enough to be a rounding error (exitDistance). +const STRAIGHT = 1e-9; + /** The point `distance` on from `from` along `heading`. */ export function pointAlong( [x, y]: readonly [number, number], @@ -173,14 +176,14 @@ const J_END: readonly [number, number] = [ // the swoop can carry that point along the J and land on the still frame. const TRAIL = (() => { const { x, y, angle } = STILL_FRAME_ARROW; - const turn = toRadians(-angle); - const offsetX = J_END[0] - (x + BOX[0] / 2); - const offsetY = J_END[1] - (y + BOX[1] / 2); + // Turn the J's end back by the still frame's angle about the box's center. + const [offsetX, offsetY] = rotate( + J_END[0] - (x + BOX[0] / 2), + J_END[1] - (y + BOX[1] / 2), + -angle, + ); - return [ - BOX[0] / 2 + offsetX * Math.cos(turn) - offsetY * Math.sin(turn), - BOX[1] / 2 + offsetX * Math.sin(turn) + offsetY * Math.cos(turn), - ] as const; + return [BOX[0] / 2 + offsetX, BOX[1] / 2 + offsetY] as const; })(); /** diff --git a/apps/docs/src/components/features/reactive-illustration.tsx b/apps/docs/src/components/features/reactive-illustration.tsx index 2e4c243a..a00462fd 100644 --- a/apps/docs/src/components/features/reactive-illustration.tsx +++ b/apps/docs/src/components/features/reactive-illustration.tsx @@ -5,21 +5,16 @@ * arrow over a live LiquidGradient with a smudge held along the J path * (reactive-scene.tsx), where the browser has WebGPU and motion is allowed. * Anywhere else, and until the scene has laid the smudge, the card shows an - * image captured from that still frame. A hover sends the arrow off the window and back in to the - * visitor's pointer, which it then follows, pointing the way the pointer - * moves, while the pointer smudges the gradient. When the pointer leaves, - * the arrow follows it off, then swoops back along the J and lays the - * still frame's smudge again (story.tsx's held story). + * image captured from that still frame. A hover sends the arrow off the + * window and back in to the visitor's pointer, which it then follows, + * pointing the way the pointer moves, while its tip smudges the gradient. + * When the pointer leaves, the arrow follows it off, then swoops back along + * the J and lays the still frame's smudge again. A touch that scrolls the + * page over the card hides the arrow and stirs the smudge until the page + * stops (story.tsx's held story). */ import Image from 'next/image'; -import { - type ComponentType, - type RefObject, - useCallback, - useEffect, - useRef, - useState, -} from 'react'; +import { type RefObject, useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { animate, @@ -30,14 +25,11 @@ import { type MotionValue, useMotionValue, useMotionValueEvent, - useReducedMotion, useSpring, useTransform, } from 'motion/react'; -import { usePauseHeroWhile } from '@/components/home-hero/hero-pause'; import { EASE_OUT } from '@/lib/easing'; -import { useHasWebGpu } from '@/lib/use-has-webgpu'; import { angleForHeading, @@ -48,8 +40,6 @@ import { exitDistance, headingForAngle, headingToward, - MOCK_HEIGHT, - MOCK_WIDTH, pointAlong, shortestTurn, STILL_FRAME_ARROW, @@ -58,54 +48,21 @@ import { swoopPose, } from './reactive-arrow'; import styles from './reactive-illustration.module.css'; -import type { ReactiveSceneProps } from './reactive-scene'; -import { pointOnJ, REACTIVE_SMUDGE } from './reactive-smudge'; -import { type HeldBy, type HeldStage, type HeldStory, useHeldStory } from './story'; +import { MOCK_HEIGHT, MOCK_WIDTH, pointOnJ, REACTIVE_SMUDGE } from './reactive-smudge'; +import { + createLiveScene, + type HeldBy, + type HeldStage, + type HeldStory, + useHeldStory, +} from './story'; // --------------------------------------------- -// Loading the scene +// The scene // --------------------------------------------- -type Scene = ComponentType; - -// The scene's component once its module has loaded, so a later mount reads -// it straight away. The module loads through a plain import() from an -// effect rather than next/dynamic, for the reason favorite-scenes.tsx gives, -// which also keeps three out of the server render. -let loadedScene: Scene | null = null; - -function loadScene(): Promise { - return import('./reactive-scene').then((module) => { - loadedScene = module.default; - - return module.default; - }); -} - -/** The scene's component once `enabled` and its module has loaded, otherwise null. */ -function useReactiveScene(enabled: boolean): Scene | null { - const [scene, setScene] = useState(() => loadedScene); - - useEffect(() => { - if (!enabled || scene) return undefined; - - let cancelled = false; - - loadScene() - .then((loaded) => { - if (!cancelled) setScene(() => loaded); - }) - .catch(() => { - // A module that fails to load leaves the card on its image. - }); - - return () => { - cancelled = true; - }; - }, [enabled, scene]); - - return enabled ? scene : null; -} +// The live scene, where it may run (story.tsx's createLiveScene). +const useReactiveScene = createLiveScene(() => import('./reactive-scene')); // --------------------------------------------- // The arrow @@ -157,7 +114,8 @@ function Arrow({ style }: { style: ArrowStyle }) { // How long the hover's flights take, in seconds: the arrow flicks off the // window along its heading, then flies back in to the pointer. Leaving -// sends it off the same way. +// sends it off the same way. Longer reads as a lazier handoff, shorter as a +// snap. const OUT_SECONDS = 0.25; const IN_SECONDS = 0.35; @@ -165,15 +123,23 @@ const IN_SECONDS = 0.35; // mock pixels: past the window's edge from the still frame's spot. const OUT_DISTANCE = 260; -// After the arrow leaves, how long the visitor's smudges clear before it -// swoops back in, in seconds. With the flight off, about 0.6 s at decay 1, -// which brings a full pull down to nothing. +// How long the visitor's smudges clear at decay 1 once the arrow is off the +// window, before it swoops back in, in seconds. A hover's flight off adds +// OUT_SECONDS first, and a push, whose arrow is already hidden, waits both, +// so a full pull always has about 0.6 s to clear to nothing. Shorter +// leaves a faint smudge for the swoop's decay 0 to hold. const CLEAR_SECONDS = 0.35; // How quickly the heading follows the way the pointer moves: the time // constant of a smoothing filter on the pointer's velocity, in seconds. +// Longer steadies the heading against a trembling mouse and turns later. const TURN_SMOOTHING = 0.025; +// The shortest gap between two pointer events the velocity counts, in +// seconds. A browser can deliver two events at the same timestamp, and the +// velocity would then divide by zero. +const MIN_EVENT_GAP = 1 / 240; + // How the arrow turns to the heading: a spring with no bounce, so the // turning speed builds and settles rather than starting at full speed. The // filtered heading changes only when a pointer event lands, and a real @@ -194,16 +160,10 @@ const TURN_SPRING = { stiffness: 400, damping: 40, mass: 1 }; const FOLLOW_SPRING = { stiffness: 625, damping: 50, mass: 1 }; // The slowest the pointer can move, in mock pixels a second, and still -// turn the arrow. Slower is a tremble, not a direction. +// turn the arrow. Slower is a tremble, not a direction. Higher holds the +// heading through slow drags too. const MIN_TURN_SPEED = 40; -// CursorSmudge's decay on each leg. 0 holds the J. While the visitor -// smudges, a pull loses 90% in about 1.2 s, so the J ages out and each -// stroke eases back. Once they leave, their smudges clear fast. -const HOLD_DECAY = 0; -const STORY_DECAY = 0.4; -const CLEAR_DECAY = 1; - /** The eased pointer over the card, in mock pixels, and the way the mouse heads. */ interface CardPointer { x: MotionValue; @@ -219,13 +179,15 @@ interface CardPointer { * its velocity. The heading follows the raw mouse velocity through a * smoothing filter, and a still or trembling mouse keeps its heading. */ -function useCardPointer(illustrationRef: RefObject) { +function useEasedPointer(illustrationRef: RefObject) { const targetX = useMotionValue(0); const targetY = useMotionValue(0); const x = useSpring(targetX, FOLLOW_SPRING); const y = useSpring(targetY, FOLLOW_SPRING); const heading = useMotionValue(STILL_FRAME_HEADING); const enteredAt = useRef<[number, number] | null>(null); + // Stable, so a re-render never restarts a leg that lists it in its deps. + const pointer = useMemo(() => ({ x, y, heading, enteredAt }), [x, y, heading]); // The last move, in mock pixels and seconds, and the filtered velocity, // in mock pixels a second. Null before the first move of a hover. const lastMoveRef = useRef<{ x: number; y: number; time: number } | null>(null); @@ -253,7 +215,7 @@ function useCardPointer(illustrationRef: RefObject) { return; } - const elapsed = Math.max(time - last.time, 1 / 240); + const elapsed = Math.max(time - last.time, MIN_EVENT_GAP); const keep = Math.exp(-elapsed / TURN_SMOOTHING); const [velocityX, velocityY] = velocityRef.current; const nextVelocity: [number, number] = [ @@ -275,7 +237,7 @@ function useCardPointer(illustrationRef: RefObject) { heading.jump(STILL_FRAME_HEADING); }, [heading]); - return { pointer: { x, y, heading, enteredAt } satisfies CardPointer, onPointerMove, reset }; + return { pointer, onPointerMove, reset }; } /** @@ -305,11 +267,20 @@ function legOf(stage: HeldStage, heldBy: HeldBy, finished: TimedLeg | null): Leg return 'leaving'; } -function decayOf(leg: Leg): number { - if (leg === 'resting' || leg === 'swooping') return HOLD_DECAY; - - return leg === 'leaving' || leg === 'clearing' ? CLEAR_DECAY : STORY_DECAY; -} +// CursorSmudge's decay on each leg. 0 holds the J, at rest and as the +// swoop lays it again. While the visitor smudges, 0.4 takes 90% of a pull +// away in about 1.2 s, so the J ages out and each stroke eases back. Once +// they leave, 1 clears their smudges fast. +const DECAY: Record = { + resting: 0, + out: 0.4, + in: 0.4, + following: 0.4, + pushing: 0.4, + leaving: 1, + clearing: 1, + swooping: 0, +}; // The tip of `pose`, in 0..1 canvas units, for a scripted stroke. const canvasTip = (pose: ArrowPose): [number, number] => { @@ -318,36 +289,44 @@ const canvasTip = (pose: ArrowPose): [number, number] => { return [x / MOCK_WIDTH, y / MOCK_HEIGHT]; }; -/** - * The arrow's part in the held story, leg by leg (Leg says what each does). - * The tip lays a scripted stroke on the flights in and out of a hover, and - * the swoop lays the J again. Returns the leg, the smudge's decay, the - * pose's CSS variables, and the point a scripted stroke follows, if one - * strokes. - */ -function useArrow( - { stage, plays, heldBy, onStoryEnd }: HeldStory, - pointer: CardPointer, - resetPointer: () => void, -) { - // The last timed leg this play finished. - const [finished, setFinished] = useState<{ play: number; leg: TimedLeg } | null>(null); - const leg = legOf(stage, heldBy, finished?.play === plays ? finished.leg : null); +/** The progress of each leg's flight, from 0 to 1, and the points the flights start from. */ +interface Flights { + out: MotionValue; + flightIn: MotionValue; + leave: MotionValue; + swoop: MotionValue; + entryX: MotionValue; + entryY: MotionValue; + /** Where the arrow's tip is and the way it points, while the story holds. */ + leftX: MotionValue; + leftY: MotionValue; + leftHeading: MotionValue; +} +// Stable, so a re-render never restarts a leg that lists it in its deps. +function useFlights(): Flights { const out = useMotionValue(0); const flightIn = useMotionValue(0); const leave = useMotionValue(0); const swoop = useMotionValue(0); const entryX = useMotionValue(0); const entryY = useMotionValue(0); - // Where the arrow's tip was and the way it pointed when the pointer left, - // kept up to date while the visitor hovers, for the flight off. const leftX = useMotionValue(STILL_FRAME_TIP[0]); const leftY = useMotionValue(STILL_FRAME_TIP[1]); const leftHeading = useMotionValue(STILL_FRAME_HEADING); - // The heading the arrow shows, which turns toward the pointer's. - const turn = useSpring(pointer.heading, TURN_SPRING); + return useMemo( + () => ({ out, flightIn, leave, swoop, entryX, entryY, leftX, leftY, leftHeading }), + [out, flightIn, leave, swoop, entryX, entryY, leftX, leftY, leftHeading], + ); +} + +/** + * The arrow's pose on each leg that moves it, and the point each stroking + * leg's scripted stroke follows. `turn` is the heading the arrow shows. + */ +function useArrowPoses(pointer: CardPointer, turn: MotionValue, flights: Flights) { + const { out, flightIn, leave, swoop, entryX, entryY, leftX, leftY, leftHeading } = flights; const outPose = useTransform(out, (progress) => arrowAtPointer( pointAlong(STILL_FRAME_TIP, STILL_FRAME_HEADING, progress * OUT_DISTANCE), @@ -382,59 +361,49 @@ function useArrow( angleForHeading(heading), ); }); - const swoopPoseValue = useTransform(swoop, swoopPose); - // A computed motion value collects what it reads on each render, so this - // follows only the leg the arrow is on. - const pose = useTransform((): ArrowPose => { - switch (leg) { - case 'out': - return outPose.get(); - case 'in': - return inPose.get(); - case 'following': - return followPose.get(); - case 'leaving': - return leavePose.get(); - case 'clearing': - // After a push the arrow waits hidden in its spot, and after a - // hover it waits where it left the window. - return heldBy === 'push' ? STILL_FRAME_ARROW : leavePose.get(); - case 'swooping': - return swoopPoseValue.get(); - default: - return STILL_FRAME_ARROW; - } - }); - // One point per stroking leg, so the scene starts a fresh stroke on each - // rather than drawing one across the window from where the last left off. - const outTip = useTransform(outPose, canvasTip); - const inTip = useTransform(inPose, canvasTip); - const followTip = useTransform(followPose, canvasTip); - const jPoint = useTransform(swoop, pointOnJ); - - // While the visitor hovers, keep where the arrow is, so it leaves from - // there whichever leg it was on. - const hoveringRef = useRef(false); - - useEffect(() => { - hoveringRef.current = stage === 'holding'; - }, [stage]); - useMotionValueEvent(pose, 'change', (current) => { - if (!hoveringRef.current) return; - const [tipX, tipY] = arrowTip(current); - - leftX.set(tipX); - leftY.set(tipY); - leftHeading.set(headingForAngle(current.angle)); - }); + const swoopingPose = useTransform(swoop, swoopPose); + + return { + poses: { outPose, inPose, followPose, leavePose, swoopingPose }, + // One point per stroking leg, so the scene starts a fresh stroke on each + // rather than drawing one across the window from where the last left + // off. The smudge follows the eased tip while the arrow follows the + // pointer, rather than the raw mouse ahead of it. + tips: { + outTip: useTransform(outPose, canvasTip), + inTip: useTransform(inPose, canvasTip), + followTip: useTransform(followPose, canvasTip), + jPoint: useTransform(swoop, pointOnJ), + }, + }; +} - // The scene attaches a stroking leg's point in an effect of its own, in - // the render where the leg starts, reading where the point is as the - // stroke's start. A child's effects run before its parent's, so a flight - // never runs ahead of the attach. Each leg's point is set up before its - // leg starts. +/** + * Runs each timed leg's flight or wait, then moves the play on, and ends + * the story once the swoop lands. The scene attaches a stroking leg's point + * in an effect of its own, in the render where the leg starts, reading + * where the point is as the stroke's start. A child's effects run before + * its parent's, so a flight never runs ahead of the attach, and each leg's + * point is set up before its leg starts. + */ +function useLegTimeline( + leg: Leg, + { plays, heldBy, onStoryEnd }: HeldStory, + finish: (timed: TimedLeg) => void, + { + pointer, + flights, + turn, + resetPointer, + }: { + pointer: CardPointer; + flights: Flights; + turn: MotionValue; + resetPointer: () => void; + }, +) { useEffect(() => { - const finish = (timed: TimedLeg) => setFinished({ play: plays, leg: timed }); + const { out, flightIn, leave, swoop, entryX, entryY } = flights; const run = (value: MotionValue, duration: number, then: () => void) => { const controls = animate(value, 1, { duration, ease: EASE_OUT }); @@ -442,10 +411,9 @@ function useArrow( return () => controls.stop(); }; - - switch (leg) { - case 'out': - return run(out, OUT_SECONDS, () => { + const steps: Partial () => void>> = { + out: () => + run(out, OUT_SECONDS, () => { const [fromX, fromY] = entryPoint( pointer.enteredAt.current ?? [pointer.x.get(), pointer.y.get()], ); @@ -454,64 +422,137 @@ function useArrow( entryY.jump(fromY); flightIn.jump(0); finish('out'); - }); - case 'in': - return run(flightIn, IN_SECONDS, () => finish('in')); - case 'leaving': - return run(leave, OUT_SECONDS, () => finish('leaving')); - case 'clearing': { + }), + in: () => run(flightIn, IN_SECONDS, () => finish('in')), + leaving: () => run(leave, OUT_SECONDS, () => finish('leaving')), + clearing: () => { + const seconds = heldBy === 'push' ? OUT_SECONDS + CLEAR_SECONDS : CLEAR_SECONDS; const wait = window.setTimeout(() => { swoop.jump(0); finish('clearing'); - }, CLEAR_SECONDS * 1000); + }, seconds * 1000); return () => window.clearTimeout(wait); - } - case 'swooping': - return run(swoop, REACTIVE_SMUDGE.laySeconds, () => { + }, + swooping: () => + run(swoop, REACTIVE_SMUDGE.laySeconds, () => { out.jump(0); leave.jump(0); resetPointer(); turn.jump(STILL_FRAME_HEADING); onStoryEnd(); - }); - default: - return undefined; - } - }, [ - leg, - plays, - out, - flightIn, - leave, - swoop, - entryX, - entryY, - pointer, - resetPointer, - turn, - onStoryEnd, - ]); + }), + }; + + return steps[leg]?.(); + }, [leg, plays, heldBy, finish, pointer, flights, turn, resetPointer, onStoryEnd]); +} + +// After a push the arrow waits hidden in its spot while the smudges clear, +// so it shows again only as it swoops back in. +const isHidden = (leg: Leg, heldBy: HeldBy) => + leg === 'pushing' || (leg === 'clearing' && heldBy === 'push'); + +/** The arrow's pose on the leg it is on, or the still frame's on a leg that doesn't move it. */ +function useLegPose( + leg: Leg, + heldBy: HeldBy, + poses: ReturnType['poses'], +): MotionValue { + // After a hover the arrow waits where it left the window. After a push it + // waits hidden in its spot. + const clearingPose = heldBy === 'push' ? null : poses.leavePose; + const poseOn: Record | null> = { + resting: null, + out: poses.outPose, + in: poses.inPose, + following: poses.followPose, + pushing: null, + leaving: poses.leavePose, + clearing: clearingPose, + swooping: poses.swoopingPose, + }; + const legPose = poseOn[leg]; + + // A computed motion value collects what it reads on each render, so this + // follows only the leg the arrow is on. + return useTransform((): ArrowPose => legPose?.get() ?? STILL_FRAME_ARROW); +} + +/** + * While the story holds, keeps where the arrow's tip is and the way it + * points, so it leaves from there whichever leg it was on. + */ +function useHeldTip(pose: MotionValue, stage: HeldStage, flights: Flights) { + const holdingRef = useRef(false); + useEffect(() => { + holdingRef.current = stage === 'holding'; + }, [stage]); + useMotionValueEvent(pose, 'change', (current) => { + if (!holdingRef.current) return; + const [tipX, tipY] = arrowTip(current); + + flights.leftX.set(tipX); + flights.leftY.set(tipY); + flights.leftHeading.set(headingForAngle(current.angle)); + }); +} + +/** + * The arrow's part in the held story, leg by leg (Leg says what each does). + * The tip lays a scripted stroke on the flights in and out of a hover and + * while the arrow follows the pointer, and the swoop lays the J again. + * Returns the leg, whether a push hides the arrow, the smudge's decay, the + * pose's CSS variables, and the point a scripted stroke follows, if one + * strokes. + */ +function useArrow(story: HeldStory, pointer: CardPointer, resetPointer: () => void) { + const { stage, plays, heldBy } = story; + // The last timed leg this play finished. + const [finished, setFinished] = useState<{ play: number; leg: TimedLeg } | null>(null); + const leg = legOf(stage, heldBy, finished?.play === plays ? finished.leg : null); + const finish = useCallback( + (timed: TimedLeg) => setFinished({ play: plays, leg: timed }), + [plays], + ); + const flights = useFlights(); + // The heading the arrow shows, which turns toward the pointer's. + const turn = useSpring(pointer.heading, TURN_SPRING); + const { poses, tips } = useArrowPoses(pointer, turn, flights); + const pose = useLegPose(leg, heldBy, poses); + // A point that never moves, attached while the card rests: a scripted + // stroke beats the mouse and the push, so a pointer on the card before + // the story starts, or a mouse that fails the hover gate, can't smudge + // the still frame its decay 0 holds. + const stillPoint = useMotionValue<[number, number]>([0.5, 0.5]); + + useHeldTip(pose, stage, flights); + useLegTimeline(leg, story, finish, { pointer, flights, turn, resetPointer }); + + const strokeOn: Record | null> = { + resting: stillPoint, + out: tips.outTip, + in: tips.inTip, + following: tips.followTip, + pushing: null, + leaving: null, + clearing: null, + swooping: tips.jPoint, + }; const style: ArrowStyle = { '--arrow-x': useTransform(pose, ({ x }) => x), '--arrow-y': useTransform(pose, ({ y }) => y), '--arrow-angle': useTransform(pose, ({ angle }) => angle), }; - let strokeAt: MotionValue<[number, number]> | null = null; - - if (leg === 'out') strokeAt = outTip; - else if (leg === 'in') strokeAt = inTip; - // The smudge follows the eased tip too, rather than the raw mouse ahead - // of it. A scripted stroke takes precedence over mouse input. - else if (leg === 'following') strokeAt = followTip; - else if (leg === 'swooping') strokeAt = jPoint; - - // Hidden while a push stirs the smudge and while it clears after, so the - // arrow only shows again as it swoops back in. - const hidden = leg === 'pushing' || (leg === 'clearing' && heldBy === 'push'); - return { leg, hidden, decay: decayOf(leg), style, strokeAt }; + return { + leg, + hidden: isHidden(leg, heldBy), + decay: DECAY[leg], + style, + strokeAt: strokeOn[leg], + }; } // --------------------------------------------- @@ -519,27 +560,25 @@ function useArrow( // --------------------------------------------- // Hidden from screen readers: the card's title and description carry its -// message. `data-scene` says whether the live scene shows the still frame -// yet, `data-stage` where the story is, `data-arrow` where the arrow is in -// it, and `data-arrow-hidden` whether a push has hidden it. +// message. `data-scene` says whether the live scene shows the still frame, +// `data-stage` where the story is, `data-arrow` where the arrow is in it, +// and `data-arrow-hidden` whether a push has hidden it. // // `m` under LazyMotion rather than `motion`, as in the other feature cards: // the illustration only binds motion values to style, which domMin covers. export function ReactiveIllustration() { - // Under reduced motion the card shows only the image, with no live scene - // behind it, so neither a hover nor a touch can stir it. - const reducedMotion = useReducedMotion() === true; - const Scene = useReactiveScene(useHasWebGpu() && !reducedMotion); - const [laid, setLaid] = useState(false); + const Scene = useReactiveScene(); + // Whether the live scene shows the still frame. It doesn't until the J is + // laid, nor while a new renderer or a resize lays it again. + const [stillFrameReady, setStillFrameReady] = useState(false); + const live = Scene !== null && stillFrameReady; const illustrationRef = useRef(null); - const { pointer, onPointerMove, reset } = useCardPointer(illustrationRef); - // The story waits for the live scene's still frame, so a card showing the - // image, as it does without WebGPU, stays still. - const story = useHeldStory({ enabled: laid, onPointerMove }); + const { pointer, onPointerMove, reset } = useEasedPointer(illustrationRef); + // The story waits for the live still frame, so a card showing the image, + // as it does without WebGPU and under reduced motion, stays still. + const story = useHeldStory({ enabled: live, onPointerMove, pausesHero: true }); const arrow = useArrow(story, pointer, reset); - usePauseHeroWhile(story.stage !== 'still'); - return (