import * as react_jsx_runtime from 'react/jsx-runtime';
import * as react from 'react';
import { Component, ReactNode, ErrorInfo, CSSProperties } from 'react';

interface AmigaFallbackRenderProps {
    error: Error;
    errorInfo: ErrorInfo | null;
    resetErrorBoundary: () => void;
}
type AmigaPortalTarget = boolean | string | HTMLElement;
interface AmigaErrorBoundaryProps {
    children?: ReactNode;
    /** Render-prop fallback. Takes priority over `fallback`. */
    fallbackRender?: (props: AmigaFallbackRenderProps) => ReactNode;
    /** Static fallback ReactNode rendered when an error is caught. */
    fallback?: ReactNode;
    /** Called when an error is caught. Useful for logging or error reporting. */
    onError?: (error: Error, errorInfo: ErrorInfo) => void;
    /** Called when the boundary is reset (imperatively or via resetKeys change). */
    onReset?: (details: {
        reason: "imperative" | "keys";
    }) => void;
    /** When any value in this array changes (shallow equality), the boundary auto-resets. */
    resetKeys?: ReadonlyArray<unknown>;
    /** Force the error UI to render even without a real error. Useful for showcase/preview. */
    show?: boolean;
    /** A pre-built error to display when `show` is true (or to override the caught one). */
    error?: Error;
    /**
     * Render the error UI through a React portal at the document level (Amiga-style takeover).
     *  - `false` (default): render inline where the boundary is mounted.
     *  - `true`: render in a portal under a div appended to `document.body`.
     *  - `string`: id of the portal container element (created if missing).
     *  - `HTMLElement`: explicit portal target.
     */
    portal?: AmigaPortalTarget;
    /** Title text. Default: "Software Failure. Press left mouse button to continue." */
    title?: ReactNode;
    /** Override the message line. Receives the caught error. Default: "Guru Meditation: {error.message}". */
    formatGuru?: (error: Error) => ReactNode;
    /** Show collapsible details with the component stack. Default: true. */
    showDetails?: boolean;
    /** Disable the blink animation. Default: false. */
    noBlink?: boolean;
    /** Extra class name applied to the root element. */
    className?: string;
    /** Inline styles applied to the root element. Useful to set CSS variables. */
    style?: CSSProperties;
}
interface State {
    error: Error | null;
    errorInfo: ErrorInfo | null;
}
declare class AmigaErrorBoundary extends Component<AmigaErrorBoundaryProps, State> {
    static displayName: string;
    state: State;
    static getDerivedStateFromError(error: Error): Partial<State>;
    componentDidCatch(error: Error, errorInfo: ErrorInfo): void;
    componentDidUpdate(prevProps: AmigaErrorBoundaryProps): void;
    resetErrorBoundary: () => void;
    private resetWithReason;
    render(): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | react_jsx_runtime.JSX.Element | null | undefined;
}
/**
 * Imperatively trigger an Amiga Guru Meditation from a function component.
 * Returns a callback that re-throws the given error during render so the
 * nearest <AmigaErrorBoundary> can catch it.
 */
declare function useAmigaGuru(): (error: unknown) => void;

export { AmigaErrorBoundary, type AmigaErrorBoundaryProps, type AmigaFallbackRenderProps, type AmigaPortalTarget, AmigaErrorBoundary as GuruMeditation, useAmigaGuru };
