import { ComponentOptionsMixin } from 'vue';
import { ComponentProvideOptions } from 'vue';
import { ComputedRef } from 'vue';
import { DefineComponent } from 'vue';
import { InjectionKey } from 'vue';
import { PublicProps } from 'vue';

declare type __VLS_WithTemplateSlots<T, S> = T & {
    new (): {
        $slots: S;
    };
};

declare const _default: __VLS_WithTemplateSlots<DefineComponent<TableProps, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<TableProps> & Readonly<{}>, {
isLoading: boolean;
density: SpacingDensities;
isEmpty: boolean;
isSelectable: boolean;
hasActions: boolean;
hasCustomExpandToggle: boolean;
isSchemaDriven: boolean;
isExpandable: boolean;
layout: Layouts;
emptyStateText: string;
radius: TableRadiuses;
stickyHeader: {
listLength: number;
maxHeight: string;
};
pinnedLeftWidth: number;
pinnedRightWidth: number;
tableMinWidth: number;
}, {}, {}, {}, string, ComponentProvideOptions, false, {
scrollContainerRef: HTMLDivElement;
tableRef: HTMLTableElement;
}, HTMLDivElement>, {
    head?(_: {}): any;
    empty?(_: {}): any;
    body?(_: {}): any;
}>;
export default _default;

declare interface Injection<T> {
    key: InjectionKey<T>;
}

export declare enum Layout {
    Scroll = "scroll",
    Stack = "stack"
}

export declare type Layouts = `${Layout}`;

declare type SpacingDensities = `${SpacingDensity}`;

/**
 * For controlling properties like "padding" and "margin" within and between components.
 */
declare enum SpacingDensity {
    Compact = "compact",
    Comfortable = "comfortable"
}

export declare const TABLE_INJECTION: Injection<TableInjection>;

/**
 * Properties and utilities provided to children of a Table instance
 */
export declare interface TableInjection {
    /**
     * Controls the Table's padding; the default value is "comfortable". On small screens, the density will always be "compact".
     */
    density: ComputedRef<SpacingDensities>;
    /**
     * Styles the last column for "row actions"
     */
    hasActions: ComputedRef<boolean>;
    /**
     * If true, hides the default expansion toggle column
     */
    hasCustomExpandToggle: ComputedRef<boolean>;
    /**
     * When true, the table is schema-driven (e.g. DataTable); selection column is rendered from the schema, not by TableRow/TableHeaderRow.
     */
    isSchemaDriven?: ComputedRef<boolean>;
    /**
     * Adds a toggle column for row expansion. This is primarily needed for ensuring the corresponding empty TableHeaderRow is included.
     */
    isExpandable: ComputedRef<boolean>;
    /**
     * Adds a checkbox column for selecting rows; intended for use with the `useSelection` composable.
     */
    isSelectable: ComputedRef<boolean>;
    /**
     * Sets the table layout; the default value is "scroll".
     */
    layout: ComputedRef<Layouts>;
    /**
     * Sets the table loading state.
     */
    isLoading: ComputedRef<boolean>;
}

export declare interface TableProps {
    /**
     * Controls the Table's padding; the default value is "comfortable". On small screens, "compact" density is applied regardless of this prop's value.
     */
    density?: SpacingDensities;
    /**
     * Sets the text for the empty state; the default value is "No Results".
     */
    emptyStateText?: string;
    /**
     * Styles the last column for "row actions"
     */
    hasActions?: boolean;
    /**
     * If true, hides the default expansion toggle column
     */
    hasCustomExpandToggle?: boolean;
    /**
     * Shows the empty state
     */
    isEmpty?: boolean;
    /**
     * When true, indicates the table is being composed by DataTable (schema-driven mode).
     * TableRow/TableHeaderRow use this to suppress their built-in selection cells.
     */
    isSchemaDriven?: boolean;
    /**
     * Shows the loading state
     */
    isLoading?: boolean;
    /**
     * Adds a toggle column for row expansion. This is primarily needed for ensuring the corresponding empty TableHeaderRow is included.
     */
    isExpandable?: boolean;
    /**
     * Adds a checkbox column for selecting rows; intended for use with the `useSelection` composable.
     */
    isSelectable?: boolean;
    /**
     * Sets the table layout; the default value is "scroll".
     */
    layout?: Layouts;
    /**
     * Controls the corners of the table with the "border-radius" CSS property. The default value is "rounded".
     */
    radius?: TableRadiuses;
    /**
     * Allows the table head to be sticky when scrolling inside the table body
     */
    stickyHeader?: {
        listLength: number;
        maxHeight: string;
    };
    /**
     * Total width (px) of left-pinned columns. Used to offset scroll overlay elements.
     */
    pinnedLeftWidth?: number;
    /**
     * Total width (px) of right-pinned columns. Used to offset scroll overlay elements.
     */
    pinnedRightWidth?: number;
    /**
     * When set, applied as min-width on the <table> element so columns don't collapse below their TanStack sizes.
     */
    tableMinWidth?: number;
}

export declare enum TableRadius {
    None = "none",
    Rounded = "rounded",
    RoundedBottom = "rounded-bottom"
}

export declare type TableRadiuses = `${TableRadius}`;

export { }
