UNPKG

aura-glass

Version:

A comprehensive glassmorphism design system for React applications with 142+ production-ready components

302 lines 9.94 kB
import React from 'react'; export interface GlassCardVariant { default: 'default'; elevated: 'elevated'; outlined: 'outlined'; filled: 'filled'; glass: 'glass'; } export type GlassCardVariantType = keyof GlassCardVariant; export interface GlassCardSize { sm: 'sm'; md: 'md'; lg: 'lg'; xl: 'xl'; } export type GlassCardSizeType = keyof GlassCardSize; export interface GlassCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'size'> { /** Card variant */ variant?: GlassCardVariantType; /** Card size */ size?: GlassCardSizeType; /** Glass morphism variant */ glassVariant?: 'frosted' | 'dynamic' | 'clear' | 'tinted' | 'luminous'; /** Blur strength */ blurStrength?: 'none' | 'light' | 'standard' | 'heavy'; /** Border radius */ borderRadius?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full'; /** Enable hover effects */ hoverable?: boolean; /** Hover elevation */ hoverElevation?: number; /** Enable interactive effects */ interactive?: boolean; /** Loading state */ loading?: boolean; /** Custom styles */ glassStyles?: React.CSSProperties; /** Card padding */ padding?: 'none' | 'sm' | 'md' | 'lg' | 'xl'; /** Children */ children?: React.ReactNode; /** Glass surface intent */ intent?: 'neutral' | 'primary' | 'success' | 'warning' | 'danger' | 'info'; /** Glass surface elevation */ elevation?: 'level1' | 'level2' | 'level3' | 'level4'; /** Performance tier */ tier?: 'low' | 'medium' | 'high'; } export interface GlassCardHeaderProps extends React.HTMLAttributes<HTMLDivElement> { /** Header variant */ variant?: 'default' | 'compact' | 'expanded'; /** Show divider */ divider?: boolean; /** Header actions */ actions?: React.ReactNode; /** Custom styles */ styles?: React.CSSProperties; } export interface GlassCardTitleProps extends React.HTMLAttributes<HTMLHeadingElement> { /** Title level */ level?: 1 | 2 | 3 | 4 | 5 | 6; /** Title variant */ variant?: 'default' | 'muted' | 'accent'; /** Title alignment */ align?: 'left' | 'center' | 'right'; /** Truncate long titles */ truncate?: boolean; /** Maximum lines for truncation */ maxLines?: number; } export interface GlassCardSubtitleProps extends React.HTMLAttributes<HTMLParagraphElement> { /** Subtitle variant */ variant?: 'default' | 'muted' | 'accent'; /** Subtitle alignment */ align?: 'left' | 'center' | 'right'; } export interface GlassCardContentProps extends React.HTMLAttributes<HTMLDivElement> { /** Content padding */ padding?: 'none' | 'sm' | 'md' | 'lg' | 'xl'; /** Content alignment */ align?: 'left' | 'center' | 'right'; /** Enable scrolling for overflow */ scrollable?: boolean; /** Maximum height for scrolling */ maxHeight?: string | number; } export interface GlassCardFooterProps extends React.HTMLAttributes<HTMLDivElement> { /** Footer variant */ variant?: 'default' | 'compact' | 'expanded'; /** Footer alignment */ align?: 'left' | 'center' | 'right' | 'space-between'; /** Show divider */ divider?: boolean; /** Footer actions */ actions?: React.ReactNode; } export interface GlassCardMediaProps extends React.HTMLAttributes<HTMLDivElement> { /** Media source */ src?: string; /** Media alt text */ alt?: string; /** Media aspect ratio */ aspectRatio?: 'square' | 'video' | 'wide' | 'portrait' | number; /** Media position */ position?: 'top' | 'bottom' | 'background'; /** Enable overlay */ overlay?: boolean; /** Overlay content */ overlayContent?: React.ReactNode; /** Overlay opacity */ overlayOpacity?: number; /** Enable hover zoom */ hoverZoom?: boolean; /** Zoom scale */ zoomScale?: number; } export interface GlassCardLinkProps extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'href'> { /** Link destination */ href: string; /** Link target */ target?: '_blank' | '_self' | '_parent' | '_top'; /** Enable magnetic effect */ magnetic?: boolean; /** Magnetic strength */ magneticStrength?: number; /** Enable ripple effect */ ripple?: boolean; /** Custom link styles */ linkStyles?: React.CSSProperties; } export interface CardPattern { name: string; layout: 'single' | 'grid' | 'masonry' | 'carousel'; columns?: number; gap?: string | number; aspectRatio?: number; animation?: 'none' | 'stagger' | 'cascade' | 'parallax'; } export interface CardGridProps { /** Grid pattern */ pattern?: CardPattern; /** Cards to display */ cards: React.ReactNode[]; /** Grid columns */ columns?: number | { sm: number; md: number; lg: number; xl: number; }; /** Grid gap */ gap?: string | number; /** Enable responsive behavior */ responsive?: boolean; /** Animation settings */ animation?: { enabled: boolean; type: 'stagger' | 'cascade' | 'parallax'; delay: number; duration: number; }; } export interface CardMasonryProps { /** Masonry columns */ columns?: number | { sm: number; md: number; lg: number; xl: number; }; /** Masonry gap */ gap?: string | number; /** Cards to display */ cards: React.ReactNode[]; /** Enable responsive behavior */ responsive?: boolean; } export interface CardCarouselProps { /** Carousel cards */ cards: React.ReactNode[]; /** Show dots indicator */ showDots?: boolean; /** Show arrows */ showArrows?: boolean; /** Enable autoplay */ autoplay?: boolean; /** Autoplay delay */ autoplayDelay?: number; /** Enable infinite loop */ infinite?: boolean; /** Animation type */ animation?: 'slide' | 'fade' | 'scale'; /** Animation duration */ animationDuration?: number; } export interface CardThemeTokens { colors: { background: Record<GlassCardVariantType, string>; border: Record<GlassCardVariantType, string>; text: { primary: string; secondary: string; muted: string; }; }; spacing: { padding: Record<GlassCardSizeType, string>; margin: Record<GlassCardSizeType, string>; gap: string; }; typography: { title: { fontSize: Record<GlassCardSizeType, string>; fontWeight: string | number; lineHeight: number; }; subtitle: { fontSize: Record<GlassCardSizeType, string>; fontWeight: string | number; lineHeight: number; }; body: { fontSize: string; lineHeight: number; }; }; effects: { borderRadius: Record<NonNullable<GlassCardProps['borderRadius']>, string>; boxShadow: Record<GlassCardVariantType, string>; backdropFilter: Record<NonNullable<GlassCardProps['blurStrength']>, string>; hover: { elevation: Record<GlassCardVariantType, string>; transform: string; }; }; } export interface CardAnimationConfig { /** Enable entrance animation */ entrance?: boolean; /** Entrance animation type */ entranceType?: 'fadeIn' | 'slideIn' | 'scaleIn' | 'bounceIn'; /** Entrance animation duration */ entranceDuration?: number; /** Stagger delay for multiple cards */ staggerDelay?: number; /** Enable hover animations */ hoverAnimations?: boolean; /** Hover animation type */ hoverType?: 'lift' | 'glow' | 'scale' | 'tilt'; /** Hover animation duration */ hoverDuration?: number; /** Enable loading animations */ loadingAnimations?: boolean; } export interface CardAccessibilityProps { /** ARIA label */ 'aria-label'?: string; /** ARIA description */ 'aria-describedby'?: string; /** ARIA role */ role?: 'article' | 'region' | 'complementary' | 'main'; /** Focus management */ tabIndex?: number; /** Keyboard navigation */ keyboardNavigation?: boolean; } export interface CardState { isHovered: boolean; isFocused: boolean; isLoading: boolean; isExpanded: boolean; isSelected: boolean; } export interface CardEventHandlers { onClick?: (event: React.MouseEvent<HTMLDivElement>) => void; onMouseEnter?: (event: React.MouseEvent<HTMLDivElement>) => void; onMouseLeave?: (event: React.MouseEvent<HTMLDivElement>) => void; onFocus?: (event: React.FocusEvent<HTMLDivElement>) => void; onBlur?: (event: React.FocusEvent<HTMLDivElement>) => void; onKeyDown?: (event: React.KeyboardEvent<HTMLDivElement>) => void; onExpand?: (expanded: boolean) => void; onSelect?: (selected: boolean) => void; } export type GlassCardRef = React.RefObject<HTMLDivElement>; export type GlassCardHeaderRef = React.RefObject<HTMLDivElement>; export type GlassCardContentRef = React.RefObject<HTMLDivElement>; export type GlassCardFooterRef = React.RefObject<HTMLDivElement>; export interface CardCompoundComponent { Root: React.ComponentType<GlassCardProps & CardAccessibilityProps>; Header: React.ComponentType<GlassCardHeaderProps>; Title: React.ComponentType<GlassCardTitleProps>; Subtitle: React.ComponentType<GlassCardSubtitleProps>; Content: React.ComponentType<GlassCardContentProps>; Footer: React.ComponentType<GlassCardFooterProps>; Media: React.ComponentType<GlassCardMediaProps>; Link: React.ComponentType<GlassCardLinkProps>; Grid: React.ComponentType<CardGridProps>; Masonry: React.ComponentType<CardMasonryProps>; Carousel: React.ComponentType<CardCarouselProps>; } export type CardComponentProps = GlassCardProps & CardAccessibilityProps & CardEventHandlers; //# sourceMappingURL=types.d.ts.map