//-
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You under the Apache License, Version 2.0
    (the "License"); you may not use this file except in compliance with
    the License.  You may obtain a copy of the License at

         http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.

.ui-grid-header.ui-grid-header--subcategories(role='rowgroup')
    .ui-grid-top-panel
        .ui-grid-header-viewport
            .ui-grid-header-canvas
                .ui-grid-header-cell-wrapper(ng-style='colContainer.headerCellWrapperStyle()')
                    .ui-grid-header-cell-row(role='row')
                        .ui-grid-header-cell.ui-grid-clearfix(
                            ng-if='col.colDef.name === "treeBaseRowHeaderCol" || col.colDef.name === "selectionRowHeaderCol"'
                            ng-repeat='col in colContainer.renderedColumns track by col.uid'
                            ng-class='{ disabled: !grid.options.multiSelect && col.colDef.name === "selectionRowHeaderCol"}'

                            col='col'
                            ui-grid-header-cell=''
                            render-index='$index'
                        )
                        .ui-grid-header-span.ui-grid-header-cell.ui-grid-clearfix.ui-grid-category(ng-repeat='cat in grid.options.categories', ng-if='cat.visible && \
                        (colContainer.renderedColumns | uiGridSubcategories: cat.name).length > 0')
                            div(ng-show='(colContainer.renderedColumns|uiGridSubcategories:cat.name).length > 1')
                                .ui-grid-cell-contents {{ cat.name }}
                            .ui-grid-header-cell-row
                                .ui-grid-header-cell.ui-grid-clearfix(ng-repeat='col in (colContainer.renderedColumns|uiGridSubcategories:cat.name) track by col.uid' ui-grid-header-cell='' col='col' render-index='$index')
