import { Alignment, AnyColumns, CellRenderer, ClassNameGetter, Column, FixedDirection, HeaderCellRenderer, HeaderClassGetter, KeyType } from "../types.js";
import { TableV2Props } from "../table.js";
import * as vue from "vue";
import { CSSProperties, Ref } from "vue";

//#region ../../packages/components/table-v2/src/composables/use-columns.d.ts
declare function useColumns(props: TableV2Props, columns: Ref<AnyColumns>, fixed: Ref<boolean>): {
  columns: vue.ComputedRef<{
    key: KeyType;
    align?: Alignment;
    class?: string | ClassNameGetter<any> | undefined;
    dataKey?: KeyType;
    fixed?: true | FixedDirection;
    flexGrow?: CSSProperties["flexGrow"];
    flexShrink?: CSSProperties["flexShrink"];
    title?: string;
    hidden?: boolean;
    headerClass?: string | HeaderClassGetter<any> | undefined;
    maxWidth?: number;
    minWidth?: number;
    style?: CSSProperties;
    sortable?: boolean;
    width: number;
    cellRenderer?: CellRenderer<any> | undefined;
    headerCellRenderer?: HeaderCellRenderer<any> | undefined;
  }[]>;
  columnsStyles: vue.ComputedRef<Record<KeyType, CSSProperties>>;
  columnsTotalWidth: vue.ComputedRef<number>;
  fixedColumnsOnLeft: vue.ComputedRef<{
    key: KeyType;
    align?: Alignment;
    class?: string | ClassNameGetter<any> | undefined;
    dataKey?: KeyType;
    fixed?: true | FixedDirection;
    flexGrow?: CSSProperties["flexGrow"];
    flexShrink?: CSSProperties["flexShrink"];
    title?: string;
    hidden?: boolean;
    headerClass?: string | HeaderClassGetter<any> | undefined;
    maxWidth?: number;
    minWidth?: number;
    style?: CSSProperties;
    sortable?: boolean;
    width: number;
    cellRenderer?: CellRenderer<any> | undefined;
    headerCellRenderer?: HeaderCellRenderer<any> | undefined;
  }[]>;
  fixedColumnsOnRight: vue.ComputedRef<{
    key: KeyType;
    align?: Alignment;
    class?: string | ClassNameGetter<any> | undefined;
    dataKey?: KeyType;
    fixed?: true | FixedDirection;
    flexGrow?: CSSProperties["flexGrow"];
    flexShrink?: CSSProperties["flexShrink"];
    title?: string;
    hidden?: boolean;
    headerClass?: string | HeaderClassGetter<any> | undefined;
    maxWidth?: number;
    minWidth?: number;
    style?: CSSProperties;
    sortable?: boolean;
    width: number;
    cellRenderer?: CellRenderer<any> | undefined;
    headerCellRenderer?: HeaderCellRenderer<any> | undefined;
  }[]>;
  hasFixedColumns: vue.ComputedRef<number>;
  mainColumns: vue.ComputedRef<AnyColumns>;
  normalColumns: vue.ComputedRef<{
    key: KeyType;
    align?: Alignment;
    class?: string | ClassNameGetter<any> | undefined;
    dataKey?: KeyType;
    fixed?: true | FixedDirection;
    flexGrow?: CSSProperties["flexGrow"];
    flexShrink?: CSSProperties["flexShrink"];
    title?: string;
    hidden?: boolean;
    headerClass?: string | HeaderClassGetter<any> | undefined;
    maxWidth?: number;
    minWidth?: number;
    style?: CSSProperties;
    sortable?: boolean;
    width: number;
    cellRenderer?: CellRenderer<any> | undefined;
    headerCellRenderer?: HeaderCellRenderer<any> | undefined;
  }[]>;
  visibleColumns: vue.ComputedRef<{
    key: KeyType;
    align?: Alignment;
    class?: string | ClassNameGetter<any> | undefined;
    dataKey?: KeyType;
    fixed?: true | FixedDirection;
    flexGrow?: CSSProperties["flexGrow"];
    flexShrink?: CSSProperties["flexShrink"];
    title?: string;
    hidden?: boolean;
    headerClass?: string | HeaderClassGetter<any> | undefined;
    maxWidth?: number;
    minWidth?: number;
    style?: CSSProperties;
    sortable?: boolean;
    width: number;
    cellRenderer?: CellRenderer<any> | undefined;
    headerCellRenderer?: HeaderCellRenderer<any> | undefined;
  }[]>;
  getColumn: (key: KeyType) => {
    key: KeyType;
    align?: Alignment;
    class?: string | ClassNameGetter<any> | undefined;
    dataKey?: KeyType;
    fixed?: true | FixedDirection;
    flexGrow?: CSSProperties["flexGrow"];
    flexShrink?: CSSProperties["flexShrink"];
    title?: string;
    hidden?: boolean;
    headerClass?: string | HeaderClassGetter<any> | undefined;
    maxWidth?: number;
    minWidth?: number;
    style?: CSSProperties;
    sortable?: boolean;
    width: number;
    cellRenderer?: CellRenderer<any> | undefined;
    headerCellRenderer?: HeaderCellRenderer<any> | undefined;
  } | undefined;
  getColumnStyle: (key: KeyType) => CSSProperties;
  updateColumnWidth: (column: Column<any>, width: number) => void;
  onColumnSorted: (e: MouseEvent) => void;
};
type UseColumnsReturn = ReturnType<typeof useColumns>;
//#endregion
export { UseColumnsReturn, useColumns };