@bravobit/bb-foundation 0.54.1 → 0.54.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -669,7 +669,10 @@ class BbCollectionsTableSorting {
669
669
  this._parent = _parent;
670
670
  }
671
671
  ngOnInit() {
672
- const direction$ = this._parent.collection$.pipe(switchMap(collection => getControlValue(collection.sortControl)), map(value => Array.isArray(value) ? value : [value]), map(value => value?.find(item => item?.name === this._name)), map(sorting => sorting?.direction ?? null), distinctUntilChanged());
672
+ if (this._parent === null || this._parent === undefined) {
673
+ return;
674
+ }
675
+ const direction$ = this._parent.collection$.pipe(switchMap(collection => !!collection?.sortControl ? getControlValue(collection?.sortControl) : of(null)), map(value => Array.isArray(value) ? value : [value]), map(value => value?.find(item => item?.name === this._name)), map(sorting => sorting?.direction ?? null), distinctUntilChanged());
673
676
  const subscription = direction$.subscribe(direction => {
674
677
  this.direction = direction;
675
678
  this._changeDetectorRef.markForCheck();
@@ -1 +1 @@
1
- {"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 {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 const direction$ = this._parent.collection$.pipe(\n switchMap(collection => getControlValue(collection.sortControl)),\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 {BbCollectionsActions} from '../collections-actions/collections-actions.component';\nimport {BbCollectionsViewer} from '../collections-viewer/collections-viewer.component';\nimport {BbCollectionsPager} from '../collections-pager/collections-pager.component';\nimport {BbCollectionsData} from '../../directives/collections-data.directive';\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 ]\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({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 $index) {\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>\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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"}
1
+ {"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 {BbCollectionsActions} from '../collections-actions/collections-actions.component';\nimport {BbCollectionsViewer} from '../collections-viewer/collections-viewer.component';\nimport {BbCollectionsPager} from '../collections-pager/collections-pager.component';\nimport {BbCollectionsData} from '../../directives/collections-data.directive';\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 ]\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({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 $index) {\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>\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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"}
@@ -488,12 +488,12 @@ class BbTableHeaderCell {
488
488
  return;
489
489
  }
490
490
  // Check if the control already exists in the table.
491
- if (this._table.sortControl?.contains(this._name)) {
491
+ if (this._table?.sortControl?.contains(this._name)) {
492
492
  this.disabled = true;
493
493
  return this.logWarning(`BbTableHeaderCell: The name "${this._name}" is not unique in the table; Control was not registered.`);
494
494
  }
495
495
  // Register the header cell with the table.
496
- this._table.sortControl?.addControl(this._name, this._control);
496
+ this._table?.sortControl?.addControl(this._name, this._control);
497
497
  // Get all the value changes.
498
498
  this.valueChanges$ = getControlValue(this._control);
499
499
  }
@@ -543,10 +543,10 @@ class BbTableHeaderCell {
543
543
  }
544
544
  handleSingleSortingStrategy(value) {
545
545
  // Get the sort control.
546
- const control = this._table.sortControl;
546
+ const control = this._table?.sortControl;
547
547
  // Set each value to false since we only want to
548
548
  // sort on one property at a time with this strategy.
549
- const newValue = Object.keys(control.controls).reduce((previous, current) => {
549
+ const newValue = Object.keys(control?.controls ?? {}).reduce((previous, current) => {
550
550
  previous[current] = current === this._name ? value : 'none';
551
551
  return previous;
552
552
  }, {});
@@ -1 +1 @@
1
- {"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":";;;;;;;;;;;MAIa,YAAY,GAAG,IAAI,cAAc,CAAc,cAAc;;MCA7D,iBAAiB,CAAA;;AAGlB,IAAA,SAAS,GAAG,IAAI,eAAe,CAA+B,IAAI,CAAC;AACnE,IAAA,SAAS,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC;AAEtD,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;;AAGxC,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CACtB,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,CACzB;;IAGL,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;;IAG7B,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;;IAG9B,MAAM,CAAC,SAAyC,EAAE,EAAA;QAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;;QAG9C,IAAI,YAAY,IAAI,MAAM,KAAK,YAAY,EAAE,KAAK,KAAK,MAAM,EAAE,KAAK,IAAI,YAAY,EAAE,QAAQ,KAAK,MAAM,EAAE,QAAQ,CAAC,EAAE;AAClH,YAAA,MAAM,CAAC,UAAU,GAAG,CAAC;;AAGzB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAC,GAAG,YAAY,EAAE,GAAG,MAAM,EAAC,CAAC;;AAGxD;MAEqB,UAAU,CAAA;AAI/B;;ACvCK,MAAO,iBAA2B,SAAQ,UAAa,CAAA;AAExC,IAAA,WAAW;AACX,IAAA,UAAU;;AAGnB,IAAA,OAAO,GAAG,IAAI,eAAe,CAAiD,EAAE,CAAC;AACjF,IAAA,GAAG,GAAuB,IAAI,IAAI,IAAI;IACtC,MAAM,GAAqC,IAAI;IAEvD,WAAY,CAAA,UAAsB,EACtB,QAAqC,EAAA;AAC7C,QAAA,KAAK,EAAE;AAEP,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU;AAC7B,QAAA,IAAI,CAAC,UAAU,GAAG,OAAO,QAAQ,KAAK;AAClC,cAAE,EAAE,CAAS,QAAQ;cACnB,QAAQ;;AAIlB,IAAA,MAAM,CAAC,IAAkD,EAAA;QACrD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;QAC5C,MAAM,QAAQ,GAAG,CAAC,GAAG,YAAY,EAAE,IAAI,CAAC;AACxC,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;AAE3B,QAAA,OAAO,IAAI;;AAGf,IAAA,IAAI,CAAC,EAAsB,EAAA;AACvB,QAAA,IAAI,CAAC,GAAG,GAAG,EAAE;AACb,QAAA,OAAO,IAAI;;AAGf,IAAA,GAAG,CAAC,EAA2B,EAAA;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,OAAO,IAAI;;AAGf,IAAA,MAAM,CAAC,OAA0B,EAAA;AAC7B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAClC,SAAS,CAAC,KAAK,IAAI,KAAK,EAAE,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EACtE,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,OAAO,MAAM,EAAC,GAAG,QAAQ,EAAE,IAAI,OAAO,IAAI,EAAE,CAAC,EAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAC7F;AAED,QAAA,OAAO,aAAa,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CACpE,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,KAAI;;YAE1C,OAAO,CAAC,YAAY,EAAE;YAEtB,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YACjD,MAAM,cAAc,GAAG,EAAC,GAAG,eAAe,EAAE,GAAG,WAAW,EAAC;AAE3D,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE;AAClC,gBAAA,MAAM,EAAE;AACX,aAAA,CAAC,CAAC,IAAI,CACH,GAAG,CAAC,IAAI,IAAG;AACP,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;oBACd;;AAEJ,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;aACpB,CAAC,EACF,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EACtC,GAAG,CAAC,MAAM,KAAK;AACX,gBAAA,GAAG,MAAM;gBACT,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE;aACpC,CAAC,CAAC,CACN;AACL,SAAC,CAAC,EACF,KAAK,EAAE,CACV;;AAGG,IAAA,cAAc,GAAG,CAAU,IAAa,KAAI;QAChD,OAAO;AACH,YAAA,QAAQ,EAAE,IAAI,GAAG,WAAW,CAAW;AACvC,YAAA,UAAU,EAAE,IAAI,GAAG,aAAa,CAAW;AAC3C,YAAA,UAAU,EAAE,IAAI,GAAG,aAAa,CAAW;AAC3C,YAAA,YAAY,EAAE,IAAI,GAAG,eAAe,CAAW;AAC/C,YAAA,IAAI,EAAE,IAAI,GAAG,MAAM;SACtB;AACL,KAAC;AAEO,IAAA,YAAY,GAAG,CAAC,IAAoC,KAAI;QAC5D,MAAM,MAAM,GAAG,EAAE;QAEjB,MAAM,CAAC,MAAM,CAAC,GAAG,CAAA,EAAG,IAAI,EAAE,UAAU,IAAI,CAAC,CAAA,CAAE;QAC3C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAA,EAAG,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAA,CAAE;QAE/C,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE;aACzB,GAAG,CAAC,CAAC,EAAC,IAAI,EAAC,KAAK,IAAI;aACpB,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI;aACrB,IAAI,CAAC,GAAG,CAAC;QAEd,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE;aAClC,GAAG,CAAC,CAAC,EAAC,SAAS,EAAC,KAAK,SAAS;aAC9B,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS;aAC/B,IAAI,CAAC,GAAG,CAAC;AAEd,QAAA,IAAI,IAAI,EAAE,MAAM,GAAG,CAAC,IAAI,aAAa,EAAE,MAAM,GAAG,CAAC,EAAE;AAC/C,YAAA,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI;AACrB,YAAA,MAAM,CAAC,gBAAgB,CAAC,GAAG,aAAa;;QAG5C,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,IAAI,IAAI,EAAE,WAAW,IAAI,IAAI,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC,EAAE;AAC9F,YAAA,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,KAAK;AAC7B,YAAA,MAAM,CAAC,cAAc,CAAC,GAAG,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC;;AAGzD,QAAA,OAAO,MAAM;AACjB,KAAC;AAEJ;;MC/FY,YAAY,CAAA;;IAGJ,OAAO,GAAiB,MAAM,CAAC,YAAY,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;;IAGtE,qBAAqB,GAAW,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,kBAAkB,IAAI,8BAA8B;IACzG,iBAAiB,GAAW,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,cAAc,IAAI,+BAA+B;;IAGlG,eAAe,GAAW,CAAC;IAC3B,gBAAgB,GAAY,IAAI;IACH,QAAQ,GAAY,KAAK;;AAG/D,IAAA,mBAAmB;AACnB,IAAA,eAAe;AACf,IAAA,KAAK;;AAGL,IAAA,QAAQ,GAA+B,OAAO,EAAE,CAAC;AACjD,IAAA,SAAS,GAAe,OAAO,EAAE,CAAC;;AAG1B,IAAA,YAAY,GAA4B,IAAI,eAAe,CAAS,CAAC,CAAC;AACtE,IAAA,YAAY,GAA4B,IAAI,eAAe,CAAS,CAAC,CAAC;IAE9E,QAAQ,GAAA;;QAEJ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAC7C,GAAG,CAAC,UAAU,IAAI,UAAU,KAAK,CAAC,CAAC,CACtC;;AAGD,QAAA,IAAI,CAAC,eAAe,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAC7E,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,KAAK,UAAU,KAAK,UAAU,CAAC,CAC/D;;AAGD,QAAA,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CACnE,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,KAAK,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,EACjF,KAAK,EAAE,CACV;;AAGL,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;;IAGvC,IACI,UAAU,CAAC,QAAgB,EAAA;AAC3B,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;;AAGzB,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;;IAGvC,IACI,UAAU,CAAC,QAAgB,EAAA;QAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC;AAC3C,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;;AAGzC,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAGtB,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;AAGvB,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;;AAG9B,IAAA,UAAU,CAAC,QAAgB,EAAA;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC;;IAGhC,YAAY,GAAA;QACR,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC;AACjD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;;IAGhC,QAAQ,GAAA;QACJ,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC;AACjD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;;AAGhC,IAAA,SAAS,CAAC,KAAa,EAAA;AACnB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;;AAGrB,IAAA,MAAM,CAAC,UAAkB,EAAE,MAAA,GAAkB,IAAI,EAAA;;AAErD,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf;;;AAIJ,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACrB,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAC1B;;QAGD,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,QAAQ,EAAE;YAC3C;;;AAIJ,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;QAEhC,IAAI,MAAM,EAAE;AACR,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;;;AAIhC,IAAA,cAAc,CAAC,UAAkB,EAAA;QACrC,MAAM,GAAG,GAAG,CAAC;AACb,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU;AAC3B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC;AAEhD,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM;aACpB,IAAI,CAAC,CAAC;AACN,aAAA,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,UAAU,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;;;AAIhD,QAAA,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE;AACf,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC;;;;QAKrC,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9C,QAAA,MAAM,iBAAiB,GAAG,gBAAgB,GAAG,GAAG;AAChD,QAAA,IAAI,iBAAiB,GAAG,CAAC,EAAE;AACvB,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,GAAG,iBAAiB,CAAC;;;AAIrD,QAAA,OAAO,IAAI;;IAGP,iBAAiB,CAAC,UAAkB,EAAE,UAAkB,EAAA;AAC5D,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU;AAChC,aAAA,MAAM,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,UAAU;AAC7C,aAAA,GAAG,CAAC,IAAI,KAAK,EAAC,IAAI,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,EAAC,CAAC,CAAC;;uGArJlD,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAYF,gBAAgB,CAjBxB,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,SAAA,EAAA;AACP,YAAA,EAAC,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI;AACxF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpBL,4/CA0CA,EAAA,MAAA,EAAA,CAAA,2lCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EDrBc,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAElB,YAAY,EAAA,UAAA,EAAA,CAAA;kBAfxB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAGT,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACzC,IAAA,EAAA;AACF,wBAAA,OAAO,EAAE,gBAAgB;AACzB,wBAAA,kBAAkB,EAAE;qBACvB,EACc,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAC1B,SAAA,EAAA;AACP,wBAAA,EAAC,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,IAAI;AACxF,qBAAA,EAAA,OAAA,EACQ,CAAC,SAAS,EAAE,MAAM,CAAC,EAAA,QAAA,EAAA,4/CAAA,EAAA,MAAA,EAAA,CAAA,2lCAAA,CAAA,EAAA;8BAYnB,eAAe,EAAA,CAAA;sBAAvB;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBACqC,QAAQ,EAAA,CAAA;sBAA7C,KAAK;uBAAC,EAAC,SAAS,EAAE,gBAAgB,EAAC;gBAsChC,UAAU,EAAA,CAAA;sBADb;gBAUG,UAAU,EAAA,CAAA;sBADb;;;MEtDQ,gBAAgB,CAAA;uGAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE;AACb,iBAAA;;MAOY,aAAa,CAAA;uGAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE;AACb,iBAAA;;MAaY,OAAO,CAAA;;IAGC,OAAO,GAAiB,MAAM,CAAC,YAAY,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;;IAGtE,qBAAqB,GAAW,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,aAAa,IAAI,iBAAiB;IACvF,oBAAoB,GAAW,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,IAAI,gBAAgB;;AAGrC,IAAA,oBAAoB;AACX,IAAA,gBAAgB;;IAGxE,UAAU,GAAkB,IAAI;AAChC,IAAA,UAAU;IACV,WAAW,GAAa,EAAE;IAC1B,eAAe,GAA0B,QAAQ;IACjD,MAAM,GAA+B,IAAI;IACzC,MAAM,GAA+B,IAAI;;IAG1C,MAAM,GAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAE5C,IAAA,IAAI,KAAK,GAAA;QACL,OAAO,IAAI,CAAC,MAAM;;IAGtB,IACI,KAAK,CAAC,QAAkB,EAAA;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;;;AAI9B,IAAA,OAAO;AACP,IAAA,KAAK;AACL,IAAA,UAAU;;AAGV,IAAA,IAAI;AACJ,IAAA,YAAY,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC;;IAG1B,YAAY,GAAW,CAAC;;AAGxB,IAAA,aAAa;IAErB,QAAQ,GAAA;QACJ,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,gBAAgB,EAAE;;IAG3B,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,aAAa,EAAE,WAAW,EAAE;;AAGrC,IAAA,IAAI,WAAW,GAAA;QACX,OAAO,IAAI,CAAC,YAAY;;AAG5B,IAAA,IAAI,WAAW,GAAA;QACX,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAc;;AAG9C,IAAA,IAAI,iBAAiB,GAAA;QACjB,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,YAAY,CAAwB;;AAG9D,IAAA,IAAI,eAAe,GAAA;QACf,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,CAAwB;;IAG5D,OAAO,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;;AAGhC,IAAA,cAAc,CAAC,MAAc,EAAA;AACzB,QAAA,IAAI,CAAC,YAAY,IAAI,MAAM;;AAGvB,IAAA,WAAW,CAAC,QAAkB,EAAA;;AAElC,QAAA,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;AACtB,YAAA,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC;;;AAI9D,QAAA,IAAI,CAAC,MAAM,GAAG,QAAQ;;AAGtB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACZ;;;;QAKJ,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;QACjD,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;YAC7C;;;;QAKJ,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACjC,QAAA,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC;;IAGhC,WAAW,GAAA;;AAEf,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,SAAS,CAAC;YACtB,QAAQ,EAAE,IAAI,WAAW,CAAS,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACjD,YAAA,UAAU,EAAE,IAAI,WAAW,CAAS,CAAC,CAAC;AACtC,YAAA,IAAI,EAAE,IAAI,SAAS,CAAC,EAAE;AACzB,SAAA,CAAC;;IAGE,gBAAgB,GAAA;;AAEpB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAiB,EAAE;QACtC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO;AAEtC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,EAAC,KAAK,EAAE,kBAAkB,EAAC,CAAC,CAAC,IAAI,CAC7C,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CACxC;YACD;;;AAIJ,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAClD,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EACrC,GAAG,CAAC,MAAM,IAAG;AACT,YAAA,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;AAChE,YAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACZ,gBAAA,OAAO,EAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAC;;AAGnC,YAAA,OAAO,EAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAC;AACrC,SAAC,CAAC,EACF,UAAU,CAAC,KAAK,IAAG;AACf,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;AAE1B,YAAA,MAAM,UAAU,GAAG,KAAK,EAAE,MAAM,IAAI,IAAI;AACxC,YAAA,MAAM,MAAM,GAAG;AACX,gBAAA,CAAC,EAAE,YAAY;AACf,gBAAA,GAAG,EAAE,oBAAoB;AACzB,gBAAA,GAAG,EAAE,iBAAiB;AACtB,gBAAA,GAAG,EAAE,iBAAiB;AACtB,gBAAA,GAAG,EAAE;aACR;AAED,YAAA,OAAO,EAAE,CAAC,EAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC,IAAI,eAAe,EAAE,UAAU,EAAE,UAAU,EAAC,CAAC;SACtF,CAAC,CACL;;QAGD,IAAI,CAAC,kBAAkB,EAAE;;IAGrB,kBAAkB,GAAA;AACtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE;AACnC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;QAErC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,KAAI;AAC5E,YAAA,MAAM,EAAC,UAAU,EAAE,QAAQ,EAAC,GAAG,IAAI;YACnC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC7B,iBAAA,GAAG,CAAC,IAAI,KAAK,EAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAC,CAAC;AAChD,iBAAA,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAE7D,YAAA,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;AAC3B,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;gBACvB,IAAI;gBACJ,KAAK;gBACL,QAAQ;gBACR,UAAU;gBACV,WAAW,EAAE,IAAI,CAAC;AACrB,aAAA,CAAC;AACN,SAAC,CAAC;;IAGE,eAAe,GAAA;AACnB,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CACxF,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,EAAE,CACzB;;IAGG,cAAc,GAAA;QAClB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;;uGA7LlE,OAAO,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAP,OAAO,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAWF,aAAa,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAS,WAAW,EAAA,EAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,SAAA,EAD9B,gBAAgB,EAAS,IAAA,EAAA,WAAW,ECvDzD,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,g3NAyKA,ED9Hc,MAAA,EAAA,CAAA,g3FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,+IAAE,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,UAAU,EAAA,IAAA,EAAA,YAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,kDAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAE3G,OAAO,EAAA,UAAA,EAAA,CAAA;kBATnB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAGd,IAAA,EAAA,EAAC,OAAO,EAAE,UAAU,EAAC,EAAA,eAAA,EACV,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAC5B,OAAA,EAAA,CAAC,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,YAAY,EAAE,UAAU,CAAC,EAAA,QAAA,EAAA,g3NAAA,EAAA,MAAA,EAAA,CAAA,g3FAAA,CAAA,EAAA;8BAYzE,oBAAoB,EAAA,CAAA;sBAA3E,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAC,IAAI,EAAE,WAAW,EAAC;gBACW,gBAAgB,EAAA,CAAA;sBAAhF,YAAY;uBAAC,aAAa,EAAE,EAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAC;gBAGtD,UAAU,EAAA,CAAA;sBAAlB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBAUG,KAAK,EAAA,CAAA;sBADR;;;ME/DQ,WAAW,CAAA;uGAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,uICVxB,8CAEM,EAAA,MAAA,EAAA,CAAA,gdAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FDQO,WAAW,EAAA,UAAA,EAAA,CAAA;kBARvB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kCAAkC,EAG3B,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACzC,IAAA,EAAA,EAAC,OAAO,EAAE,eAAe,EAAC,EACjB,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,gdAAA,CAAA,EAAA;;;MEY5B,iBAAiB,CAAA;AA4Bc,IAAA,MAAA;AACW,IAAA,KAAA;;IA1BlC,eAAe,GAA8B,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;IACpE,QAAQ,GAAG,IAAI,WAAW,CAA0B,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;;IAGvD,QAAQ,GAAY,KAAK;;AAG/D,IAAA,aAAa;;IAGb,IACI,IAAI,CAAC,KAA8B,EAAA;;QAEnC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YACvC;;;AAIJ,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAGjC,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK;;IAG9B,WAAwC,CAAA,MAAgB,EACL,KAAc,EAAA;QADzB,IAAM,CAAA,MAAA,GAAN,MAAM;QACK,IAAK,CAAA,KAAA,GAAL,KAAK;;IAGxD,QAAQ,GAAA;;QAEJ,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YAC7B;;;AAIJ,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC/C,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;YACpB,OAAO,IAAI,CAAC,UAAU,CAAC,CAAA,6BAAA,EAAgC,IAAI,CAAC,KAAK,CAA2D,yDAAA,CAAA,CAAC;;;AAIjI,QAAA,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;;QAG9D,IAAI,CAAC,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;;IAGvD,WAAW,GAAA;QACP,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC;;QAEjC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YAC7B;;;AAIJ,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAChD,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;;;AAI3D,IAAA,IAAI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK;;IAIvC,OAAO,GAAA;;AAEH,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB;;;;QAKJ,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAClF,QAAA,MAAM,QAAQ,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;;AAG9C,QAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC;;AAGzC,IAAA,wBAAwB,CAAC,KAA8B,EAAA;;QAE3D,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YACvC;;;AAIJ,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;;;QAIxC,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,KAAK,QAAQ,EAAE;AAC1C,YAAA,OAAO,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC;;;;QAKlD,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAGhC,IAAA,2BAA2B,CAAC,KAAa,EAAA;;AAE7C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW;;;AAIvC,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,OAAO,KAAI;AACxE,YAAA,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,KAAK,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,MAAM;AAC3D,YAAA,OAAO,QAAQ;SAClB,EAAE,EAAE,CAAC;;QAGN,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,QAAQ,CAAC;;AAG1C,IAAA,UAAU,GAAG,CAAC,OAAe,KAAI;QACrC,OAAO,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;AACpD,KAAC;AA5HQ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,kEA6BS,MAAM,EAAA,SAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AA7BhC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAOP,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,gBAAgB,CC3BvC,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,WAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,wXAYA,m2DDMc,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAEV,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAZ7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,+CAA+C,EAGxC,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACzC,IAAA,EAAA;AACF,wBAAA,OAAO,EAAE,sBAAsB;AAC/B,wBAAA,kBAAkB,EAAE;AACvB,qBAAA,EAAA,aAAA,EACc,iBAAiB,CAAC,IAAI,EAC5B,OAAA,EAAA,CAAC,SAAS,CAAC,EAAA,QAAA,EAAA,wXAAA,EAAA,MAAA,EAAA,CAAA,gzDAAA,CAAA,EAAA;;0BA8BP;;0BAAY;;0BACZ;;0BAAY,SAAS;2BAAC,MAAM;yCAtBH,QAAQ,EAAA,CAAA;sBAA7C,KAAK;uBAAC,EAAC,SAAS,EAAE,gBAAgB,EAAC;gBAOhC,IAAI,EAAA,CAAA;sBADP;gBAyDD,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,OAAO;;;MEjEZ,WAAW,CAAA;uGAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,YAhBhB,OAAO;YACP,gBAAgB;YAChB,aAAa;YACb,iBAAiB;YACjB,WAAW;AACX,YAAA,YAAY,aAGZ,OAAO;YACP,gBAAgB;YAChB,aAAa;YACb,iBAAiB;YACjB,WAAW;YACX,YAAY,CAAA,EAAA,CAAA;AAGP,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,YAhBhB,OAAO;YAKP,YAAY,CAAA,EAAA,CAAA;;2FAWP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAlBvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE;wBACL,OAAO;wBACP,gBAAgB;wBAChB,aAAa;wBACb,iBAAiB;wBACjB,WAAW;wBACX;AACH,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,OAAO;wBACP,gBAAgB;wBAChB,aAAa;wBACb,iBAAiB;wBACjB,WAAW;wBACX;AACH;AACJ,iBAAA;;;ACpBK,SAAU,kBAAkB,CAAC,MAAmB,EAAA;AAClD,IAAA,OAAO,wBAAwB,CAAC;AAC5B,QAAA,EAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM;AAC3C,KAAA,CAAC;AACN;;ACPA;;AAEG;;;;"}
1
+ {"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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bravobit/bb-foundation",
3
- "version": "0.54.1",
3
+ "version": "0.54.2",
4
4
  "description": "The Angular core foundation of the Bravobit team.",
5
5
  "author": {
6
6
  "name": "Stan van Heumen",
@@ -44,14 +44,6 @@
44
44
  "types": "./collections/index.d.ts",
45
45
  "default": "./fesm2022/bravobit-bb-foundation-collections.mjs"
46
46
  },
47
- "./combobox": {
48
- "types": "./combobox/index.d.ts",
49
- "default": "./fesm2022/bravobit-bb-foundation-combobox.mjs"
50
- },
51
- "./elements": {
52
- "types": "./elements/index.d.ts",
53
- "default": "./fesm2022/bravobit-bb-foundation-elements.mjs"
54
- },
55
47
  "./dialog": {
56
48
  "types": "./dialog/index.d.ts",
57
49
  "default": "./fesm2022/bravobit-bb-foundation-dialog.mjs"
@@ -60,6 +52,14 @@
60
52
  "types": "./dashboard/index.d.ts",
61
53
  "default": "./fesm2022/bravobit-bb-foundation-dashboard.mjs"
62
54
  },
55
+ "./elements": {
56
+ "types": "./elements/index.d.ts",
57
+ "default": "./fesm2022/bravobit-bb-foundation-elements.mjs"
58
+ },
59
+ "./combobox": {
60
+ "types": "./combobox/index.d.ts",
61
+ "default": "./fesm2022/bravobit-bb-foundation-combobox.mjs"
62
+ },
63
63
  "./http": {
64
64
  "types": "./http/index.d.ts",
65
65
  "default": "./fesm2022/bravobit-bb-foundation-http.mjs"