import * as Point from './point';
/** A two-dimensional array of given type T in rows and columns */
export type Matrix<T> = Array<Array<T | undefined>>;
/**
 * Creates an empty matrix with given rows and columns
 * @param rows - integer, the amount of rows the matrix should have
 * @param columns - integer, the amount of columns the matrix should have
 * @returns an empty matrix with given rows and columns
 */
export declare function createEmpty<T>(rows: number, columns: number): Matrix<T>;
/** Gets the value at row and column of matrix. */
export declare function get<T>(point: Point.Point, matrix: Matrix<T>): T | undefined;
/** Creates a slice of matrix from startPoint up to, but not including, endPoint. */
export declare function slice<T>(startPoint: Point.Point, endPoint: Point.Point, matrix: Matrix<T>): Matrix<T>;
/** Sets the value at row and column of matrix. If a row doesn't exist, it's created. */
export declare function set<T>(point: Point.Point, value: T, matrix: Matrix<T>): Matrix<T>;
/** Like Matrix.set() but mutates the matrix */
export declare function mutableSet<T>(point: Point.Point, value: T, matrix: Matrix<T>): void;
/** Removes the coordinate of matrix */
export declare const convertPtToPx: (pt: number) => string;
export declare function unset<T>(point: Point.Point, matrix: Matrix<T>): Matrix<T>;
/** Creates an array of values by running each element in collection thru iteratee. */
export declare function map<T, T2>(func: (value: T | undefined, point: Point.Point) => T2, matrix: Matrix<T>): Matrix<T2>;
/** Create an iterator over the cells in the matrix */
export declare function entries<T>(matrix: Matrix<T>): IterableIterator<[Point.Point, T | undefined]>;
/**
 * Converts all elements in row into a string separated by horizontalSeparator and each row string
 * to string separated by verticalSeparator
 */
export declare function join(matrix: Matrix<unknown>, horizontalSeparator?: string, verticalSeparator?: string): string;
/**
 * Parses a CSV separated by a horizontalSeparator and verticalSeparator into a
 * Matrix using a transform function
 */
export declare function split<T>(csv: string, transform: (value: string) => T, horizontalSeparator?: string, verticalSeparator?: string | RegExp): Matrix<T>;
/** Returns whether the point exists in the matrix or not. */
export declare function has(point: Point.Point, matrix: Matrix<unknown>): boolean;
/** Counts of the rows and column in a matrix */
export type Size = {
    /** Count of the rows in the matrix */
    rows: number;
    /** Count of the columns in the matrix */
    columns: number;
};
/** Gets the count of rows and columns of given matrix */
export declare function getSize(matrix: Matrix<unknown>): Size;
/** Gets the count of rows of given matrix */
export declare function getRowsCount(matrix: Matrix<unknown>): number;
/** Gets the count of columns of given matrix */
export declare function getColumnsCount(matrix: Matrix<unknown>): number;
/**
 * Pads matrix with empty rows to match given total rows
 * @param matrix - matrix to pad
 * @param totalRows - number of rows the matrix should have
 * @returns the updated matrix
 */
export declare function padRows<T>(matrix: Matrix<T>, totalRows: number): Matrix<T>;
/**
 * Pads matrix with empty columns to match given total columns
 * @param matrix - matrix to pad
 * @param size - minimum size of the matrix after padding.
 * @returns the updated matrix
 */
export declare function pad<T>(matrix: Matrix<T>, size: Size): Matrix<T>;
export declare function toArray<T>(matrix: Matrix<T>): T[];
export declare function toArray<T1, T2>(matrix: Matrix<T1>, transform: (cell: T1 | undefined, coords: Point.Point) => T2): T2[];
/** Returns the maximum point in the matrix */
export declare function maxPoint(matrix: Matrix<unknown>): Point.Point;
