import { VegaSlimmer } from '../../vega-slimmer/vega-slimmer-core';
declare type GetContainerRef = () => HTMLElement | undefined;
/**
 * Projects a light-DOM slot element into a container that lives inside a `vega-popover`'s `popover` slot.
 *
 * Why this slimmer exists:
 * `vega-popover` appends its `popover` slot content to a different shadow root (the appender), which breaks
 * normal slot projection for any extra slots declared inside that popover content. To support customization
 * via additional slots (e.g. a left-side panel), the host component must imperatively move the slot element
 * into the rendered container on every render, and observe DOM mutations to keep the projection in sync when
 * consumers add, replace, or remove the slot at runtime.
 *
 * Usage:
 * 1. Inject this slimmer into the component with the slot name and a getter returning the container ref.
 * 2. Call `hasSlot()` in the renderer to conditionally render the container wrapper.
 *
 * Lifecycle:
 * - `componentWillLoad`: capture the current slot element and set up observers.
 * - `componentDidRender`: append the slot element into the container when needed.
 * - `disconnectedCallback`: disconnect observers.
 */
export declare class PopoverNestedSlotProjectionSlimmer extends VegaSlimmer {
  protected host: HTMLElement;
  private slotName;
  private getContainerRef;
  private slotElement;
  private hostMutationObserver;
  private containerMutationObserver;
  constructor(slotName: string, getContainerRef: GetContainerRef);
  /**
   * Returns whether the host currently has a matching slot element.
   *
   * @returns {boolean} True if a slot element is present.
   */
  hasSlot(): boolean;
  /**
   * Captures the current slot element from the host's light DOM and initializes the mutation observers
   * that keep the projection in sync with runtime changes.
   */
  detectSlot(): void;
  /**
   * Appends the slot element into the container after each render. The popover moves its `popover` slot
   * content into a different shadow root, so normal slot projection cannot keep the nested slot attached.
   */
  appendSlotContent(): void;
  /**
   * Disconnects the mutation observers when the component is removed from the DOM.
   */
  cleanup(): void;
  /**
   * Builds the CSS selector for the configured slot name.
   *
   * @returns {string} The attribute selector string.
   */
  private slotSelector;
  /**
   * Syncs the stored slot reference with dynamic light-DOM additions or replacements.
   */
  private syncSlotElementFromHost;
  /**
   * Syncs the stored slot reference when the appended slot element is removed from the container.
   */
  private syncRemovedSlotElement;
}
export {};
