import { default as CxButton } from '../../../atoms/src/components/button/button.ts';
import { default as CxDialog } from '../../../atoms/src/components/dialog/dialog.ts';
import { default as CxIcon } from '../../../atoms/src/components/icon/icon.ts';
import { default as CxTooltip } from '../../../atoms/src/components/tooltip/tooltip.ts';
import { default as CortexElement } from '../../../base/src/cortex-element.ts';
import { default as CxCarousel } from '../carousel/carousel.ts';
import { GalleryItem } from '../../../types/src/gallery-item';
import { TemplateResult } from 'lit';

/**
 * @summary A fullscreen lightbox that wraps a dialog and carousel for browsing gallery items.
 * Supports download, keyboard/click-to-close, and lazy loading via chunk-based data fetching.
 *
 * @csspart base - The outer lightbox wrapper inside the dialog body.
 * @csspart toolbar - The top-right action toolbar.
 * @csspart counter - The slide counter label.
 *
 * @event cx-lightbox-close - Emitted when the lightbox is closed. Detail: `{ index: number }`
 * @event cx-lightbox-download - Emitted when the download button is clicked. Detail: `{ index: number; item: GalleryItem }`
 * @event cx-slide-change - Re-emitted from the internal carousel when the active slide changes.
 * @event cx-gallery-chunk-request - Re-emitted from the internal carousel when more data is needed.
 */
export default class CxLightbox extends CortexElement {
    static readonly styles: import('lit').CSSResult[];
    static readonly dependencies: {
        'cx-button': typeof CxButton;
        'cx-carousel': typeof CxCarousel;
        'cx-dialog': typeof CxDialog;
        'cx-icon': typeof CxIcon;
        'cx-tooltip': typeof CxTooltip;
    };
    private readonly localize;
    private readonly carouselEl?;
    /**
     * Controls visibility of the lightbox.
     */
    open: boolean;
    /**
     * Array of slide items to display.
     */
    data: GalleryItem[];
    /**
     * Total number of items (used for the counter and carousel chunking).
     */
    totalData: number;
    /**
     * Loaded data range passed through to the carousel for lazy loading.
     */
    chunk: [number, number];
    /**
     * The slide index to jump to when the lightbox opens.
     */
    startIndex: number;
    /**
     * Whether the carousel loops back to the start after the last slide.
     */
    loop: boolean;
    /**
     * Show the download button in the toolbar.
     */
    canDownload: boolean;
    /**
     * Current active slide index, synced from internal carousel.
     */
    private activeIndex;
    mappedData: GalleryItem[];
    handleOpenChange(): Promise<void>;
    handleDataChange(): void;
    private handleRequestClose;
    private handleSlideChange;
    private handleDownload;
    private renderToolbar;
    render(): TemplateResult;
}
declare global {
    interface HTMLElementTagNameMap {
        'cx-lightbox': CxLightbox;
    }
}
