notion-design-system
Version:
A comprehensive Notion-inspired design system built with React, TypeScript, and Tailwind CSS
118 lines (106 loc) • 3.84 kB
TypeScript
import React$1 from 'react';
interface BaseComponentProps {
className?: string;
children?: React.ReactNode;
}
type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger';
type ButtonSize = 'sm' | 'md' | 'lg';
type InputVariant = 'default' | 'filled';
type InputSize = 'sm' | 'md' | 'lg';
type TypographyVariant = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'body1' | 'body2' | 'caption' | 'overline';
type ColorVariant = 'default' | 'blue' | 'red' | 'yellow' | 'green' | 'purple' | 'pink' | 'orange' | 'gray';
interface IconProps extends BaseComponentProps {
size?: number;
color?: string;
}
interface BlockProps extends BaseComponentProps {
id?: string;
type: 'text' | 'heading' | 'bullet' | 'numbered' | 'todo' | 'toggle' | 'quote' | 'code';
content?: string;
level?: number;
checked?: boolean;
collapsed?: boolean;
}
interface ButtonProps extends BaseComponentProps {
variant?: ButtonVariant;
size?: ButtonSize;
disabled?: boolean;
loading?: boolean;
onClick?: () => void;
type?: 'button' | 'submit' | 'reset';
icon?: React$1.ReactNode;
iconPosition?: 'left' | 'right';
}
declare const Button: React$1.FC<ButtonProps>;
interface InputProps extends BaseComponentProps, Omit<React$1.InputHTMLAttributes<HTMLInputElement>, 'size'> {
variant?: InputVariant;
size?: InputSize;
label?: string;
error?: string;
helperText?: string;
leftIcon?: React$1.ReactNode;
rightIcon?: React$1.ReactNode;
fullWidth?: boolean;
}
declare const Input: React$1.ForwardRefExoticComponent<InputProps & React$1.RefAttributes<HTMLInputElement>>;
interface TypographyProps extends BaseComponentProps {
variant?: TypographyVariant;
color?: ColorVariant;
weight?: 'normal' | 'medium' | 'semibold' | 'bold';
align?: 'left' | 'center' | 'right';
as?: keyof JSX.IntrinsicElements;
}
declare const Typography: React$1.FC<TypographyProps>;
interface CardProps extends BaseComponentProps {
variant?: 'default' | 'outlined' | 'elevated';
padding?: 'none' | 'sm' | 'md' | 'lg';
hoverable?: boolean;
clickable?: boolean;
onClick?: () => void;
}
declare const Card: React$1.FC<CardProps>;
interface BadgeProps extends BaseComponentProps {
variant?: 'solid' | 'soft' | 'outline';
color?: ColorVariant;
size?: 'sm' | 'md' | 'lg';
removable?: boolean;
onRemove?: () => void;
}
declare const Badge: React$1.FC<BadgeProps>;
interface AvatarProps extends BaseComponentProps {
src?: string;
alt?: string;
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
fallback?: string;
shape?: 'circle' | 'square';
}
declare const Avatar: React$1.FC<AvatarProps>;
interface TooltipProps extends BaseComponentProps {
content: React$1.ReactNode;
placement?: 'top' | 'bottom' | 'left' | 'right';
trigger?: 'hover' | 'click';
delay?: number;
disabled?: boolean;
}
declare const Tooltip: React$1.FC<TooltipProps>;
declare const Block: React$1.FC<BlockProps>;
interface SidebarItem {
id: string;
title: string;
type: 'page' | 'folder';
icon?: React$1.ReactNode;
children?: SidebarItem[];
expanded?: boolean;
level?: number;
}
interface SidebarProps extends BaseComponentProps {
items: SidebarItem[];
onItemClick?: (item: SidebarItem) => void;
onItemToggle?: (item: SidebarItem) => void;
selectedId?: string;
searchable?: boolean;
width?: number;
}
declare const Sidebar: React$1.FC<SidebarProps>;
export { Avatar, Badge, Block, Button, Card, Input, Sidebar, Tooltip, Typography };
export type { AvatarProps, BadgeProps, BaseComponentProps, BlockProps, ButtonProps, ButtonSize, ButtonVariant, CardProps, ColorVariant, IconProps, InputProps, InputSize, InputVariant, SidebarItem, SidebarProps, TooltipProps, TypographyProps, TypographyVariant };