(function (global, factory) {
    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('rxjs/operators'), require('@bravobit/bb-foundation/api'), require('rxjs'), require('@angular/forms'), require('@bravobit/bb-foundation/elements'), require('@bravobit/bb-foundation'), require('@bravobit/bb-foundation/localize'), require('@angular/common')) :
    typeof define === 'function' && define.amd ? define('@bravobit/bb-foundation/table', ['exports', '@angular/core', 'rxjs/operators', '@bravobit/bb-foundation/api', 'rxjs', '@angular/forms', '@bravobit/bb-foundation/elements', '@bravobit/bb-foundation', '@bravobit/bb-foundation/localize', '@angular/common'], factory) :
    (global = global || self, factory((global.bravobit = global.bravobit || {}, global.bravobit['bb-foundation'] = global.bravobit['bb-foundation'] || {}, global.bravobit['bb-foundation'].table = {}), global.ng.core, global.rxjs.operators, global.bravobit['bb-foundation'].api, global.rxjs, global.ng.forms, global.bravobit['bb-foundation'].elements, global.bravobit['bb-foundation'], global.bravobit['bb-foundation'].localize, global.ng.common));
}(this, (function (exports, core, operators, api, rxjs, forms, elements, bbFoundation, localize, common) { 'use strict';

    /*! *****************************************************************************
    Copyright (c) Microsoft Corporation. All rights reserved.
    Licensed 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

    THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
    WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
    MERCHANTABLITY OR NON-INFRINGEMENT.

    See the Apache Version 2.0 License for specific language governing permissions
    and limitations under the License.
    ***************************************************************************** */
    /* global Reflect, Promise */

    var extendStatics = function(d, b) {
        extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
        return extendStatics(d, b);
    };

    function __extends(d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    }

    var __assign = function() {
        __assign = Object.assign || function __assign(t) {
            for (var s, i = 1, n = arguments.length; i < n; i++) {
                s = arguments[i];
                for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
            }
            return t;
        };
        return __assign.apply(this, arguments);
    };

    function __rest(s, e) {
        var t = {};
        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
            t[p] = s[p];
        if (s != null && typeof Object.getOwnPropertySymbols === "function")
            for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
                if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
                    t[p[i]] = s[p[i]];
            }
        return t;
    }

    function __decorate(decorators, target, key, desc) {
        var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
        else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        return c > 3 && r && Object.defineProperty(target, key, r), r;
    }

    function __param(paramIndex, decorator) {
        return function (target, key) { decorator(target, key, paramIndex); }
    }

    function __metadata(metadataKey, metadataValue) {
        if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
    }

    function __awaiter(thisArg, _arguments, P, generator) {
        return new (P || (P = Promise))(function (resolve, reject) {
            function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
            function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
            function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
            step((generator = generator.apply(thisArg, _arguments || [])).next());
        });
    }

    function __generator(thisArg, body) {
        var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
        return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
        function verb(n) { return function (v) { return step([n, v]); }; }
        function step(op) {
            if (f) throw new TypeError("Generator is already executing.");
            while (_) try {
                if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
                if (y = 0, t) op = [op[0] & 2, t.value];
                switch (op[0]) {
                    case 0: case 1: t = op; break;
                    case 4: _.label++; return { value: op[1], done: false };
                    case 5: _.label++; y = op[1]; op = [0]; continue;
                    case 7: op = _.ops.pop(); _.trys.pop(); continue;
                    default:
                        if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                        if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                        if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                        if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                        if (t[2]) _.ops.pop();
                        _.trys.pop(); continue;
                }
                op = body.call(thisArg, _);
            } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
            if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
        }
    }

    function __exportStar(m, exports) {
        for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
    }

    function __values(o) {
        var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;
        if (m) return m.call(o);
        return {
            next: function () {
                if (o && i >= o.length) o = void 0;
                return { value: o && o[i++], done: !o };
            }
        };
    }

    function __read(o, n) {
        var m = typeof Symbol === "function" && o[Symbol.iterator];
        if (!m) return o;
        var i = m.call(o), r, ar = [], e;
        try {
            while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
        }
        catch (error) { e = { error: error }; }
        finally {
            try {
                if (r && !r.done && (m = i["return"])) m.call(i);
            }
            finally { if (e) throw e.error; }
        }
        return ar;
    }

    function __spread() {
        for (var ar = [], i = 0; i < arguments.length; i++)
            ar = ar.concat(__read(arguments[i]));
        return ar;
    }

    function __spreadArrays() {
        for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
        for (var r = Array(s), k = 0, i = 0; i < il; i++)
            for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
                r[k] = a[j];
        return r;
    };

    function __await(v) {
        return this instanceof __await ? (this.v = v, this) : new __await(v);
    }

    function __asyncGenerator(thisArg, _arguments, generator) {
        if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
        var g = generator.apply(thisArg, _arguments || []), i, q = [];
        return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
        function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
        function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
        function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
        function fulfill(value) { resume("next", value); }
        function reject(value) { resume("throw", value); }
        function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
    }

    function __asyncDelegator(o) {
        var i, p;
        return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
        function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
    }

    function __asyncValues(o) {
        if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
        var m = o[Symbol.asyncIterator], i;
        return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
        function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
        function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
    }

    function __makeTemplateObject(cooked, raw) {
        if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
        return cooked;
    };

    function __importStar(mod) {
        if (mod && mod.__esModule) return mod;
        var result = {};
        if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
        result.default = mod;
        return result;
    }

    function __importDefault(mod) {
        return (mod && mod.__esModule) ? mod : { default: mod };
    }

    /**
     * @fileoverview added by tsickle
     * Generated from: lib/table-header-cell/table-header-cell.component.ts
     * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
     */
    var BbTableHeaderCell = /** @class */ (function () {
        function BbTableHeaderCell() {
            // Styling.
            this.disabled = false;
            // Constants.
            this._name = null;
            this._sort = 'none';
            this._sortDirections = ['asc', 'desc', 'none'];
            // State.
            this.state = new rxjs.BehaviorSubject(null);
        }
        Object.defineProperty(BbTableHeaderCell.prototype, "name", {
            get: /**
             * @return {?}
             */
            function () {
                return this._name;
            },
            set: /**
             * @param {?} value
             * @return {?}
             */
            function (value) {
                this._name = value;
                this.setState();
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(BbTableHeaderCell.prototype, "sort", {
            get: /**
             * @return {?}
             */
            function () {
                return this._sort;
            },
            set: /**
             * @param {?} value
             * @return {?}
             */
            function (value) {
                this._sort = value;
                this.setState();
            },
            enumerable: true,
            configurable: true
        });
        /**
         * @return {?}
         */
        BbTableHeaderCell.prototype.ngOnInit = /**
         * @return {?}
         */
        function () {
            this.setState();
        };
        /**
         * @return {?}
         */
        BbTableHeaderCell.prototype.onClick = /**
         * @return {?}
         */
        function () {
            var _this = this;
            // Check if the header cell is disabled.
            if (this.disabled) {
                return;
            }
            // Find the index of the current sort.
            /** @type {?} */
            var index = this._sortDirections.findIndex((/**
             * @param {?} item
             * @return {?}
             */
            function (item) { return item === _this.sort; }));
            // Increase the current index.
            /** @type {?} */
            var newIndex = index + 1;
            // If the sort is out of bounds set it to null.
            if (newIndex >= this._sortDirections.length) {
                newIndex = 0;
            }
            // Set the new sort.
            this.sort = this._sortDirections[newIndex];
        };
        /**
         * @return {?}
         */
        BbTableHeaderCell.prototype.setState = /**
         * @return {?}
         */
        function () {
            this.state.next({
                name: this.name,
                direction: this.sort
            });
        };
        BbTableHeaderCell.decorators = [
            { type: core.Component, args: [{
                        selector: 'bb-table-header-cell',
                        template: "<ng-content></ng-content>\r\n\r\n<!-- The indicator for the sort direction. -->\r\n<button *ngIf=\"!disabled\"\r\n        [class.asc]=\"sort === 'asc'\"\r\n        [class.desc]=\"sort === 'desc'\"\r\n        class=\"bb-table-header-cell-toggle\"\r\n        type=\"button\"></button>\r\n",
                        changeDetection: core.ChangeDetectionStrategy.OnPush,
                        host: { 'class': 'bb-table-header-cell' },
                        encapsulation: core.ViewEncapsulation.None,
                        preserveWhitespaces: false,
                        styles: [".bb-table-header-cell{height:50px;color:#212529;cursor:pointer;font-size:16px;font-weight:500;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding:10px 20px;position:relative;display:table-cell;vertical-align:middle;border-bottom:1px solid #d8d8d8}.bb-table-header-cell:active>.bb-table-header-cell-toggle{background-color:rgba(0,0,0,.08)}.bb-table-header-cell:not(.disabled){padding-right:52px}.bb-table-header-cell.fit{width:1%;white-space:nowrap}.bb-table-header-cell.left{text-align:left}.bb-table-header-cell.center{text-align:center}.bb-table-header-cell.right{text-align:right}.bb-table-header-cell.disabled{cursor:default;pointer-events:none}.bb-table-header-cell-toggle{top:50%;right:14px;width:22px;border:none;height:22px;margin-left:auto;position:absolute;border-radius:4px;-ms-transform:translateY(-50%);transform:translateY(-50%);background-position:center;background-repeat:no-repeat;background-color:transparent;transition:background-color .2s cubic-bezier(0,0,.2,1);background-image:url('data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 9 15\" width=\"9\" height=\"15\"%3E%3Cpath fill=\"%23dcdcdc\" d=\"M4.5 0L0 7h9z\"%3E%3C/path%3E%3Cpath fill=\"%23dcdcdc\" d=\"M4.5 15L9 8H0z\"%3E%3C/path%3E%3C/svg%3E')}.bb-table-header-cell-toggle.desc{background-image:url('data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 9 15\" width=\"9\" height=\"15\"%3E%3Cpath fill=\"%23dcdcdc\" d=\"M4.5 0L0 7h9z\"%3E%3C/path%3E%3Cpath fill=\"black\" d=\"M4.5 15L9 8H0z\"%3E%3C/path%3E%3C/svg%3E')}.bb-table-header-cell-toggle.asc{background-image:url('data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 9 15\" width=\"9\" height=\"15\"%3E%3Cpath fill=\"black\" d=\"M4.5 0L0 7h9z\"%3E%3C/path%3E%3Cpath fill=\"%23dcdcdc\" d=\"M4.5 15L9 8H0z\"%3E%3C/path%3E%3C/svg%3E')}"]
                    }] }
        ];
        BbTableHeaderCell.propDecorators = {
            disabled: [{ type: core.HostBinding, args: ['class.disabled',] }, { type: core.Input }],
            name: [{ type: core.Input }],
            sort: [{ type: core.Input }],
            onClick: [{ type: core.HostListener, args: ['click',] }]
        };
        return BbTableHeaderCell;
    }());
    if (false) {
        /** @type {?} */
        BbTableHeaderCell.prototype.disabled;
        /**
         * @type {?}
         * @private
         */
        BbTableHeaderCell.prototype._name;
        /**
         * @type {?}
         * @private
         */
        BbTableHeaderCell.prototype._sort;
        /**
         * @type {?}
         * @private
         */
        BbTableHeaderCell.prototype._sortDirections;
        /** @type {?} */
        BbTableHeaderCell.prototype.state;
    }

    /**
     * @fileoverview added by tsickle
     * Generated from: lib/table/table.component.ts
     * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
     */
    var BbTableColumnDef = /** @class */ (function () {
        function BbTableColumnDef() {
        }
        BbTableColumnDef.decorators = [
            { type: core.Directive, args: [{
                        selector: '[bbTableColumnDef]'
                    },] }
        ];
        return BbTableColumnDef;
    }());
    var BbTable = /** @class */ (function () {
        function BbTable() {
            var _this = this;
            // Inputs.
            this.identifier = null;
            this.queryFields = [];
            // Sizes.
            this._sizes = [25, 50, 75, 100];
            // Templates.
            this._header = true;
            this._footer = true;
            // Optimizations.
            this.trackByFn = (/**
             * @param {?} index
             * @param {?} item
             * @return {?}
             */
            function (index, item) { return _this.identifier ? item[_this.identifier] : index; });
            this.trackByValue = (/**
             * @param {?} index
             * @param {?} item
             * @return {?}
             */
            function (index, item) { return item; });
            // State.
            this.queryControl = new forms.FormControl('');
            this.sizeControl = new forms.FormControl(this._sizes[0]);
            this.pageControl = new forms.FormControl(1);
        }
        Object.defineProperty(BbTable.prototype, "sizes", {
            get: /**
             * @return {?}
             */
            function () {
                return this._sizes;
            },
            set: /**
             * @param {?} newValue
             * @return {?}
             */
            function (newValue) {
                this.updateSizes(newValue);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(BbTable.prototype, "header", {
            get: /**
             * @return {?}
             */
            function () {
                // If the header equals false just return null.
                if (!this._header) {
                    return null;
                }
                // If the header is true use the default header.
                if (this._header === true) {
                    return this.headerTemplate;
                }
                // It must be a custom header, use this.
                return this._header;
            },
            set: /**
             * @param {?} newValue
             * @return {?}
             */
            function (newValue) {
                this._header = newValue;
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(BbTable.prototype, "footer", {
            get: /**
             * @return {?}
             */
            function () {
                // If the footer equals false just return null.
                if (!this._footer) {
                    return null;
                }
                // If the footer is true use the default header.
                if (this._footer === true) {
                    return this.footerTemplate;
                }
                // It must be a custom footer, use this.
                return this._footer;
            },
            set: /**
             * @param {?} newValue
             * @return {?}
             */
            function (newValue) {
                this._footer = newValue;
            },
            enumerable: true,
            configurable: true
        });
        /**
         * @return {?}
         */
        BbTable.prototype.ngOnInit = /**
         * @return {?}
         */
        function () {
            var _this = this;
            // Validate the data source exists.
            if (!this.dataSource) {
                throw new Error('The data source was not passed properly.');
            }
            // Create a new request.
            this.request = new api.DataSourceRequest();
            this.isLoading$ = this.request.loading;
            // Pass the request to the data source.
            this.data$ = this.dataSource.handle(this.request).pipe(operators.tap((/**
             * @return {?}
             */
            function () { return _this.request.stopLoading(); })), operators.map((/**
             * @param {?} result
             * @return {?}
             */
            function (result) {
                /** @type {?} */
                var count = (result && result.data && result.data.length) || 0;
                if (count <= 0) {
                    return { state: 'success-empty', result: result };
                }
                return { state: 'success-all', result: result };
            })), operators.catchError((/**
             * @param {?} error
             * @return {?}
             */
            function (error) {
                _this.request.stopLoading();
                if (error.status === 404) {
                    return rxjs.of({ state: 'error-not-found' });
                }
                if (error.status === 500) {
                    return rxjs.of({ state: 'error-server' });
                }
                return rxjs.of({ state: 'error-unknown' });
            })));
        };
        /**
         * @return {?}
         */
        BbTable.prototype.ngAfterViewInit = /**
         * @return {?}
         */
        function () {
            var _this = this;
            /** @type {?} */
            var queryChanges$ = this.queryControl.valueChanges.pipe(operators.debounceTime(400), operators.distinctUntilChanged(), operators.startWith([this.queryControl.value]));
            /** @type {?} */
            var sortChanges$ = this.headerCells.changes.pipe(operators.startWith(this.headerCells.toArray()), operators.switchMap((/**
             * @param {?} headerCells
             * @return {?}
             */
            function (headerCells) { return rxjs.combineLatest(headerCells.map((/**
             * @param {?} cell
             * @return {?}
             */
            function (cell) { return cell.state; }))); })), operators.map((/**
             * @param {?} cells
             * @return {?}
             */
            function (cells) { return cells.filter((/**
             * @param {?} cell
             * @return {?}
             */
            function (cell) { return !!cell['name'] && cell['direction'] !== 'none'; })); })));
            /** @type {?} */
            var sizeChanges$ = this.sizeControl.valueChanges.pipe(operators.startWith([this.sizeControl.value]));
            /** @type {?} */
            var pageChanges$ = this.pageControl.valueChanges.pipe(operators.startWith([this.pageControl.value]));
            this._subscription = rxjs.combineLatest([
                queryChanges$,
                sortChanges$,
                sizeChanges$,
                pageChanges$
            ]).subscribe((/**
             * @param {?} __0
             * @return {?}
             */
            function (_a) {
                var _b = __read(_a, 4), query = _b[0], sort = _b[1], pageSize = _b[2], pageNumber = _b[3];
                _this.request.startLoading();
                return _this.request.update({
                    query: query,
                    pageSize: pageSize,
                    pageNumber: pageNumber,
                    queryFields: _this.queryFields,
                    sort: (/** @type {?} */ (sort))
                });
            }));
        };
        /**
         * @return {?}
         */
        BbTable.prototype.ngOnDestroy = /**
         * @return {?}
         */
        function () {
            this._subscription && this._subscription.unsubscribe();
        };
        /**
         * @return {?}
         */
        BbTable.prototype.refresh = /**
         * @return {?}
         */
        function () {
            return this.request.update();
        };
        /**
         * @private
         * @param {?} newValue
         * @return {?}
         */
        BbTable.prototype.updateSizes = /**
         * @private
         * @param {?} newValue
         * @return {?}
         */
        function (newValue) {
            // Validate the sizes has at least one value.
            if (newValue.length <= 0) {
                throw new Error('Cannot set an empty array as the sizes.');
            }
            // Set the new size.
            this._sizes = newValue;
            // Check if the current selected value is
            // in the new sizes array.
            if (this._sizes.includes(this.sizeControl.value)) {
                return;
            }
            // Set the first value in the array as
            // the new value.
            /** @type {?} */
            var firstValue = this._sizes[0];
            this.sizeControl.setValue(firstValue);
        };
        BbTable.decorators = [
            { type: core.Component, args: [{
                        selector: 'bb-table',
                        template: "<!--\r\n    This is the header of the table. It can be a user\r\n    defined custom header or just the default header.\r\n-->\r\n\r\n<header *ngIf=\"header as headerTemplate\"\r\n        class=\"bb-table-top-actions\">\r\n    <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\r\n</header>\r\n\r\n<!--\r\n    This is the table that contains the\r\n    rows and columns.\r\n-->\r\n\r\n<div class=\"bb-table-wrapper\">\r\n    <div *ngIf=\"isLoading$ | async\"\r\n         class=\"bb-table-progress\">\r\n        <div class=\"bb-table-indeterminate\"></div>\r\n    </div>\r\n    <table class=\"bb-table-container\">\r\n        <thead>\r\n            <tr>\r\n                <ng-content select=\"bb-table-header-cell\"></ng-content>\r\n            </tr>\r\n        </thead>\r\n        <tbody *ngIf=\"data$ | async as data; else isLoadingTemplate\"\r\n               [ngSwitch]=\"data?.state\">\r\n            <ng-container *ngSwitchCase=\"'success-all'\">\r\n                <tr *ngFor=\"let item of data?.result?.data; trackBy: trackByFn\">\r\n                    <ng-container *ngFor=\"let template of tableColumnTemplates\">\r\n                        <ng-container *ngTemplateOutlet=\"template; context: {item: item}\"></ng-container>\r\n                    </ng-container>\r\n                </tr>\r\n            </ng-container>\r\n\r\n            <ng-container *ngSwitchCase=\"'success-empty'\">\r\n                <ng-container\r\n                    *ngTemplateOutlet=\"errorTemplate; context: {content: 'tables.empty'}\"></ng-container>\r\n            </ng-container>\r\n\r\n            <ng-container *ngSwitchCase=\"'error-not-found'\">\r\n                <ng-container\r\n                    *ngTemplateOutlet=\"errorTemplate; context: {content: 'tables.error_not_found'}\"></ng-container>\r\n            </ng-container>\r\n\r\n            <ng-container *ngSwitchCase=\"'error-server'\">\r\n                <ng-container\r\n                    *ngTemplateOutlet=\"errorTemplate; context: {content: 'tables.error_server'}\"></ng-container>\r\n            </ng-container>\r\n\r\n            <ng-container *ngSwitchDefault>\r\n                <ng-container\r\n                    *ngTemplateOutlet=\"errorTemplate; context: {content: 'tables.error_unknown'}\"></ng-container>\r\n            </ng-container>\r\n        </tbody>\r\n    </table>\r\n</div>\r\n\r\n<footer *ngIf=\"footer as footerTemplate\"\r\n        class=\"bb-table-bottom-actions\">\r\n    <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\r\n</footer>\r\n\r\n<ng-template #isLoadingTemplate>\r\n    <tr>\r\n        <td [attr.colspan]=\"tableColumnTemplates?.length\"\r\n            class=\"bb-table-template\">\r\n            <div class=\"bb-table-template-content\">\r\n                {{ 'tables.loading' | bbLocalize }}\r\n            </div>\r\n        </td>\r\n    </tr>\r\n</ng-template>\r\n\r\n<!--\r\n    This is the template that will be used when the user has not\r\n    supplied a custom header template.\r\n-->\r\n\r\n<ng-template #headerTemplate>\r\n    <ng-content></ng-content>\r\n    <bb-form-control>\r\n        <input [formControl]=\"queryControl\"\r\n               [placeholder]=\"'tables.search' | bbLocalize\"\r\n               bbInput\r\n               autocomplete=\"off\">\r\n        <bb-icon *ngIf=\"queryControl?.value?.length <= 0; else closeButtonTemplate\"\r\n                 bbSuffix\r\n                 src=\"material:search\">\r\n        </bb-icon>\r\n    </bb-form-control>\r\n</ng-template>\r\n\r\n<!--\r\n    This is the template that will be used when the user has not\r\n    supplied a custom footer template.\r\n-->\r\n\r\n<ng-template #footerTemplate>\r\n    <bb-form-control *ngIf=\"sizes?.length > 1\">\r\n        <select [formControl]=\"sizeControl\"\r\n                bbInput\r\n                title=\"Sizes\">\r\n            <option *ngFor=\"let item of sizes; trackBy: trackByValue\"\r\n                    [ngValue]=\"item\">\r\n                {{ item }} / {{ 'tables.page' | bbLocalize }}\r\n            </option>\r\n        </select>\r\n    </bb-form-control>\r\n\r\n    <bb-table-pager [totalPages]=\"(data$ | async)?.result?.totalPages\"\r\n                    [formControl]=\"pageControl\">\r\n    </bb-table-pager>\r\n</ng-template>\r\n\r\n<!--\r\n    This the template that will be used when the user\r\n    has filled in some data in the query control.\r\n-->\r\n\r\n<ng-template #closeButtonTemplate>\r\n    <button bbSuffix\r\n            (click)=\"queryControl?.patchValue('')\"\r\n            type=\"button\"\r\n            class=\"bb-table-progress-close-query\">\r\n        <bb-icon src=\"material:close\"></bb-icon>\r\n    </button>\r\n</ng-template>\r\n\r\n<ng-template #errorTemplate let-content=\"content\">\r\n    <tr>\r\n        <td [attr.colspan]=\"tableColumnTemplates?.length\"\r\n            class=\"bb-table-template\">\r\n            <div class=\"bb-table-template-content\">\r\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"64\" height=\"41\">\r\n                    <g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(0 1)\">\r\n                        <ellipse cx=\"32\" cy=\"33\" fill=\"#F5F5F5\" rx=\"32\" ry=\"7\"></ellipse>\r\n                        <g fill-rule=\"nonzero\" stroke=\"#D9D9D9\">\r\n                            <path\r\n                                d=\"M55 12.7605604L44.8543047 1.25739633C44.3674414.47382661 43.6558789 0 42.9067617 0H21.0932383c-.7491172 0-1.4606797.47395025-1.947543 1.25739633L9 12.7605604V22h46v-9.2394396z\"></path>\r\n                            <path fill=\"#FAFAFA\"\r\n                                  d=\"M41.6132813 15.9315c0-1.6056489.9936718-2.931266 2.2264179-2.9315H55v18.1371277C55 33.2589574 53.6793867 35 52.0504297 35H11.94957031C10.32052344 35 9 33.2588404 9 31.1371277V13h11.1603008c1.2327461 0 2.226418 1.3228085 2.226418 2.9284574v.0211809c0 1.6056489 1.0049921 2.9015426 2.2377382 2.9015426h14.751086c1.2327461 0 2.2377383-1.3078298 2.2377383-2.9134788V15.9315z\"></path>\r\n                        </g>\r\n                    </g>\r\n                </svg>\r\n                {{ content | bbLocalize }}\r\n            </div>\r\n        </td>\r\n    </tr>\r\n</ng-template>\r\n",
                        host: { 'class': 'bb-table' },
                        changeDetection: core.ChangeDetectionStrategy.OnPush,
                        encapsulation: core.ViewEncapsulation.None,
                        preserveWhitespaces: false,
                        styles: [".bb-table{width:100%;display:block;box-shadow:0 6px 6px -6px rgba(0,0,0,.1)}.bb-table.plain{box-shadow:none}.bb-table.plain>.bb-table-wrapper{border-top-left-radius:0;border-top-right-radius:0}.bb-table-wrapper{overflow-x:auto;position:relative;background-color:#fff;border-top-left-radius:4px;border-top-right-radius:4px}.bb-table-container{width:100%}.bb-table-container td{border-bottom:1px solid #d8d8d8}.bb-table-top-actions{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-direction:column;flex-direction:column;padding:20px 20px 10px;background-color:#fff;-ms-flex-pack:end;justify-content:flex-end;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom:1px solid #d8d8d8}.bb-table-top-actions>*{margin-left:0;margin-bottom:10px}.bb-table-top-actions+.bb-table-wrapper{border-radius:0}.bb-table-bottom-actions{height:60px;display:-ms-flexbox;display:flex;padding:0 20px;overflow-x:auto;-ms-flex-align:center;align-items:center;background-color:#fff;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.bb-table-template{border:none;background-color:#f5f5f5;border-bottom:1px solid #d8d8d8}.bb-table-template-content{padding:20px;display:-ms-flexbox;display:flex;color:#3d464d;font-size:16px;line-height:1.2;font-weight:500;min-height:140px;text-align:center;-ms-flex-align:center;align-items:center;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}.bb-table-template-content>svg{margin-bottom:12px}.bb-table-progress{top:0;left:0;right:0;opacity:0;width:100%;height:4px;display:block;overflow:hidden;position:absolute;background-color:rgba(47,64,139,.3);-webkit-animation:250ms cubic-bezier(0,0,.2,1) .1s forwards fadeIn;animation:250ms cubic-bezier(0,0,.2,1) .1s forwards fadeIn}.bb-table-progress .bb-table-indeterminate{background-color:#2f408b}.bb-table-progress .bb-table-indeterminate:before{top:0;left:0;bottom:0;content:\"\";position:absolute;will-change:left,right;background-color:inherit;-webkit-animation:2.1s cubic-bezier(.65,.815,.735,.395) infinite indeterminate;animation:2.1s cubic-bezier(.65,.815,.735,.395) infinite indeterminate}.bb-table-progress .bb-table-indeterminate:after{top:0;left:0;bottom:0;content:\"\";position:absolute;-webkit-animation-delay:1.15s;animation-delay:1.15s;will-change:left,right;background-color:inherit;-webkit-animation:2.1s cubic-bezier(.165,.84,.44,1) infinite indeterminate-short;animation:2.1s cubic-bezier(.165,.84,.44,1) infinite indeterminate-short}.bb-table-progress-close-query{padding:0;border:none;border-radius:4px;background-color:transparent;transition:background-color 250ms cubic-bezier(0,0,.2,1)}.bb-table-progress-close-query:hover{background-color:rgba(0,0,0,.08)}.bb-table-progress-close-query:focus{background-color:rgba(0,0,0,.12)}.bb-table-progress-close-query:active{background-color:rgba(0,0,0,.16)}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@-webkit-keyframes indeterminate{0%{left:-35%;right:100%}100%,60%{left:100%;right:-90%}}@keyframes indeterminate{0%{left:-35%;right:100%}100%,60%{left:100%;right:-90%}}@-webkit-keyframes indeterminate-short{0%{left:-200%;right:100%}100%,60%{left:107%;right:-8%}}@keyframes indeterminate-short{0%{left:-200%;right:100%}100%,60%{left:107%;right:-8%}}@media only screen and (min-width:768px){.bb-table-top-actions{-ms-flex-direction:row;flex-direction:row}.bb-table-top-actions>:not(:first-child){margin-left:10px;margin-bottom:10px}}"]
                    }] }
        ];
        BbTable.propDecorators = {
            headerCells: [{ type: core.ContentChildren, args: [BbTableHeaderCell,] }],
            tableColumnTemplates: [{ type: core.ContentChildren, args: [BbTableColumnDef, { read: core.TemplateRef },] }],
            headerTemplate: [{ type: core.ViewChild, args: ['headerTemplate', { static: true, read: core.TemplateRef },] }],
            footerTemplate: [{ type: core.ViewChild, args: ['footerTemplate', { static: true, read: core.TemplateRef },] }],
            identifier: [{ type: core.Input }],
            dataSource: [{ type: core.Input }],
            queryFields: [{ type: core.Input }],
            sizes: [{ type: core.Input }],
            header: [{ type: core.Input }],
            footer: [{ type: core.Input }]
        };
        return BbTable;
    }());
    if (false) {
        /** @type {?} */
        BbTable.prototype.headerCells;
        /** @type {?} */
        BbTable.prototype.tableColumnTemplates;
        /** @type {?} */
        BbTable.prototype.headerTemplate;
        /** @type {?} */
        BbTable.prototype.footerTemplate;
        /** @type {?} */
        BbTable.prototype.identifier;
        /** @type {?} */
        BbTable.prototype.dataSource;
        /** @type {?} */
        BbTable.prototype.queryFields;
        /**
         * @type {?}
         * @private
         */
        BbTable.prototype._sizes;
        /**
         * @type {?}
         * @private
         */
        BbTable.prototype._header;
        /**
         * @type {?}
         * @private
         */
        BbTable.prototype._footer;
        /** @type {?} */
        BbTable.prototype.trackByFn;
        /** @type {?} */
        BbTable.prototype.trackByValue;
        /** @type {?} */
        BbTable.prototype.request;
        /** @type {?} */
        BbTable.prototype.data$;
        /** @type {?} */
        BbTable.prototype.isLoading$;
        /** @type {?} */
        BbTable.prototype.queryControl;
        /** @type {?} */
        BbTable.prototype.sizeControl;
        /** @type {?} */
        BbTable.prototype.pageControl;
        /**
         * @type {?}
         * @private
         */
        BbTable.prototype._subscription;
    }

    /**
     * @fileoverview added by tsickle
     * Generated from: lib/table-cell/table-cell.component.ts
     * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
     */
    var BbTableCell = /** @class */ (function () {
        function BbTableCell() {
        }
        BbTableCell.decorators = [
            { type: core.Component, args: [{
                        selector: 'bb-table-cell',
                        template: "<div>\r\n    <ng-content></ng-content>\r\n</div>",
                        changeDetection: core.ChangeDetectionStrategy.OnPush,
                        host: { 'class': 'bb-table-cell' },
                        encapsulation: core.ViewEncapsulation.None,
                        preserveWhitespaces: false,
                        styles: [".bb-table-cell{color:#848f99;font-size:14px;text-align:left;line-height:1.2;font-weight:400;padding:12px 20px;display:table-cell;word-wrap:break-word;vertical-align:middle;background-color:#f5f5f5;border-bottom:1px solid #d8d8d8}.bb-table-cell:not(:last-child){border-right:1px solid #d8d8d8}.bb-table-cell.fit{width:1%;white-space:nowrap}.bb-table-cell.left{text-align:left}.bb-table-cell.center{text-align:center}.bb-table-cell.right{text-align:right}"]
                    }] }
        ];
        return BbTableCell;
    }());

    /**
     * @fileoverview added by tsickle
     * Generated from: lib/table-pager/table-pager.component.ts
     * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
     */
    var BbTablePagerBase = /** @class */ (function () {
        function BbTablePagerBase() {
        }
        return BbTablePagerBase;
    }());
    /** @type {?} */
    var BbTablePagerMixinBase = bbFoundation.mixinDisabled(BbTablePagerBase);
    var BbTablePager = /** @class */ (function (_super) {
        __extends(BbTablePager, _super);
        function BbTablePager() {
            var _this = _super !== null && _super.apply(this, arguments) || this;
            // Inputs.
            _this.amountOfButtons = 5;
            _this.showArrowButtons = true;
            // Methods.
            _this.onChange = (/**
             * @return {?}
             */
            function () { return ({}); });
            _this.onTouched = (/**
             * @return {?}
             */
            function () { return ({}); });
            _this.trackByIndex = (/**
             * @param {?} index
             * @param {?} item
             * @return {?}
             */
            function (index, item) { return item.page; });
            // Data.
            _this._totalPages$ = new rxjs.BehaviorSubject(1);
            _this._pageNumber$ = new rxjs.BehaviorSubject(1);
            return _this;
        }
        /**
         * @return {?}
         */
        BbTablePager.prototype.ngOnInit = /**
         * @return {?}
         */
        function () {
            var _this = this;
            // Validate the previous button is disabled.
            this.isPreviousDisabled$ = this._pageNumber$.pipe(operators.map((/**
             * @param {?} pageNumber
             * @return {?}
             */
            function (pageNumber) { return pageNumber === 1; })));
            // Validate the next button is disabled.
            this.isNextDisabled$ = rxjs.combineLatest([this._pageNumber$, this._totalPages$]).pipe(operators.map((/**
             * @param {?} __0
             * @return {?}
             */
            function (_a) {
                var _b = __read(_a, 2), pageNumber = _b[0], totalPages = _b[1];
                return pageNumber === totalPages;
            })));
            // Create the list with page numbers.
            this.list$ = rxjs.combineLatest([this._pageNumber$, this._totalPages$]).pipe(operators.map((/**
             * @param {?} __0
             * @return {?}
             */
            function (_a) {
                var _b = __read(_a, 2), pageNumber = _b[0], totalPages = _b[1];
                return _this.filterActivePages(pageNumber, totalPages);
            })), operators.share());
        };
        Object.defineProperty(BbTablePager.prototype, "pageNumber", {
            get: /**
             * @return {?}
             */
            function () {
                return this._pageNumber$.getValue();
            },
            set: /**
             * @param {?} newValue
             * @return {?}
             */
            function (newValue) {
                this.update(newValue);
            },
            enumerable: true,
            configurable: true
        });
        Object.defineProperty(BbTablePager.prototype, "totalPages", {
            get: /**
             * @return {?}
             */
            function () {
                return this._totalPages$.getValue();
            },
            set: /**
             * @param {?} newValue
             * @return {?}
             */
            function (newValue) {
                /** @type {?} */
                var newTotalPages = Math.max(1, newValue);
                this._totalPages$.next(newTotalPages);
            },
            enumerable: true,
            configurable: true
        });
        /**
         * @param {?} fn
         * @return {?}
         */
        BbTablePager.prototype.registerOnChange = /**
         * @param {?} fn
         * @return {?}
         */
        function (fn) {
            this.onChange = fn;
        };
        /**
         * @param {?} fn
         * @return {?}
         */
        BbTablePager.prototype.registerOnTouched = /**
         * @param {?} fn
         * @return {?}
         */
        function (fn) {
            this.onTouched = fn;
        };
        /**
         * @param {?} isDisabled
         * @return {?}
         */
        BbTablePager.prototype.setDisabledState = /**
         * @param {?} isDisabled
         * @return {?}
         */
        function (isDisabled) {
            this.disabled = isDisabled;
        };
        /**
         * @param {?} newValue
         * @return {?}
         */
        BbTablePager.prototype.writeValue = /**
         * @param {?} newValue
         * @return {?}
         */
        function (newValue) {
            this.update(newValue, false);
        };
        /**
         * @return {?}
         */
        BbTablePager.prototype.goToPrevious = /**
         * @return {?}
         */
        function () {
            /** @type {?} */
            var newValue = this._pageNumber$.getValue() - 1;
            return this.update(newValue);
        };
        /**
         * @return {?}
         */
        BbTablePager.prototype.goToNext = /**
         * @return {?}
         */
        function () {
            /** @type {?} */
            var newValue = this._pageNumber$.getValue() + 1;
            return this.update(newValue);
        };
        /**
         * @param {?} index
         * @return {?}
         */
        BbTablePager.prototype.goToIndex = /**
         * @param {?} index
         * @return {?}
         */
        function (index) {
            return this.update(index);
        };
        /**
         * @private
         * @param {?} pageNumber
         * @param {?=} notify
         * @return {?}
         */
        BbTablePager.prototype.update = /**
         * @private
         * @param {?} pageNumber
         * @param {?=} notify
         * @return {?}
         */
        function (pageNumber, notify) {
            if (notify === void 0) { notify = true; }
            // You can only update when not disabled.
            if (this.disabled) {
                return;
            }
            // Calculate the new value.
            /** @type {?} */
            var newValue = Math.min(this.totalPages, Math.max(1, pageNumber));
            // Don't do anything if the page number is the same.
            if (this._pageNumber$.getValue() === newValue) {
                return;
            }
            // Push the new value.
            this._pageNumber$.next(newValue);
            if (notify) {
                return this.onChange(pageNumber);
            }
        };
        /**
         * @private
         * @param {?} pageNumber
         * @return {?}
         */
        BbTablePager.prototype.calculatePages = /**
         * @private
         * @param {?} pageNumber
         * @return {?}
         */
        function (pageNumber) {
            /** @type {?} */
            var min = 1;
            /** @type {?} */
            var max = this.totalPages;
            /** @type {?} */
            var amount = Math.max(1, this.amountOfButtons);
            /** @type {?} */
            var data = Array(amount)
                .fill(0)
                .map((/**
             * @param {?} _
             * @param {?} index
             * @return {?}
             */
            function (_, index) { return pageNumber + (index - 1); }));
            // Validate if the minimum value less than
            // the first value.
            if (data[0] < min) {
                return data.map((/**
                 * @param {?} item
                 * @return {?}
                 */
                function (item) { return item + 1; }));
            }
            // Calculate the difference with the max
            // if this value is higher than 0 we should minus it.
            /** @type {?} */
            var lastValueInArray = data[data.length - 1];
            /** @type {?} */
            var differenceWithMax = lastValueInArray - max;
            if (differenceWithMax > 0) {
                return data.map((/**
                 * @param {?} item
                 * @return {?}
                 */
                function (item) { return item - differenceWithMax; }));
            }
            // Just return the default data.
            return data;
        };
        /**
         * @private
         * @param {?} pageNumber
         * @param {?} totalPages
         * @return {?}
         */
        BbTablePager.prototype.filterActivePages = /**
         * @private
         * @param {?} pageNumber
         * @param {?} totalPages
         * @return {?}
         */
        function (pageNumber, totalPages) {
            return this.calculatePages(pageNumber)
                .filter((/**
             * @param {?} page
             * @return {?}
             */
            function (page) { return page > 0 && page <= totalPages; }))
                .map((/**
             * @param {?} page
             * @return {?}
             */
            function (page) { return ({ page: page, active: pageNumber === page }); }));
        };
        BbTablePager.decorators = [
            { type: core.Component, args: [{
                        selector: 'bb-table-pager',
                        template: "<ul class=\"bb-pager-list\">\r\n    <!-- The previous page arrow button. -->\r\n    <li *ngIf=\"showArrowButtons\"\r\n        class=\"bb-pager-list-item\"\r\n        title=\"Previous page\">\r\n        <button [disabled]=\"isPreviousDisabled$ | async\"\r\n                (click)=\"goToPrevious()\"\r\n                class=\"bb-pager-list-button\"\r\n                type=\"button\">\r\n            <bb-icon src=\"material:keyboard_arrow_left\"></bb-icon>\r\n        </button>\r\n    </li>\r\n\r\n    <!-- The list of number buttons to navigate through the list. -->\r\n    <ng-container *ngIf=\"list$ | async as list\">\r\n        <li *ngFor=\"let item of list; trackBy: trackByIndex\"\r\n            [title]=\"'Page ' + item?.page\"\r\n            class=\"bb-pager-list-item\">\r\n            <button (click)=\"goToIndex(item?.page)\"\r\n                    [class.active]=\"item?.active\"\r\n                    class=\"bb-pager-list-button\"\r\n                    type=\"button\">\r\n                {{ item?.page }}\r\n            </button>\r\n        </li>\r\n    </ng-container>\r\n\r\n    <!-- The next page arrow button. -->\r\n    <li *ngIf=\"showArrowButtons\"\r\n        class=\"bb-pager-list-item\"\r\n        title=\"Next page\">\r\n        <button [disabled]=\"isNextDisabled$ | async\"\r\n                (click)=\"goToNext()\"\r\n                class=\"bb-pager-list-button\"\r\n                type=\"button\">\r\n            <bb-icon src=\"material:keyboard_arrow_right\"></bb-icon>\r\n        </button>\r\n    </li>\r\n</ul>\r\n",
                        changeDetection: core.ChangeDetectionStrategy.OnPush,
                        host: {
                            'class': 'bb-table-pager',
                            '[class.disabled]': 'disabled'
                        },
                        inputs: ['disabled'],
                        encapsulation: core.ViewEncapsulation.None,
                        preserveWhitespaces: false,
                        providers: [
                            { provide: forms.NG_VALUE_ACCESSOR, useExisting: core.forwardRef((/**
                                 * @return {?}
                                 */
                                function () { return BbTablePager; })), multi: true }
                        ],
                        styles: [".bb-table-pager{-ms-flex:1;flex:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end}.bb-table-pager.disabled{opacity:.5;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none}.bb-pager-list{display:-ms-flexbox;display:flex}.bb-pager-list-item{margin-left:8px}.bb-pager-list-button{padding:0;color:#3d464d;line-height:1;min-width:32px;font-size:16px;-webkit-appearance:none;-moz-appearance:none;appearance:none;font-weight:500;min-height:32px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:4px;-ms-flex-align:center;align-items:center;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;border:1px solid #b6bbc1;transition-duration:.2s;background-color:transparent;transition-timing-function:cubic-bezier(0,0,.2,1);transition-property:color,border-color,opacity,background-color;box-shadow:inset 0 3px 0 0 rgba(183,188,194,.2),0 6px 6px -6px rgba(0,0,0,.1)}.bb-pager-list-button:focus,.bb-pager-list-button:hover{background-color:rgba(0,0,0,.04)}.bb-pager-list-button.active,.bb-pager-list-button.active:hover{color:#2196f3;cursor:default;border-color:#2196f3;background-color:transparent}.bb-pager-list-button:disabled{opacity:.35;cursor:default;pointer-events:none}"]
                    }] }
        ];
        BbTablePager.propDecorators = {
            amountOfButtons: [{ type: core.Input }],
            showArrowButtons: [{ type: core.Input }],
            pageNumber: [{ type: core.Input }],
            totalPages: [{ type: core.Input }]
        };
        return BbTablePager;
    }(BbTablePagerMixinBase));
    if (false) {
        /** @type {?} */
        BbTablePager.prototype.amountOfButtons;
        /** @type {?} */
        BbTablePager.prototype.showArrowButtons;
        /** @type {?} */
        BbTablePager.prototype.isPreviousDisabled$;
        /** @type {?} */
        BbTablePager.prototype.isNextDisabled$;
        /** @type {?} */
        BbTablePager.prototype.list$;
        /** @type {?} */
        BbTablePager.prototype.onChange;
        /** @type {?} */
        BbTablePager.prototype.onTouched;
        /** @type {?} */
        BbTablePager.prototype.trackByIndex;
        /**
         * @type {?}
         * @private
         */
        BbTablePager.prototype._totalPages$;
        /**
         * @type {?}
         * @private
         */
        BbTablePager.prototype._pageNumber$;
    }

    /**
     * @fileoverview added by tsickle
     * Generated from: lib/table.module.ts
     * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
     */
    /** @type {?} */
    var DECLARATIONS_EXPORTS = [
        BbTable,
        BbTableColumnDef,
        BbTableHeaderCell,
        BbTableCell
    ];
    var TableModule = /** @class */ (function () {
        function TableModule() {
        }
        TableModule.decorators = [
            { type: core.NgModule, args: [{
                        imports: [common.CommonModule, forms.FormsModule, forms.ReactiveFormsModule, elements.ElementsModule, localize.LocalizeModule],
                        declarations: __spread([BbTablePager], DECLARATIONS_EXPORTS),
                        exports: __spread(DECLARATIONS_EXPORTS)
                    },] }
        ];
        return TableModule;
    }());

    exports.BbTable = BbTable;
    exports.BbTableCell = BbTableCell;
    exports.BbTableColumnDef = BbTableColumnDef;
    exports.BbTableHeaderCell = BbTableHeaderCell;
    exports.TableModule = TableModule;
    exports.ɵa = BbTablePager;

    Object.defineProperty(exports, '__esModule', { value: true });

})));
//# sourceMappingURL=bravobit-bb-foundation-table.umd.js.map
