forked from Mobilecn-UI/nativecn-ui
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Card.tsx
119 lines (110 loc) · 2.28 KB
/
Card.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import { Text, View } from 'react-native';
import { cn } from '../lib/utils';
function Card({
className,
...props
}: React.ComponentPropsWithoutRef<typeof View>) {
return (
<View
className={cn('rounded-xl border border-border', className)}
{...props}
/>
);
}
function CardHeader({
className,
...props
}: React.ComponentPropsWithoutRef<typeof View>) {
return <View className={cn('p-4', className)} {...props} />;
}
function CardTitle({
className,
...props
}: React.ComponentPropsWithoutRef<typeof View>) {
return (
<Text
className={cn(
'text-2xl font-semibold tracking-tight text-primary',
className
)}
{...props}
/>
);
}
function CardDescription({
className,
...props
}: React.ComponentPropsWithoutRef<typeof View>) {
return (
<Text
className={cn('text-sm text-muted-foreground', className)}
{...props}
/>
);
}
function CardContent({
className,
...props
}: React.ComponentPropsWithoutRef<typeof View>) {
return <View className={cn('p-4 pt-0', className)} {...props} />;
}
// TODO: style
function CardFooter({
className,
...props
}: React.ComponentPropsWithoutRef<typeof View>) {
return (
<View
className={cn(className, 'flex flex-row items-center p-4 pt-0')}
{...props}
/>
);
}
interface SimpleCardProps {
className?: string;
title?: string;
description?: string;
content?: string;
footer?: string;
}
function SimpleCard({
className,
title,
description,
content,
footer,
}: SimpleCardProps) {
return (
<Card className={className}>
<CardHeader>
{title && (
<Text className="text-2xl font-semibold tracking-tight text-primary">
{title}
</Text>
)}
{description && (
<Text className="text-sm text-muted-foreground">{description}</Text>
)}
</CardHeader>
{content && (
<CardContent>
<Text className="text-base text-primary">{content}</Text>
</CardContent>
)}
{footer && (
<CardFooter>
<Text className="text-sm text-muted-foreground">{footer}</Text>
</CardFooter>
)}
</Card>
);
}
export {
Card,
CardHeader,
CardTitle,
CardDescription,
CardContent,
CardFooter,
SimpleCard,
};