import type React from "react"; /** * @fileoverview Type definitions for MobileBottomNav component * @module MobileBottomNav/types * @version 1.0.0 */ import type { ReactNode, HTMLAttributes, ComponentPropsWithoutRef } from "react"; /** * Visual variant of the navigation bar * @enum {string} * @description Defines the visual style of the bottom navigation */ export declare enum NavVariant { /** Glassmorphism effect with blur and transparency */ GLASS = "glass", /** Solid background without transparency */ SOLID = "solid", /** Transparent background - headless mode for custom styling */ HEADLESS = "headless" } /** * Size preset for the navigation bar * @enum {string} * @description Controls the overall size and spacing of navigation elements */ export declare enum NavSize { /** Compact size - 56px height, smaller touch targets */ SMALL = "sm", /** Default size - 72px height, optimal touch targets */ MEDIUM = "md", /** Large size - 88px height, larger touch targets */ LARGE = "lg" } /** * Position of the label relative to the icon * @enum {string} * @description Determines how labels are displayed in navigation items */ export declare enum LabelPosition { /** Label below the icon (default mobile pattern) */ BELOW = "below", /** Label beside the icon (horizontal layout) */ BESIDE = "beside", /** No label, icon only */ HIDDEN = "hidden" } /** * Animation type for navigation interactions * @enum {string} * @description Defines the animation behavior for navigation items */ export declare enum AnimationType { /** Spring animation for natural feel */ SPRING = "spring", /** Tween animation for precise timing */ TWEEN = "tween", /** No animation */ NONE = "none" } /** * State of a navigation item * @enum {string} * @description Represents the current state of a navigation item */ export declare enum NavItemState { /** Default inactive state */ INACTIVE = "inactive", /** Currently selected/active item */ ACTIVE = "active", /** Disabled and non-interactive */ DISABLED = "disabled" } /** * Icon size preset * @enum {number} * @description Standard icon sizes in pixels */ export declare enum IconSize { /** Small icons - 18px */ SMALL = 18, /** Medium icons - 24px (default) */ MEDIUM = 24, /** Large icons - 28px */ LARGE = 28 } /** * Z-index levels for layering * @enum {number} * @description Consistent z-index values for proper stacking */ export declare enum ZIndexLevel { /** Below default content */ BELOW = 40, /** Default navigation level */ DEFAULT = 50, /** Above most content */ ELEVATED = 60, /** Maximum elevation */ MAX = 100 } /** * Blur intensity for glassmorphism * @enum {number} * @description Backdrop blur values in pixels */ export declare enum BlurIntensity { /** Subtle blur - 8px */ LIGHT = 8, /** Standard blur - 20px (default) */ MEDIUM = 20, /** Heavy blur - 40px */ HEAVY = 40 } /** * Border radius preset for navigation * @enum {string} * @description Defines the border radius style */ export declare enum NavBorderRadius { /** No border radius */ NONE = "none", /** Small radius - 8px */ SMALL = "sm", /** Medium radius - 16px (default) */ MEDIUM = "md", /** Large radius - 24px */ LARGE = "lg", /** Extra large radius - 32px */ EXTRA_LARGE = "xl", /** Full rounded (pill shape) */ FULL = "full" } /** * Gap spacing preset for items * @enum {number} * @description Standard gap values in rem units */ export declare enum NavGap { /** No gap */ NONE = 0, /** Extra small - 0.25rem (4px) */ EXTRA_SMALL = 0.25, /** Small - 0.5rem (8px) */ SMALL = 0.5, /** Medium - 1rem (16px) */ MEDIUM = 1, /** Large - 1.5rem (24px) */ LARGE = 1.5, /** Extra large - 2rem (32px) */ EXTRA_LARGE = 2 } /** * Spring animation configuration * @interface SpringConfig * @description Configuration for spring-based animations */ export interface SpringConfig { /** Spring stiffness (default: 400) */ stiffness: number; /** Damping ratio (default: 30) */ damping: number; /** Mass of the animated element (default: 1) */ mass: number; } /** * Tween animation configuration * @interface TweenConfig * @description Configuration for tween-based animations */ export interface TweenConfig { /** Duration in seconds */ duration: number; /** Easing function name */ ease: "linear" | "easeIn" | "easeOut" | "easeInOut"; } /** * Animation configuration union type * @interface AnimationConfig * @description Complete animation configuration options */ export interface AnimationConfig { /** Type of animation to use */ type: AnimationType; /** Spring configuration (when type is SPRING) */ spring?: SpringConfig; /** Tween configuration (when type is TWEEN) */ tween?: TweenConfig; /** Scale factor for press animation */ pressScale?: number; /** Scale factor for hover animation */ hoverScale?: number; } /** * Glassmorphism style configuration * @interface GlassConfig * @description Configuration for glassmorphism visual effects */ export interface GlassConfig { /** Blur intensity in pixels */ blur: BlurIntensity | number; /** Saturation percentage (100-200) */ saturation: number; /** Background opacity (0-1) */ opacity: number; /** Border opacity (0-1) */ borderOpacity: number; } /** * Base props shared by all MobileBottomNav components * @interface BaseNavProps * @description Common properties for navigation components */ export interface BaseNavProps { /** Additional CSS classes */ className?: string; /** Inline styles */ style?: React.CSSProperties; /** Test ID for testing */ "data-testid"?: string; } /** * Motion-specific props for components using Framer Motion * @interface MotionProps * @description Props that are specific to Framer Motion components */ export interface MotionProps { onDrag?: (event: MouseEvent | TouchEvent | PointerEvent, info: any) => void; onDragStart?: (event: MouseEvent | TouchEvent | PointerEvent, info: any) => void; onDragEnd?: (event: MouseEvent | TouchEvent | PointerEvent, info: any) => void; drag?: boolean | "x" | "y"; dragConstraints?: any; dragMomentum?: boolean; dragElastic?: boolean; dragPropagation?: boolean; dragTransition?: any; whileTap?: any; whileHover?: any; animate?: any; initial?: any; exit?: any; transition?: any; } /** * Root component props * @interface RootProps * @description Properties for the MobileBottomNav.Root component */ export interface RootProps extends BaseNavProps, Omit, "className" | "style" | keyof MotionProps> { /** Child components (NavList, custom content) */ children: ReactNode; /** Visual variant of the navigation */ variant?: NavVariant; /** Size preset */ size?: NavSize; /** Z-index level */ zIndex?: ZIndexLevel | number; /** Show/hide the navigation */ visible?: boolean; /** Glassmorphism configuration (only for GLASS variant) */ glassConfig?: Partial; /** Animation configuration */ animationConfig?: Partial; /** ARIA label for accessibility */ "aria-label"?: string; /** Use full width container (adds max-width and centers) */ full?: boolean; /** Border radius preset or custom value */ rounded?: NavBorderRadius | number; /** Gap between nav items (uses NavGap enum or custom rem value) */ gap?: NavGap | number; } /** * Props for the NavList component * @interface NavListProps * @extends {BaseNavProps} * @description Configuration for the navigation items container */ export interface NavListProps extends BaseNavProps, Omit, "className" | "style"> { /** NavItem children */ children: ReactNode; /** Gap between items (in rem or px) */ gap?: number; /** Justify content alignment */ justify?: "start" | "center" | "end" | "around" | "between" | "evenly"; } /** * Props for the NavItem component * @interface NavItemProps * @extends {BaseNavProps} * @extends {Omit, "className" | "style" | "children">} * @description Configuration for individual navigation items */ export interface NavItemProps extends BaseNavProps, Omit, "className" | "style" | "children"> { /** Icon element to display */ icon: ReactNode; /** Label text */ label: string; /** Current state of the item */ state?: NavItemState; /** Label position relative to icon */ labelPosition?: LabelPosition; /** Click handler */ onClick?: () => void; /** Href for navigation (renders as anchor) */ href?: string; /** Icon size */ iconSize?: IconSize | number; /** Show badge indicator */ badge?: ReactNode; /** Accessible name override */ "aria-label"?: string; } /** * Navigation context value * @interface NavContextValue * @description Shared context for navigation components */ export interface NavContextValue { /** Current variant */ variant: NavVariant; /** Current size */ size: NavSize; /** Animation configuration */ animationConfig: AnimationConfig; /** Gap between items (inherited from Root) */ gap?: NavGap | number; /** Currently active item ID */ activeItemId?: string; /** Callback to set active item */ setActiveItem?: (id: string) => void; } /** * Default spring animation configuration * @constant */ export declare const DEFAULT_SPRING_CONFIG: SpringConfig; /** * Default tween animation configuration * @constant */ export declare const DEFAULT_TWEEN_CONFIG: TweenConfig; /** * Default animation configuration * @constant */ export declare const DEFAULT_ANIMATION_CONFIG: AnimationConfig; /** * Default glassmorphism configuration * @constant */ export declare const DEFAULT_GLASS_CONFIG: GlassConfig; /** * Extract the value type from an enum * @template T - Enum type */ export type EnumValue = T[keyof T]; /** * Make specific keys optional * @template T - Base type * @template K - Keys to make optional */ export type PartialBy = Omit & Partial>; //# sourceMappingURL=types.d.ts.map