import { Page, Locator } from '@playwright/test';
import { TextUtils } from './TextUtils';
import type { TableScope } from './table-scope';
/**
 * Унифицированный сервис строк таблицы (scope: page | block).
 */
export declare class TableRowService {
    private readonly page;
    private readonly textUtils;
    constructor(page: Page, textUtils: TextUtils);
    /**
     * Ожидает появления хотя бы одной строки данных в таблице (не считая заголовка)
     */
    private waitForTableToHaveRows;
    /**
     * Получает индекс колонки по её названию с опциональной проверкой существования
     */
    private getRequiredColumnIndex;
    /**
     * Проверяет значение одной ячейки
     */
    private verifyCellValue;
    /**
     * Подготавливает данные для верификации ячеек строки
     */
    private prepareCellsForVerification;
    /**
     * Проверяет наличие обязательных колонок по их названиям.
     */
    verifyRequiredColumns(scope: TableScope, columnNames: string[], logContext: string): Promise<void>;
    /**
     * Поиск новой строки (первая строка после заголовка).
     */
    private findNewRow;
    /**
     * Поиск по всей таблице. Возвращает строку по ключу.
     */
    private findExistingRow;
    /**
     * Поиск строки по rowKey.
     */
    findTableRow(scope: TableScope, rowKey: string, keyValue: string, isNewlyAdded: boolean, logContext: string, customTimeout?: {
        timeout: number;
        intervals: number[];
    }): Promise<Locator>;
    /**
     * Тихий поиск строки в таблице без выброса ошибок.
     */
    findTableRowSilent(scope: TableScope, rowKey: string, keyValue: string, logContext: string): Promise<Locator | null>;
    /**
     * Проверяет соответствие строки данным без `test.step` и без `verifyCellValue` / `expect.poll`.
     * Используется в промежуточных итерациях `waitForTableRowWithRefresh`, чтобы не засорять Allure failed-шагами.
     * @param scope — область таблицы (page | block)
     * @param rowKey — ключевое поле строки
     * @param rowData — ожидаемые значения колонок
     * @param isNewlyAdded — искать среди новых строк
     * @param logContext — контекст для логирования
     * @returns `true`, если строка найдена через `findTableRow` и все ячейки совпадают
     */
    private matchesTableRow;
    /**
     * Проверка строки в таблице.
     */
    verifyTableRow(scope: TableScope, rowKey: string, rowData: Record<string, string>, isNewlyAdded: boolean, logContext: string, onRowFound?: (row: Locator) => void): Promise<void>;
    /**
     * Клик по ссылке в строке таблицы
     */
    clickInTableRow(scope: TableScope, key: {
        rowKey: string;
        keyValue: string;
    }, itemToClick: string, isNewlyAdded: boolean, logContext?: string): Promise<void>;
    /**
     * Ожидает появления строки с заданными данными, периодически обновляя таблицу.
     * В цикле poll использует тихую проверку `matchesTableRow` (без шагов Allure);
     * после успеха один раз вызывает `verifyTableRow` для финальной записи в отчёт.
     * @param options.onEachRefresh — колбэк обновления грида перед каждой итерацией poll
     */
    waitForTableRowWithRefresh(scope: TableScope, rowKey: string, rowData: Record<string, string>, isNewlyAdded: boolean, logContext: string, options: {
        totalTimeout: number;
        refreshIntervals: number[];
        onEachRefresh?: () => Promise<void>;
    }): Promise<void>;
    /**
     * Итерирует по всем строкам таблицы.
     */
    forEachRow(scope: TableScope, callback: (row: Locator, rowIndex: number) => Promise<void>, logContext: string): Promise<void>;
}
