239 lines
5.6 KiB
TypeScript
239 lines
5.6 KiB
TypeScript
import { define } from '../src'
|
|
import { ExampleSection } from './ssr/helpers'
|
|
|
|
const UserProfile = define('UserProfile', {
|
|
base: 'div',
|
|
|
|
padding: 24,
|
|
maxWidth: 600,
|
|
margin: "0 auto",
|
|
background: "white",
|
|
borderRadius: 12,
|
|
boxShadow: "0 2px 8px rgba(0,0,0,0.1)",
|
|
|
|
parts: {
|
|
Header: {
|
|
display: "flex",
|
|
alignItems: "center",
|
|
gap: 16,
|
|
marginBottom: 16,
|
|
},
|
|
Avatar: {
|
|
base: 'img',
|
|
width: 64,
|
|
height: 64,
|
|
borderRadius: "50%",
|
|
objectFit: "cover",
|
|
border: "3px solid #e5e7eb",
|
|
},
|
|
Info: {
|
|
flex: 1,
|
|
},
|
|
Name: {
|
|
marginBottom: 4,
|
|
fontSize: 20,
|
|
fontWeight: 600,
|
|
color: "#111827",
|
|
},
|
|
Handle: {
|
|
fontSize: 14,
|
|
color: "#6b7280",
|
|
},
|
|
Bio: {
|
|
marginBottom: 16,
|
|
width: "100%",
|
|
fontSize: 14,
|
|
lineHeight: 1.6,
|
|
color: "#374151",
|
|
wordWrap: "break-word",
|
|
},
|
|
Stats: {
|
|
display: "flex",
|
|
gap: 24,
|
|
paddingTop: 16,
|
|
borderTop: "1px solid #e5e7eb",
|
|
},
|
|
Stat: {
|
|
display: "flex",
|
|
flexDirection: "column",
|
|
gap: 4,
|
|
},
|
|
StatValue: {
|
|
fontSize: 18,
|
|
fontWeight: 600,
|
|
color: "#111827",
|
|
},
|
|
StatLabel: {
|
|
fontSize: 12,
|
|
color: "#6b7280",
|
|
textTransform: "uppercase",
|
|
},
|
|
},
|
|
|
|
variants: {
|
|
size: {
|
|
compact: {
|
|
padding: 16,
|
|
maxWidth: 300,
|
|
parts: {
|
|
Avatar: { width: 48, height: 48 },
|
|
Name: { fontSize: 16 },
|
|
Bio: { fontSize: 13 },
|
|
},
|
|
},
|
|
skinny: {
|
|
padding: 20,
|
|
maxWidth: 125,
|
|
parts: {
|
|
Header: {
|
|
flexDirection: "column",
|
|
alignItems: "center",
|
|
gap: 12,
|
|
},
|
|
Avatar: { width: 80, height: 80 },
|
|
Info: { flex: 0, width: "100%" },
|
|
Name: { textAlign: "center", fontSize: 18 },
|
|
Handle: { textAlign: "center" },
|
|
Bio: { textAlign: "center", fontSize: 13 },
|
|
Stats: {
|
|
flexDirection: "column",
|
|
gap: 16,
|
|
},
|
|
Stat: { alignItems: "center" },
|
|
},
|
|
},
|
|
large: {
|
|
padding: 32,
|
|
maxWidth: 800,
|
|
parts: {
|
|
Avatar: { width: 96, height: 96 },
|
|
Name: { fontSize: 24 },
|
|
},
|
|
},
|
|
},
|
|
verified: {
|
|
parts: {
|
|
Avatar: {
|
|
border: "3px solid #3b82f6",
|
|
},
|
|
},
|
|
},
|
|
theme: {
|
|
dark: {
|
|
background: "#1f2937",
|
|
parts: {
|
|
Name: { color: "#f9fafb" },
|
|
Handle: { color: "#9ca3af" },
|
|
Bio: { color: "#d1d5db" },
|
|
Stats: { borderTop: "1px solid #374151" },
|
|
StatValue: { color: "#f9fafb" },
|
|
},
|
|
},
|
|
},
|
|
},
|
|
|
|
render({ props, parts: { Root, Header, Avatar, Info, Name, Handle, Bio, Stats, Stat, StatValue, StatLabel } }) {
|
|
return (
|
|
<Root>
|
|
<Header>
|
|
<Avatar src={props.avatarUrl} alt={props.name} />
|
|
<Info>
|
|
<Name>
|
|
{props.name}
|
|
{props.verified && " ✓"}
|
|
</Name>
|
|
<Handle>@{props.username}</Handle>
|
|
</Info>
|
|
</Header>
|
|
|
|
<Bio>{props.bio}</Bio>
|
|
|
|
<Stats>
|
|
<Stat>
|
|
<StatValue>{props.followers?.toLocaleString() || 0}</StatValue>
|
|
<StatLabel>Followers</StatLabel>
|
|
</Stat>
|
|
<Stat>
|
|
<StatValue>{props.following?.toLocaleString() || 0}</StatValue>
|
|
<StatLabel>Following</StatLabel>
|
|
</Stat>
|
|
<Stat>
|
|
<StatValue>{props.posts?.toLocaleString() || 0}</StatValue>
|
|
<StatLabel>Posts</StatLabel>
|
|
</Stat>
|
|
</Stats>
|
|
</Root>
|
|
)
|
|
},
|
|
})
|
|
|
|
export const ProfileExamplesContent = () => (
|
|
<>
|
|
<ExampleSection title="Default Profile">
|
|
<UserProfile
|
|
name="Sarah Chen"
|
|
username="sarahc"
|
|
avatarUrl="https://i.pravatar.cc/150?img=5"
|
|
bio="Designer & developer. Building beautiful interfaces. Based in SF."
|
|
followers={1234}
|
|
following={567}
|
|
posts={89}
|
|
/>
|
|
</ExampleSection>
|
|
|
|
<ExampleSection title="Compact Variant">
|
|
<UserProfile
|
|
size="compact"
|
|
name="Alex Rivera"
|
|
username="arivera"
|
|
avatarUrl="https://i.pravatar.cc/150?img=12"
|
|
bio="Creative director. Coffee enthusiast."
|
|
followers={456}
|
|
following={234}
|
|
posts={45}
|
|
/>
|
|
</ExampleSection>
|
|
|
|
<ExampleSection title="Skinny Variant">
|
|
<UserProfile
|
|
size="skinny"
|
|
name="Taylor Kim"
|
|
username="tkim"
|
|
avatarUrl="https://i.pravatar.cc/150?img=3"
|
|
bio="Minimalist designer."
|
|
followers={2890}
|
|
following={125}
|
|
posts={312}
|
|
/>
|
|
</ExampleSection>
|
|
|
|
<ExampleSection title="Verified User (Dark Theme)">
|
|
<UserProfile
|
|
verified={true}
|
|
theme="dark"
|
|
name="Jordan Smith"
|
|
username="jordansmith"
|
|
avatarUrl="https://i.pravatar.cc/150?img=8"
|
|
bio="Tech entrepreneur. Angel investor. Sharing insights on startups and innovation."
|
|
followers={52300}
|
|
following={892}
|
|
posts={1240}
|
|
/>
|
|
</ExampleSection>
|
|
|
|
<ExampleSection title="Large Verified Profile">
|
|
<UserProfile
|
|
size="large"
|
|
verified={true}
|
|
name="Morgan Taylor"
|
|
username="mtaylor"
|
|
avatarUrl="https://i.pravatar.cc/150?img=20"
|
|
bio="Product designer with 10 years of experience. Passionate about accessibility and inclusive design. Speaker at design conferences."
|
|
followers={8900}
|
|
following={234}
|
|
posts={567}
|
|
/>
|
|
</ExampleSection>
|
|
</>
|
|
)
|