[6a3a178] | 1 | /**
|
---|
| 2 | * @license
|
---|
| 3 | * Copyright Google LLC All Rights Reserved.
|
---|
| 4 | *
|
---|
| 5 | * Use of this source code is governed by an MIT-style license that can be
|
---|
| 6 | * found in the LICENSE file at https://angular.io/license
|
---|
| 7 | */
|
---|
| 8 | /**
|
---|
| 9 | * Interface describing a tile.
|
---|
| 10 | * @docs-private
|
---|
| 11 | */
|
---|
| 12 | export interface Tile {
|
---|
| 13 | /** Amount of rows that the tile takes up. */
|
---|
| 14 | rowspan: number;
|
---|
| 15 | /** Amount of columns that the tile takes up. */
|
---|
| 16 | colspan: number;
|
---|
| 17 | }
|
---|
| 18 | /**
|
---|
| 19 | * Class for determining, from a list of tiles, the (row, col) position of each of those tiles
|
---|
| 20 | * in the grid. This is necessary (rather than just rendering the tiles in normal document flow)
|
---|
| 21 | * because the tiles can have a rowspan.
|
---|
| 22 | *
|
---|
| 23 | * The positioning algorithm greedily places each tile as soon as it encounters a gap in the grid
|
---|
| 24 | * large enough to accommodate it so that the tiles still render in the same order in which they
|
---|
| 25 | * are given.
|
---|
| 26 | *
|
---|
| 27 | * The basis of the algorithm is the use of an array to track the already placed tiles. Each
|
---|
| 28 | * element of the array corresponds to a column, and the value indicates how many cells in that
|
---|
| 29 | * column are already occupied; zero indicates an empty cell. Moving "down" to the next row
|
---|
| 30 | * decrements each value in the tracking array (indicating that the column is one cell closer to
|
---|
| 31 | * being free).
|
---|
| 32 | *
|
---|
| 33 | * @docs-private
|
---|
| 34 | */
|
---|
| 35 | export declare class TileCoordinator {
|
---|
| 36 | /** Tracking array (see class description). */
|
---|
| 37 | tracker: number[];
|
---|
| 38 | /** Index at which the search for the next gap will start. */
|
---|
| 39 | columnIndex: number;
|
---|
| 40 | /** The current row index. */
|
---|
| 41 | rowIndex: number;
|
---|
| 42 | /** Gets the total number of rows occupied by tiles */
|
---|
| 43 | get rowCount(): number;
|
---|
| 44 | /**
|
---|
| 45 | * Gets the total span of rows occupied by tiles.
|
---|
| 46 | * Ex: A list with 1 row that contains a tile with rowspan 2 will have a total rowspan of 2.
|
---|
| 47 | */
|
---|
| 48 | get rowspan(): number;
|
---|
| 49 | /** The computed (row, col) position of each tile (the output). */
|
---|
| 50 | positions: TilePosition[];
|
---|
| 51 | /**
|
---|
| 52 | * Updates the tile positions.
|
---|
| 53 | * @param numColumns Amount of columns in the grid.
|
---|
| 54 | * @param tiles Tiles to be positioned.
|
---|
| 55 | */
|
---|
| 56 | update(numColumns: number, tiles: Tile[]): void;
|
---|
| 57 | /** Calculates the row and col position of a tile. */
|
---|
| 58 | private _trackTile;
|
---|
| 59 | /** Finds the next available space large enough to fit the tile. */
|
---|
| 60 | private _findMatchingGap;
|
---|
| 61 | /** Move "down" to the next row. */
|
---|
| 62 | private _nextRow;
|
---|
| 63 | /**
|
---|
| 64 | * Finds the end index (exclusive) of a gap given the index from which to start looking.
|
---|
| 65 | * The gap ends when a non-zero value is found.
|
---|
| 66 | */
|
---|
| 67 | private _findGapEndIndex;
|
---|
| 68 | /** Update the tile tracker to account for the given tile in the given space. */
|
---|
| 69 | private _markTilePosition;
|
---|
| 70 | }
|
---|
| 71 | /**
|
---|
| 72 | * Simple data structure for tile position (row, col).
|
---|
| 73 | * @docs-private
|
---|
| 74 | */
|
---|
| 75 | export declare class TilePosition {
|
---|
| 76 | row: number;
|
---|
| 77 | col: number;
|
---|
| 78 | constructor(row: number, col: number);
|
---|
| 79 | }
|
---|