license import { ChangeDetectionStrategy , Component , Directive , IterableChanges , IterableDiffer , IterableDiffers , OnChanges , OnDestroy , SimpleChanges , TemplateRef , ViewContainerRef , ViewEncapsulation , } from '@angular/core' ; import { CanStick , CanStickCtor , mixinHasStickyInput } from './can-stick' ; import { CdkCellDef , CdkColumnDef } from './cell' ; /**
 * The row template that can be used by the mat-table. Should not be used outside of the
 * material library.
 */ export const CDK_ROW_TEMPLATE = `<ng-container cdkCellOutlet></ng-container>` ; /**
 * Base class for the CdkHeaderRowDef and CdkRowDef that handles checking their columns inputs
 * for changes and notifying the table.
 */ export abstract class BaseRowDef implements OnChanges { /** The columns to be displayed on this row. */ columns : Iterable < string > ; /** Differ used to check if any changes were made to the columns. */ protected _columnsDiffer : IterableDiffer < any > ; constructor ( docs-private public template , protected _differs ) { } ngOnChanges ( changes ) { if ( ! this . _columnsDiffer ) { const columns = ( changes [ 'columns' ] && changes [ 'columns' ] . currentValue ) || [ ] ; this . _columnsDiffer = this . _differs . find ( columns ) . create ( ) ; this . _columnsDiffer . diff ( columns ) ; } } /**
     * Returns the difference between the current columns and the columns from the last diff, or null
     * if there is no difference.
     */ getColumnsDiff ( ) { return this . _columnsDiffer . diff ( this . columns ) ; } /** Gets this row def's relevant cell template from the provided column def. */ extractCellTemplate ( column ) { if ( this instanceof CdkHeaderRowDef ) { return column . headerCell . template ; } if ( this instanceof CdkFooterRowDef ) { return column . footerCell . template ; } else { return column . cell . template ; } } } docs-private export class CdkHeaderRowDefBase extends BaseRowDef { } export const _CdkHeaderRowDefBase = mixinHasStickyInput ( CdkHeaderRowDefBase ) ; /**
 * Header row definition for the CDK table.
 * Captures the header row's template and other header properties such as the columns to display.
 */ @ Directive ( { selector : '[cdkHeaderRowDef]' , inputs : [ 'columns: cdkHeaderRowDef' , 'sticky: cdkHeaderRowDefSticky' ] , } ) export class CdkHeaderRowDef extends _CdkHeaderRowDefBase implements CanStick , OnChanges { constructor ( template , _differs ) { super ( template , _differs ) ; } ngOnChanges ( changes ) { super . ngOnChanges ( changes ) ; } } docs-private export class CdkFooterRowDefBase extends BaseRowDef { } export const _CdkFooterRowDefBase = mixinHasStickyInput ( CdkFooterRowDefBase ) ; /**
 * Footer row definition for the CDK table.
 * Captures the footer row's template and other footer properties such as the columns to display.
 */ @ Directive ( { selector : '[cdkFooterRowDef]' , inputs : [ 'columns: cdkFooterRowDef' , 'sticky: cdkFooterRowDefSticky' ] , } ) export class CdkFooterRowDef extends _CdkFooterRowDefBase implements CanStick , OnChanges { constructor ( template , _differs ) { super ( template , _differs ) ; } ngOnChanges ( changes ) { super . ngOnChanges ( changes ) ; } } /**
 * Data row definition for the CDK table.
 * Captures the header row's template and other row properties such as the columns to display and
 * a when predicate that describes when this row should be used.
 */ @ Directive ( { selector : '[cdkRowDef]' , inputs : [ 'columns: cdkRowDefColumns' , 'when: cdkRowDefWhen' ] , } ) export class CdkRowDef < T > extends BaseRowDef { /**
     * Function that should return true if this row template should be used for the provided index
     * and row data. If left undefined, this row will be considered the default row template to use
     * when no other when functions return true for the data.
     * For every row, there must be at least one when function that passes or an undefined to default.
     */ when : ( index : number , rowData : T ) => boolean ; constructor ( template , _differs ) { super ( template , _differs ) ; } } /** Context provided to the row cells when `multiTemplateDataRows` is false */ export interface CdkCellOutletRowContext < T > { /** Data for the row that this cell is located within. */ $implicit ? : T ; /** Index of the data object in the provided data array. */ index ? : number ; /** Length of the number of total rows. */ count ? : number ; /** True if this cell is contained in the first row. */ first ? : boolean ; /** True if this cell is contained in the last row. */ last ? : boolean ; /** True if this cell is contained in a row with an even-numbered index. */ even ? : boolean ; /** True if this cell is contained in a row with an odd-numbered index. */ odd ? : boolean ; } /**
 * Context provided to the row cells when `multiTemplateDataRows` is true. This context is the same
 * as CdkCellOutletRowContext except that the single `index` value is replaced by `dataIndex` and
 * `renderIndex`.
 */ export interface CdkCellOutletMultiRowContext < T > { /** Data for the row that this cell is located within. */ $implicit ? : T ; /** Index of the data object in the provided data array. */ dataIndex ? : number ; /** Index location of the rendered row that this cell is located within. */ renderIndex ? : number ; /** Length of the number of total rows. */ count ? : number ; /** True if this cell is contained in the first row. */ first ? : boolean ; /** True if this cell is contained in the last row. */ last ? : boolean ; /** True if this cell is contained in a row with an even-numbered index. */ even ? : boolean ; /** True if this cell is contained in a row with an odd-numbered index. */ odd ? : boolean ; } docs-private @ Directive ( { selector : '[cdkCellOutlet]' } ) export class CdkCellOutlet implements OnDestroy { /** The ordered list of cells to render within this outlet's view container */ cells : CdkCellDef [ ] ; /** The data context to be provided to each cell */ context : any ; /**
     * Static property containing the latest constructed instance of this class.
     * Used by the CDK table when each CdkHeaderRow and CdkRow component is created using
     * createEmbeddedView. After one of these components are created, this property will provide
     * a handle to provide that component's cells and context. After init, the CdkCellOutlet will
     * construct the cells with the provided context.
     */ static mostRecentCellOutlet : CdkCellOutlet | null = null ; constructor ( public _viewContainer ) { CdkCellOutlet . mostRecentCellOutlet = this ; } ngOnDestroy ( ) { if ( CdkCellOutlet . mostRecentCellOutlet === this ) { CdkCellOutlet . mostRecentCellOutlet = null ; } } } /** Header template container that contains the cell outlet. Adds the right class and role. */ @ Component ( { moduleId : module . id , selector : 'cdk-header-row, tr[cdk-header-row]' , template : CDK_ROW_TEMPLATE , host : { 'class' : 'cdk-header-row' , 'role' : 'row' , } , changeDetection : ChangeDetectionStrategy . OnPush , encapsulation : ViewEncapsulation . None , } ) export class CdkHeaderRow { } /** Footer template container that contains the cell outlet. Adds the right class and role. */ @ Component ( { moduleId : module . id , selector : 'cdk-footer-row, tr[cdk-footer-row]' , template : CDK_ROW_TEMPLATE , host : { 'class' : 'cdk-footer-row' , 'role' : 'row' , } , changeDetection : ChangeDetectionStrategy . OnPush , encapsulation : ViewEncapsulation . None , } ) export class CdkFooterRow { } /** Data row template container that contains the cell outlet. Adds the right class and role. */ @ Component ( { moduleId : module . id , selector : 'cdk-row, tr[cdk-row]' , template : CDK_ROW_TEMPLATE , host : { 'class' : 'cdk-row' , 'role' : 'row' , } , changeDetection : ChangeDetectionStrategy . OnPush , encapsulation : ViewEncapsulation . None , } ) export class CdkRow { }