media-query-debugger
Version:
Advanced responsive debugger and responsive design testing tool with device mockups, media query monitoring, and debugging features for React applications
134 lines (123 loc) • 4.12 kB
TypeScript
import * as React from 'react';
import React__default, { Component, ReactNode } from 'react';
import { ClassValue } from 'clsx';
interface Device {
name: string;
width: number;
height: number;
category: "mobile" | "tablet" | "desktop";
pixelRatio: number;
userAgent: string;
}
interface ResponsiveConfig {
[key: string]: number;
}
interface ViewportInfo {
width: number;
height: number;
aspectRatio: number;
devicePixelRatio: number;
orientation: "portrait" | "landscape";
}
interface ResponsiveDebuggerProps {
/**
* Custom breakpoint configuration
* @default { sm: 640, md: 768, lg: 1024, xl: 1280, '2xl': 1536 }
*/
breakpoints?: ResponsiveConfig;
/**
* Custom device presets
*/
devices?: Device[];
/**
* Initial position of the debugger
* @default 'bottom-right'
*/
position?: "top-left" | "top-right" | "bottom-left" | "bottom-right";
/**
* Theme configuration
* @default 'dark'
*/
theme?: "light" | "dark" | "auto";
/**
* Whether to show the debugger by default
* @default false
*/
defaultOpen?: boolean;
/**
* Custom CSS class name
*/
className?: string;
/**
* Custom styles
*/
style?: React__default.CSSProperties;
/**
* Callback when breakpoint changes
*/
onBreakpointChange?: (breakpoint: string) => void;
/**
* Callback when viewport changes
*/
onViewportChange?: (viewport: ViewportInfo) => void;
/**
* Whether to enable keyboard shortcuts
* @default true
*/
enableKeyboardShortcuts?: boolean;
/**
* Custom keyboard shortcuts
*/
keyboardShortcuts?: {
toggle?: string;
close?: string;
};
}
interface DeviceMockupProps {
device: Device;
scale?: number;
isRotated?: boolean;
url?: string;
onClose?: () => void;
onScaleChange?: (scale: number) => void;
onRotate?: (isRotated: boolean) => void;
className?: string;
style?: React__default.CSSProperties;
}
interface MediaQueryHookOptions {
defaultMatches?: boolean;
matchMedia?: (query: string) => MediaQueryList;
}
interface BreakpointHookOptions {
breakpoints?: ResponsiveConfig;
defaultBreakpoint?: string;
}
declare function ResponsiveDebugger({ breakpoints, devices, position, theme, defaultOpen, className, style, onBreakpointChange, onViewportChange, enableKeyboardShortcuts, keyboardShortcuts, }: ResponsiveDebuggerProps): React.JSX.Element;
declare function DeviceMockup({ device, scale, isRotated, url, onClose, onScaleChange, onRotate, className, style, }: DeviceMockupProps): React.JSX.Element;
interface ErrorBoundaryState {
hasError: boolean;
error?: Error;
}
interface ErrorBoundaryProps {
children: ReactNode;
fallback?: ReactNode;
onError?: (error: Error, errorInfo: React__default.ErrorInfo) => void;
}
declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
constructor(props: ErrorBoundaryProps);
static getDerivedStateFromError(error: Error): ErrorBoundaryState;
componentDidCatch(error: Error, errorInfo: React__default.ErrorInfo): void;
render(): string | number | boolean | React__default.JSX.Element | Iterable<React__default.ReactNode> | null | undefined;
}
declare function useMediaQuery(query: string, options?: MediaQueryHookOptions): boolean;
declare function useViewport(): ViewportInfo;
declare function useBreakpoint(options?: BreakpointHookOptions): {
current: string;
breakpoints: Record<string, boolean>;
isAbove: (breakpoint: string) => boolean;
isBelow: (breakpoint: string) => boolean;
};
declare const DEFAULT_BREAKPOINTS: ResponsiveConfig;
declare const DEFAULT_DEVICES: Device[];
declare function cn(...inputs: ClassValue[]): string;
export { DEFAULT_BREAKPOINTS, DEFAULT_DEVICES, type Device, DeviceMockup, type DeviceMockupProps, ErrorBoundary, type ResponsiveConfig, ResponsiveDebugger, type ResponsiveDebuggerProps, type ViewportInfo, cn, useBreakpoint, useMediaQuery, useViewport };