import "@ribajs/types";
import { EventHandler, ObservedAttributesToCheck, TemplateFunction, ObserverSyncCallback } from "../types/index.js";
import type { JsxElement } from "@ribajs/jsx";
import { Observer } from "../observer.js";
export declare abstract class BasicComponent extends HTMLElement {
    static tagName: string;
    _debug: boolean;
    _color?: string;
    protected templateLoaded: boolean;
    protected observedAttributesToCheck: ObservedAttributesToCheck;
    protected observedAttributes: string[];
    abstract scope: any;
    constructor();
    remove(): void;
    protected abstract template(): ReturnType<TemplateFunction>;
    protected _log(mode: "debug" | "info" | "log" | "error", ...args: unknown[]): void;
    protected info(...args: unknown[]): void;
    protected debug(...args: unknown[]): void;
    protected error(...args: unknown[]): void;
    protected requiredAttributes(): string[];
    protected init(observedAttributes: string[]): Promise<void>;
    protected ready(): boolean;
    protected attributeIsPassed(observedAttribute: string): boolean;
    protected getPassedObservedAttributes(observedAttributes: string[]): void;
    protected allPassedObservedAttributesAreInitialized(): boolean;
    protected checkRequiredAttributes(): boolean;
    protected parseAttribute(attr: string | null): any;
    protected eventHandler(self: BasicComponent): EventHandler;
    protected connectedCallback(): void;
    protected disconnectedCallback(): void;
    protected attributeChangedCallback(attributeName: string, oldValue: any, newValue: any, namespace: string | null): Promise<void>;
    protected parsedAttributeChangedCallback(attributeName: string, oldValue: any, newValue: any, namespace: string | null): void;
    protected adoptedCallback(oldDocument: Document, newDocument: Document): void;
    protected loadTemplate(): Promise<JsxElement | HTMLElement | string | null>;
    protected beforeTemplate(): Promise<any>;
    protected afterTemplate(template: JsxElement | HTMLElement | string | null): Promise<any>;
    protected onReady(): Promise<any>;
    observe(keypath: string, callback: ObserverSyncCallback): Observer;
    observeAttribute(attributeName: string, callback: ObserverSyncCallback): Observer;
    setBinderAttribute(attributeName: string, newValue: any, namespace?: string | null): void;
    getBinderAttribute(attributeName: string): any;
    protected loadAttributes(observedAttributes: string[]): void;
}
