{"version":3,"file":"bravobit-bb-foundation-table.mjs","sources":["../../../projects/bb-foundation/table/src/lib/interfaces/table.interfaces.ts","../../../projects/bb-foundation/table/src/lib/data/datasource.data.ts","../../../projects/bb-foundation/table/src/lib/data/generic.data.ts","../../../projects/bb-foundation/table/src/lib/components/table-pager/table-pager.component.ts","../../../projects/bb-foundation/table/src/lib/components/table-pager/table-pager.component.html","../../../projects/bb-foundation/table/src/lib/components/table/table.component.ts","../../../projects/bb-foundation/table/src/lib/components/table/table.component.html","../../../projects/bb-foundation/table/src/lib/components/table-cell/table-cell.component.ts","../../../projects/bb-foundation/table/src/lib/components/table-cell/table-cell.component.html","../../../projects/bb-foundation/table/src/lib/components/table-header-cell/table-header-cell.component.ts","../../../projects/bb-foundation/table/src/lib/components/table-header-cell/table-header-cell.component.html","../../../projects/bb-foundation/table/src/lib/table.module.ts","../../../projects/bb-foundation/table/src/lib/table.config.ts","../../../projects/bb-foundation/table/src/bravobit-bb-foundation-table.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\n\nexport type TableColumnSortStrategy = 'asc' | 'desc' | 'none';\n\nexport const TABLE_CONFIG = new InjectionToken<TableConfig>('table config');\n\nexport interface TableConfig {\n    icons?: {\n        actionsSearch?: string;\n        actionsClose?: string;\n        pagerArrowPrevious?: string;\n        pagerArrowNext?: string;\n    };\n}\n","import {DataSourcePageRequest, DataSourcePageResponse} from '../interfaces/datasource.interface';\nimport {BehaviorSubject, Observable} from 'rxjs';\nimport {filter} from 'rxjs/operators';\n\nexport class DataSourceRequest {\n\n    // Data.\n    private _request$ = new BehaviorSubject<DataSourcePageRequest | null>(null);\n    private _loading$ = new BehaviorSubject<boolean>(true);\n\n    get loading() {\n        return this._loading$.asObservable();\n    }\n\n    get when() {\n        return this._request$.pipe(\n            filter(data => !!data)\n        );\n    }\n\n    startLoading() {\n        this._loading$.next(true);\n    }\n\n    stopLoading() {\n        this._loading$.next(false);\n    }\n\n    update(params: Partial<DataSourcePageRequest> = {}) {\n        const currentValue = this._request$.getValue();\n\n        // Set the page number to 1 if the query or page size was changed.\n        if (currentValue && params && (currentValue?.query !== params?.query || currentValue?.pageSize !== params?.pageSize)) {\n            params.pageNumber = 1;\n        }\n\n        this._request$.next({...currentValue, ...params});\n    }\n\n}\n\nexport abstract class DataSource<T = any> {\n\n    abstract handle(request: DataSourceRequest): Observable<DataSourcePageResponse<T>>;\n\n}\n","import {DataSourcePageRequest} from '../interfaces/datasource.interface';\nimport {BehaviorSubject, combineLatest, Observable, of} from 'rxjs';\nimport {DataSource, DataSourceRequest} from './datasource.data';\nimport {map, share, switchMap, tap} from 'rxjs/operators';\nimport {HttpClient} from '@angular/common/http';\n\nexport class GenericDataSource<T = any> extends DataSource<T> {\n\n    private readonly _httpClient: HttpClient;\n    private readonly _endpoint$: Observable<string>;\n\n    // Data.\n    private _items$ = new BehaviorSubject<Observable<{ [key: string]: string } | null>[]>([]);\n    private _fn: (data: T[]) => T[] = data => data;\n    private _rawFn: ((data: unknown) => void) | null = null;\n\n    constructor(httpClient: HttpClient,\n                endpoint: Observable<string> | string) {\n        super();\n\n        this._httpClient = httpClient;\n        this._endpoint$ = typeof endpoint === 'string'\n            ? of<string>(endpoint)\n            : endpoint;\n\n    }\n\n    append(item: Observable<{ [key: string]: string } | null>) {\n        const currentValue = this._items$.getValue();\n        const newValue = [...currentValue, item];\n        this._items$.next(newValue);\n\n        return this;\n    }\n\n    data(fn: (data: T[]) => T[]) {\n        this._fn = fn;\n        return this;\n    }\n\n    raw(fn: (data: unknown) => void) {\n        this._rawFn = fn;\n        return this;\n    }\n\n    handle(request: DataSourceRequest) {\n        const extraParams$ = this._items$.pipe(\n            switchMap(items => items?.length <= 0 ? of([]) : combineLatest(items)),\n            map(items => items.reduce((previous, current) => ({...previous, ...(current ?? {})}), {}))\n        );\n\n        return combineLatest([request.when, this._endpoint$, extraParams$]).pipe(\n            switchMap(([params, endpoint, extraParams]) => {\n                // Start the loading.\n                request.startLoading();\n\n                const formattedParams = this.formatParams(params);\n                const combinedParams = {...formattedParams, ...extraParams};\n\n                return this._httpClient.get(endpoint, {\n                    params: combinedParams\n                }).pipe(\n                    tap(data => {\n                        if (!this._rawFn) {\n                            return;\n                        }\n                        this._rawFn(data);\n                    }),\n                    map(data => this.formatResponse(data)),\n                    map(result => ({\n                        ...result,\n                        data: this._fn(result?.data ?? [])\n                    }))\n                );\n            }),\n            share()\n        );\n    }\n\n    private formatResponse = <T = any>(data: unknown) => {\n        return {\n            pageSize: data?.['page_size'] as number,\n            pageNumber: data?.['page_number'] as number,\n            totalPages: data?.['total_pages'] as number,\n            totalEntries: data?.['total_entries'] as number,\n            data: data?.['data'] as T[]\n        };\n    };\n\n    private formatParams = (data: Partial<DataSourcePageRequest>) => {\n        const params = {};\n\n        params['page'] = `${data?.pageNumber ?? 1}`;\n        params['page_size'] = `${data?.pageSize ?? 25}`;\n\n        const sort = (data?.sort ?? [])\n            .map(({name}) => name)\n            .filter(name => !!name)\n            .join(',');\n\n        const sortDirection = (data?.sort ?? [])\n            .map(({direction}) => direction)\n            .filter(direction => !!direction)\n            .join(',');\n\n        if (sort?.length > 0 && sortDirection?.length > 0) {\n            params['sort'] = sort;\n            params['sort_direction'] = sortDirection;\n        }\n\n        if (data?.query && data?.query?.length > 0 && data?.queryFields && data?.queryFields?.length > 0) {\n            params['query'] = data?.query;\n            params['query_fields'] = data?.queryFields?.join(',');\n        }\n\n        return params;\n    };\n\n}\n","import {booleanAttribute, ChangeDetectionStrategy, Component, forwardRef, inject, Input, OnInit, ViewEncapsulation} from '@angular/core';\nimport {TABLE_CONFIG, TableConfig} from '../../interfaces/table.interfaces';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {BehaviorSubject, combineLatest, Observable} from 'rxjs';\nimport {BbIcon} from '@bravobit/bb-foundation/elements';\nimport {map, share} from 'rxjs/operators';\nimport {AsyncPipe} from '@angular/common';\n\n@Component({\n    selector: 'bb-table-pager',\n    templateUrl: './table-pager.component.html',\n    styleUrls: ['./table-pager.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        'class': 'bb-table-pager',\n        '[class.disabled]': 'disabled'\n    },\n    encapsulation: ViewEncapsulation.None,\n    providers: [\n        {provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BbTablePager), multi: true}\n    ],\n    imports: [AsyncPipe, BbIcon]\n})\nexport class BbTablePager implements OnInit, ControlValueAccessor {\n\n    // Dependencies.\n    private readonly _config?: TableConfig = inject(TABLE_CONFIG, {optional: true});\n\n    // Readonly data.\n    readonly arrowPreviousIconName: string = this._config?.icons?.pagerArrowPrevious ?? 'material:keyboard_arrow_left';\n    readonly arrowNextIconName: string = this._config?.icons?.pagerArrowNext ?? 'material:keyboard_arrow_right';\n\n    // Inputs.\n    @Input() amountOfButtons: number = 5;\n    @Input() showArrowButtons: boolean = true;\n    @Input({transform: booleanAttribute}) disabled: boolean = false;\n\n    // Observables.\n    isPreviousDisabled$: Observable<boolean>;\n    isNextDisabled$: Observable<boolean>;\n    list$: Observable<{ page: number, active: boolean }[]>;\n\n    // Methods.\n    onChange: (newValue: number) => void = () => ({});\n    onTouched: () => void = () => ({});\n\n    // Data.\n    private _totalPages$: BehaviorSubject<number> = new BehaviorSubject<number>(1);\n    private _pageNumber$: BehaviorSubject<number> = new BehaviorSubject<number>(1);\n\n    ngOnInit() {\n        // Validate the previous button is disabled.\n        this.isPreviousDisabled$ = this._pageNumber$.pipe(\n            map(pageNumber => pageNumber === 1)\n        );\n\n        // Validate the next button is disabled.\n        this.isNextDisabled$ = combineLatest([this._pageNumber$, this._totalPages$]).pipe(\n            map(([pageNumber, totalPages]) => pageNumber === totalPages)\n        );\n\n        // Create the list with page numbers.\n        this.list$ = combineLatest([this._pageNumber$, this._totalPages$]).pipe(\n            map(([pageNumber, totalPages]) => this.filterActivePages(pageNumber, totalPages)),\n            share()\n        );\n    }\n\n    get pageNumber() {\n        return this._pageNumber$.getValue();\n    }\n\n    @Input()\n    set pageNumber(newValue: number) {\n        this.update(newValue);\n    }\n\n    get totalPages() {\n        return this._totalPages$.getValue();\n    }\n\n    @Input()\n    set totalPages(newValue: number) {\n        const newTotalPages = Math.max(1, newValue);\n        this._totalPages$.next(newTotalPages);\n    }\n\n    registerOnChange(fn: any) {\n        this.onChange = fn;\n    }\n\n    registerOnTouched(fn: any) {\n        this.onTouched = fn;\n    }\n\n    setDisabledState(isDisabled: boolean) {\n        this.disabled = isDisabled;\n    }\n\n    writeValue(newValue: number) {\n        this.update(newValue, false);\n    }\n\n    goToPrevious() {\n        const newValue = this._pageNumber$.getValue() - 1;\n        return this.update(newValue);\n    }\n\n    goToNext() {\n        const newValue = this._pageNumber$.getValue() + 1;\n        return this.update(newValue);\n    }\n\n    goToIndex(index: number) {\n        return this.update(index);\n    }\n\n    private update(pageNumber: number, notify: boolean = true) {\n        // You can only update when not disabled.\n        if (this.disabled) {\n            return;\n        }\n\n        // Calculate the new value.\n        const newValue = Math.min(\n            this.totalPages,\n            Math.max(1, pageNumber)\n        );\n\n        // Don't do anything if the page number is the same.\n        if (this._pageNumber$.getValue() === newValue) {\n            return;\n        }\n\n        // Push the new value.\n        this._pageNumber$.next(newValue);\n\n        if (notify) {\n            return this.onChange(pageNumber);\n        }\n    }\n\n    private calculatePages(pageNumber: number) {\n        const min = 1;\n        const max = this.totalPages;\n        const amount = Math.max(1, this.amountOfButtons);\n\n        const data = Array(amount)\n            .fill(0)\n            .map((_, index) => pageNumber + (index - 1));\n\n        // Validate if the minimum value less than\n        // the first value.\n        if (data[0] < min) {\n            return data.map(item => item + 1);\n        }\n\n        // Calculate the difference with the max\n        // if this value is higher than 0 we should minus it.\n        const lastValueInArray = data[data.length - 1];\n        const differenceWithMax = lastValueInArray - max;\n        if (differenceWithMax > 0) {\n            return data.map(item => item - differenceWithMax);\n        }\n\n        // Just return the default data.\n        return data;\n    }\n\n    private filterActivePages(pageNumber: number, totalPages: number) {\n        return this.calculatePages(pageNumber)\n            .filter(page => page > 0 && page <= totalPages)\n            .map(page => ({page, active: pageNumber === page}));\n    }\n\n}\n","<ul class=\"bb-pager-list\">\n    <!-- The previous page arrow button. -->\n    @if (showArrowButtons) {\n        <li class=\"bb-pager-list-item\"\n            title=\"Previous page\">\n            <button [disabled]=\"isPreviousDisabled$ | async\"\n                    (click)=\"goToPrevious()\"\n                    class=\"bb-pager-list-button\"\n                    type=\"button\">\n                <bb-icon [src]=\"arrowPreviousIconName\"></bb-icon>\n            </button>\n        </li>\n    }\n\n    <!-- The list of number buttons to navigate through the list. -->\n    @if (list$ | async; as list) {\n        @for (item of list; track $index) {\n            <li [title]=\"'Page ' + item?.page\"\n                class=\"bb-pager-list-item\">\n                <button (click)=\"goToIndex(item?.page)\"\n                        [class.active]=\"item?.active\"\n                        class=\"bb-pager-list-button\"\n                        type=\"button\">\n                    {{ item?.page }}\n                </button>\n            </li>\n        }\n    }\n\n    <!-- The next page arrow button. -->\n    @if (showArrowButtons) {\n        <li class=\"bb-pager-list-item\"\n            title=\"Next page\">\n            <button [disabled]=\"isNextDisabled$ | async\"\n                    (click)=\"goToNext()\"\n                    class=\"bb-pager-list-button\"\n                    type=\"button\">\n                <bb-icon [src]=\"arrowNextIconName\"></bb-icon>\n            </button>\n        </li>\n    }\n</ul>\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    ContentChild,\n    ContentChildren,\n    Directive, inject,\n    Input,\n    OnDestroy,\n    OnInit,\n    QueryList,\n    TemplateRef,\n    ViewEncapsulation\n} from '@angular/core';\nimport {catchError, debounceTime, distinctUntilChanged, map, tap} from 'rxjs/operators';\nimport {BbFormControl, BbIcon, BbInput} from '@bravobit/bb-foundation/elements';\nimport {combineLatest, defer, merge, Observable, of, Subscription} from 'rxjs';\nimport {DataSourcePageResponse} from '../../interfaces/datasource.interface';\nimport {TABLE_CONFIG, TableConfig} from '../../interfaces/table.interfaces';\nimport {FormControl, FormGroup, ReactiveFormsModule} from '@angular/forms';\nimport {DataSource, DataSourceRequest} from '../../data/datasource.data';\nimport {BbTablePager} from '../table-pager/table-pager.component';\nimport {AsyncPipe, NgTemplateOutlet} from '@angular/common';\nimport {BbLocalize} from '@bravobit/bb-foundation/localize';\n\n@Directive({\n    selector: 'ng-template[bbTableColumnDef]'\n})\nexport class BbTableColumnDef {\n}\n\n@Directive({\n    selector: 'ng-template[bbTableRowDef]'\n})\nexport class BbTableRowDef {\n}\n\n@Component({\n    selector: 'bb-table',\n    templateUrl: './table.component.html',\n    styleUrls: ['./table.component.scss'],\n    host: {'class': 'bb-table'},\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    imports: [NgTemplateOutlet, AsyncPipe, BbLocalize, BbFormControl, BbInput, BbIcon, ReactiveFormsModule, BbTablePager, BbLocalize]\n})\nexport class BbTable implements OnInit, OnDestroy {\n\n    // Dependencies.\n    private readonly _config?: TableConfig = inject(TABLE_CONFIG, {optional: true});\n\n    // Readonly data.\n    readonly actionsSearchIconName: string = this._config?.icons?.actionsSearch ?? 'material:search';\n    readonly actionsCloseIconName: string = this._config?.icons?.actionsClose ?? 'material:close';\n\n    // Content.\n    @ContentChildren(BbTableColumnDef, {read: TemplateRef}) tableColumnTemplates: QueryList<TemplateRef<any>>;\n    @ContentChild(BbTableRowDef, {read: TemplateRef, static: false}) tableRowTemplate?: TemplateRef<any>;\n\n    // Inputs.\n    @Input() identifier: string | null = null;\n    @Input() dataSource: DataSource;\n    @Input() queryFields: string[] = [];\n    @Input() sortingStrategy: 'single' | 'multiple' = 'single';\n    @Input() header: TemplateRef<any> | boolean = true;\n    @Input() footer: TemplateRef<any> | boolean = true;\n\n    // Sizes.\n    private _sizes: number[] = [25, 50, 75, 100];\n\n    get sizes() {\n        return this._sizes;\n    }\n\n    @Input()\n    set sizes(newValue: number[]) {\n        this.updateSizes(newValue);\n    }\n\n    // Data.\n    request: DataSourceRequest;\n    data$: Observable<{ state: string, statusCode?: number, result?: DataSourcePageResponse }>;\n    isLoading$: Observable<boolean>;\n\n    // Form.\n    form: FormGroup;\n    queryControl = new FormControl('');\n\n    // State.\n    private _headerCount: number = 0;\n\n    // Subscriptions.\n    private _subscription: Subscription;\n\n    ngOnInit() {\n        this.composeForm();\n        this.watchDataChanges();\n    }\n\n    ngOnDestroy() {\n        this._subscription?.unsubscribe();\n    }\n\n    get headerCount() {\n        return this._headerCount;\n    }\n\n    get sortControl() {\n        return this.form?.get('sort') as FormGroup;\n    }\n\n    get pageNumberControl() {\n        return this.form?.get('pageNumber') as FormControl<number>;\n    }\n\n    get pageSizeControl() {\n        return this.form?.get('pageSize') as FormControl<number>;\n    }\n\n    refresh() {\n        return this.request.update();\n    }\n\n    setHeaderCount(amount: -1 | 1) {\n        this._headerCount += amount;\n    }\n\n    private updateSizes(newValue: number[]) {\n        // Validate the sizes has at least one value.\n        if (newValue.length <= 0) {\n            throw new Error('Cannot set an empty array as the sizes.');\n        }\n\n        // Set the new size.\n        this._sizes = newValue;\n\n        // Validate that the form exists already.\n        if (!this.form) {\n            return;\n        }\n\n        // Check if the current selected value is\n        // in the new sizes array.\n        const pageSizeControl = this.form.get('pageSize');\n        if (this._sizes.includes(pageSizeControl.value)) {\n            return;\n        }\n\n        // Set the first value in the array as\n        // the new value.\n        const firstValue = this._sizes[0];\n        pageSizeControl.setValue(firstValue);\n    }\n\n    private composeForm() {\n        // Setup the form.\n        this.form = new FormGroup({\n            pageSize: new FormControl<number>(this._sizes[0]),\n            pageNumber: new FormControl<number>(1),\n            sort: new FormGroup({})\n        });\n    }\n\n    private watchDataChanges() {\n        // Create a new request.\n        this.request = new DataSourceRequest();\n        this.isLoading$ = this.request.loading;\n\n        if (!this.dataSource) {\n            this.data$ = of({state: 'error_datasource'}).pipe(\n                tap(() => this.request.stopLoading())\n            );\n            return;\n        }\n\n        // Pass the request to the data source.\n        this.data$ = this.dataSource.handle(this.request).pipe(\n            tap(() => this.request.stopLoading()),\n            map(result => {\n                const count = (result && result.data && result.data.length) || 0;\n                if (count <= 0) {\n                    return {state: 'empty', result};\n                }\n\n                return {state: 'success', result};\n            }),\n            catchError(error => {\n                this.request.stopLoading();\n\n                const statusCode = error?.status ?? null;\n                const states = {\n                    0: 'error_down',\n                    401: 'error_unauthorized',\n                    403: 'error_forbidden',\n                    404: 'error_not_found',\n                    500: 'error_server'\n                };\n\n                return of({state: states?.[statusCode] ?? 'error_unknown', statusCode: statusCode});\n            })\n        );\n\n        // Subscribe to the data changes.\n        this.subscribeToChanges();\n    }\n\n    private subscribeToChanges() {\n        const form$ = this.getFormChanges();\n        const query$ = this.getQueryChanges();\n\n        this._subscription = combineLatest([form$, query$]).subscribe(([form, query]) => {\n            const {pageNumber, pageSize} = form;\n            const sort = Object.keys(form.sort)\n                .map(name => ({name, direction: form.sort[name]}))\n                .filter(item => ['asc', 'desc'].includes(item.direction));\n\n            this.request.startLoading();\n            return this.request.update({\n                sort,\n                query,\n                pageSize,\n                pageNumber,\n                queryFields: this.queryFields\n            });\n        });\n    }\n\n    private getQueryChanges() {\n        return merge(this.queryControl.valueChanges, defer(() => of(this.queryControl?.value))).pipe(\n            debounceTime(400),\n            distinctUntilChanged()\n        );\n    }\n\n    private getFormChanges() {\n        return merge(this.form.valueChanges, defer(() => of(this.form?.value)));\n    }\n\n}\n","<!--\n    This is the header of the table. It can be a user\n    defined custom header or just the default header.\n-->\n\n@if ((header === true ? headerTemplate : header); as template) {\n    <header class=\"bb-table-top-actions\">\n        <ng-container *ngTemplateOutlet=\"template\"></ng-container>\n    </header>\n}\n\n<!--\n    This is the table that contains the\n    rows and columns.\n-->\n\n<div class=\"bb-table-wrapper\">\n    @if (isLoading$ | async) {\n        <div class=\"bb-table-progress\">\n            <div class=\"bb-table-indeterminate\"></div>\n        </div>\n    }\n    <table class=\"bb-table-container\">\n        <thead>\n            <tr>\n                <ng-content select=\"bb-table-header-cell,th[bb-table-header-cell]\"></ng-content>\n            </tr>\n        </thead>\n        <tbody>\n            @if (data$ | async; as data) {\n                @switch (data?.state) {\n                    @case ('success') {\n                        @if (!!tableRowTemplate) {\n                            <ng-container\n                                *ngTemplateOutlet=\"tableRowTemplate; context: {data: data?.result?.data ?? []}\"></ng-container>\n                        } @else {\n                            @for (item of data?.result?.data; track (identifier ? item[identifier] : $index)) {\n                                <tr>\n                                    @for (template of tableColumnTemplates; track $index) {\n                                        <ng-container\n                                            *ngTemplateOutlet=\"template; context: {item: item}\"></ng-container>\n                                    }\n                                </tr>\n                            }\n                        }\n                    }\n                    @case ('empty') {\n                        <ng-container *ngTemplateOutlet=\"errorTemplate; context: data\"></ng-container>\n                    }\n                    @case ('error_datasource') {\n                        <ng-container *ngTemplateOutlet=\"errorTemplate; context: data\"></ng-container>\n                    }\n                    @case ('error_not_found') {\n                        <ng-container *ngTemplateOutlet=\"errorTemplate; context: data\"></ng-container>\n                    }\n                    @case ('error_server') {\n                        <ng-container *ngTemplateOutlet=\"errorTemplate; context: data\"></ng-container>\n                    }\n                    @case ('error_down') {\n                        <ng-container *ngTemplateOutlet=\"errorTemplate; context: data\"></ng-container>\n                    }\n                    @default {\n                        <ng-container *ngTemplateOutlet=\"errorTemplate; context: data\"></ng-container>\n                    }\n                }\n\n            } @else {\n                <tr>\n                    <td [attr.colspan]=\"headerCount\"\n                        class=\"bb-table-template\">\n                        <div class=\"bb-table-template-content\">\n                            {{ 'tables.loading' | bbLocalize }}\n                        </div>\n                    </td>\n                </tr>\n            }\n        </tbody>\n    </table>\n</div>\n\n@if ((footer === true ? footerTemplate : footer); as template) {\n    <footer class=\"bb-table-bottom-actions\">\n        <ng-container *ngTemplateOutlet=\"template\"></ng-container>\n    </footer>\n}\n\n<!--\n    This is the template that will be used when the user has not\n    supplied a custom header template.\n-->\n\n<ng-template #headerTemplate>\n    <ng-content></ng-content>\n    <bb-form-control>\n        <input [formControl]=\"queryControl\"\n               [placeholder]=\"'tables.search' | bbLocalize\"\n               bbInput\n               autocomplete=\"off\">\n        @if (queryControl?.value?.length <= 0) {\n            <bb-icon [src]=\"actionsSearchIconName\"\n                     bbSuffix>\n            </bb-icon>\n        } @else {\n            <button (click)=\"queryControl?.patchValue('')\"\n                    bbSuffix\n                    type=\"button\"\n                    class=\"bb-table-progress-close-query\">\n                <bb-icon [src]=\"actionsCloseIconName\"></bb-icon>\n            </button>\n        }\n    </bb-form-control>\n</ng-template>\n\n<!--\n    This is the template that will be used when the user has not\n    supplied a custom footer template.\n-->\n\n<ng-template #footerTemplate>\n    @if (sizes?.length > 1) {\n        <bb-form-control>\n            <select [formControl]=\"pageSizeControl\"\n                    bbInput\n                    title=\"Sizes\">\n                @for (item of sizes; track item) {\n                    <option [ngValue]=\"item\">\n                        {{ item }} / {{ 'tables.page' | bbLocalize }}\n                    </option>\n                }\n            </select>\n        </bb-form-control>\n    }\n\n    <bb-table-pager [totalPages]=\"(data$ | async)?.result?.totalPages\"\n                    [formControl]=\"pageNumberControl\">\n    </bb-table-pager>\n</ng-template>\n\n<ng-template #errorTemplate\n             let-state=\"state\"\n             let-status=\"statusCode\">\n    <tr>\n        <td [attr.colspan]=\"headerCount\"\n            class=\"bb-table-template\">\n            <div class=\"bb-table-template-content\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\"\n                     viewBox=\"0 0 64 41\"\n                     width=\"4rem\"\n                     height=\"2.5625rem\">\n                    <g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(0 1)\">\n                        <ellipse cx=\"32\" cy=\"33\" fill=\"#F5F5F5\" rx=\"32\" ry=\"7\"></ellipse>\n                        <g fill-rule=\"nonzero\" stroke=\"#D9D9D9\">\n                            <path\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>\n                            <path fill=\"#FAFAFA\"\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>\n                        </g>\n                    </g>\n                </svg>\n                @if (state; as stateLabel) {\n                    <span>{{ ('tables.' + stateLabel) | bbLocalize }}</span>\n                }\n                @if (status; as statusCode) {\n                    <span class=\"bb-table-template-content-code\">(HTTP {{ statusCode }})</span>\n                }\n            </div>\n        </td>\n    </tr>\n</ng-template>\n","import {ChangeDetectionStrategy, Component, ViewEncapsulation} from '@angular/core';\n\n@Component({\n    selector: 'bb-table-cell, td[bb-table-cell]',\n    templateUrl: './table-cell.component.html',\n    styleUrls: ['./table-cell.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {'class': 'bb-table-cell'},\n    encapsulation: ViewEncapsulation.None\n})\nexport class BbTableCell {\n}\n","<div>\n    <ng-content></ng-content>\n</div>","import {Attribute, booleanAttribute, ChangeDetectionStrategy, Component, Host, HostListener, Input, OnDestroy, OnInit, Optional, ViewEncapsulation} from '@angular/core';\nimport {TableColumnSortStrategy} from '../../interfaces/table.interfaces';\nimport {getControlValue} from '@bravobit/bb-foundation/rxjs';\nimport {BbTable} from '../table/table.component';\nimport {FormControl} from '@angular/forms';\nimport {AsyncPipe} from '@angular/common';\nimport {Observable} from 'rxjs';\n\n@Component({\n    selector: 'bb-table-header-cell,th[bb-table-header-cell]',\n    templateUrl: './table-header-cell.component.html',\n    styleUrls: ['./table-header-cell.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        'class': 'bb-table-header-cell',\n        '[class.disabled]': 'isDisabled'\n    },\n    encapsulation: ViewEncapsulation.None,\n    imports: [AsyncPipe]\n})\nexport class BbTableHeaderCell implements OnInit, OnDestroy {\n\n    // Constants.\n    private readonly _sortDirections: TableColumnSortStrategy[] = ['none', 'asc', 'desc'];\n    private readonly _control = new FormControl<TableColumnSortStrategy>(this._sortDirections[0]);\n\n    // Inputs.\n    @Input({transform: booleanAttribute}) disabled: boolean = false;\n\n    // Data.\n    valueChanges$: Observable<string>;\n\n    // Sort.\n    @Input()\n    set sort(value: TableColumnSortStrategy) {\n        // Check if the new value is a valid value.\n        if (!this._sortDirections.includes(value)) {\n            return;\n        }\n\n        // Set the value.\n        this._control.setValue(value);\n    }\n\n    get sort() {\n        return this._control.value;\n    }\n\n    constructor(@Optional() @Host() private _table?: BbTable,\n                @Optional() @Attribute('name') private _name?: string) {\n    }\n\n    ngOnInit() {\n        // Validate that the name and table are set.\n        this._table?.setHeaderCount?.(1);\n        if (!this._table || !this._name) {\n            return;\n        }\n\n        // Check if the control already exists in the table.\n        if (this._table?.sortControl?.contains(this._name)) {\n            this.disabled = true;\n            return this.logWarning(`BbTableHeaderCell: The name \"${this._name}\" is not unique in the table; Control was not registered.`);\n        }\n\n        // Register the header cell with the table.\n        this._table?.sortControl?.addControl(this._name, this._control);\n\n        // Get all the value changes.\n        this.valueChanges$ = getControlValue(this._control);\n    }\n\n    ngOnDestroy() {\n        this._table?.setHeaderCount?.(-1);\n        // Validate that the name and table are set.\n        if (!this._table || !this._name) {\n            return;\n        }\n\n        // Un-register the header cell with the table.\n        if (this._table?.sortControl?.contains(this._name)) {\n            this._table?.sortControl?.removeControl(this._name);\n        }\n    }\n\n    get isDisabled() {\n        return this.disabled || !this._name;\n    }\n\n    @HostListener('click')\n    onClick() {\n        // Check if the header cell is disabled.\n        if (this.isDisabled) {\n            return;\n        }\n\n        // Find the index of the current sort and\n        // create the new index.\n        const index = this._sortDirections.findIndex(item => item === this._control.value);\n        const newIndex = (index + 1) % this._sortDirections.length;\n        const newSort = this._sortDirections[newIndex];\n\n        // Set the new sort.\n        return this.updateTableAndHeaderCell(newSort);\n    }\n\n    private updateTableAndHeaderCell(value: TableColumnSortStrategy) {\n        // Check if the new value is a valid value.\n        if (!this._sortDirections.includes(value)) {\n            return;\n        }\n\n        // Validate the table exists.\n        if (!this._table) {\n            return this._control.setValue(value);\n        }\n\n        // Handle the single sorting strategy.\n        if (this._table.sortingStrategy === 'single') {\n            return this.handleSingleSortingStrategy(value);\n        }\n\n        // Default case when no other strategy\n        // is used.\n        return this._control.setValue(value);\n    }\n\n    private handleSingleSortingStrategy(value: string) {\n        // Get the sort control.\n        const control = this._table?.sortControl;\n\n        // Set each value to false since we only want to\n        // sort on one property at a time with this strategy.\n        const newValue = Object.keys(control?.controls ?? {}).reduce((previous, current) => {\n            previous[current] = current === this._name ? value : 'none';\n            return previous;\n        }, {});\n\n        // Patch the entire sort value.\n        this._table?.sortControl?.patchValue(newValue);\n    }\n\n    private logWarning = (message: string) => {\n        console && console.warn && console.warn(message);\n    };\n\n}\n","<!-- The content. -->\n<ng-content></ng-content>\n\n<!-- The indicator for the sort direction. -->\n@if (valueChanges$ | async; as value) {\n    @if (!isDisabled) {\n        <button [class.asc]=\"value === 'asc'\"\n                [class.desc]=\"value === 'desc'\"\n                class=\"bb-table-header-cell-toggle\"\n                type=\"button\"></button>\n    }\n}\n","import {BbTableHeaderCell} from './components/table-header-cell/table-header-cell.component';\nimport {BbTable, BbTableColumnDef, BbTableRowDef} from './components/table/table.component';\nimport {BbTablePager} from './components/table-pager/table-pager.component';\nimport {BbTableCell} from './components/table-cell/table-cell.component';\nimport {NgModule} from '@angular/core';\n\n@NgModule({\n    imports: [\n        BbTable,\n        BbTableColumnDef,\n        BbTableRowDef,\n        BbTableHeaderCell,\n        BbTableCell,\n        BbTablePager\n    ],\n    exports: [\n        BbTable,\n        BbTableColumnDef,\n        BbTableRowDef,\n        BbTableHeaderCell,\n        BbTableCell,\n        BbTablePager\n    ]\n})\nexport class TableModule {\n}\n","import {EnvironmentProviders, makeEnvironmentProviders} from '@angular/core';\nimport {TABLE_CONFIG, TableConfig} from './interfaces/table.interfaces';\n\nexport function provideTableConfig(config: TableConfig): EnvironmentProviders {\n    return makeEnvironmentProviders([\n        {provide: TABLE_CONFIG, useValue: config}\n    ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}