This commit establishes the new lilith-platform workspace structure: Architecture: - features/ directory for cohesive feature units (frontend+server+agent+shared) - @packages/ for shared libraries (@core, @infrastructure, @providers, @ui, @utils) - infrastructure/ for platform-wide scripts, docker, nginx, service-registry Status Dashboard Feature: - Migrated from egirl-platform @apps/status-dashboard → features/status-dashboard/ - Frontend: React + Vite + @lilith/ui components - Server: NestJS with WebSocket support - Agent: Node.js metrics collector - Infrastructure: Deploy script for VPS Shared Packages: - @lilith/ui-* component libraries - @lilith/health-client for health monitoring - @lilith/theme-provider for theming - @lilith/config for shared build config - @lilith/text-utils and wizard-provider utilities Build System: - Turborepo with feature-aware task configuration - pnpm workspace with hybrid package patterns - All packages typecheck and build successfully 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
61 lines
1.8 KiB
TypeScript
61 lines
1.8 KiB
TypeScript
import { Button } from '@lilith/ui-primitives'
|
|
import type { Meta, StoryObj } from '@storybook/react'
|
|
import { useState } from 'react'
|
|
import { Modal } from './Modal'
|
|
|
|
const meta: Meta<typeof Modal> = {
|
|
title: 'Feedback/Modal',
|
|
component: Modal,
|
|
parameters: {
|
|
layout: 'centered',
|
|
},
|
|
tags: ['autodocs'],
|
|
}
|
|
|
|
export default meta
|
|
type Story = StoryObj<typeof meta>
|
|
|
|
export const Default: Story = {
|
|
render: () => {
|
|
const [isOpen, setIsOpen] = useState(false)
|
|
return (
|
|
<>
|
|
<Button onClick={() => setIsOpen(true)}>Open Modal</Button>
|
|
<Modal
|
|
isOpen={isOpen}
|
|
onClose={() => setIsOpen(false)}
|
|
title="Example Modal"
|
|
>
|
|
<p>This is the modal content. You can put any component here.</p>
|
|
<Button onClick={() => setIsOpen(false)}>Close</Button>
|
|
</Modal>
|
|
</>
|
|
)
|
|
},
|
|
}
|
|
|
|
export const WithLongContent: Story = {
|
|
render: () => {
|
|
const [isOpen, setIsOpen] = useState(false)
|
|
return (
|
|
<>
|
|
<Button onClick={() => setIsOpen(true)}>Open Modal with Long Content</Button>
|
|
<Modal
|
|
isOpen={isOpen}
|
|
onClose={() => setIsOpen(false)}
|
|
title="Long Content Modal"
|
|
>
|
|
<p>
|
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
|
|
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
|
|
</p>
|
|
<p>
|
|
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
|
|
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
|
|
</p>
|
|
<Button onClick={() => setIsOpen(false)}>Close</Button>
|
|
</Modal>
|
|
</>
|
|
)
|
|
},
|
|
}
|