mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-05 23:26:38 +08:00
63cd906cfc
- Merge all files inside openflare-server to the repository root directory. - Relocate agent, relay, and flared subprojects from internal/ to internal/apps/. - Combine docker-compose files and update build context paths to root. - Update GitHub workflows and Dockerfiles to refer to new directories and package names. - Rewrite Go package imports across all files. - Resolve database renew test race condition and clean up docs.
37 lines
1000 B
TypeScript
37 lines
1000 B
TypeScript
'use client';
|
|
|
|
import type {ReactNode} from 'react';
|
|
|
|
import {Button} from '@/components/ui/button';
|
|
import {Card, CardContent, CardDescription, CardHeader, CardTitle} from '@/components/ui/card';
|
|
|
|
interface SectionShellProps {
|
|
title: string;
|
|
description: string;
|
|
formId: string;
|
|
saving?: boolean;
|
|
children: ReactNode;
|
|
}
|
|
|
|
export function SectionShell({
|
|
title,
|
|
description,
|
|
formId,
|
|
saving = false,
|
|
children,
|
|
}: SectionShellProps) {
|
|
return (
|
|
<Card>
|
|
<CardHeader className="flex flex-row items-start justify-between gap-4 space-y-0">
|
|
<div className="space-y-1">
|
|
<CardTitle className="text-sm font-semibold">{title}</CardTitle>
|
|
<CardDescription>{description}</CardDescription>
|
|
</div>
|
|
<Button type="submit" form={formId} size="sm" className="h-8 shrink-0 text-xs" disabled={saving}>
|
|
{saving ? '保存中...' : '保存'}
|
|
</Button>
|
|
</CardHeader>
|
|
<CardContent>{children}</CardContent>
|
|
</Card>
|
|
);
|
|
} |