{"version":3,"file":"smartsoft001-crud-shell-angular.mjs","names":[],"sources":["../../../../../../packages/crud/shell/angular/src/lib/+state/crud.actions.ts","../../../../../../packages/crud/shell/angular/src/lib/crud.config.ts","../../../../../../packages/crud/shell/angular/src/lib/+state/crud.selectors.ts","../../../../../../packages/crud/shell/angular/src/lib/services/socket/socket.service.ts","../../../../../../packages/crud/shell/angular/src/lib/services/crud/crud.service.ts","../../../../../../packages/crud/shell/angular/src/lib/+state/crud.effects.ts","../../../../../../packages/crud/shell/angular/src/lib/+state/crud.facade.ts","../../../../../../packages/crud/shell/angular/src/lib/+state/crud.reducer.ts","../../../../../../packages/crud/shell/angular/src/lib/components/export/base/base.component.ts","../../../../../../packages/crud/shell/angular/src/lib/components/export/export.component.ts","../../../../../../packages/crud/shell/angular/src/lib/providers/model-possibilities/model-possibilities.provider.ts","../../../../../../packages/crud/shell/angular/src/lib/components/filter/base/base.component.ts","../../../../../../packages/crud/shell/angular/src/lib/components/filter/check/check.component.ts","../../../../../../packages/crud/shell/angular/src/lib/components/filter/date/date.component.ts","../../../../../../packages/crud/shell/angular/src/lib/components/filter/date-time/date-time.component.ts","../../../../../../packages/crud/shell/angular/src/lib/components/filter/date-with-edit/date-with-edit.component.ts","../../../../../../packages/crud/shell/angular/src/lib/components/filter/flag/flag.component.ts","../../../../../../packages/crud/shell/angular/src/lib/components/filter/int/int.component.ts","../../../../../../packages/crud/shell/angular/src/lib/components/filter/radio/radio.component.ts","../../../../../../packages/crud/shell/angular/src/lib/components/filter/text/text.component.ts","../../../../../../packages/crud/shell/angular/src/lib/components/filter/filter.component.ts","../../../../../../packages/crud/shell/angular/src/lib/components/filter/filter.component.html","../../../../../../packages/crud/shell/angular/src/lib/components/filters/base/base.component.ts","../../../../../../packages/crud/shell/angular/src/lib/components/filters/filters.component.ts","../../../../../../packages/crud/shell/angular/src/lib/components/filters-config/filters-config.component.ts","../../../../../../packages/crud/shell/angular/src/lib/components/multiselect/base/base.component.ts","../../../../../../packages/crud/shell/angular/src/lib/pipes/form-options/form-options.pipe.ts","../../../../../../packages/crud/shell/angular/src/lib/pipes/pipes.module.ts","../../../../../../packages/crud/shell/angular/src/lib/components/multiselect/multiselect.component.ts","../../../../../../packages/crud/shell/angular/src/lib/components/multiselect/multiselect.component.html","../../../../../../packages/crud/shell/angular/src/lib/services/list-group/list-group.service.ts","../../../../../../packages/crud/shell/angular/src/lib/components/group/base/base.component.ts","../../../../../../packages/crud/shell/angular/src/lib/components/group/group.component.ts","../../../../../../packages/crud/shell/angular/src/lib/factories/list-pagination/list-pagination.factory.ts","../../../../../../packages/crud/shell/angular/src/lib/providers/model-label/model-label.provider.ts","../../../../../../packages/crud/shell/angular/src/lib/components/components.module.ts","../../../../../../packages/crud/shell/angular/src/lib/pages/item/base/base.component.ts","../../../../../../packages/crud/shell/angular/src/lib/pages/item/standard/standard.component.ts","../../../../../../packages/crud/shell/angular/src/lib/services/page/page.service.ts","../../../../../../packages/crud/shell/angular/src/lib/pages/item/item.component.ts","../../../../../../packages/crud/shell/angular/src/lib/pages/list/base/base.component.ts","../../../../../../packages/crud/shell/angular/src/lib/pages/list/standard/standard.component.ts","../../../../../../packages/crud/shell/angular/src/lib/services/search/search.service.ts","../../../../../../packages/crud/shell/angular/src/lib/pages/list/list.component.ts","../../../../../../packages/crud/shell/angular/src/lib/crud-full.module.ts","../../../../../../packages/crud/shell/angular/src/lib/crud.module.ts"],"sourcesContent":["import { Action } from '@ngrx/store';\n\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport { ICrudCreateManyOptions, ICrudFilter } from '../models';\n\n/*\n * Create\n */\nexport const create = function <T extends IEntity<string>>(\n  entity: string,\n  item: T,\n): Action & { item: T } {\n  return {\n    type: `[${entity}] Create`,\n    item,\n  };\n};\n\nexport const createSuccess = function <T extends IEntity<string>>(\n  entity: string,\n  item: T,\n): Action & { item: T } {\n  return {\n    type: `[${entity}] Create Success`,\n    item,\n  };\n};\n\nexport const createFailure = function <T extends IEntity<string>>(\n  entity: string,\n  item: T,\n  error: any,\n): Action & { item: T; error: any } {\n  return {\n    type: `[${entity}] Create Failure`,\n    item,\n    error,\n  };\n};\n\n/*\n * Create many\n */\nexport const createMany = function <T extends IEntity<string>>(\n  entity: string,\n  data: { items: T[]; options: ICrudCreateManyOptions },\n): Action & { data: { items: T[]; options: ICrudCreateManyOptions } } {\n  return {\n    type: `[${entity}] Create Many`,\n    data,\n  };\n};\n\nexport const createManySuccess = function <T extends IEntity<string>>(\n  entity: string,\n  data: { items: T[]; options: ICrudCreateManyOptions },\n): Action & { data: { items: T[]; options: ICrudCreateManyOptions } } {\n  return {\n    type: `[${entity}] Create Many Success`,\n    data,\n  };\n};\n\nexport const createManyFailure = function <T extends IEntity<string>>(\n  entity: string,\n  data: { items: T[]; options: ICrudCreateManyOptions },\n  error: any,\n): Action & {\n  data: { items: T[]; options: ICrudCreateManyOptions };\n  error: any;\n} {\n  return {\n    type: `[${entity}] Create Many Failure`,\n    data,\n    error,\n  };\n};\n\n/*\n * Read\n */\nexport const read = function (\n  entity: string,\n  filter?: ICrudFilter,\n): Action & { filter?: ICrudFilter } {\n  return {\n    type: `[${entity}] Read`,\n    filter: filter,\n  };\n};\n\nexport const readSuccess = function <T extends IEntity<string>, F>(\n  entity: string,\n  filter: F,\n  result: { data: T[]; totalCount: number; links: any },\n): Action & {\n  result: { data: T[]; totalCount: number; links: any };\n  filter: F;\n} {\n  return {\n    type: `[${entity}] Read Success`,\n    result,\n    filter,\n  };\n};\n\nexport const readFailure = function <F>(\n  entity: string,\n  filter: F,\n  error: any,\n): Action & { filter: F; error: any } {\n  return {\n    type: `[${entity}] Read Failure`,\n    filter,\n    error,\n  };\n};\n\n/*\n * Clear\n */\nexport const clear = function (entity: string): Action {\n  return {\n    type: `[${entity}] Clear`,\n  };\n};\n\n/*\n * Export\n */\nexport const exportList = function (\n  entity: string,\n  filter: ICrudFilter | null = null,\n  format: any,\n): Action & { filter: ICrudFilter; format: any } {\n  return {\n    type: `[${entity}] Export`,\n    filter: filter as any,\n    format,\n  };\n};\n\nexport const exportListSuccess = function <T extends IEntity<string>, F>(\n  entity: string,\n  filter: F,\n): Action & { filter: F } {\n  return {\n    type: `[${entity}] Export Success`,\n    filter,\n  };\n};\n\nexport const exportListFailure = function <F>(\n  entity: string,\n  filter: F,\n  error: any,\n): Action & { filter: F; error: any } {\n  return {\n    type: `[${entity}] Export Failure`,\n    filter,\n    error,\n  };\n};\n\n/*\n * Select\n */\nexport const select = function (\n  entity: string,\n  id: string,\n): Action & { id: string } {\n  return {\n    type: `[${entity}] Select`,\n    id,\n  };\n};\n\nexport const selectSuccess = function <T extends IEntity<string>, F>(\n  entity: string,\n  id: string,\n  item: T,\n): Action & { id: string; item: T } {\n  return {\n    type: `[${entity}] Select Success`,\n    id,\n    item,\n  };\n};\n\nexport const selectFailure = function <F>(\n  entity: string,\n  id: string,\n  error: any,\n): Action & { id: string; error: any } {\n  return {\n    type: `[${entity}] Select Failure`,\n    id,\n    error,\n  };\n};\n\nexport const unselect = function (entity: string): Action {\n  return {\n    type: `[${entity}] Unselect`,\n  };\n};\n\n/*\n * MultiSelect\n */\nexport const multiSelect = function <T extends IEntity<string>>(\n  entity: string,\n  items: Array<T>,\n): Action & { items: Array<T> } {\n  return {\n    type: `[${entity}] MultiSelect`,\n    items,\n  };\n};\n\n/*\n * Update\n */\nexport const update = function <T extends IEntity<string>>(\n  entity: string,\n  item: T,\n): Action & { item: T } {\n  return {\n    type: `[${entity}] Update`,\n    item,\n  };\n};\n\nexport const updateSuccess = function <T extends IEntity<string>>(\n  entity: string,\n  item: T,\n): Action & { item: T } {\n  return {\n    type: `[${entity}] Update Success`,\n    item,\n  };\n};\n\nexport const updateFailure = function <T extends IEntity<string>>(\n  entity: string,\n  item: T,\n  error: any,\n): Action & { item: T; error: any } {\n  return {\n    type: `[${entity}] Update Failure`,\n    item,\n    error,\n  };\n};\n\n/*\n * Update partial\n */\nexport const updatePartial = function <T extends IEntity<string>>(\n  entity: string,\n  item: Partial<T> & { id: string },\n): Action & { item: Partial<T> & { id: string } } {\n  return {\n    type: `[${entity}] Update partial`,\n    item,\n  };\n};\n\nexport const updatePartialSuccess = function <T extends IEntity<string>>(\n  entity: string,\n  item: Partial<T> & { id: string },\n): Action & { item: Partial<T> & { id: string } } {\n  return {\n    type: `[${entity}] Update partial Success`,\n    item,\n  };\n};\n\nexport const updatePartialFailure = function <T extends IEntity<string>>(\n  entity: string,\n  item: Partial<T> & { id: string },\n  error: any,\n): Action & { item: Partial<T> & { id: string }; error: any } {\n  return {\n    type: `[${entity}] Update partial Failure`,\n    item,\n    error,\n  };\n};\n\n/*\n * Update partial many\n */\nexport const updatePartialMany = function <T extends IEntity<string>>(\n  entity: string,\n  items: Partial<T> & { id: string }[],\n): Action & { items: Partial<T> & { id: string }[] } {\n  return {\n    type: `[${entity}] Update partial many`,\n    items,\n  };\n};\n\nexport const updatePartialManySuccess = function <T extends IEntity<string>>(\n  entity: string,\n  items: Partial<T> & { id: string }[],\n): Action & { items: Partial<T> & { id: string }[] } {\n  return {\n    type: `[${entity}] Update partial many Success`,\n    items,\n  };\n};\n\nexport const updatePartialManyFailure = function <T extends IEntity<string>>(\n  entity: string,\n  items: Partial<T> & { id: string }[],\n  error: any,\n): Action & { items: Partial<T> & { id: string }[]; error: any } {\n  return {\n    type: `[${entity}] Update partial many Failure`,\n    items,\n    error,\n  };\n};\n\n/*\n * Delete\n */\nexport const deleteItem = function (\n  entity: string,\n  id: string,\n): Action & { id: string } {\n  return {\n    type: `[${entity}] Delete`,\n    id,\n  };\n};\n\nexport const deleteSuccess = function (\n  entity: string,\n  id: string,\n): Action & { id: string } {\n  return {\n    type: `[${entity}] Delete Success`,\n    id,\n  };\n};\n\nexport const deleteFailure = function <F>(\n  entity: string,\n  id: string,\n  error: any,\n): Action & { id: string; error: any } {\n  return {\n    type: `[${entity}] Delete Failure`,\n    id,\n    error,\n  };\n};\n","import { Injectable, Type } from '@angular/core';\n\nimport {\n  IIconButtonOptions,\n  ICellPipe,\n  InputBaseComponent,\n  ListMode,\n  PaginationMode,\n  SmartPageVariant,\n} from '@smartsoft001/angular';\n\nimport { ICrudFilterQueryItem, ICrudListGroup } from './models';\n\n@Injectable()\nexport class CrudConfig<T> {\n  apiUrl!: string;\n  entity!: string;\n  type?: any;\n  reducerFactory?: () => any;\n  baseQuery?: Array<ICrudFilterQueryItem>;\n}\n\n@Injectable()\nexport class CrudFullConfig<T> extends CrudConfig<T> {\n  title!: string;\n  details?:\n    | boolean\n    | {\n        cellPipe?: ICellPipe<T>;\n        components?: {\n          top?: any;\n          bottom?: any;\n        };\n      };\n  edit?:\n    | boolean\n    | {\n        cellPipe?: ICellPipe<T>;\n        components?: {\n          top?: any;\n          bottom?: any;\n        };\n      };\n  add?:\n    | boolean\n    | {\n        components?: {\n          top?: any;\n          bottom?: any;\n        };\n      };\n  remove?: boolean;\n  search?: boolean;\n  export?: boolean;\n  pagination?: {\n    limit: number;\n  };\n  sort?:\n    | boolean\n    | {\n        default?: string;\n        defaultDesc?: boolean;\n      };\n  list?: {\n    cellPipe?: ICellPipe<T>;\n    components?: {\n      top?: any;\n      multi?: any;\n    };\n    mode?: ListMode;\n    paginationMode?: PaginationMode;\n    resetQuery?: 'beforeInit';\n    groups?: Array<ICrudListGroup>;\n  };\n  buttons?: Array<IIconButtonOptions>;\n  inputComponents?: {\n    [key: string]: Type<InputBaseComponent<T>>;\n  };\n\n  // Declarative tier-2 styling surface (FRA-293 Faza 2).\n  // Deep threading into IListOptions/IPageOptions lands in Phase 3.\n  cssClass?: string;\n  variant?: SmartPageVariant;\n}\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nexport const getCrudState = (entity: string) =>\n  createFeatureSelector<any>(entity);\n\nexport const getCrudSelected = (entity: string) =>\n  createSelector(getCrudState(entity), (state) => state.selected);\n\nexport const getCrudMultiSelected = (entity: string) =>\n  createSelector(getCrudState(entity), (state) => state.multiSelected);\n\nexport const getCrudList = (entity: string) =>\n  createSelector(getCrudState(entity), (state) => state?.list);\n\nexport const getCrudTotalCount = (entity: string) =>\n  createSelector(getCrudState(entity), (state) => state?.totalCount);\n\nexport const getCrudLinks = (entity: string) =>\n  createSelector(getCrudState(entity), (state) => state?.links);\n\nexport const getCrudLoaded = (entity: string) =>\n  createSelector(getCrudState(entity), (state) => state?.loaded);\n\nexport const getCrudFilter = (entity: string) =>\n  createSelector(getCrudState(entity), (state) => state?.filter);\n\nexport const getCrudError = (entity: string) =>\n  createSelector(getCrudState(entity), (state) => state?.error);\n","import { Injectable } from '@angular/core';\n\n// NOTE: Restored 1:1 from the legacy library (FRA-293 / GAP-01).\n// This is an inert stub: both classes are empty injectables. The original\n// real-time implementation never existed as live code — the constructor below\n// (which would have extended ngx-socket-io's `Socket`) was always commented out.\n// `NotSocketService` is the null-object fallback used when `options.socket` is off.\n@Injectable()\nexport class SocketService<T> /* extends Socket */ {\n  // constructor(private crudConfig: CrudConfig<T>) {\n  //     super({\n  //         url: crudConfig.apiUrl,\n  //         options: {\n  //             transports: ['websocket'],\n  //             path: new URL(crudConfig.apiUrl).pathname + '/_socket/',\n  //         },\n  //     });\n  // }\n}\n\n@Injectable()\nexport class NotSocketService<T> {}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport { CrudConfig } from '../../crud.config';\nimport { ICrudCreateManyOptions, ICrudFilter } from '../../models';\nimport { SocketService } from '../socket/socket.service';\n\n@Injectable()\nexport class CrudService<T extends IEntity<string>> {\n  protected config = inject(CrudConfig<T>);\n  protected http = inject(HttpClient);\n  protected socket = inject(SocketService<T>, { optional: true });\n\n  // changes(criteria: { id?: string } = {}): Observable<ItemChangedData> {\n  //   this.socket.emit('changes', criteria);\n  //   return this.socket.fromEvent('changes');\n  // }\n\n  protected _formatMap = {\n    csv: 'text/csv',\n    xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n  };\n\n  create(item: T): Promise<string> {\n    return firstValueFrom(\n      this.http\n        .post<void>(this.config.apiUrl, item, { observe: 'response' })\n        .pipe(\n          map((response) => {\n            const location = (response.headers as any)['Location'];\n            if (!location) return null;\n            const array = location.split('/');\n            return array[array.length - 1];\n          }),\n        ),\n    );\n  }\n\n  createMany(items: Array<T>, options: ICrudCreateManyOptions): Promise<void> {\n    return firstValueFrom(\n      this.http.post<void>(\n        this.config.apiUrl + '/bulk?mode=' + options.mode,\n        items,\n      ),\n    );\n  }\n\n  getById(id: string): Promise<T> {\n    return firstValueFrom(this.http.get<T>(this.config.apiUrl + '/' + id));\n  }\n\n  getList<T>(\n    filter: ICrudFilter | null = null,\n  ): Promise<{ data: T[]; totalCount: number; links: any }> {\n    return firstValueFrom(\n      this.http.get<{ data: T[]; totalCount: number; links: any }>(\n        this.config.apiUrl + this.getQuery(filter as ICrudFilter),\n      ),\n    );\n  }\n\n  exportList(\n    filter: ICrudFilter | null = null,\n    format: 'csv' | 'xlsx',\n  ): Promise<void> {\n    if (!format) {\n      format = 'csv';\n    }\n\n    if (format === 'xlsx') {\n      return firstValueFrom(\n        this.http\n          .get(this.config.apiUrl + this.getQuery(filter as ICrudFilter), {\n            headers: {\n              'Content-Type': this._formatMap[format],\n            },\n            observe: 'response',\n            reportProgress: false,\n            responseType: 'blob',\n          })\n          .pipe(\n            map((res) => {\n              const downloadLink = document.createElement('a');\n              const blob = res.body;\n\n              downloadLink.href = URL.createObjectURL(blob as Blob);\n              downloadLink.download = 'data.' + format;\n\n              document.body.appendChild(downloadLink);\n              downloadLink.click();\n              document.body.removeChild(downloadLink);\n            }),\n          ),\n      );\n    }\n\n    return firstValueFrom(\n      this.http\n        .get<string>(\n          this.config.apiUrl + this.getQuery(filter as ICrudFilter),\n          {\n            headers: {\n              'Content-Type': this._formatMap[format],\n            },\n            responseType: 'text' as 'json',\n          },\n        )\n        .pipe(\n          map((res) => {\n            const downloadLink = document.createElement('a');\n            const blob = new Blob(['\\ufeff', res]);\n\n            downloadLink.href = URL.createObjectURL(blob);\n            downloadLink.download = 'data.' + format;\n\n            document.body.appendChild(downloadLink);\n            downloadLink.click();\n            document.body.removeChild(downloadLink);\n          }),\n        ),\n    );\n  }\n\n  update(item: T): Promise<void> {\n    return firstValueFrom(\n      this.http.put<void>(this.config.apiUrl + '/' + item.id, item),\n    );\n  }\n\n  updatePartial(item: Partial<T> & { id: string }): Promise<void> {\n    return firstValueFrom(\n      this.http.patch<void>(this.config.apiUrl + '/' + item.id, item),\n    );\n  }\n\n  updatePartialMany(items: (Partial<T> & { id: string })[]): Promise<any> {\n    const updatePromises = items.map((item) => {\n      return this.updatePartial(item);\n    });\n    return Promise.all(updatePromises);\n  }\n\n  delete(id: string): Promise<void> {\n    return firstValueFrom(\n      this.http.delete<void>(this.config.apiUrl + '/' + id),\n    );\n  }\n\n  protected getQuery(filter: ICrudFilter): string {\n    let query = '';\n\n    if (filter && filter.searchText) {\n      query += '&$search=' + filter.searchText;\n    }\n\n    if (filter && filter.limit) {\n      query += `&limit=${filter.limit}&offset=${\n        filter.offset ? filter.offset : 0\n      }`;\n    }\n\n    if (filter && filter.sortBy) {\n      query += `&sort=${(filter.sortDesc ? '-' : '') + filter.sortBy}`;\n    }\n\n    if (filter && filter.query) {\n      filter.query.forEach((q) => {\n        if (\n          q.value &&\n          typeof q.value === 'string' &&\n          q.value.match(/^-?\\d+$/) &&\n          q.value[0] !== \"'\" &&\n          q.value[0] !== '\"'\n        ) {\n          query += '&' + q.key + q.type + `'${q.value}'`;\n        } else {\n          query += '&' + q.key + q.type + q.value;\n        }\n      });\n    }\n\n    return query ? '?' + query.replace('&', '') : '';\n  }\n}\n","import 'reflect-metadata';\n\nimport { Injectable } from '@angular/core';\nimport { Action, ActionsSubject, select, State, Store } from '@ngrx/store';\nimport { first } from 'rxjs/operators';\n\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport * as CrudActions from './crud.actions';\nimport { CrudConfig } from '../crud.config';\nimport { getCrudFilter } from './crud.selectors';\nimport { CrudService } from '../services/crud/crud.service';\n\n/**\n * Entities whose effects are already subscribed, per `ActionsSubject`.\n * Keyed by the app's own `ActionsSubject` so each app instance (e.g. every SSR\n * render in one Node process) gets its own effects, while repeated module\n * instances within one app still subscribe only once per entity.\n */\nconst initializedEntities = new WeakMap<ActionsSubject, Set<string>>();\n\n@Injectable()\nexport class CrudEffects<T extends IEntity<string>> {\n  constructor(\n    private actions$: ActionsSubject,\n    private service: CrudService<T>,\n    private config: CrudConfig<T>,\n    private store: Store<any>,\n    private state: State<any>,\n  ) {}\n\n  init(): void {\n    let entities = initializedEntities.get(this.actions$);\n    if (!entities) {\n      entities = new Set<string>();\n      initializedEntities.set(this.actions$, entities);\n    }\n\n    if (entities.has(this.config.entity)) return;\n\n    entities.add(this.config.entity);\n\n    this.actions$.subscribe((action: Action & any) => {\n      switch (action.type) {\n        case `[${this.config.entity}] Create`:\n          this.service\n            .create(action.item)\n            .then(() =>\n              this.store.dispatch(\n                CrudActions.createSuccess(this.config.entity, action.item),\n              ),\n            )\n            .catch((error) => {\n              this.store.dispatch(\n                CrudActions.createFailure(\n                  this.config.entity,\n                  action.item,\n                  error,\n                ),\n              );\n            });\n          break;\n\n        case `[${this.config.entity}] Create Success`: {\n          const createState = this.state.getValue()[this.config.entity];\n          this.store.dispatch(\n            CrudActions.read(\n              this.config.entity,\n              createState?.filter ? { ...createState.filter, offset: 0 } : null,\n            ),\n          );\n          break;\n        }\n\n        case `[${this.config.entity}] Create Many`:\n          this.service\n            .createMany(action.data.items, action.data.options)\n            .then(() =>\n              this.store.dispatch(\n                CrudActions.createManySuccess(this.config.entity, {\n                  items: action.data.items,\n                  options: action.data.options,\n                }),\n              ),\n            )\n            .catch((error) => {\n              this.store.dispatch(\n                CrudActions.createManyFailure(\n                  this.config.entity,\n                  {\n                    items: action.data.items,\n                    options: action.data.options,\n                  },\n                  error,\n                ),\n              );\n            });\n          break;\n\n        case `[${this.config.entity}] Create Many Success`: {\n          const createManyState = this.state.getValue()[this.config.entity];\n          this.store.dispatch(\n            CrudActions.read(\n              this.config.entity,\n              createManyState?.filter\n                ? { ...createManyState.filter, offset: 0 }\n                : null,\n            ),\n          );\n          break;\n        }\n\n        case `[${this.config.entity}] Read`:\n          this.service\n            .getList(action?.filter)\n            .then((result) =>\n              this.store.dispatch(\n                CrudActions.readSuccess(\n                  this.config.entity,\n                  action?.filter,\n                  result as { data: T[]; totalCount: number; links: any },\n                ),\n              ),\n            )\n            .catch((error) => {\n              this.store.dispatch(\n                CrudActions.readFailure(\n                  this.config.entity,\n                  action?.filter,\n                  error,\n                ),\n              );\n            });\n          break;\n\n        case `[${this.config.entity}] Export`:\n          this.service\n            .exportList(action?.filter, action.format)\n            .then(() =>\n              this.store.dispatch(\n                CrudActions.exportListSuccess(\n                  this.config.entity,\n                  action?.filter,\n                ),\n              ),\n            )\n            .catch((error) => {\n              this.store.dispatch(\n                CrudActions.exportListFailure(\n                  this.config.entity,\n                  action?.filter,\n                  error,\n                ),\n              );\n            });\n          break;\n\n        case `[${this.config.entity}] Select`:\n          this.service\n            .getById(action.id)\n            .then((result) =>\n              this.store.dispatch(\n                CrudActions.selectSuccess(\n                  this.config.entity,\n                  action.id,\n                  result,\n                ),\n              ),\n            )\n            .catch((error) => {\n              this.store.dispatch(\n                CrudActions.selectFailure(this.config.entity, action.id, error),\n              );\n            });\n          break;\n\n        case `[${this.config.entity}] Update`:\n          this.service\n            .updatePartial(action.item)\n            .then(() =>\n              this.store.dispatch(\n                CrudActions.updateSuccess(this.config.entity, action.item),\n              ),\n            )\n            .catch((error) => {\n              this.store.dispatch(\n                CrudActions.updateFailure(\n                  this.config.entity,\n                  action.item,\n                  error,\n                ),\n              );\n              this.store.dispatch(CrudActions.read(this.config.entity));\n            });\n          break;\n\n        case `[${this.config.entity}] Update Success`:\n          this.store\n            .pipe(select(getCrudFilter(this.config.entity)), first())\n            .subscribe((filter) => {\n              this.store.dispatch(\n                CrudActions.read(this.config.entity, {\n                  ...filter,\n                  offset: 0,\n                }),\n              );\n\n              this.store.dispatch(\n                CrudActions.select(this.config.entity, action.item.id),\n              );\n            });\n          break;\n\n        case `[${this.config.entity}] Update partial`:\n          this.service\n            .updatePartial(action.item)\n            .then(() =>\n              this.store.dispatch(\n                CrudActions.updatePartialSuccess(\n                  this.config.entity,\n                  action.item,\n                ),\n              ),\n            )\n            .catch((error) => {\n              this.store.dispatch(\n                CrudActions.updatePartialFailure(\n                  this.config.entity,\n                  action.item,\n                  error,\n                ),\n              );\n              this.store.dispatch(CrudActions.read(this.config.entity));\n            });\n          break;\n\n        case `[${this.config.entity}] Update partial Success`:\n          this.store\n            .pipe(select(getCrudFilter(this.config.entity)), first())\n            .subscribe((filter) => {\n              this.store.dispatch(\n                CrudActions.read(this.config.entity, {\n                  ...filter,\n                  offset: 0,\n                }),\n              );\n\n              this.store.dispatch(\n                CrudActions.select(this.config.entity, action.item.id),\n              );\n            });\n          break;\n\n        case `[${this.config.entity}] Update partial many`:\n          this.service\n            .updatePartialMany(action.items)\n            .then(() =>\n              this.store.dispatch(\n                CrudActions.updatePartialManySuccess(\n                  this.config.entity,\n                  action.items,\n                ),\n              ),\n            )\n            .catch((error) => {\n              this.store.dispatch(\n                CrudActions.updatePartialManyFailure(\n                  this.config.entity,\n                  action.items,\n                  error,\n                ),\n              );\n              this.store.dispatch(CrudActions.read(this.config.entity));\n            });\n          break;\n\n        case `[${this.config.entity}] Update partial many Success`:\n          this.store\n            .pipe(select(getCrudFilter(this.config.entity)), first())\n            .subscribe((filter) => {\n              this.store.dispatch(\n                CrudActions.read(this.config.entity, {\n                  ...filter,\n                  offset: 0,\n                }),\n              );\n            });\n          break;\n\n        case `[${this.config.entity}] Delete`:\n          this.service\n            .delete(action.id)\n            .then(() =>\n              this.store.dispatch(\n                CrudActions.deleteSuccess(this.config.entity, action.id),\n              ),\n            )\n            .catch((error) => {\n              this.store.dispatch(\n                CrudActions.deleteFailure(this.config.entity, action.id, error),\n              );\n            });\n          break;\n\n        case `[${this.config.entity}] Delete Success`:\n          this.store\n            .pipe(select(getCrudFilter(this.config.entity)), first())\n            .subscribe((filter) => {\n              this.store.dispatch(\n                CrudActions.read(this.config.entity, {\n                  ...filter,\n                  offset: 0,\n                }),\n              );\n            });\n          break;\n\n        default:\n          console.warn(\n            `No effect for action type ${action.type} in entity ${this.config.entity}`,\n          );\n          break;\n      }\n    });\n  }\n}\n","import { Injectable, Signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { select, Store } from '@ngrx/store';\nimport { map } from 'rxjs/operators';\n\nimport { NgrxStoreService } from '@smartsoft001/angular';\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport { CrudConfig } from '../crud.config';\nimport * as CrudActions from './crud.actions';\nimport * as CrudSelectors from './crud.selectors';\nimport {\n  ICrudCreateManyOptions,\n  ICrudFilter,\n  ICrudFilterQueryItem,\n} from '../models';\n\n@Injectable()\nexport class CrudFacade<T extends IEntity<string>> {\n  readonly loaded: Signal<boolean | undefined>;\n  readonly loading: Signal<boolean>;\n  readonly selected: Signal<T | undefined>;\n  readonly multiSelected: Signal<T[] | undefined>;\n  readonly list: Signal<T[] | undefined>;\n  readonly filter: Signal<ICrudFilter | undefined>;\n  readonly totalCount: Signal<number | undefined>;\n  readonly links: Signal<any>;\n  readonly error: Signal<any>;\n\n  constructor(\n    private readonly store: Store<any>,\n    private config: CrudConfig<T>,\n  ) {\n    // Prefer the app's own Store (SSR renders many apps in one process);\n    // fall back to the static store only when none was injected.\n    if (!this.store && NgrxStoreService.store) {\n      this.store = NgrxStoreService.store;\n    }\n\n    // Initialize all signals in the constructor (injection context)\n    this.loaded = toSignal<boolean>(\n      this.store.pipe(select(CrudSelectors.getCrudLoaded(this.config.entity))),\n    );\n\n    this.loading = toSignal<boolean>(\n      this.store.pipe(\n        select(CrudSelectors.getCrudLoaded(this.config.entity)),\n        map((l) => !l),\n      ),\n    ) as Signal<boolean>;\n\n    this.selected = toSignal<T>(\n      this.store.pipe(\n        select(CrudSelectors.getCrudSelected(this.config.entity)),\n      ),\n    );\n\n    this.multiSelected = toSignal<T[]>(\n      this.store.pipe(\n        select(CrudSelectors.getCrudMultiSelected(this.config.entity)),\n      ),\n    );\n\n    this.list = toSignal<T[]>(\n      this.store.pipe(select(CrudSelectors.getCrudList(this.config.entity))),\n    );\n\n    this.filter = toSignal<ICrudFilter>(\n      this.store.pipe(select(CrudSelectors.getCrudFilter(this.config.entity))),\n    );\n\n    this.totalCount = toSignal<number>(\n      this.store.pipe(\n        select(CrudSelectors.getCrudTotalCount(this.config.entity)),\n      ),\n    );\n\n    this.links = toSignal<any>(\n      this.store.pipe(select(CrudSelectors.getCrudLinks(this.config.entity))),\n    );\n\n    this.error = toSignal<any>(\n      this.store.pipe(select(CrudSelectors.getCrudError(this.config.entity))),\n    );\n  }\n\n  create(item: T): void {\n    this.store.dispatch(CrudActions.create(this.config.entity, item));\n  }\n\n  createMany(items: Array<T>, options: ICrudCreateManyOptions): void {\n    this.store.dispatch(\n      CrudActions.createMany(this.config.entity, { items, options }),\n    );\n  }\n\n  read(filter: ICrudFilter = {}): void {\n    let baseQuery: ICrudFilterQueryItem[] = [];\n    if (this.config.baseQuery) {\n      baseQuery = this.config.baseQuery;\n    }\n\n    const fullFilter = {\n      ...(filter ? filter : {}),\n      query: filter && filter.query ? filter.query : baseQuery,\n    };\n\n    this.store.dispatch(CrudActions.read(this.config.entity, fullFilter));\n  }\n\n  clear(): void {\n    this.store.dispatch(CrudActions.clear(this.config.entity));\n  }\n\n  select(id: string): void {\n    this.store.dispatch(CrudActions.select(this.config.entity, id));\n  }\n\n  unselect(): void {\n    this.store.dispatch(CrudActions.unselect(this.config.entity));\n  }\n\n  multiSelect(items: Array<T>): void {\n    this.store.dispatch(CrudActions.multiSelect(this.config.entity, items));\n  }\n\n  update(item: T): void {\n    this.getStore().dispatch(CrudActions.update(this.config.entity, item));\n  }\n\n  export(filter: ICrudFilter = {}, format?: string): void {\n    this.getStore().dispatch(\n      CrudActions.exportList(this.config.entity, filter, format),\n    );\n  }\n\n  updatePartial(item: Partial<T> & { id: string }): void {\n    this.getStore().dispatch(\n      CrudActions.updatePartial(this.config.entity, item),\n    );\n  }\n\n  updatePartialMany(items: (Partial<T> & { id: string })[]) {\n    this.getStore().dispatch(\n      CrudActions.updatePartialMany(this.config.entity, items),\n    );\n  }\n\n  delete(id: string): void {\n    this.getStore().dispatch(CrudActions.deleteItem(this.config.entity, id));\n  }\n\n  private getStore(): Store {\n    return this.store ?? (NgrxStoreService.store as Store);\n  }\n}\n","import { Action } from '@ngrx/store';\n\nimport { PaginationMode } from '@smartsoft001/angular';\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport { ICrudFilter } from '../models';\n\nexport interface State<T extends IEntity<string>> {\n  selected?: T;\n  multiSelected?: Array<T>;\n  list?: T[];\n  totalCount?: number;\n  filter?: ICrudFilter;\n  links?: any;\n  loaded: boolean; // has the Auth list been loaded\n  error?: string | null; // last none error (if any)\n}\n\nexport const initialState: State<any> = {\n  loaded: false,\n};\n\nconst crudReducer = (\n  state: State<any>,\n  action: Action & any,\n  entity: string,\n) => {\n  if (!state) {\n    state = { ...initialState };\n  }\n\n  switch (action.type) {\n    case `[${entity}] Create`:\n      return {\n        ...state,\n        loaded: false,\n        error: null,\n      };\n\n    case `[${entity}] Create Success`:\n      return {\n        ...state,\n        loaded: true,\n        error: null,\n      };\n\n    case `[${entity}] Create Failure`:\n      return {\n        ...state,\n        loaded: true,\n        error: action.error,\n      };\n\n    case `[${entity}] Create Many`:\n      return {\n        ...state,\n        loaded: false,\n        error: null,\n      };\n\n    case `[${entity}] Create Many Success`:\n      return {\n        ...state,\n        loaded: true,\n        error: null,\n      };\n\n    case `[${entity}] Create Many Failure`:\n      return {\n        ...state,\n        loaded: true,\n        error: action.error,\n      };\n\n    case `[${entity}] Export`:\n      return {\n        ...state,\n        loaded: false,\n      };\n\n    case `[${entity}] Export Success`:\n      return {\n        ...state,\n        loaded: true,\n      };\n\n    case `[${entity}] Export Failure`:\n      return {\n        ...state,\n        loaded: true,\n      };\n\n    case `[${entity}] Read`:\n      return {\n        ...state,\n        loaded: false,\n        filter: action?.filter,\n        error: null,\n        totalCount: null,\n        links: null,\n      };\n\n    case `[${entity}] Read Success`: {\n      let list: any[] = [];\n\n      if (\n        action?.filter &&\n        action?.filter.offset &&\n        state.list &&\n        action?.filter.paginationMode !== PaginationMode.singlePage\n      ) {\n        state.list.forEach((i) => {\n          list.push(i);\n        });\n\n        list = [...list, ...action.result.data];\n      } else {\n        list = action.result.data;\n      }\n\n      return {\n        ...state,\n        loaded: true,\n        list,\n        totalCount: action?.result?.totalCount,\n        links: action.result.links,\n        error: null,\n      };\n    }\n\n    case `[${entity}] Clear`:\n      return { ...initialState };\n\n    case `[${entity}] Read Failure`:\n      return {\n        ...state,\n        loaded: true,\n        error: action.error,\n      };\n\n    case `[${entity}] Select`:\n      return {\n        ...state,\n        loaded: false,\n        selected: null,\n        error: null,\n      };\n\n    case `[${entity}] Select Success`:\n      return {\n        ...state,\n        loaded: true,\n        selected: action.item,\n        error: null,\n      };\n\n    case `[${entity}] Select Failure`:\n      return {\n        ...state,\n        loaded: true,\n        error: action.error,\n      };\n\n    case `[${entity}] MultiSelect`:\n      return {\n        ...state,\n        multiSelected: [...action.items],\n      };\n\n    case `[${entity}] Unselect`:\n      return {\n        ...state,\n        loaded: true,\n        selected: null,\n        error: null,\n      };\n\n    case `[${entity}] Update`:\n      return {\n        ...state,\n        loaded: false,\n        error: null,\n      };\n\n    case `[${entity}] Update Success`:\n      return {\n        ...state,\n        loaded: true,\n        error: null,\n      };\n\n    case `[${entity}] Update Failure`:\n      return {\n        ...state,\n        loaded: true,\n        error: action.error,\n      };\n\n    case `[${entity}] Update partial`:\n      return {\n        ...state,\n        loaded: false,\n        error: null,\n      };\n\n    case `[${entity}] Update partial Success`:\n      return {\n        ...state,\n        loaded: true,\n        error: null,\n      };\n\n    case `[${entity}] Update partial Failure`:\n      return {\n        ...state,\n        loaded: true,\n        error: action.error,\n      };\n\n    case `[${entity}] Update partial many`:\n      return {\n        ...state,\n        loaded: false,\n        error: null,\n      };\n\n    case `[${entity}] Update partial many Success`:\n      return {\n        ...state,\n        multiSelected: [],\n        loaded: true,\n        error: null,\n      };\n\n    case `[${entity}] Update partial many Failure`:\n      return {\n        ...state,\n        loaded: true,\n        error: action.error,\n      };\n\n    case `[${entity}] Delete`:\n      return {\n        ...state,\n        loaded: false,\n        error: null,\n      };\n\n    case `[${entity}] Delete Success`:\n      return {\n        ...state,\n        loaded: true,\n        error: null,\n      };\n\n    case `[${entity}] Delete Failure`:\n      return {\n        ...state,\n        loaded: true,\n        error: action.error,\n      };\n\n    default:\n      return state;\n  }\n};\n\nexport function getReducer(entity: string) {\n  return (state: any, action: Action) => {\n    return crudReducer(state, action, entity);\n  };\n}\n","import { Directive, ElementRef, inject, Injector, OnInit } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { filter, take } from 'rxjs/operators';\n\nimport {\n  BaseComponent,\n  IButtonOptions,\n  PopoverService,\n  StyleService,\n} from '@smartsoft001/angular';\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport { CrudFacade } from '../../../+state';\n\n@Directive()\nexport class ExportBaseComponent<T extends IEntity<string>>\n  extends BaseComponent\n  implements OnInit\n{\n  private facade = inject(CrudFacade<T>);\n  private popoverService = inject(PopoverService);\n  private styleService = inject(StyleService);\n  private elementRef = inject(ElementRef);\n  private injector = inject(Injector);\n\n  buttonExportCsvOptions: IButtonOptions = this.initButtonExportOptions('csv');\n  buttonExportXlsxOptions: IButtonOptions =\n    this.initButtonExportOptions('xlsx');\n\n  ngOnInit(): void {\n    this.styleService.init(this.elementRef);\n  }\n\n  private initButtonExportOptions(format: string): IButtonOptions {\n    return {\n      click: () => {\n        this.facade.export(\n          {\n            ...this.facade.filter(),\n            offset: undefined,\n            limit: undefined,\n          },\n          format,\n        );\n\n        toObservable(this.facade.loaded, { injector: this.injector })\n          .pipe(\n            filter((l) => !!l),\n            take(1),\n          )\n          .subscribe(() => this.popoverService.close().then());\n      },\n      loading: this.facade.loading,\n    };\n  }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\nimport { ButtonComponent } from '@smartsoft001/angular';\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport { ExportBaseComponent } from './base/base.component';\n\n@Component({\n  selector: 'smart-crud-export',\n  template: `\n    <div class=\"smart:p-5\">\n      <p class=\"smart:my-2.5 smart:mx-0\">\n        <smart-button\n          [options]=\"buttonExportCsvOptions\"\n          class=\"smart:w-full smart:block\"\n          >CSV</smart-button\n        >\n      </p>\n      <p>\n        <smart-button\n          [options]=\"buttonExportXlsxOptions\"\n          class=\"smart:w-full smart:block\"\n          >XLSX</smart-button\n        >\n      </p>\n    </div>\n  `,\n  imports: [ButtonComponent],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ExportComponent<\n  T extends IEntity<string>,\n> extends ExportBaseComponent<T> {}\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\n\n/**\n * @deprecated - please, use IModelPossibilitiesProvider from @smartsoft001/angular\n */\nexport abstract class ICrudModelPossibilitiesProvider {\n  abstract get<T>(type: any): {\n    [key: string]: Observable<{ id: any; text: string }[]>;\n  };\n}\n\n/**\n * @deprecated - please, use MODEL_POSSIBILITIES_PROVIDER from @smartsoft001/angular\n */\nexport const CRUD_MODEL_POSSIBILITIES_PROVIDER =\n  new InjectionToken<ICrudModelPossibilitiesProvider>(\n    'CRUD_MODEL_POSSIBILITIES_PROVIDER',\n  );\n","import {\n  computed,\n  DestroyRef,\n  Directive,\n  inject,\n  Injector,\n  input,\n  InputSignal,\n  OnInit,\n  signal,\n  Signal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { UntypedFormControl } from '@angular/forms';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Debounce } from 'lodash-decorators';\n\nimport { InputOptions } from '@smartsoft001/angular';\nimport { IEntity } from '@smartsoft001/domain-core';\nimport { FieldType, IModelFilter } from '@smartsoft001/models';\n\nimport { CrudFacade } from '../../../+state/crud.facade';\nimport { CrudConfig } from '../../../crud.config';\nimport { ICrudFilter } from '../../../models';\nimport { CRUD_MODEL_POSSIBILITIES_PROVIDER } from '../../../providers/model-possibilities/model-possibilities.provider';\n\n@Directive()\nexport class BaseComponent<T extends IEntity<string>> implements OnInit {\n  protected facade = inject(CrudFacade<T>);\n  protected translateService = inject(TranslateService);\n  protected config = inject(CrudConfig<T>);\n  protected modelPossibilitiesProvider = inject(\n    CRUD_MODEL_POSSIBILITIES_PROVIDER,\n    { optional: true },\n  );\n  protected injector = inject(Injector);\n  protected destroyRef = inject(DestroyRef);\n\n  private _model: T | undefined;\n\n  /**\n   * Local, mutation-free working copy of the last filter this component pushed\n   * to `facade.read(...)`. The store-bound `filter()` input is frozen under\n   * NgRx `strictStateImmutability`, so refresh/clear operate on a clone; the\n   * read getters (`value`, `minValue`, `maxValue`, `hasValue`, …) prefer this\n   * pending copy until the real store update flows back through the input.\n   */\n  private _pendingFilter = signal<ICrudFilter | undefined>(undefined);\n\n  /** Snapshot of `filter()` that `_pendingFilter` was derived from. */\n  private _pendingFilterSource: ICrudFilter | undefined;\n\n  possibilities!: Signal<{ id: any; text: string }[]>;\n\n  readonly item: InputSignal<IModelFilter | undefined> = input<IModelFilter>();\n  readonly filter: InputSignal<ICrudFilter | undefined> = input<ICrudFilter>();\n\n  /**\n   * The filter the component should read from: the pending working copy when it\n   * is still in sync with the current input, otherwise the raw input. Once the\n   * store update arrives (a new `filter()` reference), the pending copy is\n   * considered stale and the fresh input wins.\n   */\n  protected readonly effectiveFilter = computed<ICrudFilter | undefined>(() => {\n    const source = this.filter();\n    const pending = this._pendingFilter();\n    if (pending && source === this._pendingFilterSource) return pending;\n    return source;\n  });\n\n  /**\n   * OnPush-safe replacement for `@if (value)` in templates (partial GAP-19).\n   * True when filter().query has a matching entry (key + type) with a\n   * non-empty value.\n   */\n  readonly hasValue = computed<boolean>(() => {\n    const filter = this.effectiveFilter();\n    const item = this.item();\n    if (!filter || !item || !filter.query) return false;\n\n    const query = filter.query.find(\n      (q) => q.key === item.key && q.type === item.type,\n    );\n\n    if (!query) return false;\n\n    const val = query.value;\n    return val !== null && val !== undefined && val !== '';\n  });\n\n  /**\n   * OnPush-safe replacement for `@if (minValue)` in templates (partial\n   * GAP-19). True when filter().query has a matching `>=` entry (range \"from\")\n   * with a non-empty value.\n   */\n  readonly hasMinValue = computed<boolean>(() => this.hasQueryValue('>='));\n\n  /**\n   * OnPush-safe replacement for `@if (maxValue)` in templates (partial\n   * GAP-19). True when filter().query has a matching `<=` entry (range \"to\")\n   * with a non-empty value.\n   */\n  readonly hasMaxValue = computed<boolean>(() => this.hasQueryValue('<='));\n\n  /** Lazily-built model instance used to derive field options/labels. */\n  protected get model(): T {\n    return (this._model ??= new this.config.type());\n  }\n\n  get value(): any {\n    const filter = this.effectiveFilter();\n    const item = this.item();\n    if (!filter || !item || !filter.query) return null;\n\n    if (this.isArrayType()) {\n      return filter.query\n        .filter((q) => q.key === item.key && q.type === item.type)\n        .map((q) => q.value);\n    }\n\n    const query = filter.query.find(\n      (q) => q.key === item.key && q.type === item.type,\n    );\n    return query?.value;\n  }\n\n  set value(val: any) {\n    this.refresh(val);\n  }\n\n  get minValue(): any {\n    const filter = this.effectiveFilter();\n    const item = this.item();\n    if (!filter || !item || !filter.query) return null;\n\n    if (this.isArrayType()) {\n      return filter.query\n        .filter((q) => q.key === item.key && q.type === '>=')\n        .map((q) => q.value);\n    }\n\n    const query = filter.query.find(\n      (q) => q.key === item.key && q.type === '>=',\n    );\n    return query?.value;\n  }\n\n  set minValue(val: any) {\n    this.refresh(val, '>=');\n  }\n\n  get maxValue(): any {\n    const filter = this.effectiveFilter();\n    const item = this.item();\n    if (!filter || !item || !filter.query) return null;\n\n    if (this.isArrayType()) {\n      return filter.query\n        .filter((q) => q.key === item.key && q.type === '<=')\n        .map((q) => q.value);\n    }\n\n    const query = filter.query.find(\n      (q) => q.key === item.key && q.type === '<=',\n    );\n    return query?.value;\n  }\n\n  set maxValue(val: any) {\n    this.refresh(val, '<=');\n  }\n\n  get lang(): string {\n    return this.translateService.currentLang;\n  }\n\n  /**\n   * Returns a filter object safe to mutate. The store-bound `filter()` input is\n   * frozen under NgRx `strictStateImmutability`, so when (any part of) the\n   * source is frozen we hand back a deep-enough clone — object + query array +\n   * query entries — leaving the store untouched. When the source is a plain,\n   * extensible object (no immutability checks active) we keep operating on it in\n   * place so consumers that hold the same reference still observe the change.\n   */\n  private cloneFilter(): ICrudFilter | undefined {\n    const source = this.effectiveFilter();\n    if (!source) return undefined;\n\n    if (!this.isMutationSafe(source)) {\n      return {\n        ...source,\n        query: source.query ? source.query.map((q) => ({ ...q })) : [],\n      };\n    }\n\n    return source;\n  }\n\n  /**\n   * True when `filter` (and its query array + entries) can be mutated directly,\n   * i.e. nothing is frozen.\n   */\n  private isMutationSafe(filter: ICrudFilter): boolean {\n    if (Object.isFrozen(filter)) return false;\n    const query = filter.query;\n    if (!query) return true;\n    if (Object.isFrozen(query)) return false;\n    return query.every((q) => !Object.isFrozen(q));\n  }\n\n  /**\n   * Records the mutated clone as the pending working copy (so read getters\n   * reflect it immediately) and dispatches it through the facade.\n   */\n  private commitFilter(filter: ICrudFilter): void {\n    this._pendingFilterSource = this.filter();\n    this._pendingFilter.set(filter);\n    this.facade.read(filter);\n  }\n\n  @Debounce(500)\n  refresh(val: any, type: string | null = null): void {\n    const filter = this.cloneFilter();\n    const item = this.item();\n    if (!filter || !item) return;\n\n    if (!type) type = item.type;\n    if (!filter.query) filter.query = [];\n\n    filter.offset = 0;\n\n    if (this.isArrayType()) {\n      this.refreshForArray(filter, val as [], type);\n      return;\n    }\n\n    let query = filter.query!.find(\n      (q) => q.key === item.key && q.type === type,\n    );\n\n    if (val === null || val === undefined || val === '') {\n      if (query) {\n        const index = filter.query!.indexOf(query);\n        if (index > -1) {\n          filter.query!.splice(index, 1);\n        }\n      }\n\n      this.commitFilter(filter);\n      return;\n    }\n\n    if (!query) {\n      query = {\n        key: item.key,\n        type: type as '=' | '!=' | '>=' | '<=' | '<' | '>',\n        value: null,\n      };\n\n      filter.query!.push(query);\n    }\n\n    query.value = val;\n    query.label = item.label;\n\n    this.commitFilter(filter);\n  }\n\n  /**\n   * Builds the `InputOptions` consumed by shared `smart-input-*` components for\n   * a single reactive control. When `withPossibilities` is true (radio/select\n   * style filters) the base `possibilities` signal is mapped into the\n   * `{ id, text, checked }` shape the shared inputs expect; otherwise it is\n   * omitted (text/flag filters do not need possibilities).\n   */\n  protected buildInputOptions(\n    control: UntypedFormControl,\n    withPossibilities = false,\n  ): InputOptions<any> {\n    const options: InputOptions<any> = {\n      treeLevel: 0,\n      control,\n      model: this.model,\n      fieldKey: this.item()?.key ?? '',\n    };\n\n    if (withPossibilities) {\n      const source = this.possibilities ? this.possibilities() : [];\n      options.possibilities = signal(\n        source.map(({ id, text }) => ({ id, text, checked: false })),\n      );\n    }\n\n    return options;\n  }\n\n  /**\n   * Creates a reactive control bridged to the legacy filter state for a given\n   * query slot: seeded from the current query value for that slot (`null` ->\n   * `value` / `item.type`, `'>='` -> `minValue`, `'<='` -> `maxValue`), and\n   * wired so every change re-runs the (debounced) `refresh` for that slot.\n   */\n  protected bindControl(type: string | null = null): UntypedFormControl {\n    const seed =\n      type === '>='\n        ? this.minValue\n        : type === '<='\n          ? this.maxValue\n          : this.value;\n\n    const control = new UntypedFormControl(seed);\n\n    control.valueChanges\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((v) => this.refresh(v, type));\n\n    // TODO(GAP-19): re-sync control when filter() changes externally\n    return control;\n  }\n\n  /**\n   * Creates a reactive control bridged to the default (`value` / `item.type`)\n   * query slot.\n   */\n  protected bindValueControl(): UntypedFormControl {\n    return this.bindControl(null);\n  }\n\n  clear(): void {\n    const filter = this.cloneFilter();\n    const item = this.item();\n    if (!filter || !item || !filter.query) return;\n\n    filter.query = filter.query?.filter((q) => q.key !== item.key);\n    filter.offset = 0;\n    this.commitFilter(filter);\n  }\n\n  ngOnInit(): void {\n    this.initPossibilities();\n  }\n\n  private initPossibilities(): void {\n    const item = this.item();\n    if (!item) return;\n\n    let possibilities = item.possibilities;\n\n    if (this.modelPossibilitiesProvider) {\n      const fromProvider = this.modelPossibilitiesProvider.get(\n        this.config.type,\n      );\n      if (fromProvider && fromProvider[item.key]) {\n        possibilities = toSignal(fromProvider[item.key], {\n          initialValue: [] as { id: any; text: string }[],\n          injector: this.injector,\n        });\n      }\n    }\n\n    if (possibilities) this.possibilities = possibilities;\n  }\n\n  private hasQueryValue(type: string): boolean {\n    const filter = this.effectiveFilter();\n    const item = this.item();\n    if (!filter || !item || !filter.query) return false;\n\n    const query = filter.query.find(\n      (q) => q.key === item.key && q.type === type,\n    );\n\n    if (!query) return false;\n\n    const val = query.value;\n    return val !== null && val !== undefined && val !== '';\n  }\n\n  private isArrayType(): boolean {\n    const item = this.item();\n    return item?.fieldType === FieldType.check;\n  }\n\n  private refreshForArray(filter: ICrudFilter, vals: [], type: string): void {\n    const item = this.item();\n    if (!filter || !item) return;\n    if (!filter.query) filter.query = [];\n\n    const queries =\n      filter.query?.filter((q) => q.key === item.key && q.type === type) || [];\n\n    queries.forEach((query) => {\n      const index = filter.query!.indexOf(query);\n      if (index > -1) {\n        filter.query!.splice(index, 1);\n      }\n    });\n\n    if (vals === null || vals === undefined || !vals.length) {\n      this.commitFilter(filter);\n      return;\n    }\n\n    vals.forEach((val) => {\n      const query = {\n        key: item.key,\n        type: type as '=' | '!=' | '>=' | '<=' | '<' | '>',\n        value: val,\n      };\n\n      filter.query!.push(query);\n    });\n\n    this.commitFilter(filter);\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  OnInit,\n  Signal,\n} from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\n\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport { BaseComponent } from '../base/base.component';\n\n// TODO(FRA-293 GAP-19): re-sync rendered checked state when filter() changes\n// externally (the `value` getter already reads the reactive filter() signal,\n// so the `list` computed stays OnPush-safe).\n@Component({\n  selector: 'smart-crud-filter-check',\n  host: { class: 'smart:block smart:w-full' },\n  template: `\n    <fieldset class=\"smart:w-full\">\n      <legend\n        class=\"smart:flex smart:items-center smart:justify-between smart:text-sm smart:font-medium smart:text-gray-900\"\n      >\n        <span>{{ item()?.label || '' | translate }}</span>\n        @if (hasCheckedValues()) {\n          <button\n            type=\"button\"\n            (click)=\"refresh([])\"\n            aria-label=\"clear\"\n            class=\"smart:rounded smart:px-2 smart:py-1 smart:text-red-600 smart:hover:bg-red-50\"\n          >\n            ×\n          </button>\n        }\n      </legend>\n      <div class=\"smart:mt-2 smart:space-y-2\">\n        @for (entry of list(); track entry.value.id) {\n          <label class=\"smart:flex smart:items-center smart:gap-x-2\">\n            <input\n              type=\"checkbox\"\n              [checked]=\"entry.isCheck\"\n              (change)=\"onCheckChange($any($event.target).checked, entry)\"\n              class=\"smart:h-4 smart:w-4 smart:rounded smart:border-gray-300 smart:text-indigo-600 smart:focus:ring-indigo-500\"\n            />\n            <span class=\"smart:text-sm smart:text-gray-900\">{{\n              entry.value.text | translate\n            }}</span>\n          </label>\n        }\n      </div>\n    </fieldset>\n  `,\n  imports: [TranslatePipe],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterCheckComponent<T extends IEntity<string>>\n  extends BaseComponent<T>\n  implements OnInit\n{\n  list!: Signal<{ value: any; isCheck: boolean }[]>;\n\n  readonly hasCheckedValues = computed<boolean>(() => {\n    const v = this.value;\n    return Array.isArray(v) && v.length > 0;\n  });\n\n  override ngOnInit(): void {\n    super.ngOnInit();\n\n    this.list = computed(() => {\n      const possibilities = this.possibilities ? this.possibilities() : [];\n      const v = this.value ?? [];\n      return possibilities.map((pos) => ({\n        value: pos,\n        isCheck: v.some((r: any) => r === pos.id),\n      }));\n    });\n  }\n\n  onCheckChange(checked: boolean, entry: { value: any; isCheck: boolean }) {\n    if (checked && !(this.value ?? []).some((r: any) => r === entry.value.id)) {\n      this.value = [...(this.value ?? []), entry.value.id];\n    }\n\n    if (!checked && (this.value ?? []).some((r: any) => r === entry.value.id)) {\n      this.value = this.value?.filter((r: any) => r !== entry.value.id);\n    }\n  }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport moment from 'moment';\n\nimport { DateEditComponent } from '@smartsoft001/angular';\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport { BaseComponent } from '../base/base.component';\n\n@Component({\n  selector: 'smart-crud-filter-date',\n  host: { class: 'smart:block smart:w-full' },\n  // TODO(FRA-293 GAP-19): re-sync picker when filter() changes externally\n  template: `\n    <label class=\"smart:mb-1 smart:block smart:text-sm smart:font-medium\">\n      {{ item()?.label || '' | translate }}\n    </label>\n    <div class=\"smart:flex smart:w-full smart:items-end smart:gap-2\">\n      <smart-date-edit\n        class=\"smart:flex-1\"\n        [ngModel]=\"customValue || ''\"\n        (ngModelChange)=\"customValue = $event\"\n      ></smart-date-edit>\n      @if (hasValue()) {\n        <button\n          type=\"button\"\n          (click)=\"refresh(null)\"\n          aria-label=\"clear\"\n          class=\"smart:shrink-0 smart:rounded smart:px-2 smart:py-2 smart:text-red-600 smart:hover:bg-red-50\"\n        >\n          ×\n        </button>\n      }\n    </div>\n  `,\n  imports: [DateEditComponent, FormsModule, TranslatePipe],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterDateComponent<\n  T extends IEntity<string>,\n> extends BaseComponent<T> {\n  get allowAdvanced(): boolean {\n    const item = this.item();\n    return item?.type === '=';\n  }\n\n  set customValue(val) {\n    const momentDate = moment(val);\n    this.value =\n      (val as string)?.length >= 10 && momentDate.isValid()\n        ? momentDate.format('YYYY-MM-DD')\n        : val;\n  }\n\n  get customValue(): any {\n    return this.value;\n  }\n\n  set customMinValue(val) {\n    const momentDate = moment(val);\n    this.minValue =\n      (val as string)?.length >= 10 && momentDate.isValid()\n        ? momentDate.format('YYYY-MM-DD')\n        : val;\n  }\n\n  get customMinValue(): any {\n    return this.minValue;\n  }\n\n  set customMaxValue(val) {\n    const momentDate = moment(val);\n    this.maxValue =\n      (val as string)?.length >= 10 && momentDate.isValid()\n        ? momentDate.format('YYYY-MM-DD')\n        : val;\n  }\n\n  get customMaxValue(): any {\n    return this.maxValue;\n  }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\n\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport { FilterDateComponent } from '../date/date.component';\n\n@Component({\n  selector: 'smart-crud-filter-date-time',\n  host: { class: 'smart:block smart:w-full' },\n  // TODO(FRA-293 GAP-19): re-sync picker when filter() changes externally\n  template: `\n    <label class=\"smart:mb-1 smart:block smart:text-sm smart:font-medium\">\n      {{ item()?.label || '' | translate }}\n    </label>\n    <div class=\"smart:flex smart:w-full smart:flex-col smart:gap-2\">\n      <div class=\"smart:flex smart:w-full smart:items-end smart:gap-2\">\n        <label class=\"smart:text-sm\">{{ 'from' | translate }}</label>\n        <input\n          type=\"datetime-local\"\n          class=\"smart:flex-1 smart:rounded smart:border smart:border-gray-300 smart:px-2 smart:py-1\"\n          [ngModel]=\"customMinValue || ''\"\n          (ngModelChange)=\"customMinValue = $event\"\n        />\n        @if (hasMinValue()) {\n          <button\n            type=\"button\"\n            (click)=\"refresh(null, '>=')\"\n            aria-label=\"clear-from\"\n            class=\"smart:shrink-0 smart:rounded smart:px-2 smart:py-2 smart:text-red-600 smart:hover:bg-red-50\"\n          >\n            ×\n          </button>\n        }\n      </div>\n      <div class=\"smart:flex smart:w-full smart:items-end smart:gap-2\">\n        <label class=\"smart:text-sm\">{{ 'to' | translate }}</label>\n        <input\n          type=\"datetime-local\"\n          class=\"smart:flex-1 smart:rounded smart:border smart:border-gray-300 smart:px-2 smart:py-1\"\n          [ngModel]=\"customMaxValue || ''\"\n          (ngModelChange)=\"customMaxValue = $event\"\n        />\n        @if (hasMaxValue()) {\n          <button\n            type=\"button\"\n            (click)=\"refresh(null, '<=')\"\n            aria-label=\"clear-to\"\n            class=\"smart:shrink-0 smart:rounded smart:px-2 smart:py-2 smart:text-red-600 smart:hover:bg-red-50\"\n          >\n            ×\n          </button>\n        }\n      </div>\n    </div>\n  `,\n  imports: [TranslatePipe, FormsModule],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterDateTimeComponent<\n  T extends IEntity<string>,\n> extends FilterDateComponent<T> {}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  signal,\n  WritableSignal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\n\nimport { DateEditComponent } from '@smartsoft001/angular';\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport { FilterDateComponent } from '../date/date.component';\n\n@Component({\n  selector: 'smart-crud-filter-date-with-edit',\n  host: { class: 'smart:block smart:w-full' },\n  // TODO(FRA-293 GAP-19): re-sync picker when filter() changes externally\n  template: `\n    <label class=\"smart:mb-1 smart:block smart:text-sm smart:font-medium\">\n      {{ item()?.label || '' | translate }}\n    </label>\n\n    @if (!advanced()) {\n      <div class=\"smart:flex smart:w-full smart:items-end smart:gap-2\">\n        <smart-date-edit\n          class=\"smart:flex-1\"\n          [ngModel]=\"customValue || ''\"\n          (ngModelChange)=\"customValue = $event\"\n        ></smart-date-edit>\n        @if (allowAdvanced) {\n          <button\n            type=\"button\"\n            (click)=\"toggleAdvanced()\"\n            aria-label=\"advanced\"\n            class=\"smart:shrink-0 smart:rounded smart:px-2 smart:py-2 smart:hover:bg-gray-100\"\n          >\n            ⚙\n          </button>\n        }\n        @if (hasValue()) {\n          <button\n            type=\"button\"\n            (click)=\"refresh(null)\"\n            aria-label=\"clear\"\n            class=\"smart:shrink-0 smart:rounded smart:px-2 smart:py-2 smart:text-red-600 smart:hover:bg-red-50\"\n          >\n            ×\n          </button>\n        }\n      </div>\n    } @else if (allowAdvanced) {\n      <button\n        type=\"button\"\n        (click)=\"toggleAdvanced()\"\n        aria-label=\"advanced\"\n        class=\"smart:mb-2 smart:rounded smart:px-2 smart:py-2 smart:hover:bg-gray-100\"\n      >\n        ⚙\n      </button>\n    }\n\n    @if ((advanced() || hasMinValue() || hasMaxValue()) && allowAdvanced) {\n      <div class=\"smart:flex smart:w-full smart:flex-col smart:gap-2\">\n        <div class=\"smart:flex smart:w-full smart:items-end smart:gap-2\">\n          <label class=\"smart:text-sm\">{{ 'from' | translate }}</label>\n          <smart-date-edit\n            class=\"smart:flex-1\"\n            [ngModel]=\"customMinValue || ''\"\n            (ngModelChange)=\"customMinValue = $event\"\n          ></smart-date-edit>\n          @if (hasMinValue()) {\n            <button\n              type=\"button\"\n              (click)=\"refresh(null, '>=')\"\n              aria-label=\"clear-from\"\n              class=\"smart:shrink-0 smart:rounded smart:px-2 smart:py-2 smart:text-red-600 smart:hover:bg-red-50\"\n            >\n              ×\n            </button>\n          }\n        </div>\n        <div class=\"smart:flex smart:w-full smart:items-end smart:gap-2\">\n          <label class=\"smart:text-sm\">{{ 'to' | translate }}</label>\n          <smart-date-edit\n            class=\"smart:flex-1\"\n            [ngModel]=\"customMaxValue || ''\"\n            (ngModelChange)=\"customMaxValue = $event\"\n          ></smart-date-edit>\n          @if (hasMaxValue()) {\n            <button\n              type=\"button\"\n              (click)=\"refresh(null, '<=')\"\n              aria-label=\"clear-to\"\n              class=\"smart:shrink-0 smart:rounded smart:px-2 smart:py-2 smart:text-red-600 smart:hover:bg-red-50\"\n            >\n              ×\n            </button>\n          }\n        </div>\n      </div>\n    }\n  `,\n  imports: [DateEditComponent, FormsModule, TranslatePipe],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterDateWithEditComponent<\n  T extends IEntity<string>,\n> extends FilterDateComponent<T> {\n  advanced: WritableSignal<boolean> = signal(false);\n\n  toggleAdvanced(): void {\n    this.advanced.update((val) => !val);\n    if (this.advanced()) {\n      this.value = null;\n    }\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  OnInit,\n  signal,\n  WritableSignal,\n} from '@angular/core';\n\nimport { InputFlagComponent, InputOptions } from '@smartsoft001/angular';\nimport { IEntity } from '@smartsoft001/domain-core';\nimport { IFieldOptions } from '@smartsoft001/models';\n\nimport { BaseComponent } from '../base/base.component';\n\n@Component({\n  selector: 'smart-crud-filter-flag',\n  host: { class: 'smart:block smart:w-full' },\n  template: `\n    @if (inputOptions()) {\n      <div class=\"smart:flex smart:w-full smart:items-center smart:gap-2\">\n        <smart-input-flag\n          class=\"smart:flex-1\"\n          [options]=\"inputOptions()!\"\n          [fieldOptions]=\"fieldOptions()\"\n        ></smart-input-flag>\n        @if (value === true || value === false) {\n          <button\n            type=\"button\"\n            (click)=\"refresh(null)\"\n            aria-label=\"clear\"\n            class=\"smart:shrink-0 smart:rounded smart:px-2 smart:py-2 smart:text-red-600 smart:hover:bg-red-50\"\n          >\n            ×\n          </button>\n        }\n      </div>\n    }\n  `,\n  imports: [InputFlagComponent],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterFlagComponent<T extends IEntity<string>>\n  extends BaseComponent<T>\n  implements OnInit\n{\n  readonly inputOptions: WritableSignal<InputOptions<any> | undefined> = signal<\n    InputOptions<any> | undefined\n  >(undefined);\n  readonly fieldOptions: WritableSignal<IFieldOptions | undefined> = signal<\n    IFieldOptions | undefined\n  >(undefined);\n\n  override ngOnInit(): void {\n    super.ngOnInit();\n\n    const control = this.bindValueControl();\n    this.inputOptions.set(this.buildInputOptions(control));\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  OnInit,\n  signal,\n  WritableSignal,\n} from '@angular/core';\nimport { ReactiveFormsModule, UntypedFormControl } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\n\nimport { InputIntComponent, InputOptions } from '@smartsoft001/angular';\nimport { IEntity } from '@smartsoft001/domain-core';\nimport { IFieldOptions } from '@smartsoft001/models';\n\nimport { BaseComponent } from '../base/base.component';\n\n// TODO(FRA-293 GAP-19): the advanced range controls (minControl/maxControl)\n// are not re-synced when filter() changes externally; see bindControl().\n@Component({\n  selector: 'smart-crud-filter-int',\n  host: { class: 'smart:block smart:w-full' },\n  template: `\n    @if (valueOptions()) {\n      <div class=\"smart:flex smart:w-full smart:items-end smart:gap-2\">\n        @if (!advanced()) {\n          <smart-input-int\n            class=\"smart:flex-1\"\n            [options]=\"valueOptions()!\"\n            [fieldOptions]=\"valueFieldOptions()\"\n          ></smart-input-int>\n        }\n\n        @if (allowAdvanced) {\n          <button\n            type=\"button\"\n            (click)=\"toggleAdvanced()\"\n            [disabled]=\"hasMinValue() || hasMaxValue()\"\n            aria-label=\"settings\"\n            class=\"smart:shrink-0 smart:rounded smart:px-2 smart:py-2 smart:text-gray-600 smart:hover:bg-gray-100 smart:disabled:opacity-40\"\n          >\n            ⚙\n          </button>\n        }\n\n        @if (hasValue() || hasMinValue() || hasMaxValue()) {\n          <button\n            type=\"button\"\n            (click)=\"clear()\"\n            aria-label=\"clear\"\n            class=\"smart:shrink-0 smart:rounded smart:px-2 smart:py-2 smart:text-red-600 smart:hover:bg-red-50\"\n          >\n            ×\n          </button>\n        }\n      </div>\n\n      @if ((advanced() || hasMinValue() || hasMaxValue()) && allowAdvanced) {\n        <div\n          class=\"smart:mt-2 smart:flex smart:w-full smart:items-end smart:gap-2\"\n        >\n          <div class=\"smart:flex-1\">\n            <label\n              class=\"smart:block smart:text-sm/6 smart:font-medium smart:text-gray-900 smart:dark:text-white\"\n            >\n              {{ 'from' | translate }}\n            </label>\n            <input\n              type=\"number\"\n              step=\"1\"\n              [formControl]=\"minControl\"\n              class=\"smart:mt-2 smart:block smart:w-full smart:rounded-md smart:bg-white smart:px-3 smart:py-1.5 smart:text-base smart:text-gray-900 smart:outline-1 -outline-offset-1 smart:outline-gray-300 smart:focus:outline-2 smart:focus:outline-offset-2 smart:focus:outline-indigo-600 smart:dark:bg-white/5 smart:dark:text-white smart:dark:outline-white/10\"\n            />\n          </div>\n          @if (hasMinValue()) {\n            <button\n              type=\"button\"\n              (click)=\"refresh(null, '>=')\"\n              aria-label=\"clear-from\"\n              class=\"smart:shrink-0 smart:rounded smart:px-2 smart:py-2 smart:text-red-600 smart:hover:bg-red-50\"\n            >\n              ×\n            </button>\n          }\n\n          <div class=\"smart:flex-1\">\n            <label\n              class=\"smart:block smart:text-sm/6 smart:font-medium smart:text-gray-900 smart:dark:text-white\"\n            >\n              {{ 'to' | translate }}\n            </label>\n            <input\n              type=\"number\"\n              step=\"1\"\n              [formControl]=\"maxControl\"\n              class=\"smart:mt-2 smart:block smart:w-full smart:rounded-md smart:bg-white smart:px-3 smart:py-1.5 smart:text-base smart:text-gray-900 smart:outline-1 -outline-offset-1 smart:outline-gray-300 smart:focus:outline-2 smart:focus:outline-offset-2 smart:focus:outline-indigo-600 smart:dark:bg-white/5 smart:dark:text-white smart:dark:outline-white/10\"\n            />\n          </div>\n          @if (hasMaxValue()) {\n            <button\n              type=\"button\"\n              (click)=\"refresh(null, '<=')\"\n              aria-label=\"clear-to\"\n              class=\"smart:shrink-0 smart:rounded smart:px-2 smart:py-2 smart:text-red-600 smart:hover:bg-red-50\"\n            >\n              ×\n            </button>\n          }\n        </div>\n      }\n    }\n  `,\n  imports: [InputIntComponent, ReactiveFormsModule, TranslatePipe],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterIntComponent<T extends IEntity<string>>\n  extends BaseComponent<T>\n  implements OnInit\n{\n  readonly valueOptions: WritableSignal<InputOptions<any> | undefined> = signal<\n    InputOptions<any> | undefined\n  >(undefined);\n  readonly valueFieldOptions: WritableSignal<IFieldOptions | undefined> =\n    signal<IFieldOptions | undefined>(undefined);\n\n  readonly advanced: WritableSignal<boolean> = signal<boolean>(false);\n\n  minControl!: UntypedFormControl;\n  maxControl!: UntypedFormControl;\n\n  get allowAdvanced(): boolean {\n    return this.item()?.type === '=';\n  }\n\n  override ngOnInit(): void {\n    super.ngOnInit();\n\n    const valueControl = this.bindControl(null);\n    this.minControl = this.bindControl('>=');\n    this.maxControl = this.bindControl('<=');\n\n    this.valueOptions.set(this.buildInputOptions(valueControl));\n    this.valueFieldOptions.set(undefined);\n  }\n\n  toggleAdvanced(): void {\n    this.advanced.update((val) => !val);\n    if (this.advanced()) this.value = null;\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  OnInit,\n  signal,\n  WritableSignal,\n} from '@angular/core';\n\nimport { InputOptions, InputRadioComponent } from '@smartsoft001/angular';\nimport { IEntity } from '@smartsoft001/domain-core';\nimport { IFieldOptions } from '@smartsoft001/models';\n\nimport { BaseComponent } from '../base/base.component';\n\n@Component({\n  selector: 'smart-crud-filter-radio',\n  host: { class: 'smart:mb-5 smart:block smart:w-full' },\n  template: `\n    @if (inputOptions()) {\n      <div class=\"smart:flex smart:w-full smart:items-start smart:gap-2\">\n        <smart-input-radio\n          class=\"smart:flex-1\"\n          [options]=\"inputOptions()!\"\n          [fieldOptions]=\"fieldOptions()\"\n        ></smart-input-radio>\n        @if (value || value === false) {\n          <button\n            type=\"button\"\n            (click)=\"refresh(null)\"\n            aria-label=\"clear\"\n            class=\"smart:shrink-0 smart:rounded smart:px-2 smart:py-1 smart:text-red-600 smart:hover:bg-red-50\"\n          >\n            ×\n          </button>\n        }\n      </div>\n    }\n  `,\n  imports: [InputRadioComponent],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterRadioComponent<T extends IEntity<string>>\n  extends BaseComponent<T>\n  implements OnInit\n{\n  readonly inputOptions: WritableSignal<InputOptions<any> | undefined> = signal<\n    InputOptions<any> | undefined\n  >(undefined);\n  readonly fieldOptions: WritableSignal<IFieldOptions | undefined> = signal<\n    IFieldOptions | undefined\n  >(undefined);\n\n  override ngOnInit(): void {\n    super.ngOnInit();\n\n    const control = this.bindControl(null);\n    this.inputOptions.set(this.buildInputOptions(control, true));\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  OnInit,\n  signal,\n  WritableSignal,\n} from '@angular/core';\n\nimport { InputOptions, InputTextComponent } from '@smartsoft001/angular';\nimport { IEntity } from '@smartsoft001/domain-core';\nimport { IFieldOptions } from '@smartsoft001/models';\n\nimport { BaseComponent } from '../base/base.component';\n\n@Component({\n  selector: 'smart-crud-filter-text',\n  host: { class: 'smart:block smart:w-full' },\n  template: `\n    @if (inputOptions()) {\n      <div class=\"smart:flex smart:w-full smart:items-end smart:gap-2\">\n        <smart-input-text\n          class=\"smart:flex-1\"\n          [options]=\"inputOptions()!\"\n          [fieldOptions]=\"fieldOptions()\"\n        ></smart-input-text>\n        @if (hasValue()) {\n          <button\n            type=\"button\"\n            (click)=\"refresh(null)\"\n            aria-label=\"clear\"\n            class=\"smart:shrink-0 smart:rounded smart:px-2 smart:py-2 smart:text-red-600 smart:hover:bg-red-50\"\n          >\n            ×\n          </button>\n        }\n      </div>\n    }\n  `,\n  imports: [InputTextComponent],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterTextComponent<T extends IEntity<string>>\n  extends BaseComponent<T>\n  implements OnInit\n{\n  readonly inputOptions: WritableSignal<InputOptions<any> | undefined> = signal<\n    InputOptions<any> | undefined\n  >(undefined);\n  readonly fieldOptions: WritableSignal<IFieldOptions | undefined> = signal<\n    IFieldOptions | undefined\n  >(undefined);\n\n  override ngOnInit(): void {\n    super.ngOnInit();\n\n    const control = this.bindValueControl();\n    this.inputOptions.set(this.buildInputOptions(control));\n  }\n}\n","import { Component, input, ChangeDetectionStrategy } from '@angular/core';\n\nimport { FieldType, IModelFilter } from '@smartsoft001/models';\n\nimport { ICrudFilter } from '../../models';\nimport { FilterCheckComponent } from './check/check.component';\nimport { FilterDateComponent } from './date/date.component';\nimport { FilterDateTimeComponent } from './date-time/date-time.component';\nimport { FilterDateWithEditComponent } from './date-with-edit/date-with-edit.component';\nimport { FilterFlagComponent } from './flag/flag.component';\nimport { FilterIntComponent } from './int/int.component';\nimport { FilterRadioComponent } from './radio/radio.component';\nimport { FilterTextComponent } from './text/text.component';\n\n@Component({\n  selector: 'smart-crud-filter',\n  templateUrl: './filter.component.html',\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    FilterTextComponent,\n    FilterIntComponent,\n    FilterFlagComponent,\n    FilterCheckComponent,\n    FilterRadioComponent,\n    FilterDateTimeComponent,\n    FilterDateWithEditComponent,\n    FilterDateComponent,\n  ],\n})\nexport class FilterComponent {\n  FieldType = FieldType;\n\n  item = input<IModelFilter>();\n  filter = input<ICrudFilter>();\n}\n","<div class=\"smart:py-1\">\n  @switch ($safeNavigationMigration(item()?.fieldType)) {\n    @case (FieldType.date) {\n      <smart-crud-filter-date\n        [item]=\"item()\"\n        [filter]=\"filter()\"\n      ></smart-crud-filter-date>\n    }\n    @case (FieldType.dateWithEdit) {\n      <smart-crud-filter-date-with-edit\n        [item]=\"item()\"\n        [filter]=\"filter()\"\n      ></smart-crud-filter-date-with-edit>\n    }\n    @case (FieldType.dateTime) {\n      <smart-crud-filter-date-time\n        [item]=\"item()\"\n        [filter]=\"filter()\"\n      ></smart-crud-filter-date-time>\n    }\n    @case (FieldType.radio) {\n      <smart-crud-filter-radio\n        [item]=\"item()\"\n        [filter]=\"filter()\"\n      ></smart-crud-filter-radio>\n    }\n    @case (FieldType.check) {\n      <smart-crud-filter-check\n        [item]=\"item()\"\n        [filter]=\"filter()\"\n      ></smart-crud-filter-check>\n    }\n    @case (FieldType.flag) {\n      <smart-crud-filter-flag\n        [item]=\"item()\"\n        [filter]=\"filter()\"\n      ></smart-crud-filter-flag>\n    }\n    @case (FieldType.int) {\n      <smart-crud-filter-int\n        [item]=\"item()\"\n        [filter]=\"filter()\"\n      ></smart-crud-filter-int>\n    }\n    @default {\n      <smart-crud-filter-text\n        [item]=\"item()\"\n        [filter]=\"filter()\"\n      ></smart-crud-filter-text>\n    }\n  }\n</div>\n","import {\n  Directive,\n  ElementRef,\n  inject,\n  input,\n  InputSignal,\n  OnInit,\n  Signal,\n  signal,\n  WritableSignal,\n} from '@angular/core';\n\nimport { MenuService, StyleService } from '@smartsoft001/angular';\nimport { IEntity } from '@smartsoft001/domain-core';\nimport {\n  FieldType,\n  getModelFieldsWithOptions,\n  getModelOptions,\n  IFieldListMetadata,\n  IModelFilter,\n} from '@smartsoft001/models';\n\nimport { CrudFacade } from '../../../+state/crud.facade';\nimport { CrudConfig } from '../../../crud.config';\nimport { ICrudFilter } from '../../../models';\n\n// Rendered by an OnPush concrete (FiltersComponent). The base exposes signals\n// (`list()`, `filter()`) and is therefore OnPush-compatible.\n@Directive()\nexport class FiltersBaseComponent<T extends IEntity<string>> implements OnInit {\n  private menuService = inject(MenuService);\n  private config = inject(CrudConfig<T>);\n  private facade = inject(CrudFacade<T>);\n  private styleService = inject(StyleService);\n  private elementRef = inject(ElementRef);\n\n  list!: WritableSignal<Array<IModelFilter>>;\n\n  filter!: Signal<ICrudFilter | undefined>;\n\n  /**\n   * Hide menu used only from MenuService\n   */\n  readonly hideMenu: InputSignal<boolean> = input<boolean>(false);\n\n  async onClose(): Promise<void> {\n    await this.menuService.closeEnd();\n  }\n\n  ngOnInit(): void {\n    this.styleService.init(this.elementRef);\n    this.list = signal([]);\n\n    const modelFilters = getModelOptions(this.config.type)?.filters;\n\n    this.list.set([\n      ...(modelFilters\n        ? modelFilters.map((item) => {\n            if (!item.label) {\n              item.label = 'MODEL.' + item.key;\n            }\n            return item;\n          })\n        : []),\n      ...getModelFieldsWithOptions(new this.config.type())\n        .filter((item) => (item.options?.list as IFieldListMetadata)?.filter)\n        .map((item) => ({\n          key: item.key,\n          type:\n            item.options.type === FieldType.text ||\n            item.options.type === FieldType.longText\n              ? ('~=' as const)\n              : ('=' as const),\n          label: 'MODEL.' + item.key,\n          fieldType: item.options.type,\n        })),\n    ]);\n    this.filter = this.facade.filter;\n  }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\n\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport { FilterComponent } from '../filter';\nimport { FiltersBaseComponent } from './base/base.component';\n\n/**\n * This component is only to use in crud module\n * @requires CrudModule\n * @example\n *\n * html: <smart-crud-filters></smart-crud-filters>\n *\n * use on the model:\n * @Model({\n    titleKey: 'body',\n    filters: [\n        {\n            label: 'testNegation',\n            key: 'body',\n            type: '!=',\n        },\n        {\n            label: 'fromDate',\n            key: 'createDate',\n            type: '<=',\n            fieldType: FieldType.dateWithEdit\n        },\n        {\n            label: 'select',\n            key: 'type',\n            type: '=',\n            fieldType: FieldType.radio,\n            possibilities$: of([\n                {\n                    id: 1, text: 'Test 1'\n                },\n                {\n                    id: 2, text: 'Test 2'\n                }\n            ])\n        }\n    ]\n})\n *\n * use on the field (list.filter property):\n * @Field({\n        create: modifyMetdata,\n        update: {\n            ...modifyMetdata,\n            multi: true\n        },\n        type: FieldType.longText,\n        details: true,\n        list: {\n            order: 2,\n            filter: true\n        }\n    })\n body: string;\n */\n@Component({\n  selector: 'smart-crud-filters',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div class=\"smart:flex smart:h-full smart:flex-col\">\n      @if (!hideMenu()) {\n        <header\n          class=\"smart:flex smart:items-center smart:justify-between smart:border-b smart:border-gray-200 smart:px-4 smart:py-3\"\n        >\n          <h2 class=\"smart:text-lg smart:font-semibold smart:text-gray-900\">\n            {{ 'filters' | translate }}\n          </h2>\n          <button\n            type=\"button\"\n            (click)=\"onClose()\"\n            aria-label=\"close\"\n            class=\"smart:rounded smart:p-1 smart:text-gray-500 smart:hover:bg-gray-100\"\n          >\n            ✕\n          </button>\n        </header>\n      }\n      <div\n        class=\"smart:flex-1 smart:space-y-4 smart:overflow-y-auto smart:px-4 smart:py-3\"\n      >\n        @for (item of list(); track item.key) {\n          <smart-crud-filter\n            [item]=\"item\"\n            [filter]=\"filter()\"\n          ></smart-crud-filter>\n        }\n      </div>\n    </div>\n  `,\n  imports: [FilterComponent, TranslatePipe],\n})\nexport class FiltersComponent<\n  T extends IEntity<string>,\n> extends FiltersBaseComponent<T> {}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  ElementRef,\n  inject,\n  OnInit,\n  Signal,\n} from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\n\nimport { StyleService } from '@smartsoft001/angular';\n\nimport { CrudFacade } from '../../+state/crud.facade';\nimport { ICrudFilterQueryItem } from '../../models';\n\n@Component({\n  selector: 'smart-crud-filters-config',\n  template: `\n    @let query = this.query();\n    @if (query && query.length) {\n      <div class=\"smart:flex smart:flex-wrap smart:gap-2 smart:px-4 smart:py-2\">\n        @for (item of query; track item) {\n          <button\n            type=\"button\"\n            (click)=\"onRemoveQuery(item)\"\n            class=\"smart:inline-flex smart:items-center smart:gap-1 smart:rounded-full smart:border smart:border-gray-300 smart:bg-gray-50 smart:px-3 smart:py-1 smart:text-sm smart:text-gray-700 smart:hover:bg-gray-100\"\n            [attr.aria-label]=\"\n              ('remove' | translate) + ' ' + ('MODEL.' + item.key | translate)\n            \"\n          >\n            <span\n              >{{ 'MODEL.' + item.key | translate }} {{ item.type }}\n              {{ item.value | translate }}</span\n            >\n            <span aria-hidden=\"true\" class=\"smart:text-red-600\">✕</span>\n          </button>\n        }\n      </div>\n    }\n  `,\n  imports: [TranslatePipe],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FiltersConfigComponent implements OnInit {\n  private readonly facade = inject(CrudFacade<any>);\n  private styleService = inject(StyleService);\n  private elementRef = inject(ElementRef);\n\n  query!: Signal<ICrudFilterQueryItem[]>;\n\n  onRemoveQuery(item: ICrudFilterQueryItem): void {\n    const filter = this.facade.filter();\n    if (filter?.query) {\n      const index = filter.query.indexOf(item);\n      if (index > -1) {\n        filter.query.splice(index, 1);\n      }\n    }\n    this.facade.read(this.facade.filter());\n  }\n\n  ngOnInit(): void {\n    this.styleService.init(this.elementRef);\n\n    this.query = computed(() => {\n      const filter = this.facade.filter();\n      return filter?.query?.filter((i) => !i.hidden) || [];\n    });\n  }\n}\n","import { computed, Directive, inject, Signal } from '@angular/core';\nimport * as _ from 'lodash';\n\nimport { IButtonOptions, MenuService } from '@smartsoft001/angular';\nimport { IEntity } from '@smartsoft001/domain-core';\nimport {\n  getModelFieldsWithOptions,\n  IFieldEditMetadata,\n} from '@smartsoft001/models';\n\nimport { CrudFacade } from '../../../+state';\nimport { CrudFullConfig } from '../../../crud.config';\n\n@Directive()\nexport class MultiselectBaseComponent<T extends IEntity<string>> {\n  private facade = inject(CrudFacade<T>);\n  public config = inject(CrudFullConfig<T>);\n  private menuService = inject(MenuService);\n\n  private _list!: Array<T>;\n  private _changes!: Partial<T>;\n\n  item!: T;\n  valid!: boolean;\n  buttonOptions: IButtonOptions = {\n    click: async () => {\n      const result = this._list.map((item) => {\n        return {\n          ...this._changes,\n          id: item.id,\n        };\n      });\n\n      this.facade.updatePartialMany(result);\n      await this.menuService.closeEnd();\n    },\n    confirm: true,\n  };\n  lock!: boolean;\n  showForm = false;\n\n  list!: Signal<T[]>;\n\n  constructor() {\n    this.list = computed(() => {\n      const list = this.facade.multiSelected() || [];\n      this.lock = true;\n      const model = new this.config.type();\n\n      const fieldsWithOptions = getModelFieldsWithOptions(model)?.filter(\n        (f) => (f.options.update as IFieldEditMetadata)?.multi,\n      );\n\n      this.showForm = !!fieldsWithOptions.length;\n\n      fieldsWithOptions.forEach(({ key }) => {\n        const uniques = _.uniq(list.map((i) => i[key]));\n\n        if (uniques.length === 1) {\n          model[key] = uniques[0];\n        }\n      });\n\n      this.item = model;\n\n      return list;\n    });\n  }\n\n  async onClose(): Promise<void> {\n    await this.menuService.closeEnd();\n  }\n\n  onPartialChange(changes: Partial<T>, list: Array<T>) {\n    this.lock = false;\n    this._list = list;\n    this._changes = changes;\n  }\n\n  onValidChange(valid: boolean) {\n    this.valid = valid;\n  }\n}\n","import { inject, Pipe, PipeTransform, Type } from '@angular/core';\n\nimport { IFormOptions, InputBaseComponent } from '@smartsoft001/angular';\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport { CRUD_MODEL_POSSIBILITIES_PROVIDER } from '../../providers/model-possibilities/model-possibilities.provider';\n\n@Pipe({\n  name: 'smartFormOptions',\n})\nexport class FormOptionsPipe<T extends IEntity<string>>\n  implements PipeTransform\n{\n  private modelPossibilitiesProvider = inject(\n    CRUD_MODEL_POSSIBILITIES_PROVIDER,\n    { optional: true },\n  );\n\n  transform(\n    item: T,\n    mode: string,\n    type: any,\n    uniqueProvider?: (values: Record<keyof T, any>) => Promise<boolean>,\n    inputComponents?: { [key: string]: Type<InputBaseComponent<any>> },\n  ): IFormOptions<T> {\n    if (!mode || !type) return null as any;\n\n    let possibilities = {};\n\n    if (type && this.modelPossibilitiesProvider) {\n      possibilities = this.modelPossibilitiesProvider.get(type);\n    }\n\n    if (mode === 'create') {\n      return {\n        mode: 'create',\n        possibilities,\n        inputComponents,\n        uniqueProvider,\n        model: new type(),\n        show: true,\n      };\n    } else {\n      const model = new type();\n\n      if (item) {\n        Object.keys(item).forEach((key) => {\n          (model as any)[key] = (item as any)[key];\n        });\n      }\n\n      return {\n        mode: mode,\n        uniqueProvider,\n        possibilities: possibilities,\n        inputComponents,\n        model: model,\n        show: true,\n      };\n    }\n  }\n}\n","import { NgModule } from '@angular/core';\n\nimport { FormOptionsPipe } from './form-options/form-options.pipe';\n\n@NgModule({\n  exports: [FormOptionsPipe],\n  imports: [FormOptionsPipe],\n})\nexport class CrudPipesModule {}\n","import { NgComponentOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { DynamicIoDirective } from 'ng-dynamic-component';\n\nimport { ButtonComponent, FormComponent } from '@smartsoft001/angular';\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport { MultiselectBaseComponent } from './base/base.component';\nimport { FormOptionsPipe } from '../../pipes';\n\n@Component({\n  selector: 'smart-crud-multiselect',\n  templateUrl: './multiselect.component.html',\n  imports: [\n    TranslatePipe,\n    NgComponentOutlet,\n    DynamicIoDirective,\n    FormOptionsPipe,\n    FormComponent,\n    ButtonComponent,\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MultiselectComponent<\n  T extends IEntity<string>,\n> extends MultiselectBaseComponent<T> {}\n","@let list = this.list();\n@if (list) {\n  <header\n    class=\"smart:flex smart:items-center smart:justify-between smart:border-b smart:border-gray-200 smart:px-4 smart:py-3\"\n  >\n    <h2 class=\"smart:text-lg smart:font-semibold smart:text-gray-900\">\n      {{ 'selected' | translate }}: {{ list.length }}\n    </h2>\n    <button\n      type=\"button\"\n      (click)=\"onClose()\"\n      aria-label=\"close\"\n      class=\"smart:rounded smart:p-1 smart:text-gray-500 smart:hover:bg-gray-100\"\n    >\n      ✕\n    </button>\n  </header>\n\n  @if (config?.list?.components?.multi) {\n    <div>\n      <ng-template\n        [ngComponentOutlet]=\"\n          $safeNavigationMigration(config?.list?.components?.multi)\n        \"\n        [ndcDynamicInputs]=\"{ items: list }\"\n      ></ng-template>\n    </div>\n  }\n\n  @if (showForm && item) {\n    <div>\n      <smart-form\n        [options]=\"item | smartFormOptions: 'multiUpdate' : config.type\"\n        (valuePartialChange)=\"onPartialChange($event, list)\"\n        (validChange)=\"onValidChange($event)\"\n      ></smart-form>\n\n      <smart-button\n        class=\"smart:float-right\"\n        [disabled]=\"lock || !valid\"\n        [options]=\"buttonOptions\"\n      >\n        {{ 'change' | translate }}\n      </smart-button>\n    </div>\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { debounce } from 'lodash-decorators';\n\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport { CrudFacade } from '../../+state/crud.facade';\nimport { ICrudListGroup } from '../../models';\n\n@Injectable()\nexport class CrudListGroupService<T extends IEntity<string>> {\n  private facade = inject(CrudFacade<T>);\n\n  private _destroyed: Array<ICrudListGroup> = [];\n\n  change(val: boolean, item: ICrudListGroup, force = false): void {\n    if (val || force) {\n      item.changed = true;\n\n      const filter = this.facade.filter();\n      let current = filter?.query?.find(\n        (q) => q.key === item.key && q.type === '=',\n      );\n\n      if (!current) {\n        current = {\n          key: item.key,\n          type: '=',\n          value: null,\n        };\n        if (filter?.query) {\n          filter.query.push(current);\n        }\n      }\n\n      current.value = item.value;\n      current.hidden = true;\n\n      this.facade.read({\n        ...this.facade.filter(),\n        offset: 0,\n      });\n    }\n  }\n\n  destroy(groups: Array<ICrudListGroup>): void {\n    this._destroyed = [\n      ...(this._destroyed ? this._destroyed : []),\n      ...groups.filter((g) => g.changed),\n    ];\n\n    this.refresh();\n  }\n\n  @debounce(250)\n  private refresh(): void {\n    const list = this._destroyed;\n    this._destroyed = [];\n\n    const filter = this.facade.filter();\n    const newQuery =\n      filter?.query?.filter((q) => !list.some((i) => q.key === i.key)) || [];\n\n    this.facade.read({\n      ...this.facade.filter(),\n      query: newQuery,\n    });\n  }\n}\n","import {\n  ChangeDetectorRef,\n  Directive,\n  ElementRef,\n  inject,\n  input,\n  InputSignal,\n  OnDestroy,\n  OnInit,\n} from '@angular/core';\n\nimport {\n  BaseComponent,\n  IListOptions,\n  StyleService,\n} from '@smartsoft001/angular';\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport { ICrudListGroup } from '../../../models';\nimport { CrudListGroupService } from '../../../services/list-group/list-group.service';\n\n@Directive()\nexport class GroupBaseComponent<T extends IEntity<string>>\n  extends BaseComponent\n  implements OnInit, OnDestroy\n{\n  private styleService = inject(StyleService);\n  private elementRef = inject(ElementRef);\n  private groupService = inject(CrudListGroupService<T>);\n  private cd = inject(ChangeDetectorRef);\n\n  readonly groups: InputSignal<Array<ICrudListGroup> | null> =\n    input<Array<ICrudListGroup> | null>(null);\n  readonly listOptions: InputSignal<IListOptions<T> | null> =\n    input<IListOptions<T> | null>(null);\n\n  change(val: boolean, item: ICrudListGroup, force = false): void {\n    const groups = this.groups();\n    if (groups) {\n      groups\n        .filter((i) => i.value !== item.value || i.key !== item.key)\n        .forEach((i) => {\n          i.show = false;\n        });\n    }\n\n    this.groupService.change(val, item, force);\n\n    if (val) {\n      setTimeout(() => {\n        item.show = val;\n        this.cd.detectChanges();\n      });\n    } else {\n      item.show = val;\n      this.cd.detectChanges();\n    }\n  }\n\n  ngOnInit(): void {\n    this.styleService.init(this.elementRef);\n  }\n\n  override ngOnDestroy(): void {\n    const groups = this.groups();\n    if (groups) {\n      this.groupService.destroy(groups);\n    }\n    super.ngOnDestroy();\n  }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\n\nimport { ListComponent } from '@smartsoft001/angular';\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport { GroupBaseComponent } from './base/base.component';\n\n@Component({\n  selector: 'smart-crud-group',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    @for (item of groups(); track item.key) {\n      <div class=\"smart:border-b smart:border-gray-200\">\n        <button\n          type=\"button\"\n          (click)=\"change(!item.show, item)\"\n          [attr.aria-expanded]=\"item.show || false\"\n          [attr.aria-controls]=\"'smart-crud-group-' + item.key\"\n          class=\"smart:flex smart:w-full smart:items-center smart:justify-between smart:py-3 smart:text-left smart:text-sm\"\n          [class.smart:font-bold]=\"item.show\"\n        >\n          <span>{{ item.text | translate }}</span>\n          <span aria-hidden=\"true\" class=\"smart:text-gray-500\">{{\n            item.show ? '▾' : '▸'\n          }}</span>\n        </button>\n        @if (item.show) {\n          <div [id]=\"'smart-crud-group-' + item.key\" class=\"smart:pb-3\">\n            @if (!item.children && listOptions()) {\n              <smart-list [options]=\"listOptions()!\"></smart-list>\n            }\n            @if (item.children) {\n              <div class=\"smart:ml-12\">\n                <smart-crud-group\n                  [groups]=\"item.children\"\n                  [listOptions]=\"listOptions()\"\n                ></smart-crud-group>\n              </div>\n            }\n          </div>\n        }\n      </div>\n    }\n  `,\n  imports: [ListComponent, TranslatePipe],\n})\nexport class GroupComponent<\n  T extends IEntity<string>,\n> extends GroupBaseComponent<T> {}\n","import { computed, inject, Injectable, Injector } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { filter, take } from 'rxjs/operators';\n\nimport { IListPaginationOptions, PaginationMode } from '@smartsoft001/angular';\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport { CrudFacade } from '../../+state/crud.facade';\nimport { ICrudFilter } from '../../models';\n\n@Injectable()\nexport class CrudListPaginationFactory<T extends IEntity<string>> {\n  private readonly facade = inject(CrudFacade<T>);\n  private readonly injector = inject(Injector);\n\n  async create(options: {\n    mode?: PaginationMode;\n    limit: number;\n    provider: {\n      getLinks(): any;\n      getFilter(): ICrudFilter;\n    };\n  }): Promise<IListPaginationOptions> {\n    return {\n      mode: options.mode,\n      limit: options.limit,\n      loadNextPage: () => {\n        if (!options.provider.getLinks() || !options.provider.getLinks().next)\n          return Promise.resolve(false);\n\n        return new Promise((res) => {\n          toObservable(this.facade.loaded, { injector: this.injector })\n            .pipe(\n              filter((l) => !!l),\n              take(1),\n            )\n            .subscribe(() => {\n              setTimeout(() => {\n                res(\n                  options.provider.getLinks() &&\n                    options.provider.getLinks().next,\n                );\n              });\n            });\n\n          const currentFilter = options.provider.getFilter();\n          this.facade.read({\n            ...currentFilter,\n            offset: (currentFilter.offset || 0) + (currentFilter.limit || 0),\n          });\n        });\n      },\n      loadPrevPage: () => {\n        if (!options.provider.getLinks() || !options.provider.getLinks().prev)\n          return Promise.resolve(false);\n\n        return new Promise((res) => {\n          toObservable(this.facade.loaded, { injector: this.injector })\n            .pipe(\n              filter((l) => !!l),\n              take(1),\n            )\n            .subscribe(() => {\n              setTimeout(() => {\n                res(\n                  options.provider.getLinks() &&\n                    options.provider.getLinks().prev,\n                );\n              });\n            });\n\n          const currentFilter = options.provider.getFilter();\n          this.facade.read({\n            ...currentFilter,\n            offset: (currentFilter.offset || 0) - (currentFilter.limit || 0),\n          });\n        });\n      },\n      page: computed(() => {\n        const f = this.facade.filter();\n        return f?.limit ? (f.offset || 0) / f.limit + 1 : 0;\n      }),\n      totalPages: computed(() => {\n        const filter = this.facade.filter();\n        const totalCount = this.facade.totalCount();\n        return filter?.limit && totalCount\n          ? Math.ceil(totalCount / filter.limit)\n          : 0;\n      }),\n    };\n  }\n}\n","import { inject, Injectable, signal, Signal } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\nimport { IModelLabelOptions, IModelLabelProvider } from '@smartsoft001/angular';\n\n@Injectable()\nexport class CrudModelLabelProvider extends IModelLabelProvider {\n  private translateService = inject(TranslateService);\n  // Delegate to an app-level provider if one exists higher in the injector tree;\n  // otherwise fall back to translating 'MODEL.<key>'. (FRA-293 GAP / belt-and-suspenders.)\n  private parent = inject(IModelLabelProvider, {\n    optional: true,\n    skipSelf: true,\n  });\n\n  override get(options: IModelLabelOptions): Signal<string> {\n    if (this.parent) return this.parent.get(options);\n    return signal(\n      this.translateService.instant('MODEL.' + options.key) as string,\n    );\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DynamicIoModule } from 'ng-dynamic-component';\n\nimport { IModelLabelProvider, SharedModule } from '@smartsoft001/angular';\n\nimport { ExportComponent } from './export/export.component';\nimport {\n  FilterComponent,\n  FilterDateComponent,\n  FilterDateWithEditComponent,\n  FilterFlagComponent,\n  FilterRadioComponent,\n  FilterTextComponent,\n  FilterCheckComponent,\n  FilterIntComponent,\n  FilterDateTimeComponent,\n} from './filter';\nimport { CrudPipesModule } from '../pipes';\nimport { FiltersComponent } from './filters/filters.component';\nimport { FiltersConfigComponent } from './filters-config/filters-config.component';\nimport { MultiselectComponent } from './multiselect/multiselect.component';\nimport { CrudFacade } from '../+state/crud.facade';\nimport { GroupComponent } from './group/group.component';\nimport { CrudListPaginationFactory } from '../factories/list-pagination/list-pagination.factory';\nimport { CrudModelLabelProvider } from '../providers/model-label/model-label.provider';\nimport { CrudService } from '../services/crud/crud.service';\nimport { SocketService } from '../services/socket/socket.service';\n\nconst COMPONENTS = [\n  ExportComponent,\n  FilterComponent,\n  FilterTextComponent,\n  FiltersConfigComponent,\n  FilterDateComponent,\n  FilterDateWithEditComponent,\n  FilterDateTimeComponent,\n  FilterRadioComponent,\n  FiltersComponent,\n  FilterFlagComponent,\n  FilterCheckComponent,\n  FilterIntComponent,\n  MultiselectComponent,\n  GroupComponent,\n];\n\n@NgModule({\n  imports: [\n    ...COMPONENTS,\n    SharedModule,\n    CrudPipesModule,\n    FormsModule,\n    CommonModule,\n    DynamicIoModule,\n  ],\n  exports: [CrudPipesModule, ...COMPONENTS],\n  providers: [\n    CrudService,\n    CrudFacade,\n    SocketService,\n    CrudListPaginationFactory,\n    { provide: IModelLabelProvider, useClass: CrudModelLabelProvider },\n  ],\n})\nexport class CrudComponentsModule {}\n","import {\n  Directive,\n  inject,\n  input,\n  output,\n  Signal,\n  viewChild,\n  viewChildren,\n  ViewContainerRef,\n} from '@angular/core';\n\nimport {\n  BaseComponent,\n  DynamicComponentType,\n  FormComponent,\n  IDetailsOptions,\n  SmartFormGroup,\n} from '@smartsoft001/angular';\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport { CrudFacade } from '../../../+state/crud.facade';\nimport { CrudFullConfig } from '../../../crud.config';\n\n@Directive()\nexport abstract class CrudItemPageBaseComponent<\n  T extends IEntity<string>,\n> extends BaseComponent {\n  public config = inject(CrudFullConfig<T>);\n  public facade = inject(CrudFacade<T>);\n\n  static smartType: DynamicComponentType = 'crud-item-page';\n\n  selected: Signal<T>;\n\n  contentTpl = viewChild<ViewContainerRef>('contentTpl');\n\n  formComponents = viewChildren(FormComponent);\n\n  detailsOptions = input<IDetailsOptions<T>>();\n\n  mode = input<string>();\n\n  uniqueProvider = input<(values: Record<keyof T, any>) => Promise<boolean>>();\n\n  onPartialChange = output<Partial<T>>();\n\n  onChange = output<T>();\n\n  onValidChange = output<boolean>();\n\n  constructor() {\n    super();\n    this.selected = this.facade.selected;\n  }\n\n  /**\n   * The reactive form of the first rendered `<smart-form>`, or `undefined`\n   * until the form factory has built it. `FormComponent.form` is a getter over\n   * a signal, so it always reports the group currently rendered; a method is\n   * kept here so the page button handlers read that group at call time rather\n   * than through a `computed` captured when the form did not exist yet.\n   */\n  getForm(): SmartFormGroup | undefined {\n    return this.formComponents()[0]?.form;\n  }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, ChangeDetectionStrategy } from '@angular/core';\n\nimport { DetailsComponent, FormComponent } from '@smartsoft001/angular';\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport { FormOptionsPipe } from '../../../pipes';\nimport { CrudItemPageBaseComponent } from '../base/base.component';\n\n@Component({\n  selector: 'smart-crud-item-standard-page',\n  template: `\n    @if (mode() === 'details') {\n      @if (detailsOptions()) {\n        <smart-details [options]=\"detailsOptions()\"></smart-details>\n      }\n    } @else {\n      <ng-container [ngTemplateOutlet]=\"editTpl\"></ng-container>\n    }\n\n    <ng-template #editTpl>\n      <smart-form\n        [options]=\"\n          selected()\n            | smartFormOptions\n              : mode()\n              : $safeNavigationMigration(config?.type)\n              : uniqueProvider()\n              : config.inputComponents\n        \"\n        (valuePartialChange)=\"onPartialChange.emit($event)\"\n        (valueChange)=\"onChange.emit($event)\"\n        (validChange)=\"onValidChange.emit($event)\"\n      ></smart-form>\n    </ng-template>\n\n    <br /><br />\n  `,\n  styleUrls: ['./standard.component.scss'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    DetailsComponent,\n    FormComponent,\n    FormOptionsPipe,\n    NgTemplateOutlet,\n    FormComponent,\n  ],\n})\nexport class ItemStandardComponent<\n  T extends IEntity<string>,\n> extends CrudItemPageBaseComponent<T> {}\n","import { inject, Injectable } from '@angular/core';\n\nimport { AuthService } from '@smartsoft001/angular';\nimport { getModelOptions } from '@smartsoft001/models';\n\nimport { CrudFullConfig } from '../../crud.config';\n\n@Injectable()\nexport class PageService<T> {\n  private authService = inject(AuthService);\n  private config = inject(CrudFullConfig<T>);\n\n  checkPermissions(): void {\n    const val: CrudFullConfig<T> = this.config;\n    const modelOptions = getModelOptions(val.type);\n\n    if (\n      val.add &&\n      modelOptions.create &&\n      modelOptions.create.permissions &&\n      !this.authService.expectPermissions(modelOptions.create.permissions)\n    ) {\n      val.add = false;\n    }\n\n    if (\n      val.edit &&\n      modelOptions.update &&\n      modelOptions.update.permissions &&\n      !this.authService.expectPermissions(modelOptions.update.permissions)\n    ) {\n      val.edit = false;\n    }\n\n    if (\n      val.remove &&\n      modelOptions.remove &&\n      modelOptions.remove.permissions &&\n      !this.authService.expectPermissions(modelOptions.remove.permissions)\n    ) {\n      val.remove = false;\n    }\n  }\n}\n","import { Location, NgTemplateOutlet } from '@angular/common';\nimport {\n  ChangeDetectorRef,\n  Component,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  OnDestroy,\n  OnInit,\n  Signal,\n  signal,\n  TemplateRef,\n  Type,\n  viewChild,\n  viewChildren,\n  ViewContainerRef,\n  WritableSignal,\n  ChangeDetectionStrategy,\n} from '@angular/core';\nimport {\n  AbstractControl,\n  UntypedFormArray,\n  UntypedFormControl,\n  UntypedFormGroup,\n} from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\nimport {\n  CreateDynamicComponent,\n  DetailsService,\n  DynamicComponentLoader,\n  DynamicContentDirective,\n  ICellPipe,\n  IDetailsOptions,\n  IIconButtonOptions,\n  IPageOptions,\n  PageComponent,\n  StyleService,\n  ToastService,\n} from '@smartsoft001/angular';\nimport { IEntity } from '@smartsoft001/domain-core';\nimport { getModelOptions } from '@smartsoft001/models';\nimport { SpecificationService } from '@smartsoft001/utils';\n\nimport { CrudFacade } from '../../+state/crud.facade';\nimport { CrudFullConfig } from '../../crud.config';\nimport { ICrudFilter } from '../../models';\nimport { CrudItemPageBaseComponent } from './base/base.component';\nimport { ItemStandardComponent } from './standard/standard.component';\nimport { CrudService } from '../../services/crud/crud.service';\nimport { PageService } from '../../services/page/page.service';\n\n@Component({\n  selector: 'smart-crud-item-page',\n  imports: [\n    PageComponent,\n    ItemStandardComponent,\n    NgTemplateOutlet,\n    DynamicContentDirective,\n  ],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  template: `\n    <smart-page [options]=\"pageOptions()\" [class]=\"config.cssClass || ''\">\n      <div #topTpl class=\"text-xl py-2.5 separator\"></div>\n      @if (template() === 'default') {\n        <smart-crud-item-standard-page\n          [detailsOptions]=\"detailsOptions()\"\n          [mode]=\"mode\"\n          [uniqueProvider]=\"uniqueProvider()\"\n          (onPartialChange)=\"onPartialChange($event)\"\n          (onChange)=\"onChange($event)\"\n          (onValidChange)=\"onValidChange($event)\"\n        >\n          <ng-container [ngTemplateOutlet]=\"contentTpl\"></ng-container>\n        </smart-crud-item-standard-page>\n      }\n      <ng-template #contentTpl>\n        <ng-content></ng-content>\n      </ng-template>\n      <div class=\"dynamic-content\"></div>\n      <div #bottomTpl class=\"text-xl py-2.5 separator\"></div>\n    </smart-page>\n  `,\n})\nexport class ItemComponent<T extends IEntity<string>>\n  extends CreateDynamicComponent<CrudItemPageBaseComponent<any>>(\n    'crud-item-page',\n  )\n  implements OnInit, OnDestroy\n{\n  private router = inject(Router);\n  private activeRoute = inject(ActivatedRoute);\n  private facade = inject(CrudFacade<T>);\n  private service = inject(CrudService<T>);\n  private dynamicComponentLoader = inject(DynamicComponentLoader<T>);\n  private translateService = inject(TranslateService);\n  public config = inject(CrudFullConfig<T>);\n  private location = inject(Location);\n  private cd = inject(ChangeDetectorRef);\n  private styleService = inject(StyleService);\n  private elementRef = inject(ElementRef);\n  private toastService = inject(ToastService);\n  private pageService = inject(PageService<T>);\n  private detailsService = inject(DetailsService);\n\n  private _mode!: WritableSignal<string>;\n\n  pageOptions: WritableSignal<IPageOptions> = signal({\n    title: '',\n    variant: this.config.variant,\n    showBackButton: true,\n    hideMenuButton: true,\n  });\n  detailsOptions: WritableSignal<IDetailsOptions<T> | undefined> =\n    signal(undefined);\n  id!: string;\n  formValue!: T;\n  formValid = false;\n  item!: T;\n  formPartialValue!: Partial<T>;\n  uniqueProvider: WritableSignal<\n    ((values: Record<keyof T, any>) => Promise<boolean>) | undefined\n  > = signal(undefined);\n\n  set mode(val: string) {\n    this._mode = signal(val);\n    this.refreshDynamicInstance();\n  }\n  get mode(): string {\n    return this._mode();\n  }\n\n  selected: Signal<T>;\n\n  standardComponents = viewChildren(ItemStandardComponent);\n\n  override contentTpl = viewChild<TemplateRef<any>>('contentTpl');\n\n  // Both anchors are plain elements, so they must be read as view containers:\n  // `generateComponents()` drives them with `get`, `createComponent` and\n  // `clear`, and the default read would hand back an `ElementRef`.\n  topTpl = viewChild('topTpl', { read: ViewContainerRef });\n\n  bottomTpl = viewChild('bottomTpl', { read: ViewContainerRef });\n\n  override dynamicContents = viewChildren<DynamicContentDirective>(\n    DynamicContentDirective,\n  );\n\n  subscription = new Subscription();\n\n  constructor() {\n    super();\n\n    this.selected = this.facade.selected;\n\n    effect(() => {\n      this.item = this.facade.selected();\n      this.initPageOptions();\n    });\n  }\n\n  override refreshProperties() {\n    this.baseComponentRef.setInput('detailsOptions', this.detailsOptions());\n    this.baseComponentRef.setInput('mode', this.mode);\n    this.baseComponentRef.setInput('uniqueProvider', this.uniqueProvider());\n    this.subscription.add(\n      this.baseInstance.onPartialChange.subscribe((val) =>\n        this.onPartialChange(val),\n      ),\n    );\n    this.subscription.add(\n      this.baseInstance.onChange.subscribe((val) => this.onChange(val)),\n    );\n    this.subscription.add(\n      this.baseInstance.onValidChange.subscribe((val) =>\n        this.onValidChange(val),\n      ),\n    );\n  }\n\n  async ngOnInit() {\n    this.detailsService.init();\n    this.styleService.init(this.elementRef);\n\n    this.pageService.checkPermissions();\n\n    // The provider has to be in place before the first render: it is part of\n    // the form options, so setting it later hands `smart-form` a new options\n    // object and the group is built a second time. The closure reads `this.id`\n    // lazily, so it can be installed before the route params arrive.\n    this.uniqueProvider.set(async (values) => {\n      const filter: ICrudFilter = {\n        query: [],\n      };\n\n      Object.keys(values).forEach((key) => {\n        filter.query!.push({\n          key: key,\n          value: (values as any)[key],\n          type: '=',\n        });\n      });\n\n      if (this.id) {\n        filter.query!.push({\n          key: 'id',\n          value: this.id,\n          type: '!=',\n        });\n      }\n      const { totalCount } = await this.service.getList(filter);\n\n      return !totalCount;\n    });\n\n    if (this.router.routerState.snapshot.url.split('?')[0].endsWith('/add')) {\n      this.mode = 'create';\n      await this.generateComponents('add');\n    } else {\n      this.mode = this.config.details ? 'details' : 'update';\n\n      if (this.mode === 'update') {\n        await this.generateComponents('edit');\n      }\n\n      this.activeRoute.params\n        .pipe(this.takeUntilDestroy)\n        .subscribe(({ id }) => {\n          this.facade.select(id);\n          this.id = id;\n        });\n\n      this.activeRoute.queryParams\n        .pipe(this.takeUntilDestroy)\n        .subscribe(({ edit }) => {\n          if (edit) {\n            this.mode = 'update';\n            this.generateComponents('edit');\n          }\n        });\n    }\n\n    if (this.config.details) {\n      const compiledComponents: {\n        component: any;\n        factory: Type<any>;\n      }[] = await this.dynamicComponentLoader.getComponentsWithFactories({\n        components: [\n          ...(this.config.details &&\n          (this.config.details as any)['components'] &&\n          (this.config.details as any)['components'].top\n            ? [(this.config.details as any)['components'].top]\n            : []),\n          ...(this.config.details &&\n          (this.config.details as any)['components'] &&\n          (this.config.details as any)['components'].bottom\n            ? [(this.config.details as any)['components'].bottom]\n            : []),\n        ],\n      });\n\n      this.detailsOptions.set({\n        type: this.config.type,\n        item: this.facade.selected,\n        cellPipe: this.config.details\n          ? (this.config.details as { cellPipe?: ICellPipe<T> }).cellPipe\n          : undefined,\n        componentFactories: {\n          top:\n            this.config.details &&\n            (this.config.details as any)['components'] &&\n            (this.config.details as any)['components'].top\n              ? compiledComponents.find(\n                  (cc) =>\n                    cc.component ===\n                    (this.config.details as any)['components'].top,\n                )?.factory\n              : undefined,\n          bottom:\n            this.config.details &&\n            (this.config.details as any)['components'] &&\n            (this.config.details as any)['components'].bottom\n              ? compiledComponents.find(\n                  (cc) =>\n                    cc.component ===\n                    (this.config.details as any)['components'].bottom,\n                )?.factory\n              : undefined,\n        },\n      });\n    }\n\n    this.initPageOptions();\n\n    this.refreshDynamicInstance();\n  }\n\n  override ngOnDestroy() {\n    super.ngOnDestroy();\n\n    this.subscription.unsubscribe();\n  }\n\n  private async generateComponents(mode: 'add' | 'edit') {\n    const compiledComponents =\n      await this.dynamicComponentLoader.getComponentsWithFactories({\n        components: [\n          ...(this.config[mode] &&\n          (this.config[mode] as any)['components'] &&\n          (this.config[mode] as any)['components'].top\n            ? [(this.config[mode] as any)['components'].top]\n            : []),\n          ...(this.config[mode] &&\n          (this.config[mode] as any)['components'] &&\n          (this.config[mode] as any)['components'].bottom\n            ? [(this.config[mode] as any)['components'].bottom]\n            : []),\n        ],\n      });\n\n    const topComponentFactory = compiledComponents.find(\n      (cc) => cc.component === (this.config[mode] as any)['components']?.top,\n    )?.factory;\n\n    const bottomComponentFactory = compiledComponents.find(\n      (cc) => cc.component === (this.config[mode] as any)['components']?.bottom,\n    )?.factory;\n\n    if (!this.topTpl()?.get(0) && topComponentFactory) {\n      this.topTpl()?.createComponent(topComponentFactory);\n    }\n\n    if (!this.bottomTpl()?.get(0) && bottomComponentFactory) {\n      this.bottomTpl()?.createComponent(bottomComponentFactory);\n    }\n  }\n\n  onPartialChange(val: Partial<T>) {\n    this.formPartialValue = val;\n  }\n\n  onChange(val: T) {\n    this.formValue = val;\n  }\n\n  onValidChange(val: boolean) {\n    this.formValid = val;\n  }\n\n  private initPageOptions(): void {\n    // `update` reads the current options without consuming the signal\n    // reactively: this runs inside the constructor effect, and a tracked read\n    // would make the write below re-trigger that effect forever.\n    this.pageOptions.update((options) => ({\n      ...options,\n      title: this.getTitle() || '',\n      endButtons: this.getButtons(),\n    }));\n  }\n\n  private getButtons(): Array<IIconButtonOptions> | undefined {\n    const options = getModelOptions(this.config.type);\n\n    switch (this.mode) {\n      case 'create':\n        return [\n          {\n            icon: 'add',\n            text: 'add',\n            handler: () => {\n              if (this.checkFirstInvalid()) {\n                return;\n              }\n\n              this.facade.create(this.formValue);\n              this.location.back();\n            },\n          },\n        ];\n      case 'update':\n        return [\n          ...(this.config.details\n            ? [\n                {\n                  icon: 'close',\n                  text: 'cancel',\n                  handler: () => {\n                    this.mode = 'details';\n                    this.initPageOptions();\n                    this.topTpl()?.clear();\n                    this.bottomTpl()?.clear();\n                  },\n                  disabled$: new BehaviorSubject(false),\n                },\n              ]\n            : []),\n          {\n            icon: 'save',\n            text: 'save',\n            handler: () => {\n              if (this.checkFirstInvalid()) {\n                return;\n              }\n\n              this.formPartialValue.id = this.id;\n              this.facade.updatePartial(this.formPartialValue as any);\n\n              if (this.config.details) {\n                this.mode = 'details';\n                this.initPageOptions();\n              } else {\n                this.location.back();\n              }\n            },\n          },\n        ];\n      case 'details':\n        return this.config.edit &&\n          (!options?.update?.enabled ||\n            SpecificationService.valid(this.item, options?.update?.enabled))\n          ? [\n              {\n                icon: 'create',\n                text: 'edit',\n                handler: () => {\n                  this.mode = 'update';\n                  this.generateComponents('edit');\n                  this.initPageOptions();\n                },\n                disabled$: new BehaviorSubject(false),\n              },\n            ]\n          : [];\n      default:\n        return undefined;\n    }\n  }\n\n  private getTitle(): string | undefined {\n    const options = getModelOptions(this.config.type);\n\n    const prefix =\n      options.titleKey && this.item\n        ? this.removeParagraph((this.item as any)[options.titleKey]) + ' - '\n        : '';\n\n    switch (this.mode) {\n      case 'create':\n        return 'add';\n      case 'update':\n        return prefix + this.translateService.instant('change');\n      case 'details':\n        return prefix + this.translateService.instant('details');\n      default:\n        return undefined;\n    }\n  }\n\n  private removeParagraph(val: string): string {\n    if (!val || val.indexOf('<p>') !== 0) return val;\n\n    const div = document.createElement('div');\n    div.innerHTML = val;\n\n    const item = div.querySelectorAll('p').item(0);\n\n    return item.innerHTML;\n  }\n\n  private checkFirstInvalid(): boolean {\n    this.cd.detectChanges();\n\n    const host =\n      this.template() === 'default'\n        ? this.standardComponents()[0]\n        : this.baseInstance;\n    const form = host?.getForm();\n\n    this.cd.detectChanges();\n\n    // Nothing has been built yet, so there is nothing valid to submit.\n    if (!form) return true;\n\n    if (form.valid) return false;\n\n    const invalidFields: string[] = [];\n\n    this.getInvalidFields(form, invalidFields, '');\n\n    this.toastService.info({\n      title: this.translateService.instant('INPUT.ERRORS.requires'),\n      message: invalidFields.slice(0, 3).join(', '),\n    });\n\n    return true;\n  }\n\n  private getInvalidFields(\n    control: AbstractControl,\n    invalidFields: any[],\n    baseField: string,\n    key = null,\n  ) {\n    if (control.valid) return;\n\n    const field = key\n      ? baseField + ' > ' + this.translateService.instant('MODEL.' + key)\n      : baseField;\n\n    if (control.errors?.['customMessage']) {\n      invalidFields.push(field + ` (${control.errors['customMessage']})`);\n      return;\n    }\n\n    if (control instanceof UntypedFormControl) {\n      invalidFields.push(field);\n    }\n\n    if (control instanceof UntypedFormGroup) {\n      Object.keys(control.controls).forEach((groupKey) => {\n        this.getInvalidFields(\n          control.controls[groupKey],\n          invalidFields,\n          field,\n          groupKey as any,\n        );\n      });\n    }\n\n    if (control instanceof UntypedFormArray) {\n      control.controls.forEach((c, index) => {\n        this.getInvalidFields(c, invalidFields, field + `(${index + 1})`);\n      });\n    }\n  }\n}\n","import {\n  Directive,\n  inject,\n  input,\n  viewChild,\n  ViewContainerRef,\n} from '@angular/core';\n\nimport {\n  BaseComponent,\n  DynamicComponentType,\n  IListOptions,\n} from '@smartsoft001/angular';\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport { CrudFullConfig } from '../../../crud.config';\n\n@Directive()\nexport abstract class CrudListPageBaseComponent<\n  T extends IEntity<string>,\n> extends BaseComponent {\n  public config = inject(CrudFullConfig<T>);\n\n  static smartType: DynamicComponentType = 'crud-list-page';\n\n  contentTpl = viewChild<ViewContainerRef>('contentTpl');\n\n  listOptions = input<IListOptions<T> | null>();\n}\n","import {\n  Component,\n  computed,\n  inject,\n  Signal,\n  ChangeDetectionStrategy,\n} from '@angular/core';\n\nimport { ListComponent } from '@smartsoft001/angular';\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport { CrudFacade } from '../../../+state/crud.facade';\nimport { FiltersConfigComponent, GroupComponent } from '../../../components';\nimport { CrudFullConfig } from '../../../crud.config';\nimport { CrudListGroupService } from '../../../services/list-group/list-group.service';\nimport { CrudListPageBaseComponent } from '../base/base.component';\n\n@Component({\n  selector: 'smart-crud-list-standard-page',\n  template: `\n    <smart-crud-filters-config></smart-crud-filters-config>\n    @let groups = $safeNavigationMigration(config.list?.groups);\n    @if (listOptions()) {\n      <smart-list\n        [hidden]=\"groups && !isSearch()\"\n        [options]=\"listOptions()!\"\n      ></smart-list>\n    }\n    @if (groups && !isSearch()) {\n      <smart-crud-group\n        [groups]=\"groups\"\n        [listOptions]=\"listOptions() || null\"\n      ></smart-crud-group>\n    }\n  `,\n  imports: [FiltersConfigComponent, ListComponent, GroupComponent],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  providers: [CrudListGroupService],\n})\nexport class ListStandardComponent<\n  T extends IEntity<string>,\n> extends CrudListPageBaseComponent<T> {\n  private readonly facade = inject(CrudFacade<T>);\n  public override readonly config = inject(CrudFullConfig<T>);\n\n  isSearch: Signal<boolean> = computed(\n    () => !!this.facade.filter()?.searchText,\n  );\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, combineLatest } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { ICrudFilter } from '../../models';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class CrudSearchService {\n  private _filterSource = new BehaviorSubject<Partial<ICrudFilter>>({});\n  private _enabledSource = new BehaviorSubject<boolean>(false);\n\n  get filter(): Partial<ICrudFilter> {\n    if (!this._enabledSource.value) return {};\n    return this._filterSource.value || {};\n  }\n\n  get enabled(): boolean {\n    return this._enabledSource.value;\n  }\n\n  enabled$ = this._enabledSource.asObservable();\n\n  filter$: Observable<Partial<ICrudFilter>> = combineLatest([\n    this._filterSource.asObservable(),\n    this.enabled$,\n  ]).pipe(\n    map(([filter, enabled]) => {\n      if (!enabled) return {};\n      return filter;\n    }),\n  );\n\n  setFilter(val: Partial<ICrudFilter>): void {\n    this._filterSource.next(val);\n  }\n\n  setEnabled(val: boolean): void {\n    this._enabledSource.next(val);\n  }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n  ChangeDetectorRef,\n  Component,\n  computed,\n  inject,\n  Injector,\n  input,\n  OnDestroy,\n  OnInit,\n  signal,\n  Signal,\n  TemplateRef,\n  Type,\n  viewChild,\n  viewChildren,\n  ViewContainerRef,\n  WritableSignal,\n  ChangeDetectionStrategy,\n} from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Subject } from 'rxjs';\n\nimport {\n  CreateDynamicComponent,\n  DynamicComponentLoader,\n  DynamicContentDirective,\n  HardwareService,\n  IIconButtonOptions,\n  IListOptions,\n  IPageOptions,\n  ListMode,\n  MenuService,\n  PageComponent,\n} from '@smartsoft001/angular';\nimport { IEntity } from '@smartsoft001/domain-core';\nimport {\n  getModelFieldsWithOptions,\n  getModelOptions,\n  IFieldEditMetadata,\n  IFieldListMetadata,\n} from '@smartsoft001/models';\nimport { SpecificationService } from '@smartsoft001/utils';\n\nimport { CrudFacade } from '../../+state/crud.facade';\nimport { ExportComponent } from '../../components';\nimport { FiltersComponent } from '../../components';\nimport { MultiselectComponent } from '../../components';\nimport { CrudFullConfig } from '../../crud.config';\nimport { CrudListPageBaseComponent } from './base/base.component';\nimport { CrudListPaginationFactory } from '../../factories/list-pagination/list-pagination.factory';\nimport { ICrudFilter } from '../../models';\nimport { ListStandardComponent } from './standard/standard.component';\nimport { PageService } from '../../services/page/page.service';\nimport { CrudSearchService } from '../../services/search/search.service';\n\n@Component({\n  selector: 'smart-crud-list-page',\n  imports: [\n    PageComponent,\n    ListStandardComponent,\n    NgTemplateOutlet,\n    DynamicContentDirective,\n  ],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  template: `\n    @if (filter() && pageOptions()) {\n      <smart-page [options]=\"pageOptions()\" [class]=\"config.cssClass || ''\">\n        <div #topTpl></div>\n\n        @if (template() === 'default' && listOptions()) {\n          <smart-crud-list-standard-page [listOptions]=\"listOptions()\">\n            <ng-container [ngTemplateOutlet]=\"contentTpl\"></ng-container>\n          </smart-crud-list-standard-page>\n        }\n        <ng-template #contentTpl>\n          <ng-content></ng-content>\n        </ng-template>\n        <div class=\"dynamic-content\"></div>\n      </smart-page>\n    }\n  `,\n})\nexport class ListComponent<T extends IEntity<string>>\n  extends CreateDynamicComponent<CrudListPageBaseComponent<any>>(\n    'crud-list-page',\n  )\n  implements OnInit, OnDestroy\n{\n  private facade = inject(CrudFacade<T>);\n  private router = inject(Router);\n  private dynamicComponentLoader = inject(DynamicComponentLoader<T>);\n  private injector = inject(Injector);\n  private cd = inject(ChangeDetectorRef);\n  private menuService = inject(MenuService);\n  private hardwareService = inject(HardwareService);\n  private paginationFacade = inject(CrudListPaginationFactory<T>);\n  private pageService = inject(PageService<T>);\n  public config = inject(CrudFullConfig<T>);\n  private searchService = inject(CrudSearchService);\n\n  private _cleanMultiSelected$ = new Subject<void>();\n\n  pageOptions = signal<IPageOptions | null>(null);\n  listOptions = signal<IListOptions<T> | null>(null);\n  links = this.facade.links;\n\n  filter: Signal<ICrudFilter | undefined> = this.facade.filter;\n\n  topTpl = viewChild<ViewContainerRef>('topTpl');\n\n  override contentTpl = viewChild<TemplateRef<any>>('contentTpl');\n\n  override dynamicContents = viewChildren<DynamicContentDirective>(\n    DynamicContentDirective,\n  );\n\n  override refreshProperties(): void {\n    this.baseComponentRef.setInput('listOptions', this.listOptions());\n  }\n\n  async ngOnInit(): Promise<void> {\n    this.pageService.checkPermissions();\n\n    const options = getModelOptions(this.config.type);\n\n    let newFilter = null;\n\n    if (this.config.list?.resetQuery === 'beforeInit') {\n      newFilter = {\n        query: this.config.baseQuery ? [...this.config.baseQuery] : [],\n        paginationMode: this.config.list?.paginationMode,\n        limit: this.config.pagination\n          ? this.config.pagination.limit\n          : undefined,\n        offset: this.config.pagination ? 0 : undefined,\n        sortBy: this.config.sort\n          ? (this.config.sort as any)['default']\n          : undefined,\n        sortDesc: this.config.sort\n          ? (this.config.sort as any)['defaultDesc']\n          : undefined,\n        ...this.searchService.filter,\n      };\n    } else if (this.filter()) {\n      newFilter = this.filter();\n    } else {\n      newFilter = {\n        paginationMode: this.config.list?.paginationMode,\n        limit: this.searchService.filter?.limit\n          ? this.searchService.filter.limit\n          : this.config.pagination\n            ? this.config.pagination.limit\n            : undefined,\n        offset:\n          this.searchService.filter?.offset ||\n          this.searchService.filter?.offset === 0\n            ? this.searchService.filter.offset\n            : this.config.pagination\n              ? 0\n              : undefined,\n        sortBy: this.searchService.filter?.sortBy\n          ? this.searchService.filter.sortBy\n          : this.config.sort\n            ? (this.config.sort as any)['default']\n            : undefined,\n        sortDesc: this.searchService.filter?.sortDesc\n          ? this.searchService.filter.sortDesc\n          : this.config.sort\n            ? (this.config.sort as any)['defaultDesc']\n            : undefined,\n        query: this.config.baseQuery ? [...this.config.baseQuery] : [],\n        ...this.searchService.filter,\n      };\n    }\n\n    this.facade.read(newFilter);\n\n    const endButtons = this.getEndButtons();\n\n    this.pageOptions.set({\n      title: this.config.title || '',\n      variant: this.config.variant,\n      search: this.config.search\n        ? {\n            text: computed(() => this.filter()?.searchText ?? ''),\n            set: (txt) => {\n              if (txt !== this.filter()?.searchText)\n                this.facade.read({\n                  ...this.filter(),\n                  searchText: txt,\n                  offset: 0,\n                });\n            },\n          }\n        : undefined,\n      endButtons: endButtons,\n    });\n\n    const compiledComponents =\n      await this.dynamicComponentLoader.getComponentsWithFactories({\n        components: [\n          ...(this.config.details &&\n          typeof this.config.details === 'object' &&\n          'components' in this.config.details &&\n          this.config.details.components?.top\n            ? [this.config.details.components.top]\n            : []),\n          ...(this.config.details &&\n          typeof this.config.details === 'object' &&\n          'components' in this.config.details &&\n          this.config.details.components?.bottom\n            ? [this.config.details.components.bottom]\n            : []),\n          ...(this.config.list &&\n          typeof this.config.list === 'object' &&\n          'components' in this.config.list &&\n          this.config.list.components?.top\n            ? [this.config.list.components.top]\n            : []),\n        ],\n      });\n\n    this.listOptions.set({\n      provider: {\n        getData: (filter): void => {\n          const global = {\n            ...this.filter(),\n            ...filter,\n          };\n          this.facade.read(global);\n        },\n        onChangeMultiSelected: async (list) => {\n          if (list.length && !this.menuService.openedEnd) {\n            await this.menuService.openEnd({\n              injector: this.injector,\n              component: MultiselectComponent,\n            });\n          } else if (!list.length && this.menuService.openedEnd) {\n            await this.menuService.closeEnd();\n          }\n\n          this.facade.multiSelect(list);\n        },\n        list: computed(() => this.facade.list() || []),\n        loading: this.facade.loading,\n        onCleanMultiSelected$: this._cleanMultiSelected$,\n      },\n      cellPipe: this.config.list ? this.config.list.cellPipe : undefined,\n      mode: this.config.list?.mode,\n      type: this.config.type,\n      details: this.config.details\n        ? {\n            provider: {\n              getData: (id) => {\n                this.facade.select(id);\n              },\n              clearData: () => {\n                this.facade.unselect();\n              },\n              item: this.facade.selected,\n              loading: this.facade.loading,\n            },\n            componentFactories: {\n              top:\n                this.config.details &&\n                typeof this.config.details === 'object' &&\n                'components' in this.config.details &&\n                this.config.details.components?.top\n                  ? compiledComponents.find(\n                      (cc) =>\n                        cc.component ===\n                        (this.config.details as any).components.top,\n                    )?.factory\n                  : undefined,\n              bottom:\n                this.config.details &&\n                typeof this.config.details === 'object' &&\n                'components' in this.config.details &&\n                this.config.details.components?.bottom\n                  ? compiledComponents.find(\n                      (cc) =>\n                        cc.component ===\n                        (this.config.details as any).components.bottom,\n                    )?.factory\n                  : undefined,\n            },\n          }\n        : undefined,\n      item:\n        !!this.config.edit || this.config.details\n          ? {\n              options: {\n                routingPrefix: '/' + this.router.routerState.snapshot.url + '/',\n                edit: !!this.config.edit,\n              },\n            }\n          : undefined,\n      remove: this.config.remove\n        ? {\n            provider: {\n              invoke: (id) => this.facade.delete(id),\n              check: (item: T) => {\n                return options?.remove?.enabled\n                  ? SpecificationService.valid(item, options?.remove?.enabled)\n                  : true;\n              },\n            },\n          }\n        : undefined,\n      pagination: await this.paginationFacade.create({\n        mode: this.config.list?.paginationMode,\n        limit: this.config.pagination?.limit ?? 0,\n        provider: {\n          getFilter: () => {\n            return this.filter() || ({} as ICrudFilter);\n          },\n          getLinks: () => this.links(),\n        },\n      }),\n      sort: this.getListSort(newFilter),\n    });\n\n    this.cd.detectChanges();\n\n    this.initCloseMenu();\n    this.initTopComponent(compiledComponents);\n\n    this.refreshDynamicInstance();\n  }\n\n  /**\n   * The sort the list headers start from: the one of the first read (the\n   * search filter, else `config.sort.default`). A header click reads again\n   * through `provider.getData({ offset: 0, sortBy, sortDesc })`.\n   */\n  private getListSort(\n    filter: ICrudFilter | undefined,\n  ): IListOptions<T>['sort'] {\n    if (!this.config.sort) return undefined;\n\n    return { default: filter?.sortBy, defaultDesc: filter?.sortDesc };\n  }\n\n  private initCloseMenu() {\n    this.router.events.pipe(this.takeUntilDestroy).subscribe(async () => {\n      await this.clear();\n    });\n  }\n\n  private async clear() {\n    await this.menuService.closeEnd();\n\n    this.listOptions.update((val) => ({\n      ...(val as IListOptions<T>),\n      select: undefined,\n    }));\n\n    this.facade.multiSelect([]);\n  }\n\n  private getEndButtons(): Array<IIconButtonOptions> {\n    const fieldsWithOptions = getModelFieldsWithOptions(new this.config.type());\n    const modelOptions = getModelOptions(this.config.type);\n\n    const showFilters =\n      fieldsWithOptions.some(\n        (x) => (x.options?.list as IFieldListMetadata)?.filter,\n      ) || modelOptions?.filters?.length;\n\n    const showMultiEdit =\n      this.config.list?.components?.multi ||\n      (this.config.edit &&\n        fieldsWithOptions.some(\n          (x) => (x.options?.update as IFieldEditMetadata)?.multi,\n        ) &&\n        !this.hardwareService.isMobile &&\n        (!this.config?.list?.mode ||\n          this.config?.list?.mode === ListMode.desktop));\n\n    return [\n      ...(showMultiEdit\n        ? [\n            {\n              icon: 'checkbox-outline',\n              text: 'multi',\n              handler: () => {\n                this.facade.multiSelect([]);\n                this._cleanMultiSelected$.next();\n\n                setTimeout(async () => {\n                  this.listOptions.update((val) => ({\n                    ...(val as IListOptions<T>),\n                    select: val?.select === 'multi' ? undefined : 'multi',\n                  }));\n                  if (this.menuService.openedEnd)\n                    await this.menuService.closeEnd();\n                  this.cd.detectChanges();\n                });\n              },\n            },\n          ]\n        : []),\n      ...(showFilters\n        ? [\n            {\n              icon: 'filter-outline',\n              text: 'filters',\n              handler: async () => {\n                await this.menuService.openEnd({\n                  injector: this.injector,\n                  component: FiltersComponent,\n                });\n              },\n            },\n          ]\n        : []),\n      ...(this.config.add\n        ? [\n            {\n              icon: 'add',\n              text: 'add',\n              handler: () => {\n                this.router.navigate([\n                  '/' + this.router.routerState.snapshot.url + '/add',\n                ]);\n              },\n            },\n          ]\n        : []),\n      ...(this.config.export\n        ? [\n            {\n              text: 'export',\n              icon: 'download-outline',\n              type: 'popover' as const,\n              component: ExportComponent,\n            },\n          ]\n        : []),\n      ...(this.config.buttons ? this.config.buttons : []),\n    ];\n  }\n\n  private initTopComponent(\n    compiledComponents: {\n      component: any;\n      factory: Type<any>;\n    }[],\n  ) {\n    const factory =\n      this.config.list &&\n      typeof this.config.list === 'object' &&\n      'components' in this.config.list &&\n      this.config.list.components?.top\n        ? compiledComponents.find(\n            (cc) => cc.component === (this.config.list as any).components.top,\n          )?.factory\n        : null;\n\n    setTimeout(() => {\n      if (factory && !this.topTpl()?.get(0)) {\n        this.topTpl()?.createComponent(factory);\n      }\n    });\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { Store } from '@ngrx/store';\n\nimport { NgrxStoreService, SharedModule } from '@smartsoft001/angular';\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport { getReducer, CrudFacade } from './+state';\nimport { CrudEffects } from './+state/crud.effects';\nimport { CrudComponentsModule } from './components';\nimport { CrudConfig } from './crud.config';\nimport { CrudListPaginationFactory } from './factories/list-pagination/list-pagination.factory';\nimport { ListComponent } from './pages';\nimport { ItemComponent } from './pages';\nimport { ListStandardComponent } from './pages';\nimport { ItemStandardComponent } from './pages';\nimport { CrudPipesModule } from './pipes';\nimport { CrudService } from './services/crud/crud.service';\nimport { CrudListGroupService } from './services/list-group/list-group.service';\nimport { PageService } from './services/page/page.service';\n\nexport const PAGES = [\n  ItemComponent,\n  ListComponent,\n  ListStandardComponent,\n  ItemStandardComponent,\n];\n\n@NgModule({\n  imports: [\n    ...PAGES,\n    SharedModule,\n    CrudPipesModule,\n    RouterModule.forChild([\n      { path: '', component: ListComponent },\n      { path: 'add', component: ItemComponent },\n      { path: ':id', component: ItemComponent },\n    ]),\n    FormsModule,\n    CommonModule,\n    CrudComponentsModule,\n  ],\n  exports: [...PAGES, CrudComponentsModule],\n  providers: [\n    CrudService,\n    CrudListGroupService,\n    PageService,\n    CrudFacade,\n    CrudEffects,\n    CrudListPaginationFactory,\n  ],\n})\nexport class CrudFullModule<T extends IEntity<string>> {\n  constructor(\n    config: CrudConfig<T>,\n    effects: CrudEffects<any>,\n    store: Store<any>,\n  ) {\n    NgrxStoreService.addReducer(\n      config.entity,\n      config.reducerFactory\n        ? config.reducerFactory()\n        : getReducer(config.entity),\n      store,\n    );\n    effects.init();\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Store } from '@ngrx/store';\n\nimport {\n  FILE_SERVICE_CONFIG,\n  IFileServiceConfig,\n  IModelLabelProvider,\n  NgrxStoreService,\n  SharedModule,\n} from '@smartsoft001/angular';\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport { getReducer } from './+state';\nimport { CrudEffects } from './+state/crud.effects';\nimport { CrudFacade } from './+state/crud.facade';\nimport { CrudComponentsModule } from './components';\nimport { CrudFullModule } from './crud-full.module';\nimport { CrudConfig, CrudFullConfig } from './crud.config';\nimport { CrudListPaginationFactory } from './factories/list-pagination/list-pagination.factory';\nimport { CrudPipesModule } from './pipes';\nimport { CrudModelLabelProvider } from './providers/model-label/model-label.provider';\nimport { CrudService } from './services/crud/crud.service';\nimport { CrudListGroupService } from './services/list-group/list-group.service';\nimport { PageService } from './services/page/page.service';\nimport {\n  NotSocketService,\n  SocketService,\n} from './services/socket/socket.service';\n\n@NgModule({\n  imports: [\n    SharedModule,\n    CrudPipesModule,\n    FormsModule,\n    CommonModule,\n    CrudComponentsModule,\n  ],\n  exports: [CrudComponentsModule],\n  providers: [\n    CrudService,\n    CrudListGroupService,\n    CrudEffects,\n    PageService,\n    CrudFacade,\n    SocketService,\n    CrudListPaginationFactory,\n    { provide: IModelLabelProvider, useClass: CrudModelLabelProvider },\n  ],\n})\nexport class CrudCoreModule<T extends IEntity<string>> {\n  constructor(\n    config: CrudConfig<T>,\n    effects: CrudEffects<any>,\n    store: Store<any>,\n  ) {\n    NgrxStoreService.addReducer(\n      config.entity,\n      config.reducerFactory\n        ? config.reducerFactory()\n        : getReducer(config.entity),\n      store,\n    );\n    effects.init();\n  }\n}\n\n@NgModule({\n  providers: [\n    CrudService,\n    CrudListGroupService,\n    CrudEffects,\n    PageService,\n    CrudFacade,\n    CrudListPaginationFactory,\n  ],\n})\nexport class CrudModule<T extends IEntity<string>> {\n  static forFeature<T extends IEntity<string>>(\n    options:\n      ICrudModuleOptionsWithRoutng<T> | ICrudModuleOptionsWithoutRoutng<T>,\n  ): ModuleWithProviders<CrudModule<any>> {\n    return {\n      ngModule: options.routing ? CrudFullModule : CrudCoreModule,\n      providers: [\n        { provide: CrudConfig, useValue: options.config },\n        { provide: CrudFullConfig, useValue: options.config },\n        {\n          provide: FILE_SERVICE_CONFIG,\n          useValue: { apiUrl: options.config.apiUrl } as IFileServiceConfig,\n        },\n        ...(options.socket\n          ? [SocketService]\n          : [{ provide: SocketService, useClass: NotSocketService }]),\n      ],\n    };\n  }\n\n  constructor(\n    config: CrudConfig<T>,\n    effects: CrudEffects<any>,\n    store: Store<any>,\n  ) {\n    NgrxStoreService.addReducer(\n      config.entity,\n      config.reducerFactory\n        ? config.reducerFactory()\n        : getReducer(config.entity),\n      store,\n    );\n    effects.init();\n  }\n}\n\nexport interface ICrudModuleOptionsWithRoutng<T> {\n  config: CrudFullConfig<T>;\n  socket?: boolean;\n  routing: true;\n}\n\nexport interface ICrudModuleOptionsWithoutRoutng<T> {\n  config: CrudConfig<T>;\n  socket?: boolean;\n  routing: false;\n}\n"],"mappings":"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"}