Infinite-scroll marquee wall component with sync coordination, FLIP morph support, and composable edge fades for animated or static chip/card walls. ## Key Components | Export | Type | Description | |---|---|---| | `MarqueeWall` | Component | Main infinite-scroll wall (implied by hooks/props wiring) | | `MarqueeWallFades` | Component | Standalone edge-fade overlays for composite/stacked walls | | `useMarqueeSync` | Hook | Creates a shared position controller to pixel-lock multiple wall instances | | `getMarqueeTrackOffset` | Function | Returns the last known translation + wrap of a named wall (survives unmount) | | `getMarqueeAppliedOffset` | Function | Reads the live DOM transform of a wall's track container | | `getMarqueeCloneTwin` | Function | Locates the loop-clone twin of an element inside a wall's primary copy | | `MarqueeSyncController` | Interface | Shared driver registry for synced walls | | `MarqueeTrackOffset` | Interface | Per-frame position record published to the global offset map | | `MarqueeWallProps` | Interface | Full prop surface for the wall component | ## Usage Example ```typescript // Basic animated chip wall {chips.map(chip => )} // Pixel-locked pair (e.g. pending vs. resolved overlay) const sync = useMarqueeSync() {chips} {chips} // Standalone fades over a stacked row layout
// FLIP drift correction — read offset before morph capture const offset = getMarqueeTrackOffset('cta-wall') ``` ## Notes - `MarqueeWallFades` renders at `z-[1]`, above FLIP flight ghosts (`z-0`), so in-flight chips dissolve under the blur naturally. - The global `MARQUEE_TRACK_OFFSETS` map intentionally survives unmount to support cross-remount FLIP morphs. - Clone copy is `aria-hidden` with focusable descendants suppressed via `useSuppressCloneFocus`, but remains clickable. - Auto-disables under `prefers-reduced-motion` regardless of the `animate` prop. ## Source [`marquee-wall.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/marquee-wall.tsx)