/**
 * @file Lightbox.tsx
 * @input Uses React, native dialog, StyleX, IconButton, theme tokens
 * @output Exports Lightbox component, LightboxProps, LightboxMedia
 * @position Core implementation; consumed by index.ts
 *
 * SYNC: When modified, update these files to stay in sync:
 * - /packages/core/src/Lightbox/Lightbox.doc.mjs (props table, features, implementation notes)
 * - /packages/core/src/Lightbox/Lightbox.test.tsx (tests for new/changed behavior)
 * - /packages/core/src/Lightbox/index.ts (exports if types change)
 * - /apps/storybook/stories/Lightbox.stories.tsx (storybook stories)
 * - /packages/cli/assets/templates/blocks/components/Lightbox/ (showcase blocks)
 */
import { type ReactNode } from 'react';
import type { BaseProps } from '../BaseProps';
/**
 * Media type for lightbox items.
 */
export type LightboxMediaType = 'image' | 'video';
/**
 * Describes a single media item in a lightbox.
 */
export interface LightboxMedia {
    /** Media source URL */
    src: string;
    /** Alt text for accessibility (used as aria-label for video) */
    alt: string;
    /** Optional caption displayed below the media */
    caption?: ReactNode;
    /**
     * Media type. Zoom/pan is disabled for video.
     * @default 'image'
     */
    type?: LightboxMediaType;
}
export interface LightboxProps extends BaseProps<HTMLDialogElement> {
    /** Ref forwarded to the root dialog element */
    ref?: React.Ref<HTMLDialogElement>;
    /**
     * Whether the lightbox is open.
     */
    isOpen: boolean;
    /**
     * Callback when the lightbox open state changes.
     * Called with `false` on Escape, backdrop click, or close button.
     */
    onOpenChange: (isOpen: boolean) => void;
    /**
     * Media to display. Pass a single object for one item, or an array
     * for gallery mode with prev/next navigation.
     */
    media: LightboxMedia | LightboxMedia[];
    /**
     * Current index in gallery mode (when `media` is an array).
     * When provided, puts the component in controlled mode.
     */
    index?: number;
    /**
     * Initial index in gallery mode for uncontrolled usage.
     * @default 0
     */
    defaultIndex?: number;
    /**
     * Callback when the gallery index changes via prev/next navigation.
     */
    onIndexChange?: (index: number) => void;
    /**
     * Enable zoom on double-click, or Enter/Space/`+`/`-` via keyboard
     * (images only). When zoomed, drag or use arrow keys to pan.
     * @default false
     */
    hasZoom?: boolean;
    /**
     * Whether video should autoplay when the lightbox opens.
     * @default false
     */
    hasAutoPlay?: boolean;
}
/**
 * A fullscreen overlay for viewing images at full resolution.
 *
 * Supports single image and gallery modes. In gallery mode, provides
 * prev/next navigation via buttons and arrow keys. Optionally supports
 * zoom (double-click, Enter/Space on the image, or `+`/`-` to toggle 2x)
 * and pan (drag or arrow keys when zoomed; arrows navigate the gallery
 * when not zoomed).
 *
 * Uses the native `<dialog>` element with `showModal()` for focus
 * trapping and top-layer placement. Dismiss via Escape, close button,
 * or backdrop click.
 *
 * @example
 * ```
 * <Lightbox
 *   isOpen={isOpen}
 *   onOpenChange={setIsOpen}
 *   media={{src: "/photo.jpg", alt: "A photo"}}
 * />
 * <Lightbox
 *   isOpen={isOpen}
 *   onOpenChange={setIsOpen}
 *   media={photos}
 * />
 * <Lightbox
 *   isOpen={isOpen}
 *   onOpenChange={setIsOpen}
 *   media={photos}
 *   index={currentIndex}
 *   onIndexChange={setCurrentIndex}
 * />
 * ```
 */
export declare function Lightbox({ isOpen, onOpenChange, media, index: controlledIndex, defaultIndex, onIndexChange, hasZoom, hasAutoPlay, xstyle, className, style, ref, onClick: onClickProp, onKeyDown: onKeyDownProp, ...props }: LightboxProps): import("react").JSX.Element | null;
export declare namespace Lightbox {
    var displayName: string;
}
//# sourceMappingURL=Lightbox.d.ts.map