{"version":3,"file":"bravobit-bb-foundation-collections.mjs","sources":["../../../projects/bb-foundation/collections/src/lib/providers/collection.provider.ts","../../../projects/bb-foundation/collections/src/lib/providers/api-collection.provider.ts","../../../projects/bb-foundation/collections/src/lib/classes/array.collection.ts","../../../projects/bb-foundation/collections/src/lib/providers/local-collection.provider.ts","../../../projects/bb-foundation/collections/src/lib/directives/collections-data.directive.ts","../../../projects/bb-foundation/collections/src/lib/directives/collections-data-row.directive.ts","../../../projects/bb-foundation/collections/src/lib/directives/collections-empty.directive.ts","../../../projects/bb-foundation/collections/src/lib/directives/collections-error.directive.ts","../../../projects/bb-foundation/collections/src/lib/directives/collections-initial.directive.ts","../../../projects/bb-foundation/collections/src/lib/directives/collections-item.directive.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-viewer/collections-viewer.component.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-viewer/collections-viewer.component.html","../../../projects/bb-foundation/collections/src/lib/collections.interfaces.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-pager/collections-pager.component.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-pager/collections-pager.component.html","../../../projects/bb-foundation/collections/src/lib/components/collections-actions/collections-actions.component.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-actions/collections-actions.component.html","../../../projects/bb-foundation/collections/src/lib/components/collections-table/collections-table.component.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-table/collections-table.component.html","../../../projects/bb-foundation/collections/src/lib/components/collections-table-sorting/collections-table-sorting.component.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-table-sorting/collections-table-sorting.component.html","../../../projects/bb-foundation/collections/src/lib/components/collections-table-label/collections-table-label.component.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-table-label/collections-table-label.component.html","../../../projects/bb-foundation/collections/src/lib/components/collections-grid/collections-grid.component.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-grid/collections-grid.component.html","../../../projects/bb-foundation/collections/src/lib/collection.ts","../../../projects/bb-foundation/collections/src/lib/collections.module.ts","../../../projects/bb-foundation/collections/src/lib/collections.config.ts","../../../projects/bb-foundation/collections/src/bravobit-bb-foundation-collections.ts"],"sourcesContent":["import {CollectionApiParams, CollectionContext, CollectionData, CollectionRequest} from '../interfaces/collection.interface';\nimport {Observable} from 'rxjs';\n\nexport abstract class CollectionProvider<T> {\n\n    protected cachedRequestParams: Record<string, CollectionApiParams> | null = null;\n\n    abstract transform(request: CollectionRequest, context: CollectionContext<T>): Observable<CollectionData<T>>;\n\n    protected validateParams(request: Record<string, CollectionApiParams>, _context: CollectionContext<T>) {\n        return request;\n    }\n\n    protected formatArrayToCollectionData(items: T[]) {\n        const count = items?.length ?? 1;\n        return <CollectionData<T>>{\n            pageSize: count,\n            totalEntries: count,\n            pageNumber: 1,\n            totalPages: 1,\n            data: items\n        };\n    }\n\n    protected deepCompare(value1: unknown, value2: unknown) {\n        if (value1 === value2) {\n            return true;\n        }\n\n        if (typeof value1 !== 'object' || typeof value2 !== 'object' || value1 === null || value2 === null) {\n            return false;\n        }\n\n        const keys1 = Object.keys(value1);\n        const keys2 = Object.keys(value2);\n        if (keys1.length !== keys2.length) {\n            return false;\n        }\n\n        for (const key of keys1) {\n            if (!keys2.includes(key)) {\n                return false;\n            }\n            if (!this.deepCompare(value1[key], value2[key])) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n}\n","import {CollectionApiResponse, CollectionData, CollectionApiParams, CollectionRequest, CollectionContext} from '../interfaces/collection.interface';\nimport {combineLatest, isObservable, Observable, of} from 'rxjs';\nimport {CollectionProvider} from './collection.provider';\nimport {map, switchMap, tap} from 'rxjs/operators';\nimport {HttpClient} from '@angular/common/http';\n\nexport class ApiCollectionProvider<T> extends CollectionProvider<T> {\n\n    // State.\n    protected extraParams: Record<string, Observable<CollectionApiParams>> = {};\n    protected extraObjectParams: Observable<Record<string, CollectionApiParams>>[] = [];\n\n    constructor(protected readonly endpoint: string | Observable<string>,\n                protected readonly httpClient: HttpClient) {\n        super();\n    }\n\n    append(name: string, value: CollectionApiParams | Observable<CollectionApiParams>) {\n        this.extraParams[name] = isObservable(value) ? value : of(value);\n        return this;\n    }\n\n    appendObject(value: Record<string, CollectionApiParams> | Observable<Record<string, CollectionApiParams>>) {\n        const params = isObservable(value) ? value : of(value);\n        this.extraObjectParams.push(params);\n    }\n\n    transform(request: CollectionRequest, context: CollectionContext<T>) {\n        const endpoint$ = isObservable(this.endpoint) ? this.endpoint : of(this.endpoint);\n        const params = this.getBackendFormat(request);\n        const extraParams$ = this.getExtraParams(this.extraParams);\n        const extraObjectParams$ = this.getExtraObjectParams(this.extraObjectParams);\n\n        return combineLatest([endpoint$, extraParams$, extraObjectParams$]).pipe(\n            tap(() => context.collection.loading$.next(true)),\n            switchMap(([endpoint, extraParams, extraObjectParams]) => {\n                const validatedParams = this.validateParams({...params, ...extraParams, ...extraObjectParams}, context);\n                return this.httpClient.get<CollectionApiResponse<T> | T[]>(endpoint, {params: validatedParams});\n            }),\n            map(response => this.formatToCollectionData(response))\n        );\n    }\n\n    protected override validateParams(request: Record<string, CollectionApiParams>, context: CollectionContext<T>) {\n        if (!this.deepCompare(request, this.cachedRequestParams)) {\n            if (request?.['page'] && request?.['page'] === this.cachedRequestParams?.['page']) {\n                context.collection.pageNumberControl?.setValue(1);\n                request['page'] = context.collection.pageNumberControl?.value;\n            }\n        }\n\n        this.cachedRequestParams = {...request};\n        return request;\n    }\n\n    protected getExtraParams(params: Record<string, Observable<CollectionApiParams>>) {\n        const keys = Object.keys(params ?? {});\n        if (keys?.length <= 0) {\n            return of({});\n        }\n\n        const observables$ = keys.map(key => params?.[key]);\n        return combineLatest(observables$).pipe(\n            map(data => {\n                return data.reduce((previous, current, index) => {\n                    if (current === null || current === undefined) {\n                        return previous;\n                    }\n                    const key = keys?.[index];\n                    return {...previous, [key]: current};\n                }, {});\n            })\n        );\n    }\n\n    protected getExtraObjectParams(params$: Observable<Record<string, CollectionApiParams>>[]) {\n        if (params$?.length <= 0) {\n            return of({});\n        }\n        return combineLatest(params$).pipe(\n            map(data => (data ?? []).reduce((previous, current) => ({...previous, ...(current ?? {})}), {})),\n            map(data => {\n                return Object.keys(data ?? {}).reduce((previous, current) => {\n                    const value = data?.[current] ?? null;\n                    if (value === null || value === undefined) {\n                        return previous;\n                    }\n\n                    return {...previous, [current]: value};\n                }, {});\n            })\n        );\n    }\n\n    protected formatToCollectionData(response: CollectionApiResponse<T> | T[]) {\n        if (Array.isArray(response)) {\n            return this.formatArrayToCollectionData(response);\n        }\n\n        return <CollectionData<T>>{\n            pageSize: response?.page_size,\n            pageNumber: response?.page_number,\n            totalPages: response?.total_pages,\n            totalEntries: response?.total_entries,\n            data: response?.data,\n            raw: response\n        };\n    }\n\n    protected getBackendFormat(request: CollectionRequest) {\n        const params = {};\n\n        params['page'] = request?.pageNumber ?? 1;\n        params['page_size'] = request?.pageSize ?? 25;\n\n        if (request?.sort) {\n            const sort = Array.isArray(request?.sort) ? request?.sort : [request?.sort];\n            const filteredSort = sort?.filter(item => !!item?.name && !!item?.direction);\n\n            params['sort'] = filteredSort?.map(item => item?.name)?.join(',');\n            params['sort_direction'] = filteredSort?.map(item => item?.direction)?.join(',');\n        }\n\n        if (request?.query && request?.query?.length > 0 && request?.queryFields && request?.queryFields?.length > 0) {\n            params['query'] = request?.query;\n            params['query_fields'] = request?.queryFields?.join(',');\n        }\n\n        return params;\n    }\n\n}\n","import {ArrayCollectionStringKeys} from '../interfaces/array-collection.interface';\nimport {CollectionRequestSort} from '../interfaces/collection.interface';\n\nexport class ArrayCollection<T> {\n\n    constructor(protected value: T[]) {\n    }\n\n    search(query: string, fields: ArrayCollectionStringKeys<T>[]) {\n        const normalizedQuery = this.normalizeValueAsString(query);\n        if (normalizedQuery === null || normalizedQuery?.length <= 0) {\n            return this;\n        }\n\n        const queryFields = fields ?? [];\n        if (queryFields.length <= 0) {\n            throw new Error('cannot search without query fields');\n        }\n\n        this.value = this.value.filter(item => {\n            for (const field of queryFields) {\n                const normalizedValue = this.normalizeValueAsString(item?.[field]);\n                if (normalizedValue === null) {\n                    continue;\n                }\n\n                if (normalizedValue.includes(normalizedQuery)) {\n                    return true;\n                }\n            }\n\n            return false;\n        });\n\n        return this;\n    }\n\n    sortBy(sort: CollectionRequestSort<keyof T> | CollectionRequestSort<keyof T>[], sortables: Partial<Record<ArrayCollectionStringKeys<T>, 'string' | 'number'>>) {\n        if (sort === null || sort === undefined) {\n            return this;\n        }\n        \n        const sorts = Array.isArray(sort) ? sort : [sort];\n        if (sorts.length <= 0) {\n            return this;\n        }\n\n        this.value = this.value.sort((a, b) => {\n            for (const item of sorts) {\n                const type = sortables?.[<any>item?.name] ?? null;\n                if (type === null) {\n                    throw new Error(`invalid sorting key \"${item?.name?.toString()}\"`);\n                }\n                const aValue = a?.[item?.name] ?? null;\n                const bValue = b?.[item?.name] ?? null;\n                const direction = item?.direction ?? null;\n\n                if (type === 'string') {\n                    const comparison = String(aValue).localeCompare(String(bValue));\n                    if (comparison !== 0) {\n                        return direction === 'asc' ? comparison : -comparison;\n                    }\n                } else if (type === 'number') {\n                    if (aValue < bValue) return direction === 'asc' ? -1 : 1;\n                    if (aValue > bValue) return direction === 'asc' ? 1 : -1;\n                }\n            }\n\n            return 0;\n        });\n\n        return this;\n    }\n\n    toPage(pageNumber: number, pageSize: number) {\n        const totalEntries = this.value?.length ?? 0;\n        const totalPages = Math.max(1, Math.ceil(totalEntries / pageSize));\n\n        const startIndex = (pageNumber - 1) * pageSize;\n        const endIndex = startIndex + pageSize;\n        const data = this.value?.slice(startIndex, endIndex) ?? [];\n\n        return {totalPages, totalEntries, pageSize, pageNumber, data};\n    }\n\n    toArray() {\n        return this.value;\n    }\n\n    protected normalizeValueAsString(value: unknown) {\n        if (value === null || value === undefined) {\n            return null;\n        }\n        return value\n            .toString()\n            .toLowerCase()\n            .normalize('NFD')\n            .replace(/[\\u0300-\\u036f]/g, '');\n    }\n\n}\n","import {ArrayCollectionOptions} from '../interfaces/array-collection.interface';\nimport {CollectionRequest} from '../interfaces/collection.interface';\nimport {ArrayCollection} from '../classes/array.collection';\nimport {CollectionProvider} from './collection.provider';\nimport {delay, map} from 'rxjs/operators';\nimport {BehaviorSubject} from 'rxjs';\n\nexport class LocalCollectionProvider<T> extends CollectionProvider<T> {\n\n    private _items$ = new BehaviorSubject<T[]>([]);\n\n    constructor(items: T[],\n                private _options?: ArrayCollectionOptions<T>) {\n        super();\n        this.update(items);\n    }\n\n    update(value: T[]) {\n        this._items$.next(value);\n    }\n\n    transform(request: CollectionRequest) {\n        return this._items$.pipe(\n            map(items => {\n                return new ArrayCollection<T>(items)\n                    .search(request?.query, <any>request.queryFields)\n                    .sortBy(<any>request?.sort, this._options?.sortables ?? {})\n                    .toPage(request?.pageNumber, request?.pageSize);\n            }),\n            delay(1)\n        );\n    }\n\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\nexport class BbCollectionsDataContext<T> {\n    items!: T[];\n    loading!: boolean;\n\n    constructor(items: T[], loading: boolean) {\n        this.items = items;\n        this.loading = loading;\n    }\n}\n\n@Directive({\n    selector: 'ng-template[bbCollectionsData]'\n})\nexport class BbCollectionsData<T> {\n\n    constructor(public template: TemplateRef<BbCollectionsDataContext<T>>) {\n    }\n\n    static ngTemplateContextGuard<T>(dir: BbCollectionsData<T>, ctx: unknown): ctx is BbCollectionsDataContext<T> {\n        return true;\n    }\n\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\nexport class BbCollectionsDataRowContext<T> {\n    item!: T;\n    $implicit!: T;\n\n    constructor(item: T) {\n        this.item = item;\n        this.$implicit = item;\n    }\n}\n\n@Directive({\n    selector: 'ng-template[bbCollectionsDataRow]'\n})\nexport class BbCollectionsDataRow<T> {\n\n    constructor(public template: TemplateRef<BbCollectionsDataRowContext<T>>) {\n    }\n\n    static ngTemplateContextGuard<T>(dir: BbCollectionsDataRow<T>, ctx: unknown): ctx is BbCollectionsDataRowContext<T> {\n        return true;\n    }\n\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\nexport class BbCollectionsEmptyContext<T> {\n    query!: string;\n    loading!: boolean;\n\n    constructor(query: string, loading: boolean) {\n        this.query = query;\n        this.loading = loading;\n    }\n}\n\n@Directive({\n    selector: 'ng-template[bbCollectionsEmpty]'\n})\nexport class BbCollectionsEmpty<T> {\n\n    constructor(public template: TemplateRef<BbCollectionsEmptyContext<T>>) {\n    }\n\n    static ngTemplateContextGuard<T>(dir: BbCollectionsEmpty<T>, ctx: unknown): ctx is BbCollectionsEmptyContext<T> {\n        return true;\n    }\n\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\nexport class BbCollectionsErrorContext<T> {\n    error!: Error;\n    loading!: boolean;\n\n    constructor(error: Error, loading: boolean) {\n        this.error = error;\n        this.loading = loading;\n    }\n}\n\n@Directive({\n    selector: 'ng-template[bbCollectionsError]'\n})\nexport class BbCollectionsError<T> {\n\n    constructor(public template: TemplateRef<BbCollectionsErrorContext<T>>) {\n    }\n\n    static ngTemplateContextGuard<T>(dir: BbCollectionsError<T>, ctx: unknown): ctx is BbCollectionsErrorContext<T> {\n        return true;\n    }\n\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\nexport class BbCollectionsInitialContext<T> {\n}\n\n@Directive({\n    selector: 'ng-template[bbCollectionsInitial]'\n})\nexport class BbCollectionsInitial<T> {\n\n    constructor(public template: TemplateRef<BbCollectionsInitialContext<T>>) {\n    }\n\n    static ngTemplateContextGuard<T>(dir: BbCollectionsInitial<T>, ctx: unknown): ctx is BbCollectionsInitialContext<T> {\n        return true;\n    }\n\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\nexport class BbCollectionsItemContext<T> {\n    item!: T;\n    $implicit!: T;\n\n    constructor(item: T) {\n        this.item = item;\n        this.$implicit = item;\n    }\n}\n\n@Directive({\n    selector: 'ng-template[bbCollectionsItem]'\n})\nexport class BbCollectionsItem<T> {\n\n    constructor(public template: TemplateRef<BbCollectionsItemContext<T>>) {\n    }\n\n    static ngTemplateContextGuard<T>(dir: BbCollectionsItem<T>, ctx: unknown): ctx is BbCollectionsItemContext<T> {\n        return true;\n    }\n\n}\n","import {ChangeDetectionStrategy, Component, ContentChild, Input, TemplateRef, ViewEncapsulation} from '@angular/core';\nimport {BbCollectionsInitial, BbCollectionsInitialContext} from '../../directives/collections-initial.directive';\nimport {BbCollectionsError, BbCollectionsErrorContext} from '../../directives/collections-error.directive';\nimport {BbCollectionsEmpty, BbCollectionsEmptyContext} from '../../directives/collections-empty.directive';\nimport {BbCollectionsData, BbCollectionsDataContext} from '../../directives/collections-data.directive';\nimport {AsyncPipe, NgTemplateOutlet} from '@angular/common';\nimport {Collection} from '../../collection';\n\n@Component({\n    selector: '[bb-collections-viewer]',\n    templateUrl: './collections-viewer.component.html',\n    styleUrls: ['./collections-viewer.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {'class': 'bb-collections-viewer'},\n    imports: [AsyncPipe, NgTemplateOutlet]\n})\nexport class BbCollectionsViewer<T = unknown> {\n\n    // Content.\n    @ContentChild(BbCollectionsData, {read: TemplateRef, static: false}) dataTemplate?: TemplateRef<BbCollectionsDataContext<T>>;\n    @ContentChild(BbCollectionsEmpty, {read: TemplateRef, static: false}) emptyTemplate?: TemplateRef<BbCollectionsEmptyContext<T>>;\n    @ContentChild(BbCollectionsError, {read: TemplateRef, static: false}) errorTemplate?: TemplateRef<BbCollectionsErrorContext<T>>;\n    @ContentChild(BbCollectionsInitial, {read: TemplateRef, static: false}) initialTemplate?: TemplateRef<BbCollectionsInitialContext<T>>;\n\n    // Inputs.\n    @Input() collection: Collection<T> | null = null;\n\n}\n","@if (collection?.data$ | async; as data) {\n    @switch (data?.state) {\n        @case ('initial') {\n            <ng-container *ngTemplateOutlet=\"initialTemplate\"></ng-container>\n        }\n        @case ('empty') {\n            <ng-container\n                *ngTemplateOutlet=\"emptyTemplate; context: {query: data?.request?.query, loading: data?.loading}\"></ng-container>\n        }\n        @case ('error') {\n            <ng-container\n                *ngTemplateOutlet=\"errorTemplate; context: {error: data?.error, loading: data?.loading}\"></ng-container>\n        }\n        @default {\n            <ng-container\n                *ngTemplateOutlet=\"dataTemplate; context: {items: data?.response?.data, loading: data?.loading}\"></ng-container>\n        }\n    }\n}\n","import {InjectionToken} from '@angular/core';\n\nexport const COLLECTIONS_CONFIG = new InjectionToken<CollectionsConfig>('collections config');\n\nexport interface CollectionsConfig {\n    icons?: {\n        actionsSearch?: string;\n        actionsClose?: string;\n        pagerArrowPrevious?: string;\n        pagerArrowNext?: string;\n    };\n}\n","import {ChangeDetectionStrategy, Component, inject, Input, numberAttribute, OnDestroy, OnInit, ViewEncapsulation} from '@angular/core';\nimport {BbLocalize, BbLocalizeString, BbLocalizeTemplate} from '@bravobit/bb-foundation/localize';\nimport {COLLECTIONS_CONFIG, CollectionsConfig} from '../../collections.interfaces';\nimport {CollectionData} from '../../interfaces/collection.interface';\nimport {BehaviorSubject, Observable, Subscription} from 'rxjs';\nimport {combineLatestMap} from '@bravobit/bb-foundation/rxjs';\nimport {BbIcon} from '@bravobit/bb-foundation/elements';\nimport {map, shareReplay} from 'rxjs/operators';\nimport {Collection} from '../../collection';\nimport {AsyncPipe} from '@angular/common';\n\n@Component({\n    selector: 'bb-collections-pager',\n    templateUrl: './collections-pager.component.html',\n    styleUrls: ['./collections-pager.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {'class': 'bb-collections-pager'},\n    imports: [AsyncPipe, BbLocalizeString, BbLocalize, BbLocalizeTemplate, BbIcon]\n})\nexport class BbCollectionsPager implements OnInit, OnDestroy {\n\n    // Dependencies.\n    private readonly _config?: CollectionsConfig = inject(COLLECTIONS_CONFIG, {optional: true});\n\n    // Readonly data.\n    readonly arrowPreviousIconName: string = this._config?.icons?.pagerArrowPrevious ?? 'material:arrow_back';\n    readonly arrowNextIconName: string = this._config?.icons?.pagerArrowNext ?? 'material:arrow_forward';\n\n    @Input({transform: numberAttribute})\n    set maxAmountOfButtons(value: number) {\n        this._maxAmountOfButtons$.next(Math.max(1, value));\n    }\n\n    get maxAmountOfButtons() {\n        return this._maxAmountOfButtons$.getValue();\n    }\n\n    @Input({required: true})\n    set collection(collection: Collection<unknown> | null) {\n        this._collection = collection;\n        this.observeCollectionChanges();\n    }\n\n    get collection() {\n        return this._collection;\n    }\n\n    // Data.\n    data$: Observable<{\n        start?: number,\n        end?: number,\n        totalEntries?: number,\n        totalPages?: number,\n        pageNumber?: number,\n        pages?: { page: number, active: boolean }[]\n    }>;\n\n    // State and subscriptions.\n    private _collection: Collection<unknown> | null = null;\n    private _subscription: Subscription | null = null;\n    private _cache$ = new BehaviorSubject<Partial<CollectionData<unknown>>>({});\n    private _maxAmountOfButtons$ = new BehaviorSubject<number>(3);\n\n    ngOnInit() {\n        this.setData();\n    }\n\n    ngOnDestroy() {\n        this._subscription?.unsubscribe();\n    }\n\n    setPage(pageNumber: number, totalPages: number) {\n        // Calculate the new value.\n        const newValue = Math.min(\n            totalPages,\n            Math.max(1, pageNumber)\n        );\n\n        // Validate the value is actually different.\n        const currentValue = this._collection?.pageNumberControl?.value;\n        if (currentValue === newValue) {\n            return;\n        }\n\n        this._collection?.pageNumberControl?.setValue(pageNumber);\n    }\n\n    private setData() {\n        this.data$ = combineLatestMap({\n            cache: this._cache$,\n            maxAmountOfButtons: this._maxAmountOfButtons$\n        }).pipe(\n            map(({cache, maxAmountOfButtons}) => {\n                const pageSize = cache?.pageSize ?? 1;\n                const pageNumber = cache?.pageNumber ?? 1;\n\n                const totalEntries = Math.max(0, cache?.totalEntries ?? 0);\n                const start = Math.max(0, Math.min((pageSize * (pageNumber - 1)) + 1, totalEntries));\n                const end = Math.max(0, Math.min((start - 1) + pageSize, totalEntries));\n                const totalPages = Math.max(0, cache?.totalPages ?? 1);\n\n                const pages = this.filterActivePages(pageNumber, totalPages, maxAmountOfButtons);\n\n                return {start, end, totalEntries, totalPages, pages, pageNumber};\n            }),\n            shareReplay({refCount: true, bufferSize: 1})\n        );\n    }\n\n    private observeCollectionChanges() {\n        if (this._subscription) {\n            this._subscription?.unsubscribe();\n        }\n\n        if (!this._collection) {\n            return;\n        }\n\n        this._subscription = this._collection.raw$.subscribe(data => {\n            if (data) {\n                this._cache$.next(data);\n            }\n        });\n    }\n\n    private calculatePages(pageNumber: number, totalPages: number, maxAmountOfButtons: number) {\n        const min = 1;\n        const max = totalPages;\n        const amount = Math.max(1, maxAmountOfButtons);\n\n        const start = Math.max(0, pageNumber - Math.floor(amount / 2));\n        const data = Array(amount)\n            .fill(0)\n            .map((_, index) => start + index);\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, maxAmountOfButtons: number) {\n        return this.calculatePages(pageNumber, totalPages, maxAmountOfButtons)\n            .filter(page => page > 0 && page <= totalPages)\n            .map(page => ({page, active: pageNumber === page}));\n    }\n\n}\n","@if (data$ | async; as data) {\n    <div [bb-localize-string]=\"'collection.showing_label' | bbLocalize\"\n         class=\"bb-collections-pager-text\">\n        <strong *bbLocalizeTemplate=\"'start'\">{{ data?.start }}</strong>\n        <strong *bbLocalizeTemplate=\"'end'\">{{ data?.end }}</strong>\n        <strong *bbLocalizeTemplate=\"'total'\">{{ data?.totalEntries }}</strong>\n    </div>\n\n    <div class=\"bb-collections-pager-container\">\n        <ul class=\"bb-collections-pager-list\">\n            <li class=\"bb-collections-pager-item\"\n                title=\"Previous page\">\n                <button [disabled]=\"data?.pageNumber <= 1\"\n                        (click)=\"setPage(data?.pageNumber - 1, data?.totalPages)\"\n                        class=\"bb-collections-pager-button arrow first\"\n                        type=\"button\">\n                    <bb-icon [src]=\"arrowPreviousIconName\"\n                             size=\"1.125\"></bb-icon>\n                </button>\n            </li>\n            @for (item of data?.pages; track item?.page) {\n                <li [title]=\"'Page ' + item?.page\"\n                    class=\"bb-collections-pager-item\">\n                    <button [class.active]=\"item?.active\"\n                            (click)=\"setPage(item?.page, data?.totalPages)\"\n                            class=\"bb-collections-pager-button\"\n                            type=\"button\">\n                        {{ item?.page }}\n                    </button>\n                </li>\n            }\n            <li class=\"bb-collections-pager-item\"\n                title=\"Next page\">\n                <button [disabled]=\"data?.pageNumber >= data?.totalPages\"\n                        (click)=\"setPage(data?.pageNumber + 1, data?.totalPages)\"\n                        class=\"bb-collections-pager-button arrow last\"\n                        type=\"button\">\n                    <bb-icon [src]=\"arrowNextIconName\"\n                             size=\"1.125\"></bb-icon>\n                </button>\n            </li>\n        </ul>\n    </div>\n}\n","import {booleanAttribute, ChangeDetectionStrategy, Component, inject, Input, ViewEncapsulation} from '@angular/core';\nimport {COLLECTIONS_CONFIG, CollectionsConfig} from '../../collections.interfaces';\nimport {BbFormControl, BbIcon, BbInput} from '@bravobit/bb-foundation/elements';\nimport {BbLocalize} from '@bravobit/bb-foundation/localize';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {Collection} from '../../collection';\n\n@Component({\n    selector: 'bb-collections-actions',\n    templateUrl: './collections-actions.component.html',\n    styleUrls: ['./collections-actions.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'bb-collections-actions',\n        '[class.standalone]': 'standalone'\n    },\n    imports: [ReactiveFormsModule, BbInput, BbLocalize, BbIcon, BbFormControl]\n})\nexport class BbCollectionsActions<T> {\n\n    // Dependencies.\n    private readonly _config?: CollectionsConfig = inject(COLLECTIONS_CONFIG, {optional: true});\n\n    // Readonly data.\n    readonly searchIconName: string = this._config?.icons?.actionsSearch ?? 'material:search';\n    readonly closeIconName: string = this._config?.icons?.actionsClose ?? 'material:close';\n\n    // Inputs.\n    @Input({required: true}) collection: Collection<T> | null = null;\n    @Input() queryPlaceholder: string | null = null;\n    @Input({transform: booleanAttribute}) standalone: boolean = false;\n\n}\n","<div class=\"bb-collections-actions-row\">\n    @if (collection?.queryFieldsControl?.value?.length > 0) {\n        <bb-form-control class=\"bb-collections-actions-search\">\n            <bb-icon [src]=\"searchIconName\"\n                     bbPrefix></bb-icon>\n            <input [formControl]=\"collection?.queryControl\"\n                   [placeholder]=\"queryPlaceholder ?? ('collection.search_label' | bbLocalize)\"\n                   bbInput\n                   autocomplete=\"off\"\n                   type=\"search\">\n            @if (collection?.queryControl?.value?.length > 0) {\n                <button (click)=\"collection?.queryControl?.setValue('')\"\n                        bbSuffix\n                        data-button\n                        type=\"button\">\n                    <bb-icon [src]=\"closeIconName\"></bb-icon>\n                </button>\n            }\n        </bb-form-control>\n    }\n    <ng-content select=\"[data-collections-action]\"></ng-content>\n</div>\n<ng-content></ng-content>\n","import {booleanAttribute, ChangeDetectionStrategy, Component, ContentChild, Input, TemplateRef, ViewEncapsulation} from '@angular/core';\nimport {BbCollectionsDataRow, BbCollectionsDataRowContext} from '../../directives/collections-data-row.directive';\nimport {BbCollectionsData, BbCollectionsDataContext} from '../../directives/collections-data.directive';\nimport {BbLocalize, BbLocalizeString, BbLocalizeTemplate} from '@bravobit/bb-foundation/localize';\nimport {BbCollectionsActions} from '../collections-actions/collections-actions.component';\nimport {BbCollectionsViewer} from '../collections-viewer/collections-viewer.component';\nimport {BbCollectionsInitial} from '../../directives/collections-initial.directive';\nimport {BbCollectionsPager} from '../collections-pager/collections-pager.component';\nimport {BbCollectionsEmpty} from '../../directives/collections-empty.directive';\nimport {BbCollectionsError} from '../../directives/collections-error.directive';\nimport {AsyncPipe, NgTemplateOutlet} from '@angular/common';\nimport {BbSpinner} from '@bravobit/bb-foundation/elements';\nimport {BbTemplate} from '@bravobit/bb-foundation/utils';\nimport {Collection} from '../../collection';\nimport {BehaviorSubject} from 'rxjs';\n\n@Component({\n    selector: 'bb-collections-table',\n    templateUrl: './collections-table.component.html',\n    styleUrls: ['./collections-table.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'bb-collections-table',\n        '[class.include-vertical-lines]': 'includeVerticalLines'\n    },\n    imports: [\n        NgTemplateOutlet,\n        BbCollectionsViewer,\n        BbCollectionsData,\n        BbCollectionsEmpty,\n        BbCollectionsError,\n        BbCollectionsInitial,\n        BbCollectionsActions,\n        BbCollectionsPager,\n        BbLocalizeString,\n        BbTemplate,\n        BbLocalize,\n        BbLocalizeTemplate,\n        BbSpinner,\n        AsyncPipe\n    ]\n})\nexport class BbCollectionsTable<T = any> {\n\n    // Readonly data.\n    readonly collection$ = new BehaviorSubject<Collection<T> | null>(null);\n\n    // Views.\n    @ContentChild(BbCollectionsData, {read: TemplateRef, static: false}) dataTemplate?: TemplateRef<BbCollectionsDataContext<T>>;\n    @ContentChild(BbCollectionsDataRow, {read: TemplateRef, static: false}) dataRowTemplate?: TemplateRef<BbCollectionsDataRowContext<T>>;\n\n    // Inputs.\n    @Input() queryPlaceholder: string | null = null;\n    @Input() emptyContent: string | TemplateRef<any> | null = null;\n    @Input() noResultsContent: string | TemplateRef<any> | null = null;\n    @Input() errorContent: string | TemplateRef<any> | null = null;\n    @Input() trackByProperty: string | null = 'id';\n    @Input({transform: booleanAttribute}) includeVerticalLines: boolean = false;\n    @Input({transform: booleanAttribute}) hideActions: boolean = false;\n    @Input({transform: booleanAttribute}) hidePager: boolean = false;\n\n    @Input({required: true})\n    set collection(collection: Collection<T>) {\n        this.collection$.next(collection);\n    }\n\n    get collection() {\n        return this.collection$.getValue();\n    }\n\n}\n","@if (!hideActions) {\n    <bb-collections-actions [collection]=\"collection\"\n                            [queryPlaceholder]=\"queryPlaceholder\">\n        <ng-content ngProjectAs=\"[data-collections-action]\"\n                    select=\"[data-collections-action]\"></ng-content>\n        <ng-content ngProjectAs=\"[data-collections-row]\"\n                    select=\"[data-collections-row]\"></ng-content>\n    </bb-collections-actions>\n}\n\n<ng-content select=\"[data-collections-header]\"></ng-content>\n\n<div [class.loading]=\"collection?.loading$ | async\"\n     class=\"bb-collections-table-wrapper\">\n    <div [collection]=\"collection\"\n         class=\"bb-collections-table-container\"\n         bb-collections-viewer>\n        @if (collection?.loading$ | async) {\n            <div class=\"bb-collections-table-loading\"></div>\n        }\n        <table *bbCollectionsData=\"let items = items; let loading = loading\">\n            <ng-content select=\"thead\"></ng-content>\n            @if (dataTemplate) {\n                <ng-container\n                    *ngTemplateOutlet=\"dataTemplate; context: {items: $any(items), loading: loading}\"></ng-container>\n            } @else {\n                <tbody>\n                    @for (item of items; track (trackByProperty === null ? $index : item[trackByProperty])) {\n                        <ng-container\n                            *ngTemplateOutlet=\"dataRowTemplate; context: {$implicit: item, item: item}\"></ng-container>\n                    }\n                </tbody>\n            }\n            <ng-content select=\"tfoot\"></ng-content>\n        </table>\n        <div *bbCollectionsEmpty=\"let query = query\"\n             class=\"bb-collections-table-info\">\n            <div class=\"bb-collections-table-image empty\"></div>\n            @if (query?.length > 0) {\n                <ng-template [bbTemplate]=\"noResultsContent\">\n                    <p [bb-localize-string]=\"$any(noResultsContent) ?? ('collection.no_results_label' | bbLocalize)\"\n                       class=\"bb-collections-table-info-text\">\n                        <strong *bbLocalizeTemplate=\"'query'\">{{ query ?? '...' }}</strong>\n                    </p>\n                </ng-template>\n            } @else {\n                <ng-template [bbTemplate]=\"emptyContent\">\n                    <p class=\"bb-collections-table-info-text\">\n                        {{ $any(emptyContent) ?? ('collection.empty_label' | bbLocalize) }}\n                    </p>\n                </ng-template>\n            }\n        </div>\n        <div *bbCollectionsError=\"let error = error\"\n             class=\"bb-collections-table-info\">\n            <div class=\"bb-collections-table-image error\"></div>\n            <ng-template [bbTemplate]=\"errorContent\">\n                <p class=\"bb-collections-table-info-text\">\n                    {{ $any(errorContent) ?? ('collection.error_label' | bbLocalize) }}\n                </p>\n            </ng-template>\n        </div>\n        <div *bbCollectionsInitial\n             class=\"bb-collections-table-info\">\n            <bb-spinner class=\"block\"></bb-spinner>\n        </div>\n    </div>\n</div>\n\n@if (!hidePager) {\n    <footer class=\"bb-collections-table-footer\">\n        <bb-collections-pager [collection]=\"collection\"></bb-collections-pager>\n    </footer>\n}\n","import {Attribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, OnDestroy, OnInit, Optional, ViewEncapsulation} from '@angular/core';\nimport {BbCollectionsTable} from '../collections-table/collections-table.component';\nimport {distinctUntilChanged, map, switchMap} from 'rxjs/operators';\nimport {getControlValue} from '@bravobit/bb-foundation/rxjs';\nimport {of, Subscription} from 'rxjs';\n\n@Component({\n    selector: 'th[bb-collections-table-sorting]',\n    templateUrl: './collections-table-sorting.component.html',\n    styleUrls: ['./collections-table-sorting.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'bb-collections-table-sorting',\n        '[class.asc]': 'direction === \\'asc\\'',\n        '[class.desc]': 'direction === \\'desc\\''\n    }\n})\nexport class BbCollectionsTableSorting implements OnInit, OnDestroy {\n\n    // Readonly data.\n    readonly orderedOptions: [null, 'asc', 'desc'] = [null, 'asc', 'desc'];\n\n    // State.\n    direction: 'asc' | 'desc' | null = null;\n\n    // Subscription.\n    private _subscription = new Subscription();\n\n    constructor(@Attribute('bb-collections-table-sorting') private _name: string,\n                private _changeDetectorRef: ChangeDetectorRef,\n                @Optional() private _parent?: BbCollectionsTable<unknown>) {\n    }\n\n    ngOnInit() {\n        if (this._parent === null || this._parent === undefined) {\n            return;\n        }\n\n        const direction$ = this._parent.collection$.pipe(\n            switchMap(collection => !!collection?.sortControl ? getControlValue(collection?.sortControl) : of(null)),\n            map(value => Array.isArray(value) ? value : [value]),\n            map(value => value?.find(item => item?.name === this._name)),\n            map(sorting => sorting?.direction ?? null),\n            distinctUntilChanged()\n        );\n        const subscription = direction$.subscribe(direction => {\n            this.direction = direction;\n            this._changeDetectorRef.markForCheck();\n        });\n        this._subscription.add(subscription);\n    }\n\n    ngOnDestroy() {\n        this._subscription?.unsubscribe();\n    }\n\n    @HostListener('click')\n    onClick() {\n        if (!this._name) {\n            return;\n        }\n\n        const nextDirection = this.getNextOption(this.direction);\n        const controlValue = nextDirection === null ? null : {name: this._name, direction: nextDirection};\n        this._parent?.collection?.sortControl?.setValue(controlValue);\n    }\n\n    private getNextOption(direction: string) {\n        const index = this.orderedOptions.findIndex(item => item === direction);\n        const newIndex = (index + 1) % this.orderedOptions?.length;\n        return this.orderedOptions?.[newIndex] ?? null;\n    }\n\n}\n","<ng-content></ng-content>\n","import {ChangeDetectionStrategy, Component, Input, TemplateRef, ViewEncapsulation} from '@angular/core';\nimport {BbAvatar} from '@bravobit/bb-foundation/elements';\nimport {BbTemplate} from '@bravobit/bb-foundation/utils';\n\n@Component({\n    selector: '[bb-collections-table-label]',\n    templateUrl: './collections-table-label.component.html',\n    styleUrls: ['./collections-table-label.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {'class': 'bb-collections-table-label'},\n    imports: [BbAvatar, BbTemplate]\n})\nexport class BbCollectionsTableLabel {\n\n    // Inputs.\n    @Input({required: true}) titleLabel: string | TemplateRef<any> | null = null;\n    @Input() descriptionLabel: string | TemplateRef<any> | null = null;\n    @Input() imageUrl: string | null = null;\n    @Input() alt: string | null = null;\n    @Input() type: 'image' | 'avatar' | 'content' = 'image';\n\n}\n","@switch (type) {\n    @case ('avatar') {\n        <bb-avatar [title]=\"alt ?? '...'\"\n                   [src]=\"imageUrl\"\n                   size=\"2\"\n                   class=\"bb-collections-table-label-avatar\">\n        </bb-avatar>\n    }\n    @case ('content') {\n        <ng-content></ng-content>\n    }\n    @default {\n        @if (imageUrl; as src) {\n            <div [style.background-image]=\"'url(' + src + ')'\"\n                 class=\"bb-collections-table-label-image\"></div>\n        }\n    }\n}\n\n<div class=\"bb-collections-table-label-content\">\n    <span class=\"bb-collections-table-label-title\"><ng-template\n        [bbTemplate]=\"titleLabel\">{{ titleLabel }}</ng-template></span>\n    @if (descriptionLabel; as descriptionContent) {\n        <small class=\"bb-collections-table-label-description\">\n            <ng-template [bbTemplate]=\"descriptionContent\">{{ descriptionContent }}</ng-template>\n        </small>\n    }\n</div>\n","import {booleanAttribute, ChangeDetectionStrategy, Component, ContentChild, Input, TemplateRef, ViewEncapsulation} from '@angular/core';\nimport {BbCollectionsItem, BbCollectionsItemContext} from '../../directives/collections-item.directive';\nimport {BbLocalize, BbLocalizeString, BbLocalizeTemplate} from '@bravobit/bb-foundation/localize';\nimport {BbCollectionsActions} from '../collections-actions/collections-actions.component';\nimport {BbCollectionsViewer} from '../collections-viewer/collections-viewer.component';\nimport {BbCollectionsPager} from '../collections-pager/collections-pager.component';\nimport {BbCollectionsInitial} from '../../directives/collections-initial.directive';\nimport {BbCollectionsError} from '../../directives/collections-error.directive';\nimport {BbCollectionsEmpty} from '../../directives/collections-empty.directive';\nimport {BbCollectionsData} from '../../directives/collections-data.directive';\nimport {BbSpinner} from '@bravobit/bb-foundation/elements';\nimport {BbTemplate} from '@bravobit/bb-foundation/utils';\nimport {NgTemplateOutlet} from '@angular/common';\nimport {Collection} from '../../collection';\nimport {BehaviorSubject} from 'rxjs';\n\n@Component({\n    selector: 'bb-collections-grid',\n    templateUrl: './collections-grid.component.html',\n    styleUrls: ['./collections-grid.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {'class': 'bb-collections-grid'},\n    imports: [\n        BbCollectionsData,\n        BbCollectionsViewer,\n        NgTemplateOutlet,\n        BbCollectionsActions,\n        BbCollectionsPager,\n        BbCollectionsInitial,\n        BbSpinner,\n        BbCollectionsError,\n        BbTemplate,\n        BbLocalize,\n        BbCollectionsEmpty,\n        BbLocalizeString,\n        BbLocalizeTemplate\n    ]\n})\nexport class BbCollectionsGrid<T> {\n\n    // Readonly data.\n    readonly collection$ = new BehaviorSubject<Collection<T> | null>(null);\n\n    // Views.\n    @ContentChild(BbCollectionsItem, {read: TemplateRef, static: false}) itemTemplate?: TemplateRef<BbCollectionsItemContext<T>>;\n\n    // Inputs.\n    @Input() queryPlaceholder: string | null = null;\n    @Input() emptyContent: string | TemplateRef<any> | null = null;\n    @Input() noResultsContent: string | TemplateRef<any> | null = null;\n    @Input() errorContent: string | TemplateRef<any> | null = null;\n    @Input() trackByProperty: string | null = 'id';\n    @Input({transform: booleanAttribute}) hideActions: boolean = false;\n    @Input({transform: booleanAttribute}) hidePager: boolean = false;\n\n    @Input({required: true})\n    set collection(collection: Collection<T>) {\n        this.collection$.next(collection);\n    }\n\n    get collection() {\n        return this.collection$.getValue();\n    }\n\n}\n","@if (!hideActions) {\n    <bb-collections-actions [collection]=\"collection\"\n                            [queryPlaceholder]=\"queryPlaceholder\"\n                            standalone>\n        <ng-content ngProjectAs=\"[data-collections-action]\"\n                    select=\"[data-collections-action]\"></ng-content>\n        <ng-content ngProjectAs=\"[data-collections-row]\"\n                    select=\"[data-collections-row]\"></ng-content>\n    </bb-collections-actions>\n}\n\n<div [collection]=\"collection\"\n     class=\"bb-collections-grid-container\"\n     bb-collections-viewer>\n    <ul *bbCollectionsData=\"let items = items\"\n        class=\"bb-collections-grid-list\">\n        @for (item of items; track (trackByProperty === null ? $index : item[trackByProperty])) {\n            <li class=\"bb-collections-grid-item\">\n                <ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: item, item: item}\"></ng-container>\n            </li>\n        }\n    </ul>\n    <div *bbCollectionsEmpty=\"let query = query\"\n         class=\"bb-collections-grid-info\">\n        <div class=\"bb-collections-grid-image empty\"></div>\n        @if (query?.length > 0) {\n            <ng-template [bbTemplate]=\"noResultsContent\">\n                <p [bb-localize-string]=\"$any(noResultsContent) ?? ('collection.no_results_label' | bbLocalize)\"\n                   class=\"bb-collections-grid-info-text\">\n                    <strong *bbLocalizeTemplate=\"'query'\">{{ query ?? '...' }}</strong>\n                </p>\n            </ng-template>\n        } @else {\n            <ng-template [bbTemplate]=\"emptyContent\">\n                <p class=\"bb-collections-grid-info-text\">\n                    {{ $any(emptyContent) ?? ('collection.empty_label' | bbLocalize) }}\n                </p>\n            </ng-template>\n        }\n    </div>\n    <div *bbCollectionsError=\"let error = error\"\n         class=\"bb-collections-grid-info\">\n        <div class=\"bb-collections-grid-image error\"></div>\n        <ng-template [bbTemplate]=\"errorContent\">\n            <p class=\"bb-collections-grid-info-text\">\n                {{ $any(errorContent) ?? ('collection.error_label' | bbLocalize) }}\n            </p>\n        </ng-template>\n    </div>\n    <div *bbCollectionsInitial\n         class=\"bb-collections-grid-info\">\n        <bb-spinner class=\"block\"></bb-spinner>\n    </div>\n</div>\n\n@if (!hidePager) {\n    <footer class=\"bb-collections-grid-footer\">\n        <bb-collections-pager [collection]=\"collection\"></bb-collections-pager>\n    </footer>\n}\n","import {catchError, debounceTime, distinctUntilChanged, map, shareReplay, startWith, switchMap, tap} from 'rxjs/operators';\nimport {CollectionData, CollectionRequest, CollectionRequestSort} from './interfaces/collection.interface';\nimport {BehaviorSubject, combineLatest, defer, isObservable, merge, Observable, of} from 'rxjs';\nimport {CollectionProvider} from './providers/collection.provider';\nimport {getControlValue} from '@bravobit/bb-foundation/rxjs';\nimport {FormControl} from '@angular/forms';\n\nexport const enum CollectionState {\n    Initial = 'initial',\n    Error = 'error',\n    Empty = 'empty',\n    Data = 'data'\n}\n\nexport class Collection<T> {\n\n    // Controls.\n    readonly queryControl: FormControl<string | null>;\n    readonly queryFieldsControl: FormControl<string[]>;\n    readonly pageNumberControl: FormControl<number>;\n    readonly pageSizeControl: FormControl<number>;\n    readonly sortControl: FormControl<CollectionRequestSort | CollectionRequestSort[]>;\n\n    // Request.\n    readonly data$: Observable<{\n        response?: CollectionData<T>,\n        request?: CollectionRequest,\n        error?: Error\n        state: CollectionState,\n        loading: boolean,\n        initial: boolean\n    }>;\n\n    readonly raw$ = new BehaviorSubject<CollectionData<T> | null>(null);\n    readonly loading$ = new BehaviorSubject<boolean>(true);\n\n    // State.\n    private _formatter: (item: T[]) => T[] | Observable<T[]> = null;\n    private _refresh$ = new BehaviorSubject<number>(0);\n\n    constructor(private readonly _provider: CollectionProvider<T>,\n                readonly _initialValues: Partial<CollectionRequest> = {}) {\n        this.queryControl = new FormControl<string | null>(_initialValues?.query ?? null);\n        this.queryFieldsControl = new FormControl<string[]>(_initialValues?.queryFields ?? []);\n        this.pageNumberControl = new FormControl<number>(_initialValues?.pageNumber ?? 1);\n        this.pageSizeControl = new FormControl<number>(_initialValues?.pageSize ?? 25);\n        this.sortControl = new FormControl<CollectionRequestSort | CollectionRequestSort[] | null>(_initialValues?.sort ?? null);\n\n        this.data$ = this.getData();\n    }\n\n    refresh() {\n        this._refresh$.next(0);\n    }\n\n    setFormatter(callback: (items: T[]) => T[] | Observable<T[]>) {\n        this._formatter = callback;\n        return this;\n    }\n\n    private getData() {\n        const data$ = this.request.pipe(\n            tap(() => this.loading$.next(true)),\n            switchMap(request => {\n                return this._provider.transform(request, {collection: this}).pipe(\n                    tap(response => this.cacheCollectionData(response)),\n                    map(response => ({response, request, initial: false})),\n                    catchError(error => of<{ error: Error, response: CollectionData<T> | null, request: CollectionRequest, initial: boolean }>({\n                        error,\n                        request,\n                        response: null,\n                        initial: false\n                    })),\n                    tap(() => this.loading$.next(false))\n                );\n            }),\n            startWith<{ initial: boolean, response: CollectionData<T> | null }>({initial: true, response: null}),\n            shareReplay({refCount: true, bufferSize: 1})\n        );\n\n        return combineLatest([data$, this.loading$.asObservable()]).pipe(\n            switchMap(([data, loading]) => {\n                const combined = {...data, loading};\n                return this.formatResponse(data?.response).pipe(\n                    map(response => {\n                        const data = {...combined, response};\n                        return {...data, state: this.getState(data)};\n                    })\n                );\n            })\n        );\n    }\n\n    private formatResponse(response: CollectionData<T>) {\n        if (!response || !this._formatter) {\n            return of(response);\n        }\n\n        const items = response?.data ?? [];\n        const data = this._formatter?.(items) ?? items;\n        const data$ = isObservable(data) ? data : of(data);\n\n        return data$.pipe(\n            map(data => ({...response, data}))\n        );\n    }\n\n    private getState(data: { response?: CollectionData<T>, request?: CollectionRequest, error?: Error, loading: boolean, initial: boolean }) {\n        if (!!data?.error) {\n            return CollectionState.Error;\n        }\n\n        if (!!data?.initial) {\n            return CollectionState.Initial;\n        }\n\n        const count = data?.response?.data?.length ?? 0;\n        if (count <= 0) {\n            return CollectionState.Empty;\n        }\n\n        return CollectionState.Data;\n    }\n\n    private cacheCollectionData(data: CollectionData<T>) {\n        this.raw$.next(data);\n    }\n\n    private get request() {\n        const pageNumber$ = getControlValue<number>(this.pageNumberControl);\n        const pageSize$ = getControlValue<number>(this.pageSizeControl);\n        const query$ = this.getQueryObservable();\n        const queryFields$ = getControlValue<string[]>(this.queryFieldsControl);\n        const sort$ = getControlValue<CollectionRequestSort | CollectionRequestSort[]>(this.sortControl);\n\n        return combineLatest([pageNumber$, pageSize$, query$, queryFields$, sort$, this._refresh$.asObservable()]).pipe(\n            map(([pageNumber, pageSize, query, queryFields, sort]) => ({\n                pageNumber,\n                pageSize,\n                query,\n                queryFields,\n                sort\n            }))\n        );\n    }\n\n    private getQueryObservable() {\n        return merge(this.queryControl.valueChanges, defer(() => of(this.queryControl?.value))).pipe(\n            debounceTime(400),\n            distinctUntilChanged()\n        );\n    }\n\n}\n\n","import {BbCollectionsTableSorting} from './components/collections-table-sorting/collections-table-sorting.component';\nimport {BbCollectionsTableLabel} from './components/collections-table-label/collections-table-label.component';\nimport {BbCollectionsActions} from './components/collections-actions/collections-actions.component';\nimport {BbCollectionsViewer} from './components/collections-viewer/collections-viewer.component';\nimport {BbCollectionsPager} from './components/collections-pager/collections-pager.component';\nimport {BbCollectionsTable} from './components/collections-table/collections-table.component';\nimport {BbCollectionsGrid} from './components/collections-grid/collections-grid.component';\nimport {BbCollectionsDataRow} from './directives/collections-data-row.directive';\nimport {BbCollectionsInitial} from './directives/collections-initial.directive';\nimport {BbCollectionsEmpty} from './directives/collections-empty.directive';\nimport {BbCollectionsError} from './directives/collections-error.directive';\nimport {BbCollectionsData} from './directives/collections-data.directive';\nimport {BbCollectionsItem} from './directives/collections-item.directive';\nimport {NgModule} from '@angular/core';\n\n@NgModule({\n    imports: [\n        BbCollectionsViewer,\n        BbCollectionsPager,\n        BbCollectionsTable,\n        BbCollectionsTableSorting,\n        BbCollectionsTableLabel,\n        BbCollectionsGrid,\n        BbCollectionsActions,\n        BbCollectionsData,\n        BbCollectionsDataRow,\n        BbCollectionsEmpty,\n        BbCollectionsError,\n        BbCollectionsInitial,\n        BbCollectionsItem\n    ],\n    exports: [\n        BbCollectionsViewer,\n        BbCollectionsPager,\n        BbCollectionsTable,\n        BbCollectionsTableSorting,\n        BbCollectionsTableLabel,\n        BbCollectionsGrid,\n        BbCollectionsActions,\n        BbCollectionsData,\n        BbCollectionsDataRow,\n        BbCollectionsEmpty,\n        BbCollectionsError,\n        BbCollectionsInitial,\n        BbCollectionsItem\n    ]\n})\nexport class CollectionsModule {\n}\n","import {COLLECTIONS_CONFIG, CollectionsConfig} from './collections.interfaces';\nimport {EnvironmentProviders, makeEnvironmentProviders} from '@angular/core';\n\nexport function provideCollectionsConfig(config: CollectionsConfig): EnvironmentProviders {\n    return makeEnvironmentProviders([\n        {provide: COLLECTIONS_CONFIG, useValue: config}\n    ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.BbCollectionsTable"],"mappings":"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"}