import type { ReactNode } from "react";
import type { HtmlProps } from "@/utils/types";
export type TenantSelectorTenant = {
    /** Stable row id. Should be unique across environments. */
    id: string;
    /** Customer display name. */
    customerName: string;
    /** Tenant display name. */
    tenantName: string;
    /** Tenant identifier used by consuming apps. */
    tenantId: string;
    /** Environment identifier used by consuming apps. */
    environmentId: string;
    /** Environment display label. */
    environmentLabel: string;
};
export type TenantSelectorProps = HtmlProps<"div", {
    /** Currently selected tenant. */
    selectedTenant?: TenantSelectorTenant;
    /** Tenant rows rendered in the selector table. */
    tenants: TenantSelectorTenant[];
    /** Whether tenant rows are loading. */
    loading?: boolean;
    /** Error content rendered in place of the table. */
    error?: ReactNode;
    /** Controlled search value. */
    search?: string;
    /** Initial search value for uncontrolled usage. */
    defaultSearch?: string;
    /** Callback fired whenever search changes. */
    onSearchChange?: (search: string) => void;
    /** Callback fired when a tenant row is selected. */
    onTenantSelect: (tenant: TenantSelectorTenant) => void;
    /** Controlled dialog open state. */
    open?: boolean;
    /** Initial dialog open state for uncontrolled usage. */
    defaultOpen?: boolean;
    /** Callback fired whenever dialog open state changes. */
    onOpenChange?: (open: boolean) => void;
    /** Trigger label used when no tenant is selected. */
    placeholder?: ReactNode;
    /** Dialog title. */
    title?: ReactNode;
    /** Search input placeholder. */
    searchPlaceholder?: string;
    /** Accessible label for the trigger button. */
    triggerAriaLabel?: string;
    /** Accessible label for the close button. */
    closeAriaLabel?: string;
    /** Empty state shown when there are no tenants. */
    emptyMessage?: ReactNode;
    /** Empty state shown when search filters out every tenant. */
    noResultsMessage?: ReactNode;
    /** Loading state shown while rows load. */
    loadingMessage?: ReactNode;
    /** Whether selecting a tenant closes the dialog. Defaults to true. */
    closeOnSelect?: boolean;
    /** Whether closing the dialog clears search. Defaults to true. */
    clearSearchOnClose?: boolean;
}>;
//# sourceMappingURL=TenantSelector.types.d.ts.map