import { Signal } from "../core/signals.js";
import { Content } from "../core/types.js";
export type StartTrigger = "on-connect" | "manual";
export type DisposeTrigger = "on-disconnect" | "manual";
export interface RvxElementOptions {
    /**
     * Shadow root options to use or false to attach content to the element directly.
     *
     * By default and when `true`, an open shadow root is attached immediately.
     */
    shadow?: boolean | ShadowRootInit;
    /**
     * When to render this element's content.
     *
     * + `on-connect` - Default. Render when this element is connected.
     * + `manual` - Render only when `.start()` is called.
     */
    start?: StartTrigger;
    /**
     * When to dispose this element's content.
     *
     * + `on-disconnect` - Default. Dispose when this element is disconnected or when `.dispose()` is called.
     * + `manual` - Dispose only when `.dispose()` is called.
     */
    dispose?: DisposeTrigger;
}
declare const moduleEnv: typeof globalThis;
export declare abstract class RvxElement extends moduleEnv.HTMLElement {
    #private;
    static observedAttributes?: string[];
    constructor(options?: RvxElementOptions);
    /**
     * Called to render the content of this element.
     *
     * @returns The content to attach to this element or the shadow root if it exists.
     */
    abstract render(): Content;
    /**
     * Get a signal that reflects an attribute value.
     *
     * + `null` represents a missing attribute.
     * + This signal is only updated if the name is part of the static `observedAttributes` array.
     * + Updating the signal value will also update or remove the attribute.
     * + This signal will be kept alive until neither this element nor the signal is referenced anymore.
     *
     * @param name The attribute name.
     * @returns The signal.
     */
    reflect(name: string): Signal<string | null>;
    /**
     * Manually initialize this element.
     *
     * This has no effect if the element is already initialized.
     */
    start(): void;
    /**
     * Manually dispose this element.
     *
     * This will leave rendered content as is.
     */
    dispose(): void;
    connectedCallback(): void;
    disconnectedCallback(): void;
    attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
}
export {};
//# sourceMappingURL=element.d.ts.map