import { ReactNode } from 'react';
export interface LassoLayerFilterEntry {
    id: string;
    label: string;
    /** Whether the mask currently clips this layer. */
    checked: boolean;
}
export interface LassoLayerFiltersChildrenProps {
    layers: LassoLayerFilterEntry[];
    /** Commit a new selection (e.g. the dialog's Apply): writes `maskLayerIds`. */
    onApply: (selectedIds: string[]) => void;
    /** True when at least one mask geometry exists (the dialog is only relevant then). */
    maskExists: boolean;
}
export interface LassoLayerFiltersProps {
    mapId: string;
    /** Extra layer ids to omit from the list (e.g. base/reference layers). */
    excludeLayerIds?: string[];
    children: (props: LassoLayerFiltersChildrenProps) => ReactNode;
}
/**
 * Render-props member (composed like {@link LassoToolsControls}) exposing the
 * map's data layers and the global per-map mask/layer selection. Drop a
 * presentational panel (e.g. `LassoLayerFiltersUI` from `@carto/ps-react-ui`)
 * inside and wire the supplied props.
 *
 * The selection is stored as `maskLayerIds` (`null` = all layers). Applying a
 * selection that covers every layer normalizes to `null`, so layers added later
 * stay masked by default.
 *
 * @example
 * ```tsx
 * <LassoTools.LayerFilters mapId="map1">
 *   {({ layers, onApply, maskExists }) => (
 *     <LassoLayerFiltersUI
 *       open={open}
 *       onClose={close}
 *       layers={layers}
 *       onApply={onApply}
 *     />
 *   )}
 * </LassoTools.LayerFilters>
 * ```
 */
export declare function LassoLayerFilters({ mapId, excludeLayerIds, children, }: LassoLayerFiltersProps): ReactNode;
