blob: 3d89dd218283a35ae26159879d318bf0654437f7 [file] [log] [blame]
{
"version": 3,
"file": "covalent-core-data-table.js",
"sources": [
"ng://@covalent/core/data-table/out/data-table.module.ts",
"ng://@covalent/core/data-table/out/services/data-table.service.ts",
"ng://@covalent/core/data-table/out/data-table-table/data-table-table.component.ts",
"ng://@covalent/core/data-table/out/data-table-cell/data-table-cell.component.ts",
"ng://@covalent/core/data-table/out/data-table-column/data-table-column.component.ts",
"ng://@covalent/core/data-table/out/data-table.component.ts",
"ng://@covalent/core/data-table/out/directives/data-table-template.directive.ts",
"ng://@covalent/core/data-table/out/data-table-row/data-table-row.component.ts"
],
"sourcesContent": [
"import { NgModule, Type } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatPseudoCheckboxModule } from '@angular/material/core';\n\nimport { TdDataTableComponent } from './data-table.component';\nimport { TdDataTableColumnComponent } from './data-table-column/data-table-column.component';\nimport { TdDataTableCellComponent } from './data-table-cell/data-table-cell.component';\nimport { TdDataTableRowComponent, TdDataTableColumnRowComponent } from './data-table-row/data-table-row.component';\nimport { TdDataTableTableComponent } from './data-table-table/data-table-table.component';\nimport { TdDataTableTemplateDirective } from './directives/data-table-template.directive';\n\nimport { DATA_TABLE_PROVIDER } from './services/data-table.service';\n\nconst TD_DATA_TABLE: Type<any>[] = [\n TdDataTableComponent,\n TdDataTableTemplateDirective,\n\n TdDataTableColumnComponent,\n TdDataTableCellComponent,\n TdDataTableRowComponent,\n TdDataTableColumnRowComponent,\n TdDataTableTableComponent,\n];\n\n@NgModule({\n imports: [\n CommonModule,\n MatCheckboxModule,\n MatTooltipModule,\n MatIconModule,\n MatPseudoCheckboxModule,\n ],\n declarations: [\n TD_DATA_TABLE,\n ],\n exports: [\n TD_DATA_TABLE,\n ],\n providers: [\n DATA_TABLE_PROVIDER,\n ],\n})\nexport class CovalentDataTableModule {\n\n}\n",
"import { Injectable, Provider, SkipSelf, Optional } from '@angular/core';\n\nimport { TdDataTableSortingOrder, ITdDataTableColumn } from '../data-table.component';\n\n@Injectable()\nexport class TdDataTableService {\n\n /**\n * params:\n * - data: any[]\n * - searchTerm: string\n * - ignoreCase: boolean = false\n * - excludedColumns: string[] = []\n *\n * Searches [data] parameter for [searchTerm] matches and returns a new array with them.\n */\n filterData(data: any[], searchTerm: string, ignoreCase: boolean = false, excludedColumns?: string[]): any[] {\n let filter: string = searchTerm ? (ignoreCase ? searchTerm.toLowerCase() : searchTerm) : '';\n if (filter) {\n data = data.filter((item: any) => {\n const res: any = Object.keys(item).find((key: string) => {\n if (!excludedColumns || excludedColumns.indexOf(key) === -1) {\n const preItemValue: string = ('' + item[key]);\n const itemValue: string = ignoreCase ? preItemValue.toLowerCase() : preItemValue;\n return itemValue.indexOf(filter) > -1;\n }\n });\n return !(typeof res === 'undefined');\n });\n }\n return data;\n }\n\n /**\n * params:\n * - data: any[]\n * - sortBy: string\n * - sortOrder: TdDataTableSortingOrder = TdDataTableSortingOrder.Ascending\n *\n * Sorts [data] parameter by [sortBy] and [sortOrder] and returns the sorted data.\n */\n sortData(data: any[], sortBy: string, sortOrder: TdDataTableSortingOrder = TdDataTableSortingOrder.Ascending): any[] {\n if (sortBy) {\n data = Array.from(data); // Change the array reference to trigger OnPush and not mutate original array\n data.sort((a: any, b: any) => {\n let compA: any = a[sortBy];\n let compB: any = b[sortBy];\n let direction: number = 0;\n if (!Number.isNaN(Number.parseFloat(compA)) && !Number.isNaN(Number.parseFloat(compB))) {\n direction = Number.parseFloat(compA) - Number.parseFloat(compB);\n } else {\n if (compA < compB) {\n direction = -1;\n } else if (compA > compB) {\n direction = 1;\n }\n }\n return direction * (sortOrder === TdDataTableSortingOrder.Descending ? -1 : 1);\n });\n }\n return data;\n }\n\n /**\n * params:\n * - data: any[]\n * - fromRow: number\n * - toRow: : number\n *\n * Returns a section of the [data] parameter starting from [fromRow] and ending in [toRow].\n */\n pageData(data: any[], fromRow: number, toRow: number): any[] {\n if (fromRow >= 1) {\n data = data.slice(fromRow - 1, toRow);\n }\n return data;\n }\n}\n\nexport function DATA_TABLE_PROVIDER_FACTORY(\n parent: TdDataTableService): TdDataTableService {\n return parent || new TdDataTableService();\n}\n\nexport const DATA_TABLE_PROVIDER: Provider = {\n // If there is already a service available, use that. Otherwise, provide a new one.\n provide: TdDataTableService,\n deps: [[new Optional(), new SkipSelf(), TdDataTableService]],\n useFactory: DATA_TABLE_PROVIDER_FACTORY,\n};\n",
"import { Component, Renderer2, ElementRef } from '@angular/core';\n\n@Component({\n /* tslint:disable-next-line */\n selector: 'table[td-data-table]',\n styles: [`:host{\n width:100%;\n position:relative;\n border-spacing:0;\n overflow:hidden;\n border-collapse:collapse; }\n`],\n template: `<ng-content></ng-content>`,\n})\nexport class TdDataTableTableComponent {\n\n constructor(private _elementRef: ElementRef, private _renderer: Renderer2) {\n this._renderer.addClass(this._elementRef.nativeElement, 'td-data-table');\n }\n\n}\n",
"import { Component, Input, Renderer2, ElementRef, HostBinding } from '@angular/core';\n\n@Component({\n /* tslint:disable-next-line */\n selector: 'td[td-data-table-cell]',\n styles: [`:host{\n vertical-align:middle;\n text-align:left;\n padding:0; }\n html[dir=rtl] :host{\n text-align:right;\n unicode-bidi:embed; }\n body[dir=rtl] :host{\n text-align:right;\n unicode-bidi:embed; }\n [dir=rtl] :host{\n text-align:right;\n unicode-bidi:embed; }\n :host bdo[dir=rtl]{\n direction:rtl;\n unicode-bidi:bidi-override; }\n :host bdo[dir=ltr]{\n direction:ltr;\n unicode-bidi:bidi-override; }\n :host > .td-data-table-cell-content-wrapper{\n padding:0 28px;\n -webkit-box-sizing:border-box;\n box-sizing:border-box;\n display:-webkit-box;\n display:-ms-flexbox;\n display:flex;\n -webkit-box-orient:horizontal;\n -webkit-box-direction:normal;\n -ms-flex-direction:row;\n flex-direction:row;\n -webkit-box-align:center;\n -ms-flex-align:center;\n align-items:center;\n -ms-flex-line-pack:center;\n align-content:center;\n max-width:100%;\n -webkit-box-pack:start;\n -ms-flex-pack:start;\n justify-content:start; }\n :host > .td-data-table-cell-content-wrapper.td-data-table-cell-numeric{\n -webkit-box-pack:end;\n -ms-flex-pack:end;\n justify-content:flex-end; }\n :host:first-child > .td-data-table-cell-content-wrapper{\n padding-left:24px;\n padding-right:initial; }\n html[dir=rtl] :host:first-child > .td-data-table-cell-content-wrapper{\n padding-left:initial;\n unicode-bidi:embed; }\n body[dir=rtl] :host:first-child > .td-data-table-cell-content-wrapper{\n padding-left:initial;\n unicode-bidi:embed; }\n [dir=rtl] :host:first-child > .td-data-table-cell-content-wrapper{\n padding-left:initial;\n unicode-bidi:embed; }\n :host:first-child > .td-data-table-cell-content-wrapper bdo[dir=rtl]{\n direction:rtl;\n unicode-bidi:bidi-override; }\n :host:first-child > .td-data-table-cell-content-wrapper bdo[dir=ltr]{\n direction:ltr;\n unicode-bidi:bidi-override; }\n html[dir=rtl] :host:first-child > .td-data-table-cell-content-wrapper{\n padding-right:24px;\n unicode-bidi:embed; }\n body[dir=rtl] :host:first-child > .td-data-table-cell-content-wrapper{\n padding-right:24px;\n unicode-bidi:embed; }\n [dir=rtl] :host:first-child > .td-data-table-cell-content-wrapper{\n padding-right:24px;\n unicode-bidi:embed; }\n :host:first-child > .td-data-table-cell-content-wrapper bdo[dir=rtl]{\n direction:rtl;\n unicode-bidi:bidi-override; }\n :host:first-child > .td-data-table-cell-content-wrapper bdo[dir=ltr]{\n direction:ltr;\n unicode-bidi:bidi-override; }\n :host:last-child > .td-data-table-cell-content-wrapper{\n padding-left:28px;\n padding-right:24px; }\n html[dir=rtl] :host:last-child > .td-data-table-cell-content-wrapper{\n padding-left:24px;\n unicode-bidi:embed; }\n body[dir=rtl] :host:last-child > .td-data-table-cell-content-wrapper{\n padding-left:24px;\n unicode-bidi:embed; }\n [dir=rtl] :host:last-child > .td-data-table-cell-content-wrapper{\n padding-left:24px;\n unicode-bidi:embed; }\n :host:last-child > .td-data-table-cell-content-wrapper bdo[dir=rtl]{\n direction:rtl;\n unicode-bidi:bidi-override; }\n :host:last-child > .td-data-table-cell-content-wrapper bdo[dir=ltr]{\n direction:ltr;\n unicode-bidi:bidi-override; }\n html[dir=rtl] :host:last-child > .td-data-table-cell-content-wrapper{\n padding-right:28px;\n unicode-bidi:embed; }\n body[dir=rtl] :host:last-child > .td-data-table-cell-content-wrapper{\n padding-right:28px;\n unicode-bidi:embed; }\n [dir=rtl] :host:last-child > .td-data-table-cell-content-wrapper{\n padding-right:28px;\n unicode-bidi:embed; }\n :host:last-child > .td-data-table-cell-content-wrapper bdo[dir=rtl]{\n direction:rtl;\n unicode-bidi:bidi-override; }\n :host:last-child > .td-data-table-cell-content-wrapper bdo[dir=ltr]{\n direction:ltr;\n unicode-bidi:bidi-override; }\n :host > *{\n vertical-align:middle; }\n :host.mat-clickable{\n cursor:pointer; }\n :host.mat-clickable:focus{\n outline:none; }\n :host.mat-numeric{\n text-align:right; }\n html[dir=rtl] :host.mat-numeric{\n text-align:left;\n unicode-bidi:embed; }\n body[dir=rtl] :host.mat-numeric{\n text-align:left;\n unicode-bidi:embed; }\n [dir=rtl] :host.mat-numeric{\n text-align:left;\n unicode-bidi:embed; }\n :host.mat-numeric bdo[dir=rtl]{\n direction:rtl;\n unicode-bidi:bidi-override; }\n :host.mat-numeric bdo[dir=ltr]{\n direction:ltr;\n unicode-bidi:bidi-override; }\n`],\n template: `<div class=\"td-data-table-cell-content-wrapper\"\n [class.td-data-table-cell-numeric]=\"numeric\">\n <ng-content></ng-content>\n</div>`,\n})\nexport class TdDataTableCellComponent {\n\n /**\n * numeric?: boolean\n * Makes cell follow the numeric data-table specs.\n * Defaults to 'false'\n */\n @Input('numeric') numeric: boolean = false;\n\n @HostBinding('class.mat-numeric')\n get bindNumeric(): boolean {\n return this.numeric;\n }\n\n constructor(private _elementRef: ElementRef, private _renderer: Renderer2) {\n this._renderer.addClass(this._elementRef.nativeElement, 'td-data-table-cell');\n }\n\n}\n",
"import { Component, Input, Output, EventEmitter, Renderer2, ElementRef, HostBinding, HostListener, ViewChild } from '@angular/core';\n\nimport { TdDataTableSortingOrder } from '../data-table.component';\n\nexport interface ITdDataTableSortChangeEvent {\n order: TdDataTableSortingOrder;\n name: string;\n}\n\n@Component({\n /* tslint:disable-next-line */\n selector: 'th[td-data-table-column]',\n styles: [`:host{\n white-space:nowrap;\n position:relative;\n padding:0;\n vertical-align:middle;\n text-align:left; }\n :host > .td-data-table-heading{\n padding:0 28px; }\n :host:first-child > .td-data-table-heading{\n padding-left:24px;\n padding-right:initial; }\n html[dir=rtl] :host:first-child > .td-data-table-heading{\n padding-left:initial;\n unicode-bidi:embed; }\n body[dir=rtl] :host:first-child > .td-data-table-heading{\n padding-left:initial;\n unicode-bidi:embed; }\n [dir=rtl] :host:first-child > .td-data-table-heading{\n padding-left:initial;\n unicode-bidi:embed; }\n :host:first-child > .td-data-table-heading bdo[dir=rtl]{\n direction:rtl;\n unicode-bidi:bidi-override; }\n :host:first-child > .td-data-table-heading bdo[dir=ltr]{\n direction:ltr;\n unicode-bidi:bidi-override; }\n html[dir=rtl] :host:first-child > .td-data-table-heading{\n padding-right:24px;\n unicode-bidi:embed; }\n body[dir=rtl] :host:first-child > .td-data-table-heading{\n padding-right:24px;\n unicode-bidi:embed; }\n [dir=rtl] :host:first-child > .td-data-table-heading{\n padding-right:24px;\n unicode-bidi:embed; }\n :host:first-child > .td-data-table-heading bdo[dir=rtl]{\n direction:rtl;\n unicode-bidi:bidi-override; }\n :host:first-child > .td-data-table-heading bdo[dir=ltr]{\n direction:ltr;\n unicode-bidi:bidi-override; }\n :host:last-child > .td-data-table-heading{\n padding-left:28px;\n padding-right:24px; }\n html[dir=rtl] :host:last-child > .td-data-table-heading{\n padding-left:24px;\n unicode-bidi:embed; }\n body[dir=rtl] :host:last-child > .td-data-table-heading{\n padding-left:24px;\n unicode-bidi:embed; }\n [dir=rtl] :host:last-child > .td-data-table-heading{\n padding-left:24px;\n unicode-bidi:embed; }\n :host:last-child > .td-data-table-heading bdo[dir=rtl]{\n direction:rtl;\n unicode-bidi:bidi-override; }\n :host:last-child > .td-data-table-heading bdo[dir=ltr]{\n direction:ltr;\n unicode-bidi:bidi-override; }\n html[dir=rtl] :host:last-child > .td-data-table-heading{\n padding-right:28px;\n unicode-bidi:embed; }\n body[dir=rtl] :host:last-child > .td-data-table-heading{\n padding-right:28px;\n unicode-bidi:embed; }\n [dir=rtl] :host:last-child > .td-data-table-heading{\n padding-right:28px;\n unicode-bidi:embed; }\n :host:last-child > .td-data-table-heading bdo[dir=rtl]{\n direction:rtl;\n unicode-bidi:bidi-override; }\n :host:last-child > .td-data-table-heading bdo[dir=ltr]{\n direction:ltr;\n unicode-bidi:bidi-override; }\n :host mat-icon{\n height:16px;\n width:16px;\n font-size:16px !important;\n line-height:16px !important; }\n :host mat-icon.td-data-table-sort-icon{\n opacity:0;\n -webkit-transition:-webkit-transform 0.25s;\n transition:-webkit-transform 0.25s;\n transition:transform 0.25s;\n transition:transform 0.25s, -webkit-transform 0.25s;\n position:absolute;\n top:0; }\n :host mat-icon.td-data-table-sort-icon.mat-asc{\n -webkit-transform:rotate(0deg);\n transform:rotate(0deg); }\n :host mat-icon.td-data-table-sort-icon.mat-desc{\n -webkit-transform:rotate(180deg);\n transform:rotate(180deg); }\n :host:hover.mat-sortable mat-icon.td-data-table-sort-icon,\n :host.mat-active.mat-sortable mat-icon.td-data-table-sort-icon{\n opacity:1; }\n html[dir=rtl] :host{\n text-align:right;\n unicode-bidi:embed; }\n body[dir=rtl] :host{\n text-align:right;\n unicode-bidi:embed; }\n [dir=rtl] :host{\n text-align:right;\n unicode-bidi:embed; }\n :host bdo[dir=rtl]{\n direction:rtl;\n unicode-bidi:bidi-override; }\n :host bdo[dir=ltr]{\n direction:ltr;\n unicode-bidi:bidi-override; }\n :host > *{\n vertical-align:middle; }\n :host.mat-clickable{\n cursor:pointer; }\n :host.mat-clickable:focus{\n outline:none; }\n :host .td-data-table-heading{\n display:inline-block;\n position:relative; }\n :host.mat-numeric{\n text-align:right; }\n html[dir=rtl] :host.mat-numeric{\n text-align:left;\n unicode-bidi:embed; }\n body[dir=rtl] :host.mat-numeric{\n text-align:left;\n unicode-bidi:embed; }\n [dir=rtl] :host.mat-numeric{\n text-align:left;\n unicode-bidi:embed; }\n :host.mat-numeric bdo[dir=rtl]{\n direction:rtl;\n unicode-bidi:bidi-override; }\n :host.mat-numeric bdo[dir=ltr]{\n direction:ltr;\n unicode-bidi:bidi-override; }\n :host.mat-numeric mat-icon.td-data-table-sort-icon{\n margin-left:-22px;\n margin-right:initial; }\n html[dir=rtl] :host.mat-numeric mat-icon.td-data-table-sort-icon{\n margin-left:initial;\n unicode-bidi:embed; }\n body[dir=rtl] :host.mat-numeric mat-icon.td-data-table-sort-icon{\n margin-left:initial;\n unicode-bidi:embed; }\n [dir=rtl] :host.mat-numeric mat-icon.td-data-table-sort-icon{\n margin-left:initial;\n unicode-bidi:embed; }\n :host.mat-numeric mat-icon.td-data-table-sort-icon bdo[dir=rtl]{\n direction:rtl;\n unicode-bidi:bidi-override; }\n :host.mat-numeric mat-icon.td-data-table-sort-icon bdo[dir=ltr]{\n direction:ltr;\n unicode-bidi:bidi-override; }\n html[dir=rtl] :host.mat-numeric mat-icon.td-data-table-sort-icon{\n margin-right:-22px;\n unicode-bidi:embed; }\n body[dir=rtl] :host.mat-numeric mat-icon.td-data-table-sort-icon{\n margin-right:-22px;\n unicode-bidi:embed; }\n [dir=rtl] :host.mat-numeric mat-icon.td-data-table-sort-icon{\n margin-right:-22px;\n unicode-bidi:embed; }\n :host.mat-numeric mat-icon.td-data-table-sort-icon bdo[dir=rtl]{\n direction:rtl;\n unicode-bidi:bidi-override; }\n :host.mat-numeric mat-icon.td-data-table-sort-icon bdo[dir=ltr]{\n direction:ltr;\n unicode-bidi:bidi-override; }\n :host:not(.mat-numeric) mat-icon.td-data-table-sort-icon{\n margin-left:6px;\n margin-right:initial; }\n html[dir=rtl] :host:not(.mat-numeric) mat-icon.td-data-table-sort-icon{\n margin-left:initial;\n unicode-bidi:embed; }\n body[dir=rtl] :host:not(.mat-numeric) mat-icon.td-data-table-sort-icon{\n margin-left:initial;\n unicode-bidi:embed; }\n [dir=rtl] :host:not(.mat-numeric) mat-icon.td-data-table-sort-icon{\n margin-left:initial;\n unicode-bidi:embed; }\n :host:not(.mat-numeric) mat-icon.td-data-table-sort-icon bdo[dir=rtl]{\n direction:rtl;\n unicode-bidi:bidi-override; }\n :host:not(.mat-numeric) mat-icon.td-data-table-sort-icon bdo[dir=ltr]{\n direction:ltr;\n unicode-bidi:bidi-override; }\n html[dir=rtl] :host:not(.mat-numeric) mat-icon.td-data-table-sort-icon{\n margin-right:6px;\n unicode-bidi:embed; }\n body[dir=rtl] :host:not(.mat-numeric) mat-icon.td-data-table-sort-icon{\n margin-right:6px;\n unicode-bidi:embed; }\n [dir=rtl] :host:not(.mat-numeric) mat-icon.td-data-table-sort-icon{\n margin-right:6px;\n unicode-bidi:embed; }\n :host:not(.mat-numeric) mat-icon.td-data-table-sort-icon bdo[dir=rtl]{\n direction:rtl;\n unicode-bidi:bidi-override; }\n :host:not(.mat-numeric) mat-icon.td-data-table-sort-icon bdo[dir=ltr]{\n direction:ltr;\n unicode-bidi:bidi-override; }\n`],\n template: `<span #columnContent class=\"td-data-table-heading\">\n <mat-icon \n class=\"td-data-table-sort-icon\" \n *ngIf=\"sortable && numeric\"\n [class.mat-asc]=\"(!(active) || isAscending())\"\n [class.mat-desc]=\"(active && isDescending())\">\n arrow_upward\n </mat-icon>\n <span>\n <ng-content></ng-content>\n </span>\n <mat-icon \n class=\"td-data-table-sort-icon\" \n *ngIf=\"sortable && !numeric\"\n [class.mat-asc]=\"(!(active) || isAscending())\"\n [class.mat-desc]=\"(active && isDescending())\">\n arrow_upward\n </mat-icon>\n</span>\n`,\n})\nexport class TdDataTableColumnComponent {\n\n private _sortOrder: TdDataTableSortingOrder = TdDataTableSortingOrder.Ascending;\n\n @ViewChild('columnContent', {read: ElementRef}) _columnContent: ElementRef;\n\n get projectedWidth(): number {\n if (this._columnContent && this._columnContent.nativeElement) {\n return (<HTMLElement>this._columnContent.nativeElement).getBoundingClientRect().width;\n }\n return 100;\n }\n\n /**\n * name?: string\n * Sets unique column [name] for [sortable] events.\n */\n @Input('name') name: string = '';\n\n /**\n * sortable?: boolean\n * Enables sorting events, sort icons and active column states.\n * Defaults to 'false'\n */\n @Input('sortable') sortable: boolean = false;\n\n /**\n * active?: boolean\n * Sets column to active state when 'true'.\n * Defaults to 'false'\n */\n @Input('active') active: boolean = false;\n\n /**\n * numeric?: boolean\n * Makes column follow the numeric data-table specs and sort icon.\n * Defaults to 'false'\n */\n @Input('numeric') numeric: boolean = false;\n\n /**\n * sortOrder?: ['ASC' | 'DESC'] or TdDataTableSortingOrder\n * Sets the sort order of column.\n * Defaults to 'ASC' or TdDataTableSortingOrder.Ascending\n */\n @Input('sortOrder')\n set sortOrder(order: 'ASC' | 'DESC') {\n let sortOrder: string = order ? order.toUpperCase() : 'ASC';\n if (sortOrder !== 'DESC' && sortOrder !== 'ASC') {\n throw new Error('[sortOrder] must be empty, ASC or DESC');\n }\n\n this._sortOrder = sortOrder === 'ASC' ?\n TdDataTableSortingOrder.Ascending : TdDataTableSortingOrder.Descending;\n }\n\n /**\n * sortChange?: function\n * Event emitted when the column headers are clicked. [sortable] needs to be enabled.\n * Emits an [ITdDataTableSortChangeEvent] implemented object.\n */\n @Output('sortChange') onSortChange: EventEmitter<ITdDataTableSortChangeEvent> =\n new EventEmitter<ITdDataTableSortChangeEvent>();\n\n @HostBinding('class.mat-clickable')\n get bindClickable(): boolean {\n return this.sortable;\n }\n\n @HostBinding('class.mat-sortable')\n get bingSortable(): boolean {\n return this.sortable;\n }\n\n @HostBinding('class.mat-active')\n get bindActive(): boolean {\n return this.active;\n }\n\n @HostBinding('class.mat-numeric')\n get bindNumeric(): boolean {\n return this.numeric;\n }\n\n constructor(private _elementRef: ElementRef, private _renderer: Renderer2) {\n this._renderer.addClass(this._elementRef.nativeElement, 'td-data-table-column');\n }\n\n /**\n * Listening to click event on host to throw a sort event\n */\n @HostListener('click')\n handleClick(): void {\n if (this.sortable) {\n this.onSortChange.emit({name: this.name, order: this._sortOrder});\n }\n }\n\n isAscending(): boolean {\n return this._sortOrder === TdDataTableSortingOrder.Ascending;\n }\n\n isDescending(): boolean {\n return this._sortOrder === TdDataTableSortingOrder.Descending;\n }\n\n}\n",
"import { Component, Input, Output, EventEmitter, forwardRef, ChangeDetectionStrategy,\n ChangeDetectorRef, ViewChild, OnDestroy, AfterViewInit,\n ContentChildren, TemplateRef, AfterContentInit, QueryList, Inject,\n Optional, ViewChildren, ElementRef, OnInit, AfterContentChecked } from '@angular/core';\nimport { DOCUMENT, DomSanitizer, SafeStyle } from '@angular/platform-browser';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\n\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ENTER, SPACE, UP_ARROW, DOWN_ARROW } from '@angular/cdk/keycodes';\n\nimport { Observable } from 'rxjs/Observable';\nimport { Subscription } from 'rxjs/Subscription';\nimport { Subject } from 'rxjs/Subject';\n\nimport { debounceTime } from 'rxjs/operators/debounceTime';\n\nimport { TdDataTableRowComponent } from './data-table-row/data-table-row.component';\nimport { ITdDataTableSortChangeEvent, TdDataTableColumnComponent } from './data-table-column/data-table-column.component';\nimport { TdDataTableTemplateDirective } from './directives/data-table-template.directive';\n\nimport { IControlValueAccessor, mixinControlValueAccessor } from '@covalent/core/common';\n\nexport enum TdDataTableSortingOrder {\n Ascending = 'ASC',\n Descending = 'DESC',\n}\n\nexport interface ITdDataTableColumnWidth {\n min?: number;\n max?: number;\n}\n\nexport interface ITdDataTableColumn {\n name: string;\n label: string;\n tooltip?: string;\n numeric?: boolean;\n format?: (value: any) => any;\n nested?: boolean;\n sortable?: boolean;\n hidden?: boolean;\n filter?: boolean;\n width?: ITdDataTableColumnWidth | number;\n}\n\nexport interface ITdDataTableSelectEvent {\n row: any;\n selected: boolean;\n index: number;\n}\n\nexport interface ITdDataTableSelectAllEvent {\n rows: any[];\n selected: boolean;\n}\n\nexport interface ITdDataTableRowClickEvent {\n row: any;\n index: number;\n}\n\nexport interface IInternalColumnWidth {\n value: number;\n limit: boolean;\n index: number;\n min?: boolean;\n max?: boolean;\n}\n\n/**\n * Constant to set the rows offset before and after the viewport\n */\nconst TD_VIRTUAL_OFFSET: number = 2;\n\n/**\n * Constant to set default row height if none is provided\n */\nconst TD_VIRTUAL_DEFAULT_ROW_HEIGHT: number = 48;\n\nexport class TdDataTableBase {\n constructor(public _changeDetectorRef: ChangeDetectorRef) {}\n}\n\n/* tslint:disable-next-line */\nexport const _TdDataTableMixinBase = mixinControlValueAccessor(TdDataTableBase, []);\n\n@Component({\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdDataTableComponent),\n multi: true,\n }],\n selector: 'td-data-table',\n styles: [`:host{\n display:block;\n overflow:hidden; }\n :host .td-data-table-scrollable{\n position:relative;\n overflow:auto;\n height:calc(100% - 56px); }\n\ntable.td-data-table{\n width:auto !important; }\n table.td-data-table.mat-selectable tbody > tr.td-data-table-row{\n -webkit-transition:background-color 0.2s;\n transition:background-color 0.2s; }\n table.td-data-table.mat-selectable .td-data-table-column:first-child > .td-data-table-column-content-wrapper,\n table.td-data-table.mat-selectable th.td-data-table-column:first-child > .td-data-table-column-content-wrapper,\n table.td-data-table.mat-selectable td.td-data-table-cell:first-child > .td-data-table-column-content-wrapper{\n width:18px;\n min-width:18px;\n padding:0 24px; }\n table.td-data-table.mat-selectable .td-data-table-column:nth-child(2) > .td-data-table-column-content-wrapper,\n table.td-data-table.mat-selectable th.td-data-table-column:nth-child(2) > .td-data-table-column-content-wrapper,\n table.td-data-table.mat-selectable td.td-data-table-cell:nth-child(2) > .td-data-table-column-content-wrapper{\n padding-left:0; }\n [dir='rtl'] table.td-data-table.mat-selectable .td-data-table-column:nth-child(2) > .td-data-table-column-content-wrapper, [dir='rtl']\n table.td-data-table.mat-selectable th.td-data-table-column:nth-child(2) > .td-data-table-column-content-wrapper, [dir='rtl']\n table.td-data-table.mat-selectable td.td-data-table-cell:nth-child(2) > .td-data-table-column-content-wrapper{\n padding-right:0;\n padding-left:28px; }\n table.td-data-table td.mat-checkbox-cell,\n table.td-data-table th.mat-checkbox-column{\n min-width:42px;\n width:42px;\n font-size:0 !important; }\n table.td-data-table td.mat-checkbox-cell mat-pseudo-checkbox,\n table.td-data-table th.mat-checkbox-column mat-pseudo-checkbox{\n width:18px;\n height:18px; }\n ::ng-deep table.td-data-table td.mat-checkbox-cell mat-pseudo-checkbox.mat-pseudo-checkbox-checked::after, ::ng-deep\n table.td-data-table th.mat-checkbox-column mat-pseudo-checkbox.mat-pseudo-checkbox-checked::after{\n width:11px !important;\n height:4px !important; }\n table.td-data-table td.mat-checkbox-cell mat-checkbox ::ng-deep .mat-checkbox-inner-container,\n table.td-data-table th.mat-checkbox-column mat-checkbox ::ng-deep .mat-checkbox-inner-container{\n width:18px;\n height:18px;\n margin:0; }\n`],\n template: `<table td-data-table\n [style.left.px]=\"columnsLeftScroll\"\n [class.mat-selectable]=\"selectable\">\n <thead class=\"td-data-table-head\">\n <tr td-data-table-column-row>\n <th td-data-table-column class=\"mat-checkbox-column\" *ngIf=\"selectable\">\n <mat-checkbox\n #checkBoxAll\n *ngIf=\"multiple\"\n [disabled]=\"!hasData\"\n [indeterminate]=\"indeterminate && !allSelected && hasData\"\n [checked]=\"allSelected && hasData\"\n (click)=\"blockEvent($event); selectAll(!checkBoxAll.checked)\"\n (keyup.enter)=\"selectAll(!checkBoxAll.checked)\"\n (keyup.space)=\"selectAll(!checkBoxAll.checked)\"\n (keydown.space)=\"blockEvent($event)\">\n </mat-checkbox>\n </th>\n <th td-data-table-column\n #columnElement\n *ngFor=\"let column of columns; let i = index;\"\n [style.min-width.px]=\"getColumnWidth(i)\"\n [style.max-width.px]=\"getColumnWidth(i)\"\n [name]=\"column.name\"\n [numeric]=\"column.numeric\"\n [active]=\"(column.sortable || sortable) && column === sortByColumn\"\n [sortable]=\"column.sortable || (sortable && column.sortable !== false)\"\n [sortOrder]=\"sortOrderEnum\"\n [hidden]=\"column.hidden\"\n (sortChange)=\"handleSort(column)\">\n <span [matTooltip]=\"column.tooltip\">{{column.label}}</span>\n </th>\n </tr>\n </thead>\n</table>\n<div #scrollableDiv class=\"td-data-table-scrollable\"\n (scroll)=\"handleScroll($event)\">\n <div [style.height.px]=\"totalHeight\"></div>\n <table td-data-table\n [style.transform]=\"offsetTransform\"\n [style.position]=\"'absolute'\"\n [class.mat-selectable]=\"selectable\"\n [class.mat-clickable]=\"clickable\">\n <tbody class=\"td-data-table-body\">\n <tr td-data-table-row\n #dtRow\n [tabIndex]=\"selectable ? 0 : -1\"\n [selected]=\"(clickable || selectable) && isRowSelected(row)\"\n *ngFor=\"let row of virtualData; let rowIndex = index\"\n (click)=\"handleRowClick(row, fromRow + rowIndex, $event)\"\n (keyup)=\"selectable && _rowKeyup($event, row, rowIndex)\"\n (keydown.space)=\"blockEvent($event)\"\n (keydown.shift.space)=\"blockEvent($event)\"\n (keydown.shift)=\"disableTextSelection()\"\n (keyup.shift)=\"enableTextSelection()\">\n <td td-data-table-cell class=\"mat-checkbox-cell\" *ngIf=\"selectable\">\n <mat-pseudo-checkbox\n [state]=\"dtRow.selected ? 'checked' : 'unchecked'\"\n (mousedown)=\"disableTextSelection()\"\n (mouseup)=\"enableTextSelection()\"\n stopRowClick\n (click)=\"select(row, $event, fromRow + rowIndex)\">\n </mat-pseudo-checkbox>\n </td>\n <td td-data-table-cell\n [numeric]=\"column.numeric\"\n [hidden]=\"column.hidden\"\n *ngFor=\"let column of columns; let i = index\"\n [style.min-width.px]=\"getColumnWidth(i)\"\n [style.max-width.px]=\"getColumnWidth(i)\">\n <span *ngIf=\"!getTemplateRef(column.name)\">{{column.format ? column.format(getCellValue(column, row)) : getCellValue(column, row)}}</span>\n <ng-template\n *ngIf=\"getTemplateRef(column.name)\"\n [ngTemplateOutlet]=\"getTemplateRef(column.name)\"\n [ngTemplateOutletContext]=\"{ value: getCellValue(column, row), row: row, column: column.name }\">\n </ng-template>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n<ng-content></ng-content>\n`,\n inputs: ['value'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdDataTableComponent extends _TdDataTableMixinBase implements IControlValueAccessor, OnInit,\n AfterContentInit, AfterContentChecked, AfterViewInit, OnDestroy {\n\n /** responsive width calculations */\n private _resizeSubs: Subscription;\n private _rowsChangedSubs: Subscription;\n private _hostWidth: number = 0;\n\n get hostWidth(): number {\n // if the checkboxes are rendered, we need to remove their width\n // from the total width to calculate properly\n if (this.selectable) {\n return this._hostWidth - 42;\n }\n return this._hostWidth;\n }\n\n private _widths: IInternalColumnWidth[] = [];\n private _onResize: Subject<void> = new Subject<void>();\n\n /** column header reposition and viewpoort */\n private _verticalScrollSubs: Subscription;\n private _horizontalScrollSubs: Subscription;\n private _scrollHorizontalOffset: number = 0;\n\n private _onHorizontalScroll: Subject<number> = new Subject<number>();\n private _onVerticalScroll: Subject<number> = new Subject<number>();\n\n // Array of cached row heights to allow dynamic row heights\n private _rowHeightCache: number[] = [];\n // Total pseudo height of all the elements\n private _totalHeight: number = 0;\n // Total host height for the viewport\n private _hostHeight: number = 0;\n // Scrolled vertical pixels\n private _scrollVerticalOffset: number = 0;\n // Style to move the content a certain offset depending on scrolled offset\n private _offsetTransform: SafeStyle;\n\n // Variables that set from and to which rows will be rendered\n private _fromRow: number = 0;\n private _toRow: number = 0;\n\n /**\n * Returns the offset style with a proper calculation on how much it should move\n * over the y axis of the total height\n */\n get offsetTransform(): SafeStyle {\n return this._offsetTransform;\n }\n\n /**\n * Returns the assumed total height of the rows\n */\n get totalHeight(): number {\n return this._totalHeight;\n }\n\n /**\n * Returns the initial row to render in the viewport\n */\n get fromRow(): number {\n return this._fromRow;\n }\n\n /**\n * Returns the last row to render in the viewport\n */\n get toRow(): number {\n return this._toRow;\n }\n\n private _valueChangesSubs: Subscription;\n /** internal attributes */\n private _data: any[];\n // data virtually iterated by component\n private _virtualData: any[];\n private _columns: ITdDataTableColumn[];\n private _selectable: boolean = false;\n private _clickable: boolean = false;\n private _multiple: boolean = true;\n private _allSelected: boolean = false;\n private _indeterminate: boolean = false;\n\n /** sorting */\n private _sortable: boolean = false;\n private _sortBy: ITdDataTableColumn;\n private _sortOrder: TdDataTableSortingOrder = TdDataTableSortingOrder.Ascending;\n\n /** shift select */\n private _shiftPreviouslyPressed: boolean = false;\n private _lastSelectedIndex: number = -1;\n private _firstSelectedIndex: number = -1;\n private _firstCheckboxValue: boolean = false;\n\n /** template fetching support */\n private _templateMap: Map<string, TemplateRef<any>> = new Map<string, TemplateRef<any>>();\n @ContentChildren(TdDataTableTemplateDirective) _templates: QueryList<TdDataTableTemplateDirective>;\n\n @ViewChild('scrollableDiv') _scrollableDiv: ElementRef;\n\n @ViewChildren('columnElement') _colElements: QueryList<TdDataTableColumnComponent>;\n\n @ViewChildren(TdDataTableRowComponent) _rows: QueryList<TdDataTableRowComponent>;\n\n /**\n * Returns scroll position to reposition column headers\n */\n get columnsLeftScroll(): number {\n return this._scrollHorizontalOffset * -1;\n }\n\n /**\n * Returns true if all values are selected.\n */\n get allSelected(): boolean {\n return this._allSelected;\n }\n\n /**\n * Returns true if all values are not deselected\n * and at least one is.\n */\n get indeterminate(): boolean {\n return this._indeterminate;\n }\n\n /**\n * data?: {[key: string]: any}[]\n * Sets the data to be rendered as rows.\n */\n @Input('data')\n set data(data: any[]) {\n this._data = data;\n this._rowHeightCache = [];\n Promise.resolve().then(() => {\n this.refresh();\n // scroll back to the top if the data has changed\n this._scrollableDiv.nativeElement.scrollTop = 0;\n });\n }\n get data(): any[] {\n return this._data;\n }\n\n get virtualData(): any[] {\n return this._virtualData;\n }\n\n /**\n * columns?: ITdDataTableColumn[]\n * Sets additional column configuration. [ITdDataTableColumn.name] has to exist in [data] as key.\n * Defaults to [data] keys.\n */\n @Input('columns')\n set columns(cols: ITdDataTableColumn[]) {\n this._columns = cols;\n }\n get columns(): ITdDataTableColumn[] {\n if (this._columns) {\n return this._columns;\n }\n\n if (this.hasData) {\n this._columns = [];\n // if columns is undefined, use key in [data] rows as name and label for column headers.\n let row: any = this._data[0];\n Object.keys(row).forEach((k: string) => {\n if (!this._columns.find((c: any) => c.name === k)) {\n this._columns.push({ name: k, label: k });\n }\n });\n return this._columns;\n } else {\n return [];\n }\n }\n\n /**\n * selectable?: boolean\n * Enables row selection events, hover and selected row states.\n * Defaults to 'false'\n */\n @Input('selectable')\n set selectable(selectable: boolean) {\n this._selectable = coerceBooleanProperty(selectable);\n }\n get selectable(): boolean {\n return this._selectable;\n }\n\n /**\n * clickable?: boolean\n * Enables row click events, hover.\n * Defaults to 'false'\n */\n @Input('clickable')\n set clickable(clickable: boolean) {\n this._clickable = coerceBooleanProperty(clickable);\n }\n get clickable(): boolean {\n return this._clickable;\n }\n\n /**\n * multiple?: boolean\n * Enables multiple row selection. [selectable] needs to be enabled.\n * Defaults to 'false'\n */\n @Input('multiple')\n set multiple(multiple: boolean) {\n this._multiple = coerceBooleanProperty(multiple);\n }\n get multiple(): boolean {\n return this._multiple;\n }\n\n /**\n * sortable?: boolean\n * Enables sorting events, sort icons and active column states.\n * Defaults to 'false'\n */\n @Input('sortable')\n set sortable(sortable: boolean) {\n this._sortable = coerceBooleanProperty(sortable);\n }\n get sortable(): boolean {\n return this._sortable;\n }\n\n /**\n * sortBy?: string\n * Sets the active sort column. [sortable] needs to be enabled.\n */\n @Input('sortBy')\n set sortBy(columnName: string) {\n if (!columnName) {\n return;\n }\n const column: ITdDataTableColumn = this.columns.find((c: any) => c.name === columnName);\n if (!column) {\n throw new Error('[sortBy] must be a valid column name');\n }\n\n this._sortBy = column;\n }\n get sortByColumn(): ITdDataTableColumn {\n return this._sortBy;\n }\n\n /**\n * sortOrder?: ['ASC' | 'DESC'] or TdDataTableSortingOrder\n * Sets the sort order of the [sortBy] column. [sortable] needs to be enabled.\n * Defaults to 'ASC' or TdDataTableSortingOrder.Ascending\n */\n @Input('sortOrder')\n set sortOrder(order: 'ASC' | 'DESC') {\n let sortOrder: string = order ? order.toUpperCase() : 'ASC';\n if (sortOrder !== 'DESC' && sortOrder !== 'ASC') {\n throw new Error('[sortOrder] must be empty, ASC or DESC');\n }\n\n this._sortOrder = sortOrder === 'ASC' ?\n TdDataTableSortingOrder.Ascending : TdDataTableSortingOrder.Descending;\n }\n get sortOrderEnum(): TdDataTableSortingOrder {\n return this._sortOrder;\n }\n\n get hasData(): boolean {\n return this._data && this._data.length > 0;\n }\n\n /**\n * sortChange?: function\n * Event emitted when the column headers are clicked. [sortable] needs to be enabled.\n * Emits an [ITdDataTableSortChangeEvent] implemented object.\n */\n @Output('sortChange') onSortChange: EventEmitter<ITdDataTableSortChangeEvent> =\n new EventEmitter<ITdDataTableSortChangeEvent>();\n\n /**\n * rowSelect?: function\n * Event emitted when a row is selected/deselected. [selectable] needs to be enabled.\n * Emits an [ITdDataTableSelectEvent] implemented object.\n */\n @Output('rowSelect') onRowSelect: EventEmitter<ITdDataTableSelectEvent> = new EventEmitter<ITdDataTableSelectEvent>();\n\n /**\n * rowClick?: function\n * Event emitted when a row is clicked.\n * Emits an [ITdDataTableRowClickEvent] implemented object.\n */\n @Output('rowClick') onRowClick: EventEmitter<ITdDataTableRowClickEvent> = new EventEmitter<ITdDataTableRowClickEvent>();\n\n /**\n * selectAll?: function\n * Event emitted when all rows are selected/deselected by the all checkbox. [selectable] needs to be enabled.\n * Emits an [ITdDataTableSelectAllEvent] implemented object.\n */\n @Output('selectAll') onSelectAll: EventEmitter<ITdDataTableSelectAllEvent> =\n new EventEmitter<ITdDataTableSelectAllEvent>();\n\n constructor(@Optional() @Inject(DOCUMENT) private _document: any,\n private _elementRef: ElementRef,\n private _domSanitizer: DomSanitizer,\n _changeDetectorRef: ChangeDetectorRef) {\n super(_changeDetectorRef);\n }\n\n /**\n * compareWith?: function(row, model): boolean\n * Allows custom comparison between row and model to see if row is selected or not\n * Default comparation is by reference\n */\n @Input('compareWith') compareWith: (row: any, model: any) => boolean = (row: any, model: any) => {\n return row === model;\n }\n\n /**\n * Initialize observable for resize and scroll events\n */\n ngOnInit(): void {\n // initialize observable for resize calculations\n this._resizeSubs = this._onResize.asObservable().subscribe(() => {\n if (this._rows) {\n this._rows.toArray().forEach((row: TdDataTableRowComponent, index: number) => {\n this._rowHeightCache[this.fromRow + index] = row.height + 1;\n });\n }\n this._calculateWidths();\n this._calculateVirtualRows();\n });\n // initialize observable for scroll column header reposition\n this._horizontalScrollSubs = this._onHorizontalScroll.asObservable()\n .subscribe((horizontalScroll: number) => {\n this._scrollHorizontalOffset = horizontalScroll;\n this._changeDetectorRef.markForCheck();\n });\n // initialize observable for virtual scroll rendering\n this._verticalScrollSubs = this._onVerticalScroll.asObservable()\n .subscribe((verticalScroll: number) => {\n this._scrollVerticalOffset = verticalScroll;\n this._calculateVirtualRows();\n this._changeDetectorRef.markForCheck();\n });\n this._valueChangesSubs = this.valueChanges.subscribe((value: any) => {\n this.refresh();\n });\n }\n\n /**\n * Loads templates and sets them in a map for faster access.\n */\n ngAfterContentInit(): void {\n for (let i: number = 0; i < this._templates.toArray().length; i++) {\n this._templateMap.set(\n this._templates.toArray()[i].tdDataTableTemplate,\n this._templates.toArray()[i].templateRef,\n );\n }\n }\n\n /**\n * Checks hosts native elements widths to see if it has changed (resize check)\n */\n ngAfterContentChecked(): void {\n if (this._elementRef.nativeElement) {\n let newHostWidth: number = this._elementRef.nativeElement.getBoundingClientRect().width;\n // if the width has changed then we throw a resize event.\n if (this._hostWidth !== newHostWidth) {\n this._hostWidth = newHostWidth;\n this._onResize.next();\n }\n }\n if (this._scrollableDiv.nativeElement) {\n let newHostHeight: number = this._scrollableDiv.nativeElement.getBoundingClientRect().height;\n // if the height of the viewport has changed, then we mark for check\n if (this._hostHeight !== newHostHeight) {\n this._hostHeight = newHostHeight;\n this._calculateVirtualRows();\n this._changeDetectorRef.markForCheck();\n }\n }\n }\n\n /**\n * Registers to an observable that checks if all rows have been rendered\n * so we can start calculating the widths\n */\n ngAfterViewInit(): void {\n this._rowsChangedSubs = this._rows.changes.pipe(\n debounceTime(0),\n ).subscribe(() => {\n this._onResize.next();\n });\n this._calculateVirtualRows();\n }\n\n /**\n * Unsubscribes observables when data table is destroyed\n */\n ngOnDestroy(): void {\n if (this._resizeSubs) {\n this._resizeSubs.unsubscribe();\n }\n if (this._horizontalScrollSubs) {\n this._horizontalScrollSubs.unsubscribe();\n }\n if (this._verticalScrollSubs) {\n this._verticalScrollSubs.unsubscribe();\n }\n if (this._rowsChangedSubs) {\n this._rowsChangedSubs.unsubscribe();\n }\n if (this._valueChangesSubs) {\n this._valueChangesSubs.unsubscribe();\n }\n }\n\n /**\n * Method that gets executed every time there is a scroll event\n * Calls the scroll observable\n */\n handleScroll(event: Event): void {\n let element: HTMLElement = (<HTMLElement>event.target);\n if (element) {\n let horizontalScroll: number = element.scrollLeft;\n if (this._scrollHorizontalOffset !== horizontalScroll) {\n this._onHorizontalScroll.next(horizontalScroll);\n }\n let verticalScroll: number = element.scrollTop;\n if (this._scrollVerticalOffset !== verticalScroll) {\n this._onVerticalScroll.next(verticalScroll);\n }\n }\n }\n\n /**\n * Returns the width needed for the columns via index\n */\n getColumnWidth(index: number): number {\n if (this._widths[index]) {\n return this._widths[index].value;\n }\n return undefined;\n }\n\n getCellValue(column: ITdDataTableColumn, value: any): string {\n if (column.nested === undefined || column.nested) {\n return this._getNestedValue(column.name, value);\n }\n return value[column.name];\n }\n\n /**\n * Getter method for template references\n */\n getTemplateRef(name: string): TemplateRef<any> {\n return this._templateMap.get(name);\n }\n\n /**\n * Clears model (ngModel) of component by removing all values in array.\n */\n clearModel(): void {\n this.value.splice(0, this.value.length);\n }\n\n /**\n * Refreshes data table and rerenders [data] and [columns]\n */\n refresh(): void {\n this._calculateVirtualRows();\n this._calculateWidths();\n this._calculateCheckboxState();\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Selects or clears all rows depending on 'checked' value.\n */\n selectAll(checked: boolean): void {\n let toggledRows: any[] = [];\n if (checked) {\n this._data.forEach((row: any) => {\n // skiping already selected rows\n if (!this.isRowSelected(row)) {\n this.value.push(row);\n // checking which ones are being toggled\n toggledRows.push(row);\n }\n });\n this._allSelected = true;\n this._indeterminate = true;\n } else {\n this._data.forEach((row: any) => {\n // checking which ones are being toggled\n if (this.isRowSelected(row)) {\n toggledRows.push(row);\n let modelRow: any = this.value.filter((val: any) => {\n return this.compareWith(row, val);\n })[0];\n let index: number = this.value.indexOf(modelRow);\n if (index > -1) {\n this.value.splice(index, 1);\n }\n }\n });\n this._allSelected = false;\n this._indeterminate = false;\n }\n this.onSelectAll.emit({rows: toggledRows, selected: checked});\n }\n\n /**\n * Checks if row is selected\n */\n isRowSelected(row: any): boolean {\n // compare items by [compareWith] function\n return this.value ? this.value.filter((val: any) => {\n return this.compareWith(row, val);\n }).length > 0 : false;\n }\n\n /**\n * Selects or clears a row depending on 'checked' value if the row 'isSelectable'\n * handles cntrl clicks and shift clicks for multi-select\n */\n select(row: any, event: Event, currentSelected: number): void {\n if (this.selectable) {\n this.blockEvent(event);\n // Check to see if Shift key is selected and need to select everything in between\n let mouseEvent: MouseEvent = event as MouseEvent;\n if (this.multiple && mouseEvent && mouseEvent.shiftKey && this._lastSelectedIndex > -1) {\n let firstIndex: number = currentSelected;\n let lastIndex: number = this._lastSelectedIndex;\n if (currentSelected > this._lastSelectedIndex) {\n firstIndex = this._lastSelectedIndex;\n lastIndex = currentSelected;\n }\n // if clicking a checkbox behind the initial check, then toggle all selections expect the initial checkbox\n // else the checkboxes clicked are all after the initial one\n if ((this._firstSelectedIndex >= currentSelected && this._lastSelectedIndex > this._firstSelectedIndex) ||\n (this._firstSelectedIndex <= currentSelected && this._lastSelectedIndex < this._firstSelectedIndex)) {\n for (let i: number = firstIndex; i <= lastIndex; i++) {\n if (this._firstSelectedIndex !== i) {\n this._doSelection(this._data[i], i);\n }\n }\n } else if ((this._firstSelectedIndex > currentSelected) || (this._firstSelectedIndex < currentSelected)) {\n // change indexes depending on where the next checkbox is selected (before or after)\n if (this._firstSelectedIndex > currentSelected) {\n lastIndex--;\n } else if (this._firstSelectedIndex < currentSelected) {\n firstIndex++;\n }\n for (let i: number = firstIndex; i <= lastIndex; i++) {\n let rowSelected: boolean = this.isRowSelected(this._data[i]);\n // if row is selected and first checkbox was selected\n // or if row was unselected and first checkbox was unselected\n // we ignore the toggle\n if ((this._firstCheckboxValue && !rowSelected) ||\n (!this._firstCheckboxValue && rowSelected)) {\n this._doSelection(this._data[i], i);\n } else if (this._shiftPreviouslyPressed) {\n // else if the checkbox selected was in the middle of the last selection and the first selection\n // then we undo the selections\n if ((currentSelected >= this._firstSelectedIndex && currentSelected <= this._lastSelectedIndex) ||\n (currentSelected <= this._firstSelectedIndex && currentSelected >= this._lastSelectedIndex)) {\n this._doSelection(this._data[i], i);\n }\n }\n }\n }\n this._shiftPreviouslyPressed = true;\n // if shift wasnt pressed, then we take the element checked as the first row\n // incase the next click uses shift\n } else if (mouseEvent && !mouseEvent.shiftKey) {\n this._firstCheckboxValue = this._doSelection(row, currentSelected);\n this._shiftPreviouslyPressed = false;\n this._firstSelectedIndex = currentSelected;\n }\n this._lastSelectedIndex = currentSelected;\n }\n }\n\n /**\n * Overrides the onselectstart method of the document so other text on the page\n * doesn't get selected when doing shift selections.\n */\n disableTextSelection(): void {\n if (this._document) {\n this._document.onselectstart = function(): boolean {\n return false;\n };\n }\n }\n\n /**\n * Resets the original onselectstart method.\n */\n enableTextSelection(): void {\n if (this._document) {\n this._document.onselectstart = undefined;\n }\n }\n\n /**\n * emits the onRowClickEvent when a row is clicked\n * if clickable is true and selectable is false then select the row\n */\n handleRowClick(row: any, index: number, event: Event): void {\n if (this.clickable) {\n // ignoring linting rules here because attribute it actually null or not there\n // can't check for undefined\n const srcElement: any = event.srcElement || event.currentTarget;\n /* tslint:disable-next-line */\n if (srcElement.getAttribute('stopRowClick') === null) {\n this.onRowClick.emit({\n row: row,\n index: index,\n });\n }\n }\n }\n\n /**\n * Method handle for sort click event in column headers.\n */\n handleSort(column: ITdDataTableColumn): void {\n if (this._sortBy === column) {\n this._sortOrder = this._sortOrder === TdDataTableSortingOrder.Ascending ?\n TdDataTableSortingOrder.Descending : TdDataTableSortingOrder.Ascending;\n } else {\n this._sortBy = column;\n this._sortOrder = TdDataTableSortingOrder.Ascending;\n }\n this.onSortChange.next({ name: this._sortBy.name, order: this._sortOrder });\n }\n\n /**\n * Handle all keyup events when focusing a data table row\n */\n _rowKeyup(event: KeyboardEvent, row: any, index: number): void {\n switch (event.keyCode) {\n case ENTER:\n case SPACE:\n /** if user presses enter or space, the row should be selected */\n if (this.selectable) {\n this._doSelection(this._data[this.fromRow + index], this.fromRow + index);\n }\n break;\n case UP_ARROW:\n /**\n * if users presses the up arrow, we focus the prev row\n * unless its the first row\n */\n if (index > 0) {\n this._rows.toArray()[index - 1].focus();\n }\n this.blockEvent(event);\n if (this.selectable && this.multiple && event.shiftKey && this.fromRow + index >= 0) {\n this._doSelection(this._data[this.fromRow + index], this.fromRow + index);\n }\n break;\n case DOWN_ARROW:\n /**\n * if users presses the down arrow, we focus the next row\n * unless its the last row\n */\n if (index < (this._rows.toArray().length - 1)) {\n this._rows.toArray()[index + 1].focus();\n }\n this.blockEvent(event);\n if (this.selectable && this.multiple && event.shiftKey && this.fromRow + index < this._data.length) {\n this._doSelection(this._data[this.fromRow + index], this.fromRow + index);\n }\n break;\n default:\n // default\n }\n }\n\n /**\n * Method to prevent the default events\n */\n blockEvent(event: Event): void {\n event.preventDefault();\n }\n\n private _getNestedValue(name: string, value: any): string {\n if (!(value instanceof Object) || !name) {\n return value;\n }\n if (name.indexOf('.') > -1) {\n let splitName: string[] = name.split(/\\.(.+)/, 2);\n return this._getNestedValue(splitName[1], value[splitName[0]]);\n } else {\n return value[name];\n }\n }\n\n /**\n * Does the actual Row Selection\n */\n private _doSelection(row: any, rowIndex: number): boolean {\n let wasSelected: boolean = this.isRowSelected(row);\n if (!wasSelected) {\n if (!this._multiple) {\n this.clearModel();\n }\n this.value.push(row);\n } else {\n // compare items by [compareWith] function\n row = this.value.filter((val: any) => {\n return this.compareWith(row, val);\n })[0];\n let index: number = this.value.indexOf(row);\n if (index > -1) {\n this.value.splice(index, 1);\n }\n }\n this._calculateCheckboxState();\n this.onRowSelect.emit({row: row, index: rowIndex, selected: !wasSelected});\n this.onChange(this.value);\n return !wasSelected;\n }\n\n /**\n * Calculate all the state of all checkboxes\n */\n private _calculateCheckboxState(): void {\n if (this._data) {\n this._allSelected = typeof this._data.find((d: any) => !this.isRowSelected(d)) === 'undefined';\n this._indeterminate = false;\n for (let row of this._data) {\n if (!this.isRowSelected(row)) {\n continue;\n }\n this._indeterminate = true;\n break;\n }\n }\n }\n\n /**\n * Calculates the widths for columns and cells depending on content\n */\n private _calculateWidths(): void {\n if (this._colElements && this._colElements.length) {\n this._widths = [];\n this._colElements.forEach((col: TdDataTableColumnComponent, index: number) => {\n this._adjustColumnWidth(index, this._calculateWidth());\n });\n this._adjustColumnWidhts();\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /**\n * Adjusts columns after calculation to see if they need to be recalculated.\n */\n private _adjustColumnWidhts(): void {\n let fixedTotalWidth: number = 0;\n // get the number of total columns that have flexible widths (not fixed or hidden)\n let flexibleWidths: number = this._widths.filter((width: IInternalColumnWidth, index: number) => {\n if (this.columns[index].hidden) {\n return false;\n }\n if (width.limit || width.max || width.min) {\n fixedTotalWidth += width.value;\n }\n return !width.limit && !width.max && !width.min;\n }).length;\n // calculate how much pixes are left that could be spread across\n // the flexible columns\n let recalculateHostWidth: number = 0;\n if (fixedTotalWidth < this.hostWidth) {\n recalculateHostWidth = this.hostWidth - fixedTotalWidth;\n }\n // if we have flexible columns and pixels to spare on them\n // we try and spread the pixels across them\n if (flexibleWidths && recalculateHostWidth) {\n let newValue: number = Math.floor(recalculateHostWidth / flexibleWidths);\n let adjustedNumber: number = 0;\n // adjust the column widths with the spread pixels\n this._widths.forEach((colWidth: IInternalColumnWidth) => {\n if (this._widths[colWidth.index].max && this._widths[colWidth.index].value > newValue ||\n this._widths[colWidth.index].min && this._widths[colWidth.index].value < newValue ||\n !this._widths[colWidth.index].limit) {\n this._adjustColumnWidth(colWidth.index, newValue);\n adjustedNumber++;\n }\n });\n // if there are still columns that need to be recalculated, we start over\n let newFlexibleWidths: number = this._widths.filter((width: IInternalColumnWidth) => {\n return !width.limit && !width.max;\n }).length;\n if (newFlexibleWidths !== adjustedNumber && newFlexibleWidths !== flexibleWidths) {\n this._adjustColumnWidhts();\n }\n }\n }\n\n /**\n * Adjusts a single column to see if it can be recalculated\n */\n private _adjustColumnWidth(index: number, value: number): void {\n this._widths[index] = {\n value: value,\n index: index,\n limit: false,\n min: false,\n max: false,\n };\n // flag to see if we need to skip the min width projection\n // depending if a width or min width has been provided\n let skipMinWidthProjection: boolean = false;\n if (this.columns[index]) {\n // if the provided width has min/max, then we check to see if we need to set it\n if (typeof this.columns[index].width === 'object') {\n let widthOpts: ITdDataTableColumnWidth = <ITdDataTableColumnWidth>this.columns[index].width;\n // if the column width is less than the configured min, we override it\n skipMinWidthProjection = (widthOpts && !!widthOpts.min);\n if (widthOpts && widthOpts.min >= this._widths[index].value) {\n this._widths[index].value = widthOpts.min;\n this._widths[index].min = true;\n // if the column width is more than the configured max, we override it\n } else if (widthOpts && widthOpts.max <= this._widths[index].value) {\n this._widths[index].value = widthOpts.max;\n this._widths[index].max = true;\n }\n // if it has a fixed width, then we just set it\n } else if (typeof this.columns[index].width === 'number') {\n this._widths[index].value = <number>this.columns[index].width;\n skipMinWidthProjection = this._widths[index].limit = true;\n }\n }\n // if there wasn't any width or min width provided, we set a min to what the column width min should be\n if (!skipMinWidthProjection &&\n this._widths[index].value < this._colElements.toArray()[index].projectedWidth) {\n this._widths[index].value = this._colElements.toArray()[index].projectedWidth;\n this._widths[index].min = true;\n this._widths[index].limit = false;\n }\n }\n\n /**\n * Generic method to calculate column width\n */\n private _calculateWidth(): number {\n let renderedColumns: ITdDataTableColumn[] = this.columns.filter((col: ITdDataTableColumn) => !col.hidden);\n return Math.floor(this.hostWidth / renderedColumns.length);\n }\n\n /**\n * Method to calculate the rows to be rendered in the viewport\n */\n private _calculateVirtualRows(): void {\n let scrolledRows: number = 0;\n if (this._data) {\n this._totalHeight = 0;\n let rowHeightSum: number = 0;\n // loop through all rows to see if we have their height cached\n // and sum them all to calculate the total height\n this._data.forEach((d: any, i: number) => {\n // iterate through all rows at first and assume all\n // rows are the same height as the first one\n if (!this._rowHeightCache[i]) {\n this._rowHeightCache[i] = this._rowHeightCache[0] || TD_VIRTUAL_DEFAULT_ROW_HEIGHT;\n }\n rowHeightSum += this._rowHeightCache[i];\n // check how many rows have been scrolled\n if (this._scrollVerticalOffset - rowHeightSum > 0) {\n scrolledRows++;\n }\n });\n this._totalHeight = rowHeightSum;\n // set the initial row to be rendered taking into account the row offset\n let fromRow: number = scrolledRows - TD_VIRTUAL_OFFSET;\n this._fromRow = fromRow > 0 ? fromRow : 0;\n\n let hostHeight: number = this._hostHeight;\n let index: number = 0;\n // calculate how many rows can fit in the viewport\n while (hostHeight > 0) {\n hostHeight -= this._rowHeightCache[this.fromRow + index];\n index++;\n }\n // set the last row to be rendered taking into account the row offset\n let range: number = (index - 1) + (TD_VIRTUAL_OFFSET * 2);\n let toRow: number = range + this.fromRow;\n // if last row is greater than the total length, then we use the total length\n if (isFinite(toRow) && toRow > this._data.length) {\n toRow = this._data.length;\n } else if (!isFinite(toRow)) {\n toRow = TD_VIRTUAL_OFFSET;\n }\n this._toRow = toRow;\n } else {\n this._totalHeight = 0;\n this._fromRow = 0;\n this._toRow = 0;\n }\n\n let offset: number = 0;\n // calculate the proper offset depending on how many rows have been scrolled\n if (scrolledRows > TD_VIRTUAL_OFFSET) {\n for (let index: number = 0; index < this.fromRow; index++) {\n offset += this._rowHeightCache[index];\n }\n }\n\n this._offsetTransform = this._domSanitizer.bypassSecurityTrustStyle('translateY(' + (offset - this.totalHeight) + 'px)');\n if (this._data) {\n this._virtualData = this.data.slice(this.fromRow, this.toRow);\n }\n // mark for check at the end of the queue so we are sure\n // that the changes will be marked\n Promise.resolve().then(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n}\n",
"import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { TemplatePortalDirective } from '@angular/cdk/portal';\n\n@Directive({selector: '[tdDataTableTemplate]ng-template'})\nexport class TdDataTableTemplateDirective extends TemplatePortalDirective {\n\n @Input() tdDataTableTemplate: string;\n constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\n super(templateRef, viewContainerRef);\n }\n}\n",
"import { Component, Input, Output, Renderer2, ElementRef, ContentChildren, QueryList, HostListener } from '@angular/core';\n\nimport { TdDataTableCellComponent } from '../data-table-cell/data-table-cell.component';\nimport { TdDataTableColumnComponent } from '../data-table-column/data-table-column.component';\n\n@Component({\n /* tslint:disable-next-line */\n selector: 'tr[td-data-table-column-row]',\n styles: [`:host{\n border-bottom-style:solid;\n border-bottom-width:1px; }\n\n:host.td-data-table-row{\n height:48px; }\n\n:host.td-data-table-column-row{\n height:56px; }\n`],\n template: `<ng-content></ng-content>`,\n})\nexport class TdDataTableColumnRowComponent {\n\n constructor(protected _elementRef: ElementRef, protected _renderer: Renderer2) {\n this._renderer.addClass(this._elementRef.nativeElement, 'td-data-table-column-row');\n }\n\n}\n\n@Component({\n /* tslint:disable-next-line */\n selector: 'tr[td-data-table-row]',\n styles: [`:host{\n border-bottom-style:solid;\n border-bottom-width:1px; }\n\n:host.td-data-table-row{\n height:48px; }\n\n:host.td-data-table-column-row{\n height:56px; }\n`],\n template: `<ng-content></ng-content>`,\n})\nexport class TdDataTableRowComponent {\n\n private _selected: boolean = false;\n\n @Input('selected')\n set selected(selected: boolean) {\n if (selected) {\n this._renderer.addClass(this._elementRef.nativeElement, 'td-selected');\n } else {\n this._renderer.removeClass(this._elementRef.nativeElement, 'td-selected');\n }\n this._selected = selected;\n }\n get selected(): boolean {\n return this._selected;\n }\n\n get height(): number {\n let height: number = 48;\n if (this._elementRef.nativeElement) {\n height = (<HTMLElement>this._elementRef.nativeElement).getBoundingClientRect().height;\n }\n return height;\n }\n\n constructor(private _elementRef: ElementRef, private _renderer: Renderer2) {\n this._renderer.addClass(this._elementRef.nativeElement, 'td-data-table-row');\n }\n\n /**\n * Listening to click event to explicitly focus the row element.\n */\n @HostListener('click')\n clickListener(): void {\n this.focus();\n }\n\n focus(): void {\n this._elementRef.nativeElement.focus();\n }\n\n}\n"
],
"names": [],
"mappings": "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"
}