{"version":3,"file":"grid-list.mjs","sources":["../../../../../../src/material/grid-list/tile-coordinator.ts","../../../../../../src/material/grid-list/grid-list-base.ts","../../../../../../src/material/grid-list/grid-tile.ts","../../../../../../src/material/grid-list/grid-tile.html","../../../../../../src/material/grid-list/grid-tile-text.html","../../../../../../src/material/grid-list/tile-styler.ts","../../../../../../src/material/grid-list/grid-list.ts","../../../../../../src/material/grid-list/grid-list.html","../../../../../../src/material/grid-list/grid-list-module.ts","../../../../../../src/material/grid-list/public-api.ts","../../../../../../src/material/grid-list/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Interface describing a tile.\n * @docs-private\n */\nexport interface Tile {\n  /** Amount of rows that the tile takes up. */\n  rowspan: number;\n  /** Amount of columns that the tile takes up. */\n  colspan: number;\n}\n\n/**\n * Class for determining, from a list of tiles, the (row, col) position of each of those tiles\n * in the grid. This is necessary (rather than just rendering the tiles in normal document flow)\n * because the tiles can have a rowspan.\n *\n * The positioning algorithm greedily places each tile as soon as it encounters a gap in the grid\n * large enough to accommodate it so that the tiles still render in the same order in which they\n * are given.\n *\n * The basis of the algorithm is the use of an array to track the already placed tiles. Each\n * element of the array corresponds to a column, and the value indicates how many cells in that\n * column are already occupied; zero indicates an empty cell. Moving \"down\" to the next row\n * decrements each value in the tracking array (indicating that the column is one cell closer to\n * being free).\n *\n * @docs-private\n */\nexport class TileCoordinator {\n  /** Tracking array (see class description). */\n  tracker: number[];\n\n  /** Index at which the search for the next gap will start. */\n  columnIndex: number = 0;\n\n  /** The current row index. */\n  rowIndex: number = 0;\n\n  /** Gets the total number of rows occupied by tiles */\n  get rowCount(): number { return this.rowIndex + 1; }\n\n  /**\n   * Gets the total span of rows occupied by tiles.\n   * Ex: A list with 1 row that contains a tile with rowspan 2 will have a total rowspan of 2.\n   */\n  get rowspan() {\n    const lastRowMax = Math.max(...this.tracker);\n    // if any of the tiles has a rowspan that pushes it beyond the total row count,\n    // add the difference to the rowcount\n    return lastRowMax > 1 ? this.rowCount + lastRowMax - 1 : this.rowCount;\n  }\n\n  /** The computed (row, col) position of each tile (the output). */\n  positions: TilePosition[];\n\n  /**\n   * Updates the tile positions.\n   * @param numColumns Amount of columns in the grid.\n   * @param tiles Tiles to be positioned.\n   */\n  update(numColumns: number, tiles: Tile[]) {\n    this.columnIndex = 0;\n    this.rowIndex = 0;\n\n    this.tracker = new Array(numColumns);\n    this.tracker.fill(0, 0, this.tracker.length);\n    this.positions = tiles.map(tile => this._trackTile(tile));\n  }\n\n  /** Calculates the row and col position of a tile. */\n  private _trackTile(tile: Tile): TilePosition {\n    // Find a gap large enough for this tile.\n    const gapStartIndex = this._findMatchingGap(tile.colspan);\n\n    // Place tile in the resulting gap.\n    this._markTilePosition(gapStartIndex, tile);\n\n    // The next time we look for a gap, the search will start at columnIndex, which should be\n    // immediately after the tile that has just been placed.\n    this.columnIndex = gapStartIndex + tile.colspan;\n\n    return new TilePosition(this.rowIndex, gapStartIndex);\n  }\n\n  /** Finds the next available space large enough to fit the tile. */\n  private _findMatchingGap(tileCols: number): number {\n    if (tileCols > this.tracker.length && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error(`mat-grid-list: tile with colspan ${tileCols} is wider than ` +\n                      `grid with cols=\"${this.tracker.length}\".`);\n    }\n\n    // Start index is inclusive, end index is exclusive.\n    let gapStartIndex = -1;\n    let gapEndIndex = -1;\n\n    // Look for a gap large enough to fit the given tile. Empty spaces are marked with a zero.\n    do {\n      // If we've reached the end of the row, go to the next row.\n      if (this.columnIndex + tileCols > this.tracker.length) {\n        this._nextRow();\n        gapStartIndex = this.tracker.indexOf(0, this.columnIndex);\n        gapEndIndex = this._findGapEndIndex(gapStartIndex);\n        continue;\n      }\n\n      gapStartIndex = this.tracker.indexOf(0, this.columnIndex);\n\n      // If there are no more empty spaces in this row at all, move on to the next row.\n      if (gapStartIndex == -1) {\n        this._nextRow();\n        gapStartIndex = this.tracker.indexOf(0, this.columnIndex);\n        gapEndIndex = this._findGapEndIndex(gapStartIndex);\n        continue;\n      }\n\n      gapEndIndex = this._findGapEndIndex(gapStartIndex);\n\n      // If a gap large enough isn't found, we want to start looking immediately after the current\n      // gap on the next iteration.\n      this.columnIndex = gapStartIndex + 1;\n\n      // Continue iterating until we find a gap wide enough for this tile. Since gapEndIndex is\n      // exclusive, gapEndIndex is 0 means we didn't find a gap and should continue.\n    } while ((gapEndIndex - gapStartIndex < tileCols) || (gapEndIndex == 0));\n\n    // If we still didn't manage to find a gap, ensure that the index is\n    // at least zero so the tile doesn't get pulled out of the grid.\n    return Math.max(gapStartIndex, 0);\n  }\n\n  /** Move \"down\" to the next row. */\n  private _nextRow(): void {\n    this.columnIndex = 0;\n    this.rowIndex++;\n\n    // Decrement all spaces by one to reflect moving down one row.\n    for (let i = 0; i < this.tracker.length; i++) {\n      this.tracker[i] = Math.max(0, this.tracker[i] - 1);\n    }\n  }\n\n  /**\n   * Finds the end index (exclusive) of a gap given the index from which to start looking.\n   * The gap ends when a non-zero value is found.\n   */\n  private _findGapEndIndex(gapStartIndex: number): number {\n    for (let i = gapStartIndex + 1; i < this.tracker.length; i++) {\n      if (this.tracker[i] != 0) {\n        return i;\n      }\n    }\n\n    // The gap ends with the end of the row.\n    return this.tracker.length;\n  }\n\n  /** Update the tile tracker to account for the given tile in the given space. */\n  private _markTilePosition(start: number, tile: Tile): void {\n    for (let i = 0; i < tile.colspan; i++) {\n      this.tracker[start + i] = tile.rowspan;\n    }\n  }\n}\n\n/**\n * Simple data structure for tile position (row, col).\n * @docs-private\n */\nexport class TilePosition {\n  constructor(public row: number, public col: number) {}\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n/**\n * Injection token used to provide a grid list to a tile and to avoid circular imports.\n * @docs-private\n */\nexport const MAT_GRID_LIST = new InjectionToken<MatGridListBase>('MAT_GRID_LIST');\n\n/**\n * Base interface for a `MatGridList`.\n * @docs-private\n */\nexport interface MatGridListBase {\n  cols: number;\n  gutterSize: string;\n  rowHeight: number | string;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n  Component,\n  ViewEncapsulation,\n  ElementRef,\n  Input,\n  Optional,\n  ContentChildren,\n  QueryList,\n  AfterContentInit,\n  Directive,\n  ChangeDetectionStrategy,\n  Inject,\n} from '@angular/core';\nimport {MatLine, setLines} from '@angular/material/core';\nimport {coerceNumberProperty, NumberInput} from '@angular/cdk/coercion';\nimport {MAT_GRID_LIST, MatGridListBase} from './grid-list-base';\n\n@Component({\n  selector: 'mat-grid-tile',\n  exportAs: 'matGridTile',\n  host: {\n    'class': 'mat-grid-tile',\n    // Ensures that the \"rowspan\" and \"colspan\" input value is reflected in\n    // the DOM. This is needed for the grid-tile harness.\n    '[attr.rowspan]': 'rowspan',\n    '[attr.colspan]': 'colspan'\n  },\n  templateUrl: 'grid-tile.html',\n  styleUrls: ['grid-list.css'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatGridTile {\n  _rowspan: number = 1;\n  _colspan: number = 1;\n\n  constructor(\n    private _element: ElementRef<HTMLElement>,\n    @Optional() @Inject(MAT_GRID_LIST) public _gridList?: MatGridListBase) {}\n\n  /** Amount of rows that the grid tile takes up. */\n  @Input()\n  get rowspan(): number { return this._rowspan; }\n  set rowspan(value: number) { this._rowspan = Math.round(coerceNumberProperty(value)); }\n\n  /** Amount of columns that the grid tile takes up. */\n  @Input()\n  get colspan(): number { return this._colspan; }\n  set colspan(value: number) { this._colspan = Math.round(coerceNumberProperty(value)); }\n\n  /**\n   * Sets the style of the grid-tile element.  Needs to be set manually to avoid\n   * \"Changed after checked\" errors that would occur with HostBinding.\n   */\n  _setStyle(property: string, value: any): void {\n    (this._element.nativeElement.style as any)[property] = value;\n  }\n\n  static ngAcceptInputType_rowspan: NumberInput;\n  static ngAcceptInputType_colspan: NumberInput;\n}\n\n@Component({\n  selector: 'mat-grid-tile-header, mat-grid-tile-footer',\n  templateUrl: 'grid-tile-text.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class MatGridTileText implements AfterContentInit {\n  @ContentChildren(MatLine, {descendants: true}) _lines: QueryList<MatLine>;\n\n  constructor(private _element: ElementRef<HTMLElement>) {}\n\n  ngAfterContentInit() {\n    setLines(this._lines, this._element);\n  }\n}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\n@Directive({\n  selector: '[mat-grid-avatar], [matGridAvatar]',\n  host: {'class': 'mat-grid-avatar'}\n})\nexport class MatGridAvatarCssMatStyler {}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\n@Directive({\n  selector: 'mat-grid-tile-header',\n  host: {'class': 'mat-grid-tile-header'}\n})\nexport class MatGridTileHeaderCssMatStyler {}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\n@Directive({\n  selector: 'mat-grid-tile-footer',\n  host: {'class': 'mat-grid-tile-footer'}\n})\nexport class MatGridTileFooterCssMatStyler {}\n","<div class=\"mat-grid-tile-content\">\n  <ng-content></ng-content>\n</div>\n","<ng-content select=\"[mat-grid-avatar], [matGridAvatar]\"></ng-content>\n<div class=\"mat-grid-list-text\"><ng-content select=\"[mat-line], [matLine]\"></ng-content></div>\n<ng-content></ng-content>\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {QueryList} from '@angular/core';\nimport {MatGridTile} from './grid-tile';\nimport {TileCoordinator} from './tile-coordinator';\n\n/**\n * RegExp that can be used to check whether a value will\n * be allowed inside a CSS `calc()` expression.\n */\nconst cssCalcAllowedValue = /^-?\\d+((\\.\\d+)?[A-Za-z%$]?)+$/;\n\n/** Object that can be styled by the `TileStyler`. */\nexport interface TileStyleTarget {\n  _setListStyle(style: [string, string | null] | null): void;\n  _tiles: QueryList<MatGridTile>;\n}\n\n/**\n * Sets the style properties for an individual tile, given the position calculated by the\n * Tile Coordinator.\n * @docs-private\n */\nexport abstract class TileStyler {\n  _gutterSize: string;\n  _rows: number = 0;\n  _rowspan: number = 0;\n  _cols: number;\n  _direction: string;\n\n  /**\n   * Adds grid-list layout info once it is available. Cannot be processed in the constructor\n   * because these properties haven't been calculated by that point.\n   *\n   * @param gutterSize Size of the grid's gutter.\n   * @param tracker Instance of the TileCoordinator.\n   * @param cols Amount of columns in the grid.\n   * @param direction Layout direction of the grid.\n   */\n  init(gutterSize: string, tracker: TileCoordinator, cols: number, direction: string): void {\n    this._gutterSize = normalizeUnits(gutterSize);\n    this._rows = tracker.rowCount;\n    this._rowspan = tracker.rowspan;\n    this._cols = cols;\n    this._direction = direction;\n  }\n\n  /**\n   * Computes the amount of space a single 1x1 tile would take up (width or height).\n   * Used as a basis for other calculations.\n   * @param sizePercent Percent of the total grid-list space that one 1x1 tile would take up.\n   * @param gutterFraction Fraction of the gutter size taken up by one 1x1 tile.\n   * @return The size of a 1x1 tile as an expression that can be evaluated via CSS calc().\n   */\n  getBaseTileSize(sizePercent: number, gutterFraction: number): string {\n    // Take the base size percent (as would be if evenly dividing the size between cells),\n    // and then subtracting the size of one gutter. However, since there are no gutters on the\n    // edges, each tile only uses a fraction (gutterShare = numGutters / numCells) of the gutter\n    // size. (Imagine having one gutter per tile, and then breaking up the extra gutter on the\n    // edge evenly among the cells).\n    return `(${sizePercent}% - (${this._gutterSize} * ${gutterFraction}))`;\n  }\n\n\n  /**\n   * Gets The horizontal or vertical position of a tile, e.g., the 'top' or 'left' property value.\n   * @param offset Number of tiles that have already been rendered in the row/column.\n   * @param baseSize Base size of a 1x1 tile (as computed in getBaseTileSize).\n   * @return Position of the tile as a CSS calc() expression.\n   */\n  getTilePosition(baseSize: string, offset: number): string {\n    // The position comes the size of a 1x1 tile plus gutter for each previous tile in the\n    // row/column (offset).\n    return offset === 0 ? '0' : calc(`(${baseSize} + ${this._gutterSize}) * ${offset}`);\n  }\n\n\n  /**\n   * Gets the actual size of a tile, e.g., width or height, taking rowspan or colspan into account.\n   * @param baseSize Base size of a 1x1 tile (as computed in getBaseTileSize).\n   * @param span The tile's rowspan or colspan.\n   * @return Size of the tile as a CSS calc() expression.\n   */\n  getTileSize(baseSize: string, span: number): string {\n    return `(${baseSize} * ${span}) + (${span - 1} * ${this._gutterSize})`;\n  }\n\n\n  /**\n   * Sets the style properties to be applied to a tile for the given row and column index.\n   * @param tile Tile to which to apply the styling.\n   * @param rowIndex Index of the tile's row.\n   * @param colIndex Index of the tile's column.\n   */\n  setStyle(tile: MatGridTile, rowIndex: number, colIndex: number): void {\n    // Percent of the available horizontal space that one column takes up.\n    let percentWidthPerTile = 100 / this._cols;\n\n    // Fraction of the vertical gutter size that each column takes up.\n    // For example, if there are 5 columns, each column uses 4/5 = 0.8 times the gutter width.\n    let gutterWidthFractionPerTile = (this._cols - 1) / this._cols;\n\n    this.setColStyles(tile, colIndex, percentWidthPerTile, gutterWidthFractionPerTile);\n    this.setRowStyles(tile, rowIndex, percentWidthPerTile, gutterWidthFractionPerTile);\n  }\n\n  /** Sets the horizontal placement of the tile in the list. */\n  setColStyles(tile: MatGridTile, colIndex: number, percentWidth: number,\n               gutterWidth: number) {\n    // Base horizontal size of a column.\n    let baseTileWidth = this.getBaseTileSize(percentWidth, gutterWidth);\n\n    // The width and horizontal position of each tile is always calculated the same way, but the\n    // height and vertical position depends on the rowMode.\n    let side = this._direction === 'rtl' ? 'right' : 'left';\n    tile._setStyle(side, this.getTilePosition(baseTileWidth, colIndex));\n    tile._setStyle('width', calc(this.getTileSize(baseTileWidth, tile.colspan)));\n  }\n\n  /**\n   * Calculates the total size taken up by gutters across one axis of a list.\n   */\n  getGutterSpan(): string {\n    return `${this._gutterSize} * (${this._rowspan} - 1)`;\n  }\n\n  /**\n   * Calculates the total size taken up by tiles across one axis of a list.\n   * @param tileHeight Height of the tile.\n   */\n  getTileSpan(tileHeight: string): string {\n    return `${this._rowspan} * ${this.getTileSize(tileHeight, 1)}`;\n  }\n\n  /**\n   * Sets the vertical placement of the tile in the list.\n   * This method will be implemented by each type of TileStyler.\n   * @docs-private\n   */\n  abstract setRowStyles(tile: MatGridTile, rowIndex: number, percentWidth: number,\n                        gutterWidth: number): void;\n\n  /**\n   * Calculates the computed height and returns the correct style property to set.\n   * This method can be implemented by each type of TileStyler.\n   * @docs-private\n   */\n  getComputedHeight(): [string, string] | null { return null; }\n\n  /**\n   * Called when the tile styler is swapped out with a different one. To be used for cleanup.\n   * @param list Grid list that the styler was attached to.\n   * @docs-private\n   */\n  abstract reset(list: TileStyleTarget): void;\n}\n\n\n/**\n * This type of styler is instantiated when the user passes in a fixed row height.\n * Example `<mat-grid-list cols=\"3\" rowHeight=\"100px\">`\n * @docs-private\n */\nexport class FixedTileStyler extends TileStyler {\n\n  constructor(public fixedRowHeight: string) { super(); }\n\n  override init(gutterSize: string, tracker: TileCoordinator, cols: number, direction: string) {\n    super.init(gutterSize, tracker, cols, direction);\n    this.fixedRowHeight = normalizeUnits(this.fixedRowHeight);\n\n    if (!cssCalcAllowedValue.test(this.fixedRowHeight) &&\n      (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error(`Invalid value \"${this.fixedRowHeight}\" set as rowHeight.`);\n    }\n  }\n\n  override setRowStyles(tile: MatGridTile, rowIndex: number): void {\n    tile._setStyle('top', this.getTilePosition(this.fixedRowHeight, rowIndex));\n    tile._setStyle('height', calc(this.getTileSize(this.fixedRowHeight, tile.rowspan)));\n  }\n\n  override getComputedHeight(): [string, string] {\n    return [\n      'height', calc(`${this.getTileSpan(this.fixedRowHeight)} + ${this.getGutterSpan()}`)\n    ];\n  }\n\n  override reset(list: TileStyleTarget) {\n    list._setListStyle(['height', null]);\n\n    if (list._tiles) {\n      list._tiles.forEach(tile => {\n        tile._setStyle('top', null);\n        tile._setStyle('height', null);\n      });\n    }\n  }\n}\n\n\n/**\n * This type of styler is instantiated when the user passes in a width:height ratio\n * for the row height.  Example `<mat-grid-list cols=\"3\" rowHeight=\"3:1\">`\n * @docs-private\n */\nexport class RatioTileStyler extends TileStyler {\n\n  /** Ratio width:height given by user to determine row height. */\n  rowHeightRatio: number;\n  baseTileHeight: string;\n\n  constructor(value: string) {\n    super();\n    this._parseRatio(value);\n  }\n\n  setRowStyles(tile: MatGridTile, rowIndex: number, percentWidth: number,\n               gutterWidth: number): void {\n    let percentHeightPerTile = percentWidth / this.rowHeightRatio;\n    this.baseTileHeight = this.getBaseTileSize(percentHeightPerTile, gutterWidth);\n\n    // Use padding-top and margin-top to maintain the given aspect ratio, as\n    // a percentage-based value for these properties is applied versus the *width* of the\n    // containing block. See http://www.w3.org/TR/CSS2/box.html#margin-properties\n    tile._setStyle('marginTop', this.getTilePosition(this.baseTileHeight, rowIndex));\n    tile._setStyle('paddingTop', calc(this.getTileSize(this.baseTileHeight, tile.rowspan)));\n  }\n\n  override getComputedHeight(): [string, string] {\n    return [\n      'paddingBottom', calc(`${this.getTileSpan(this.baseTileHeight)} + ${this.getGutterSpan()}`)\n    ];\n  }\n\n  reset(list: TileStyleTarget) {\n    list._setListStyle(['paddingBottom', null]);\n\n    list._tiles.forEach(tile => {\n      tile._setStyle('marginTop', null);\n      tile._setStyle('paddingTop', null);\n    });\n  }\n\n  private _parseRatio(value: string): void {\n    const ratioParts = value.split(':');\n\n    if (ratioParts.length !== 2 && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error(`mat-grid-list: invalid ratio given for row-height: \"${value}\"`);\n    }\n\n    this.rowHeightRatio = parseFloat(ratioParts[0]) / parseFloat(ratioParts[1]);\n  }\n}\n\n/**\n * This type of styler is instantiated when the user selects a \"fit\" row height mode.\n * In other words, the row height will reflect the total height of the container divided\n * by the number of rows.  Example `<mat-grid-list cols=\"3\" rowHeight=\"fit\">`\n *\n * @docs-private\n */\nexport class FitTileStyler extends TileStyler {\n  setRowStyles(tile: MatGridTile, rowIndex: number): void {\n    // Percent of the available vertical space that one row takes up.\n    let percentHeightPerTile = 100 / this._rowspan;\n\n    // Fraction of the horizontal gutter size that each column takes up.\n    let gutterHeightPerTile = (this._rows - 1) / this._rows;\n\n    // Base vertical size of a column.\n    let baseTileHeight = this.getBaseTileSize(percentHeightPerTile, gutterHeightPerTile);\n\n    tile._setStyle('top', this.getTilePosition(baseTileHeight, rowIndex));\n    tile._setStyle('height', calc(this.getTileSize(baseTileHeight, tile.rowspan)));\n  }\n\n  reset(list: TileStyleTarget) {\n    if (list._tiles) {\n      list._tiles.forEach(tile => {\n        tile._setStyle('top', null);\n        tile._setStyle('height', null);\n      });\n    }\n  }\n}\n\n\n/** Wraps a CSS string in a calc function */\nfunction calc(exp: string): string {\n  return `calc(${exp})`;\n}\n\n\n/** Appends pixels to a CSS string if no units are given. */\nfunction normalizeUnits(value: string): string {\n  return value.match(/([A-Za-z%]+)$/) ? value : `${value}px`;\n}\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n  Component,\n  ViewEncapsulation,\n  AfterContentChecked,\n  OnInit,\n  Input,\n  ContentChildren,\n  QueryList,\n  ElementRef,\n  Optional,\n  ChangeDetectionStrategy,\n} from '@angular/core';\nimport {MatGridTile} from './grid-tile';\nimport {TileCoordinator} from './tile-coordinator';\nimport {\n  TileStyler,\n  FitTileStyler,\n  RatioTileStyler,\n  FixedTileStyler,\n  TileStyleTarget,\n} from './tile-styler';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {coerceNumberProperty, NumberInput} from '@angular/cdk/coercion';\nimport {MAT_GRID_LIST, MatGridListBase} from './grid-list-base';\n\n\n// TODO(kara): Conditional (responsive) column count / row size.\n// TODO(kara): Re-layout on window resize / media change (debounced).\n// TODO(kara): gridTileHeader and gridTileFooter.\n\nconst MAT_FIT_MODE = 'fit';\n\n@Component({\n  selector: 'mat-grid-list',\n  exportAs: 'matGridList',\n  templateUrl: 'grid-list.html',\n  styleUrls: ['grid-list.css'],\n  host: {\n    'class': 'mat-grid-list',\n    // Ensures that the \"cols\" input value is reflected in the DOM. This is\n    // needed for the grid-list harness.\n    '[attr.cols]': 'cols',\n  },\n  providers: [{\n    provide: MAT_GRID_LIST,\n    useExisting: MatGridList\n  }],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class MatGridList implements MatGridListBase, OnInit, AfterContentChecked, TileStyleTarget {\n  /** Number of columns being rendered. */\n  private _cols: number;\n\n  /** Used for determiningthe position of each tile in the grid. */\n  private _tileCoordinator: TileCoordinator;\n\n  /**\n   * Row height value passed in by user. This can be one of three types:\n   * - Number value (ex: \"100px\"):  sets a fixed row height to that value\n   * - Ratio value (ex: \"4:3\"): sets the row height based on width:height ratio\n   * - \"Fit\" mode (ex: \"fit\"): sets the row height to total height divided by number of rows\n   */\n  private _rowHeight: string;\n\n  /** The amount of space between tiles. This will be something like '5px' or '2em'. */\n  private _gutter: string = '1px';\n\n  /** Sets position and size styles for a tile */\n  private _tileStyler: TileStyler;\n\n  /** Query list of tiles that are being rendered. */\n  @ContentChildren(MatGridTile, {descendants: true}) _tiles: QueryList<MatGridTile>;\n\n  constructor(private _element: ElementRef<HTMLElement>,\n              @Optional() private _dir: Directionality) {}\n\n  /** Amount of columns in the grid list. */\n  @Input()\n  get cols(): number { return this._cols; }\n  set cols(value: number) {\n    this._cols = Math.max(1, Math.round(coerceNumberProperty(value)));\n  }\n\n  /** Size of the grid list's gutter in pixels. */\n  @Input()\n  get gutterSize(): string { return this._gutter; }\n  set gutterSize(value: string) { this._gutter = `${value == null ? '' : value}`; }\n\n  /** Set internal representation of row height from the user-provided value. */\n  @Input()\n  get rowHeight(): string | number { return this._rowHeight; }\n  set rowHeight(value: string | number) {\n    const newValue = `${value == null ? '' : value}`;\n\n    if (newValue !== this._rowHeight) {\n      this._rowHeight = newValue;\n      this._setTileStyler(this._rowHeight);\n    }\n  }\n\n  ngOnInit() {\n    this._checkCols();\n    this._checkRowHeight();\n  }\n\n  /**\n   * The layout calculation is fairly cheap if nothing changes, so there's little cost\n   * to run it frequently.\n   */\n  ngAfterContentChecked() {\n    this._layoutTiles();\n  }\n\n  /** Throw a friendly error if cols property is missing */\n  private _checkCols() {\n    if (!this.cols && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error(`mat-grid-list: must pass in number of columns. ` +\n                  `Example: <mat-grid-list cols=\"3\">`);\n    }\n  }\n\n  /** Default to equal width:height if rowHeight property is missing */\n  private _checkRowHeight(): void {\n    if (!this._rowHeight) {\n      this._setTileStyler('1:1');\n    }\n  }\n\n  /** Creates correct Tile Styler subtype based on rowHeight passed in by user */\n  private _setTileStyler(rowHeight: string): void {\n    if (this._tileStyler) {\n      this._tileStyler.reset(this);\n    }\n\n    if (rowHeight === MAT_FIT_MODE) {\n      this._tileStyler = new FitTileStyler();\n    } else if (rowHeight && rowHeight.indexOf(':') > -1) {\n      this._tileStyler = new RatioTileStyler(rowHeight);\n    } else {\n      this._tileStyler = new FixedTileStyler(rowHeight);\n    }\n  }\n\n  /** Computes and applies the size and position for all children grid tiles. */\n  private _layoutTiles(): void {\n    if (!this._tileCoordinator) {\n      this._tileCoordinator = new TileCoordinator();\n    }\n\n\n    const tracker = this._tileCoordinator;\n    const tiles = this._tiles.filter(tile => !tile._gridList || tile._gridList === this);\n    const direction = this._dir ? this._dir.value : 'ltr';\n\n    this._tileCoordinator.update(this.cols, tiles);\n    this._tileStyler.init(this.gutterSize, tracker, this.cols, direction);\n\n    tiles.forEach((tile, index) => {\n      const pos = tracker.positions[index];\n      this._tileStyler.setStyle(tile, pos.row, pos.col);\n    });\n\n    this._setListStyle(this._tileStyler.getComputedHeight());\n  }\n\n  /** Sets style on the main grid-list element, given the style name and value. */\n  _setListStyle(style: [string, string | null] | null): void {\n    if (style) {\n      (this._element.nativeElement.style as any)[style[0]] = style[1];\n    }\n  }\n\n  static ngAcceptInputType_cols: NumberInput;\n}\n","<div>\n  <ng-content></ng-content>\n</div>","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {MatLineModule, MatCommonModule} from '@angular/material/core';\nimport {\n  MatGridTile, MatGridTileText, MatGridTileFooterCssMatStyler,\n  MatGridTileHeaderCssMatStyler, MatGridAvatarCssMatStyler\n} from './grid-tile';\nimport {MatGridList} from './grid-list';\n\n\n@NgModule({\n  imports: [MatLineModule, MatCommonModule],\n  exports: [\n    MatGridList,\n    MatGridTile,\n    MatGridTileText,\n    MatLineModule,\n    MatCommonModule,\n    MatGridTileHeaderCssMatStyler,\n    MatGridTileFooterCssMatStyler,\n    MatGridAvatarCssMatStyler\n  ],\n  declarations: [\n    MatGridList,\n    MatGridTile,\n    MatGridTileText,\n    MatGridTileHeaderCssMatStyler,\n    MatGridTileFooterCssMatStyler,\n    MatGridAvatarCssMatStyler\n  ],\n})\nexport class MatGridListModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {TileCoordinator} from './tile-coordinator';\n\nexport * from './grid-list-module';\nexport * from './grid-list';\nexport * from './grid-tile';\n\n// Privately exported for the grid-list harness.\nexport const ɵTileCoordinator = TileCoordinator;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}