/** * JsModal - Ultra-optimized for true 60FPS performance * * Achieves 60FPS by following the principles from the dial menu: * 1. ALWAYS use native driver (useNativeDriver: true) * 2. Use transforms instead of layout properties (translateY instead of height) * 3. Use interpolation for all calculations (no JS thread math) * 4. Minimize PanResponder JS work (direct setValue, no state updates) * * Structure follows SRP with each function doing ONE thing only. */ import { ReactNode } from "react"; import { Animated, ViewStyle } from "react-native"; export type ModalMode = "bottomSheet" | "floating"; interface HeaderConfig { title?: string; subtitle?: string; showToggleButton?: boolean; customContent?: ReactNode; hideCloseButton?: boolean; hideMinimizeButton?: boolean; } interface CustomStyles { container?: ViewStyle; content?: ViewStyle; } /** * Modal state that can be saved and restored when minimizing/restoring */ export interface ModalState { mode: ModalMode; panelHeight?: number; floatingPosition?: { x: number; y: number; }; floatingDimensions?: { width: number; height: number; }; } interface JsModalProps { visible: boolean; onClose: () => void; children: ReactNode; header?: HeaderConfig; styles?: CustomStyles; minHeight?: number; maxHeight?: number; initialHeight?: number; animatedHeight?: Animated.Value; initialMode?: ModalMode; onModeChange?: (mode: ModalMode) => void; persistenceKey?: string; enablePersistence?: boolean; enableGlitchEffects?: boolean; initialFloatingPosition?: { x?: number; y?: number; }; footer?: ReactNode; footerHeight?: number; onBack?: () => void; /** Callback when minimize is requested - receives current modal state for restoration */ onMinimize?: (modalState: ModalState) => void; /** Target position for minimize animation (where the icon will appear) */ minimizeTargetPosition?: { x: number; y: number; }; /** Initial modal state to restore from (when restoring from minimized) */ initialModalState?: ModalState; /** z-index for stacking multiple modals (higher = on top) */ zIndex?: number; } export declare const JsModal: import("react").NamedExoticComponent; export {}; //# sourceMappingURL=JsModal.d.ts.map