import type { ReactNode, RefObject } from 'react';
import type { CardProps } from './Card';
export type SkeletonConfig = {
    /**
     * Скелетон, отображающийся внутри карточки
     */
    component: ReactNode;
    /**
     * Число отображаемых элементов в состоянии загрузки
     */
    count: number;
};
export type CardGridInfiniteProps<TDataItem extends Record<string, unknown>> = {
    /**
     * Отображается skeleton
     */
    isLoading?: boolean;
    isError?: boolean;
    errorMsg?: string;
    /**
     * Функция обработки нажатия на кнопку "Повторить снова"
     */
    onRetry: () => void;
    /**
     * Конфигурация состояния загрузки компонента
     */
    skeleton: SkeletonConfig;
    /**
     * Изображение отображающееся при отсутствии данных
     */
    noDataImgSrc?: string;
    /**
     * Список элементов для отображения
     */
    list?: TDataItem[];
    /**
     * Конфигурация отображения элементов
     *
     * @example
     * defineCard={({ organization, content }) => {
          return {
            header: <CardHeader organization={organization} />
            content: <DescriptionList leader items={content} />,
            mainActions: () => <MainActions />,
            secondaryActions: () => <SecondaryActions />,
          };
        }}
     */
    defineCard: (itemData: TDataItem) => Omit<CardProps<TDataItem>, 'item'>;
    /**
     * Определяет минимальную и максимальную ширину карточек в адаптивной сетке.
     * Применяется через CSS Grid.
     * Колонки автоматически перестраиваются при изменении ширины контейнера.
     *
     * @example
     * desktopCardWidth={{
     *   min: '350px',
     *   max: '1fr',
     * }}
     */
    desktopCardWidth: {
        min: string;
        max: string;
    };
    /**
     * Вызывается, когда пользователь достигает конца списка и требуется загрузить дополнительные данные
     */
    onLoadMore: () => void;
    /**
     * Флаг достижения конца списка
     */
    isEndReached?: boolean;
    /**
     * Сообщение, отображаемое при достижении конца списка
     *
     * @default Вы достигли конца списка
     */
    endOfScrollMsg?: string;
    /**
     * Изображение при ошибке
     *
     * @default Берется из контекста ConfigContext (defaultErrorImgSrc)
     */
    errorImgSrc?: string;
    /**
     * Реф на контейнер, в котором должен быть скролл
     *
     * Используется тот же реф, что передается в компонент PageContent
     *
     * @example
     * const scrollRef = useRef(null);
     *
     * <PageContent scrollRef={scrollRef}>
     *   <CardGridInfinite scrollRef={scrollRef} ... />
     * </PageContent>
     */
    scrollRef: RefObject<HTMLElement | null>;
};
