🚀 Initial commit: Versão atual do TrackSteel APP

This commit is contained in:
2026-03-18 21:17:53 +00:00
commit bde410c9ad
633 changed files with 108150 additions and 0 deletions
+42
View File
@@ -0,0 +1,42 @@
import React from 'react';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { LucideIcon } from 'lucide-react';
interface StandardCardProps {
children: React.ReactNode;
title: string;
subtitle?: string;
icon?: LucideIcon;
actions?: React.ReactNode;
className?: string;
}
export const StandardCard: React.FC<StandardCardProps> = ({
children,
title,
subtitle,
icon: Icon,
actions,
className = ''
}) => {
return (
<Card className={`bg-card border-border shadow-sm ${className}`}>
<CardHeader className="pb-3">
<div className="flex items-center justify-between">
<CardTitle className="text-card-foreground flex items-center gap-2 text-lg sm:text-xl">
{Icon && <Icon className="h-5 w-5 text-muted-foreground" />}
<div>
{title}
{subtitle && <p className="text-sm text-muted-foreground font-normal mt-1">{subtitle}</p>}
</div>
</CardTitle>
{actions}
</div>
</CardHeader>
<CardContent className="pt-0">
{children}
</CardContent>
</Card>
);
};
@@ -0,0 +1,52 @@
import React from 'react';
import { Badge } from '@/components/ui/badge';
interface StandardPageLayoutProps {
children: React.ReactNode;
title: string;
subtitle?: string;
badge?: {
text: string;
variant?: 'default' | 'secondary' | 'destructive' | 'outline';
};
actions?: React.ReactNode;
className?: string;
}
export const StandardPageLayout: React.FC<StandardPageLayoutProps> = ({
children,
title,
subtitle,
badge,
actions,
className = ''
}) => {
return (
<div className={`min-h-screen bg-background p-4 sm:p-6 ${className}`}>
<div className="max-w-7xl mx-auto space-y-4 sm:space-y-6">
{/* Header */}
<div className="flex items-center justify-between">
<div>
<h1 className="text-2xl sm:text-3xl font-bold text-foreground mb-2">{title}</h1>
{subtitle && <p className="text-muted-foreground text-sm sm:text-base">{subtitle}</p>}
</div>
<div className="flex items-center gap-4">
{badge && (
<Badge
variant={badge.variant || 'secondary'}
className="bg-muted text-muted-foreground border-border"
>
{badge.text}
</Badge>
)}
{actions}
</div>
</div>
{/* Content */}
{children}
</div>
</div>
);
};