chore(table): remove data prefix (#5379)

* chore(table): rename data table

* fix demo template url

* move to cdk directory

* remove custom matchers

* rebase

* rebase

* aot fix
This commit is contained in:
Andrew Seguin
2017-06-29 14:21:20 -07:00
committed by tinayuangao
parent e3a2f30e57
commit 2ff0433977
29 changed files with 118 additions and 121 deletions
+3 -3
View File
@@ -117,9 +117,9 @@ groups:
data-table:
conditions:
files:
- 'src/(demo-app|e2e-app|lib)/data-table/*'
- 'src/lib/core/data-table/*'
- 'src/material-examples/data-table-*'
- 'src/(demo-app|e2e-app|lib)/table/*'
- 'src/lib/core/table/*'
- 'src/material-examples/table-*'
users:
- andrewseguin # primary
- jelbourn
+1
View File
@@ -7,3 +7,4 @@
*/
export * from './coercion/index';
export * from './table/index';
@@ -9,7 +9,7 @@
import {ContentChild, Directive, ElementRef, Input, Renderer2, TemplateRef} from '@angular/core';
/**
* Cell definition for a CDK data-table.
* Cell definition for a CDK table.
* Captures the template of a column's data row cell as well as cell-specific properties.
*/
@Directive({selector: '[cdkCellDef]'})
@@ -18,7 +18,7 @@ export class CdkCellDef {
}
/**
* Header cell definition for a CDK data-table.
* Header cell definition for a CDK table.
* Captures the template of a column's header cell and as well as cell-specific properties.
*/
@Directive({selector: '[cdkHeaderCellDef]'})
@@ -27,7 +27,7 @@ export class CdkHeaderCellDef {
}
/**
* Column definition for the CDK data-table.
* Column definition for the CDK table.
* Defines a set of cells available for a table column.
*/
@Directive({selector: '[cdkColumnDef]'})
@@ -8,12 +8,14 @@
import {CommonModule} from '@angular/common';
import {NgModule} from '@angular/core';
import {HeaderRowPlaceholder, RowPlaceholder, CdkTable} from './data-table';
import {HeaderRowPlaceholder, RowPlaceholder, CdkTable} from './table';
import {CdkCellOutlet, CdkHeaderRow, CdkHeaderRowDef, CdkRow, CdkRowDef} from './row';
import {CdkColumnDef, CdkHeaderCellDef, CdkHeaderCell, CdkCell, CdkCellDef} from './cell';
export * from './data-source';
export * from './data-table';
export * from './table';
export * from './cell';
export * from './row';
const EXPORTED_DECLARATIONS = [
CdkTable,
@@ -37,4 +39,4 @@ const EXPORTED_DECLARATIONS = [
declarations: [EXPORTED_DECLARATIONS]
})
export class CdkDataTableModule { }
export class CdkTableModule { }
@@ -66,7 +66,7 @@ export abstract class BaseRowDef {
}
/**
* Header row definition for the CDK data-table.
* Header row definition for the CDK table.
* Captures the header row's template and other header properties such as the columns to display.
*/
@Directive({
@@ -80,7 +80,7 @@ export class CdkHeaderRowDef extends BaseRowDef {
}
/**
* Data row definition for the CDK data-table.
* Data row definition for the CDK table.
* Captures the header row's template and other row properties such as the columns to display.
*/
@Directive({
@@ -133,7 +133,7 @@ export class CdkCellOutlet {
/**
* Static property containing the latest constructed instance of this class.
* Used by the CDK data-table when each CdkHeaderRow and CdkRow component is created using
* 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.
@@ -1,13 +1,12 @@
import {async, ComponentFixture, TestBed} from '@angular/core/testing';
import {Component, ViewChild} from '@angular/core';
import {CdkTable} from './data-table';
import {CdkTable} from './table';
import {CollectionViewer, DataSource} from './data-source';
import {BehaviorSubject} from 'rxjs/BehaviorSubject';
import {customMatchers} from '../testing/jasmine-matchers';
import {Observable} from 'rxjs/Observable';
import {combineLatest} from 'rxjs/observable/combineLatest';
import {map} from '../rxjs/index';
import {CdkDataTableModule} from './index';
import {CdkTableModule} from './index';
import {map} from 'rxjs/operator/map';
describe('CdkTable', () => {
let fixture: ComponentFixture<SimpleCdkTableApp>;
@@ -18,11 +17,8 @@ describe('CdkTable', () => {
let tableElement: HTMLElement;
beforeEach(async(() => {
jasmine.addMatchers(customMatchers);
jasmine.addMatchers(tableCustomMatchers);
TestBed.configureTestingModule({
imports: [CdkDataTableModule],
imports: [CdkTableModule],
declarations: [
SimpleCdkTableApp,
DynamicDataSourceCdkTableApp,
@@ -82,14 +78,18 @@ describe('CdkTable', () => {
});
it('with the right accessibility roles', () => {
expect(tableElement).toBeRole('grid');
expect(tableElement.getAttribute('role')).toBe('grid');
expect(getHeaderRow(tableElement)).toBeRole('row');
getHeaderCells(tableElement).forEach(cell => expect(cell).toBeRole('columnheader'));
expect(getHeaderRow(tableElement).getAttribute('role')).toBe('row');
getHeaderCells(tableElement).forEach(cell => {
expect(cell.getAttribute('role')).toBe('columnheader');
});
getRows(tableElement).forEach(row => {
expect(row).toBeRole('row');
getCells(row).forEach(cell => expect(cell).toBeRole('gridcell'));
expect(row.getAttribute('role')).toBe('row');
getCells(row).forEach(cell => {
expect(cell.getAttribute('role')).toBe('gridcell');
});
});
});
});
@@ -105,7 +105,7 @@ describe('CdkTable', () => {
fixture = TestBed.createComponent(CustomRoleCdkTableApp);
fixture.detectChanges();
expect(fixture.nativeElement.querySelector('cdk-table')).toBeRole('treegrid');
expect(fixture.nativeElement.querySelector('cdk-table').getAttribute('role')).toBe('treegrid');
});
it('should re-render the rows when the data changes', () => {
@@ -271,7 +271,7 @@ describe('CdkTable', () => {
expect(dataSource.data.length).toBe(3);
let data = dataSource.data;
expect(tableElement).toMatchTableContent([
expectTableToMatchContent(tableElement, [
['Column A', 'Column B', 'Column C'],
[data[0].a, data[0].b, data[0].c],
[data[1].a, data[1].b, data[1].c],
@@ -284,7 +284,7 @@ describe('CdkTable', () => {
fixture.detectChanges();
data = dataSource.data;
expect(tableElement).toMatchTableContent([
expectTableToMatchContent(tableElement, [
['Column A', 'Column B', 'Column C'],
[data[0].a, data[0].b, data[0].c],
[data[1].a, data[1].b, data[1].c],
@@ -303,7 +303,7 @@ describe('CdkTable', () => {
// Expect that the component has no data source and the table element reflects empty data.
expect(component.dataSource).toBe(undefined);
expect(tableElement).toMatchTableContent([
expectTableToMatchContent(tableElement, [
['Column A']
]);
@@ -314,7 +314,7 @@ describe('CdkTable', () => {
expect(dynamicDataSource.isConnected).toBe(true);
let data = component.dataSource.data;
expect(tableElement).toMatchTableContent([
expectTableToMatchContent(tableElement, [
['Column A'],
[data[0].a],
[data[1].a],
@@ -327,7 +327,7 @@ describe('CdkTable', () => {
// Expect that the old data source has been disconnected.
expect(dynamicDataSource.isConnected).toBe(false);
expect(tableElement).toMatchTableContent([
expectTableToMatchContent(tableElement, [
['Column A']
]);
});
@@ -418,7 +418,7 @@ describe('CdkTable', () => {
expect(dataSource.data.length).toBe(3);
let data = dataSource.data;
expect(tableElement).toMatchTableContent([
expectTableToMatchContent(tableElement, [
['Column A', 'Column B', 'Column C'],
[data[0].a, data[0].b, data[0].c],
[data[1].a, data[1].b, data[1].c],
@@ -433,7 +433,7 @@ describe('CdkTable', () => {
dataSource.data.forEach(rowData => changedTableContent.push([rowData.c, rowData.b]));
data = dataSource.data;
expect(tableElement).toMatchTableContent([
expectTableToMatchContent(tableElement, [
['Column C', 'Column B'],
[data[0].c, data[0].b],
[data[1].c, data[1].b],
@@ -646,50 +646,36 @@ function getHeaderCells(tableElement: Element): Element[] {
return getElements(getHeaderRow(tableElement), '.cdk-header-cell');
}
const tableCustomMatchers: jasmine.CustomMatcherFactories = {
toMatchTableContent: () => {
return {
compare: function (tableElement: Element, expectedTableContent: any[]) {
const missedExpectations: string[] = [];
function checkCellContent(cell: Element, expectedTextContent: string) {
const actualTextContent = cell.textContent!.trim();
if (actualTextContent !== expectedTextContent) {
missedExpectations.push(
`Expected cell contents to be ${expectedTextContent} but was ${actualTextContent}`);
}
}
// Check header cells
const expectedHeaderContent = expectedTableContent.shift();
getHeaderCells(tableElement).forEach((cell, index) => {
const expected = expectedHeaderContent ?
expectedHeaderContent[index] :
null;
checkCellContent(cell, expected);
});
// Check data row cells
getRows(tableElement).forEach((row, rowIndex) => {
getCells(row).forEach((cell, cellIndex) => {
const expected = expectedHeaderContent ?
expectedTableContent[rowIndex][cellIndex] :
null;
checkCellContent(cell, expected);
});
});
if (missedExpectations.length) {
return {
pass: false,
message: missedExpectations.join('\n')
};
}
return {
pass: true,
message: 'Table contained the right content'
};
}
};
function expectTableToMatchContent(tableElement: Element, expectedTableContent: any[]) {
const missedExpectations: string[] = [];
function checkCellContent(cell: Element, expectedTextContent: string) {
const actualTextContent = cell.textContent!.trim();
if (actualTextContent !== expectedTextContent) {
missedExpectations.push(
`Expected cell contents to be ${expectedTextContent} but was ${actualTextContent}`);
}
}
};
// Check header cells
const expectedHeaderContent = expectedTableContent.shift();
getHeaderCells(tableElement).forEach((cell, index) => {
const expected = expectedHeaderContent ?
expectedHeaderContent[index] :
null;
checkCellContent(cell, expected);
});
// Check data row cells
getRows(tableElement).forEach((row, rowIndex) => {
getCells(row).forEach((cell, cellIndex) => {
const expected = expectedHeaderContent ?
expectedTableContent[rowIndex][cellIndex] :
null;
checkCellContent(cell, expected);
});
});
if (missedExpectations.length) {
fail(missedExpectations.join('\n'));
}
}
@@ -32,7 +32,7 @@ import {
import {CollectionViewer, DataSource} from './data-source';
import {CdkCellOutlet, CdkCellOutletRowContext, CdkHeaderRowDef, CdkRowDef} from './row';
import {merge} from 'rxjs/observable/merge';
import {takeUntil} from '../rxjs/index';
import {takeUntil} from 'rxjs/operator/takeUntil';
import {BehaviorSubject} from 'rxjs/BehaviorSubject';
import {Subscription} from 'rxjs/Subscription';
import {Subject} from 'rxjs/Subject';
@@ -43,8 +43,8 @@ import {CdkCellDef, CdkColumnDef, CdkHeaderCellDef} from './cell';
* @param id Id whose lookup failed.
* @docs-private
*/
export function getDataTableUnknownColumnError(id: string) {
return new Error(`md-data-table: Could not find column with id "${id}".`);
export function getTableUnknownColumnError(id: string) {
return new Error(`cdk-table: Could not find column with id "${id}".`);
}
/**
@@ -357,7 +357,7 @@ export class CdkTable<T> implements CollectionViewer {
const column = this._columnDefinitionsByName.get(columnId);
if (!column) {
throw getDataTableUnknownColumnError(columnId);
throw getTableUnknownColumnError(columnId);
}
return column.headerCell;
@@ -374,7 +374,7 @@ export class CdkTable<T> implements CollectionViewer {
const column = this._columnDefinitionsByName.get(columnId);
if (!column) {
throw getDataTableUnknownColumnError(columnId);
throw getTableUnknownColumnError(columnId);
}
return column.cell;
+6 -6
View File
@@ -37,13 +37,12 @@ import {PlatformDemo} from './platform/platform-demo';
import {AutocompleteDemo} from './autocomplete/autocomplete-demo';
import {InputDemo} from './input/input-demo';
import {StyleDemo} from './style/style-demo';
import {DataTableDemo} from './data-table/data-table-demo';
import {PeopleDatabase} from './data-table/people-database';
import {TableDemo} from './table/table-demo';
import {PeopleDatabase} from './table/people-database';
import {DatepickerDemo} from './datepicker/datepicker-demo';
import {TypographyDemo} from './typography/typography-demo';
import {ExpansionDemo} from './expansion/expansion-demo';
import {
CdkDataTableModule,
FullscreenOverlayContainer,
MdAutocompleteModule,
MdButtonModule,
@@ -79,7 +78,8 @@ import {
OverlayContainer,
StyleModule
} from '@angular/material';
import {TableHeaderDemo} from './data-table/table-header-demo';
import {CdkTableModule} from '@angular/cdk';
import {TableHeaderDemo} from './table/table-header-demo';
/**
* NgModule that includes all Material modules that are required to serve the demo-app.
@@ -117,7 +117,7 @@ import {TableHeaderDemo} from './data-table/table-header-demo';
MdToolbarModule,
MdTooltipModule,
MdNativeDateModule,
CdkDataTableModule,
CdkTableModule,
StyleModule
]
})
@@ -142,7 +142,6 @@ export class DemoMaterialModule {}
CardDemo,
ChipsDemo,
CheckboxDemo,
DataTableDemo,
DatepickerDemo,
DemoApp,
DemoAppOnPush,
@@ -177,6 +176,7 @@ export class DemoMaterialModule {}
TableHeaderDemo,
ToolbarDemo,
TooltipDemo,
TableDemo,
TabsDemo,
SunnyTabContent,
RainyTabContent,
+1 -1
View File
@@ -40,7 +40,6 @@ export class DemoApp {
{name: 'Card', route: 'card'},
{name: 'Chips', route: 'chips'},
{name: 'Checkbox', route: 'checkbox'},
{name: 'Data Table', route: 'data-table'},
{name: 'Datepicker', route: 'datepicker'},
{name: 'Dialog', route: 'dialog'},
{name: 'Expansion Panel', route: 'expansion'},
@@ -62,6 +61,7 @@ export class DemoApp {
{name: 'Slider', route: 'slider'},
{name: 'Slide Toggle', route: 'slide-toggle'},
{name: 'Snack Bar', route: 'snack-bar'},
{name: 'Table', route: 'table'},
{name: 'Tabs', route: 'tabs'},
{name: 'Toolbar', route: 'toolbar'},
{name: 'Tooltip', route: 'tooltip'},
+2 -2
View File
@@ -33,7 +33,7 @@ import {AutocompleteDemo} from '../autocomplete/autocomplete-demo';
import {InputDemo} from '../input/input-demo';
import {StyleDemo} from '../style/style-demo';
import {DatepickerDemo} from '../datepicker/datepicker-demo';
import {DataTableDemo} from '../data-table/data-table-demo';
import {TableDemo} from '../table/table-demo';
import {TypographyDemo} from '../typography/typography-demo';
import {ExpansionDemo} from '../expansion/expansion-demo';
@@ -43,7 +43,7 @@ export const DEMO_APP_ROUTES: Routes = [
{path: 'button', component: ButtonDemo},
{path: 'card', component: CardDemo},
{path: 'chips', component: ChipsDemo},
{path: 'data-table', component: DataTableDemo},
{path: 'table', component: TableDemo},
{path: 'datepicker', component: DatepickerDemo},
{path: 'radio', component: RadioDemo},
{path: 'select', component: SelectDemo},
@@ -1,4 +1,5 @@
import {DataSource, MdPaginator, MdSort} from '@angular/material';
import {MdPaginator, MdSort} from '@angular/material';
import {DataSource} from '@angular/cdk';
import {Observable} from 'rxjs/Observable';
import {PeopleDatabase, UserData} from './people-database';
import 'rxjs/add/observable/merge';
@@ -10,11 +10,11 @@ export type TrackByStrategy = 'id' | 'reference' | 'index';
@Component({
moduleId: module.id,
selector: 'data-table-demo',
templateUrl: 'data-table-demo.html',
styleUrls: ['data-table-demo.css'],
selector: 'table-demo',
templateUrl: 'table-demo.html',
styleUrls: ['table-demo.css'],
})
export class DataTableDemo {
export class TableDemo {
dataSource: PersonDataSource | null;
propertiesToDisplay: UserProperties[] = [];
trackByStrategy: TrackByStrategy = 'reference';
+1 -3
View File
@@ -44,7 +44,6 @@ import {PlatformModule} from './core/platform/index';
import {MdAutocompleteModule} from './autocomplete/index';
import {StyleModule} from './core/style/index';
import {MdDatepickerModule} from './datepicker/index';
import {CdkDataTableModule} from './core/data-table/index';
import {MdExpansionModule} from './expansion/index';
import {MdTableModule} from './table/index';
import {MdSortModule} from './sort/index';
@@ -87,8 +86,7 @@ const MATERIAL_MODULES = [
A11yModule,
PlatformModule,
MdCommonModule,
ObserveContentModule,
CdkDataTableModule,
ObserveContentModule
];
/** @deprecated */
+1 -1
View File
@@ -1,4 +1,4 @@
`<md-paginator>` is a navigation for pages information, typically used with a data-table.
`<md-paginator>` is a navigation for pages information, typically used with a table.
<!-- example(pagination-overview) -->
+1 -2
View File
@@ -21,8 +21,6 @@ export * from './button-toggle/index';
export * from './card/index';
export * from './chips/index';
export * from './checkbox/index';
export * from './core/data-table/index';
export * from './table/index';
export * from './datepicker/index';
export * from './dialog/index';
export * from './expansion/index';
@@ -41,6 +39,7 @@ export * from './slider/index';
export * from './slide-toggle/index';
export * from './snack-bar/index';
export * from './sort/index';
export * from './table/index';
export * from './tabs/index';
export * from './tabs/tab-nav-bar/index';
export * from './toolbar/index';
+1 -1
View File
@@ -12,7 +12,7 @@ import {
} from '@angular/core';
import {MdSort, MdSortable} from './sort';
import {MdSortHeaderIntl} from './sort-header-intl';
import {CdkColumnDef} from '../core/data-table/cell';
import {CdkColumnDef} from '@angular/cdk';
import {coerceBooleanProperty} from '../core';
import {getMdSortHeaderNotContainedWithinMdSortError} from './sort-errors';
import {Subscription} from 'rxjs/Subscription';
+2 -2
View File
@@ -1,7 +1,7 @@
import {async, ComponentFixture, TestBed} from '@angular/core/testing';
import {Component, ElementRef, ViewChild} from '@angular/core';
import {MdSort, MdSortHeader, Sort, SortDirection, MdSortModule} from './index';
import {CdkDataTableModule, DataSource, CollectionViewer} from '../core/data-table/index';
import {CdkTableModule, DataSource, CollectionViewer} from '@angular/cdk';
import {Observable} from 'rxjs/Observable';
import {dispatchMouseEvent} from '../core/testing/dispatch-events';
import {
@@ -19,7 +19,7 @@ describe('MdSort', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [MdSortModule, CdkDataTableModule],
imports: [MdSortModule, CdkTableModule],
declarations: [
SimpleMdSortApp,
CdkTableMdSortApp,
+7 -3
View File
@@ -7,7 +7,11 @@
*/
import {Directive, ElementRef, Renderer2} from '@angular/core';
import {CdkCell, CdkColumnDef, CdkHeaderCell} from '../core/data-table/cell';
import {CdkCell, CdkColumnDef, CdkHeaderCell} from '@angular/cdk';
/** Workaround for https://github.com/angular/angular/issues/17849 */
export const _MdHeaderCellBase = CdkHeaderCell;
export const _MdCell = CdkCell;
/** Header cell template container that adds the right classes and role. */
@Directive({
@@ -17,7 +21,7 @@ import {CdkCell, CdkColumnDef, CdkHeaderCell} from '../core/data-table/cell';
'role': 'columnheader',
},
})
export class MdHeaderCell extends CdkHeaderCell {
export class MdHeaderCell extends _MdHeaderCellBase {
constructor(columnDef: CdkColumnDef,
elementRef: ElementRef,
renderer: Renderer2) {
@@ -34,7 +38,7 @@ export class MdHeaderCell extends CdkHeaderCell {
'role': 'gridcell',
},
})
export class MdCell extends CdkCell {
export class MdCell extends _MdCell {
constructor(columnDef: CdkColumnDef,
elementRef: ElementRef,
renderer: Renderer2) {
+2 -2
View File
@@ -8,7 +8,7 @@
import {NgModule} from '@angular/core';
import {MdTable} from './table';
import {CdkDataTableModule} from '../core/data-table/index';
import {CdkTableModule} from '@angular/cdk';
import {MdCell, MdHeaderCell} from './cell';
import {MdHeaderRow, MdRow} from './row';
import {CommonModule} from '@angular/common';
@@ -19,7 +19,7 @@ export * from './table';
export * from './row';
@NgModule({
imports: [CdkDataTableModule, CommonModule, MdCommonModule],
imports: [CdkTableModule, CommonModule, MdCommonModule],
exports: [MdTable, MdHeaderCell, MdCell, MdHeaderRow, MdRow],
declarations: [MdTable, MdHeaderCell, MdCell, MdHeaderRow, MdRow],
})
+7 -3
View File
@@ -7,7 +7,11 @@
*/
import {ChangeDetectionStrategy, Component} from '@angular/core';
import {CdkHeaderRow, CdkRow, CDK_ROW_TEMPLATE} from '../core/data-table/row';
import {CdkHeaderRow, CdkRow, CDK_ROW_TEMPLATE} from '@angular/cdk';
/** Workaround for https://github.com/angular/angular/issues/17849 */
export const _MdHeaderRow = CdkHeaderRow;
export const _MdRow = CdkHeaderRow;
/** Header template container that contains the cell outlet. Adds the right class and role. */
@Component({
@@ -19,7 +23,7 @@ import {CdkHeaderRow, CdkRow, CDK_ROW_TEMPLATE} from '../core/data-table/row';
},
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class MdHeaderRow extends CdkHeaderRow { }
export class MdHeaderRow extends _MdHeaderRow { }
/** Data row template container that contains the cell outlet. Adds the right class and role. */
@Component({
@@ -31,4 +35,4 @@ export class MdHeaderRow extends CdkHeaderRow { }
},
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class MdRow extends CdkRow { }
export class MdRow extends _MdRow { }
+3 -4
View File
@@ -1,10 +1,9 @@
import {async, ComponentFixture, TestBed} from '@angular/core/testing';
import {Component, ViewChild} from '@angular/core';
import {CdkTable} from '../core/data-table/data-table';
import {DataSource} from '../core/data-table/data-source';
import {CdkTable, DataSource, CdkTableModule} from '@angular/cdk';
import {} from '../core/data-table/data-source';
import {BehaviorSubject} from 'rxjs/BehaviorSubject';
import {Observable} from 'rxjs/Observable';
import {CdkDataTableModule} from '../core/data-table/index';
import {MdTableModule} from './index';
describe('MdTable', () => {
@@ -12,7 +11,7 @@ describe('MdTable', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [MdTableModule, CdkDataTableModule],
imports: [MdTableModule, CdkTableModule],
declarations: [SimpleMdTableApp],
}).compileComponents();
}));
+5 -2
View File
@@ -7,7 +7,10 @@
*/
import {ChangeDetectionStrategy, Component, ViewEncapsulation} from '@angular/core';
import {CDK_TABLE_TEMPLATE, CdkTable} from '../core/data-table/data-table';
import {CDK_TABLE_TEMPLATE, CdkTable} from '@angular/cdk';
/** Workaround for https://github.com/angular/angular/issues/17849 */
export const _MdTable = CdkTable;
/**
* Wrapper for the CdkTable with Material design styles.
@@ -23,4 +26,4 @@ import {CDK_TABLE_TEMPLATE, CdkTable} from '../core/data-table/data-table';
encapsulation: ViewEncapsulation.None,
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class MdTable<T> extends CdkTable<T> { }
export class MdTable<T> extends _MdTable<T> { }