@ui8kit/blocks
Version:
A collection of 50+ blocks for state and UI management for buildy
113 lines (98 loc) • 2.27 kB
text/typescript
// Blog component types
interface BlogPost {
id: string;
title: string;
description: string;
author: {
name: string;
avatar?: string;
};
date: string;
readTime: string;
image?: {
src: string;
alt: string;
};
category: string;
categoryId?: string;
}
interface BlogData {
badge?: string;
title: string;
subtitle?: string;
description: string;
tagline?: string;
viewAllText?: string;
buttonText?: string;
categories?: Array<{
id: string;
name: string;
}>;
posts: BlogPost[];
featuredPost?: BlogPost;
}
// UI component props (NO className!)
interface BlogBadgeProps {
children: React.ReactNode;
}
interface BlogTitleProps {
children: React.ReactNode;
order?: 1 | 2 | 3 | 4 | 5 | 6;
size?: string;
}
interface BlogDescriptionProps {
children: React.ReactNode;
}
interface BlogButtonProps {
children: React.ReactNode;
variant?: "default" | "outline" | "secondary" | "ghost";
rightSection?: React.ReactNode;
onClick?: () => void;
}
interface BlogActionsProps {
children: React.ReactNode;
}
interface BlogCategoryProps {
children: React.ReactNode;
variant?: "default" | "outline";
}
interface BlogAuthorProps {
name: string;
avatar?: string;
}
interface BlogMetaProps {
date: string;
readTime: string;
}
interface BlogCardProps {
post: BlogPost;
variant?: "default" | "compact" | "featured";
}
// Component props (NO className!)
interface BlogSectionProps {
children: React.ReactNode;
layout?: "grid" | "split";
useContainer?: boolean;
py?: "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl";
}
interface BlogContentProps {
children: React.ReactNode;
align?: "left" | "center";
}
interface BlogGridProps {
children: React.ReactNode;
cols?: "1" | "2" | "3" | "4" | "1-2" | "1-2-3" | "1-2-4";
gap?: "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl";
}
interface BlogFiltersProps {
categories: Array<{
id: string;
name: string;
}>;
activeCategory?: string;
onCategoryChange?: (categoryId: string) => void;
}
interface BlogListProps {
posts: BlogPost[];
variant?: "default" | "compact" | "timeline";
}