18c80dbd9SYoshie Muranaka<table class="bmc-table {{$ctrl.size}}"> 2b1f64248SYoshie Muranaka <thead class="bmc-table__head"> 3b1f64248SYoshie Muranaka <!-- Header row (non-sortable) --> 4b1f64248SYoshie Muranaka <tr ng-if="!$ctrl.sortable"> 5b1f64248SYoshie Muranaka <th ng-repeat="headerItem in $ctrl.header" 6fa56273dSYoshie Muranaka class="bmc-table__column-header"> 7b1f64248SYoshie Muranaka {{headerItem.label}} 8b1f64248SYoshie Muranaka </th> 9b1f64248SYoshie Muranaka </tr> 10b1f64248SYoshie Muranaka <!-- Header row (sortable) --> 11b1f64248SYoshie Muranaka <tr ng-if="$ctrl.sortable"> 12b1f64248SYoshie Muranaka <th ng-repeat="headerItem in $ctrl.header track by $index" 13b1f64248SYoshie Muranaka class="bmc-table__column-header"> 14b1f64248SYoshie Muranaka <span ng-if="!headerItem.sortable"> 15b1f64248SYoshie Muranaka {{headerItem.label}} 16b1f64248SYoshie Muranaka </span> 17b1f64248SYoshie Muranaka <span ng-if="headerItem.sortable" 18b1f64248SYoshie Muranaka ng-click="$ctrl.onClickSort($index)" 19b1f64248SYoshie Muranaka class="bmc-table__column-header--sortable"> 20b1f64248SYoshie Muranaka {{headerItem.label}} 21b1f64248SYoshie Muranaka <!-- Sort icons --> 22b1f64248SYoshie Muranaka <button class="sort-icon" 23b1f64248SYoshie Muranaka type="button" 24b1f64248SYoshie Muranaka aria-label="sort {{headerItem.label}}"> 25b1f64248SYoshie Muranaka <icon file="icon-arrow--up.svg" 26b1f64248SYoshie Muranaka ng-if="$index === $ctrl.activeSort" 27b1f64248SYoshie Muranaka ng-class="{ 28b1f64248SYoshie Muranaka 'sort-icon--descending': !$ctrl.sortAscending, 29b1f64248SYoshie Muranaka 'sort-icon--ascending' : $ctrl.sortAscending }" 30b1f64248SYoshie Muranaka class="sort-icon--active" 31b1f64248SYoshie Muranaka aria-hidden="true"></icon> 32b1f64248SYoshie Muranaka <span ng-if="$index !== $ctrl.activeSort" 33b1f64248SYoshie Muranaka class="sort-icon--inactive" 34b1f64248SYoshie Muranaka aria-hidden="true"> 35b1f64248SYoshie Muranaka <icon file="icon-arrow--up.svg"></icon> 36b1f64248SYoshie Muranaka <icon file="icon-arrow--down.svg"></icon> 37b1f64248SYoshie Muranaka </span> 38b1f64248SYoshie Muranaka </button> 39b1f64248SYoshie Muranaka </span> 40fa56273dSYoshie Muranaka </th> 41fa56273dSYoshie Muranaka </tr> 42fa56273dSYoshie Muranaka </thead> 43b1f64248SYoshie Muranaka <tbody class="bmc-table__body"> 44fa56273dSYoshie Muranaka <!-- Data rows --> 45b1f64248SYoshie Muranaka <tr ng-if="$ctrl.data.length > 0" 46*1d83af07SYoshie Muranaka ng-repeat-start="row in $ctrl.data track by $index" 47*1d83af07SYoshie Muranaka class="bmc-table__row" 48*1d83af07SYoshie Muranaka ng-class="{ 49*1d83af07SYoshie Muranaka 'bmc-table__row--expanded': $ctrl.expandedRows.has($index) 50*1d83af07SYoshie Muranaka }"> 51*1d83af07SYoshie Muranaka <!-- Row expansion trigger --> 52*1d83af07SYoshie Muranaka <td ng-if="$ctrl.expandable" 53*1d83af07SYoshie Muranaka class="bmc-table__cell"> 54*1d83af07SYoshie Muranaka <button type="button" 55*1d83af07SYoshie Muranaka class="btn btn--expand" 56*1d83af07SYoshie Muranaka aria-label="expand row" 57*1d83af07SYoshie Muranaka ng-click="$ctrl.onClickExpand($index)"> 58*1d83af07SYoshie Muranaka <icon file="icon-chevron-right.svg" aria-hidden="true"></icon> 59*1d83af07SYoshie Muranaka </button> 60*1d83af07SYoshie Muranaka </td> 61fa56273dSYoshie Muranaka <!-- Row item --> 628c80dbd9SYoshie Muranaka <td ng-repeat="item in row.uiData track by $index" 63fa56273dSYoshie Muranaka class="bmc-table__cell"> 648c80dbd9SYoshie Muranaka <ng-bind-html ng-bind-html="item"></ng-bind-html> 65fa56273dSYoshie Muranaka </td> 66fa56273dSYoshie Muranaka <!-- Row Actions --> 67bb688795SYoshie Muranaka <td ng-if="$ctrl.rowActionsEnabled" 68fa56273dSYoshie Muranaka class="bmc-table__cell bmc-table__row-actions"> 69bb688795SYoshie Muranaka <table-actions 70bb688795SYoshie Muranaka actions="row.actions" 71bb688795SYoshie Muranaka emit-action="$ctrl.onEmitTableAction(action, row)"> 72bb688795SYoshie Muranaka </table-actions> 73fa56273dSYoshie Muranaka </td> 74fa56273dSYoshie Muranaka </tr> 75*1d83af07SYoshie Muranaka <!-- Expansion row --> 76*1d83af07SYoshie Muranaka <tr ng-repeat-end 77*1d83af07SYoshie Muranaka ng-if="$ctrl.expandedRows.has($index)" 78*1d83af07SYoshie Muranaka class="bmc-table__expansion-row"> 79*1d83af07SYoshie Muranaka <td class="bmc-table__cell"></td> 80*1d83af07SYoshie Muranaka <td class="bmc-table__cell" 81*1d83af07SYoshie Muranaka colspan="{{$ctrl.header.length - 1}}"> 82*1d83af07SYoshie Muranaka <ng-bind-html 83*1d83af07SYoshie Muranaka ng-bind-html="row.expandContent || 'No data'"> 84*1d83af07SYoshie Muranaka </ng-bind-html> 85*1d83af07SYoshie Muranaka </td> 86*1d83af07SYoshie Muranaka </tr> 87fa56273dSYoshie Muranaka <!-- Empty table --> 88*1d83af07SYoshie Muranaka <tr ng-if="$ctrl.data.length === 0" 89*1d83af07SYoshie Muranaka class="bmc-table__expansion-row"> 90*1d83af07SYoshie Muranaka <td class="bmc-table__cell" 91*1d83af07SYoshie Muranaka colspan="{{$ctrl.header.length}}">No data</td> 92fa56273dSYoshie Muranaka </tr> 93fa56273dSYoshie Muranaka </tbody> 94fa56273dSYoshie Muranaka</table>