Storybook stories for the `VideoBitesStrip` feature component, covering mixed aspect ratios, marquee behavior, thumbnail fallbacks, auto-scroll toggling, and unpublished filtering. ## Key Components | Export | Type | Description | |---|---|---| | `MixedRatiosMarquee` | `Story` | Seven bites with mixed aspect ratios; marquee activates on overflow | | `TwoBitesNoMarquee` | `Story` | Two bites — no overflow, no marquee, no clone rows, no chevrons | | `NoThumbnails` | `Story` | All thumbnails stripped; verifies `PlayIcon` fallback and hover-mount preview | | `AutoScrollDisabled` | `Story` | `autoScroll=false` — plain scrollable row with chevrons only | | `AllUnpublishedRendersNull` | `Story` | All bites unpublished; asserts component returns `null` | **Helpers** - `bite(over)` — factory that merges partial `VideoBiteStripItem` overrides onto a base fixture, using public-domain Google CDN MP4s for realistic hover-preview testing - `PROFILE` — shared presenter profile fixture (`name`, `avatarUrl`, `subtitle`) - `MANY_MIXED` — seven-item array covering portrait, landscape, square, and no-thumbnail variants ## Usage Example ```typescript import { MixedRatiosMarquee } from './VideoBitesStrip.stories' // Render the story directly in a test or composition // not typical — use via Storybook or play() functions // Or compose your own fixture with the bite() pattern: const items: VideoBiteStripItem[] = [ bite({ title: 'Custom Clip', aspect_ratio: '16:9' }), bite({ title: 'No Thumb', thumbnail_url: undefined }), ] ``` ## Source [`VideoBitesStrip.stories.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/VideoBitesStrip.stories.tsx)