diff --git a/src/components-examples/material/table/table-expandable-rows/table-expandable-rows-example.css b/src/components-examples/material/table/table-expandable-rows/table-expandable-rows-example.css index a3cc2d66194c..8ee1d5652ad6 100644 --- a/src/components-examples/material/table/table-expandable-rows/table-expandable-rows-example.css +++ b/src/components-examples/material/table/table-expandable-rows/table-expandable-rows-example.css @@ -6,6 +6,10 @@ tr.example-detail-row { height: 0; } +tr.example-element-row { + cursor: pointer; +} + tr.example-element-row:not(.example-expanded-row):hover { background: whitesmoke; } @@ -18,9 +22,21 @@ tr.example-element-row:not(.example-expanded-row):active { border-bottom-width: 0; } -.example-element-detail { +.example-element-detail-wrapper { overflow: hidden; + display: grid; + grid-template-rows: 0fr; + grid-template-columns: 100%; + transition: grid-template-rows 225ms cubic-bezier(0.4, 0, 0.2, 1); +} + +.example-element-detail-wrapper-expanded { + grid-template-rows: 1fr; +} + +.example-element-detail { display: flex; + min-height: 0; } .example-element-diagram { @@ -45,3 +61,11 @@ tr.example-element-row:not(.example-expanded-row):active { .example-element-description-attribution { opacity: 0.5; } + +.example-toggle-button { + transition: transform 225ms cubic-bezier(0.4, 0, 0.2, 1); +} + +.example-toggle-button-expanded { + transform: rotate(180deg); +} diff --git a/src/components-examples/material/table/table-expandable-rows/table-expandable-rows-example.html b/src/components-examples/material/table/table-expandable-rows/table-expandable-rows-example.html index 2b3080096152..d3baa59d2d45 100644 --- a/src/components-examples/material/table/table-expandable-rows/table-expandable-rows-example.html +++ b/src/components-examples/material/table/table-expandable-rows/table-expandable-rows-example.html @@ -3,19 +3,20 @@ class="mat-elevation-z8"> @for (column of columnsToDisplay; track column) { - {{column}} - {{element[column]}} + {{column}} + {{element[column]}} } - - @if (expandedElement === element) { - keyboard_arrow_up - } @else { - keyboard_arrow_down - } + + keyboard_arrow_down @@ -23,17 +24,19 @@ - - - {{element.position}} - {{element.symbol}} - {{element.name}} - {{element.weight}} - - - {{element.description}} - -- Wikipedia + + + + {{element.position}} + {{element.symbol}} + {{element.name}} + {{element.weight}} + + + {{element.description}} + -- Wikipedia + @@ -42,8 +45,8 @@ + [class.example-expanded-row]="isExpanded(element)" + (click)="toggle(element)"> diff --git a/src/components-examples/material/table/table-expandable-rows/table-expandable-rows-example.ts b/src/components-examples/material/table/table-expandable-rows/table-expandable-rows-example.ts index 6c8527b762b9..04ccd29f0cf3 100644 --- a/src/components-examples/material/table/table-expandable-rows/table-expandable-rows-example.ts +++ b/src/components-examples/material/table/table-expandable-rows/table-expandable-rows-example.ts @@ -1,5 +1,4 @@ import {Component} from '@angular/core'; -import {animate, state, style, transition, trigger} from '@angular/animations'; import {MatIconModule} from '@angular/material/icon'; import {MatButtonModule} from '@angular/material/button'; import {MatTableModule} from '@angular/material/table'; @@ -11,13 +10,6 @@ import {MatTableModule} from '@angular/material/table'; selector: 'table-expandable-rows-example', styleUrl: 'table-expandable-rows-example.css', templateUrl: 'table-expandable-rows-example.html', - animations: [ - trigger('detailExpand', [ - state('collapsed,void', style({height: '0px', minHeight: '0'})), - state('expanded', style({height: '*'})), - transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')), - ]), - ], imports: [MatTableModule, MatButtonModule, MatIconModule], }) export class TableExpandableRowsExample { @@ -25,6 +17,16 @@ export class TableExpandableRowsExample { columnsToDisplay = ['name', 'weight', 'symbol', 'position']; columnsToDisplayWithExpand = [...this.columnsToDisplay, 'expand']; expandedElement: PeriodicElement | null; + + /** Checks whether an element is expanded. */ + isExpanded(element: PeriodicElement) { + return this.expandedElement === element; + } + + /** Toggles the expanded state of an element. */ + toggle(element: PeriodicElement) { + this.expandedElement = this.isExpanded(element) ? null : element; + } } export interface PeriodicElement {