import * as react_jsx_runtime from 'react/jsx-runtime';
import { SortingState, PaginationState, RowSelectionState, ExpandedState, ColumnPinningState, ColumnDef, Row, Table, ColumnOrderState, Header } from '@tanstack/react-table';
import React$1, { Dispatch, SetStateAction } from 'react';
import { ButtonProps } from '@mui/material';

interface onFilterChangeFunctionProps {
    updatedFilters?: any;
    filterMaster?: any;
    filters?: any;
}

interface OperationProps {
    label: string;
    value: string;
}
type OperationMapProps = {
    [key in FilterInputDataTypes]?: OperationProps[];
};
interface FilterOperationListProps {
    code: string;
    label: string;
    value: string;
    is_shared: boolean;
    is_editable: boolean;
    is_owner: boolean;
    created_by: string;
    description: string | null;
}
interface FilterSharedListProps {
    created_date: string;
    entity_type: string;
    id: string;
    name: string;
    status: string;
    parent_type: string | null;
    parent_id: string | number | null;
    code: string;
    created_by: string;
    modified_by: string | null;
    modified_date: string | null;
    enterprise_id: number;
    organization_id: number;
    appcode: string | null;
    level_id: string;
    level_type: string;
    mapped_entity_type: string;
    user_id: number;
    is_default: boolean;
    filter_scope: string;
    is_shared: boolean;
    is_editable: boolean | string;
    description: string | null;
}
type FilterInputDataTypes = "text" | "select" | "multiselect" | "date" | "year" | "number" | "label";
interface FilterColumnsListProps {
    created_date: string | null;
    entity_type: string;
    id: string;
    name: string;
    status: string | null;
    parent_type: string;
    parent_id: string;
    code: string | null;
    created_by: string | null;
    modified_by: string | null;
    modified_date: string | null;
    enterprise_id: string | null;
    organization_id: string | null;
    app_code: string | null;
    mapped_entity_type: string;
    menu_code: string | null;
    table_name: string | null;
    col_position: number;
    sortable: string | null;
    searchable: string | null;
    attribute_key: string;
    sort_type: string | null;
    element_type: FilterInputDataTypes;
    data_source_type: string | null;
    datasource_list: any | null;
    visible: string;
}
interface FilterColumnsDataProps {
    column_list: FilterColumnsListProps[];
    operation_list: OperationMapProps;
    saved_filter: FilterOperationListProps[];
    shared_filter: FilterOperationListProps[];
}
interface FilterDropdownDataProps {
    [key: string]: FilterOperationListProps[];
}
interface FilterComponentOptionsMainFilterOptions {
    showSaveButton?: boolean;
    showClearAllButton?: boolean;
    customButtons?: Array<{
        label: string;
        onClick: () => void;
    } & Partial<ButtonProps>>;
}
interface FilterComponentOptionsSavedFilterOptions {
    showBackButton?: boolean;
    editMode?: boolean;
}
type ButtonConfig = {
    primary: string;
    secondary: string;
};
type ModalConfig = {
    title?: string;
    description?: string;
    button?: ButtonConfig;
    isInputField?: boolean;
};
type RecordFilterComponentProps = {
    save: ModalConfig;
    edit: ModalConfig;
    delete: ModalConfig;
};
type TabType = "main" | "saved" | "attributes";
interface FilterComponentTabOptions {
    mainFilter?: FilterComponentOptionsMainFilterOptions;
    savedFilter?: FilterComponentOptionsSavedFilterOptions;
    isSingleFilter?: boolean;
    isSingleEntity?: boolean;
    showFilter?: TabType;
    disableShareFilter?: boolean;
}
type FilterComponentOptions = {
    showTabs?: true;
    showMainHeader?: boolean;
    mainHeaderTitle?: string;
    showMainFilter?: boolean;
    showSavedFilter?: boolean;
    showAttributesFilter?: boolean;
    isRuleEngine?: boolean;
    tabOptions?: FilterComponentTabOptions;
    recordFilterComponentProps?: RecordFilterComponentProps;
} | {
    showTabs?: false;
    showMainHeader?: boolean;
    mainHeaderTitle?: string;
    isRuleEngine?: boolean;
    tabOptions?: FilterComponentTabOptions;
    recordFilterComponentProps?: RecordFilterComponentProps;
};
interface FilterDrawerProps {
    tableStates: CraftTableOptionsProps;
    open?: boolean;
    onClose?: () => void;
    onDeleteFilter?: () => void;
    onSaveFilter?: (name: string) => void;
    onUpdateFilter?: (name: string) => void;
    columnsData: FilterColumnsDataProps;
    dropdownData: FilterDropdownDataProps;
    defaultFilters?: Array<{
        filter_attribute: string;
        filter_operator: string;
        filter_value: string;
    }>;
    savedFilters?: Array<{
        label: string;
        value: string;
    }>;
    tableData?: {
        entity_list: any[];
    };
    onChangeFunction: ({ updatedFilters, filterMaster, }: onFilterChangeFunctionProps) => void;
    filterComponentOptions?: FilterComponentOptions;
    isFlatJson: boolean;
}
interface FilterCriteria {
    columnId: string;
    value: string | string[];
    type: FilterInputDataTypes | undefined;
    operator?: string | null;
    dropdown?: {
        label?: string;
        value?: string;
    };
    optionList?: {
        label?: string | undefined;
        value?: string | undefined;
    };
    attribute_key?: string | undefined;
    name: string | undefined;
}
interface FilterStateProps {
    filter_attribute: string;
    filter_operator: string;
    filter_value: string | string[];
    filter_attribute_name: string | undefined;
    filter_attribute_data_type: FilterInputDataTypes | undefined;
    attribute_key?: string;
    dropdown_list?: {
        label?: string;
        value?: string;
    }[];
    optionList?: {
        label?: string | undefined;
        value?: string | undefined;
    };
    filter_entity_type?: string;
    filter_entity_name?: string;
    datasource_list?: string | null;
}
interface OperationOption {
    label: string;
    value: string;
}
interface OperationList {
    text: OperationOption[];
    number: OperationOption[];
    date: OperationOption[];
    select: OperationOption[];
    multiselect: OperationOption[];
    year: OperationOption[];
}
interface createSavedFilterPayload {
    name: string;
    organization_id?: number;
    enterprise_id?: number;
    user_id?: number;
    is_default: boolean;
    description: string | null;
    mapped_entity_type: string;
    status?: string;
    entity_type: string;
    filterDetails: FilterStateProps[];
}
interface deleteSavedFilterPayload {
    name: string;
    is_default: boolean;
    id: string | number;
    status?: string;
    entity_type: string;
    mapped_entity_type: string;
}
interface updateSavedFilterPayload {
    name: string;
    is_default: boolean;
    id: string | number;
    status?: string;
    entity_type: string;
    mapped_entity_type: string;
    filterDetails: FilterStateProps[];
}
interface FilterFormComponentProps {
    columnsData: FilterColumnsDataProps;
    saved_filter?: any;
    shared_filter?: any;
    dropdownData: FilterDropdownDataProps;
    tableStates: CraftTableOptionsProps;
    editMode?: boolean;
    setEditMode?: React.Dispatch<React.SetStateAction<boolean>>;
    setDeleteFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;
    onSaveFilterButtonClick?: () => void;
    tabValue?: number;
    onChangeFunction: ({ updatedFilters, filterMaster, }: onFilterChangeFunctionProps) => void;
    filterComponentOptions?: FilterComponentOptions;
    isFlatJson: boolean;
}
interface SavedFilterSharingPreference {
    shareWithTeam?: boolean;
    allowTeamEdit?: boolean;
}
interface FilterMasterStateProps {
    attributes: {
        selected: string;
        radio: string[];
    };
    saved_filters: {
        selectedId: string;
        selectedName: string;
        selectedCode?: string;
        description?: string;
        is_shared?: boolean;
        is_editable?: boolean;
        is_owner?: boolean;
    };
    activeFilterTabIndex: number;
    shared_filters_meta?: Record<string, SavedFilterSharingPreference>;
}
interface AttributesFilterProps {
    columnsData: FilterColumnsDataProps;
    tableStates: CraftTableOptionsProps;
    dropdownData: FilterDropdownDataProps;
    searchTerm: string;
    setSearchTerm: React.Dispatch<React.SetStateAction<string>>;
    tabValue?: number;
    onChangeFunction: ({ updatedFilters, filterMaster, }: onFilterChangeFunctionProps) => void;
    isFlatJson: boolean;
}
interface AttributesFilterSelectProps {
    columnsData: FilterColumnsDataProps;
    tableStates: CraftTableOptionsProps;
    dropdownData: FilterDropdownDataProps;
    searchTerm: string;
    setSearchTerm: React.Dispatch<React.SetStateAction<string>>;
    tabValue?: number;
}
interface viewSettingsPayload {
    column: string;
    sort_by: string;
}
interface FilterDataMainFilterEntityListProps {
    value: string;
    id: string | number;
    label: string;
}
interface FilterDataMainFilterEntityWiseCriteriaProps {
    id: string;
    name: string;
    attribute_key: string;
    element_type: FilterInputDataTypes;
    datasource_list: any;
    element_type: FilterInputDataTypes;
}
interface FilterDataProps {
    mainFilter?: {
        entityList?: {
            data?: FilterDataMainFilterEntityListProps[];
            isPending?: boolean;
        };
        entityWiseCriteria?: {
            data?: FilterDataMainFilterEntityWiseCriteriaProps[];
            isPending?: boolean;
        };
    };
}

interface QuickFilterModalProps {
    view?: string;
    isFlatJson: boolean;
    show?: boolean;
    filterSettingStates: craftTableFilterSettingsOptionsProps;
    onClose?: () => void;
    columnsData: FilterColumnsDataProps;
    columnsDataLoading?: boolean;
    quickTabAttributes?: any[];
    quickTabAttributesLoading?: boolean;
    columnTabAttributes?: any[];
    columnTabAttributesLoading?: boolean;
    sortingTabAttributes?: any[];
    sortingTabAttributesLoading?: boolean;
    tabsApiData?: {
        label: string;
        value: string;
    }[];
    tabsApiDataLoading?: boolean;
    onSaveSettingsData?: (data: any) => void;
    activeTab?: string;
    selectAttributeData?: {
        label: string;
        value: string;
    }[];
    selectSwinLandData?: {
        label: string;
        value: string;
    }[];
    laneHideListData?: {
        label: string;
        value: string;
    }[];
    swimLaneHideListData?: {
        label: string;
        value: string;
    }[];
    onSaveKanbanSettingsData?: (data: KanbanSettingsDataProps) => void;
}
type SortingType = "asc" | "desc";
type QuickTabSortingType = "asc" | "dsc" | "count_asc" | "count_dsc" | "custom";
type KanbanSortingType = "asc" | "dsc" | "count_asc" | "count_dsc" | "custom" | "sort_by" | null;
interface QuickTabConfigProps {
    attribute?: string;
    sorting?: QuickTabSortingType;
    hide_list?: {
        label: string;
        value: string;
    }[];
    show_list?: {
        label: string;
        value: string;
    }[];
    isAllSelected?: boolean;
    isCombineOther?: boolean;
}
interface LaneTabConfigProps {
    attribute?: string;
    sorting?: KanbanSortingType;
    hide_list?: {
        label: string;
        value: string;
    }[];
    show_list?: {
        label: string;
        value: string;
    }[];
    isSubLane?: boolean;
}
interface SwimLameTabConfigProps {
    attribute?: string;
    sorting?: KanbanSortingType;
    hide_list?: {
        label: string;
        value: string;
    }[];
    show_list?: {
        label: string;
        value: string;
    }[];
}
interface ColumnItem {
    label: string;
    value: string;
}
interface ColumnTab {
    tab_name: {
        label: string;
        value: string;
    };
    show_list: ColumnItem[];
    hide_list: ColumnItem[];
}
interface SortingConfigSortByProps {
    column: string;
    order: SortingType;
}
interface SortingConfigTabProps {
    tab_name: {
        label: string;
        value: string;
    };
    sortby: SortingConfigSortByProps[];
}
interface SortingConfigProps {
    isDefault?: boolean;
    sortby?: SortingConfigSortByProps[];
    tabs?: SortingConfigTabProps[];
}
interface ColumnTabConfigProps {
    isDefault?: boolean;
    show_list?: ColumnItem[];
    hide_list?: ColumnItem[];
    tabs?: ColumnTab[];
}
interface SettingsDataProps {
    isDefault?: boolean;
    show_list?: ColumnItem[];
    hide_list?: ColumnItem[];
    tabs?: ColumnTab[];
    quick_tab?: QuickTabConfigProps;
    column?: ColumnTabConfigProps;
    sorting?: SortingConfigProps;
}
interface KanbanSettingsDataProps {
    lane?: LaneTabConfigProps;
    swim_lane?: SwimLameTabConfigProps;
}
interface SavedButtonErrorProps {
    hasError: boolean;
    messages: {
        type: string;
        message: string;
    }[];
}

interface CraftTableOptionsProps {
    sorting: SortingState;
    setSorting: Dispatch<SetStateAction<SortingState>>;
    pagination: PaginationState;
    setPagination: Dispatch<SetStateAction<PaginationState>>;
    rowSelection: RowSelectionState;
    setRowSelection: Dispatch<SetStateAction<RowSelectionState>>;
    isCompactTable?: boolean;
    setIsCompactTable?: Dispatch<SetStateAction<boolean>>;
    expanded: ExpandedState;
    setExpanded: Dispatch<SetStateAction<ExpandedState>>;
    wrapColumns: Record<string, boolean>;
    setWrapColumns: Dispatch<SetStateAction<Record<string, boolean>>>;
    filters: FilterStateProps[];
    setFilters: Dispatch<SetStateAction<FilterStateProps[]>>;
    savedFilterEditValue: string | number;
    setSavedFilterEditValue: Dispatch<SetStateAction<string | number>>;
    filterToDelete: FilterOperationListProps | null;
    setFilterToDelete: Dispatch<SetStateAction<FilterOperationListProps | null>>;
    filterSelectedAttributeValue: string;
    setFilterSelectedAttributeValue: Dispatch<SetStateAction<string>>;
    filterMaster: FilterMasterStateProps | null;
    setFilterMaster: Dispatch<SetStateAction<FilterMasterStateProps | null>>;
    showTableFilter: boolean;
    setShowTableFilter: Dispatch<SetStateAction<boolean>>;
    showFilterOptions: boolean;
    setShowFilterOption: Dispatch<SetStateAction<boolean>>;
    columnPinning: ColumnPinningState;
    setColumnPinning: Dispatch<SetStateAction<ColumnPinningState>>;
    filterData: FilterDataProps | null;
    setFilterData: Dispatch<SetStateAction<FilterDataProps | null>>;
    selectedFilterEntity: FilterDataMainFilterEntityListProps | undefined;
    setSelectedFilterEntity: Dispatch<SetStateAction<FilterDataMainFilterEntityListProps | undefined>>;
}
interface craftTableFilterSettingsOptionsProps {
    settingsData: SettingsDataProps;
    setSettingsData: Dispatch<SetStateAction<SettingsDataProps>>;
    kanbanSettingsData: KanbanSettingsDataProps;
    setKanbanSettingsData: Dispatch<SetStateAction<KanbanSettingsDataProps>>;
    showListViewSettings: boolean;
    setShowListViewSettings: Dispatch<SetStateAction<boolean>>;
    quickTabStates: QuickTabConfigProps;
    setQuickTabStates: Dispatch<SetStateAction<QuickTabConfigProps>>;
    columnTabState: ColumnTabConfigProps;
    setColumnTabState: Dispatch<SetStateAction<ColumnTabConfigProps>>;
    sortingTabState: SortingConfigProps;
    setSortingTabState: Dispatch<SetStateAction<SortingConfigProps>>;
    saveButtonError: SavedButtonErrorProps;
    setSaveButtonError: Dispatch<SetStateAction<SavedButtonErrorProps>>;
}
interface CraftTableFeatureProps {
    enableSorting?: boolean;
    enableServerSidePagination?: boolean;
    enableServerSideSorting?: boolean;
    enableRowSelection?: boolean;
    enableColumnResizing?: boolean;
    enableColumnReordering?: boolean;
    enableColumnPinning?: boolean;
    enableMultiColumnSorting?: boolean;
    enableTopbar?: boolean;
    enableWordBreakAll?: boolean;
    stickyHeader?: boolean;
    compactTable?: boolean;
    striped?: boolean;
}

interface CraftTablePaginationProps {
    totalRows?: number;
    rowsPerPageArray?: number[];
    showPagination?: boolean;
    paginationPosition?: "top" | "bottom";
    paginationView?: "full" | "compact";
}
interface LoadingOptionsProps {
    isLoading: boolean;
    loaderText?: string;
    loadingComponent?: React$1.ReactNode;
}
interface TopbarOptionsProps {
    tableStates: CraftTableOptionsProps;
    leftSideComponent?: React$1.ReactNode;
    rightSideComponent?: React$1.ReactNode;
    showColumnToggle?: boolean;
    showCompactTableToggle?: boolean;
    showChangeLayoutToggle?: boolean;
    viewMoreToggle?: boolean;
    showSearch?: boolean;
    showSortingToggle?: boolean;
    showFilterToggle?: boolean;
    searchValue?: string;
    onSearchChange?: (val: string) => void;
    onFilterButtonClick?: () => void;
}
interface CustomRenderContext<T> {
    value: unknown;
    row: Row<T>;
    table: Row<T>[];
}
type CustomRenderFnMap<T> = {
    [key: string]: (ctx: CustomRenderContext<T>) => React$1.ReactNode;
};
type CustomColumnMeta = {
    type?: "custom";
    propName?: string;
    [key: string]: any;
};
type CustomColumnDef<T> = ColumnDef<T> & {
    meta?: CustomColumnMeta;
};
interface CraftTableStyleProps {
    wrapperStyle?: React$1.CSSProperties;
}
interface FilterOptionsProps {
    onClick?: () => void;
    show?: boolean;
    component: React$1.ReactNode;
}
interface settingsOptionsProps {
    showIcon?: boolean;
    onClick?: () => void;
}
interface CraftTableProps<T> {
    data: T[];
    columns: CustomColumnDef<T>[];
    tableStates: CraftTableOptionsProps;
    filterSettingStates: craftTableFilterSettingsOptionsProps;
    onSaveSettings?: (columnId: string) => void;
    paginationOptions?: CraftTablePaginationProps;
    featureOptions?: CraftTableFeatureProps;
    nestedComponent?: React$1.ComponentType<{
        row: Row<T>;
    }>;
    loadingOptions?: LoadingOptionsProps;
    topbarOptions?: TopbarOptionsProps;
    customRenderFn?: CustomRenderFnMap<T>;
    shouldHideColumn?: (accessorKey?: string) => boolean;
    styleOptions?: CraftTableStyleProps;
    emptyListComponent?: React$1.ReactNode;
    filterOptions?: FilterOptionsProps;
    settingsOptions?: settingsOptionsProps;
    craftTableFilterSettingsOptions?: craftTableFilterSettingsOptionsProps;
    activeTab?: any;
}
interface CraftTableComponentProps<T> {
    table: Table<T>;
    activeTab?: string;
    featureOptions: CraftTableFeatureProps;
    NestedComponent?: React$1.ComponentType<{
        row: Row<T>;
    }>;
    columnOrder: ColumnOrderState;
    setColumnOrder: React$1.Dispatch<React$1.SetStateAction<ColumnOrderState>>;
    isCompactTable: boolean;
    tableStates: CraftTableOptionsProps;
    filterSettingStates: craftTableFilterSettingsOptionsProps;
    onSaveSettings?: (columnId: string) => void;
}
interface TableHeaderProps<T> {
    header: Header<T, unknown>;
    activeTab?: string;
    featureOptions: CraftTableFeatureProps;
    tableStates: CraftTableOptionsProps;
    filterSettingStates?: craftTableFilterSettingsOptionsProps;
    onSaveSettings?: (columnId: string) => void;
}

declare function TableWrapper<T>({ data, columns, tableStates, filterSettingStates, onSaveSettings, paginationOptions, featureOptions, topbarOptions, nestedComponent, loadingOptions, customRenderFn, shouldHideColumn, emptyListComponent, filterOptions, activeTab, }: CraftTableProps<T>): react_jsx_runtime.JSX.Element;

declare function useCraftTable(paginationPageSize?: number): CraftTableOptionsProps;

declare function useCraftTableFilterSettings(): craftTableFilterSettingsOptionsProps;

interface TabDataProps {
    tab_name: string | null;
    count?: string | number;
}
interface TableTabsProps {
    loading?: boolean;
    tabsData?: TabDataProps[];
    activeTab?: TabDataProps;
    tableStates: CraftTableOptionsProps;
    onClick: (state: string) => void;
    settingsOptions?: settingsOptionsProps;
}
declare function TableTabs({ loading, tabsData, activeTab, onClick, tableStates, settingsOptions, }: TableTabsProps): react_jsx_runtime.JSX.Element;

declare function TableFilter({ onClose, columnsData, tableStates, onDeleteFilter, onSaveFilter, onUpdateFilter, dropdownData, onChangeFunction, filterComponentOptions, isFlatJson, }: FilterDrawerProps): react_jsx_runtime.JSX.Element;

declare function QuickFilterSettings({ view, isFlatJson, show, filterSettingStates, onClose, columnsData, columnsDataLoading, quickTabAttributes, quickTabAttributesLoading, columnTabAttributes, columnTabAttributesLoading, sortingTabAttributes, sortingTabAttributesLoading, tabsApiData, tabsApiDataLoading, onSaveSettingsData, activeTab, selectAttributeData, selectSwinLandData, laneHideListData, swimLaneHideListData, onSaveKanbanSettingsData, }: QuickFilterModalProps): react_jsx_runtime.JSX.Element;

interface TableSearchProps {
    value: string;
    onChange: (value: string) => void;
}
declare const TableSearch: ({ value, onChange, }: TableSearchProps) => JSX.Element;

declare const Kanban: ({ metaData, data, kanbanSettingsData, isLoading, KanbanCardComponent, showSettings, onOpenSettings, isFlatJson, entity, }: {
    metaData: any;
    data: any;
    kanbanSettingsData: KanbanSettingsDataProps;
    isLoading?: boolean;
    KanbanCardComponent: React$1.ComponentType<{
        key: string | number;
        cardData: any;
        color?: string;
        darkColor?: string;
        darkerColor?: string;
    }>;
    showSettings: boolean;
    onOpenSettings?: () => void;
    isFlatJson?: boolean;
    entity?: string;
}) => react_jsx_runtime.JSX.Element;

export { TableFilter as CraftTableFilter, TableSearch as CraftTableSearch, QuickFilterSettings as CraftTableSettings, TableTabs as CraftTableTabs, Kanban as KanbanWrapper, TableWrapper, useCraftTable, useCraftTableFilterSettings };
export type { AttributesFilterProps, AttributesFilterSelectProps, CraftTableComponentProps, CraftTableFeatureProps, CraftTableOptionsProps, CraftTablePaginationProps, CraftTableProps, CustomRenderContext, CustomRenderFnMap, FilterColumnsDataProps, FilterColumnsListProps, FilterComponentOptions, FilterComponentOptionsMainFilterOptions, FilterComponentOptionsSavedFilterOptions, FilterCriteria, FilterDataMainFilterEntityListProps, FilterDataMainFilterEntityWiseCriteriaProps, FilterDataProps, FilterDrawerProps, FilterDropdownDataProps, FilterFormComponentProps, FilterInputDataTypes, FilterMasterStateProps, FilterOperationListProps, FilterOptionsProps, FilterSharedListProps, FilterStateProps, OperationList, OperationOption, SavedFilterSharingPreference, TableHeaderProps, TopbarOptionsProps, craftTableFilterSettingsOptionsProps, createSavedFilterPayload, deleteSavedFilterPayload, settingsOptionsProps, updateSavedFilterPayload, viewSettingsPayload };
