veza/apps/web/src/components/ui/ImageViewerModal.stories.tsx
senke ba24e4c133 feat(storybook): complete UI component coverage (batches 6-9)
- Batch 6: FAB, FormField, FloatingInput, AvatarUpload
- Batch 7: Modal, ConfirmationDialog, ImageViewerModal, ErrorDisplay, LoadingState
- Batch 8: DataList, WaveformVisualizer, OptimizedImage, VirtualizedList
- Batch 9: ImageCropper, LoadingSpinner, FocusTrap
- Achieved total coverage for src/components/ui
2026-02-02 19:50:45 +01:00

62 lines
2 KiB
TypeScript

import type { Meta, StoryObj } from '@storybook/react';
import { ImageViewerModal } from './ImageViewerModal';
import { Button } from './button';
import { useState } from 'react';
const meta = {
title: 'UI/ImageViewerModal',
component: ImageViewerModal,
tags: ['autodocs'],
} satisfies Meta<typeof ImageViewerModal>;
export default meta;
type Story = StoryObj<typeof meta>;
export const Default: Story = {
render: () => {
const [open, setOpen] = useState(false);
const image = "https://images.unsplash.com/photo-1682687220742-aba13b6e50ba";
return (
<>
<Button onClick={() => setOpen(true)}>View Image</Button>
{open && (
<ImageViewerModal
src={image}
alt="Nature Landscape"
onClose={() => setOpen(false)}
/>
)}
</>
);
},
};
export const Gallery: Story = {
render: () => {
const [open, setOpen] = useState(false);
const [index, setIndex] = useState(0);
const images = [
"https://images.unsplash.com/photo-1682687220742-aba13b6e50ba",
"https://images.unsplash.com/photo-1682687220063-4742bd7fd538",
"https://images.unsplash.com/photo-1682687220199-d0124f48f95b"
];
return (
<>
<Button onClick={() => setOpen(true)}>Open Gallery</Button>
{open && (
<ImageViewerModal
src={images[index]}
alt={`Gallery Image ${index + 1}`}
onClose={() => setOpen(false)}
hasNext={index < images.length - 1}
hasPrev={index > 0}
onNext={() => setIndex(i => i + 1)}
onPrev={() => setIndex(i => i - 1)}
/>
)}
</>
);
},
};