import type { Meta, StoryObj } from '@storybook/nextjs-vite' import { ParallaxImageShowcase } from '../components/features/parallax-image-showcase' /** Generate a placeholder screenshot SVG as a data URI */ const makePlaceholder = (label: string, bg = '#1e1e2e', fg = '#a6adc8') => `data:image/svg+xml,${encodeURIComponent( `` + `` + `` + `` + `` + `` + `` + `` + `` + `` + `${label}` + `` )}` const images = [ { src: makePlaceholder('Dashboard', '#1e1e2e'), alt: 'Dashboard', position: 'left' as const }, { src: makePlaceholder('Analytics', '#1a1b26'), alt: 'Analytics', position: 'center' as const }, { src: makePlaceholder('Settings', '#191724'), alt: 'Settings', position: 'right' as const }, ] const meta = { title: 'Features/ParallaxImageShowcase', component: ParallaxImageShowcase, argTypes: { layout: { control: 'select', options: ['non-boxed', 'boxed', 'grid'], }, intensity: { control: { type: 'number', min: 0, max: 10, step: 0.1 }, }, shadow: { control: 'boolean' }, }, parameters: { layout: 'fullscreen', }, tags: ['autodocs'], decorators: [ (Story) => (
), ], } satisfies Meta export default meta type Story = StoryObj // === Layout Variants === /** * Default non-boxed layout with three overlapping layers and parallax depth. */ export const NonBoxed: Story = { args: { images, layout: 'non-boxed', }, } /** * Boxed layout with two-row structure — logo on top, images below. */ export const Boxed: Story = { args: { images, layout: 'boxed', logoElement: (
Logo
), }, } /** * Grid layout — simple 3-column grid with gentle parallax. */ export const Grid: Story = { args: { images, layout: 'grid', }, } // === Intensity Variants === /** * Subtle animation — barely noticeable movement. */ export const SubtleIntensity: Story = { args: { images, layout: 'non-boxed', intensity: 0.3, }, } /** * Aggressive animation — exaggerated movement. */ export const HighIntensity: Story = { args: { images, layout: 'non-boxed', intensity: 5, }, } // === Grid Options === /** * Grid layout with shadow enabled on each image. */ export const GridWithShadow: Story = { args: { images, layout: 'grid', shadow: true, }, } /** * Grid with higher intensity for more dramatic parallax. */ export const GridHighIntensity: Story = { args: { images, layout: 'grid', intensity: 3, shadow: true, }, } // === Partial Images === /** * Only two images provided (left + center). */ export const TwoImages: Story = { args: { images: images.slice(0, 2), layout: 'non-boxed', }, } /** * Single image only. */ export const SingleImage: Story = { args: { images: [images[0]], layout: 'grid', }, }