{"version":3,"file":"controladad-ng-base.mjs","sources":["../../../../libs/base/src/configs/tokens.ts","../../../../libs/base/src/configs/icons.ts","../../../../libs/base/src/configs/global-config.ts","../../../../libs/base/src/core/interceptors/api.interceptor.ts","../../../../libs/base/src/core/states/_base.store.ts","../../../../libs/base/src/core/states/app-base.store.ts","../../../../libs/base/src/core/helpers/errors.helper.ts","../../../../libs/base/src/core/helpers/date.helper.ts","../../../../libs/base/src/core/helpers/text.helper.ts","../../../../libs/base/src/core/helpers/router.helper.ts","../../../../libs/base/src/core/helpers/signal.helper.ts","../../../../libs/base/src/core/helpers/object.helper.ts","../../../../libs/base/src/core/helpers/observable.helper.ts","../../../../libs/base/src/core/helpers/array.helper.ts","../../../../libs/base/src/core/helpers/role.helper.ts","../../../../libs/base/src/core/helpers/providers.helper.ts","../../../../libs/base/src/shared/classes/sort-model.ts","../../../../libs/base/src/shared/classes/selection-model.ts","../../../../libs/base/src/shared/data/index.ts","../../../../libs/base/src/shared/classes/filter-model.ts","../../../../libs/base/src/shared/components/ui/icon/icon.component.ts","../../../../libs/base/src/shared/components/ui/icon/icon.component.html","../../../../libs/base/src/shared/components/ui/button/button.component.ts","../../../../libs/base/src/shared/components/ui/button/button.component.html","../../../../libs/base/src/shared/components/ui/checkbox/checkbox.component.ts","../../../../libs/base/src/shared/components/ui/checkbox/checkbox.component.html","../../../../libs/base/src/shared/components/ui/checkbox-group/checkbox-group.component.ts","../../../../libs/base/src/shared/components/ui/checkbox-group/checkbox-group.component.html","../../../../libs/base/src/shared/components/ui/chips/chips.component.ts","../../../../libs/base/src/shared/components/ui/chips/chips.component.html","../../../../libs/base/src/shared/components/ui/chips-group/chips-group.component.ts","../../../../libs/base/src/shared/components/ui/chips-group/chips-group.component.html","../../../../libs/base/src/shared/components/ui/control-error/control-error.component.ts","../../../../libs/base/src/shared/components/ui/control-error/control-error.component.html","../../../../libs/base/src/shared/directives/ui-radio-compare-with.directive.ts","../../../../libs/base/src/shared/directives/permission-hide.directive.ts","../../../../libs/base/src/shared/directives/for-number.directive.ts","../../../../libs/base/src/shared/directives/tooltip.directive.ts","../../../../libs/base/src/shared/directives/mask/config.ts","../../../../libs/base/src/shared/directives/mask/input-mask.directive.ts","../../../../libs/base/src/shared/directives/mask/constants.ts","../../../../libs/base/src/shared/directives/ng-is-in-view.directive.ts","../../../../libs/base/src/shared/components/ui/select-options/select-options.component.ts","../../../../libs/base/src/shared/components/ui/select-options/select-options.component.html","../../../../libs/base/src/shared/components/ui/select-options/select-options-trigger-for.directive.ts","../../../../libs/base/src/shared/components/ui/field/field.component.ts","../../../../libs/base/src/shared/components/ui/field/field.component.html","../../../../libs/base/src/shared/components/ui/date-picker/date-picker.component.ts","../../../../libs/base/src/shared/components/ui/date-picker/date-picker.component.html","../../../../libs/base/src/shared/components/ui/license-plate/license-plate.component.ts","../../../../libs/base/src/shared/components/ui/license-plate/license-plate.component.html","../../../../libs/base/src/shared/components/ui/pagination/pagination.component.ts","../../../../libs/base/src/shared/components/ui/pagination/pagination.component.html","../../../../libs/base/src/shared/components/ui/radio/radio.component.ts","../../../../libs/base/src/shared/components/ui/radio/radio.component.html","../../../../libs/base/src/shared/components/ui/slider/slider.component.ts","../../../../libs/base/src/shared/components/ui/slider/slider.component.html","../../../../libs/base/src/shared/components/ui/switch/switch.component.ts","../../../../libs/base/src/shared/components/ui/switch/switch.component.html","../../../../libs/base/src/shared/components/ui/tabs/tabs.component.ts","../../../../libs/base/src/shared/components/ui/tabs/tabs.component.html","../../../../libs/base/src/shared/components/ui/loader-screen/loader-screen.component.ts","../../../../libs/base/src/shared/components/ui/loader-screen/loader-screen.component.html","../../../../libs/base/src/shared/components/ui/skeleton/skeleton.component.ts","../../../../libs/base/src/shared/components/ui/skeleton/skeleton.component.html","../../../../libs/base/src/shared/components/ui/field-view/field-view.component.ts","../../../../libs/base/src/shared/components/ui/field-view/field-view.component.html","../../../../libs/base/src/shared/components/features/bottom-controls/bottom-controls.component.ts","../../../../libs/base/src/shared/components/features/bottom-controls/bottom-controls.component.html","../../../../libs/base/src/shared/components/layouts/dialog-layout/dialog-layout.component.ts","../../../../libs/base/src/shared/components/layouts/dialog-layout/dialog-layout.component.html","../../../../libs/base/src/shared/components/features/form-builder/form-builder.ts","../../../../libs/base/src/shared/components/features/form-builder/control-builder.component.ts","../../../../libs/base/src/shared/components/features/form-builder/control-builder.component.html","../../../../libs/base/src/shared/components/features/form-builder/form-builder.component.ts","../../../../libs/base/src/shared/components/features/form-builder/form-builder.component.html","../../../../libs/base/src/shared/components/features/license-plate-select/license-plate-select.component.ts","../../../../libs/base/src/shared/components/features/license-plate-select/license-plate-select.component.html","../../../../libs/base/src/shared/components/features/login-form/login-form.component.ts","../../../../libs/base/src/shared/components/features/login-form/login-form.component.html","../../../../libs/base/src/shared/components/features/printable-table/printable-table.component.ts","../../../../libs/base/src/shared/components/features/printable-table/printable-table.component.html","../../../../libs/base/src/shared/components/features/snackbar/snackbar-base/snackbar-base.component.ts","../../../../libs/base/src/shared/components/features/snackbar/snackbar-base/snackbar-base.component.html","../../../../libs/base/src/shared/components/features/snackbar/snackbar.service.ts","../../../../libs/base/src/shared/components/features/table/table-filter-bar/table-filter-bar.component.ts","../../../../libs/base/src/shared/components/features/table/table-filter-bar/table-filter-bar.component.html","../../../../libs/base/src/shared/components/features/table/table-form-menu/table-form-menu.component.ts","../../../../libs/base/src/shared/components/features/table/table-form-menu/table-form-menu.component.html","../../../../libs/base/src/shared/components/features/table/columns/_table_col_base.ts","../../../../libs/base/src/shared/components/features/table/columns/table-col-selection/table-col-selection.component.ts","../../../../libs/base/src/shared/components/features/table/columns/table-col-selection/table-col-selection.component.html","../../../../libs/base/src/shared/components/features/table/columns/table-col-index/table-col-index.component.ts","../../../../libs/base/src/shared/components/features/table/columns/table-col-index/table-col-index.component.html","../../../../libs/base/src/shared/components/features/table/table-filter-menu/table-filter-menu.component.ts","../../../../libs/base/src/shared/components/features/table/table-filter-menu/table-filter-menu.component.html","../../../../libs/base/src/shared/components/features/table/table-filter/table-filter.component.ts","../../../../libs/base/src/shared/components/features/table/table-filter/table-filter.component.html","../../../../libs/base/src/shared/components/features/table/table-sort/table-sort.component.ts","../../../../libs/base/src/shared/components/features/table/table-sort/table-sort.component.html","../../../../libs/base/src/shared/pipes/badge.pipe.ts","../../../../libs/base/src/shared/pipes/typeof.pipe.ts","../../../../libs/base/src/shared/pipes/datefns.pipe.ts","../../../../libs/base/src/shared/components/features/table/columns/table-col-default/table-col-default.component.ts","../../../../libs/base/src/shared/components/features/table/columns/table-col-default/table-col-default.component.html","../../../../libs/base/src/shared/components/features/table/columns/table-col-action/table-col-action.component.ts","../../../../libs/base/src/shared/components/features/table/columns/table-col-action/table-col-action.component.html","../../../../libs/base/src/shared/components/features/table/table-header/table-header.component.ts","../../../../libs/base/src/shared/components/features/table/table-header/table-header.component.html","../../../../libs/base/src/shared/components/dialog/components/_base-dialog.component.ts","../../../../libs/base/src/shared/components/dialog/components/prompt-dialog/prompt-dialog.component.ts","../../../../libs/base/src/shared/components/dialog/components/prompt-dialog/prompt-dialog.component.html","../../../../libs/base/src/shared/components/dialog/dialog-invoker.service.ts","../../../../libs/base/src/shared/components/dialog/components/input-dialog/input-dialog.component.ts","../../../../libs/base/src/shared/components/dialog/components/input-dialog/input-dialog.component.html","../../../../libs/base/src/shared/components/dialog/components/description-dialog/description-dialog.component.ts","../../../../libs/base/src/shared/components/dialog/components/description-dialog/description-dialog.component.html","../../../../libs/base/src/shared/components/dialog/components/change-password-dialog/change-password-dialog.component.ts","../../../../libs/base/src/shared/components/dialog/components/change-password-dialog/change-password-dialog.component.html","../../../../libs/base/src/shared/components/dialog/components/calendar-dialog/calendar-dialog.component.ts","../../../../libs/base/src/shared/components/dialog/components/calendar-dialog/calendar-dialog.component.html","../../../../libs/base/src/shared/components/dialog/dialog.service.ts","../../../../libs/base/src/shared/components/features/table/table.component.ts","../../../../libs/base/src/shared/components/features/table/table.component.html","../../../../libs/base/src/shared/components/features/table/adapters/table-strapi-adapter.service.ts","../../../../libs/base/src/shared/components/features/initialize-protection/initialize-protection.component.ts","../../../../libs/base/src/shared/components/features/initialize-protection/initialize-protection.component.html","../../../../libs/base/src/shared/components/features/image-uploader/image-uploader.component.ts","../../../../libs/base/src/shared/components/features/image-uploader/image-uploader.component.html","../../../../libs/base/src/core/states/auth-base.store.ts","../../../../libs/base/src/core/interceptors/token.interceptor.ts","../../../../libs/base/src/core/interceptors/error.interceptor.ts","../../../../libs/base/src/core/adapters/material-datefns-jalali.adapter.ts","../../../../libs/base/src/core/adapters/get-offline.adapter.ts","../../../../libs/base/src/core/guards/auth.guard.ts","../../../../libs/base/src/core/guards/non-auth.guard.ts","../../../../libs/base/src/core/services/route-helper.service.ts","../../../../libs/base/src/core/services/_base-api.ts","../../../../libs/base/src/core/guards/permission.guard.ts","../../../../libs/base/src/core/models/api.model.ts","../../../../libs/base/src/globals.ts","../../../../libs/base/src/providers.ts","../../../../libs/base/src/controladad-ng-base.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const API_BASEURL = new InjectionToken<string>('API_BASEURL');\nexport const ENVIRONMENT = new InjectionToken<any>('ENVIRONMENT');\n","import { inject } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { MatIconRegistry } from '@angular/material/icon';\n\n// prettier-ignore\nconst baseIcons = [\n  'add', 'arrow-down', 'arrow-up', 'arrow-left', 'arrow-right', 'calendar', 'camera', 'check', 'check-double',\n  'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'clock', 'close', 'delete', 'dropdown', 'edit',\n  'edit-box', 'error', 'excel-file', 'eye', 'eye-slash', 'filter', 'filter-filled', 'hashtag', 'info', 'info-circle',\n  'list', 'location', 'location-check', 'login', 'logout', 'menu', 'nav', 'numeric-down', 'numeric-up', 'paper',\n  'paper-details', 'password', 'phone', 'plate', 'play', 'plus', 'power', 'print', 'question-circle', 'refresh',\n  'reports', 'save', 'search', 'settings', 'sort', 'sort-down', 'sort-up', 'time', 'trash', 'trash-alt', 'user',\n  'user-circle', 'users', 'wrench'\n] as const;\n\nexport type BASE_ICONS = (typeof baseIcons)[number];\n\nlet isBaseRegistered = false;\nexport function registerIcons(icons?: string[]) {\n  const sanitizer = inject(DomSanitizer);\n  const iconRegistry = inject(MatIconRegistry);\n\n  if (!isBaseRegistered) {\n    for (const icon of baseIcons) {\n      iconRegistry.addSvgIcon(icon, sanitizer.bypassSecurityTrustResourceUrl(`./assets/base/icons/${icon}.svg`));\n    }\n    isBaseRegistered = true;\n  }\n\n  for (const icon of icons ?? []) {\n    iconRegistry.addSvgIcon(icon, sanitizer.bypassSecurityTrustResourceUrl(`./assets/icons/${icon}.svg`));\n  }\n}\n","export interface CacBaseLocalizationConfig {\n  // array of supported languages, the first index will be selected as default.\n  //\n  // Default Value: ['en']\n  langs: string[];\n  localesPath?: string;\n  localesData?: { [p: string]: { dateLocale?: any; dateFormats?: any; localeData?: any } };\n\n  forceDateFnsLib?: 'jalali' | 'georgian' | undefined,\n}\n\nexport class CacGlobalConfig {\n  // Do not change this variable manually, it's automatically updated via the provider.\n  static defaultLang = 'en';\n  static applicationName = '';\n  static localization: CacBaseLocalizationConfig = {\n    langs: ['en'],\n  };\n  // applies application name to store keys, for example if your store key is `auth`, it will become `app_name_auth`\n  static applyPrefixToStorageKeys = true;\n\n  static generateStoreKey(key: string) {\n    return `${this.applyPrefixToStorageKeys && this.applicationName.length ? `${this.applicationName}_` : ''}${key}`;\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { API_BASEURL } from '../../configs';\n\n@Injectable()\nexport class ApiInterceptor implements HttpInterceptor {\n  readonly apiBaseUrl = inject(API_BASEURL);\n\n  // using inject() causes circular error, idk why...\n  // readonly apiBaseUrl = inject(API_BASEURL);\n\n  intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n    request = request.clone({\n      url: request.url.startsWith('/') ? this.apiBaseUrl + request.url : request.url,\n    });\n    return next.handle(request);\n  }\n}\n","import { createStore, Store, withProps } from '@ngneat/elf';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { localStorageStrategy, persistState, StateStorage } from '@ngneat/elf-persist-state';\nimport { CacGlobalConfig } from '../../configs';\nimport { Signal } from '@angular/core';\n\nexport class BaseStore<T extends object> {\n  public state$;\n  public signal!: Signal<T | undefined>;\n  public store: Store<any, T>;\n\n  constructor(public storeOpts: {\n    key: string;\n    // ignore mutations in key such as applying application as prefix (mutations can be controlled from Global Config)\n    exactKey?: boolean;\n    default?: T;\n    // defaults to localStorage\n    storageStrategy?: StateStorage;\n  }) {\n    const key = storeOpts.exactKey ? storeOpts.key : CacGlobalConfig.generateStoreKey(storeOpts.key);\n    const store = createStore({ name: key }, withProps<T>(storeOpts.default ?? {} as never));\n    persistState(store, {\n      key: key,\n      storage: storeOpts.storageStrategy ?? localStorageStrategy,\n    });\n\n    this.store = store;\n    this.state$ = this.store.pipe();\n\n    try {\n      this.signal = toSignal(this.state$);\n    } catch { /* empty */ }\n  }\n\n  get state() {\n    return this.get();\n  }\n\n  get() {\n    return this.store.getValue();\n  }\n\n  patch(value: Partial<T>) {\n    return this.store.update((s) => ({\n      ...s,\n      ...value,\n    }));\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { select } from '@ngneat/elf';\nimport { BaseStore } from './_base.store';\nimport { CacGlobalConfig } from '../../configs';\n\nexport interface AppBaseStoreProps {\n  rememberMe?: boolean;\n  lang?: string;\n}\n\nexport class _AppBaseStore<T extends AppBaseStoreProps> extends BaseStore<T> {\n  constructor(defaults?: T) {\n    super({\n      key: 'app',\n      default: defaults,\n    });\n  }\n\n  rememberMe$ = this.store.pipe(select(this.rememberMe));\n  lang$ = this.store.pipe(select(this.lang));\n\n  rememberMe() {\n    return this.get().rememberMe ?? false;\n  }\n\n  setRememberMe(value: boolean) {\n    // @ts-ignore\n    this.patch({\n      rememberMe: value,\n    });\n  }\n\n  lang() {\n    return this.get().lang ?? CacGlobalConfig.defaultLang;\n  }\n\n  setLang(value: string) {\n    // @ts-ignore\n    this.patch({\n      lang: value,\n    });\n  }\n}\n\n// This is dummy, used to make service out of the `_AppBaseStore`. For extension, `_AppBaseStore` should be used\n@Injectable({\n  providedIn: 'root',\n})\nexport class AppBaseStore extends _AppBaseStore<AppBaseStoreProps> {\n  constructor() {\n    super();\n  }\n}\n","import { APIError } from '../models';\n\nconst SERVER_ERROR = {\n  0: $localize`:@@base.errors.server.0:Error connecting, Check your network connection.`,\n  401: $localize`:@@base.errors.server.401:Your session has expired, please login again.`,\n  403: $localize`:@@base.errors.server.403:You do not have permission to continue.`,\n  404: $localize`:@@base.errors.server.404:The requested destination was not found.`,\n  500: $localize`:@@base.errors.server.500:An error occurred on the server.`,\n  503: $localize`:@@base.errors.server.503:The server is unavailable.`,\n  default: $localize`:@@base.errors.server.default:Error.`,\n} as const;\n\nconst API_ERROR = {\n  1: $localize`:@@base.errors.api.default:Username or Password is incorrect`,\n} as const;\n\nexport class ErrorHelper {\n\n  static getResponseErrorMessage(serverCode: number, apiError?: APIError) {\n    return serverCode === 400 && apiError ? this.getApiErrorMessage(apiError) : this.getServerErrorMessage(serverCode);\n  }\n\n  static getServerErrorMessage(status: number) {\n    return SERVER_ERROR[status as never] ?? SERVER_ERROR.default;\n  }\n\n  static getApiErrorMessage(error: { code: number; message: string }) {\n    return API_ERROR[error.code as never] ?? error.message;\n  }\n\n  // we pass the error object, returned by the api to this function\n  static parseApiErrorObject(error: any): APIError | undefined {\n    if (!error) return undefined;\n    if (typeof error === 'object') {\n      if ('error' in error && typeof error.error === 'string') {\n        return error.error;\n      }\n      if ('errors' in error && typeof error.errors === 'object') {\n        const message = this.extractMessageFromObjectRecord(error.errors);\n        return message\n          ? {\n              code: -1,\n              message,\n            }\n          : undefined;\n      }\n      if ('error' in error && typeof error === 'object' && 'code' in error.error && 'message' in error.error) {\n        return this.parseApiErrorObject(error.error);\n      }\n      return error;\n    } else if (typeof error === 'string') {\n      try {\n        return JSON.parse(error);\n      } catch {\n        return {\n          code: -1,\n          message: error,\n        };\n      }\n    }\n    return undefined;\n  }\n\n  private static extractMessageFromObjectRecord(object: any): string | undefined {\n    const values = Object.values(object);\n    for (const value of values) {\n      if (value instanceof Array && value.length > 0) {\n        return value[0];\n      } else if (typeof value === 'string') {\n        return value;\n      }\n    }\n    return undefined;\n  }\n}\n","import * as jalali from 'date-fns-jalali';\nimport * as dateFns from 'date-fns';\nimport { getStore } from '@ngneat/elf';\nimport { CacGlobalConfig } from '../../configs';\n\nlet _cachedDateFns: typeof dateFns;\n// Get DateFns library based on current language\nexport function DateFns(): typeof dateFns {\n  if (_cachedDateFns) return _cachedDateFns;\n\n  if (CacGlobalConfig.localization.forceDateFnsLib === 'jalali') _cachedDateFns = jalali as any;\n  else if (CacGlobalConfig.localization.forceDateFnsLib === 'georgian') _cachedDateFns = dateFns;\n  else {\n    const store = getStore<any>(CacGlobalConfig.generateStoreKey('app'));\n    _cachedDateFns = (store?.getValue().lang === 'fa' ? jalali : dateFns) as any;\n  }\n\n  return _cachedDateFns;\n}\n\nexport function getDatesIntervalInHHMMSS(start: Date, end: Date, showSymbol?: boolean) {\n  const hours = Math.abs(DateFns().differenceInHours(start, end));\n  const duration = DateFns().intervalToDuration({ start, end });\n\n  const result = {\n    hours,\n    minutes: duration.minutes,\n    seconds: duration.seconds,\n    negative: start > end,\n  };\n  return {\n    formatted: `${result.hours?.toFixed().padStart(2, '0')}:${result.minutes\n      ?.toFixed()\n      .padStart(2, '0')}:${result.seconds?.toFixed().padStart(2, '0')}${\n      showSymbol ? ` (${result.negative ? '-' : '+'})` : ''\n    }`,\n    ...result,\n  };\n}\n\nexport function getFormattedDate(date: string | Date | undefined, format = 'yyyy/MM/dd') {\n  return !date ? '' : DateFns().format(typeof date === 'string' ? new Date(date) : date, format);\n}\n\nexport function parseDate(date: string, format: string) {\n  return DateFns().parse(date, format, new Date());\n}\n\nexport function getDurationInHHMM(minutes: number) {\n  const h = `${Math.floor(minutes / 60)}`.padStart(2, '0');\n  const m = `${minutes % 60}`.padStart(2, '0');\n  return `${h}:${m}`;\n}\n\nexport function getHHMMInDuration(text: string) {\n  const split = text.split(':');\n  const h = split.at(0);\n  const m = split.at(1);\n  if (!h || !m) return 0;\n  const parsedH = parseInt(h);\n  const parsedM = parseInt(m);\n  if (isNaN(parsedH) || isNaN(parsedM)) return 0;\n  return parseInt(h) * 60 + parseInt(m);\n}\n","export function getFullName(obj: any, defaultValue = '') {\n  const firstNameKeys = ['firstName', 'first_name', 'firstname', 'FirstName'];\n  const lastNameKeys = ['lastName', 'last_name', 'lastname', 'LastName'];\n\n  if (!obj) return defaultValue;\n\n  const firstNameKey = firstNameKeys.find((key) => key in obj);\n  const lastNameKey = lastNameKeys.find((key) => key in obj);\n\n  const name = `${firstNameKey ? (obj[firstNameKey] ?? '') : ''} ${lastNameKey ? (obj[lastNameKey] ?? '') : ''}`.trim();\n\n  return name.length ? name : defaultValue;\n}\n\nexport function toPascalCase(text: string | undefined | null): string {\n  let result = text ?? '';\n  if (result.length) {\n    result = result.charAt(0).toUpperCase() + result.slice(1);\n  }\n  return result;\n}\n","import { Class, RouteExtended } from '../interfaces';\n\nexport async function lazyLoad<T extends object>(component: Promise<T>, selector?: (o: T) => Class): Promise<Class> {\n  const entry = await component;\n  if (selector) return selector(entry);\n  const props = Object.values(entry);\n  if (props.length) return props[0] as Class;\n  console.error('LAZY LOAD ERROR', entry);\n  throw new Error('Entry has no exported components!!');\n}\n\nexport function resolveRouteChildren(route: RouteExtended) {\n  if (route.children) return route.children;\n  // _loadedRoutes is a private property of Route which holds the list of lazy loaded routes config. we need to use it!\n  // @ts-ignore\n  if (route._loadedRoutes) return route._loadedRoutes;\n}\n\nexport function isRouteExtended(r: RouteExtended): r is RouteExtended {\n  return 'layout' in r;\n}\n","import { DestroyRef, Signal } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\n\nexport function effectDep<T>(dep: Signal<T>, fn: (state: T) => void, destroyRef?: DestroyRef) {\n  return toObservable(dep).pipe(takeUntilDestroyed(destroyRef)).subscribe(fn);\n}\n","import type { ItemToId } from '../interfaces';\n\nexport function clone<T>(o: T) {\n  return structuredClone(o);\n}\n\nexport const objectToId: ItemToId<any> = (t) => ('id' in t ? t.id : typeof t === 'object' ? Object.values(t).at(0) : t);\n\nexport function omit<T extends object, K extends keyof T>(obj: T, ...keys: K[]): Omit<T, K> {\n  keys.forEach((key) => delete obj[key]);\n  return obj;\n}\n\nfunction isObject(item: any) {\n  return item && typeof item === 'object' && !Array.isArray(item);\n}\n\nexport function deepMerge(target: any, ...sources: any[]) {\n  if (!sources.length) return target;\n  const source = sources.shift();\n\n  if (isObject(target) && isObject(source)) {\n    for (const key in source) {\n      if (isObject(source[key])) {\n        if (!target[key]) Object.assign(target, { [key]: {} });\n        deepMerge(target[key], source[key]);\n      } else {\n        Object.assign(target, { [key]: source[key] });\n      }\n    }\n  }\n\n  return deepMerge(target, ...sources);\n}\n","import { distinctUntilChanged, filter, map, MonoTypeOperatorFunction, Observable, of, pipe, tap } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { DestroyRef } from '@angular/core';\n\nexport function getObservable<T>(value: T | Observable<T>): Observable<T> {\n  return value instanceof Observable ? value : of(value);\n}\n\nexport function startWithTap<T>(callback: () => void) {\n  return (source: Observable<T>) =>\n    of({}).pipe(\n      tap(callback),\n      switchMap(() => source),\n    );\n}\n\nexport function filterEmpty<T>(): MonoTypeOperatorFunction<T> {\n  return (source: Observable<T>) =>\n    source.pipe(\n      filter((x) =>\n        x instanceof Array\n          ? x.filter((t) => t !== undefined && t !== null).length === x.length\n          : x !== undefined && x !== null,\n      ),\n    );\n}\n\nexport function distinctUntilChangedWithTimeout<T>(\n  timeout: number,\n  compare?: (pre: any, cur: any) => boolean,\n): MonoTypeOperatorFunction<T> {\n  return pipe(\n    map((t) => ({ value: t, date: new Date() })),\n    distinctUntilChanged(\n      (pre, cur) =>\n        (compare ? compare(pre?.value, cur?.value) : pre?.value === cur?.value) &&\n        pre.date.getTime() > cur.date.getTime() - timeout,\n    ),\n    map((t) => t.value),\n  );\n}\n\nexport function destroyRefObservable(ref: DestroyRef) {\n  return new Observable<void>((observer) => {\n    ref!.onDestroy(observer.next.bind(observer));\n  });\n}\n","import { ItemRecord } from '../interfaces';\n\nexport function getFromItemRecord<T, U>(items: ItemRecord<T, U>[], value: T | U | undefined | null) {\n  return items.find((t) => t.value === value || (t.alt !== undefined && t.alt === value));\n}\n\nexport function flatten<T>(array: T[][]): T[] {\n  return ([] as T[]).concat(...array);\n}\n\nexport function includes<T>(array: T[], terms: T | T[]) {\n  if (!(terms instanceof Array)) return array.includes(terms);\n  for (const term of terms) {\n    if (array.includes(term)) return true;\n  }\n  return false;\n}\n\nexport function arraySafeAt<T>(array: T[], index: number | undefined | null): T | null {\n  if (index === null || index === undefined) return null;\n  return array.at(index) ?? null;\n}\n\nexport function dedupe<T>(array: T[]) {\n  return [...new Set(array)];\n}\n\nexport function dedupeObj<T extends object>(array: T[], key: keyof T) {\n  return array.filter((value, index) => index === array.findIndex((t) => t[key] === value[key]));\n}\n\nexport function subset<T>(array: T[], sub: T[]) {\n  return sub.every((val) => array.includes(val));\n}\n\nexport function arraysEqual(a: any[], b: any[]) {\n  if (a === b) return true;\n  if (a == null || b == null) return false;\n  if (a.length !== b.length) return false;\n\n  for (let i = 0; i < a.length; ++i) {\n    if (a[i] !== b[i]) return false;\n  }\n  return true;\n}\n","const ACTION_TYPES = ['read', 'create', 'update', 'delete', 'print', 'export', 'output', 'other'] as const;\n\nexport type ActionTypes = (typeof ACTION_TYPES)[number];\n\nexport function getAllActions() {\n  return ACTION_TYPES;\n}\n\nexport function permissionNameToKey(name: string, action: ActionTypes) {\n  switch (action) {\n    case 'create':\n      return `Add${name}`;\n    case 'update':\n      return `Update${name}`;\n    case 'read':\n      return `Get${name}`;\n    case 'delete':\n      return '';\n    case 'print':\n      return `PrintListOf${name}`;\n    case 'export':\n      return `ExportAll${name}`;\n    case 'output':\n      return `${name}Output`;\n    case `other`:\n      return `${name}`;\n  }\n}\n\nexport function permissionActionToLabel(action: ActionTypes) {\n  switch (action) {\n    case 'create':\n      return $localize`:@@base.permissions.crudActions.create:Add`;\n    case 'update':\n      return $localize`:@@base.permissions.crudActions.update:Edit`;\n    case 'read':\n      return $localize`:@@base.permissions.crudActions.read:View Only`;\n    case 'delete':\n      return $localize`:@@base.permissions.crudActions.delete:Delete`;\n    case 'print':\n      return $localize`:@@base.permissions.crudActions.print:Print`;\n    case 'export':\n      return $localize`:@@base.permissions.crudActions.export:Export excel`;\n    case 'output':\n      return $localize`:@@base.permissions.crudActions.output:Export`;\n    case `other`:\n      return '';\n  }\n}\n","import { inject, InjectionToken, ProviderToken } from '@angular/core';\n\nfunction isClass(obj: any) {\n  const isCtorClass = obj.constructor && obj.constructor.toString().substring(0, 5) === 'class';\n  if (obj.prototype === undefined) {\n    return isCtorClass;\n  }\n  const isPrototypeCtorClass =\n    obj.prototype.constructor &&\n    obj.prototype.constructor.toString &&\n    obj.prototype.constructor.toString().substring(0, 5) === 'class';\n  return isCtorClass || isPrototypeCtorClass;\n}\n\nexport function provide<T>(token: InjectionToken<T>, value: T | (() => T), multi = false) {\n  // @ts-ignore\n  if (typeof value === 'function') {\n    return { provide: token, useFactory: value, multi };\n  } else if (isClass(value)) {\n    return { provide: token, useClass: value, multi };\n  } else {\n    return { provide: token, useValue: value, multi };\n  }\n}\n\nexport function componentWithDefaultConfig<T>(\n  component: any,\n  token: InjectionToken<T>,\n  defaultValues: Partial<T> = {},\n) {\n  const valuesInjected = injectOptional(token) as T[] | T | undefined;\n  if (!valuesInjected) return;\n\n  const values = valuesInjected instanceof Array ? valuesInjected : [valuesInjected];\n\n  let defaults = {\n    ...defaultValues,\n  };\n  for (const val of values) {\n    defaults = {\n      ...defaults,\n      ...val,\n    };\n  }\n\n  for (const key in defaults) {\n    // @ts-ignore\n    component[key] = defaults[key];\n  }\n}\n\nexport function injectOptional<T>(token: ProviderToken<T>): T | undefined {\n  try {\n    return inject(token);\n  } catch {\n    return undefined;\n  }\n}\n","import { signal } from '@angular/core';\nimport { debounceTime, Subject } from 'rxjs';\nimport { DataGetRequest, DataSortDirection } from '../../core';\n\nexport class SortModel {\n  private _key = signal<string | undefined>(undefined);\n  private _direction = signal<DataSortDirection>('desc');\n  private _changes$ = new Subject<[string | undefined, DataSortDirection]>();\n\n  key = this._key.asReadonly();\n  direction = this._direction.asReadonly();\n  changes$ = this._changes$.pipe(debounceTime(50));\n\n  constructor(key?: string, direction?: DataSortDirection) {\n    this._key.set(key);\n    this._direction.set(direction ?? 'desc');\n  }\n\n  setKey(sort: string | undefined) {\n    this._key.set(sort);\n    this.emit();\n  }\n  setDirection(direction: DataSortDirection) {\n    this._direction.set(direction);\n    this.emit();\n  }\n\n  create(): DataGetRequest['sort'] | undefined {\n    const key = this.key();\n    return key\n      ? {\n          key: key,\n          direction: this.direction(),\n        }\n      : undefined;\n  }\n\n  private emit() {\n    this._changes$.next([this._key(), this._direction()]);\n  }\n}\n","import { computed, DestroyRef, signal } from '@angular/core';\nimport { ItemToId } from '../../core';\nimport { FormControlExtended } from '@al00x/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { startWith } from 'rxjs';\n\n// TODO: Update constructor initial parameters (turn into object, it's messy currently)\n// TODO: add formControl binding\n// TODO: turn off multiple mode by default\n\nexport class SelectionModel<T> {\n  private _totalCount = 0;\n  private _selectedCount = 0;\n  private _multiple;\n  private _itemToId: ItemToId<T>;\n  private _currentViewItems: T[] = [];\n  private _boundFormControl?: FormControlExtended;\n  private _blockBoundUpdate = false;\n\n  // unique identifier generated randomly\n  id: string;\n\n  public indeterminate = signal(false);\n  public allSelected = signal(false);\n  public selected = signal<T[]>([]);\n  public selectedIds = signal<{ [p: string | number]: boolean }>({});\n  public selectedCount = computed(() => this.selected()?.length ?? 0);\n  public hasSelection = computed(() => this.selectedCount() !== 0);\n\n  constructor(itemsCount?: number, multiple?: boolean, initial?: T[], itemToId?: ItemToId<T>) {\n    this.id = crypto.randomUUID();\n    this._totalCount = itemsCount ?? 0;\n    this._multiple = multiple ?? true;\n    this._itemToId = itemToId ?? (((t) => (t && typeof t === 'object' && 'id' in t ? t.id : t)) as ItemToId<T>);\n    initial ? this.select(...initial) : null;\n  }\n\n  get isMultiple() {\n    return this._multiple;\n  }\n\n  public select(...items: T[]) {\n    if (this._multiple) {\n      this.set(...[...new Set([...this.selected(), ...items])]);\n    } else if (items.length) {\n      // this.clear();\n      this.set(items[0]);\n    }\n  }\n\n  public deselect(...items: T[]) {\n    const itemsId = items.map(this._itemToId);\n    this.set(...this.selected().filter((t) => !itemsId.includes(this._itemToId(t))));\n  }\n\n  public toggle(...items: T[]) {\n    const selected = this.selected();\n\n    if (this._multiple) {\n      let newItems: T[] = [...selected];\n      if (newItems.length > 0) {\n        for (const item of items) {\n          const index = selected.findIndex((t) => this._itemToId(t) === this._itemToId(item));\n          if (index !== -1) {\n            newItems.splice(index, 1);\n          } else {\n            newItems.push(item);\n          }\n        }\n      } else {\n        newItems = [...items];\n      }\n\n      this.set(...newItems);\n    } else {\n      if (selected.some(t => t === items[0])) {\n        this.clear();\n      } else {\n        this.set(items[0]);\n      }\n    }\n  }\n\n  public selectAll() {\n    this.select(...this._currentViewItems);\n  }\n\n  public deselectAll() {\n    this.deselect(...this._currentViewItems);\n  }\n\n  public toggleAll() {\n    if (this._selectedCount === this._totalCount) {\n      this.deselectAll();\n    } else {\n      this.selectAll();\n    }\n  }\n\n  public clear() {\n    if (this._selectedCount === 0) return;\n    this.set();\n  }\n\n  public set(...items: T[]) {\n    this.selected.set(items);\n    this.selectedIds.set(\n      items\n        .map((t) => this._itemToId(t))\n        .reduce(\n          (pre, cur) => ({\n            ...pre,\n            [cur]: true,\n          }),\n          {},\n        ),\n    );\n    this._selectedCount = items.length;\n\n    this.calculateSelectionState();\n    this.updateBoundedFormControl();\n  }\n\n  public isSelected(item: T) {\n    return !!this.selectedIds()[this._itemToId(item)];\n  }\n\n  public setTotalCount(count: number) {\n    this._totalCount = count;\n\n    this.calculateSelectionState();\n  }\n\n  public setItems(items: T[], setTotalCount = true) {\n    this._currentViewItems = items;\n    if (setTotalCount) {\n      this._totalCount = items.length;\n    }\n\n    this.calculateSelectionState();\n  }\n\n  public setItemToIdFn(fn: ItemToId<T>) {\n    this._itemToId = fn;\n  }\n\n  public setMultiple(value?: boolean) {\n    this._multiple = value === undefined ? true : value;\n  }\n\n  public bindFormControl(control: FormControlExtended | undefined, destroyRef?: DestroyRef) {\n    this._boundFormControl = control;\n    if (!control) return;\n\n    control.valueChanges.pipe(startWith(control.value), takeUntilDestroyed(destroyRef)).subscribe((v) => {\n      if (this._blockBoundUpdate || v === this.selectedIds()) {\n        this._blockBoundUpdate = false;\n        return;\n      }\n\n      if (v === null || v === undefined) {\n        this.clear();\n      } else {\n        this.set(...(v instanceof Array ? v : [v]));\n      }\n    });\n  }\n\n  private updateBoundedFormControl() {\n    if (!this._boundFormControl) return;\n\n    this._blockBoundUpdate = true;\n    this._boundFormControl.setValue(this.selectedIds());\n    this._boundFormControl.setSelectedItems(this.selected());\n  }\n\n  private calculateSelectionState() {\n    const selectedViewItemsCount = this._currentViewItems\n      .map(this._itemToId)\n      .filter((t) => this.selectedIds()[t]).length;\n    if (this._selectedCount === 0 || selectedViewItemsCount === 0) {\n      this.indeterminate.set(false);\n      this.allSelected.set(false);\n    } else if (this._selectedCount === this._totalCount) {\n      this.indeterminate.set(false);\n      this.allSelected.set(true);\n    } else {\n      this.indeterminate.set(selectedViewItemsCount !== this._currentViewItems.length);\n      this.allSelected.set(!this.indeterminate());\n    }\n  }\n}\n","import type { ItemRecord } from '../../core';\n\nexport const ActiveValues: ItemRecord<boolean>[] = [\n  { value: true, label: 'Active' },\n  { value: false, label: 'Inactive' },\n];\n\nexport const SuspendedValues: ItemRecord<boolean>[] = [\n  { value: false, label: 'Active' },\n  { value: true, label: 'Inactive' },\n];\n\nexport const BooleanValues: ItemRecord<boolean>[] = [\n  { value: true, label: 'Yes' },\n  { value: false, label: 'No' },\n];\n","import { computed, signal } from '@angular/core';\nimport { BehaviorSubject, debounceTime, Subject } from 'rxjs';\nimport { DataFilterTypes, DataGetRequest, getFromItemRecord, getFormattedDate, ItemRecords$ } from '../../core';\nimport type { FormBuilderInputType, TableColumnData, TableColumnFilter, TableFilterOptions } from '../components';\nimport { BooleanValues } from '../data';\n\nexport interface FilterValue {\n  key?: string;\n  value?: Date | string | number | boolean | string[] | number[];\n  displayText?: string | string[];\n  type: DataFilterTypes;\n  controlType?: FormBuilderInputType;\n}\n\nexport interface FilterOptions {\n  prop: string;\n  label: string;\n  items?: ItemRecords$<any>;\n  filterable?: TableColumnFilter;\n  icon?: string;\n}\n\nexport interface FilterItem {\n  // prop is used to identify the filter\n  prop: string;\n  values: FilterValue[] | undefined;\n  // key is for the filtering purpose\n  key: string;\n  label: string;\n  // The prob used, has been set manually and strictly (ex: when using col.filterable as a string)\n  strictKey?: boolean;\n  // Displayable text for filter\n  formatted?: {\n    full: string;\n    prefix: string;\n    text: string;\n    suffix: string;\n  };\n  icon?: string;\n}\n\nexport type FilterObject = { [p: string]: FilterItem | undefined };\n\nexport type TableFilterObject = { [p: string]: FilterValue[] };\n\nexport class FilterModel {\n  protected _filters = signal<FilterObject>({});\n  private _changes$ = new Subject<FilterObject | undefined>();\n\n  filters = computed(() => {\n    const obj = this._filters();\n    if (!obj) return this.overrideEmpty;\n    Object.keys(obj).forEach((key) => obj[key] === undefined && delete obj[key]);\n    if (Object.keys(obj).length === 0) return this.overrideEmpty;\n    return obj as FilterObject;\n  });\n  filtersArray = computed(() => {\n    const filters = this.filters();\n    if (!filters) return [];\n    return Object.values(filters) as FilterItem[];\n  });\n  hasFilter = computed(() => {\n    return this.filters() !== undefined;\n  });\n  changes$ = this._changes$.pipe(debounceTime(50));\n\n  constructor(\n    init?: FilterObject,\n    public overrideEmpty?: FilterObject,\n  ) {\n    this._filters.set(init ?? overrideEmpty ?? {});\n  }\n\n  set(data: FilterOptions, values: FilterValue[] | undefined, emit = true) {\n    if (values === undefined || values.every((t) => t.value === undefined || t.value === null)) {\n      this.remove(data.prop);\n      return;\n    }\n\n    this._filters.set({\n      ...this._filters(),\n      [data.prop]: this.createFilterItem(data, values),\n    });\n\n    if (emit) this.emitChanges();\n  }\n\n  remove(prop: string) {\n    this._filters.set({\n      ...this._filters(),\n      [prop]: undefined,\n    });\n\n    this.emitChanges();\n  }\n\n  clear() {\n    this._filters.set({});\n\n    this.emitChanges();\n  }\n\n  create(): DataGetRequest['filters'] {\n    const filters = this.filtersArray();\n    return filters\n      .filter((t) => !!t.values && t.values.length > 0)\n      .map((item) =>\n        item.values!.map((v) => ({\n          key: v.key ?? item.key,\n          strictKey: !!item.strictKey || !!v.key,\n          value: this.mapValueToString(v.value),\n          type: v.type,\n        })),\n      )\n      .reduce((pre, cur) => pre.concat(cur), []);\n  }\n\n  // Emit will be called automatically, use this is you disabled emit on any functions\n  emitChanges() {\n    this._changes$.next(this._filters());\n  }\n\n  protected createFilterItem(opts: FilterOptions, value?: FilterValue[]) {\n    const item: FilterItem = {\n      ...this.getKey(opts),\n      values: undefined,\n      prop: opts.prop,\n      label: opts.label,\n      icon: opts.icon,\n    };\n    return this.setValueForFilterItem(item, value, opts.items);\n  }\n\n  protected setValueForFilterItem(item: FilterItem, values?: FilterValue[], records?: ItemRecords$<any>) {\n    const newValues = values\n      ? values.every((t) => t.value === null || t.value === undefined)\n        ? undefined\n        : values.map((t) => {\n            const value = t.value;\n\n            if (value instanceof Date && t.controlType === 'date') {\n              if (t.type === 'lower') {\n                value.setHours(23, 59, 59, 999);\n              } else {\n                value.setHours(0, 0, 0, 0);\n              }\n            }\n\n            return {\n              ...t,\n              value,\n            } as typeof t;\n          })\n      : undefined;\n\n    item.values = newValues;\n    item.formatted = newValues ? this.formatFilterItem(item, records) : undefined;\n    return item;\n  }\n\n  private mapValueToString(value: FilterValue['value']): string | string[] {\n    if (value instanceof Array) {\n      return value.map((t) => this.mapValueToString(t) as string);\n    }\n    if (value instanceof Date) {\n      return value.toISOString();\n    }\n    if (typeof value === 'boolean') {\n      return value ? 'true' : 'false';\n    }\n    if (typeof value === 'number') {\n      return value.toString();\n    }\n    return value ?? '';\n  }\n\n  private mapValueToReadable(filterValue: FilterValue, records?: ItemRecords$<any>): string {\n    const value = filterValue.value;\n    if (value instanceof Date) {\n      if (filterValue.controlType === 'datetime') {\n        return getFormattedDate(value, 'HH:mm ,yyyy/MM/dd');\n      }\n      return getFormattedDate(value);\n    }\n    if (filterValue.displayText && filterValue.displayText.length) {\n      return filterValue.displayText instanceof Array ? filterValue.displayText.join(', ') : filterValue.displayText;\n    }\n    if (records && records instanceof Array) {\n      return getFromItemRecord(records, value)?.label ?? '';\n    }\n    if (typeof value === 'boolean') {\n      return value ? $localize`:@@base.values.trueText:Yes` : $localize`:@@base.values.falseText:No`;\n    }\n    if (typeof value === 'number') {\n      return value.toString();\n    }\n    return value instanceof Array ? (value.length ? value.join(', ') : '') : value ?? '';\n  }\n\n  private getKey(data: FilterOptions): { key: string; strictKey?: boolean } {\n    if (data.filterable === true) {\n      return { key: data.prop };\n    } else if (typeof data.filterable === 'string') {\n      return data.filterable !== '' ? { key: data.filterable, strictKey: true } : { key: data.prop };\n    }\n    return { key: data.prop };\n  }\n\n  private formatFilterItem(item: FilterItem, records?: ItemRecords$<any>): FilterItem['formatted'] {\n    let prefix = '';\n    let suffix = '';\n\n    const equal = item.values?.find((t) => t.type === 'equal' || t.type === 'contains');\n    const greater = item.values?.find((t) => t.type === 'greater');\n    const lower = item.values?.find((t) => t.type === 'lower');\n\n    const equalValue =\n      equal?.value !== undefined && equal?.value !== null ? this.mapValueToReadable(equal, records) : undefined;\n    const greaterValue =\n      greater?.value !== undefined && greater?.value !== null ? this.mapValueToReadable(greater, records) : undefined;\n    const lowerValue =\n      lower?.value !== undefined && lower?.value !== null ? this.mapValueToReadable(lower, records) : undefined;\n\n    if (equalValue !== undefined && equalValue !== null) {\n      suffix += ` : ${equalValue}`;\n    } else if (greaterValue !== undefined && greaterValue !== null && lowerValue !== undefined && lowerValue !== null) {\n      prefix += `${greaterValue} < `;\n      suffix += ` < ${lowerValue}`;\n    } else if (greaterValue !== undefined && greaterValue !== null) {\n      suffix += ` > ${greaterValue}`;\n    } else if (lowerValue !== undefined && lowerValue !== null) {\n      suffix += ` < ${lowerValue}`;\n    }\n\n    if (prefix === '' && suffix === '') return undefined;\n    return {\n      full: `${prefix}${item.label}${suffix}`,\n      text: item.label,\n      prefix: prefix,\n      suffix: suffix,\n    };\n  }\n}\n\nexport class TableFilterModel extends FilterModel {\n  private _columns?: TableColumnData<any>[];\n\n  columnFilters: { [p: string]: TableFilterOptions[] } = {};\n  columnLabels: { [p: string]: string } = {};\n\n  columnsChanged$ = new BehaviorSubject<void>(undefined);\n\n  constructor(\n    public initValue?: FilterObject,\n    public overrideEmptyValue?: TableFilterObject,\n  ) {\n    super(initValue);\n  }\n\n  override set(columnProp: FilterOptions | string, values: FilterValue[] | undefined, emit = true) {\n    if (typeof columnProp === 'object') {\n      super.set(columnProp, values, emit);\n      return;\n    }\n\n    if (!this._columns) return;\n\n    const col = this._columns.find((t) => t.prop === columnProp);\n\n    if (!col) {\n      console.error(`Table filter failed with the given prop: '${columnProp}'`);\n      return;\n    }\n\n    super.set(col, values, emit);\n  }\n\n  setColumns(columns: typeof this._columns) {\n    this._columns = columns;\n    this.updateFilters();\n    this.setOverrideEmpty();\n\n    this.columnsChanged$.next();\n  }\n\n  getColumnFilters(columnProp: string): TableFilterOptions[] | undefined {\n    return this.columnFilters[columnProp];\n  }\n\n  private setOverrideEmpty() {\n    if (!this.overrideEmptyValue || !this._columns) return;\n\n    this.overrideEmpty = {};\n    for (const prop in this.overrideEmptyValue) {\n      const column = this._columns.find((t) => t.prop === prop);\n      if (!column) continue;\n\n      const value = this.overrideEmptyValue[prop];\n      const item = this.createFilterItem(column, value);\n      this.overrideEmpty[item.prop] = item;\n    }\n    if (!this.initValue) {\n      this._filters.set(this.overrideEmpty);\n    }\n  }\n\n  private updateFilters() {\n    if (!this._columns) return;\n\n    this.columnFilters = {};\n    this.columnLabels = {};\n    for (const column of this._columns) {\n      let filters: TableFilterOptions[] | undefined;\n      if (column.filterable instanceof Array) {\n        filters = column.filterable;\n      } else if (column.filterable) {\n        switch (column.type ?? 'text') {\n          case 'number': {\n            filters = [\n              { inputType: 'number', type: 'equal' },\n              { inputType: 'number', type: 'greater' },\n              { inputType: 'number', type: 'lower' },\n            ];\n            break;\n          }\n          case 'boolean': {\n            filters = [{ type: 'equal', controlType: 'select', items: column.items ?? BooleanValues }];\n            break;\n          }\n          case 'plate':\n            filters = [{ type: 'equal', controlType: 'plate' }];\n            break;\n          default: {\n            filters = [\n              {\n                type: 'contains',\n                controlType: column.items ? 'select' : 'input',\n                items: column.items ?? undefined,\n              },\n            ];\n          }\n        }\n      }\n\n      if (filters) {\n        this.columnLabels[column.prop] = column.label;\n        this.columnFilters[column.prop] = filters;\n      }\n    }\n  }\n}\n","import {\n  Component,\n  Input,\n  OnChanges,\n  SimpleChanges,\n  HostBinding,\n  Output,\n  EventEmitter,\n  OnInit,\n  signal,\n  ViewChild,\n  AfterViewInit,\n  InjectionToken,\n} from '@angular/core';\nimport { MatIcon, MatIconModule } from '@angular/material/icon';\nimport { NgStyle } from '@angular/common';\nimport { BASE_ICONS } from '../../../../configs';\nimport { Subscription } from 'rxjs';\nimport { componentWithDefaultConfig } from '../../../../core';\n\nexport type IconComponentType = InstanceType<typeof CacIconComponent>\nexport const ICON_COMPONENT_CONFIG = new InjectionToken<Partial<IconComponentType>>('IconComponent');\n\n@Component({\n  selector: 'cac-icon',\n  templateUrl: './icon.component.html',\n  styleUrls: ['./icon.component.scss'],\n  standalone: true,\n  imports: [MatIconModule, NgStyle],\n})\nexport class CacIconComponent implements OnInit, OnChanges, AfterViewInit {\n  @ViewChild('MatIcon') matIcon!: MatIcon;\n\n  @Input() icon?: BASE_ICONS | string;\n  @Input() disabled = false;\n  @Input() size = '1.5rem';\n  @Input() strokeWidth = 1.9;\n  @Input() iconClass?: string;\n  @Input() wrapperClass?: string;\n  @Output() onClick = new EventEmitter<MouseEvent>();\n\n  @HostBinding('class.pointer-events-none') pointerEventsNone = false;\n  @HostBinding('style.width') thisWidth = '';\n  @HostBinding('style.height') thisHeight = '';\n\n  isClickable = signal(false);\n\n  constructor() {\n    componentWithDefaultConfig(this, ICON_COMPONENT_CONFIG);\n\n    this.thisWidth = this.size;\n    this.thisHeight = this.size;\n  }\n\n  ngOnInit() {\n    this.isClickable.set(this.onClick.observed);\n  }\n\n  ngAfterViewInit() {\n    // @ts-ignore\n    const fetchSub = this.matIcon._currentIconFetch as Subscription;\n    fetchSub.add(() => {\n      const svgElement = this.matIcon._elementRef.nativeElement.children.item(0) as SVGElement;\n      if (!svgElement) return;\n      svgElement.style.strokeWidth = `${this.strokeWidth}`;\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['disabled']) {\n      this.pointerEventsNone = this.disabled;\n    }\n    if (changes['size']) {\n      this.thisWidth = this.size;\n      this.thisHeight = this.size;\n    }\n  }\n\n  onClickEvent(e: MouseEvent) {\n    if (this.disabled) return;\n\n    this.onClick.emit(e);\n  }\n}\n","<div\n  role=\"presentation\"\n  class=\"ui-icon relative {{ disabled ? 'disabled' : '' }} w-full h-full {{ wrapperClass }}\"\n  [class.is-clickable]=\"isClickable()\"\n  (click)=\"onClickEvent($event)\"\n  >\n  @if (!!icon) {\n    <mat-icon\n      #MatIcon\n      class=\"{{ iconClass ?? '' }}\"\n      [ngStyle]=\"{ width: size, height: size }\"\n      [svgIcon]=\"icon\"\n    ></mat-icon>\n  }\n  <ng-content></ng-content>\n</div>\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  HostListener,\n  InjectionToken,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  signal,\n  SimpleChanges,\n  ViewChild,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { RouterLink } from '@angular/router';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { NgStyle, NgTemplateOutlet } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { pipe, tap, UnaryFunction } from 'rxjs';\nimport { ActionTypes, componentWithDefaultConfig, startWithTap } from '../../../../core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { CacIconComponent } from '../icon';\n\nexport interface ButtonClickEvent {\n  event: MouseEvent;\n  // If state is not provided, it will be toggled\n  setLoading: (state?: boolean) => void;\n  pipe: <T>() => UnaryFunction<T, T>;\n}\n\nexport type ButtonAppearanceType = 'stroked' | 'filled' | 'text';\n\nexport type ButtonThemeType = 'primary' | 'secondary' | 'tertiary' | 'error' | 'custom';\n\n// TODO: Fix Permissions\n\nexport type ButtonComponentType = InstanceType<typeof CacButtonComponent>\nexport const BUTTON_COMPONENT_CONFIG = new InjectionToken<Partial<ButtonComponentType>>('CacButtonComponent');\n\n@Component({\n  selector: 'cac-button',\n  templateUrl: './button.component.html',\n  styleUrls: ['./button.component.scss'],\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    MatButtonModule,\n    RouterLink,\n    MatProgressSpinnerModule,\n    NgTemplateOutlet,\n    MatIconModule,\n    NgStyle,\n    MatTooltipModule,\n    CacIconComponent\n],\n})\nexport class CacButtonComponent implements OnInit, AfterViewInit, OnChanges {\n  @ViewChild('Button', { read: ElementRef }) btnElement?: ElementRef<HTMLButtonElement>;\n\n  @Input() icon?: string;\n  @Input() iconPosition: 'prefix' | 'suffix' = 'prefix';\n  @Input() appearance: ButtonAppearanceType = 'filled';\n  @Input() tonal = false;\n  @Input() elevated = false;\n  @Input() theme: ButtonThemeType = 'primary';\n  @Input() disabled?: boolean | null = false;\n  @Input('loading') loadingProp?: boolean = false;\n  @Input() iconSize = '1.5rem';\n  @Input() padding = '0.5rem 1rem';\n  @Input() fitContent = false;\n  @Input() align?: 'start' | 'end' | 'center' = 'center';\n  // Navigate to the given route on click\n  @Input() route?: string[];\n  // TabIndex\n  @Input() tab = 0;\n  // Permission key\n  @Input() permission?: string;\n  // The action associated to a permission related to the current route\n  @Input() action?: ActionTypes | ActionTypes[];\n\n  @Output() onClick = new EventEmitter<ButtonClickEvent>();\n\n  @HostBinding('class.filled') filledClass = true;\n  @HostBinding('class.stroked') strokedClass = false;\n  @HostBinding('class.text') textClass = false;\n  @HostBinding('class.elevated') isElevated = false;\n  @HostBinding('class.tonal') isTonal = false;\n  @HostBinding('class.is-clicking') isClicking = false;\n  @HostBinding('class.theme-primary') primaryClass = false;\n  @HostBinding('class.theme-secondary') secondaryClass = false;\n  @HostBinding('class.theme-tertiary') tertiaryClass = false;\n  @HostBinding('class.theme-error') errorClass = false;\n  @HostBinding('class.disabled') disabledClass = false;\n  @HostBinding('class.cursor-not-allowed') cursorNotAllowed = false;\n\n  loading = signal(false);\n  insufficientPermission = signal(false);\n\n  constructor() {\n    componentWithDefaultConfig(this, BUTTON_COMPONENT_CONFIG);\n    \n    toObservable(this.insufficientPermission)\n      .pipe(takeUntilDestroyed())\n      .subscribe(() => {\n        this.setDisabledClass();\n      });\n  }\n\n  ngOnInit() {\n    this.setTheme();\n    this.checkPermission();\n  }\n\n  ngAfterViewInit() {\n    setTimeout(() => {\n      // Angular... doesn't bind tabIndex in template!\n      this.btnElement!.nativeElement.tabIndex = this.tab;\n    }, 5);\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['loading']) {\n      this.loading.set(this.loadingProp ?? false);\n    }\n    if (changes['appearance']) {\n      this.strokedClass = this.appearance === 'stroked';\n      this.filledClass = this.appearance === 'filled';\n      this.textClass = this.appearance === 'text';\n    }\n    if (changes['theme']) {\n      this.setTheme();\n    }\n    if (changes['elevated']) {\n      this.isElevated = this.elevated;\n    }\n    if (changes['tonal']) {\n      this.isTonal = this.tonal;\n    }\n    this.setDisabledClass();\n  }\n\n  @HostListener('pointerdown', ['$event'])\n  onPointerDown() {\n    this.isClicking = true;\n  }\n  @HostListener('pointercancel', ['$event'])\n  onPointerCancel() {\n    this.isClicking = false;\n  }\n  @HostListener('pointerleave', ['$event'])\n  onPointerLeave() {\n    this.isClicking = false;\n  }\n  @HostListener('pointerup', ['$event'])\n  onPointerUp() {\n    this.isClicking = false;\n  }\n\n  onClickEvent(e: MouseEvent) {\n    if (this.loadingProp || this.disabled || this.insufficientPermission() || this.loading()) return;\n\n    this.onClick.emit(this.createClickEvent(e));\n  }\n\n  createClickEvent(mouseEvent: MouseEvent | undefined) {\n    const e = {\n      event: mouseEvent ?? new Event('click'),\n      setLoading: (state) => {\n        this.loading.set(state !== undefined ? state : !this.loading());\n      },\n      pipe: () =>\n        pipe(\n          startWithTap(() => e.setLoading(true)),\n          tap({\n            next: () => e.setLoading(false),\n            error: () => e.setLoading(false),\n            complete: () => e.setLoading(false),\n          }),\n        ),\n    } as ButtonClickEvent;\n    return e;\n  }\n\n  private setTheme() {\n    this.primaryClass = false;\n    this.secondaryClass = false;\n    this.tertiaryClass = false;\n    this.errorClass = false;\n    if (this.theme === 'custom') return;\n    this[`${this.theme}Class`] = true;\n  }\n\n  private checkPermission() {\n    if (!this.action && !this.permission) return;\n\n    // this.insufficientPermission.set(\n    //   this.permission ? !this.role.hasPermission(this.permission) : !this.role.hasActionPermission(this.action),\n    // );\n  }\n\n  private setDisabledClass() {\n    const insufficientPermission = this.insufficientPermission();\n    this.disabledClass = (this.disabled ?? false) || insufficientPermission;\n\n    if (insufficientPermission) {\n      this.cursorNotAllowed = true;\n    } else {\n      this.cursorNotAllowed = false;\n    }\n  }\n}\n","<div\n  class=\"ui-button-inherit-parent\"\n  [matTooltip]=\"insufficientPermission() ? 'You have insufficient permission.' : ''\"\n  >\n  <button\n    #Button\n    mat-flat-button\n    class=\"ui-button-inherit-parent ui-button\"\n    [disabled]=\"(disabled ?? false) || loading() || insufficientPermission()\"\n    [ngStyle]=\"{ padding: padding }\"\n    (click)=\"onClickEvent($event)\"\n    [routerLink]=\"route\"\n    [class.fit-content]=\"fitContent\"\n    [class.content-align-start]=\"align === 'start'\"\n    [class.content-align-center]=\"align === 'center' || align === undefined\"\n    [class.content-align-end]=\"align === 'end'\"\n    >\n    <div class=\"ui-button-content\" [class.loading]=\"loading()\">\n      @if (iconPosition === 'prefix') {\n        <ng-container [ngTemplateOutlet]=\"Icon\"></ng-container>\n      }\n      <div class=\"ui-button-content-portal\">\n        <ng-content></ng-content>\n      </div>\n      @if (iconPosition === 'suffix') {\n        <ng-container [ngTemplateOutlet]=\"Icon\"></ng-container>\n      }\n      @if (loading()) {\n        <div class=\"ui-button-loading-spinner\">\n          <mat-spinner color=\"primary\" diameter=\"16\" class=\"mx-2\"></mat-spinner>\n        </div>\n      }\n    </div>\n  </button>\n</div>\n\n<ng-template #Icon>\n  @if (!!icon) {\n    <cac-icon\n      class=\"transition-colors\"\n      [icon]=\"icon\"\n      [style]=\"'width:' + iconSize + ';height:' + iconSize\"\n    ></cac-icon>\n  }\n</ng-template>\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { AsyncPipe } from '@angular/common';\nimport { formControl } from '@al00x/forms';\n\n@Component({\n  selector: 'cac-checkbox',\n  standalone: true,\n  imports: [MatCheckboxModule, ReactiveFormsModule, AsyncPipe],\n  templateUrl: './checkbox.component.html',\n  styleUrls: ['./checkbox.component.scss'],\n})\nexport class CacCheckboxComponent implements OnChanges {\n  @Input() control = formControl(false);\n  @Input() label?: string;\n  @Input() checked = this.control.value;\n  @Input() indeterminate = false;\n  @Output() onChange = new EventEmitter<boolean>();\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['checked']) {\n      this.control.setValue(this.checked);\n    }\n  }\n}\n","<mat-checkbox\n  class=\"ui-checkbox {{ (control.readonly$ | async) ? 'pointer-events-none' : '' }}\"\n  [formControl]=\"control\"\n  [checked]=\"checked\"\n  [indeterminate]=\"indeterminate\"\n  (change)=\"onChange.emit($event.checked)\"\n>\n  <ng-content></ng-content>\n  {{ label }}\n</mat-checkbox>\n","import { AsyncPipe } from '@angular/common';\nimport { Component, Input, OnDestroy, OnChanges, SimpleChanges, signal } from '@angular/core';\nimport { ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { Observable, of, startWith, Subscription } from 'rxjs';\nimport { ItemRecord, ItemRecords$ } from '../../../../core';\nimport { formControl, FormControlExtended } from '@al00x/forms';\n\n// TODO: UPDATE THIS COMPONENT\n// it has signal problem, and it isn't using our ui-checkbox\n// or at least sharing the styles with ui-checkbox.\n// it should be like ui-chips-group in implementation\n\n@Component({\n  selector: 'cac-checkbox-group',\n  standalone: true,\n  imports: [MatCheckboxModule, ReactiveFormsModule, AsyncPipe],\n  templateUrl: './checkbox-group.component.html',\n  styleUrls: ['./checkbox-group.component.scss'],\n})\nexport class CacCheckboxGroupComponent<T extends string | number> implements OnChanges, OnDestroy {\n  readonly ERROR_TEXT = 'Select at least one item';\n\n  @Input('items') rawItems?: ItemRecords$<T>;\n  @Input() control: FormControlExtended = formControl(undefined);\n  @Input() label?: string;\n\n  checkedItems: { [p: string | number]: boolean } = {};\n  isRequired = signal(false);\n  items = signal<ItemRecord<T>[] | undefined>(undefined);\n\n  private controlSubs = new Subscription();\n  private itemsSubs = new Subscription();\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['control']) {\n      this.isRequired.set(this.control.hasValidator(Validators.required));\n      this.controlSubs = new Subscription();\n      this.controlSubs.add(\n        this.control.valueChanges.pipe(startWith(this.control.value)).subscribe(() => {\n          this.checkedDefaultClicked();\n        }),\n      );\n    }\n    if (changes['rawItems']) {\n      this.itemsSubs?.unsubscribe();\n      this.itemsSubs = (\n        (this.rawItems === undefined\n          ? of(undefined)\n          : this.rawItems instanceof Array\n          ? of(this.rawItems)\n          : this.rawItems) as Observable<ItemRecord<T>[] | undefined>\n      ).subscribe((items) => {\n        this.items.set(items);\n      });\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.controlSubs.unsubscribe();\n    this.itemsSubs.unsubscribe();\n  }\n\n  onChangeItem() {\n    // if (event.checked) {\n    //   this.checkedItems.push(event.source.value);\n    // } else {\n    //   this.checkedItems = this.checkedItems.filter((item) => item !== event.source.value);\n    // }\n    // this.control.setValue(this.checkedItems);\n  }\n\n  private checkedDefaultClicked() {\n    // this.checkedItems = [];\n    // items.map((item: any) => this.checkedItems.push(item.toString()));\n  }\n}\n","<div class=\"w-full h-full flex flex-col select-none\">\n  <p class=\"{{ control.invalid && control.dirty ? 'text-red-dark' : 'text-blue-dark' }}\">\n    {{ label ?? '' }}@if (isRequired()) {\n    <span class=\"text-red-dark\">*</span>\n  }\n</p>\n<div class=\"h-full flex flex-col\">\n  @for (item of items() ?? []; track item.value) {\n    <mat-checkbox\n      class=\"checkbox\"\n      [checked]=\"checkedItems[item.value]\"\n      [value]=\"$any(item.value)\"\n      [disabled]=\"(control.readonly$ | async) || (item.disabled ?? false) || control.disabled\"\n      (change)=\"onChangeItem()\"\n      color=\"primary\"\n      >{{ item.label }}</mat-checkbox\n      >\n    }\n  </div>\n  @if (control.invalid && control.dirty) {\n    <p class=\"text-error-400 text-sm\">\n      {{ control.error$ | async }}\n    </p>\n  }\n</div>\n","import {\n  Component,\n  effect,\n  EventEmitter,\n  HostBinding,\n  HostListener,\n  InjectionToken,\n  Input,\n  OnChanges,\n  Output,\n  signal,\n  SimpleChanges,\n} from '@angular/core';\nimport { CacIconComponent } from '../icon';\nimport { componentWithDefaultConfig } from '../../../../core';\n\n\n// TODO: activeClass property is not working\n\nexport type ChipsComponentType = InstanceType<typeof CacChipsComponent>\nexport const CHIP_COMPONENT_CONFIG = new InjectionToken<Partial<ChipsComponentType>>('CacChipsComponent');\n\n@Component({\n  selector: 'cac-chips',\n  standalone: true,\n  imports: [CacIconComponent],\n  templateUrl: './chips.component.html',\n  styleUrls: ['./chips.component.scss'],\n})\nexport class CacChipsComponent<T> implements OnChanges {\n  @Input() closable = false;\n  // active is used as a flag and has no behavioral significance\n  @Input() active = false;\n  @Input() value?: T;\n  @Input() appearance: 'filled' | 'outlined' = 'filled';\n  @Input() icon?: string;\n  @Input('activeClass') activeClass?: string;\n\n  @Output() onClose = new EventEmitter<MouseEvent>();\n  @Output() onClick = new EventEmitter<MouseEvent>();\n\n  @HostBinding('class.ui-chips') baseClassBinding = true;\n  @HostBinding('class.ui-chips-active') activeClassBinding = false;\n  @HostBinding('class.ui-chips-appearance-filled') appearanceFilledClassBinding = true;\n  @HostBinding('class.ui-chips-appearance-outlined') appearanceOutlinedClassBinding = false;\n\n  private _active = signal(false);\n\n  constructor() {\n    componentWithDefaultConfig(this, CHIP_COMPONENT_CONFIG);\n\n    effect(() => {\n      this.activeClassBinding = this._active();\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['active']) {\n      this._active.set(this.active);\n    }\n    if (changes['appearance']) {\n      this.appearanceFilledClassBinding = this.appearance === 'filled';\n      this.appearanceOutlinedClassBinding = this.appearance === 'outlined';\n    }\n  }\n\n  @HostListener('click', ['$event'])\n  onChipsClick(e: MouseEvent) {\n    e.stopPropagation();\n    this.onClick.emit(e);\n  }\n\n  onCloseClick(e: MouseEvent) {\n    e.stopPropagation();\n    this.onClose.emit(e);\n  }\n\n  toggleActive(state?: boolean) {\n    this._active.set(state !== undefined ? state : !this._active());\n  }\n}\n","@if (icon) {\n  <cac-icon\n    class=\"ui-chips-icon\"\n    size=\"1.5rem\"\n    [icon]=\"icon\"\n  ></cac-icon>\n}\n<ng-content></ng-content>\n@if (closable) {\n  <cac-icon\n    class=\"ui-chips-close-btn\"\n    wrapperClass=\"ui-chips-close-icon-wrapper\"\n    size=\"1.5rem\"\n    icon=\"close\"\n    (onClick)=\"onCloseClick($event)\"\n  ></cac-icon>\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  Output,\n  inject,\n  DestroyRef,\n  ContentChildren,\n  AfterContentInit,\n  QueryList,\n  input, effect, OnInit,\n  InjectionToken\n} from '@angular/core';\nimport { EventEmitter } from '@angular/core';\nimport { startWith, Subscription } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CacChipsComponent } from '../chips';\nimport { formControl, FormControlExtended } from '@al00x/forms';\nimport { SelectionModel } from '../../../classes';\nimport { componentWithDefaultConfig } from '../../../../core';\n\nexport type ChipsGroupComponentOptions = InstanceType<typeof CacChipsGroupComponent>\nexport const CHIPS_GROUP_COMPONENT_CONFIG = new InjectionToken<Partial<ChipsGroupComponentOptions>>('CacChipsGroupComponent');\n\n@Component({\n  selector: 'cac-chips-group',\n  templateUrl: './chips-group.component.html',\n  styleUrls: ['./chips-group.component.scss'],\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [],\n})\nexport class CacChipsGroupComponent<T> implements OnInit, AfterContentInit {\n  readonly destroyRef = inject(DestroyRef);\n\n  @ContentChildren(CacChipsComponent) contentChildrenChips!: QueryList<CacChipsComponent<T>>;\n\n  @Input() toggleable = false;\n  @Input() multiple = false;\n  control = input<FormControlExtended<T | T[] | undefined>>(formControl());\n\n  @Output() onToggle = new EventEmitter<T[]>();\n  @Output() onRadioToggle = new EventEmitter<T>();\n\n  private childrenSub = new Subscription();\n  private selectionModel = new SelectionModel<T>();\n\n  constructor() {\n    componentWithDefaultConfig(this, CHIPS_GROUP_COMPONENT_CONFIG);\n\n    effect(() => {\n      this.selectionModel.bindFormControl(this.control(), this.destroyRef);\n    });\n  }\n\n  ngOnInit() {\n    this.selectionModel.setMultiple(this.multiple);\n  }\n\n  ngAfterContentInit() {\n    this.contentChildrenChips.changes.pipe(startWith(null), takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n      this.childrenSub.unsubscribe();\n      this.childrenSub = new Subscription();\n\n      this.contentChildrenChips.forEach((chips) => {\n        this.childrenSub.add(\n          chips.onClick.subscribe(() => {\n            if (!this.toggleable) return;\n            if (chips.value === undefined) return;\n            this.selectionModel.toggle(chips.value);\n            this.updateChipsState();\n          }),\n        );\n      });\n\n      this.updateChipsState();\n    });\n  }\n\n  private updateChipsState() {\n    this.contentChildrenChips.forEach((chips) => {\n      if (chips.value === undefined) return;\n      chips.toggleActive(this.selectionModel.isSelected(chips.value));\n    });\n  }\n}\n","<div class=\"ui-chips-group\">\n  <ng-content></ng-content>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { AsyncPipe } from '@angular/common';\nimport { animate, style, transition, trigger } from '@angular/animations';\nimport { formControl } from '@al00x/forms';\n\n@Component({\n  selector: 'cac-control-error',\n  standalone: true,\n  imports: [AsyncPipe],\n  templateUrl: './control-error.component.html',\n  styleUrls: ['./control-error.component.scss'],\n  animations: [\n    trigger('errorAnimation', [\n      transition(':enter', [\n        style({ opacity: 0, transform: 'translateY(-5px)' }),\n        animate('300ms cubic-bezier(0.55, 0, 0.55, 0.2)', style({ opacity: 1, transform: 'translateY(0px)' })),\n      ]),\n      transition(':leave', [\n        style({ opacity: 1, transform: 'translateY(0px)' }),\n        animate('300ms cubic-bezier(0.55, 0, 0.55, 0.2)', style({ opacity: 0, transform: 'translateY(-5px)' })),\n      ]),\n    ]),\n  ],\n})\nexport class CacControlErrorComponent {\n  @Input() control = formControl();\n}\n","<div role=\"presentation\" class=\"absolute bottom-0 left-0 right-0 w-full h-4\" (click)=\"$event.stopPropagation()\">\n  @if (control.touched && control.invalid && !control.disabled) {\n    <p\n      @errorAnimation\n      class=\"text-xs text-error-500 ps-3\"\n      >\n      {{ control.error$ | async }}\n    </p>\n  }\n</div>\n","import {\n  AfterContentInit,\n  ChangeDetectorRef,\n  ContentChildren,\n  Directive,\n  Input,\n  OnDestroy,\n  QueryList,\n} from '@angular/core';\nimport { startWith, Subscription } from 'rxjs';\nimport { MatRadioButton, MatRadioGroup } from '@angular/material/radio';\nimport { UntypedFormControl } from '@angular/forms';\n\nexport type UiRadioCompareWithFn<T> = (itemA: T, itemB: T) => boolean;\n\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector: 'mat-radio-group[UiRadioCompareWith]',\n  exportAs: 'uiRadio',\n  standalone: true,\n})\nexport class UiRadioCompareWithDirective<T> implements AfterContentInit, OnDestroy {\n  @Input() compareWith: UiRadioCompareWithFn<T> | undefined;\n  @Input() formControl!: UntypedFormControl;\n\n  @ContentChildren(MatRadioButton, { descendants: true })\n  radioButtons!: QueryList<MatRadioButton>;\n\n  formControlSub = new Subscription();\n\n  constructor(\n    private cdr: ChangeDetectorRef,\n    public host: MatRadioGroup,\n  ) {}\n\n  ngAfterContentInit() {\n    if (this.compareWith) {\n      this.formControlSub = this.formControl.valueChanges.pipe(startWith(this.formControl.value)).subscribe((value) => {\n        const foundRadioButton = this.radioButtons.toArray().find((radioButton) => {\n          return this.compareWith ? this.compareWith(radioButton.value, value) : (x: T, y: T) => x === y;\n        });\n        if (foundRadioButton) {\n          foundRadioButton.checked = true;\n          this.cdr.detectChanges();\n        }\n      });\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.formControlSub.unsubscribe();\n  }\n}\n","import {\n  ChangeDetectorRef,\n  Directive,\n  ElementRef,\n  Input,\n  OnInit,\n} from '@angular/core';\nimport { ActionTypes } from '../../core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\n\n// TODO: Fix Permissions\n\n// Removed the code for accessing button permission inputs, caused Circular Dependency\n\n@Directive({\n  selector: '[uiPermissionHide]',\n  standalone: true,\n})\nexport class PermissionHideDirective implements OnInit {\n  @Input() uiPermissionHide?: string | boolean = true;\n  @Input() uiPermissionHideAction?: ActionTypes;\n  @Input() uiPermissionHideKey?: string;\n\n  constructor(\n    private host: ElementRef<HTMLElement>,\n    private cdr: ChangeDetectorRef,\n  ) {\n    // toObservable(this.role.currentUserAllowedActions)\n    //   .pipe(takeUntilDestroyed())\n    //   .subscribe(() => {\n    //     this.updateView();\n    //   });\n  }\n\n  ngOnInit() {\n    this.updateView();\n  }\n\n  private updateView() {\n    let actions: ActionTypes | ActionTypes[] | undefined;\n    let permission: string | undefined;\n\n    // if (this.hostButton) {\n    //   actions = this.hostButton.action;\n    //   permission = this.hostButton.permission;\n    // }\n\n    // eslint-disable-next-line prefer-const\n    actions = actions ?? this.uiPermissionHideAction;\n    // eslint-disable-next-line prefer-const\n    permission = permission ?? this.uiPermissionHideKey;\n\n    if (!actions && !permission) return;\n\n    // const hasPermission = permission ? this.role.hasPermission(permission) : this.role.hasActionPermission(actions);\n    const hasPermission = true;\n\n    if ((this.uiPermissionHide || this.uiPermissionHide === '') && !hasPermission) {\n      this.host.nativeElement.classList.add(\n        'hidden',\n        'absolute',\n        'opacity-0',\n        'invisible',\n        'pointer-events-none',\n        'w-0',\n        'h-0',\n        'overflow-hidden',\n      );\n\n      this.cdr.detectChanges();\n    }\n  }\n}\n","import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';\n\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector: '[forNumber]',\n  standalone: true,\n})\nexport class ForNumberDirective {\n  constructor(\n    private templateRef: TemplateRef<never>,\n    private viewContainer: ViewContainerRef,\n  ) {}\n\n  @Input('forNumber') set count(count: number) {\n    this.viewContainer.clear();\n    for (let i = 0; i < count; i++) {\n      this.viewContainer.createEmbeddedView(this.templateRef);\n    }\n  }\n}\n","import { Directive, ElementRef, Input, OnChanges, OnDestroy } from '@angular/core';\nimport tippy, { Instance } from 'tippy.js';\n\n@Directive({\n  selector: '[cacTooltip]',\n  standalone: true,\n})\nexport class TooltipDirective implements OnChanges, OnDestroy {\n  @Input() uiTooltip?: string;\n  @Input() uiTooltipShowByDefault?: boolean;\n  @Input() uiTooltipType: 'error' | 'warning' | 'default' = 'default';\n\n  tippyInstance?: Instance;\n  baseClass = '';\n\n  constructor(private host: ElementRef<HTMLElement>) {}\n\n  ngOnChanges() {\n    if (this.uiTooltip && !this.tippyInstance) {\n      this.tippyInstance = tippy(this.host.nativeElement, {\n        allowHTML: true,\n        arrow: true,\n        // interactive: true,\n        hideOnClick: this.uiTooltipShowByDefault,\n        animation: 'shift-away-extreme',\n      });\n      this.baseClass = this.tippyInstance.popper.className\n    }\n\n    if (!this.uiTooltip) {\n      this.tippyInstance?.disable();\n      return;\n    } else {\n      this.tippyInstance?.enable();\n    }\n\n    if (this.uiTooltipShowByDefault) {\n      this.tippyInstance?.show();\n    }\n\n    const element = this.tippyInstance?.popper;\n    if (element) {\n      if (this.uiTooltipType === 'error') {\n        element.className = `${this.baseClass} tippy-type-error`\n      } else if (this.uiTooltipType === 'warning') {\n        element.className = `${this.baseClass} tippy-type-warning`\n      } else {\n        element.className = `${this.baseClass}`\n      }\n    }\n\n    this.tippyInstance?.setContent(this.uiTooltip);\n  }\n\n  ngOnDestroy() {\n    this.tippyInstance?.destroy();\n  }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport class InputMaskConfig {\n  /**\n   * If set true, MutationObserver will be used to look for changes until it finds input with inputSelector\n   */\n  isAsync: boolean;\n\n  /**\n   * CSS like selector, which will be used with `querySelector` to get the native input.\n   * If your input is loaded lazily, please use `isAsync` option with this\n   */\n  inputSelector: string;\n\n  constructor() {\n    this.isAsync = false;\n    this.inputSelector = 'input';\n  }\n}\n\nexport const INPUT_MASK_CONFIG: InjectionToken<InputMaskConfig> = new InjectionToken('InputMaskConfig');\n","import { isPlatformServer } from '@angular/common';\nimport {\n  Directive,\n  ElementRef,\n  HostListener,\n  Inject,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Optional,\n  PLATFORM_ID,\n  Renderer2,\n  Self,\n} from '@angular/core';\nimport { InputMaskConfig, INPUT_MASK_CONFIG } from './config';\nimport { AbstractControl, ControlValueAccessor, NgControl, Validator } from '@angular/forms';\nimport { InputmaskOptions } from './types';\nimport Inputmask from 'inputmask';\n\n// The initial issue: https://github.com/ngneat/input-mask/issues/40\n// Webpack 5 has module resolution changes. Libraries should configure the `output.export`\n// (https://webpack.js.org/configuration/output/#outputlibraryexport) property when published in\n// a UMD format, to tell Webpack that there's a default export.\n// The `_Inputmask` is an object with 2 properties: `{ __esModule: true, default: Inputmask }`.\n// But we want to be backwards-compatible, so we try to read the `default` property first; otherwise, we fall back to `_Inputmask`.\n\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector: '[inputMask]',\n  standalone: true,\n})\nexport class InputMaskDirective<T = any> implements OnInit, OnDestroy, ControlValueAccessor, Validator {\n  @Input() get inputMask() {\n    return this.inputMaskOptions;\n  }\n  set inputMask(inputMask: InputmaskOptions<T> | undefined) {\n    if (inputMask) {\n      this.inputMaskOptions = inputMask;\n      this.updateInputMask();\n    }\n  }\n\n  private inputMaskOptions: InputmaskOptions<T> = {};\n  private mutationObserver?: MutationObserver;\n\n  inputMaskPlugin?: Inputmask.Instance;\n  nativeInputElement?: HTMLInputElement;\n  defaultInputMaskConfig: InputMaskConfig;\n\n  constructor(\n    @Inject(PLATFORM_ID) private platformId: string,\n    private elementRef: ElementRef,\n    private renderer: Renderer2,\n    private ngZone: NgZone,\n    @Optional() @Self() public ngControl?: NgControl,\n    @Optional() @Inject(INPUT_MASK_CONFIG) public config?: InputMaskConfig,\n  ) {\n    this.defaultInputMaskConfig = new InputMaskConfig();\n    if (this.ngControl != null) {\n      this.ngControl.valueAccessor = this;\n    }\n    this.setNativeInputElement(config);\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  private onChange: (value: T | null) => void = () => {};\n\n  @HostListener('input', ['$event.target.value'])\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onInput = (_: any) => {};\n\n  @HostListener('blur', ['$event.target.value'])\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onTouched = (_: any) => {};\n\n  validate = (control: AbstractControl) => {\n    return !control.value || !this.inputMaskPlugin || this.inputMaskPlugin.isValid() ? null : { inputMask: true };\n  };\n\n  ngOnInit() {\n    this.control?.addValidators(this.validate);\n    this.control?.updateValueAndValidity();\n  }\n\n  ngOnDestroy() {\n    this.removeInputMaskPlugin();\n    this.mutationObserver?.disconnect();\n  }\n\n  writeValue(value: string) {\n    const formatter = this.inputMaskOptions?.formatter;\n    if (this.nativeInputElement) {\n      this.renderer.setProperty(this.nativeInputElement, 'value', formatter && value ? formatter(value) : value ?? '');\n    }\n  }\n\n  registerOnChange(onChange: (value: T | null) => void) {\n    this.onChange = onChange;\n    const parser = this.inputMaskOptions?.parser;\n    this.onInput = (value) => {\n      this.onChange(parser && value ? parser(value) : value);\n    };\n  }\n\n  registerOnTouched(fn: VoidFunction) {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(disabled: boolean) {\n    if (this.nativeInputElement) {\n      this.renderer.setProperty(this.nativeInputElement, 'disabled', disabled);\n    }\n  }\n\n  updateInputMask() {\n    this.removeInputMaskPlugin();\n    this.createInputMaskPlugin();\n    // This re-creates the `onInput` function since `inputMaskOptions` might be changed and the `parser`\n    // property now differs.\n    this.registerOnChange(this.onChange);\n  }\n\n  createInputMaskPlugin() {\n    const { nativeInputElement, inputMaskOptions } = this;\n    if (\n      isPlatformServer(this.platformId) ||\n      !nativeInputElement ||\n      inputMaskOptions === null ||\n      Object.keys(inputMaskOptions).length === 0\n    ) {\n      return;\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    const { parser, formatter, ...options } = inputMaskOptions;\n    this.inputMaskPlugin = this.ngZone.runOutsideAngular(() => new Inputmask(options).mask(nativeInputElement));\n    if (this.control) {\n      setTimeout(() => {\n        this.control!.updateValueAndValidity();\n      });\n    }\n  }\n\n  get control() {\n    return this.ngControl?.control;\n  }\n\n  setNativeInputElement(config: InputMaskConfig | undefined) {\n    if (this.elementRef.nativeElement.tagName === 'INPUT') {\n      this.nativeInputElement = this.elementRef.nativeElement;\n    } else {\n      this.defaultInputMaskConfig = {\n        ...this.defaultInputMaskConfig,\n        ...(config ?? {}),\n      };\n      if (this.defaultInputMaskConfig.isAsync) {\n        // Create an observer instance linked to the callback function\n        this.mutationObserver = new MutationObserver((mutationsList) => {\n          for (const mutation of mutationsList) {\n            if (mutation.type === 'childList') {\n              const nativeInputElement = this.elementRef.nativeElement.querySelector(\n                this.defaultInputMaskConfig!.inputSelector,\n              );\n              if (nativeInputElement) {\n                this.nativeInputElement = nativeInputElement;\n                this.mutationObserver?.disconnect();\n                this.createInputMaskPlugin();\n              }\n            }\n          }\n        });\n        // Start observing the target node for configured mutations\n        this.mutationObserver.observe(this.elementRef.nativeElement, {\n          childList: true,\n          subtree: true,\n        });\n      } else {\n        this.nativeInputElement = this.elementRef.nativeElement.querySelector(\n          this.defaultInputMaskConfig.inputSelector,\n        );\n      }\n    }\n  }\n\n  removeInputMaskPlugin() {\n    this.inputMaskPlugin?.remove();\n    this.inputMaskPlugin = undefined;\n  }\n}\n","import { InputmaskOptions } from './types';\n\nexport const createMask: <T>(options: string | InputmaskOptions<T>) => InputmaskOptions<T> = (options) =>\n  typeof options === 'string' ? { mask: options } : options;\n","import { AfterViewInit, Directive, ElementRef, EventEmitter, Host, Input, OnDestroy, Output } from '@angular/core';\n\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector: '[ngIsInView]',\n  standalone: true,\n})\nexport class NgIsInViewDirective implements AfterViewInit, OnDestroy {\n  @Input() emitViewEventOnce = false;\n\n  // If returned true, it means the element has entered the view\n  @Output() onIsVisibleChanged = new EventEmitter<boolean>();\n\n  private _observer?: IntersectionObserver;\n\n  constructor(@Host() private _elementRef: ElementRef) {}\n\n  ngAfterViewInit(): void {\n    const options = { root: null, rootMargin: '0px', threshold: 0.0 };\n    this._observer = new IntersectionObserver((entries) => {\n      const entry = entries.at(0);\n      if (!entry) return;\n      this.onIsVisibleChanged.emit(entry.isIntersecting);\n      if (entry.isIntersecting && this.emitViewEventOnce) {\n        this.disconnectObserver();\n      }\n    }, options);\n    this._observer.observe(this._elementRef.nativeElement);\n  }\n\n  ngOnDestroy() {\n    this.disconnectObserver();\n  }\n\n  private disconnectObserver() {\n    this._observer?.disconnect();\n  }\n}\n","import {\n  AfterViewInit,\n  Component,\n  DestroyRef,\n  ElementRef,\n  EventEmitter,\n  inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n  signal,\n  SimpleChanges,\n  ViewChild,\n} from '@angular/core';\nimport {\n  BehaviorSubject,\n  debounce,\n  debounceTime,\n  distinctUntilChanged,\n  fromEvent,\n  map,\n  Observable,\n  of,\n  startWith,\n  Subscription,\n  tap,\n  timer,\n} from 'rxjs';\nimport { MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\nimport { AsyncPipe } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { merge } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { OverlayRef } from '@angular/cdk/overlay';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { CacCheckboxComponent } from '../checkbox';\nimport {\n  arraysEqual,\n  ItemRecord,\n  ItemRecords$,\n} from '../../../../core';\nimport { SelectionModel } from '../../../classes';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { CacChipsGroupComponent } from '../chips-group';\nimport { CacChipsComponent } from '../chips';\nimport { formControl, FormControlExtended, isFormControlExtended } from '@al00x/forms';\n\ninterface SelectItem<T> extends ItemRecord<T> {\n  optional?: boolean;\n  type?: 'selectAll';\n}\n\n// Min is used when the given items are Array\nconst FILTER_DEBOUNCE_MIN = 50;\n// Max is used when the given items are Observable\nconst FILTER_DEBOUNCE_MAX = 250;\n\n// TODO: Fix role & permissions\n\n@Component({\n  selector: 'cac-select-options',\n  standalone: true,\n  imports: [\n    MatMenuModule,\n    AsyncPipe,\n    MatProgressSpinnerModule,\n    ReactiveFormsModule,\n    MatIconModule,\n    CacCheckboxComponent,\n    MatButtonModule,\n    MatButtonToggleModule,\n    CacChipsGroupComponent,\n    CacChipsComponent\n],\n  templateUrl: './select-options.component.html',\n  styleUrls: ['./select-options.component.scss'],\n})\nexport class CacSelectOptionsComponent<T> implements OnChanges, AfterViewInit, OnDestroy {\n  destroyRef = inject(DestroyRef);\n\n\n  readonly SEARCH_OR_ADD_TEXT = $localize`:@@base.ui.select.searchOrAddValue:Search Or Add A Value...`\n  readonly SEARCH_TEXT = $localize`:@@base.ui.select.search:Search In Items ...`\n  readonly N_ITEMS_SELECTED_TEXT = $localize`:@@base.ui.select.nItemsSelected:Item(s) Selected`\n  readonly CHOOSE_OPTIONAL_VALUE_TEXT = $localize`:@@base.ui.select.chooseOptionalValue:Choose Optional Value:`\n  readonly LOADING_TEXT = $localize`:@@base.ui.select.loading:Loading..`\n  readonly NO_ITEMS_AVAILABLE_TEXT = $localize`:@@base.ui.select.noItemsAvailable:No Matching Items Found.`\n\n  @ViewChild('Trigger') trigger!: MatMenuTrigger;\n  @ViewChild('Wrapper') wrapperEl!: ElementRef<HTMLDivElement>;\n  @ViewChild('FilterInput') filterInputEl?: ElementRef<HTMLInputElement>;\n  @ViewChild('Panel') panelEl!: ElementRef<HTMLDivElement>;\n  @ViewChild('Container') containerEl!: ElementRef<HTMLDivElement>;\n\n  @Input() control: FormControlExtended = formControl(null);\n  @Input() items?: ItemRecords$<T, any> | undefined;\n  @Input() requiredCharactersForFilter = 1;\n  @Input() filterStrategy: 'startWith' | 'includes' = 'includes';\n  // Can select a value that doesn't exist in the list.\n  @Input() optional?: boolean;\n  @Input() searchable?: boolean;\n  @Input() menuClass?: string;\n  @Input() multiple?: boolean;\n  @Input() showIcons?: boolean;\n  @Input() categories?: ItemRecords$<string | number, any> | undefined;\n\n  @Output() menuClosed = new EventEmitter();\n  @Output() onSelect = new EventEmitter<T>();\n  @Output() onKeydown = new EventEmitter<KeyboardEvent>();\n  @Output() onMultiSelect = new EventEmitter<ItemRecord<T>[]>();\n\n  originalItems$ = new BehaviorSubject<ItemRecord<T>[] | undefined>(undefined);\n  categories$ = new BehaviorSubject<ItemRecord<string | number>[] | undefined>(undefined);\n  filteredItems$ = new BehaviorSubject<SelectItem<T>[] | undefined>(undefined);\n  itemsUpdateSub = new Subscription();\n  categoriesUpdateSub = new Subscription();\n  controlSub = new Subscription();\n  customInputSub = new Subscription();\n\n  public currentItemControl = formControl<SelectItem<T> | null | undefined>(undefined);\n  public filterControl = formControl('');\n  public categoryControl = formControl<string | number | undefined>(undefined);\n\n  public isLoading$ = this.originalItems$.pipe(map((t) => t === undefined));\n  isClosing = false;\n  isOpening = false;\n\n  private _initialValue?: T;\n  private _instanceOfItems?: 'array' | 'observable';\n  private _recentOptionalItems: SelectItem<T>[] = [];\n  private _customInput?: HTMLInputElement;\n  protected _selectionModel = new SelectionModel<SelectItem<any>>(undefined, true, undefined, (o) => {\n    return o.label;\n    // const val = o.value;\n    // if (typeof val === 'boolean') return val ? BOOLEAN_TRUE : BOOLEAN_FALSE;\n    // else if (val === null) return NULL_VALUE;\n    // return val;\n  });\n\n  currentFocusIndex = signal(-1);\n  protected _showingOptionalValue = signal(false);\n\n  constructor() {\n    this.currentItemControl.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((item) => {\n      if (this.multiple) {\n        this.control.setDisplayText((item as any)?.map((t: ItemRecord<T>) => t.label)?.join(', ') ?? '');\n        this.control.setSelectedItems((item as any) ?? []);\n      } else {\n        this.control.setDisplayText(item?.label ?? '');\n        this.control.setSelectedItems(item ? [item] : []);\n      }\n    });\n\n    merge(\n      this.originalItems$,\n      this.filterControl.valueChanges.pipe(\n        distinctUntilChanged(),\n        debounce((v) =>\n          v ? timer(this._instanceOfItems === 'observable' ? FILTER_DEBOUNCE_MAX : FILTER_DEBOUNCE_MIN) : of(v),\n        ),\n      ),\n      this.categoryControl.valueChanges.pipe(distinctUntilChanged(), debounceTime(FILTER_DEBOUNCE_MIN)),\n    )\n      .pipe(\n        takeUntilDestroyed(),\n        debounceTime(10),\n        map(() => {\n          const originalItems = this.originalItems$.value;\n          // let items = originalItems ? this.role.filterItemRecords(originalItems) : undefined;\n          let items = originalItems;\n          items = items?.concat(this._recentOptionalItems);\n          if (this.categoryControl.value !== undefined && this.categoryControl.value !== null) {\n            items = items?.filter((t) => t.category === this.categoryControl.value);\n          }\n\n          this._selectionModel.setItems(items ?? []);\n          const term = (this.filterControl.value ?? '').replace(/_/gi, '').toLowerCase();\n\n          let result: SelectItem<T>[] | undefined = undefined;\n          if (!items) {\n            result = undefined;\n          } else if (items.length === 0) {\n            result = [];\n          } else if (term.length < this.requiredCharactersForFilter) {\n            result = [...items];\n          } else {\n            result = items.filter((t) => {\n              const label = t.label.toLowerCase();\n              const additional = t.additionalData?.toLowerCase();\n              return this.filterStrategy === 'includes'\n                ? label.includes(term) || (additional && additional.includes(term))\n                : label.startsWith(term) || (additional && additional.startsWith(term));\n            });\n          }\n\n          this._showingOptionalValue.set(false);\n          if (this.optional && term.length > 0 && result && result.length === 0) {\n            result.push({\n              label: `${term}`,\n              value: term as never,\n              optional: true,\n            });\n            this._showingOptionalValue.set(true);\n          }\n\n          if (this.multiple && term.length === 0) {\n            result?.unshift({\n              label: $localize`:@@base.ui.select.selectAll:Select All`,\n              value: undefined as never,\n              type: 'selectAll',\n            });\n          }\n\n          return result;\n        }),\n      )\n      .subscribe((list) => {\n        if (this.isClosing) return;\n        this.filteredItems$.next(list);\n        if (this.isOpening) {\n          this.isOpening = false;\n          this.updateFocusIndex();\n        } else {\n          this.setFocusIndex(list?.length ? list[0].value : undefined);\n        }\n      });\n  }\n\n  ngAfterViewInit() {\n    this.trigger.menuClosed.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n      this.prepareClose();\n    });\n    this.trigger.menuOpened.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n      setTimeout(() => {\n        if (this._customInput) {\n          this._customInput.focus();\n        } else if (this.filterInputEl?.nativeElement) {\n          this.filterInputEl.nativeElement.focus();\n        } else {\n          this.panelEl.nativeElement.focus();\n        }\n      }, 75);\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['items']) {\n      this.itemsUpdateSub?.unsubscribe();\n      this.originalItems$.next(undefined);\n      this._instanceOfItems = this.items instanceof Observable ? 'observable' : 'array';\n      const updateItems$ = this.items\n        ? (this.items instanceof Observable ? this.items : of(this.items)).pipe(\n            tap(() => {\n              this.originalItems$.next(undefined);\n            }),\n            tap((result) => {\n              if (result instanceof Array) {\n                this.originalItems$.next(result);\n                this.setCurrentItemByValue(this._initialValue ?? this.control.value);\n              }\n            }),\n          )\n        : undefined;\n\n      this.itemsUpdateSub = updateItems$ ? updateItems$.subscribe() : new Subscription();\n    }\n    if (changes['control']) {\n      this.controlSub?.unsubscribe();\n      this._initialValue = this.control.value;\n      this.controlSub = this.control.valueChanges.pipe(startWith(this.control.value)).subscribe((value) => {\n        if (this.trigger?.menuOpen && !!this._customInput) return;\n        this.setCurrentItemByValue(value);\n      });\n      this.controlSub.add(\n        this.control.status$.pipe(debounceTime(1)).subscribe((status) => {\n          if (this.control.dirty) {\n            this.filterControl.markAsDirty();\n          }\n          if (this.control.touched) {\n            this.filterControl.markAsTouched();\n          }\n          if (status === 'INVALID' && (this.control.touched || this.control.dirty)) {\n            this.filterControl.setValidators(this.control.validator);\n          } else {\n            this.filterControl.setValidators(null);\n          }\n          this.filterControl.updateValueAndValidity();\n        }),\n      );\n    }\n    if (changes['categories']) {\n      this.categoriesUpdateSub?.unsubscribe();\n      this.categories$.next(undefined);\n      const updateItems$ = this.categories\n        ? (this.categories instanceof Observable ? this.categories : of(this.categories)).pipe(\n            tap(() => {\n              this.categories$.next(undefined);\n            }),\n            tap((result) => {\n              if (result instanceof Array) {\n                this.categories$.next(result);\n              }\n            }),\n          )\n        : undefined;\n\n      this.categoriesUpdateSub = updateItems$ ? updateItems$.subscribe() : new Subscription();\n    }\n  }\n\n  ngOnDestroy() {\n    this.controlSub?.unsubscribe();\n    this.itemsUpdateSub?.unsubscribe();\n    this.categoriesUpdateSub?.unsubscribe();\n    this.customInputSub?.unsubscribe();\n  }\n\n  selectItem(item: SelectItem<T>, e?: MouseEvent) {\n    e?.stopPropagation();\n    e?.preventDefault();\n    if (item.type) {\n      this.invokeTypedItemAction(item);\n      return;\n    }\n    if (this.currentItemControl.value?.value === item.value && !this.multiple) {\n      this.close();\n    }\n\n    this.markAsDirty();\n    this.setFocusIndex(item.value);\n\n    if (this.multiple) {\n      if (item.optional) {\n        this._recentOptionalItems.push(item);\n      }\n      this._selectionModel.toggle(item);\n      const items = this._selectionModel.selected() as any;\n      this.currentItemControl.setValue(items);\n      this.onMultiSelect.emit(items);\n    } else {\n      if (item.optional) {\n        this._recentOptionalItems = [item];\n      }\n      this.isClosing = true;\n      this.currentItemControl.setValue(item);\n      this.onSelect.emit(item.value);\n      this.close();\n    }\n  }\n\n  selectFirstItem() {\n    const visibleItems = this.filteredItems$.value;\n    if (visibleItems && visibleItems.length > 0) {\n      this.selectItem(visibleItems[0]);\n    }\n  }\n\n  selectFocusedItem() {\n    const item = this.indexToItem(this.currentFocusIndex());\n    if (!item) {\n      this.close();\n      return;\n    }\n    this.selectItem(item);\n  }\n\n  open() {\n    if (this.control.disabled) return;\n    if (isFormControlExtended(this.control) && this.control.readonly) return;\n    if (this.trigger.menuOpen) return;\n\n    this.isClosing = false;\n    this.isOpening = true;\n    this.filterControl.reset();\n    this.categoryControl.reset();\n    this.updateSelectionModel();\n    this.currentFocusIndex.set(this.itemToIndex(this.control.value));\n\n    this.trigger.openMenu();\n\n    // @ts-ignore\n    const menuOverlayElement = this.trigger._overlayRef._pane as HTMLElement;\n    (menuOverlayElement.children.item(0)! as HTMLElement).style.width = `${this.wrapperEl.nativeElement.offsetWidth}px`;\n\n    setTimeout(() => {\n      this.scrollToFocusedIndex();\n      // this.scrollIntoSelectedOption();\n    }, 8);\n\n    // ... manual positioning of the menu\n    setTimeout(() => {\n      // @ts-ignore\n      const overlay: OverlayRef = this.trigger._overlayRef;\n      // @ts-ignore\n      const positionStrategy: any = overlay._positionStrategy;\n      positionStrategy._isInitialRender = true;\n      positionStrategy.apply();\n    }, 9);\n  }\n\n  close() {\n    this.isClosing = true;\n    this.trigger.closeMenu();\n    this.prepareClose();\n  }\n\n  focusNextItem() {\n    const length = (this.filteredItems$.value ?? []).length;\n    let newIndex = this.currentFocusIndex() + 1;\n    if (newIndex >= length) {\n      newIndex = 0;\n    }\n    this.currentFocusIndex.set(newIndex);\n    this.scrollToFocusedIndex();\n  }\n  focusPrevItem() {\n    let newIndex = this.currentFocusIndex() - 1;\n    if (newIndex === -1) {\n      const length = (this.filteredItems$.value ?? []).length;\n      newIndex = length - 1;\n    }\n    this.currentFocusIndex.set(newIndex);\n    this.scrollToFocusedIndex();\n  }\n\n  onFilterKeyDown(e: KeyboardEvent) {\n    if (!this.trigger.menuOpen) return;\n\n    e.stopPropagation();\n\n    if (e.key === 'Enter') {\n      e.preventDefault();\n      this.selectFocusedItem();\n    } else if (e.key === 'ArrowUp') {\n      e.preventDefault();\n      this.focusPrevItem();\n    } else if (e.key === 'ArrowDown') {\n      e.preventDefault();\n      this.focusNextItem();\n    } else if (e.key === 'Escape') {\n      this.close();\n    } else if (e.key === 'Tab') {\n      this.close();\n    }\n  }\n\n  // We use to set a custom element for focussing after the menu is opened\n  setElementToFocus(el: HTMLInputElement) {\n    this.customInputSub?.unsubscribe();\n    this._customInput = el;\n    this.customInputSub = new Subscription();\n    this.customInputSub.add(\n      fromEvent<KeyboardEvent>(el, 'keydown').subscribe((e) => {\n        this.onFilterKeyDown(e);\n      }),\n    );\n    this.customInputSub.add(\n      fromEvent(el, 'input').subscribe(() => {\n        const value = 'actualValue' in el ? (el.actualValue as string) : el.value;\n        this.filterControl.setValue(value);\n      }),\n    );\n  }\n\n  private invokeTypedItemAction(item: SelectItem<T>) {\n    this.markAsDirty();\n\n    if (item.type === 'selectAll') {\n      this._selectionModel.toggleAll();\n      const items = this._selectionModel.selected() as any;\n      this.currentItemControl.setValue(items);\n      this.onMultiSelect.emit(items);\n    }\n  }\n\n  private scrollToFocusedIndex() {\n    if (!this.containerEl?.nativeElement) return;\n\n    const container = this.containerEl.nativeElement;\n    const childrenCount = container.children.length;\n    const focusedEl = container.children.item(this.currentFocusIndex()) as HTMLDivElement;\n    if (this.currentFocusIndex() >= childrenCount) {\n      container.scrollTop = container.scrollHeight;\n    } else if (focusedEl && container.scrollHeight > container.clientHeight) {\n      container.scrollTop = focusedEl.offsetTop - 160;\n    }\n  }\n\n  private setFocusIndex(value: T | undefined | null) {\n    if (value !== undefined) {\n      this.currentFocusIndex.set(this.itemToIndex(value));\n    } else {\n      this.currentFocusIndex.set(0);\n    }\n  }\n\n  // This is used when the visible list is updated, and the indexes are recalculated\n  private updateFocusIndex() {\n    const currentValue = this.control.value;\n    this.setFocusIndex(currentValue);\n  }\n\n  private itemToIndex(value: T | null) {\n    const items = this.filteredItems$.value ?? [];\n    const index = items.findIndex((t) => t.value === value);\n    return index >= 0 ? index : 0;\n  }\n\n  private indexToItem(index: number) {\n    if (index < 0) return undefined;\n    const items = this.filteredItems$.value ?? [];\n    return items.at(index);\n  }\n\n  private prepareClose() {\n    this.isClosing = true;\n    this.markAsTouched();\n    const currentValue = this.control.value;\n\n    if (this.multiple) {\n      const newValue = this._selectionModel.selected().map((t) => t.value);\n      if (currentValue instanceof Array) {\n        if (!arraysEqual(currentValue, newValue)) {\n          this.control.setValue(newValue);\n        }\n      } else {\n        this.control.setValue(newValue);\n      }\n    } else {\n      const newValue = this.currentItemControl.value?.value;\n      if (currentValue !== newValue) {\n        this.control.setValue(newValue);\n      }\n    }\n\n    if (this._customInput) {\n      this._customInput.blur();\n    }\n\n    this.menuClosed.emit();\n    this.isClosing = false;\n  }\n\n  private setCurrentItemByValue(value: T | null | undefined, emitEvent = true) {\n    let currentValue: any = this.valueTypeTransform(value);\n    let currentItem: any;\n    const items = [...(this.originalItems$.value ?? []), ...this._recentOptionalItems];\n\n    if (value instanceof Array) {\n      currentValue = this.multiple ? value : value.length ? value[0] : undefined;\n    } else {\n      currentValue = this.multiple && value !== undefined ? [value] : value;\n    }\n\n    if (this.multiple && currentValue !== undefined) {\n      currentItem = [];\n      for (const val of currentValue as any[]) {\n        const item = items.find((t) => t.value === val);\n        if (item) {\n          currentItem.push(item);\n        }\n      }\n      // currentItem = items.filter((t) => currentValue?.includes(t.value));\n      if (currentItem.length === 0) currentItem = undefined;\n    } else {\n      currentItem = items.find((t) => t.value === currentValue);\n    }\n\n    if ((currentValue === null || currentValue === undefined || currentValue?.length === 0) && !currentItem) {\n      this.currentItemControl.setValue(value as null, { emitEvent });\n      return;\n    }\n    this.setFocusIndex(this.multiple ? currentValue?.at(0) : currentValue);\n    this.currentItemControl.setValue(currentItem, { emitEvent });\n    if (this.originalItems$.value !== undefined) {\n      this._initialValue = undefined;\n    }\n  }\n\n  private updateSelectionModel() {\n    if (!this.multiple) return;\n\n    this._selectionModel.set(...(this.currentItemControl.value ?? ([] as any)));\n  }\n\n  private markAsTouched() {\n    this.control.markAsTouched();\n    this.filterControl.markAsTouched();\n    this.control.emitStatus();\n  }\n\n  private markAsDirty() {\n    this.control.markAsDirty();\n    this.filterControl.markAsDirty();\n    this.control.emitStatus();\n  }\n\n  // Based on 'multiple' property, we convert our value between Array and Pure: T <=> T[]\n  private valueTypeTransform(value: T | (T | null)[] | null | undefined) {\n    if (value instanceof Array) {\n      return this.multiple ? value : value.length ? value[0] : undefined;\n    } else {\n      return this.multiple && value !== undefined ? [value] : value;\n    }\n  }\n}\n","<div #Wrapper #Trigger=\"matMenuTrigger\" class=\"relative w-full h-full pointer-events-none\" [matMenuTriggerFor]=\"Menu\">\n  <mat-menu #Menu class=\"options-menu {{ menuClass ?? '' }}\" yPosition=\"below\">\n    <div\n      #Panel\n      role=\"presentation\"\n      class=\"options-menu-panel\"\n      (click)=\"$event.stopPropagation()\"\n      (keydown)=\"onFilterKeyDown($event)\"\n      tabindex=\"0\"\n      >\n      @if (searchable) {\n        <div class=\"filter-input pe-4\">\n          <mat-icon svgIcon=\"search\"></mat-icon>\n          <input\n            #FilterInput\n            [formControl]=\"filterControl\"\n            (keydown)=\"onFilterKeyDown($event)\"\n            class=\"unicode-normal\"\n            [placeholder]=\"optional ? SEARCH_OR_ADD_TEXT : SEARCH_TEXT\"\n            />\n        </div>\n      }\n\n      @if (categories) {\n        <div>\n          @let items = categories$ | async;\n          <div class=\"w-full h-16 overflow-auto\">\n            <cac-chips-group [control]=\"categoryControl\" [toggleable]=\"true\" class=\"mx-4\">\n              @for (item of items; track item.value) {\n                <cac-chips class=\"min-w-[5rem] py-1\" appearance=\"outlined\" [value]=\"item.value\">{{\n                  item.label\n                }}</cac-chips>\n              }\n            </cac-chips-group>\n          </div>\n        </div>\n      }\n\n      @if (multiple) {\n        <p class=\"pt-2 pb-2 px-5 text-xs text-primary\">\n          {{ _selectionModel.selectedCount() }} {{ N_ITEMS_SELECTED_TEXT }}\n        </p>\n      }\n\n      @if (multiple) {\n        <div class=\"h-px bg-outline-variant w-full mb-2\"><!-- Divider --></div>\n      }\n\n      @if (_showingOptionalValue()) {\n        <span class=\"ps-3 pb-2 text-xs\">{{ CHOOSE_OPTIONAL_VALUE_TEXT }}</span>\n      }\n\n      <div #Container class=\"flex flex-col overflow-auto min-h-[7rem] max-h-[18rem]\">\n        @let state = { items: filteredItems$ | async };\n        @if (state) {\n          @if (state.items === undefined) {\n            <div class=\"flex flex-col items-center\">\n              <mat-spinner class=\"mt-2\" strokeWidth=\"2\" diameter=\"24\"></mat-spinner>\n              <div\n                role=\"menuitem\"\n                tabindex=\"0\"\n                class=\"bg-transparent pointer-events-none flex flex-col items-center justify-center default-info-item\"\n                (keydown.enter)=\"close()\"\n                mat-menu-item\n                >\n                {{ LOADING_TEXT }}\n              </div>\n            </div>\n          } @else {\n            @if (!state.items || state.items.length === 0) {\n              <div class=\"flex flex-col items-center\">\n                <div\n                  role=\"menuitem\"\n                  tabindex=\"0\"\n                  class=\"bg-transparent pointer-events-none default-info-item\"\n                  (keydown.enter)=\"close()\"\n                  mat-menu-item\n                  >\n                  {{ NO_ITEMS_AVAILABLE_TEXT }}\n                </div>\n              </div>\n            } @else {\n              @for (item of state.items; track item.value; let index = $index) {\n                <button\n                  mat-button\n                  class=\"option-item\"\n                  [class.option-selected]=\"currentItemControl.value?.value === item.value && !multiple\"\n                  [class.option-focused]=\"currentFocusIndex() === index\"\n                  (click)=\"selectItem(item, $event)\"\n                  >\n                  <div class=\"flex items-center gap-4\">\n                    @if (showIcons) {\n                      <div\n                        class=\"rounded-full flex items-center justify-center w-14 h-14 overflow-hidden\"\n                        [class.bg-gray-200]=\"item.type !== 'selectAll'\"\n                        >\n                        @if (item.icon && item.type !== 'selectAll') {\n                          <img\n                            class=\"w-full object-cover\"\n                            [src]=\"item.icon\"\n                            alt=\"\"\n                            />\n                        }\n                        @if (item.type === 'selectAll') {\n                          <mat-icon [svgIcon]=\"'people'\"></mat-icon>\n                        }\n                      </div>\n                    }\n                    <span class=\"text-base\">\n                      {{ item.optional ? '\"' : '' }} {{ item.label }} {{ item.optional ? '\"' : '' }}\n                    </span>\n                    <div class=\"flex-1\"><!-- --></div>\n                    @if (multiple && item.type === undefined) {\n                      <cac-checkbox\n                        class=\"pointer-events-none\"\n                        [checked]=\"_selectionModel.selectedIds()[item.label]\"\n                      ></cac-checkbox>\n                    }\n                    @if (item.type === 'selectAll') {\n                      <cac-checkbox\n                        class=\"pointer-events-none\"\n                        [checked]=\"_selectionModel.allSelected()\"\n                        [indeterminate]=\"_selectionModel.indeterminate()\"\n                      ></cac-checkbox>\n                    }\n                  </div>\n                </button>\n              }\n            }\n          }\n        }\n      </div>\n    </div>\n  </mat-menu>\n</div>\n","import { AfterViewInit, DestroyRef, Directive, ElementRef, inject, Input, OnInit } from '@angular/core';\nimport { CacSelectOptionsComponent } from './select-options.component';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent } from 'rxjs';\n\n@Directive({\n  selector: '[uiOptionsTriggerFor]',\n  standalone: true,\n})\nexport class OptionsTriggerDirective implements OnInit, AfterViewInit {\n  destroyRef = inject(DestroyRef);\n\n  @Input() uiOptionsTriggerFor?: CacSelectOptionsComponent<any>;\n  @Input() selector: 'self' | 'input' = 'input';\n  @Input() filter = false;\n\n  preventMenuOpen = false;\n  preventMenuClose = false;\n\n  private _selectorEl!: HTMLInputElement | undefined;\n  private _previouslyActivatedEl?: Element | undefined | null;\n\n  constructor(private host: ElementRef<HTMLInputElement>) {}\n\n  ngOnInit() {\n    const host = this.host?.nativeElement;\n    if (!host) return;\n\n    this.getSelectorEl();\n  }\n\n  ngAfterViewInit() {\n    if (!this._selectorEl) this.getSelectorEl();\n\n    if (!this.uiOptionsTriggerFor || !this._selectorEl) return;\n\n    this.host.nativeElement.style.cursor = 'pointer';\n\n    if (this.filter) {\n      this.uiOptionsTriggerFor.setElementToFocus(this._selectorEl);\n    }\n\n    fromEvent(window, 'blur')\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => {\n        this._previouslyActivatedEl = document.activeElement;\n      });\n\n    fromEvent(this._selectorEl!, 'click')\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => {\n        this.openMenu();\n      });\n\n    fromEvent(this._selectorEl!, 'focus')\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => {\n        if (this._previouslyActivatedEl === document.activeElement) return;\n        this.openMenu();\n      });\n\n    fromEvent(this._selectorEl!, 'blur')\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => {\n        this._previouslyActivatedEl = undefined;\n      });\n\n    fromEvent<KeyboardEvent>(this._selectorEl!, 'keydown')\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((e) => {\n        if (e.key === 'Enter' && !e.defaultPrevented) {\n          e.stopPropagation();\n          setTimeout(() => {\n            this.openMenu();\n          }, 10);\n        }\n      });\n\n    this.uiOptionsTriggerFor.menuClosed.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n      this.preventOpenTemporary();\n      this._selectorEl!.focus();\n    });\n  }\n\n  private getSelectorEl() {\n    const host = this.host?.nativeElement;\n    if (!host) return;\n    if (this.selector === 'input') {\n      const nearestInput = 'value' in host ? host : (host as HTMLElement).querySelector('input');\n      this._selectorEl = nearestInput ?? undefined;\n    } else {\n      this._selectorEl = host;\n    }\n  }\n\n  private openMenu() {\n    if (!this.uiOptionsTriggerFor) return;\n\n    if (this.preventMenuOpen || this.uiOptionsTriggerFor.trigger.menuOpen) return;\n    this.preventCloseTemporary();\n    this.uiOptionsTriggerFor.open();\n  }\n\n  private preventOpenTemporary() {\n    this.preventMenuOpen = true;\n    setTimeout(() => {\n      this.preventMenuOpen = false;\n    }, 5);\n  }\n  private preventCloseTemporary() {\n    this.preventMenuClose = true;\n    setTimeout(() => {\n      this.preventMenuClose = false;\n    }, 5);\n  }\n}\n","import {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  DestroyRef,\n  ElementRef,\n  EventEmitter,\n  inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  signal,\n  SimpleChanges,\n  ViewChild,\n} from '@angular/core';\nimport { MatFormField, MatFormFieldModule } from '@angular/material/form-field';\nimport { ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { DateFilterFn, MatDatepicker, MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { AsyncPipe } from '@angular/common';\nimport { createMask, InputMaskDirective, InputmaskOptions } from '../../../directives';\nimport {\n  ItemRecords$,\n  getDurationInHHMM,\n  getHHMMInDuration,\n  getFormattedDate,\n  parseDate,\n  ItemRecord,\n} from '../../../../core';\nimport { CacSelectOptionsComponent, OptionsTriggerDirective } from '../select-options';\nimport { CacIconComponent } from '../icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { CacControlErrorComponent } from '../control-error';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { QuillModule } from 'ngx-quill';\nimport { formControl, FormControlExtended } from '@al00x/forms';\n\nexport type FieldInputType = 'text' | 'password' | 'password-eye' | 'number' | 'number-nobtn' | 'time';\nexport type FieldControlType = 'input' | 'date' | 'datetime' | 'textarea' | 'select' | 'rich-text';\nexport type FieldAppearanceType = 'outlined' | 'simple' | 'compact';\nexport type FieldMaskType = 'time';\nexport type FieldFloatLabelType = 'always' | 'auto';\n\n// TODO: Remove inputmask package & replace it with a ESM package & update mask directive to support it\n\n@Component({\n  selector: 'cac-field',\n  templateUrl: './field.component.html',\n  styleUrls: ['./field.component.scss'],\n  standalone: true,\n  imports: [\n    MatInputModule,\n    MatFormFieldModule,\n    ReactiveFormsModule,\n    MatIconModule,\n    MatDatepickerModule,\n    MatButtonModule,\n    MatChipsModule,\n    MatProgressBarModule,\n    AsyncPipe,\n    InputMaskDirective,\n    CacSelectOptionsComponent,\n    OptionsTriggerDirective,\n    CacIconComponent,\n    MatProgressSpinnerModule,\n    CacControlErrorComponent,\n    QuillModule,\n  ],\n})\nexport class CacFieldComponent<T> implements OnInit, AfterViewInit, OnDestroy, OnChanges {\n  readonly destroyRef = inject(DestroyRef);\n\n  @ViewChild('MatFormField') formField!: MatFormField;\n  @ViewChild('InputElement') inputElement?: ElementRef<HTMLInputElement>;\n  @ViewChild('SelectElement') selectElement?: ElementRef<HTMLInputElement>;\n  @ViewChild('Options') selectOptions?: CacSelectOptionsComponent<any>;\n  @ViewChild('DatePicker') datepickerElement?: MatDatepicker<any>;\n\n  // Primary Inputs\n\n  @Input() control: FormControlExtended = formControl(undefined);\n  @Input() value?: any;\n  @Input() controlType: FieldControlType = 'input';\n  @Input() appearance?: FieldAppearanceType = 'outlined';\n  @Input() label?: string;\n  @Input() placeholder?: string = '';\n  @Input() align?: 'left' | 'right';\n  @Input() prefixIcon?: string;\n  @Input() suffixIcon?: string;\n  @Input() suffix?: string;\n  @Input() prefix?: string;\n  // the whole error component will be removed (no error styling)\n  @Input() hideError?: boolean;\n  // the error text will be invisible (error styling and space is available)\n  @Input() invisibleError?: boolean;\n  @Input() clearable = false;\n  @Input() hint?: string;\n  @Input() loading = false;\n  @Input() hideStar = false;\n  @Input() floatLabel?: FieldFloatLabelType = 'auto';\n\n  // Secondary Inputs\n\n  @Input() inputType: FieldInputType = 'text';\n  @Input() maskType?: FieldMaskType;\n  @Input() items: ItemRecords$<T, any> | undefined;\n  @Input() categories?: ItemRecords$<string | number, any>;\n  @Input() multiple?: boolean;\n  @Input() optional = false;\n  @Input() searchable = true;\n  @Input() showIcons = false;\n  @Input() autoComplete: boolean | 'new-password' | string = true;\n  @Input() textareaRows?: number = 3;\n  @Input() resizable = false;\n  @Input() hideSuffix = false;\n  @Input() dateFilter: DateFilterFn<any> = () => true;\n  @Input() menuClass?: string;\n  @Input() min = 0;\n\n  @Output() onSelect = new EventEmitter<T>();\n\n  controlSub = new Subscription();\n  itemsUpdateSub = new Subscription();\n  showPassword$ = new BehaviorSubject(false);\n  inputMask?: InputmaskOptions<any>;\n  isLoading = signal(false);\n  isFocused = signal(false);\n  isMenuOpen = signal(false);\n  hasStar = signal(false);\n  overrideFloatLabel = signal<FieldFloatLabelType | undefined>(undefined);\n\n  protected tempControl = formControl();\n\n  constructor(private cdr: ChangeDetectorRef) {}\n\n  ngOnInit() {\n    if (this.maskType) {\n      this.inputMask = getInputMask(this.maskType);\n    } else if (this.controlType === 'datetime') {\n      this.inputMask = getInputMask('datetime');\n    }\n\n    this.tempControl.valueChanges.subscribe((value) => {\n      this.control.setValue(value);\n    });\n  }\n\n  ngAfterViewInit() {\n    this.cdr.detectChanges();\n\n    setTimeout(() => {\n      if (this.selectOptions) {\n        this.selectOptions.isLoading$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((v) => {\n          this.isLoading.set(v);\n        });\n      }\n    }, 1);\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['control']) {\n      this.controlSub?.unsubscribe();\n      this.hasStar.set(this.control.hasValidator(Validators.required));\n      this.controlSub = this.control.status$.subscribe(() => {\n        this.control.updateValueAndValidity({ emitEvent: false });\n      });\n      this.controlSub.add(\n        this.control.value$.subscribe((value) => {\n          this.tempControl.setValue(value, { emitEvent: false });\n        }),\n      );\n    }\n    if (changes['value']) {\n      this.control.setValue(this.value);\n    }\n  }\n\n  ngOnDestroy() {\n    this.controlSub?.unsubscribe();\n    this.itemsUpdateSub?.unsubscribe();\n  }\n\n  reset() {\n    this.control.reset();\n  }\n\n  setFocus(state: boolean) {\n    this.isFocused.set(state);\n  }\n\n  focus() {\n    this.inputElement?.nativeElement.focus();\n    this.selectElement?.nativeElement.focus();\n  }\n\n  protected onClearClick(e: MouseEvent) {\n    e.stopPropagation();\n    e.preventDefault();\n    this.control.setValue(this.controlType === 'input' ? '' : null);\n    this.control.markAsDirty();\n    this.control.markAsTouched();\n    this.control.emitStatus();\n    this.focus();\n  }\n\n  protected onFocus() {\n    this.setFocus(true);\n    if (this.controlType === 'date') {\n      this.datepickerElement?.open();\n    }\n  }\n\n  protected onBlur() {\n    this.setFocus(false);\n\n    // There's a problem/bug with password typed inputs, which their statuses are not being updated...\n    // We call the update manually\n    if (this.inputType === 'password') {\n      setTimeout(() => {\n        this.control.emitStatus();\n      }, 1);\n    }\n  }\n\n  protected onFormFieldClick() {\n    if (this.controlType === 'select') {\n      setTimeout(() => {\n        this.focus();\n      }, 1);\n    } else if (this.controlType === 'date') {\n      this.datepickerElement?.open();\n    }\n  }\n\n  protected onNumericUp() {\n    this.numericAddToValue(1);\n  }\n\n  protected onNumericDown() {\n    this.numericAddToValue(-1);\n  }\n\n  protected onSelectOptionsMultiple(v: any[]) {\n    // In multiple mode, floatLabel doesn't move on select, so we need to override it\n    this.overrideFloatLabel.set(v && v.length ? 'always' : undefined);\n  }\n\n  protected openDatePicker(e: MouseEvent) {\n    e.stopPropagation();\n    this.isMenuOpen.set(true);\n    this.datepickerElement?.open();\n  }\n\n  protected onDatePickerClose() {\n    this.isMenuOpen.set(false);\n    if (this.controlType === 'datetime') {\n      this.focus();\n    }\n  }\n\n  private numericAddToValue(value: number) {\n    let currentValue = parseInt(this.control.value);\n    if (isNaN(currentValue)) {\n      this.control.setValue(value);\n      return;\n    } else {\n      currentValue += value;\n      this.control.setValue(currentValue);\n    }\n  }\n\n  protected passwordVisibility() {\n    this.showPassword$.next(!this.showPassword$.value);\n  }\n}\n\nfunction getInputMask(type: FieldMaskType | 'datetime') {\n  switch (type) {\n    case 'time':\n      return createMask({\n        alias: 'datetime',\n        inputFormat: 'HH:MM',\n        placeholder: '__:__',\n        parser: (v: string) => {\n          return getHHMMInDuration(v);\n        },\n        formatter: (v: string | number) => {\n          return typeof v === 'string' ? v : getDurationInHHMM(v);\n        },\n      });\n    case 'datetime':\n      return createMask({\n        alias: 'datetime',\n        inputFormat: 'yyyy/mm/dd , HH:MM',\n        placeholder: '____/__/__ , __:__',\n        parser: (v: string) => {\n          if (v.includes('_')) return v;\n          return parseDate(v, 'yyyy/MM/dd , HH:mm');\n        },\n        formatter: (v: Date | string) => {\n          return getFormattedDate(v, 'yyyy/MM/dd , HH:mm');\n        },\n      });\n  }\n}\n","@let state = {\n  showPassword: showPassword$ | async,\n  isReadonly: control.readonly$ | async\n};\n\n@if (state) {\n  <!--  <p *ngIf=\"label\" class=\"ui-field-label\">-->\n  <!--    {{ label }}-->\n  <!--    <span *ngIf=\"hasStar()\" class=\"required-star\">*</span>-->\n<!--  </p>-->\n<mat-form-field\n  #MatFormField\n  [class.type-textarea]=\"controlType === 'textarea'\"\n  [class.infix-flex]=\"controlType === 'datetime'\"\n  [class.align-left]=\"align === 'left'\"\n  [class.align-right]=\"align === 'right'\"\n  [class.ui-field-outlined]=\"appearance === 'outlined' && controlType !== 'rich-text'\"\n  [class.ui-field-compact]=\"appearance === 'compact' || controlType === 'rich-text'\"\n  [class.ui-field-simple]=\"appearance === 'simple'\"\n  [class.is-readonly]=\"state.isReadonly\"\n  [class.hide-error]=\"hideError\"\n  [class.ui-field-disabled]=\"control.disabled$ | async\"\n  [class.ui-field-inactive]=\"(control.disabled$ | async) || state.isReadonly\"\n  class=\"ui-field relative w-full\"\n  appearance=\"outline\"\n  [hideRequiredMarker]=\"true\"\n  [class.loading]=\"loading\"\n  [title]=\"control.displayText ?? (control.value !== null && control.value !== undefined ? control.value : '')\"\n  [floatLabel]=\"overrideFloatLabel() ?? floatLabel ?? 'auto'\"\n  (click)=\"onFormFieldClick()\"\n  >\n  @if (label) {\n    <mat-label class=\"ui-field-label\">\n      {{ label }}\n      @if (hasStar()) {\n        <span class=\"required-star\">*</span>\n      }\n    </mat-label>\n  }\n  <!-- Prefix Elements -->\n  @if (prefixIcon) {\n    <mat-icon matPrefix class=\"w-6 h-6\" [svgIcon]=\"prefixIcon\"></mat-icon>\n  }\n  <!-- Inputs -->\n  @switch (controlType) {\n    @default {\n      <input\n        #InputElement\n        [class.numeric-field-fix]=\"maskType === 'time' || (inputType === 'number' && control.value)\"\n        matInput\n        [min]=\"min\"\n        [formControl]=\"control\"\n        [placeholder]=\"placeholder ?? ''\"\n        [readonly]=\"state.isReadonly\"\n        [autocomplete]=\"autoComplete === true ? 'on' : autoComplete === false ? 'off' : autoComplete\"\n          [type]=\"\n            inputType === 'password-eye'\n              ? (showPassword$ | async)\n                ? 'text'\n                : 'password'\n              : inputType === 'number-nobtn'\n                ? 'number'\n                : inputType\n          \"\n        [inputMask]=\"inputMask\"\n        (focus)=\"onFocus()\"\n        (blur)=\"onBlur()\"\n        [tabindex]=\"state.isReadonly ? -1 : 0\"\n        />\n    }\n    @case ('rich-text') {\n      <input matInput [formControl]=\"control\" class=\"hidden\" readonly tabindex=\"-1\" />\n      <quill-editor\n        [formControl]=\"control\"\n        class=\"bg-white min-h-92 w-full\"\n        format=\"html\"\n        [dir]=\"'ltr'\"\n        [placeholder]=\"placeholder || 'Write Here'\"\n        [modules]=\"{toolbar: {}}\">\n      </quill-editor>\n    }\n    @case ('select') {\n      <input matInput [formControl]=\"control\" class=\"hidden\" readonly tabindex=\"-1\" />\n      <input\n        #SelectElement\n        class=\"w-full bg-inherit\"\n        [uiOptionsTriggerFor]=\"Options\"\n        [formControl]=\"control.displayControl\"\n        [tabindex]=\"state.isReadonly ? -1 : 0\"\n        [placeholder]=\"placeholder ?? ''\"\n        [readonly]=\"true\"\n        />\n      <cac-select-options\n        #Options\n        [control]=\"control\"\n        [items]=\"items\"\n        [optional]=\"optional\"\n        [multiple]=\"multiple\"\n        [searchable]=\"searchable\"\n        [showIcons]=\"showIcons\"\n        [categories]=\"categories\"\n        [menuClass]=\"menuClass\"\n        (onSelect)=\"onSelect.emit($event)\"\n        (onMultiSelect)=\"onSelectOptionsMultiple($event)\"\n      ></cac-select-options>\n    }\n    @case ('date') {\n      <input\n        matInput\n        [formControl]=\"control\"\n        [matDatepicker]=\"DatePicker\"\n        [placeholder]=\"placeholder ?? ''\"\n        [readonly]=\"true\"\n        (focus)=\"onFocus()\"\n        (blur)=\"onBlur()\"\n        [matDatepickerFilter]=\"dateFilter\"\n        [tabindex]=\"state.isReadonly ? -1 : 0\"\n        />\n    }\n    @case ('datetime') {\n      <input\n        matInput\n        #InputElement\n        [formControl]=\"control\"\n        class=\"numeric-field-fix\"\n        [readonly]=\"state.isReadonly\"\n        autocomplete=\"off\"\n        [inputMask]=\"inputMask\"\n        (focus)=\"onFocus()\"\n        (blur)=\"onBlur()\"\n        [tabindex]=\"state.isReadonly ? -1 : 0\"\n        />\n      <input class=\"hidden\" [matDatepicker]=\"DatePicker\" [formControl]=\"tempControl\" tabindex=\"-1\" readonly />\n      <!--        <input-->\n      <!--          class=\"flex-auto\"-->\n      <!--          [formControl]=\"control\"-->\n      <!--          [matDatepicker]=\"DatePicker\"-->\n      <!--          [placeholder]=\"placeholder ?? ''\"-->\n      <!--          [readonly]=\"true\"-->\n      <!--          (focus)=\"onFocus()\"-->\n      <!--          (blur)=\"onBlur()\"-->\n      <!--          [matDatepickerFilter]=\"dateFilter\"-->\n      <!--          [tabindex]=\"state.isReadonly ? -1 : 0\"-->\n      <!--        />-->\n    }\n    @case ('textarea') {\n      <textarea\n        matInput\n        [formControl]=\"control\"\n        [placeholder]=\"placeholder ?? ''\"\n        [readonly]=\"state.isReadonly\"\n        [rows]=\"textareaRows ?? 3\"\n        [style]=\"!resizable ? 'resize: none;' : ''\"\n        (focus)=\"onFocus()\"\n        (blur)=\"onBlur()\"\n        [tabindex]=\"state.isReadonly ? -1 : 0\"\n      ></textarea>\n    }\n  }\n  <mat-datepicker #DatePicker (closed)=\"onDatePickerClose()\" [restoreFocus]=\"false\">\n    <mat-datepicker-actions>\n      <button class=\"text-error\" mat-button matDatepickerCancel i18n=\"@@base.ui.field.cancel\">Cancel</button>\n      <button class=\"text-primary\" mat-button matDatepickerApply i18n=\"@@base.ui.field.apply\">Save</button>\n    </mat-datepicker-actions>\n  </mat-datepicker>\n  <!-- Suffix Elements -->\n  <!--    <mat-icon-->\n  <!--      *ngIf=\"inputType === 'password'\"-->\n  <!--      matSuffix-->\n  <!--      class=\"w-6 h-6 cursor-pointer select-none\"-->\n  <!--      (click)=\"showPassword$.next(!state.showPassword)\"-->\n  <!--    >-->\n  <!--      {{ state.showPassword ? 'visibility' : 'visibility_off' }}-->\n<!--    </mat-icon>-->\n@if (isLoading()) {\n  <div class=\"absolute bottom-0 left-0 right-0\">\n    <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n  </div>\n}\n@if (clearable) {\n  <cac-icon\n    icon=\"close\"\n    matSuffix\n      class=\"clear-button {{\n        control.value === '' ||\n        control.value === undefined ||\n        control.value === null ||\n        control.value?.length === 0 ||\n        control.disabled ||\n        control.readonly\n          ? 'hide-clear'\n          : ''\n      }} {{\n        !isFocused() && controlType !== 'select' && controlType !== 'date' ? 'opacity-0 pointer-events-none' : ''\n      }}\"\n    size=\"1.5rem\"\n    (mousedown)=\"$event.preventDefault()\"\n    (onClick)=\"onClearClick($event)\"\n  ></cac-icon>\n}\n@if (controlType === 'date' || controlType === 'datetime') {\n  <cac-icon\n    class=\"date-toggle-button\"\n    matSuffix\n    (onClick)=\"openDatePicker($event)\"\n    >\n    <mat-icon class=\"w-6 h-6 text-primary-600\" matDatepickerToggleIcon svgIcon=\"calendar\"></mat-icon>\n  </cac-icon>\n}\n@if (prefix) {\n  <span matPrefix class=\"text-sm font-medium opacity-70\">{{ prefix }}</span>\n}\n@if (suffix) {\n  <span matSuffix class=\"text-sm font-medium opacity-70\">{{ suffix }}</span>\n}\n@if (suffixIcon) {\n  <mat-icon matSuffix class=\"w-6 h-6\" [svgIcon]=\"suffixIcon\"></mat-icon>\n}\n@if (inputType === 'password-eye') {\n  <mat-icon\n    (click)=\"passwordVisibility()\"\n    matSuffix\n    [svgIcon]=\"(showPassword$ | async) ? 'eye' : 'eye-slash'\"\n  ></mat-icon>\n}\n@if (controlType === 'select' && !state.isReadonly) {\n  <mat-icon\n    class=\"w-4 text-inherit\"\n    matSuffix\n    svgIcon=\"dropdown\"\n  ></mat-icon>\n}\n@if (controlType === 'input' && inputType === 'number') {\n  <div class=\"numeric-control\" matSuffix>\n    <cac-icon class=\"text-primary h-4\" icon=\"numeric-up\" size=\"0.75rem\" (onClick)=\"onNumericUp()\"></cac-icon>\n    <cac-icon class=\"text-primary h-4\" icon=\"numeric-down\" size=\"0.75rem\" (onClick)=\"onNumericDown()\"></cac-icon>\n  </div>\n}\n@if (!hideSuffix) {\n  <div class=\"empty:hidden\" matSuffix>\n    <ng-content select=\"[slot=suffix]\"></ng-content>\n  </div>\n}\n</mat-form-field>\n<!-- Error, we are not using mat-error because of the limitations -->\n@if (!hideError && !invisibleError) {\n  <cac-control-error [control]=\"control\"></cac-control-error>\n}\n}\n\n@if (loading) {\n  <div class=\"absolute bottom-6 left-0 right-0\">\n    <mat-progress-bar class=\"w-full\" color=\"primary\" mode=\"indeterminate\"></mat-progress-bar>\n  </div>\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport {\n  DateRange,\n  DefaultMatCalendarRangeStrategy,\n  MAT_DATE_RANGE_SELECTION_STRATEGY,\n  MatDatepickerModule,\n} from '@angular/material/datepicker';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { DatePipe, NgTemplateOutlet } from '@angular/common';\nimport { CacButtonComponent } from '../button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { CacFieldComponent } from '../field';\nimport { formControl } from '@al00x/forms';\nimport { DateFns } from '../../../../core';\n\nexport const DATE_FORMAT = 'yyyy/MM/dd';\n\n@Component({\n  selector: 'cac-date-picker',\n  templateUrl: './date-picker.component.html',\n  styleUrls: ['./date-picker.component.scss'],\n  imports: [\n    MatDatepickerModule,\n    ReactiveFormsModule,\n    CacButtonComponent,\n    MatIconModule,\n    CacFieldComponent,\n    MatMenuModule,\n    NgTemplateOutlet,\n  ],\n  providers: [\n    {\n      provide: MAT_DATE_RANGE_SELECTION_STRATEGY,\n      useClass: DefaultMatCalendarRangeStrategy,\n    },\n    { provide: DatePipe },\n  ],\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CacDatePickerComponent {\n  @Input() type: 'calendar' | 'date-picker' | 'input' = 'calendar';\n  @Input() mode: 'one-day' | 'range' = 'range';\n  @Input() title = 'Date';\n  @Output() date = new EventEmitter<DateRange<Date | null> | Date>();\n\n  constructor(private datePipe: DatePipe) {}\n\n  dateControl = formControl();\n  dateRangeGroup = new FormGroup({\n    start: formControl(),\n    end: formControl(),\n  });\n  selectedDateRange?: DateRange<Date | undefined>;\n  oneDayFormControl = formControl<string | undefined>();\n  oneDay?: Date;\n\n  selectRange(date: Date | null | undefined): void {\n    if (!date) return;\n\n    const jalali = this.makeJalaliDate(date);\n    const startDate = this.selectedDateRange?.start;\n    if (this.dateRangeGroup.controls.start.value && startDate && date > startDate) {\n      this.dateRangeGroup.controls.end.setValue(jalali);\n      this.selectedDateRange = new DateRange(this.selectedDateRange?.start, date);\n    } else {\n      this.dateRangeGroup.controls.end.setValue(undefined);\n      this.selectedDateRange = new DateRange(undefined, undefined);\n      this.dateRangeGroup.controls.start.setValue(jalali);\n      this.selectedDateRange = new DateRange(date, null);\n    }\n  }\n\n  selectOneDay(date: Date | undefined | null) {\n    if (!date) return;\n\n    this.oneDayFormControl?.setValue(this.makeJalaliDate(date));\n    this.oneDay = date;\n  }\n\n  makeJalaliDate(date: Date) {\n    //Milady date\n    const year = date.getFullYear();\n    const day = date.getDate();\n    const month = date.getMonth() + 1;\n    return DateFns().format(new Date(year, month, day), DATE_FORMAT);\n  }\n\n  inputDateManually(control: FormControl, type?: 'first' | 'second') {\n    const date: string[] = control.value.split('/');\n    if (date.length < 3) return;\n    const dateNumber: number[] = date.map((str) => (str === '' ? Number('01') : Number(str)));\n    // TODO: Fix this\n    // const miladyDate = newDate(dateNumber[0], dateNumber[1] - 1, dateNumber[2]);\n    dateNumber;\n    const miladyDate = undefined;\n\n    if (miladyDate) {\n      if (this.mode === 'one-day') {\n        this.oneDay = miladyDate;\n      } else {\n        if (type === 'first') {\n          this.selectedDateRange = new DateRange(miladyDate, this.selectedDateRange?.end);\n        } else {\n          this.selectedDateRange = new DateRange(this.selectedDateRange?.start, miladyDate);\n        }\n      }\n    }\n  }\n\n  submit() {\n    let date;\n    if (this.mode === 'range') {\n      date = new DateRange(\n        new Date(this.dateRangeGroup.controls.start.value ?? ''),\n        new Date(this.dateRangeGroup.controls.end.value ?? ''),\n      );\n    } else {\n      date = new Date(this.oneDayFormControl.value ?? '');\n    }\n\n    this.date.emit(date ?? undefined);\n  }\n  cancel() {\n    this.selectedDateRange = new DateRange(undefined, undefined);\n    this.dateRangeGroup.controls.start.setValue(undefined);\n    this.dateRangeGroup.controls.end.setValue(undefined);\n    this.oneDayFormControl.setValue(undefined);\n    this.oneDay = undefined;\n  }\n}\n","<div class=\"rounded-4 px-2 py-4 bg-surface-light-surface overflow-hidden\">\n  @switch (type) {\n    @case ('calendar') {\n      <ng-container [ngTemplateOutlet]=\"calendar\"></ng-container>\n    }\n    @case ('date-picker') {\n    <ng-container [ngTemplateOutlet]=\"datepicker\"></ng-container>\n    }\n  }\n  <hr />\n  <div class=\"h-16 w-full flex flex-row items-center justify-end\">\n    <cac-button [appearance]=\"'text'\" (onClick)=\"cancel()\">Cancel</cac-button>\n    <cac-button [appearance]=\"'text'\" (onClick)=\"submit()\">Save</cac-button>\n  </div>\n</div>\n\n<ng-template #calendar>\n  <div class=\"w-full flex flex-col justify-between py-2 h-16\">\n    <p class=\"title\">{{ title }}</p>\n    <div class=\"flex flex-row items-center justify-between\">\n      @if (mode === 'range') {\n        <p>\n          {{ dateRangeGroup.controls.start.value ?? '' }}\n          <span>-</span>\n          {{ dateRangeGroup.controls.end.value ?? '' }}\n        </p>\n      }\n      @if (mode === 'one-day') {\n        <p>\n          {{ dateRangeGroup.controls.start.value }}\n        </p>\n      }\n      <mat-icon class=\"w-4 h-4 cursor-pointer\" svgIcon=\"edit\"></mat-icon>\n    </div>\n  </div>\n  <hr />\n  <ng-container [ngTemplateOutlet]=\"matCalendar\"></ng-container>\n</ng-template>\n\n<ng-template #datepicker>\n  <div class=\"date-picker-container\">\n    <div class=\"flex flex-col\">\n      <p class=\"title\">{{ title }}</p>\n      <div class=\"w-full flex flex-row justify-between items-center\">\n        <p>Select a {{ mode === 'range' ? 'date range' : 'date' }}</p>\n        <mat-icon class=\"calendar\" svgIcon=\"calendar\" [matMenuTriggerFor]=\"calendarMenu\"></mat-icon>\n      </div>\n    </div>\n    <hr />\n    @switch (mode) {\n      @case ('range') {\n        <div class=\"w-full flex flex-row p-2 items-center justify-between\">\n          <cac-field\n            (keyup)=\"inputDateManually(dateRangeGroup.controls.start, 'first')\"\n            [prefixIcon]=\"undefined\"\n            class=\"w-[45%] text-xs\"\n            placeholder=\"yy/mm/dd\"\n            [control]=\"dateRangeGroup.controls.start\"\n            label=\"Start date\"\n          ></cac-field>\n          <cac-field\n            (keyup)=\"inputDateManually(dateRangeGroup.controls.end, 'second')\"\n            [prefixIcon]=\"undefined\"\n            class=\"w-[45%] text-xs\"\n            placeholder=\"yy/mm/dd\"\n            [control]=\"dateRangeGroup.controls.end\"\n            label=\"End date\"\n          ></cac-field>\n        </div>\n      }\n      @case ('one-day') {\n        <div class=\"p-2 flex items-center justify-center\">\n          <cac-field\n            (keyup)=\"inputDateManually(oneDayFormControl)\"\n            [prefixIcon]=\"undefined\"\n            [control]=\"oneDayFormControl\"\n            class=\"bg-transparent\"\n            label=\"Date\"\n            placeholder=\"Date\"\n          ></cac-field>\n        </div>\n      }\n  }\n  </div>\n</ng-template>\n\n<ng-template #matCalendar>\n  <div>\n    @switch (mode) {\n    @case('range') {\n      <mat-calendar (selectedChange)=\"selectRange($event)\" [selected]=\"selectedDateRange\">\n      </mat-calendar>\n    }\n    @case ('one-day') {\n    <mat-calendar [selected]=\"oneDay\" (selectedChange)=\"selectOneDay($event)\"> </mat-calendar>\n    }\n  }\n  </div>\n</ng-template>\n\n<mat-menu #calendarMenu>\n  <div role=\"presentation\" class=\"p-1 bg-surface-light-surface\" (click)=\"$event.stopPropagation()\">\n    <ng-container [ngTemplateOutlet]=\"matCalendar\"></ng-container>\n  </div>\n</mat-menu>\n","import {\n  Component,\n  ElementRef,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  signal,\n  SimpleChanges,\n  ViewChild,\n} from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { CacControlErrorComponent } from '../control-error';\nimport { createMask, InputMaskDirective } from '../../../directives';\nimport { formControl, FormControlExtended } from '@al00x/forms';\nimport { MatInputModule } from '@angular/material/input';\n\n@Component({\n  selector: 'cac-license-plate',\n  standalone: true,\n  imports: [\n    ReactiveFormsModule,\n    InputMaskDirective,\n    AsyncPipe,\n    CacControlErrorComponent,\n    NgTemplateOutlet,\n    MatInputModule,\n],\n  templateUrl: './license-plate.component.html',\n  styleUrls: ['./license-plate.component.scss'],\n})\nexport class CacLicensePlateComponent implements OnChanges, OnDestroy, OnInit {\n  @ViewChild('input') inputEl?: ElementRef<HTMLInputElement>;\n  @Input() control: FormControlExtended = formControl<string | undefined>(undefined);\n  @Input() label?: string;\n  @Input() hideError = false;\n  @Input() mini = false;\n  @Input() readonly = false;\n\n  @Input() value?: string;\n\n  inputMask = createMask({\n    definitions: {\n      D: {\n        validator:\n          // '\\u0628|\\u062c|\\u062F|\\u0633|\\u0635|\\u0698|\\u0642|\\u0637|\\u0644|\\u0645|\\u0646|\\u0647|\\u0648|\\u0649|\\u06BE|\\u06CC|\\u0639',\n          '[\\u0600-\\u06FF]',\n      },\n      '0': {\n        validator: '\\\\d|[\\u06F0-\\u06F9]',\n      },\n    },\n    mask: '00 D 000 00',\n    placeholder: '__ _ ___ __',\n    skipOptionalPartCharacter: ' ',\n    parser: (v: string) => v.replace(/ /g, ''),\n  });\n  firstSection?: string;\n  letterSection?: string;\n  secondSection?: string;\n  stateSection?: string;\n  sub = new Subscription();\n  isFocused = signal(false);\n\n  ngOnInit(): void {\n    if (this.value) {\n      this.control.patchValue(this.value);\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['control'] || changes['value']) {\n      this.sub?.unsubscribe();\n      this.sub = this.control.valueChanges.subscribe(() => {\n        this.parsePlateSections();\n      });\n    }\n  }\n\n  ngOnDestroy() {\n    this.sub.unsubscribe();\n  }\n\n  onFocusChanged(focus: boolean) {\n    this.isFocused.set(focus);\n  }\n\n  onInputChange() {\n    this.updateInputActualValue();\n  }\n\n  private parsePlateSections() {\n    const value = this.inputEl?.nativeElement?.value ?? '';\n    const split = value.split(' ');\n    this.firstSection = split.length > 0 ? split[0] : '';\n    this.letterSection = split.length > 1 ? split[1] : '';\n    this.secondSection = split.length > 2 ? split[2] : '';\n    this.stateSection = split.length > 3 ? split[3] : '';\n  }\n\n  private updateInputActualValue() {\n    if (!this.inputEl?.nativeElement) return;\n    const value = this.inputEl.nativeElement.value ?? '';\n    const placeholder = this.inputMask.placeholder ?? '';\n    (this.inputEl.nativeElement as any).actualValue = this.extractValueFromMask(value, placeholder);\n  }\n\n  private extractValueFromMask(maskedValue: string, placeholder: string) {\n    let result = '';\n    for (let i = 0; i < maskedValue.length; i++) {\n      if (maskedValue.at(i) !== placeholder.at(i)) {\n        result += maskedValue.at(i);\n      }\n    }\n    return result;\n  }\n}\n","@let isReadonly = (control.readonly$ | async) || readonly;\n\n<div [class.pointer-events-none]=\"isReadonly\">\n  @if (!mini) {\n    <ng-container [ngTemplateOutlet]=\"Default\"></ng-container>\n  } @else {\n    <mat-form-field\n      class=\"feature-license-plate-field\"\n      [class.hide-error]=\"hideError\"\n      floatLabel=\"always\"\n      appearance=\"outline\"\n      (click)=\"input.focus()\"\n      (keydown.enter)=\"input.focus()\"\n      >\n      @if (label !== '') {\n        <mat-label>{{ label ?? 'License Plate' }}</mat-label>\n      }\n      <input\n        matInput\n        class=\"absolute opacity-0 w-0 h-0\"\n        #input\n        type=\"text\"\n        [formControl]=\"control\"\n        [inputMask]=\"inputMask\"\n        [readonly]=\"isReadonly\"\n        (focus)=\"onFocusChanged(true)\"\n        (blur)=\"onFocusChanged(false)\"\n        (input)=\"onInputChange()\"\n        />\n      <div class=\"feature-license-plate-mini\">\n        <div class=\"iran-section\">\n          <img class=\"w-full\" src=\"assets/base/images/iran-flag-mini.webp\" alt=\"\" />\n          <span class=\"mt-auto mb-3.5\">I.R.</span>\n          <span class=\"-mt-1 mb-1\">IRAN</span>\n        </div>\n        <div class=\"section-wrapper\">\n          <span class=\"first-section ps-2\">{{ firstSection }}</span>\n          <span class=\"letter-section\">{{ letterSection }}</span>\n          <span class=\"second-section\">{{ secondSection }}</span>\n          <span class=\"state-section px-2\">{{ stateSection }}</span>\n        </div>\n      </div>\n    </mat-form-field>\n    @if (!hideError) {\n      <div class=\"relative\">\n        <cac-control-error [control]=\"control\"></cac-control-error>\n      </div>\n    }\n  }\n</div>\n<ng-template #Default>\n  <div class=\"feature-license-plate-default\" (click)=\"input.focus()\" (keydown.enter)=\"input.focus()\">\n    @if (label) {\n      <span class=\"pb-2 ps-1 text-sm text-surface-on\" (click)=\"input.focus()\" aria-hidden=\"true\"\n        >{{ label }} :</span\n        >\n      }\n      <div class=\"wrapper {{ isFocused() ? 'is-focused' : '' }}\">\n        <div class=\"iran-section\">\n          <img class=\"w-full\" src=\"assets/base/images/iran-flag.webp\" alt=\"\" />\n          <span class=\"mt-auto ps-px leading-0 me-auto mb-2\">I.R.</span>\n          <span class=\"ps-px leading-0 mb-1\">IRAN</span>\n        </div>\n        <span class=\"first-section\">{{ firstSection }}</span>\n        <span class=\"letter-section\">{{ letterSection }}</span>\n        <span class=\"second-section\">{{ secondSection }}</span>\n        <span class=\"state-section relative\">\n          <span class=\"state-label\">Iran</span>\n          {{ stateSection }}\n        </span>\n      </div>\n    </div>\n    @if (!hideError) {\n      <div class=\"relative pb-6\">\n        <cac-control-error [control]=\"control\"></cac-control-error>\n      </div>\n    }\n    <input\n      class=\"absolute opacity-0 w-0 h-0\"\n      #input\n      type=\"text\"\n      [formControl]=\"control\"\n      [inputMask]=\"inputMask\"\n      [readonly]=\"isReadonly\"\n      (focus)=\"onFocusChanged(true)\"\n      (blur)=\"onFocusChanged(false)\"\n      (input)=\"onInputChange()\"\n      />\n  </ng-template>\n\n","import {\n  Component,\n  computed,\n  effect,\n  EventEmitter,\n  Input,\n  OnChanges,\n  Output,\n  signal,\n  SimpleChanges\n} from '@angular/core';\nimport { DecimalPipe, NgClass, NgTemplateOutlet } from '@angular/common';\nimport { distinctUntilChanged, startWith } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ScreenDetectorService } from '@al00x/screen-detector';\nimport { MatIconModule } from '@angular/material/icon';\nimport { CacFieldComponent } from '../field';\nimport { CacButtonComponent } from '../button';\nimport { ItemRecord } from '../../../../core';\nimport { formControl } from '@al00x/forms';\n\nexport interface PaginationEvent {\n  index: number;\n  page: number;\n  size: number;\n}\n\ninterface PageItem {\n  number: number;\n  jump?: boolean;\n}\n\n@Component({\n  selector: 'cac-pagination',\n  templateUrl: './pagination.component.html',\n  styleUrls: ['./pagination.component.scss'],\n  standalone: true,\n  imports: [\n    NgClass,\n    NgTemplateOutlet,\n    CacFieldComponent,\n    DecimalPipe,\n    CacButtonComponent,\n    MatIconModule\n],\n})\nexport class CacPaginationComponent implements OnChanges {\n  protected _total = signal<number>(0);\n  @Input() set total(value: number) {\n    this._total.set(value);\n  }\n  private _sizeProp = signal<number | undefined>(undefined);\n  @Input('size') set sizeProp(value: number | undefined) {\n    this._sizeProp.set(value);\n  }\n  @Input() index?: number;\n  @Input() autoHide = false;\n\n  @Output() onIndex = new EventEmitter<number>();\n  @Output() onUpdate = new EventEmitter<PaginationEvent>();\n\n  pageSizesList: ItemRecord<number>[] = [\n    { label: '10', value: 10 },\n    { label: '25', value: 25 },\n    { label: '50', value: 50 },\n    { label: '100', value: 100 },\n  ];\n\n  private _currentSizeControlValue = signal<number | null>(null);\n  protected currentSizeControl = formControl<number>(10);\n\n  visibleCount = signal(10);\n  selectedIndex = signal(0);\n  size = computed(() => this._sizeProp() ?? this._currentSizeControlValue() ?? 0);\n  page = computed(() => this.selectedIndex() + 1);\n  totalPages = computed(() => {\n    const count = Math.ceil((this._total() ?? 0) / (this.size() ?? 1));\n    return count > 0 ? count : 1;\n  });\n  startIndex = computed(() => this.selectedIndex() * this.size());\n  protected showLeftEllipsis = computed(() => {\n    try {\n      return this.pagesArray()[1].number > 2;\n    } catch {\n      return false;\n    }\n  });\n  protected showRightEllipsis = computed(() => {\n    try {\n      return this.pagesArray()[this.pagesArray().length - 2].number < this.totalPages() - 1;\n    } catch {\n      return false;\n    }\n  });\n  protected pagesArray = computed(() => {\n    const pages: PageItem[] = [];\n    const sideCount = (this.visibleCount() - 1) / 2;\n    let visibleLowRange = this.page() - Math.ceil(sideCount);\n    let visibleHighRange = this.page() + Math.floor(sideCount);\n    if (visibleLowRange < 1) {\n      while (visibleLowRange < 1) {\n        visibleLowRange++;\n        visibleHighRange++;\n      }\n      if (visibleHighRange > this.totalPages()) {\n        visibleHighRange = this.totalPages();\n      }\n    } else if (visibleHighRange > this.totalPages()) {\n      while (visibleHighRange > this.totalPages()) {\n        visibleLowRange--;\n        visibleHighRange--;\n      }\n      if (visibleLowRange < 1) {\n        visibleLowRange = 1;\n      }\n    }\n\n    for (let i = visibleLowRange; i <= visibleHighRange; i++) {\n      pages.push({ number: i });\n    }\n    if (!pages.some((t) => t.number === 1)) {\n      pages.shift();\n      pages.unshift({ number: 1 });\n    }\n    if (!pages.some((t) => this.totalPages() === t.number)) {\n      pages.pop();\n      pages.push({ number: this.totalPages() });\n    }\n\n    return pages;\n  });\n\n  constructor(private screen: ScreenDetectorService) {\n    effect(() => {\n      this.currentSizeControl.setValue(this.size())\n    })\n\n    this.currentSizeControl.valueChanges\n      .pipe(takeUntilDestroyed(), startWith(this.currentSizeControl.value), distinctUntilChanged())\n      .subscribe((value) => {\n        this._currentSizeControlValue.set(value);\n        this.emitUpdate();\n      });\n    this.screen.state$.pipe(takeUntilDestroyed()).subscribe((state) => {\n      this.visibleCount.set(state.lg ? 12 : state.md ? 10 : state.sm ? 8 : 6);\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['index'] && this.index !== undefined) {\n      this.selectedIndex.set(this.index);\n    }\n  }\n\n  next() {\n    if (this.index === this.totalPages()) {\n      return;\n    }\n    this.setPage(this.page() + 1);\n  }\n  previous() {\n    if (this.page() === 1) {\n      return;\n    }\n    this.setPage(this.page() - 1);\n  }\n\n  set(index: number) {\n    return this.setPage(index + 1);\n  }\n\n  setPage(page: number) {\n    const newIndex = page - 1;\n    this.selectedIndex.set(newIndex);\n    this.emitUpdate();\n  }\n\n  protected onSelect(page: PageItem) {\n    this.setPage(page.number);\n  }\n\n  private emitUpdate() {\n    this.onIndex.emit(this.selectedIndex());\n    this.onUpdate.emit({\n      index: this.selectedIndex(),\n      page: this.selectedIndex() + 1,\n      size: this.size(),\n    });\n  }\n}\n","<!-- Desktop -->\n<div class=\"w-full hidden lg:flex relative items-baseline pt-3\">\n  <div class=\"flex items-center justify-start flex-auto z-1\">\n    <ng-container [ngTemplateOutlet]=\"SizeSelect\"></ng-container>\n  </div>\n  <div class=\"relative text-center -top-2\">\n    <ng-container [ngTemplateOutlet]=\"TotalCountText\"></ng-container>\n  </div>\n  <div class=\"flex items-center flex-auto justify-end\">\n    <ng-container [ngTemplateOutlet]=\"Paginator\"></ng-container>\n  </div>\n</div>\n\n<!-- Mobile -->\n<div class=\"w-full flex flex-col lg:hidden relative items-center pt-6 gap-y-4\">\n  <div class=\"flex items-center justify-center\">\n    <ng-container [ngTemplateOutlet]=\"Paginator\"></ng-container>\n  </div>\n  <div class=\"absolute top-2 end-2 text-center\">\n    <ng-container [ngTemplateOutlet]=\"TotalCountText\"></ng-container>\n  </div>\n  <div class=\"flex items-center justify-start flex-auto z-1\">\n    <ng-container [ngTemplateOutlet]=\"SizeSelect\"></ng-container>\n  </div>\n</div>\n\n<ng-template #Paginator>\n  @if (!(autoHide && totalPages() === 1)) {\n    <div\n      class=\"flex relative text-gray-caption text-base justify-center items-center gap-2\"\n      >\n      <cac-button\n        appearance=\"text\"\n        theme=\"custom\"\n        class=\"navigate-button\"\n        padding=\"0.25rem\"\n        (onClick)=\"previous()\"\n        [disabled]=\"page() === 1\"\n        >\n        <mat-icon svgIcon=\"chevron-left\"></mat-icon>\n        <span i18n=\"@@base.ui.pagination.previous\">Previous</span>\n      </cac-button>\n      <div class=\"flex gap-2\">\n        @for (item of pagesArray(); track item.number; let index = $index) {\n          @if (item.number === totalPages() && showRightEllipsis()) {\n            <p class=\"ellipsis-gap\">...</p>\n          }\n          <div\n            role=\"button\"\n            tabindex=\"-1\"\n            [ngClass]=\"page() === item.number ? 'selected-page' : ''\"\n            class=\"page-item\"\n            (click)=\"onSelect(item)\"\n            (keydown)=\"onSelect(item)\"\n            >\n            <p>{{ item.number | number: '2.0-0' }}</p>\n          </div>\n          @if (item.number === 1 && showLeftEllipsis()) {\n            <p class=\"ellipsis-gap\">...</p>\n          }\n        }\n      </div>\n      <cac-button\n        appearance=\"text\"\n        theme=\"custom\"\n        class=\"navigate-button\"\n        (onClick)=\"next()\"\n        padding=\"0.25rem\"\n        [disabled]=\"page() === totalPages()\"\n        >\n        <span i18n=\"@@base.ui.pagination.next\">Next</span>\n        <mat-icon svgIcon=\"chevron-right\"></mat-icon>\n      </cac-button>\n    </div>\n  }\n</ng-template>\n\n<ng-template #SizeSelect>\n  <div class=\"flex items-baseline gap-4\">\n    <span class=\"text-outline\" i18n=\"@@base.ui.pagination.perPageCount\">Items per page</span>\n    <cac-field\n      controlType=\"select\"\n      class=\"w-32 flex\"\n      [items]=\"pageSizesList\"\n      [control]=\"currentSizeControl\"\n      [hideError]=\"true\"\n      [searchable]=\"false\"\n      >\n    </cac-field>\n  </div>\n</ng-template>\n\n<ng-template #TotalCountText>\n  <p class=\"text-xs font-medium whitespace-nowrap\" i18n=\"@@base.ui.pagination.totalCount\">Total: {{ _total() }}</p>\n</ng-template>\n","import {\n  Component,\n  Input,\n  OnInit,\n  OnChanges,\n  SimpleChanges,\n  Output,\n  EventEmitter,\n  ViewChild,\n  signal,\n  computed,\n} from '@angular/core';\nimport { UntypedFormControl, ReactiveFormsModule, FormControl } from '@angular/forms';\nimport { MatRadioChange, MatRadioModule } from '@angular/material/radio';\nimport { Observable, take } from 'rxjs';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { UiRadioCompareWithDirective, UiRadioCompareWithFn } from '../../../directives';\nimport { ItemRecord, ItemRecords$ } from '../../../../core';\n\n@Component({\n  selector: 'cac-radio',\n  standalone: true,\n  imports: [ReactiveFormsModule, MatRadioModule, UiRadioCompareWithDirective, MatIconModule],\n  templateUrl: './radio.component.html',\n  styleUrls: ['./radio.component.scss'],\n})\nexport class CacRadioComponent<T> implements OnInit, OnChanges {\n  @ViewChild('RadioGroup') radioGroup!: UiRadioCompareWithDirective<any>;\n\n  @Input() control = new FormControl<T | null | undefined>(null);\n  @Input() items: ItemRecords$<T> = [];\n  @Input() label?: string;\n  @Input() readonly = false;\n  @Input() preventDefault = false;\n  @Input() value?: T;\n  @Input() hiddenItems?: T[];\n  @Input() compareFn?: UiRadioCompareWithFn<any>;\n  @Output() valueChange = new EventEmitter();\n\n  fetchedItems = signal<ItemRecord<T>[] | undefined>(undefined);\n  currentItems = computed(() => {\n    const items = this.fetchedItems();\n    if (!items) return undefined;\n    return this.hiddenItems && this.hiddenItems.length > 0\n      ? items.filter((x) => !this.hiddenItems!.includes(x.value))\n      : items;\n  });\n\n  ngOnInit() {\n    if (!this.control) {\n      this.control = new UntypedFormControl('');\n    }\n\n    this.loadItems();\n\n    if (this.value) {\n      this.control.setValue(this.value);\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['control'] && this.control === undefined) {\n      this.control = new UntypedFormControl('');\n    }\n    if (changes['items'] && !changes['items'].firstChange) {\n      this.fetchedItems.set(undefined);\n      this.loadItems();\n    }\n    if (changes['value']) {\n      this.control?.setValue(this.value);\n    }\n  }\n\n  onValueChange(e: MatRadioChange) {\n    if (this.preventDefault) {\n      this.control?.setValue(this.value, {\n        emitEvent: false,\n      });\n    }\n    this.valueChange.emit(e.value);\n  }\n\n  private loadItems() {\n    if (this.items instanceof Observable) {\n      this.items.pipe(take(1)).subscribe((result) => {\n        this.fetchedItems.set(result);\n        this.updateControlState();\n      });\n    } else {\n      this.fetchedItems.set(this.items);\n      this.updateControlState();\n    }\n  }\n\n  private updateControlState() {\n    this.control?.updateValueAndValidity();\n  }\n}\n","<div>\n  @if (label) {\n    <p class=\"separate-label h-auto\">{{ label }}</p>\n  }\n  @if (currentItems()) {\n    <mat-radio-group\n      dir=\"ltr\"\n      #RadioGroup=\"uiRadio\"\n      UiRadioCompareWith\n      [compareWith]=\"compareFn\"\n      [formControl]=\"control\"\n      color=\"primary\"\n      class=\"{{ this.control.disabled ? 'pointer-events-none opacity-70' : '' }}\"\n      (change)=\"onValueChange($event)\"\n      >\n      @for (item of currentItems(); track item.value) {\n        <mat-radio-button\n          class=\"ms-6\"\n          [class.pointer-events-none]=\"readonly\"\n          [value]=\"item.value\"\n          >{{ item.label }}\n        </mat-radio-button>\n      }\n    </mat-radio-group>\n  } @else {\n    <mat-radio-group color=\"primary\">\n      <mat-radio-button class=\"pointer-events-none\" i18n=\"@@base.ui.radio.loading\"> Loading... </mat-radio-button>\n    </mat-radio-group>\n  }\n  @if (currentItems() && currentItems()!.length === 0) {\n    <ng-content select=\"[slot=no-data]\"></ng-content>\n  }\n  @if (control.invalid && control.touched) {\n    <mat-icon\n      matSuffix\n      svgIcon=\"error\"\n      class=\"w-[1.125rem] h-[1.125rem]\"\n    ></mat-icon>\n  }\n</div>\n@if (control.invalid && control.touched) {\n  <p class=\"text-error-500 text-xs mt-3 {{ label ? 'mr-[6.25rem]' : '' }}\"\n  i18n=\"@@base.ui.radio.error\">\n    This Field Is Required.\n  </p>\n}\n\n<ng-template #Loading>\n  <mat-radio-group color=\"primary\">\n    <mat-radio-button class=\"pointer-events-none\" i18n=\"@@base.ui.radio.loading\"> Loading... </mat-radio-button>\n  </mat-radio-group>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { MatSliderModule } from '@angular/material/slider';\n\nexport interface RangeFormGroup {\n  start: FormControl<number | null>;\n  end: FormControl<number | null>;\n}\n\n@Component({\n  selector: 'cac-slider',\n  templateUrl: './slider.component.html',\n  styleUrls: ['./slider.component.scss'],\n  imports: [MatSliderModule, ReactiveFormsModule],\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CacSliderComponent {\n  @Input() type: 'basic' | 'range' = 'basic';\n  @Input() control: FormControl = new FormControl();\n  @Input() formGroup: FormGroup<RangeFormGroup> = new FormGroup({ start: new FormControl(), end: new FormControl() });\n  @Input({ required: true }) min = 0;\n  @Input({ required: true }) max = 100;\n  @Input() steps = 1;\n  @Input() hasLabel = true;\n  @Input() isDisabled = false;\n  @Input() isDoted = false;\n  @Input() label?: string;\n}\n","<div class=\"w-full flex flex-col\">\n  @if(label) {\n    <p>{{ label }}</p>\n  }\n  @switch (type) {\n    @case ('basic') {\n      <mat-slider\n      [showTickMarks]=\"isDoted\"\n      [discrete]=\"hasLabel\"\n      [disabled]=\"isDisabled\"\n      [min]=\"min\"\n      [max]=\"max\"\n      [step]=\"steps\"\n    >\n      <input [formControl]=\"control\" matSliderThumb />\n    </mat-slider>\n    }\n    @case ('range') {\n      <mat-slider\n      [showTickMarks]=\"isDoted\"\n      [discrete]=\"hasLabel\"\n      [disabled]=\"isDisabled\"\n      [min]=\"min\"\n      [max]=\"max\"\n      [step]=\"steps\"\n    >\n      <input matSliderStartThumb [value]=\"min\" [formControl]=\"$any(formGroup.controls.start)\" />\n      <input matSliderEndThumb [value]=\"max\" [formControl]=\"$any(formGroup.controls.end)\" />\n    </mat-slider>\n    }\n}\n</div>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\n\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\n\n@Component({\n  selector: 'cac-switch',\n  templateUrl: './switch.component.html',\n  styleUrls: ['./switch.component.scss'],\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [MatSlideToggleModule, FormsModule, ReactiveFormsModule],\n})\nexport class CacSwitchComponent {\n  @Input() control: FormControl = new FormControl(false);\n  @Input() label?: string;\n}\n","<div class=\"flex flex-row-reverse justify-end items-center\">\n  @if (label) {\n    <p class=\"flex items-center h-14 pe-2\">{{ label }}</p>\n  }\n  <mat-slide-toggle [formControl]=\"control\" color=\"primary\"> </mat-slide-toggle>\n</div>\n","import {\n  ChangeDetectionStrategy,\n  ContentChildren,\n  Component,\n  Input,\n  AfterViewInit,\n  TemplateRef,\n  QueryList,\n  ElementRef,\n  WritableSignal,\n  signal,\n} from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { NgTemplateOutlet } from '@angular/common';\n\nexport interface TabItem {\n  label: string;\n  bodySlot: string;\n  icon?: string;\n}\n\n@Component({\n  selector: 'cac-tabs',\n  templateUrl: './tabs.component.html',\n  styleUrls: ['./tabs.component.scss'],\n  standalone: true,\n  imports: [MatTabsModule, MatIconModule, NgTemplateOutlet],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CacTabsComponent implements AfterViewInit {\n  @Input() tabs: WritableSignal<TabItem[]> = signal([]);\n  @Input() hasIcon = true;\n  @ContentChildren('content') allBody?: QueryList<TemplateRef<ElementRef>>;\n  contents?: TemplateRef<ElementRef>[];\n  currentIndex = 0;\n\n  ngAfterViewInit(): void {\n    this.contents = this.allBody?.toArray();\n  }\n}\n","<div>\n  <mat-tab-group (selectedTabChange)=\"currentIndex = $event.index\" mat-stretch-tabs=\"true\" mat-align-tabs=\"center\">\n    @for (tab of tabs(); track tab.label; let index = $index) {\n      <mat-tab [label]=\"tab.label\">\n        @if (hasIcon) {\n          <ng-template mat-tab-label>\n            <mat-icon\n              class=\"w-4 h-4 mx-2 {{ index === currentIndex ? 'text-primary' : 'text-gray-700' }}\"\n              [svgIcon]=\"tab.icon ?? 'tabicon'\"\n            ></mat-icon>\n            {{ tab.label }}\n          </ng-template>\n        }\n        @for (content of contents; track $index; let i = $index) {\n          @if (i === index) {\n            <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n          }\n        }\n      </mat-tab>\n    }\n  </mat-tab-group>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { CacButtonComponent } from '../button';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { animate, style, transition, trigger } from '@angular/animations';\n\n@Component({\n  selector: 'cac-loader-screen',\n  standalone: true,\n  imports: [CacButtonComponent, MatProgressSpinnerModule],\n  templateUrl: './loader-screen.component.html',\n  styleUrls: ['./loader-screen.component.scss'],\n  animations: [\n    trigger('fade', [\n      transition(':enter', [\n        style({ opacity: 1 }),\n        // animate()\n      ]),\n      transition(':leave', [\n        style({ opacity: 1 }),\n        animate('750ms cubic-bezier(.26,.86,.22,1.02)', style({ opacity: 0 })),\n      ]),\n    ]),\n  ],\n})\nexport class CacLoaderScreenComponent {\n  @Input() show = false;\n  @Input() errored = false;\n  @Input() hideSpinner = false;\n  @Input() blurry = false;\n  @Input() z = 49;\n\n  onRetry() {\n    location.reload();\n  }\n}\n","@if (show) {\n  <div @fade class=\"loader\" [class.blurry]=\"blurry\" [style.z-index]=\"z\">\n    @if (!hideSpinner && !errored) {\n      <mat-spinner\n        class=\"absolute\"\n        mode=\"indeterminate\"\n        diameter=\"64\"\n        strokeWidth=\"8\"\n      ></mat-spinner>\n    }\n    <div class=\"retry-panel\" [class.show]=\"errored\">\n      <p i18n=\"@@base.ui.loaderScreen.error\">Error Occurred</p>\n      <cac-button class=\"mt-6 w-1/2\" (onClick)=\"onRetry()\">Retry</cac-button>\n    </div>\n  </div>\n}\n","import { Component } from '@angular/core';\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\n\n@Component({\n  selector: 'cac-skeleton',\n  templateUrl: './skeleton.component.html',\n  styleUrls: ['./skeleton.component.scss'],\n  standalone: true,\n  imports: [NgxSkeletonLoaderModule],\n})\nexport class CacSkeletonComponent {}\n","<ngx-skeleton-loader class=\"ui-skeleton\"></ngx-skeleton-loader>\n<div class=\"flex items-center justify-center absolute inset-0\">\n  <ng-content></ng-content>\n</div>\n","import { Component, Input, OnChanges, OnDestroy, signal, SimpleChanges } from '@angular/core';\nimport { getFromItemRecord, ItemRecord, ItemRecords$ } from '../../../../core';\nimport { Observable, of, Subscription, tap } from 'rxjs';\nimport { FormControlExtended } from '@al00x/forms';\n\n@Component({\n  selector: 'cac-field-view',\n  standalone: true,\n  imports: [],\n  templateUrl: './field-view.component.html',\n  styleUrls: ['./field-view.component.scss'],\n})\nexport class CacFieldViewComponent implements OnChanges, OnDestroy {\n  @Input() control?: FormControlExtended;\n  @Input() value?: any;\n  @Input() items?: ItemRecords$<any, any>;\n  @Input() emptyValue?: string = '-';\n\n  itemsUpdateSub = new Subscription();\n  controlUpdateSub = new Subscription();\n  currentItems = signal<ItemRecord<any, any>[] | undefined>(undefined);\n  displayValue = signal('');\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['items']) {\n      this.itemsUpdateSub?.unsubscribe();\n      this.currentItems.set(undefined);\n      const updateItems$ = this.items\n        ? (this.items instanceof Observable ? this.items : of(this.items)).pipe(\n            tap(() => {\n              this.currentItems.set(undefined);\n            }),\n            tap((result) => {\n              if (result instanceof Array) {\n                this.currentItems.set(result);\n                this.updateView();\n              }\n            }),\n          )\n        : undefined;\n\n      this.itemsUpdateSub = updateItems$ ? updateItems$.subscribe() : new Subscription();\n    }\n    if (changes['control']) {\n      this.controlUpdateSub?.unsubscribe();\n      if (this.control) {\n        this.controlUpdateSub = this.control?.value$.subscribe(() => {\n          this.updateView();\n        });\n      }\n    }\n    if (changes['value'] && !this.control) {\n      this.updateView();\n    }\n  }\n\n  ngOnDestroy() {\n    this.itemsUpdateSub.unsubscribe();\n    this.controlUpdateSub.unsubscribe();\n  }\n\n  updateView() {\n    const label = this.getLabel();\n    this.control?.setDisplayText(label);\n    this.displayValue.set(label);\n  }\n\n  getLabel() {\n    const value = this.control?.value ?? this.value;\n    if (value === undefined) return this.emptyValue;\n    if (!this.items) return value;\n    const currentItems = this.currentItems();\n    if (!currentItems) return this.emptyValue;\n    const item = getFromItemRecord(currentItems, value);\n    if (!item && value === null) return this.emptyValue;\n    if (!item) return value;\n    return item.label;\n  }\n}\n","<span>\n  {{ displayValue() }}\n</span>\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  signal,\n  SimpleChanges,\n  ViewChild,\n} from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\n\nimport { ButtonClickEvent, CacButtonComponent } from '../../ui';\nimport { ActionTypes } from '../../../../core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\n// TODO: Fix Permissions & Role\n\n@Component({\n  selector: 'cac-bottom-controls',\n  standalone: true,\n  imports: [CacButtonComponent, MatTooltipModule],\n  templateUrl: './bottom-controls.component.html',\n  styleUrls: ['./bottom-controls.component.scss'],\n})\nexport class CacBottomControlsComponent implements OnInit, OnChanges {\n  @ViewChild('SubmitButton') submitButton!: CacButtonComponent;\n\n  @Input() cancelText? = $localize`:@@base.ui.field.cancel:Cancel`\n  @Input() submitText = $localize`:@@base.ui.field.apply:Save`;\n  @Input() submitClass?: string;\n  @Input() cancelClass?: string;\n  @Input() cancelRoute?: string[];\n  @Input() hideCancel = false;\n  @Input() form?: AbstractControl;\n  @Input() disabled = false;\n  @Input() actionType?: ActionTypes | undefined;\n\n  @Output() onCancel = new EventEmitter();\n  @Output() onError = new EventEmitter();\n  @Output() onSubmit = new EventEmitter<ButtonClickEvent>();\n\n  insufficientPermission = signal(false);\n  INSUFFICIENT_PERMISSION_TEXT = $localize`:@@base.feature.dialog.insufficientPermission:You do not have permission to perform this action.`;\n\n  ngOnInit(): void {\n    this.setPermissionState();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['actionType']) {\n      this.setPermissionState();\n    }\n  }\n\n  protected onSubmitClick(e: ButtonClickEvent) {\n    if (this.disabled || this.insufficientPermission()) return;\n\n    this.submit(e);\n  }\n\n  protected onCancelClick() {\n    this.cancel();\n  }\n\n  submit(e?: ButtonClickEvent) {\n    if (this.insufficientPermission() || this.disabled) {\n      return;\n    }\n\n    const buttonEvent = e ?? this.submitButton.createClickEvent(undefined);\n    if (this.form) {\n      this.form.markAllAsTouched();\n      if (this.form.valid) {\n        this.onSubmit.emit(buttonEvent);\n      } else {\n        this.onError.emit();\n      }\n    } else {\n      this.onSubmit.emit(buttonEvent);\n    }\n  }\n\n  cancel() {\n    this.onCancel.emit();\n  }\n\n  private setPermissionState() {\n    // this.insufficientPermission.set(this.actionType ? !this.roleService.hasActionPermission(this.actionType) : false);\n  }\n}\n","<cac-button\n  #SubmitButton\n  class=\"yes-btn {{ submitClass ?? '' }}\"\n  [class.cursor-not-allowed]=\"insufficientPermission()\"\n  (onClick)=\"onSubmitClick($event)\"\n  [disabled]=\"disabled || insufficientPermission()\"\n  [matTooltip]=\"insufficientPermission() ? INSUFFICIENT_PERMISSION_TEXT : ''\"\n  >{{ submitText }}</cac-button>\n\n@if (!hideCancel && !!cancelText) {\n  <cac-button\n    [appearance]=\"'stroked'\"\n    class=\"no-btn {{ cancelClass ?? '' }}\"\n    [route]=\"cancelRoute\"\n    (onClick)=\"onCancelClick()\"\n    >{{ cancelText }}</cac-button\n  >\n}\n<ng-content></ng-content>\n","import { Component, EventEmitter, Input, Output, signal } from '@angular/core';\n\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { AbstractControl } from '@angular/forms';\nimport { ButtonClickEvent, CacIconComponent } from '../../ui';\nimport { CacBottomControlsComponent } from '../../features/bottom-controls';\nimport { ActionTypes } from '../../../../core';\n\n@Component({\n  selector: 'cac-dialog-layout',\n  standalone: true,\n  imports: [CacIconComponent, CacBottomControlsComponent],\n  templateUrl: './dialog-layout.component.html',\n  styleUrls: ['./dialog-layout.component.scss'],\n})\nexport class CacDialogLayoutComponent {\n  @Input() title = '';\n  @Input() subtitle?: string;\n  @Input() submitBtn?: string;\n  @Input() cancelBtn?: string;\n  @Input() submitClass?: string;\n  @Input() cancelClass?: string;\n  @Input() showCloseBtn = true;\n  @Input() form?: AbstractControl;\n  @Input() hideControls = false;\n\n  @Output() onSubmit = new EventEmitter<ButtonClickEvent>();\n  @Output() onError = new EventEmitter();\n  // Use this event only if you need to handle\n  @Output() onCancel = new EventEmitter();\n\n  SUBMIT_DEFAULT_TEXT = $localize`:@@base.feature.dialog.saveButtonDefault:Save`;\n  CANCEL_DEFAULT_TEXT = $localize`:@@base.feature.dialog.cancelButtonDefault:Cancel`;\n  \n  // ActionType is being set by the BaseDialog.setActionType, or you can call the setActionType from this component directly.\n  protected actionType = signal<ActionTypes | undefined>(undefined);\n\n  constructor(public dialogRef: MatDialogRef<CacDialogLayoutComponent>) {}\n\n  onCancelClick() {\n    this.closeDialog();\n    this.onCancel.emit();\n  }\n\n  closeDialog() {\n    this.dialogRef.close();\n  }\n\n  setActionType(actionType: ActionTypes | undefined) {\n    this.actionType.set(actionType);\n  }\n}\n","<div class=\"flex flex-col w-full h-full pt-6 py-9 px-11 flex-auto overflow-hidden\">\n  @if (showCloseBtn) {\n    <cac-icon\n      class=\"absolute top-5 end-9 rounded-full text-gray-900 w-10 h-10\"\n      (onClick)=\"closeDialog()\"\n      size=\"1.75rem\"\n      icon=\"close\"\n    ></cac-icon>\n  }\n  <div class=\"flex flex-col\">\n    <p class=\"text-surface-on text-xl font-medium\">{{ title }}</p>\n    @if (subtitle) {\n      <p class=\"text-surface-on text-sm mt-2\">{{ subtitle }}</p>\n    }\n  </div>\n  <div class=\"flex flex-col mt-1 p-2 flex-auto overflow-auto\">\n    <ng-content></ng-content>\n  </div>\n  @if (!hideControls) {\n    <cac-bottom-controls\n      [form]=\"form\"\n      [actionType]=\"actionType()\"\n      [submitText]=\"submitBtn ?? SUBMIT_DEFAULT_TEXT\"\n      [cancelText]=\"cancelBtn ?? CANCEL_DEFAULT_TEXT\"\n      [submitClass]=\"submitClass\"\n      [cancelClass]=\"cancelClass\"\n      (onSubmit)=\"onSubmit.emit($event)\"\n      (onCancel)=\"onCancelClick()\"\n      (onError)=\"onError.emit()\"\n      >\n      <ng-content select=\"[slot=bottom]\"></ng-content>\n    </cac-bottom-controls>\n  }\n</div>\n","import type { FormBuilderInputOption, FormBuilderOptions } from './form-builder.types';\nimport { clone } from '../../../../core';\nimport { computed, signal } from '@angular/core';\nimport { FormControlExtended, formGroup } from '@al00x/forms';\n\ntype FormBuilderTransformer<T, U> = (value: T, raw: T) => U;\n\n// this function acts as a type infer for typescript, using this function is optional\nexport function formBuilder<T, U = T>(\n  options: FormBuilderOptions<T>,\n  transformer?: FormBuilderTransformer<T, U>,\n): FormBuilder<T, U> {\n  return new FormBuilder<T, U>(options, transformer);\n}\n\nexport class FormBuilder<T, U = T> implements FormBuilderOptions<T> {\n  cols = 1;\n  width = '100%';\n  gap = '0.75rem 2rem';\n  allowAutocomplete = false;\n  defaults: FormBuilderOptions<T>['defaults'] = {\n    colspan: 1,\n    clearable: true,\n    appearance: 'outlined',\n    hideError: false,\n  };\n  inputs: { [key in keyof T]: FormBuilderInputOption<T[key]> } = {} as any;\n\n  formGroup = formGroup<any>({});\n  keys: string[] = [];\n\n  controls!: { [p in keyof T]: FormControlExtended<T[p]> };\n\n  hiddenKeysArray = signal<(keyof T)[]>([]);\n  hiddenKeys = computed(() =>\n    this.hiddenKeysArray().reduce(\n      (pre, cur) => {\n        pre[cur] = true;\n        return pre;\n      },\n      {} as { [key in keyof T]: boolean },\n    ),\n  );\n\n  invisibleKeysArray = signal<(keyof T)[]>([]);\n  invisibleKeys = computed(() =>\n    this.invisibleKeysArray().reduce(\n      (pre, cur) => {\n        pre[cur] = true;\n        return pre;\n      },\n      {} as { [key in keyof T]: boolean },\n    ),\n  );\n\n  private _onInit: FormBuilderOptions<T>['onInit'] = undefined;\n  private _onAfterInit: FormBuilderOptions<T>['onAfterInit'] = undefined;\n  private _values: FormBuilderOptions<T>['values'] = undefined;\n  private _initialValues?: T;\n  private _transfomer?: (v: T, raw: T) => U;\n\n  constructor(opts: FormBuilderOptions<T>, transformer?: FormBuilderTransformer<T, U>) {\n    this.cols = opts.cols ?? this.cols;\n    this.gap = opts.gap ?? this.gap;\n    this.width = opts.width ?? this.width;\n    this.allowAutocomplete = opts.allowAutocomplete !== undefined ? opts.allowAutocomplete : this.allowAutocomplete;\n    this.inputs = opts.inputs ?? this.inputs;\n    this._values = opts.values ?? this._values;\n    this._onInit = opts.onInit ?? this._onInit;\n    this._onAfterInit = opts.onAfterInit ?? this._onAfterInit;\n    this._transfomer = transformer;\n    this.defaults = {\n      ...this.defaults,\n      ...opts.defaults,\n    };\n\n    this.updateFormGroup();\n  }\n\n  private updateFormGroup() {\n    this.keys = Object.keys(this.inputs);\n    const inputOptions: FormBuilderInputOption<T>[] = Object.values(this.inputs);\n\n    for (let i = 0; i < this.keys.length; i++) {\n      const key = this.keys[i];\n      const option = inputOptions[i];\n      if (this.formGroup.contains(key)) {\n        this.formGroup.removeControl(key);\n      }\n      this.formGroup.addControl(key, option.control);\n\n      if (option.invisible) {\n        this.setInvisible(true, key as keyof T);\n      }\n      if (option.hidden) {\n        this.setHidden(true, key as keyof T);\n      }\n    }\n\n    this._initialValues = this.formGroup.getRawValue();\n\n    if (this._values) {\n      this.formGroup.patchValue(this._values);\n    }\n\n    this.controls = this.formGroup.controls as any;\n  }\n\n  validate() {\n    if (this.formGroup.status === 'DISABLED') return true;\n    this.formGroup.markAllAsTouched();\n    return this.formGroup.valid;\n  }\n\n  getValue(): U | null {\n    if (!this.validate()) return null;\n\n    const value = this.formGroup.value;\n    const raw = this.formGroup.getRawValue();\n\n    return this._transfomer ? this._transfomer(value, raw) : value;\n  }\n\n  setValue(value: T) {\n    this.formGroup.reset();\n    this.formGroup.patchValue(value as never);\n  }\n\n  patchValue(value: Partial<T>) {\n    this.formGroup.patchValue(value);\n  }\n\n  reset(value?: any) {\n    this.formGroup.reset(value ?? this._initialValues ?? undefined);\n    this._values = value;\n  }\n\n  invokeInit() {\n    if (this._onInit) {\n      return this._onInit(this.formGroup.controls as any, this);\n    }\n  }\n\n  invokeAfterInit() {\n    if (this._onAfterInit) {\n      return this._onAfterInit(this.formGroup.controls as any, this);\n    }\n  }\n\n  clone(values?: any): FormBuilder<T, U> {\n    const cloned = new FormBuilder<T, U>(\n      {\n        ...this,\n        values: clone(this._values),\n      },\n      this._transfomer,\n    );\n    cloned.reset(values);\n    return cloned;\n  }\n\n  setReadonly(state: boolean, ...keys: (keyof T)[]) {\n    this.forEachControl(\n      (control) => {\n        control.setReadonly(state);\n      },\n      ...keys,\n    );\n  }\n\n  get values() {\n    return this._values;\n  }\n\n  updateInput(key: keyof T, options: Partial<FormBuilderInputOption<T>>) {\n    const current = this.inputs[key];\n    this.inputs[key] = {\n      ...current,\n      ...options,\n    };\n  }\n\n  hide(...keys: (keyof T)[]) {\n    this.setHidden(true, ...keys);\n  }\n  show(...keys: (keyof T)[]) {\n    this.setHidden(false, ...keys);\n  }\n\n  setHidden(state: boolean, ...keys: (keyof T)[]) {\n    const current = [...this.hiddenKeysArray()];\n\n    for (const key of keys) {\n      const index = current.indexOf(key);\n\n      if (state && index === -1) {\n        current.push(key);\n        this.inputs[key].control.setDisabled(true);\n      } else if (!state && index !== -1) {\n        current.splice(index, 1);\n        this.inputs[key].control.setDisabled(false);\n      }\n    }\n    this.hiddenKeysArray.set(current);\n  }\n\n  setInvisible(state: boolean, ...keys: (keyof T)[]) {\n    const current = [...this.invisibleKeysArray()];\n\n    for (const key of keys) {\n      const index = current.indexOf(key);\n\n      if (state && index === -1) {\n        current.push(key);\n      } else if (!state && index !== -1) {\n        current.splice(index, 1);\n      }\n    }\n    this.invisibleKeysArray.set(current);\n  }\n\n  setDisabled(state: boolean, ...keys: (keyof T)[]) {\n    this.forEachControl(\n      (control) => {\n        control.setDisabled(state);\n      },\n      ...keys,\n    );\n  }\n\n  private forEachControl(fn: (control: FormControlExtended) => void, ...keys: (keyof T)[]) {\n    for (const [key, input] of Object.entries(this.inputs)) {\n      if (keys.length && !keys.includes(key as never)) continue;\n      fn((input as FormBuilderInputOption<any>).control);\n    }\n  }\n}\n","import { Component, computed, inject, input, Input } from '@angular/core';\nimport { AsyncPipe, NgStyle } from '@angular/common';\nimport { CacCheckboxComponent, CacFieldComponent, CacLicensePlateComponent, CacRadioComponent, CacSwitchComponent } from '../../ui';\nimport { FormBuilderInputOption } from './form-builder.types';\nimport { ScreenDetectorService } from '@al00x/screen-detector';\n\n@Component({\n  selector: 'cac-control-builder',\n  standalone: true,\n  imports: [\n    CacRadioComponent,\n    NgStyle,\n    CacCheckboxComponent,\n    CacSwitchComponent,\n    CacLicensePlateComponent,\n    CacFieldComponent,\n    AsyncPipe,\n  ],\n  templateUrl: './control-builder.component.html',\n  styleUrl: './control-builder.component.scss',\n})\nexport class CacControlBuilderComponent<T> {\n  screenDetector = inject(ScreenDetectorService);\n\n  @Input() class?: string;\n  @Input() style: { [p: string]: any } = {};\n  @Input() allowAutocomplete?: boolean;\n\n  options = input.required<FormBuilderInputOption<T>>();\n\n  protected input = computed(() => {\n    return this.options();\n    // return this.options() ?? (this.form() && this.key() ? this.form()!.inputs[this.key()!] : undefined);\n  });\n}\n","@if (input(); as input) {\n  @switch (input.type) {\n    @case ('radio') {\n      <cac-radio\n        [control]=\"input.control\"\n        [label]=\"input.label\"\n        [items]=\"input.items ?? []\"\n        class=\"{{ class }}\"\n        [ngStyle]=\"style\"\n      ></cac-radio>\n    }\n    @case ('checkbox') {\n      <cac-checkbox\n        [label]=\"input.label ?? ''\"\n        [control]=\"$any(input.control)\"\n        class=\"{{ class }}\"\n        [ngStyle]=\"style\"\n      ></cac-checkbox>\n    }\n    @case ('switch') {\n      <cac-switch\n        [control]=\"input.control\"\n        [label]=\"input.label\"\n        class=\"{{ class }}\"\n        [ngStyle]=\"style\"\n      ></cac-switch>\n    }\n    @case ('plate') {\n      <cac-license-plate\n        [control]=\"input.control\"\n        class=\"{{ class }}\"\n        [ngStyle]=\"style\"\n        [style.align-self]=\"'center'\"\n        [mini]=\"true\"\n      ></cac-license-plate>\n    }\n    @default {\n      <div class=\"flex gap-2\" [ngStyle]=\"style\">\n        <cac-field\n          style=\"width: 100%; height: 100%\"\n          class=\"{{ class }}\"\n          [control]=\"input.control\"\n          [appearance]=\"input.appearance ?? 'outlined'\"\n          [label]=\"input.label\"\n          [placeholder]=\"input.placeholder\"\n          [controlType]=\"$any(input.type) ?? 'input'\"\n          [inputType]=\"input.inputType ?? 'text'\"\n          [floatLabel]=\"(screenDetector.md$ | async) ? input.floatLabel : 'always'\"\n          [items]=\"input.items\"\n          [maskType]=\"input.mask\"\n          [suffixIcon]=\"input.suffixIcon\"\n          [prefixIcon]=\"input.prefixIcon\"\n          [hideSuffix]=\"input.hideSuffix ?? false\"\n          [suffix]=\"input.suffix\"\n          [autoComplete]=\"input.autocomplete === undefined ? allowAutocomplete! : $any(input.autocomplete)\"\n          [clearable]=\"input.clearable!\"\n          [searchable]=\"input.searchable ?? true\"\n          [optional]=\"input.optional ?? false\"\n          [multiple]=\"input.multiple ?? false\"\n          [hideError]=\"input.hideError\"\n          [textareaRows]=\"input.rows\"\n          [categories]=\"input.categories\"\n          [showIcons]=\"input.showIcons ?? false\"\n          [menuClass]=\"input.menuClass\"\n        ></cac-field>\n      </div>\n    }\n  }\n}\n","import {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  inject,\n  Injector,\n  Input,\n  OnDestroy,\n  OnInit,\n  runInInjectionContext,\n  signal,\n  ViewChild,\n} from '@angular/core';\nimport { Observable, of, Subscription, map } from 'rxjs';\nimport { AsyncPipe } from '@angular/common';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport type { FormBuilderInputItem, FormBuilderInputOption } from './form-builder.types';\nimport { FormBuilder } from './form-builder';\nimport { ScreenDetectorService } from '@al00x/screen-detector';\nimport { CacControlBuilderComponent } from './control-builder.component';\n\n@Component({\n  selector: 'cac-form-builder',\n  standalone: true,\n  imports: [\n    AsyncPipe,\n    CacControlBuilderComponent\n],\n  templateUrl: './form-builder.component.html',\n  styleUrls: ['./form-builder.component.scss'],\n})\nexport class CacFormBuilderComponent<T, U = T> implements OnInit, AfterViewInit, OnDestroy {\n  injector = inject(Injector);\n  screenDetector = inject(ScreenDetectorService);\n\n  @ViewChild('Wrapper') wrapperEl!: ElementRef<HTMLDivElement>;\n  @ViewChild('TabIndexEntry') tabIndexEntryEl!: ElementRef<HTMLInputElement>;\n\n  @Input('options') _options!: FormBuilder<T, U>;\n  @Input() focusOnInit = false;\n\n  protected inputItems = signal<FormBuilderInputItem<T>[]>([]);\n  private subs = new Subscription();\n\n  ngOnInit() {\n    this.updateInputs();\n  }\n\n  ngAfterViewInit() {\n    if (this.focusOnInit) {\n      setTimeout(() => {\n        this.focusTabIndexEntry();\n      }, 5);\n    }\n  }\n\n  ngOnDestroy() {\n    this.subs.unsubscribe();\n  }\n\n  getValues() {\n    return this._options.getValue();\n  }\n\n  reset() {\n    return this._options.reset();\n  }\n\n  focus() {\n    const firstInput = this.wrapperEl.nativeElement.querySelector('input');\n    if (firstInput) {\n      firstInput.focus();\n    }\n  }\n\n  focusTabIndexEntry() {\n    this.tabIndexEntryEl.nativeElement.focus();\n  }\n\n  scrollToErrored() {\n    const index = Object.values(this._options.formGroup.controls).findIndex((t) => t.invalid);\n    if (index === -1) return;\n    // we add it by one because there's an extra absolute element at the top of the tree\n    this.wrapperEl.nativeElement.children.item(index + 1)?.scrollIntoView({\n      behavior: 'smooth',\n    });\n  }\n\n  // reinit() {\n  //   this.formGroup.reset();\n  //   this.formGroup = new UntypedFormGroup({});\n  //   this.subs.unsubscribe();\n  //   this.subs = new Subscription();\n  //   this.updateInputs();\n  // }\n\n  private updateInputs() {\n    runInInjectionContext(this.injector, () => {\n      this.bindToSub(this._options.invokeInit());\n\n      const inputOptions: FormBuilderInputOption<T>[] = Object.values(this._options.inputs);\n\n      const items: FormBuilderInputItem<T>[] = [];\n      for (let i = 0; i < this._options.keys.length; i++) {\n        const key = this._options.keys[i];\n\n        const rawOption = inputOptions[i];\n        const colspan = rawOption.colspan !== undefined ? rawOption.colspan : this._options.defaults!.colspan!;\n        const option: FormBuilderInputItem<T> = {\n          ...rawOption,\n          key: key,\n          appearance: rawOption.appearance ?? this._options.defaults!.appearance!,\n          clearable: rawOption.clearable !== undefined ? rawOption.clearable : this._options.defaults!.clearable!,\n          colspan: colspan,\n          hideError: rawOption.hideError !== undefined ? rawOption.hideError : this._options.defaults!.hideError!,\n          floatLabel: rawOption.floatLabel !== undefined ? rawOption.floatLabel : this._options.defaults?.floatLabel,\n          class$Value: toSignal(rawOption.class$ ?? of(rawOption.class)),\n          hidden$Value: toSignal(rawOption.hidden$ ?? of(false)),\n          styles$Value: toSignal(\n            this.screenDetector.state$.pipe(\n              map((state) => ({\n                gridColumn: state.md ? `span ${colspan} / span ${colspan}` : 1,\n                width: rawOption.width ?? 'auto',\n              })),\n            ),\n          ),\n        };\n\n        if (option.disabled$) {\n          this.subs.add(\n            option.disabled$.subscribe((value) => {\n              if (value) {\n                option.control.disable();\n              } else {\n                option.control.enable();\n              }\n            }),\n          );\n        }\n\n        items.push(option);\n      }\n\n      this.inputItems.set(items);\n\n      this.bindToSub(this._options.invokeAfterInit());\n    });\n  }\n\n  private bindToSub(result: void | Subscription | Observable<any>) {\n    if (result instanceof Subscription) {\n      this.subs.add(result);\n    } else if (result instanceof Observable) {\n      this.subs.add(result.subscribe());\n    }\n  }\n\n  trackBy = (index: number, item: FormBuilderInputItem<any>) => item.key;\n}\n","@if (!_options.allowAutocomplete) {\n  <!-- These inputs prevent firefox/chrome from autocompleting fields, and yes, this is the only solution I've found -->\n  <input tabindex=\"-1\" type=\"text\" style=\"opacity: 0; position: absolute; pointer-events: none\" />\n<!--  <input tabindex=\"-1\" type=\"password\" style=\"opacity: 0; position: absolute; pointer-events: none\" />-->\n  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->\n}\n\n@let isDesktop = screenDetector.isDesktop$ | async;\n\n<div\n  class=\"ui-form-builder\"\n  [style]=\"'grid-template-columns: repeat(' + (isDesktop ? _options.cols : 1) + ', minmax(0, 1fr))'\"\n  [style.width]=\"_options.width\"\n  [style.gap]=\"_options.gap\"\n  #Wrapper\n  >\n  <input #TabIndexEntry class=\"absolute opacity-0 pointer-events-none\" readonly type=\"text\" autocomplete=\"off\" />\n  @for (input of inputItems(); track trackBy($index, input)) {\n    @if (!$any(_options.hiddenKeys())[$any(input.key)] && !$any(_options.invisibleKeys())[$any(input.key)]) {\n      <cac-control-builder\n        [options]=\"input\"\n        [class]=\"input.class$Value()\"\n        [style]=\"input.styles$Value()\"\n        [allowAutocomplete]=\"_options.allowAutocomplete\"\n      ></cac-control-builder>\n    }\n  }\n  <!--  <input #TabIndexExit class=\"absolute opacity-0\" readonly (focus)=\"onTabIndexEndFocus()\" />-->\n</div>\n","import { Component, Input } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport {\n  CacLicensePlateComponent,\n  OptionsTriggerDirective,\n  CacSelectOptionsComponent,\n} from '../../ui';\nimport { ItemRecords$ } from '../../../../core';\nimport { formControl } from '@al00x/forms';\n\n@Component({\n  selector: 'cac-license-plate-select',\n  standalone: true,\n  imports: [\n    ReactiveFormsModule,\n    CacLicensePlateComponent,\n    CacSelectOptionsComponent,\n    OptionsTriggerDirective,\n  ],\n  templateUrl: './license-plate-select.component.html',\n  styleUrls: ['./license-plate-select.component.scss'],\n})\nexport class CacLicensePlateSelectComponent {\n  @Input() control = formControl<string | undefined>(undefined);\n  @Input() mini = false;\n  @Input() items?: ItemRecords$<string>;\n  @Input() label?: string;\n  @Input() hideError = false;\n}\n","<div class=\"relative\">\n  <cac-license-plate\n    class=\"block relative\"\n    [control]=\"control\"\n    [uiOptionsTriggerFor]=\"items ? Options : undefined\"\n    [filter]=\"true\"\n    [selector]=\"'input'\"\n    [label]=\"label\"\n    [mini]=\"mini\"\n    [hideError]=\"hideError\"\n  ></cac-license-plate>\n  <cac-select-options\n    #Options\n    menuClass=\"-mt-5 license-plate-select-menu\"\n    [control]=\"control\"\n    [items]=\"items\"\n    [searchable]=\"true\"\n    [optional]=\"false\"\n  ></cac-select-options>\n</div>\n","import { Component, inject, Input, OnInit } from '@angular/core';\nimport { formBuilder, CacFormBuilderComponent } from '../form-builder';\nimport { Validators } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { ButtonClickEvent, CacButtonComponent } from '../../ui';\nimport { formControl } from '@al00x/forms';\nimport { AuthBaseStore } from '../../../../core';\n\ninterface LoginFormGroup {\n  username: string;\n  password: string;\n  rememberMe: boolean;\n}\n\nexport interface LoginFormOptions {\n  hideRememberMe?: boolean;\n  // give null or false to disable navigation\n  routeTo?: string | null | false;\n  beforeLoginAction?: () => void;\n  afterLoginAction?: () => void;\n}\n\n@Component({\n  selector: 'cac-login-form',\n  standalone: true,\n  imports: [CacFormBuilderComponent, CacButtonComponent],\n  templateUrl: './login-form.component.html',\n  styleUrls: ['./login-form.component.scss'],\n})\nexport class CacLoginFormComponent implements OnInit {\n  private readonly auth = inject(AuthBaseStore);\n  private readonly router = inject(Router);\n\n  @Input() options: LoginFormOptions = {};\n  @Input() logo = {\n    url: 'assets/base/images/cac-logo.png',\n    alt: 'controladad-logo'\n  };\n\n  formBuilder = formBuilder<LoginFormGroup>({\n    cols: 1,\n    allowAutocomplete: true,\n    defaults: {\n      appearance: 'simple',\n    },\n    inputs: {\n      username: {\n        control: formControl('', Validators.required),\n        label: $localize`:@@base.feature.login.username:Username`,\n        class: 'unicode-normal',\n        suffixIcon: 'user',\n      },\n      password: {\n        control: formControl('', Validators.required),\n        class: 'unicode-normal',\n        label: $localize`:@@base.feature.login.password:Password`,\n        inputType: 'password',\n        suffixIcon: 'password',\n      },\n      rememberMe: {\n        control: formControl(false),\n        label: $localize`:@@base.feature.login.rememberMe:Remember Me`,\n        type: 'checkbox',\n        class: '-mt-2',\n      },\n    },\n  });\n\n  ngOnInit() {\n    if (this.options.hideRememberMe) {\n      this.formBuilder.hide('rememberMe');\n    }\n  }\n\n  login(e: ButtonClickEvent) {\n    const model = {\n      username: this.formBuilder.inputs.username.control.value,\n      password: this.formBuilder.inputs.password.control.value,\n      rememberMe: this.formBuilder.inputs.rememberMe.control.value,\n    };\n\n    this.options?.beforeLoginAction?.();\n    this.auth.login(model).pipe(e.pipe()).subscribe({\n      next: () => {\n        if (this.options.routeTo !== false && this.options.routeTo !== null) {\n          this.router.navigate([this.options.routeTo ?? '/']);\n        }\n        this.options?.afterLoginAction?.();\n      },\n    });\n  }\n}\n","<div class=\"flex flex-col justify-evenly p-2 mx-8\" (keydown.enter)=\"login(Button.createClickEvent(undefined))\">\n  <img class=\"mx-auto\" [src]=\"logo.url\" [alt]=\"logo.alt\" />\n  <h1 i18n=\"@@base.feature.login.title\" class=\"text-3xl font-medium mt-12\">Login</h1>\n  <p i18n=\"@@base.feature.login.guide\" class=\"mt-6 text-surface-on\">Enter you username and password</p>\n  <div class=\"mt-9\">\n    <cac-form-builder #Form class=\"flex flex-col\" [options]=\"formBuilder\"></cac-form-builder>\n  </div>\n  <cac-button i18n=\"@@base.feature.login.button\" #Button class=\"h-14 mt-6\" [disabled]=\"formBuilder.formGroup.invalid\" (onClick)=\"login($event)\">Login</cac-button>\n</div>\n","import {\n  AfterViewInit,\n  Component,\n  DestroyRef,\n  inject,\n  Input,\n  OnChanges,\n  QueryList,\n  signal,\n  SimpleChanges,\n  ViewChild,\n  ViewChildren,\n} from '@angular/core';\n\nimport { of, Subject, switchMap, take, combineLatest } from 'rxjs';\nimport { AlxPrintDirective, AlxPrintModule } from '@al00x/printer';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nexport interface PrintableTableData {\n  header: string[];\n  rows: string[][];\n  extra?: { value: string | number; label: string }[];\n}\n\n@Component({\n  selector: 'cac-printable-table',\n  standalone: true,\n  imports: [AlxPrintModule],\n  templateUrl: './printable-table.component.html',\n  styleUrls: ['./printable-table.component.scss'],\n})\nexport class CacPrintableTableComponent implements OnChanges, AfterViewInit {\n  readonly destroyRef = inject(DestroyRef);\n\n  @ViewChild('Printer') printer!: AlxPrintDirective;\n\n  @ViewChildren('Headers') headers!: QueryList<any>;\n  @ViewChildren('Rows') rows!: QueryList<any>;\n  @ViewChildren('Cols') cols!: QueryList<any>;\n  @ViewChildren('Extras') extras!: QueryList<any>;\n\n  @Input() data?: PrintableTableData;\n\n  rendered$ = new Subject<null>();\n  protected _currentData = signal<PrintableTableData | undefined>(undefined);\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['data']) {\n      this._currentData.set(this.data);\n    }\n  }\n\n  ngAfterViewInit() {\n    combineLatest([this.cols.changes, this.rows.changes, this.headers.changes])\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => {\n        setTimeout(() => {\n          this.rendered$.next(null);\n        }, 100);\n      });\n  }\n\n  render(data: PrintableTableData) {\n    this._currentData.set(data);\n    return this.rendered$.pipe(take(1));\n  }\n\n  // Render and print\n  print(data: PrintableTableData) {\n    return this.render(data).pipe(\n      switchMap(() => {\n        // this.printer.cleanup();\n        // this.printer.prepare();\n        // window.print();\n        this.printer.print();\n        return of(null);\n      }),\n    );\n  }\n}\n","<div #Printer=\"alxPrint\" alxPrint [hidden]=\"true\">\n  @let currentData = _currentData();\n  <table class=\"feature-printable-table\">\n    <thead>\n      <tr>\n        @for (val of currentData?.header ?? []; track $index) {\n          <th #Headers>{{ val }}</th>\n        }\n      </tr>\n    </thead>\n    <tbody>\n      @for (row of currentData?.rows ?? []; track $index) {\n        <tr #Rows>\n          @for (val of row; track $index) {\n            <td #Cols>\n              {{ val }}\n            </td>\n          }\n        </tr>\n      }\n    </tbody>\n  </table>\n  <div class=\"mt-7 text-sm empty:hidden\">\n    @for (item of currentData?.extra ?? []; track item.value) {\n      <p #Extras>{{ item.label }} : {{ item.value }}</p>\n    }\n  </div>\n</div>\n","import { AfterViewInit, Component, ElementRef, Inject, ViewChild } from '@angular/core';\nimport { MAT_SNACK_BAR_DATA, MatSnackBarRef } from '@angular/material/snack-bar';\n\nimport { CacIconComponent } from '../../../ui';\n\nexport interface SnackbarData {\n  message: string;\n  panelClass?: string;\n  action?: string;\n  offset?: number;\n  code?: number;\n  duration?: number;\n}\n\n@Component({\n  selector: 'cac-snackbar',\n  standalone: true,\n  imports: [CacIconComponent],\n  templateUrl: './snackbar-base.component.html',\n  styleUrls: ['./snackbar-base.component.scss'],\n})\nexport class CacSnackbarBaseComponent implements AfterViewInit {\n  @ViewChild('Wrapper') wrapperEl!: ElementRef<HTMLDivElement>;\n\n  constructor(\n    @Inject(MAT_SNACK_BAR_DATA) public data: SnackbarData,\n    private ref: MatSnackBarRef<any>,\n  ) {}\n\n  ngAfterViewInit() {\n    if (this.data.offset) {\n      this.wrapperEl.nativeElement.style.marginBottom = `${this.data.offset}px`;\n    }\n  }\n\n  onClick() {\n    this.ref.dismiss();\n  }\n\n  onAction() {\n    this.ref.dismissWithAction();\n  }\n}\n","<div role=\"presentation\" #Wrapper (click)=\"onClick()\" class=\"ui-snackbar-panel {{ data.panelClass ?? '' }}\">\n  {{ data.message }}\n  @if (data.action) {\n    <cac-icon (onClick)=\"onAction()\" class=\"ml-auto text-primary-400\">\n      {{ data.action }}\n    </cac-icon>\n  }\n  @if (data.code) {\n    <span class=\"absolute text-sm font-bold end-3.5 top-1.5 opacity-80\">\n      {{ data.code }}\n    </span>\n  }\n</div>\n","import { Injectable } from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { SnackbarData, CacSnackbarBaseComponent } from './snackbar-base/snackbar-base.component';\nimport { APIError, ErrorHelper } from '../../../../core';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class SnackbarService {\n  readonly DEFAULT_DURATION = 3200;\n\n  constructor(private snackbar: MatSnackBar) {}\n\n  show(message: string, options?: Omit<SnackbarData, 'message'>) {\n    return this.open(message, {\n      panelClass: 'is-message',\n      ...options,\n    });\n  }\n\n  error(message: string, options?: Omit<SnackbarData, 'message'>) {\n    return this.open(message, {\n      panelClass: 'is-error',\n      ...options,\n    });\n  }\n\n  showServerError(serverCode: number, apiError?: APIError) {\n    this.error(`${ErrorHelper.getResponseErrorMessage(serverCode, apiError)}`, {\n      code: serverCode,\n    });\n  }\n\n  private open(message: string, options?: Omit<SnackbarData, 'message'>) {\n    const ref = this.snackbar.openFromComponent(CacSnackbarBaseComponent, {\n      panelClass: `ui-snackbar-default`,\n      data: { message, ...options } as SnackbarData,\n      duration: options?.duration ?? this.DEFAULT_DURATION,\n      horizontalPosition: 'center',\n      verticalPosition: 'bottom',\n    });\n\n    // This is a fix for snackbar, sometimes it appears at the top of the screen,\n    // which the below code will fix it...\n    // @ts-ignore\n    const wrapper = ref._overlayRef.hostElement as HTMLElement;\n    wrapper.style.alignItems = 'flex-end';\n    wrapper.style.justifyContent = 'center';\n\n    return ref;\n  }\n}\n","import { Component, Input } from '@angular/core';\nimport { FilterItem, FilterModel } from '../../../../classes';\nimport { CacButtonComponent, CacChipsComponent, CacIconComponent } from '../../../ui';\n\n\n@Component({\n  selector: 'cac-table-filter-bar',\n  standalone: true,\n  imports: [CacButtonComponent, CacChipsComponent, CacIconComponent],\n  templateUrl: './table-filter-bar.component.html',\n  styleUrls: ['./table-filter-bar.component.scss'],\n})\nexport class CacTableFilterBarComponent {\n  @Input() filterModel?: FilterModel;\n\n  removeFilter(item: FilterItem) {\n    this.filterModel?.remove(item.prop);\n  }\n\n  clearFilters() {\n    this.filterModel?.clear();\n  }\n}\n","<div class=\"h-12 w-full bg-white flex flex-row-reverse items-center gap-2.5 px-1.5\">\n  <cac-button\n    appearance=\"text\"\n    class=\"text-primary-600 flex-none {{ !filterModel?.hasFilter() ? 'saturate-0 opacity-50' : '' }}\"\n    icon=\"trash\"\n    [disabled]=\"!filterModel?.hasFilter()\"\n    (onClick)=\"clearFilters()\"\n    i18n=\"@@base.feature.table.filters.removeFilters\"\n    >Clear Filters</cac-button\n    >\n    <div class=\"flex-auto flex flex-row-reverse items-center gap-2.5 overflow-auto\">\n      @for (item of filterModel?.filtersArray() ?? []; track item.prop) {\n        <cac-chips [closable]=\"true\" (onClose)=\"removeFilter(item)\">\n          @if (item?.icon?.length) {\n            <cac-icon [icon]=\"item?.icon\"></cac-icon>\n          }\n          <span>{{ item.formatted?.prefix }}</span>\n          <span>{{ item.formatted?.text }}</span>\n          <span>{{ item.formatted?.suffix }}</span>\n        </cac-chips>\n      }\n    </div>\n  </div>\n","import { Component, EventEmitter, Input, OnDestroy, Output, signal, ViewChild } from '@angular/core';\nimport { CacBottomControlsComponent } from '../../bottom-controls';\nimport { CacFormBuilderComponent } from '../../form-builder';\nimport { CacIconComponent, ButtonClickEvent } from '../../../ui';\n\nimport { MatMenu, MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\nimport { TableFormOptions, TableMenu, TableOptions } from '../table.interfaces';\nimport { Subject, Subscription, take } from 'rxjs';\nimport { A11yModule } from '@angular/cdk/a11y';\n\n// undefined is when you dismiss the menu;\ntype MenuCloseReason = 'success' | 'cancel' | undefined;\n\n@Component({\n  selector: 'cac-table-form-menu',\n  standalone: true,\n  imports: [CacBottomControlsComponent, CacFormBuilderComponent, CacIconComponent, MatMenuModule, A11yModule],\n  templateUrl: './table-form-menu.component.html',\n  styleUrls: ['./table-form-menu.component.scss'],\n})\nexport class CacTableFormMenuComponent implements OnDestroy {\n  readonly EDIT_TEXT = $localize`:@@base.feature.table.formMenu.editText:Edit`;\n  readonly NEW_TEXT = $localize`:@@base.feature.table.formMenu.newText:New`;\n  readonly ADD_TEXT = $localize`:@@base.feature.table.formMenu.addText:Add`;\n\n  @ViewChild('MenuForm') menuForm!: MatMenu;\n  @ViewChild('Form') formBuilder?: CacFormBuilderComponent<any>;\n\n  @Input() options!: TableOptions<any>;\n\n  @Output() onClosed = new EventEmitter();\n\n  formOptions = signal<TableFormOptions<any> | undefined>(undefined);\n  showForm = signal(false);\n\n  onAction = new Subject<any>();\n  onSubmit = new Subject<any>();\n\n  private _currentTrigger?: MatMenuTrigger;\n  private _action?: TableMenu<any>['action'];\n  private _sub = new Subscription();\n  private _maintainState = false;\n\n  ngOnDestroy() {\n    this.destroySubscriptions();\n  }\n\n  onFormMenuSubmit(e: ButtonClickEvent) {\n    const model = this.formBuilder?.getValues();\n    if (!model) return;\n    if (this._action) {\n      this._sub = this._action(model)\n        .pipe(e.pipe())\n        .subscribe((res) => {\n          this.onAction.next(res);\n          this.closeMenu('success');\n        });\n    } else {\n      this.onSubmit.next(null);\n      this.closeMenu('success');\n    }\n  }\n\n  onFormMenuCancel() {\n    this.closeMenu('cancel');\n  }\n\n  openFormMenu<T, U>(trigger: MatMenuTrigger, options: TableFormOptions<T, U>) {\n    this.showForm.set(true);\n    this.formOptions.set(options);\n\n    if (!this._maintainState || trigger !== this._currentTrigger) {\n      options.formBuilder.reset(options.value);\n    }\n\n    const menu = this.openMenu(this.menuForm, trigger);\n\n    return menu;\n  }\n\n  private openMenu(menu: MatMenu, trigger: MatMenuTrigger) {\n    this._maintainState = false;\n    this._currentTrigger = trigger;\n    this.onSubmit = new Subject();\n    this.onAction = new Subject();\n    setTimeout(() => {\n      trigger.menu = menu;\n      trigger.openMenu();\n\n      trigger.menu?.close.pipe(take(1)).subscribe((_reason) => {\n        let reason = _reason as MenuCloseReason;\n        if (reason === undefined) {\n          this._maintainState = true;\n        } else if (reason !== 'success' && reason !== 'cancel') {\n          reason = undefined;\n        }\n\n        this.cleanupMenuForm(reason);\n      });\n    }, 1);\n\n    return {\n      trigger: trigger,\n      onClose: trigger.menuClosed.pipe(),\n      onSubmit: this.onSubmit.pipe(take(1)),\n      action: (action) => {\n        this._action = action;\n        return this.onAction.asObservable();\n      },\n    } as TableMenu<any>;\n  }\n\n  private cleanupMenuForm(reason: MenuCloseReason) {\n    this.destroySubscriptions();\n    if (this._currentTrigger) {\n      this._currentTrigger.menu = null;\n    }\n\n    // Delay to make sure menu is fully closed and the animation is finished\n    setTimeout(() => {\n      this.showForm.set(false);\n      if (reason === 'success' || reason === 'cancel') {\n        this.formBuilder?.reset();\n      }\n    }, 300);\n  }\n\n  private destroySubscriptions() {\n    this._sub?.unsubscribe();\n    this.onSubmit.complete();\n    this.onAction.complete();\n  }\n\n  private closeMenu(reason: MenuCloseReason) {\n    this._currentTrigger?.menu?.close.emit(reason as any);\n  }\n}\n","<mat-menu #MenuForm backdropClass=\"ui-backdrop-blur-sm\">\n  @if (formOptions() && showForm()) {\n    <div\n      cdkTrapFocus\n      [cdkTrapFocusAutoCapture]=\"true\"\n      role=\"presentation\"\n      class=\"p-4 pt-1 overflow-auto flex flex-col h-full\"\n      (click)=\"$event.stopPropagation()\"\n      (keydown)=\"$event.stopPropagation()\"\n      (keydown.enter)=\"Controller.submit()\"\n      (keydown.escape)=\"Controller.cancel()\"\n      >\n      <span class=\"text-lg font-medium\">{{\n        formOptions()!.mode === 'create'\n        ? ADD_TEXT + ' ' + formOptions()!.itemName + ' ' + NEW_TEXT\n        : EDIT_TEXT + ' ' + formOptions()!.itemName\n      }}</span>\n      <span class=\"text-sm font-normal mt-1\" i18n=\"@@base.feature.table.formMenu.caption\">Fill in The Details And Hit Save</span>\n      <cac-icon\n        class=\"absolute w-12 h-12 left-4 text-surface-on\"\n        size=\"1.5rem\"\n        icon=\"close\"\n        (onClick)=\"Controller.cancel()\"\n      ></cac-icon>\n      <div class=\"overflow-auto flex-auto\">\n        <cac-form-builder\n          #Form\n          class=\"block mt-7\"\n          [options]=\"formOptions()!.formBuilder\"\n          [focusOnInit]=\"true\"\n        ></cac-form-builder>\n      </div>\n      <cac-bottom-controls\n        #Controller\n        [form]=\"formOptions()!.formBuilder.formGroup\"\n        [actionType]=\"formOptions()!.mode === 'edit' ? 'update' : 'create'\"\n        class=\"flex-row-reverse justify-start\"\n        submitClass=\"w-28\"\n        cancelClass=\"w-16\"\n        submitText=\"Submit\"\n        i18n-submitText=\"Submit@@base.feature.table.formMenu.submitButton\"\n        cancelText=\"Cancel\"\n        i18n-cancelText=\"Cancel@@base.feature.table.formMenu.cancelButton\"\n        (onSubmit)=\"onFormMenuSubmit($event)\"\n        (onCancel)=\"onFormMenuCancel()\"\n      ></cac-bottom-controls>\n    </div>\n  }\n</mat-menu>\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Optional, Output, ViewChild } from '@angular/core';\nimport { MatCellDef, MatColumnDef, MatFooterCellDef, MatHeaderCellDef, MatTable } from '@angular/material/table';\nimport { TableOptions } from '../table.interfaces';\n\n@Component({\n  selector: 'cac-base-table-col',\n  template: '',\n  styles: [],\n  standalone: true,\n})\n// eslint-disable-next-line @angular-eslint/component-class-suffix\nexport class CacTableColBase implements OnInit, OnDestroy {\n  @Input() prop!: string;\n  @Input() options!: TableOptions<any>;\n\n  @ViewChild(MatColumnDef, { static: true }) columnDef!: MatColumnDef;\n  @ViewChild(MatCellDef, { static: true }) cellDef!: MatCellDef;\n  @ViewChild(MatHeaderCellDef, { static: true }) headerCellDef!: MatHeaderCellDef;\n  @ViewChild(MatFooterCellDef, { static: true }) footerCellDef!: MatFooterCellDef;\n\n  constructor(@Optional() public table?: MatTable<unknown>) {}\n\n  ngOnInit() {\n    this.initializeMatColDef();\n  }\n\n  ngOnDestroy(): void {\n    this.table?.removeColumnDef(this.columnDef);\n  }\n\n  private initializeMatColDef() {\n    if (!this.table || !this.columnDef) return;\n\n    this.columnDef.name = this.prop;\n    this.columnDef.cell = this.cellDef;\n    this.columnDef.headerCell = this.headerCellDef;\n    this.columnDef.footerCell = this.footerCellDef;\n    this.table.addColumnDef(this.columnDef);\n  }\n}\n","import { Component, EventEmitter, Output } from '@angular/core';\nimport {\n  MatCell, MatCellDef,\n  MatColumnDef,\n  MatHeaderCell, MatHeaderCellDef\n} from '@angular/material/table';\nimport { CacCheckboxComponent } from '../../../../ui';\nimport { CacTableColBase } from '../_table_col_base';\n\nexport const TABLE_COL_SELECTION_PROP = '___selection';\n\n@Component({\n  selector: 'cac-table-col-selection',\n  imports: [CacCheckboxComponent, MatCell, MatHeaderCell, MatColumnDef, MatCellDef, MatHeaderCellDef],\n  templateUrl: './table-col-selection.component.html',\n  styleUrl: './table-col-selection.component.scss',\n  standalone: true,\n})\nexport class CacTableColSelectionComponent extends CacTableColBase {\n  override prop = TABLE_COL_SELECTION_PROP;\n\n  @Output() onSelect = new EventEmitter<{ row: any; state: boolean }>();\n  @Output() onSelectAll = new EventEmitter<boolean>();\n}\n","<ng-container matColumnDef>\n  <th mat-header-cell *matHeaderCellDef>\n    <cac-checkbox\n      class=\"table-header-checkbox\"\n      [indeterminate]=\"options.selectionModel!.indeterminate()\"\n      [checked]=\"options.selectionModel!.allSelected()\"\n      (onChange)=\"onSelectAll.emit($event)\"\n    ></cac-checkbox>\n  </th>\n  <td mat-cell *matCellDef=\"let row; let i = index\" style=\"width: 3rem\">\n    <cac-checkbox\n      [checked]=\"options.selectionModel!.selectedIds()[row.id]\"\n      (onChange)=\"onSelect.emit({row: row, state: $event})\"\n    ></cac-checkbox>\n  </td>\n</ng-container>\n","import { Component, Input } from '@angular/core';\nimport { CacTableColBase } from '../_table_col_base';\nimport { MatCell, MatCellDef, MatColumnDef, MatHeaderCell, MatHeaderCellDef } from '@angular/material/table';\n\nexport const TABLE_COL_INDEX_PROP = '___index';\n\n@Component({\n  selector: 'cac-table-col-index',\n  imports: [MatColumnDef, MatHeaderCellDef, MatHeaderCell, MatCellDef, MatCell],\n  templateUrl: './table-col-index.component.html',\n  styleUrl: './table-col-index.component.scss',\n  standalone: true,\n})\nexport class CacTableColIndexComponent extends CacTableColBase {\n  override prop = TABLE_COL_INDEX_PROP;\n\n  @Input() startIndex = 0;\n}\n","<ng-container matColumnDef>\n  <th mat-header-cell *matHeaderCellDef i18n=\"@@base.feature.table.rowText\">Row</th>\n  <td class=\"auto-index-col\" role=\"presentation\" mat-cell *matCellDef=\"let row; let i = index\">\n    {{ i + 1 + startIndex }}\n  </td>\n</ng-container>\n","import {\n  AfterViewInit,\n  Component,\n  DestroyRef,\n  EventEmitter,\n  inject,\n  Input,\n  OnInit,\n  Output,\n  signal,\n  ViewChild,\n} from '@angular/core';\nimport { TableColumnData } from '../table.component';\nimport { FormBuilder, formBuilder, CacFormBuilderComponent } from '../../form-builder';\n\nimport { CacBottomControlsComponent } from '../../bottom-controls';\nimport { TableFilterModel } from '../../../../classes';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatMenu, MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { formControl, FormControlExtended } from '@al00x/forms';\n\n@Component({\n  selector: 'cac-table-filter-menu',\n  standalone: true,\n  imports: [CacFormBuilderComponent, CacBottomControlsComponent, MatMenuModule, A11yModule],\n  templateUrl: './table-filter-menu.component.html',\n  styleUrls: ['./table-filter-menu.component.scss'],\n})\nexport class CacTableFilterMenuComponent<T> implements OnInit, AfterViewInit {\n  destroyRef = inject(DestroyRef);\n\n  @ViewChild('Form') formBuilder!: CacFormBuilderComponent<any>;\n  @ViewChild('FilterMenu') menu!: MatMenu;\n\n  @Input() column!: TableColumnData<T>;\n  @Input() filterModel!: TableFilterModel;\n  @Input() trigger!: MatMenuTrigger;\n\n  @Output() onSubmit = new EventEmitter();\n  @Output() onCancel = new EventEmitter();\n\n  form = signal<FormBuilder<any> | undefined>(undefined);\n  show = signal(false);\n\n  private _lastValue?: any;\n\n  ngOnInit() {\n    this.filterModel.columnsChanged$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n      this.form.set(this.createFormOptions());\n    });\n\n    this.filterModel.changes$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((filters) => {\n      const value = filters?.[this.column.prop];\n      this._lastValue = value;\n      this.form()!.reset(value);\n    });\n  }\n\n  ngAfterViewInit() {\n    this.trigger.menu = this.menu;\n    this.trigger.menuOpened.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n      this.show.set(true);\n    });\n    this.trigger.menuClosed.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n      // Delay to make sure menu is fully closed and the animation is finished\n      setTimeout(() => {\n        this.formBuilder?.reset();\n        this.show.set(false);\n      }, 300);\n    });\n  }\n\n  private createFormOptions() {\n    const inputs: FormBuilder<any>['inputs'] = {};\n    let count = 0;\n    for (const filter of this.filterModel.getColumnFilters(this.column.prop) ?? []) {\n      count++;\n      inputs[filter.key ?? filter.type] = {\n        control: formControl(''),\n        label:\n          filter.label ??\n          (filter.type === 'contains'\n            ? $localize`:@@base.feature.table.filters.contains:Contains`\n            : filter.type === 'equal'\n              ? $localize`:@@base.feature.table.filters.equals:Equals`\n              : filter.type === 'greater'\n                ? $localize`:@@base.feature.table.filters.greaterThan:Greater Than`\n                : filter.type === 'lower'\n                  ? $localize`:@@base.feature.table.filters.lowerThan:Less Than`\n                  : ''),\n        type: filter.controlType,\n        inputType: filter.inputType,\n        items: filter.items,\n        multiple: filter.multiple,\n        hideError: true,\n      };\n    }\n\n    return formBuilder({\n      cols: count >= 4 ? 2 : 1,\n      inputs,\n    });\n  }\n\n  submit() {\n    const columnFilters = this.filterModel.getColumnFilters(this.column.prop);\n    if (!columnFilters) return;\n\n    const controls = this.form()!.formGroup.controls;\n\n    this.filterModel.set(\n      this.column,\n      columnFilters\n        .map((t) => ({\n          key: t.key,\n          type: t.type,\n          value: controls[t.key ?? t.type].value,\n          displayText: (controls[t.key ?? t.type] as FormControlExtended).displayText,\n          controlType: t.controlType,\n        }))\n        .filter((t) => t.value !== undefined && t.value !== null),\n    );\n\n    this.trigger.closeMenu();\n    this.onSubmit.emit();\n  }\n\n  cancel() {\n    this.form()!.reset(this._lastValue);\n\n    this.trigger.closeMenu();\n    this.onCancel.emit();\n  }\n}\n","<mat-menu #FilterMenu backdropClass=\"ui-backdrop-blur-sm\">\n  <div\n    cdkTrapFocus\n    [cdkTrapFocusAutoCapture]=\"true\"\n    role=\"presentation\"\n    class=\"flex flex-col pt-1 p-4\"\n    (click)=\"$event.stopPropagation()\"\n    (keydown)=\"$event.stopPropagation()\"\n    (keydown.enter)=\"submit()\"\n    (keydown.escape)=\"cancel()\"\n    >\n    @if (form() && show()) {\n      <span class=\"text-lg font-medium\" i18n=\"@@base.feature.table.filters.filter\">Filter {{ column.label }}</span>\n      <cac-form-builder class=\"mt-4\" #Form [options]=\"form()!\" [focusOnInit]=\"true\"></cac-form-builder>\n      <cac-bottom-controls\n        class=\"mt-4\"\n        submitText=\"Filter\"\n        i18n-submitText=\"Filter@@base.feature.table.filterMenu.submitButton\"\n        cancelText=\"Cancel\"\n        i18n-cancelText=\"Cancel@@base.feature.table.filterMenu.cancelButton\"\n        [form]=\"form()!.formGroup\"\n        (onSubmit)=\"submit()\"\n        (onCancel)=\"cancel()\"\n      ></cac-bottom-controls>\n    }\n  </div>\n</mat-menu>\n","import { ChangeDetectionStrategy, Component, computed, Input } from '@angular/core';\nimport { MatMenuModule } from '@angular/material/menu';\n\nimport { CacTableFilterMenuComponent } from '../table-filter-menu/table-filter-menu.component';\nimport { CacIconComponent } from '../../../ui';\nimport { TableColumnData } from '../table.component';\nimport { TableFilterModel } from '../../../../classes';\n\n@Component({\n  selector: 'cac-table-filter',\n  standalone: true,\n  imports: [CacIconComponent, MatMenuModule, CacTableFilterMenuComponent],\n  templateUrl: './table-filter.component.html',\n  styleUrls: ['./table-filter.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CacTableFilterComponent<T> {\n  @Input() column!: TableColumnData<T>;\n  @Input() filterModel!: TableFilterModel;\n\n  isActive = computed(() => {\n    const filters = this.filterModel.filters();\n    if (!filters) return false;\n\n    return filters[this.column.prop];\n  });\n}\n","@if (column.filterable) {\n  <cac-icon\n    #FilterMenuTrigger=\"matMenuTrigger\"\n    [matMenuTriggerFor]=\"null\"\n    (onClick)=\"null\"\n    class=\"transition-all duration-300 {{\n      isActive() ? 'text-primary-500 scale-125' : 'text-surface-on-variant opacity-70'\n    }}\"\n    wrapperClass=\"hover:bg-secondary-50\"\n    [icon]=\"isActive() ? 'filter-filled' : 'filter'\"\n    size=\"1.125rem\"\n  ></cac-icon>\n  <cac-table-filter-menu\n    [column]=\"column\"\n    [filterModel]=\"filterModel\"\n    [trigger]=\"FilterMenuTrigger\"\n  ></cac-table-filter-menu>\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { TableColumnData } from '../table.component';\nimport { SortModel } from '../../../../classes';\n\nimport { CacIconComponent } from '../../../ui';\n\n@Component({\n  selector: 'cac-table-sort',\n  templateUrl: './table-sort.component.html',\n  styleUrls: ['./table-sort.component.scss'],\n  standalone: true,\n  imports: [CacIconComponent],\n})\nexport class CacTableSortComponent<T> implements OnInit {\n  @Input() column!: TableColumnData<T>;\n  @Input() sortModel!: SortModel;\n\n  key = '';\n\n  ngOnInit() {\n    this.key =\n      typeof this.column.sortable === 'string' && this.column.sortable !== '' ? this.column.sortable : this.column.prop;\n  }\n\n  onSortClick() {\n    if (!this.column.sortable) return;\n\n    if (this.sortModel.key() === this.key) {\n      if (this.sortModel.direction() === 'desc') {\n        this.sortModel.setDirection('asc');\n      } else if (this.sortModel.direction() === 'asc') {\n        this.sortModel.setKey(undefined);\n      }\n    } else {\n      this.sortModel.setDirection('desc');\n      this.sortModel.setKey(this.key);\n    }\n  }\n}\n","@if (column.sortable) {\n  <cac-icon\n    (onClick)=\"onSortClick()\"\n    class=\"transition-all duration-300 {{\n      sortModel.key() === key ? 'text-primary-600 scale-125' : 'text-surface-on-variant opacity-70'\n    }}\"\n    wrapperClass=\"hover:bg-secondary-50\"\n    [icon]=\"sortModel.key() === key ? (sortModel.direction() === 'asc' ? 'sort-up' : 'sort-down') : 'sort'\"\n    size=\"1.125rem\"\n  ></cac-icon>\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'badge',\n  standalone: true,\n  pure: true,\n})\nexport class BadgePipe implements PipeTransform {\n  transform(value: number | undefined | null, length = 2): string {\n    if (value === null || value === undefined) return '';\n    const text = value.toString();\n    return text.length > length ? '9'.repeat(length) : text;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'typeOf',\n  standalone: true,\n  pure: true,\n})\nexport class TypeofPipe implements PipeTransform {\n  transform(value: any, type: 'string' | 'number' | 'undefined' | 'boolean' | 'object' | 'array'): boolean {\n    return type === 'array' ? value instanceof Array : typeof value === type;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DateFns } from '../../core';\n\n@Pipe({\n  name: 'datefns',\n  standalone: true,\n})\nexport class DatefnsPipe implements PipeTransform {\n  transform(value: string | Date | undefined | null, format = 'yyyy/MM/dd, hh:mm a'): string {\n    if (!value) return '';\n    return DateFns().format(typeof value === 'string' ? new Date(value) : value, format);\n  }\n}\n","import { Component, EventEmitter, Input, Output, OnInit } from '@angular/core';\nimport { CacTableColBase } from '../_table_col_base';\nimport { TableColumnData, TableRow } from '../../table.component';\nimport { AsyncPipe, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport { CacButtonComponent, CacLicensePlateComponent } from '../../../../ui';\nimport { MatCell, MatCellDef, MatColumnDef, MatHeaderCell, MatHeaderCellDef } from '@angular/material/table';\nimport { CacTableFilterComponent } from '../../table-filter/table-filter.component';\nimport { CacTableSortComponent } from '../../table-sort/table-sort.component';\nimport { TypeofPipe } from '../../../../../pipes';\n\n@Component({\n  selector: 'cac-table-col-default',\n  imports: [\n    AsyncPipe,\n    CacButtonComponent,\n    CacLicensePlateComponent,\n    MatCell,\n    MatCellDef,\n    MatHeaderCell,\n    CacTableFilterComponent,\n    CacTableSortComponent,\n    MatColumnDef,\n    NgStyle,\n    NgTemplateOutlet,\n    TypeofPipe,\n    MatHeaderCellDef,\n  ],\n  templateUrl: './table-col-default.component.html',\n  styleUrl: './table-col-default.component.scss',\n  standalone: true,\n})\nexport class CacTableColDefaultComponent extends CacTableColBase implements OnInit {\n  @Input() col!: TableColumnData<any>;\n\n  @Output() onRowClick = new EventEmitter<TableRow<any>>();\n\n  override ngOnInit() {\n    this.prop = this.col.prop;\n    super.ngOnInit();\n  }\n}\n","<ng-container matColumnDef>\n  <th mat-header-cell *matHeaderCellDef>\n    <div class=\"flex\">\n      <div\n        role=\"presentation\"\n        class=\"flex flex-col pe-2 select-none {{ col.sortable ? 'cursor-pointer' : '' }}\"\n        (click)=\"Sort.onSortClick()\"\n      >\n        <span class=\"whitespace-nowrap\">{{ col.label }}</span>\n        @if (col.hint) {\n          <span class=\"text-white text-xs\">{{ col.hint }}</span>\n        }\n      </div>\n      <cac-table-sort class=\"ms-1\" #Sort [column]=\"col\" [sortModel]=\"options.sortModel!\"></cac-table-sort>\n\n      <cac-table-filter class=\"ms-1\" [column]=\"col\" [filterModel]=\"options.filterModel!\"></cac-table-filter>\n    </div>\n  </th>\n  <td\n    role=\"presentation\"\n    mat-cell\n    *matCellDef=\"let row\"\n    (click)=\"onRowClick.emit(row)\"\n    class=\"{{ options.clickableRows ? 'cursor-pointer' : '' }}\"\n    [ngStyle]=\"{ minWidth: col.width ?? '' }\"\n  >\n    @let dynamicClass =\n      row.data[col.prop].dynamicClass$ ? (row.data[col.prop].dynamicClass$ | async) : row.data[col.prop].dynamicClass;\n    @switch (col.type) {\n      @case ('status') {\n        <button\n          class=\"status-type-col {{\n            (\n              row.data[col.prop].isValueTrue$\n                ? (row.data[col.prop].isValueTrue$ | async)\n                : row.data[col.prop].isValueTrue\n            )\n              ? 'text-green-700'\n              : 'text-red-600'\n          }} {{ dynamicClass }}\"\n        >\n          <ng-container\n            [ngTemplateOutlet]=\"CellValue\"\n            [ngTemplateOutletContext]=\"{\n              col: col,\n              row: row,\n            }\"\n          ></ng-container>\n        </button>\n      }\n      @case ('tag') {\n        <button class=\"tag-type-col {{ dynamicClass }}\">\n          <ng-container\n            [ngTemplateOutlet]=\"CellValue\"\n            [ngTemplateOutletContext]=\"{\n              col: col,\n              row: row,\n            }\"\n          ></ng-container>\n        </button>\n      }\n      @case ('plate') {\n        <cac-license-plate\n          class=\"absolute scale-50 min-w-[19rem] pointer-events-none\"\n          style=\"transform-origin: top right\"\n          [value]=\"row.data[col.prop].rawValue\"\n          [hideError]=\"true\"\n        ></cac-license-plate>\n        <div class=\"w-44 h-6\"></div>\n      }\n      @case ('button') {\n        <cac-button\n          class=\"button-type-col {{ dynamicClass }}\"\n          padding=\"0\"\n          appearance=\"text\"\n          (onClick)=\"col.onClick?.(row.originalItem, $event)\"\n        >\n          <ng-container\n            [ngTemplateOutlet]=\"CellValue\"\n            [ngTemplateOutletContext]=\"{\n              col: col,\n              row: row,\n            }\"\n          ></ng-container>\n        </cac-button>\n      }\n      @default {\n        <!-- text & number -->\n        <div class=\"{{ dynamicClass }}\">\n          <ng-container\n            [ngTemplateOutlet]=\"CellValue\"\n            [ngTemplateOutletContext]=\"{\n              col: col,\n              row: row,\n            }\"\n          ></ng-container>\n        </div>\n      }\n    }\n  </td>\n</ng-container>\n\n<ng-template #CellValue let-row=\"row\" let-col=\"col\">\n  @let value = row.data[col.prop].value$ ? (row.data[col.prop].value$ | async) : row.data[col.prop].value;\n  <span [title]=\"value\">\n    @if (value | typeOf: 'array') {\n      <span class=\"flex flex-wrap\" [style.min-width]=\"value.length > 3 ? '12rem' : value.length > 2 ? '10rem' : '8rem'\">\n        @for (i of value; let last = $last; track i) {\n          <span>\n            {{ i }}\n            @if (!last) {\n              <span class=\"me-1\">,</span>\n            }\n          </span>\n        }\n      </span>\n    } @else {\n      {{ value }}\n    }\n  </span>\n</ng-template>\n\n","import {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  Output,\n  QueryList,\n  ViewChildren,\n} from '@angular/core';\nimport { CacTableColBase } from '../_table_col_base';\nimport { MatCell, MatCellDef, MatColumnDef, MatHeaderCell, MatHeaderCellDef } from '@angular/material/table';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { AsyncPipe } from '@angular/common';\nimport { ButtonClickEvent, CacButtonComponent } from '../../../../ui';\nimport { PermissionHideDirective } from '../../../../../directives';\nimport { MatBadge } from '@angular/material/badge';\nimport { TableAction } from '../../table.interfaces';\nimport { BehaviorSubject, Subject, take } from 'rxjs';\n\nexport const TABLE_COL_ACTION_PROP = '___action';\n\n@Component({\n  selector: 'cac-table-col-action',\n  imports: [\n    MatColumnDef,\n    MatHeaderCell,\n    MatHeaderCellDef,\n    MatCellDef,\n    MatCell,\n    MatMenuTrigger,\n    CacButtonComponent,\n    PermissionHideDirective,\n    MatBadge,\n    AsyncPipe,\n  ],\n  templateUrl: './table-col-action.component.html',\n  styleUrl: './table-col-action.component.scss',\n  standalone: true,\n})\nexport class CacTableColActionComponent extends CacTableColBase implements AfterViewInit {\n  override prop = TABLE_COL_ACTION_PROP;\n\n  @ViewChildren('ActionColCells') actionColCells?: QueryList<ElementRef<HTMLDivElement>>;\n\n  @Input() actions!: TableAction<any>[];\n\n  @Output() onAction = new EventEmitter<{\n    action: TableAction<any>;\n    row: any;\n    trigger: MatMenuTrigger;\n    clickEvent: ButtonClickEvent;\n  }>();\n\n  onVisible$ = new Subject<boolean>();\n\n  ngAfterViewInit() {\n    this.actionColCells?.changes.pipe(take(1)).subscribe(() => {\n      const isVisible = this.actionColCells?.some((wrapper) =>\n        Array.from(wrapper.nativeElement.children).some((el) => el.clientWidth !== 0),\n      );\n      this.onVisible$.next(isVisible ?? false);\n    });\n  }\n}\n","<ng-container matColumnDef>\n  <th mat-header-cell *matHeaderCellDef class=\"text-center\">{{ options.view?.actionsText }}</th>\n  <td #trigger=\"matMenuTrigger\" mat-cell *matCellDef=\"let row\" [matMenuTriggerFor]=\"null\">\n    <div class=\"flex items-center gap-1 justify-center\">\n      @for (action of actions; track action.type + action.content; let index = $index) {\n        <div\n          #ActionColCells\n          role=\"presentation\"\n          class=\"w-fit {{ (row.actions[index]?.disabled$ | async) ? 'pointer-events-none' : '' }}\"\n        >\n          @let data = row.actions[index];\n          @switch (action.type) {\n            @case ('icon') {\n              <cac-button\n                uiPermissionHide\n                [uiPermissionHideAction]=\"action.actionType\"\n                [uiPermissionHideKey]=\"data.permission\"\n                [icon]=\"action.content\"\n                [disabled]=\"$any(data.disabled$ ? (data.disabled$ | async) : data.disabled)\"\n                [matBadge]=\"action.badge ? action.badge(row.originalItem) : ''\"\n                [action]=\"action.actionType\"\n                [permission]=\"data.permission\"\n                (onClick)=\"onAction.emit({ row, action, trigger, clickEvent: $event })\"\n                class=\"w-8 h-8 text-primary\"\n                padding=\"0.5rem\"\n                appearance=\"text\"\n                iconSize=\"1.375rem\"\n                matBadgeColor=\"warn\"\n                matBadgePosition=\"before\"\n              ></cac-button>\n            }\n            @case ('text') {\n              <div class=\"cursor-pointer\">\n                {{ action.content }}\n              </div>\n            }\n            @case ('button') {\n              <cac-button\n                uiPermissionHide\n                [uiPermissionHideAction]=\"action.actionType\"\n                [uiPermissionHideKey]=\"data.permission\"\n                [class]=\"action.class\"\n                [appearance]=\"action.appearance ?? 'filled'\"\n                [theme]=\"action.theme ?? 'primary'\"\n                [disabled]=\"$any(data.disabled$ ? (data.disabled$ | async) : data.disabled)\"\n                [matBadge]=\"action.badge ? action.badge(row.originalItem) : ''\"\n                [action]=\"action.actionType\"\n                [permission]=\"data.permission\"\n                (onClick)=\"onAction.emit({ row, action, trigger, clickEvent: $event })\"\n                matBadgeColor=\"warn\"\n                matBadgePosition=\"before\"\n              >\n                {{ action.content }}\n              </cac-button>\n            }\n            @default {\n              {{ action.content }}\n            }\n          }\n        </div>\n      }\n    </div>\n  </td>\n</ng-container>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ButtonClickEvent, CacButtonComponent, CacFieldComponent } from '../../../ui';\nimport { TableBulkAction, TableOptions } from '../table.interfaces';\nimport { PermissionHideDirective } from '../../../../directives';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { formControl } from '@al00x/forms';\nimport { ItemRecord } from '../../../../../core';\n\n@Component({\n  selector: 'cac-table-header',\n  imports: [CacButtonComponent, CacFieldComponent, PermissionHideDirective, MatMenuTrigger],\n  templateUrl: './table-header.component.html',\n  styleUrl: './table-header.component.scss',\n})\nexport class CacTableHeaderComponent {\n  @Input() options!: TableOptions<any>;\n  @Input() loading = false;\n  @Input() totalItems = 0;\n  @Input() bulkActions: ItemRecord<TableBulkAction<any>>[] = [];\n\n  @Output() onAdd = new EventEmitter<ButtonClickEvent>();\n  @Output() onExport = new EventEmitter<ButtonClickEvent>();\n  @Output() onPrint = new EventEmitter<ButtonClickEvent>();\n  @Output() onBulkAction = new EventEmitter<{ value: any, e: ButtonClickEvent }>();\n  @Output() onRefresh = new EventEmitter<ButtonClickEvent>();\n\n  bulkActionControl = formControl<TableBulkAction<any> | undefined>();\n  ADD_TEXT = $localize`:@@base.feature.table.header.addText:Add`;\n}\n","<!-- Bulk Actions -->\n@if (options.bulkActions?.length) {\n  <cac-field\n    class=\"w-full max-w-[12rem]\"\n    [control]=\"bulkActionControl\"\n    controlType=\"select\"\n    [items]=\"bulkActions\"\n    [searchable]=\"false\"\n    label=\"Action\"\n    i18n-label=\"Action@@base.feature.table.header.bulkActionLabel\"\n    placeholder=\"Choose an action\"\n    i18n-placeholder=\"Choose an action@@base.feature.table.header.bulkActionPlaceholder\"\n    [hideError]=\"true\"\n  ></cac-field>\n  <cac-button\n    class=\"h-12\"\n    (onClick)=\"onBulkAction.emit({ value: bulkActionControl.value, e: $event })\"\n    [disabled]=\"!bulkActionControl.value || !options.selectionModel!.hasSelection()\"\n    i18n=\"@@base.feature.table.header.bulkActionApply\"\n    >Apply</cac-button\n  >\n  @if (options.selectionModel?.selectedCount() ?? 0) {\n    <span class=\"font-medium\">\n      <span class=\"mx-1\">{{ options.selectionModel?.selectedCount() }}</span>\n       <span i18n=\"@@base.feature.table.header.selection.XoutOfI\">From</span>\n      <span class=\"mx-1\">{{ totalItems }}</span>\n      <span i18n=\"@@base.feature.table.header.selection.isSelected\">Is selected</span>\n      </span>\n  }\n}\n\n<div class=\"flex-auto\"><!-- Spacer --></div>\n<!-- Other buttons -->\n@if (options.export) {\n  <cac-button\n  uiPermissionHide\n  [uiPermissionHideAction]=\"'export'\"\n  class=\"h-12\"\n  appearance=\"text\"\n  (onClick)=\"onExport.emit($event)\"\n  icon=\"excel-file\"\n  action=\"export\"\n>\n  <span class=\"mr-1\"\n  i18n=\"@@base.feature.table.header.exportExcel\">\n    Export Excel\n  </span>\n</cac-button>\n}\n\n@if(options.export) {\n  <cac-button\n  uiPermissionHide\n  class=\"h-12\"\n  appearance=\"text\"\n  (onClick)=\"onPrint.emit($event)\"\n  icon=\"print\"\n  action=\"print\"\n>\n  <span class=\"mr-1\"\n  i18n=\"@@base.feature.table.header.print\">\n    Print\n  </span>\n</cac-button>\n}\n@if(options.events?.add) {\n  <cac-button\n  uiPermissionHide\n  [uiPermissionHideAction]=\"'create'\"\n  #MenuTriggerAddButton=\"matMenuTrigger\"\n  [matMenuTriggerFor]=\"null\"\n  class=\"h-12\"\n  (onClick)=\"onAdd.emit($event)\"\n  icon=\"plus\"\n  action=\"create\"\n>\n  {{ options.view?.addButtonText ?? ADD_TEXT + ' ' + options.view?.itemName }}\n</cac-button>\n}\n\n<cac-button icon=\"refresh\" class=\"h-12 refresh-button\" appearance=\"text\" [disabled]=\"loading\" (onClick)=\"onRefresh.emit($event)\">\n  <span class=\"refresh-button-text\">Refresh</span>\n</cac-button>\n","import { Observable, pipe, Subject, Subscription, take, UnaryFunction } from 'rxjs';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { AfterViewInit, ChangeDetectorRef, Component, inject, signal, ViewChild } from '@angular/core';\nimport { ActionTypes } from '../../../../core';\nimport { CacDialogLayoutComponent } from '../../layouts';\n\nexport interface BaseDialogData<RESULT, ACTION> {\n  action?: DialogAction<RESULT, ACTION>;\n}\nexport interface BaseDialogResult<RESULT, ACTION> {\n  dialogResult: RESULT;\n  actionResult?: ACTION;\n}\n\nexport type DialogAction<INPUT, RESULT> = (value: INPUT) => Observable<RESULT>;\n\nexport type DialogActionEvent<DIALOG, ACTION> = { dialogResult: DIALOG; actionResult: ACTION };\n\n@Component({\n  selector: 'cac-base-dialog',\n  template: '',\n  standalone: true,\n})\nexport class CacBaseDialogComponent<DATA, RESULT> implements AfterViewInit {\n  readonly cdr = inject(ChangeDetectorRef);\n  protected dialog = inject(MatDialogRef<never, RESULT>);\n  public data: DATA = inject(MAT_DIALOG_DATA);\n\n  @ViewChild(CacDialogLayoutComponent) dialogLayout?: CacDialogLayoutComponent;\n\n  private _boundAction?: DialogAction<RESULT, any>;\n\n  protected subs = new Subscription();\n  protected actionType?: ActionTypes;\n\n  public onAction = new Subject<DialogActionEvent<any, any>>();\n  public isActionBound = signal(false);\n\n  ngAfterViewInit() {\n    this.bindToDialogLayout();\n    this.subs.add(\n      this.dialog\n        .beforeClosed()\n        .pipe(take(1))\n        .subscribe(() => {\n          this.cleanup();\n        }),\n    );\n  }\n\n  submit(result: RESULT, actionPipe?: UnaryFunction<any, any>) {\n    if (!this._boundAction) {\n      this.close(result);\n    } else {\n      this.subs.add(\n        this._boundAction(result)\n          .pipe(take(1), actionPipe ?? pipe())\n          .subscribe((actionResult) => {\n            this.onAction.next({\n              dialogResult: result,\n              actionResult: actionResult,\n            });\n            this.close(result);\n          }),\n      );\n    }\n  }\n\n  close(result?: RESULT) {\n    this.dialog.close(result);\n  }\n\n  bindActionToSubmit<ACTION>(action: DialogAction<RESULT, ACTION>) {\n    this._boundAction = action;\n    this.isActionBound.set(true);\n  }\n\n  setActionType(actionType: ActionTypes | undefined) {\n    this.actionType = actionType;\n    this.setDialogLayoutActionType();\n  }\n\n  protected cleanup() {\n    this.subs.unsubscribe();\n    this.onAction.complete();\n  }\n\n  private bindToDialogLayout() {\n    if (!this.dialogLayout) return;\n    this.setDialogLayoutActionType();\n  }\n\n  private setDialogLayoutActionType() {\n    if (!this.dialogLayout) return;\n    this.dialogLayout.setActionType(this.actionType);\n\n    this.cdr.detectChanges();\n  }\n}\n","import { Component } from '@angular/core';\nimport { ButtonClickEvent } from '../../../ui';\nimport { CacDialogLayoutComponent } from '../../../layouts';\nimport { CacBaseDialogComponent } from '../_base-dialog.component';\n\nexport interface PromptDialogData {\n  title: string;\n  message: string;\n  yesButtonText?: string;\n  noButtonText?: string;\n  yesButtonClassList?: string;\n  noButtonClassList?: string;\n}\n\nexport type PromptDialogResult = boolean;\n\n@Component({\n  selector: 'cac-prompt-dialog',\n  templateUrl: './prompt-dialog.component.html',\n  styleUrls: ['./prompt-dialog.component.scss'],\n  standalone: true,\n  imports: [CacDialogLayoutComponent],\n})\nexport class CacPromptDialogComponent extends CacBaseDialogComponent<PromptDialogData, PromptDialogResult> {\n  onYes(e: ButtonClickEvent) {\n    this.submit(true, e.pipe());\n  }\n\n  onNo() {\n    this.close();\n  }\n}\n","<cac-dialog-layout\n  [title]=\"data.title\"\n  [submitBtn]=\"data.yesButtonText\"\n  [cancelBtn]=\"data.noButtonText\"\n  submitClass=\"h-10 rounded-2 {{ data.yesButtonClassList ?? '' }}\"\n  cancelClass=\"h-10 rounded-2 {{ data.noButtonClassList ?? '' }}\"\n  (onSubmit)=\"onYes($event)\"\n  (onCancel)=\"onNo()\"\n>\n  <p class=\"text-base mt-4 font-normal text-gray-800\">{{ data.message }}</p>\n  <div class=\"h-4\"><!-- Spacer --></div>\n</cac-dialog-layout>\n","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\nimport { ComponentType } from '@angular/cdk/overlay';\nimport { CacBaseDialogComponent, DialogAction, DialogActionEvent } from './components/_base-dialog.component';\nimport { filter, map, Observable, take } from 'rxjs';\nimport { ActionTypes, injectOptional } from '../../../core';\n\nexport interface DialogExtended<T, R> {\n  ref: MatDialogRef<T, R>;\n  afterOpened: () => Observable<void>;\n  afterClosed: () => Observable<R | undefined>;\n  beforeClosed: () => Observable<R | undefined>;\n  afterSubmit: () => Observable<R>;\n  setActionType: (actionType: ActionTypes | undefined) => DialogExtended<T, R>;\n  action: <ACTION>(action: DialogAction<R, ACTION>) => Observable<DialogActionEvent<R, ACTION>>;\n}\n\nexport interface DialogExtendedConfig<D> extends MatDialogConfig<D> {\n  backdropBlur?: 'sm' | 'normal' | 'xl';\n}\n\nexport const DIALOG_INVOKER_CONFIG = new InjectionToken<Partial<DialogExtendedConfig<any>>>('DialogInvokerService');\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DialogInvokerService {\n  readonly dialog = inject(MatDialog);\n  private readonly config = injectOptional(DIALOG_INVOKER_CONFIG);\n\n  open<T, D, R>(component: ComponentType<T>, data?: D, config?: DialogExtendedConfig<D>): DialogExtended<T, R> {\n    const ref = this.dialog.open<T, D, R>(component, {\n      data,\n      backdropClass: [\n        config?.backdropBlur === 'xl' ? 'ui-backdrop-blur-xl' : 'ui-backdrop-blur',\n        config?.enterAnimationDuration === 0 ? 'ui-no-transition' : '',\n      ],\n      ...this.config,\n      ...config,\n    });\n\n    const componentIns = ref.componentInstance as CacBaseDialogComponent<D, R>;\n    const extended: DialogExtended<T, R> = {\n      ref,\n      afterOpened: () => ref.afterOpened(),\n      afterClosed: () => ref.afterClosed(),\n      beforeClosed: () => ref.beforeClosed(),\n      setActionType: (actionType: ActionTypes | undefined) => {\n        componentIns.setActionType(actionType);\n        return extended;\n      },\n      afterSubmit: () =>\n        ref.afterClosed().pipe(\n          filter((result) => result !== undefined && result !== null && result !== false),\n          map((result) => result as R),\n        ),\n      action: <ACTION>(action: DialogAction<R, ACTION>) => {\n        componentIns.bindActionToSubmit(action);\n        return componentIns.onAction.asObservable().pipe(take(1)) as Observable<DialogActionEvent<R, ACTION>>;\n      },\n    };\n    return extended;\n  }\n}\n","import { Component, inject } from '@angular/core';\n\nimport { CacDialogLayoutComponent } from '../../../layouts';\nimport { ButtonClickEvent, CacButtonComponent } from '../../../ui';\nimport { CacBaseDialogComponent, DialogAction, DialogActionEvent } from '../_base-dialog.component';\nimport { Subject } from 'rxjs';\nimport { DialogInvokerService } from '../../dialog-invoker.service';\nimport { CacPromptDialogComponent, PromptDialogData, PromptDialogResult } from '../prompt-dialog/prompt-dialog.component';\nimport { FormBuilder, CacFormBuilderComponent } from '../../../features';\n\nexport interface InputDialogData<T, U> {\n  title: string;\n  subtitle?: string;\n  formBuilder: FormBuilder<T, U>;\n\n  addButtonText?: string;\n  addButtonClass?: string;\n  deleteButton?: boolean;\n\n  footerHtmlContent?: string;\n}\n\n@Component({\n  selector: 'cac-input-dialog',\n  standalone: true,\n  imports: [\n    CacDialogLayoutComponent,\n    CacFormBuilderComponent,\n    CacButtonComponent,\n],\n  templateUrl: './input-dialog.component.html',\n  styleUrls: ['./input-dialog.component.scss'],\n})\nexport class CacInputDialogComponent<T, U> extends CacBaseDialogComponent<InputDialogData<T, U>, any> {\n  readonly dialogInvoker = inject(DialogInvokerService);\n\n  protected _boundDeleteAction?: DialogAction<null, any>;\n\n  public onDeleteAction = new Subject<DialogActionEvent<any, any>>();\n\n  onCancel() {\n    this.close();\n  }\n\n  onSave(e: ButtonClickEvent) {\n    const value = this.data.formBuilder.getValue();\n    if (value) {\n      this.submit(value, e.pipe());\n    }\n  }\n\n  onDelete() {\n    if (!this._boundDeleteAction) return;\n\n    this.dialogInvoker\n      .open<CacPromptDialogComponent, PromptDialogData, PromptDialogResult>(CacPromptDialogComponent, {\n        title: $localize`:@@base.feature.dialog.input.title:Are You Sure Deleting This Item?`,\n        message: $localize`:@@base.feature.dialog.input.message:Deleting Cannot Be Undone, Confirm?`,\n        noButtonText: $localize`:@@base.feature.dialog.input.noButton:No, Cancel`,\n        yesButtonText: $localize`:@@base.feature.dialog.input.yesButton:Yes, Delete.`,\n      })\n      .setActionType('delete')\n      .action(() => this._boundDeleteAction!(null))\n      .subscribe(() => {\n        this.onDeleteAction.next({\n          dialogResult: null,\n          actionResult: true,\n        });\n        this.close(null);\n      });\n  }\n\n  bindActionToDelete<ACTION>(action: DialogAction<null, ACTION>) {\n    this._boundDeleteAction = action;\n  }\n\n  protected override cleanup() {\n    super.cleanup();\n    this.onDeleteAction.complete();\n  }\n}\n","<cac-dialog-layout\n  [title]=\"data.title\"\n  [subtitle]=\"data.subtitle\"\n  (onSubmit)=\"onSave($event)\"\n  (onCancel)=\"onCancel()\"\n  (onError)=\"FormBuilder.scrollToErrored()\"\n  [form]=\"data.formBuilder.formGroup\"\n  [submitBtn]=\"data.addButtonText\"\n  [submitClass]=\"data.addButtonClass\"\n  >\n  <div class=\"mt-5 w-full flex flex-col pb-1\">\n    <cac-form-builder #FormBuilder [options]=\"data.formBuilder\"></cac-form-builder>\n    <div [innerHTML]=\"data.footerHtmlContent\"></div>\n  </div>\n\n  <ng-container slot=\"bottom\">\n    @if (data.deleteButton && _boundDeleteAction) {\n      <cac-button\n        class=\"absolute w-auto inline-flex mt-0 start-0\"\n        theme=\"error\"\n        appearance=\"stroked\"\n        action=\"delete\"\n        (onClick)=\"onDelete()\"\n        i18n=\"@@base.feature.dialog.input.deleteButton\"\n        >Delete</cac-button\n        >\n      }\n    </ng-container>\n  </cac-dialog-layout>\n","import { Component } from '@angular/core';\nimport { CacBaseDialogComponent } from '../_base-dialog.component';\nimport { ButtonClickEvent, CacFieldComponent } from '../../../ui';\nimport { CacDialogLayoutComponent } from '../../../layouts';\nimport { formControl } from '@al00x/forms';\n\nexport interface DescriptionDialogData {\n  title?: string;\n  subtitle?: string;\n  value?: string;\n  submitBtn?: string;\n}\n\nexport interface DescriptionDialogResult {\n  value?: string;\n}\n\n@Component({\n  selector: 'cac-description-dialog',\n  standalone: true,\n  imports: [CacDialogLayoutComponent, CacFieldComponent],\n  templateUrl: './description-dialog.component.html',\n  styleUrls: ['./description-dialog.component.scss'],\n})\nexport class CacDescriptionDialogComponent extends CacBaseDialogComponent<DescriptionDialogData, DescriptionDialogResult> {\n  control = formControl<string | undefined>(undefined);\n  TITLE_DEFAULT_TEXT = $localize`:@@base.feature.dialog.description.title:Description`\n  SUBTITLE_DEFAULT_TEXT = $localize`:@@base.feature.dialog.decription.subtitle:Enter Description And Hit Save.`\n  SUBMIT_DEFAULT_TEXT = $localize`:@@base.feature.dialog.description.submitButton:Save`\n\n  constructor() {\n    super();\n\n    this.control.setValue(this.data.value);\n  }\n\n  onSubmit(e: ButtonClickEvent) {\n    this.submit(\n      {\n        value: this.control.value,\n      },\n      e.pipe(),\n    );\n  }\n}\n","<cac-dialog-layout\n  [title]=\"data.title ?? TITLE_DEFAULT_TEXT\"\n  [subtitle]=\"data.subtitle ?? SUBTITLE_DEFAULT_TEXT\"\n  [form]=\"control\"\n  [submitBtn]=\"data.submitBtn ?? SUBMIT_DEFAULT_TEXT\"\n  (onSubmit)=\"onSubmit($event)\"\n>\n  <cac-field class=\"mt-4\" [control]=\"control\" controlType=\"textarea\" [textareaRows]=\"5\"></cac-field>\n</cac-dialog-layout>\n","import { Component } from '@angular/core';\nimport { CacDialogLayoutComponent } from '../../../layouts';\nimport { CacBaseDialogComponent } from '../_base-dialog.component';\nimport { ButtonClickEvent } from '../../../ui';\nimport { formControl, Validators } from '@al00x/forms';\nimport { formBuilder, CacFormBuilderComponent } from '../../../features';\n\nexport interface ChangePasswordDialogData {}\n\nexport type ChangePasswordDialogResult = {\n  oldPassword: string;\n  newPassword: string;\n};\n\n@Component({\n  selector: 'cac-change-password-dialog',\n  standalone: true,\n  imports: [CacDialogLayoutComponent, CacFormBuilderComponent],\n  templateUrl: './change-password-dialog.component.html',\n  styleUrl: './change-password-dialog.component.scss',\n})\nexport class CacChangePasswordDialogComponent\n  extends CacBaseDialogComponent<ChangePasswordDialogData, ChangePasswordDialogResult>\n{\n  formBuilder = formBuilder({\n    cols: 1,\n    inputs: {\n      oldPassword: {\n        control: formControl<string>(undefined, Validators.required),\n        label: $localize`:@@base.feature.dialog.currentPassword:Current Password`,\n        inputType: 'password-eye',\n      },\n      newPassword: {\n        control: formControl<string>(undefined, [Validators.required, Validators.password()]),\n        label: $localize`:@@base.feature.dialog.newPassword:New Password`,\n        inputType: 'password-eye',\n      },\n      newPasswordRepeat: {\n        control: formControl<string>(undefined, Validators.required),\n        label: $localize`:@@base.feature.dialog.newPasswordRepeat:Confirm New Password`,\n        inputType: 'password-eye',\n      },\n    },\n    onAfterInit: (controls) => {\n      controls.newPasswordRepeat.setValidators([\n        Validators.required,\n        Validators.match(controls.newPassword),\n      ])\n    }\n  });\n\n  constructor() {\n    super();\n  }\n\n  onSubmit(e: ButtonClickEvent) {\n    const values = this.formBuilder.getValue();\n    if (!values) return;\n    const result: ChangePasswordDialogResult = {\n      oldPassword: (values.oldPassword as string) || '',\n      newPassword: (values.newPassword as string) || '',\n    };\n    this.submit(result);\n  }\n}\n","<cac-dialog-layout\n  i18n-title=\"Change Password@@base.feature.dialog.changePasswordTitle\"\n  title=\"Change Password\"\n  i18n-subtitle=\"Change Your Password .@@base.feature.dialog.changePasswordSubTitle\"\n  subtitle=\"Change Your Password.\"\n  submitBtn=\"Change Password\"\n  i18n-submitBtn=\"Change Password@@base.feature.dialog.changePasswordSubmitButton\"\n  cancelBtn=\"Cancel\"\n  i18n-cancelBtn=\"Cancel@@base.feature.dialog.changePasswordCancelButton\"\n  [hideControls]=\"false\"\n  [form]=\"formBuilder.formGroup\"\n  (onSubmit)=\"onSubmit($event)\"\n>\n  <cac-form-builder [options]=\"formBuilder\" class=\"mt-5\"></cac-form-builder>\n</cac-dialog-layout>\n","import { Component } from '@angular/core';\nimport { CacBaseDialogComponent } from '../_base-dialog.component';\nimport { CacDatePickerComponent } from '../../../ui';\nimport { DateRange } from '@angular/material/datepicker';\n\nexport interface CalendarsDialogResult {\n  range: DateRange<Date | null>;\n}\n\n@Component({\n  selector: 'cac-calendar-dialog',\n  standalone: true,\n  imports: [CacDatePickerComponent],\n  templateUrl: './calendar-dialog.component.html',\n  styleUrl: './calendar-dialog.component.scss',\n})\nexport class CacCalendarDialogComponent extends CacBaseDialogComponent<null, CalendarsDialogResult> {\n  onSave(range: DateRange<Date | null> | Date) {\n    this.submit({ range: range as DateRange<Date | null> });\n  }\n}\n","<cac-date-picker [type]=\"'calendar'\" mode=\"range\" (date)=\"onSave($event)\"></cac-date-picker>\n","import { inject, Injectable } from '@angular/core';\nimport {\n  CacPromptDialogComponent,\n  PromptDialogData,\n  PromptDialogResult,\n} from './components/prompt-dialog/prompt-dialog.component';\nimport { DialogExtended, DialogInvokerService } from './dialog-invoker.service';\nimport { CacInputDialogComponent, InputDialogData } from './components/input-dialog/input-dialog.component';\nimport { DialogAction, DialogActionEvent } from './components/_base-dialog.component';\nimport { merge, Observable, take } from 'rxjs';\nimport {\n  CacDescriptionDialogComponent,\n  DescriptionDialogData,\n  DescriptionDialogResult,\n} from './components/description-dialog/description-dialog.component';\nimport {\n  CacChangePasswordDialogComponent,\n  ChangePasswordDialogResult,\n} from './components/change-password-dialog/change-password-dialog.component';\nimport { CacCalendarDialogComponent, CalendarsDialogResult } from './components/calendar-dialog/calendar-dialog.component';\n\nexport interface InputDialogExtended<T, U> extends DialogExtended<CacInputDialogComponent<T, U>, U> {\n  deleteAction: <ACTION>(action: DialogAction<null, ACTION>) => InputDialogExtended<T, U>;\n  onDelete: () => Observable<DialogActionEvent<any, any>>;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DialogService {\n  protected readonly dialog = inject(DialogInvokerService)\n\n  readonly DELETE_TITLE_PRE = $localize`:@@base.feature.dialog.delete.titleBeforeItemName:Are You Sure Deleteing: `\n  readonly DELETE_TITLE_AFTER = $localize`:@@base.feature.dialog.delete.titleAfterItemName:?`\n  readonly DELETE_CAPTION_PRE = $localize`:@@base.feature.dialog.delete.captionBeforeItemName:Deleting `\n  readonly DELETE_CAPTION_AFTER = $localize`:@@base.feature.dialog.delete.captionAfterItemName:Cannot Be Undone, Continue?`\n\n  prompt(data: PromptDialogData) {\n    return this.dialog.open<CacPromptDialogComponent, PromptDialogData, PromptDialogResult>(CacPromptDialogComponent, data, {\n      width: '85vw',\n      maxWidth: '46rem',\n    });\n  }\n\n  deletePrompt(multiple?: boolean) {\n    const itemName = multiple ? $localize`:@@base.feature.dialog.item:Items` : $localize`:@@base.feature.dialog.item:Item`;\n\n    return this.prompt({\n      title: `${this.DELETE_TITLE_PRE} ${itemName} ${this.DELETE_TITLE_AFTER}`,\n      message: `${this.DELETE_CAPTION_PRE} ${itemName} ${this.DELETE_CAPTION_AFTER}`,\n      yesButtonText: $localize`:@@base.feature.dialog.input.yesButton:Yes, Continue.`,\n      noButtonText: $localize`:@@base.feature.dialog.input.noButton:No, Cancel.`,\n    }).setActionType('delete');\n  }\n\n  input<T, U>(data: InputDialogData<T, U>, width?: string) {\n    const dialog = this.dialog.open<CacInputDialogComponent<T, U>, InputDialogData<T, U>, U>(CacInputDialogComponent, data, {\n      width: width,\n      minHeight: '17rem',\n      maxWidth: '90vw',\n      maxHeight: '90vh',\n    }) as InputDialogExtended<T, U>;\n\n    dialog.deleteAction = (a1) => {\n      dialog.ref.componentInstance.bindActionToDelete(a1);\n      return dialog;\n    };\n    dialog.onDelete = () => {\n      return dialog.ref.componentInstance.onDeleteAction.asObservable().pipe(take(1));\n    };\n    dialog.action = (action) => {\n      dialog.ref.componentInstance.bindActionToSubmit(action);\n      return merge(\n        dialog.ref.componentInstance.onAction.pipe(take(1)),\n        dialog.ref.componentInstance.onDeleteAction.pipe(take(1)),\n      ).pipe(take(1));\n    };\n\n    return dialog;\n  }\n\n  description(data: DescriptionDialogData) {\n    return this.dialog.open<CacDescriptionDialogComponent, DescriptionDialogData, DescriptionDialogResult>(\n      CacDescriptionDialogComponent,\n      data,\n      {\n        minWidth: '40rem',\n      },\n    );\n  }\n\n  changePassword() {\n    return this.dialog.open<CacChangePasswordDialogComponent, null, ChangePasswordDialogResult>(\n      CacChangePasswordDialogComponent,\n    );\n  }\n\n  calendar() {\n    return this.dialog.open<CacCalendarDialogComponent, null, CalendarsDialogResult>(CacCalendarDialogComponent, null, {\n      width: '25rem',\n      maxWidth: '90vw',\n    });\n  }\n}\n","import {\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  Output,\n  ViewChild,\n  signal,\n  computed,\n  OnChanges,\n  SimpleChanges,\n  AfterViewInit,\n  AfterContentInit,\n  OnDestroy,\n  OnInit,\n  ElementRef,\n  inject,\n  DestroyRef,\n  TrackByFunction, InjectionToken\n} from '@angular/core';\nimport { MatTableModule } from '@angular/material/table';\nimport {\n  BehaviorSubject,\n  Observable,\n  map,\n  of,\n  tap,\n  Subscription,\n  Subject,\n  debounceTime,\n  UnaryFunction,\n  pipe,\n  catchError,\n  NEVER,\n  switchMap,\n  take,\n} from 'rxjs';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { formatNumber, NgTemplateOutlet } from '@angular/common';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\nimport { MatIconModule } from '@angular/material/icon';\nimport {\n  TableAction,\n  TableBulkAction,\n  TableButtonEvent,\n  TableColumn,\n  TableDialogParams,\n  TableExportOutput,\n  TableMenuParams,\n  TableOptions, TablePagination,\n  TablePrintOptionsCol,\n  TableStateParams\n} from './table.interfaces';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CacTableFilterBarComponent } from './table-filter-bar/table-filter-bar.component';\nimport { CacTableFormMenuComponent } from './table-form-menu/table-form-menu.component';\nimport {\n  DataGetRequest,\n  DataGetResponse,\n  DateFns,\n  effectDep,\n  injectOptional,\n  ItemRecord,\n  objectToId\n} from '../../../../core';\nimport { SelectionModel, SortModel, TableFilterModel } from '../../../classes';\nimport {\n  ButtonClickEvent,\n  CacIconComponent,\n  CacPaginationComponent,\n  CacSkeletonComponent\n} from '../../ui';\nimport { CacPrintableTableComponent } from '../printable-table';\nimport { ForNumberDirective } from '../../../directives';\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { CdkTableDataSourceInput } from '@angular/cdk/table';\nimport {\n  TABLE_COL_SELECTION_PROP,\n  CacTableColSelectionComponent\n} from './columns/table-col-selection/table-col-selection.component';\nimport { TABLE_COL_INDEX_PROP, CacTableColIndexComponent } from './columns/table-col-index/table-col-index.component';\nimport { CacTableColDefaultComponent } from './columns/table-col-default/table-col-default.component';\nimport { TABLE_COL_ACTION_PROP, CacTableColActionComponent } from './columns/table-col-action/table-col-action.component';\nimport { CacTableHeaderComponent } from './table-header/table-header.component';\nimport { DialogService } from '../../dialog';\n\ninterface TableRowData {\n  value: any;\n  value$?: Observable<any>;\n  rawValue: any;\n  dynamicClass: string;\n  dynamicClass$?: Observable<string | undefined>;\n  isValueTrue: boolean;\n  isValueTrue$?: Observable<boolean>;\n  getValue: () => any;\n}\n\ninterface TableRowAction {\n  disabled$?: Observable<boolean>;\n  disabled?: boolean;\n  permission?: string;\n}\n\nexport interface TableRow<T> {\n  id: string | number;\n  // This is used to track if an item is mutated and update the view.\n  mutation: number;\n  data: { [p: string]: TableRowData };\n  originalItem: T;\n  actions: { [p: number]: TableRowAction };\n}\n\nexport interface TableColumnData<T> extends TableColumn<T> {\n  prop: string;\n  isHidden: boolean;\n}\n\nconst TABLE_DEFAULT_GENERATOR = (defaultConfig?: Partial<TableOptions<any>>) =>\n  ({\n    itemToIdFn: objectToId,\n    actions: [],\n    bulkActions: [],\n    selectionModel: new SelectionModel<any>(0, true, [], objectToId),\n    sortModel: new SortModel(),\n    filterModel: new TableFilterModel(),\n    ...defaultConfig,\n    columns: {},\n    itemsFn: undefined,\n  }) as TableOptions<any>;\n\nexport const TABLE_COMPONENT_CONFIG = new InjectionToken<Partial<TableOptions<any>>>('TableComponent');\n\nexport class TablePaginationMismatchError extends Error {\n  constructor() {\n    super(\n      \"Table's pagination mismatched from what is being provided by the api, switching to the last available page index.\",\n    );\n    this.name = 'TablePaginationMismatchError';\n  }\n}\n\n// TODO: Table loader should be inline in each row instead of hiding everything.\n// like showing the header and each row containing a skeleton\n// TODO: Add tooltip to action buttons\n// TODO: Refactor using TableService\n\nexport class TableClass<T extends object> {\n  private _initFn?: (ref: CacTableComponent<T>) => void;\n\n  public items$ = new BehaviorSubject<T[] | undefined>(undefined);\n  public ref?: CacTableComponent<T>;\n\n  constructor(public options?: TableOptions<T>) {}\n\n  onInit(fn: typeof this._initFn) {\n    this._initFn = fn;\n  }\n\n  setOptions(options: TableOptions<T>) {\n    this.options = options;\n    this.ref?.setOptions();\n  }\n\n  setRef(ref: CacTableComponent<T>) {\n    this.ref = ref;\n    this._initFn?.(ref);\n  }\n\n  refresh() {\n    this.ref?.refresh();\n  }\n}\n\n// this function acts as a type infer for typescript, using this function is optional\nexport function table<T extends object>(options?: TableOptions<T>): TableClass<T> {\n  return new TableClass(options);\n}\n\n@Component({\n  selector: 'cac-table',\n  standalone: true,\n  imports: [\n    MatTableModule,\n    MatButtonModule,\n    MatProgressSpinnerModule,\n    MatBadgeModule,\n    CacPaginationComponent,\n    MatCheckboxModule,\n    MatMenuModule,\n    MatIconModule,\n    CacTableFilterBarComponent,\n    CacPrintableTableComponent,\n    NgxSkeletonLoaderModule,\n    ForNumberDirective,\n    CacSkeletonComponent,\n    MatProgressBarModule,\n    CacTableFormMenuComponent,\n    CacTableColSelectionComponent,\n    CacTableColIndexComponent,\n    CacTableColDefaultComponent,\n    CacTableColActionComponent,\n    NgTemplateOutlet,\n    CacTableHeaderComponent\n],\n  providers: [],\n  templateUrl: './table.component.html',\n  styleUrls: ['./table.component.scss'],\n})\nexport class CacTableComponent<T extends object> implements OnInit, OnChanges, AfterViewInit, AfterContentInit, OnDestroy {\n  readonly destroyRef = inject(DestroyRef);\n  private readonly cdr = inject(ChangeDetectorRef);\n  private readonly dialog = inject(DialogService);\n  private readonly config = injectOptional(TABLE_COMPONENT_CONFIG);\n\n  readonly ACTIVE_STRING_VALUE = 'Active';\n\n  readonly EMPTY_VALUE = $localize`:@@base.feature.table.emptyValue:-`;\n  readonly ADD_TEXT = $localize`:@@base.feature.table.addText:Add`;\n  readonly EDIT_TEXT = $localize`:@@base.feature.table.editText:Edit`;\n  readonly NEW_TEXT = $localize`:@@base.feature.table.newText:New`;\n  readonly TRUE_TEXT = $localize`:@@base.values.trueText:Yes`;\n  readonly FALSE_TEXT = $localize`:@@base.values.falseText:No`;\n  readonly ACTIVE_TEXT = $localize`:@@base.feature.table.activeText:Active`;\n  readonly INACTIVE_TEXT = $localize`:@@base.feature.table.inactiveText:Inactive`;\n\n  readonly HOURS_TEXT = $localize`:@@base.feature.table.cellFormatting.hours:hours`;\n  readonly HOURS_AND_TEXT = $localize`:@@base.feature.table.cellFormatting.hoursAnd:Hours and`;\n  readonly MINUTES_TEXT = $localize`:@@base.feature.table.cellFormatting.minutes:minutes`;\n  readonly DATE_TEXT = $localize`:@@base.feature.table.cellFormatting.date:Date`;\n  readonly PLATE_COUNTRY_TEXT = $localize`:@@base.feature.table.cellFormatting.plateCountry:Iran`;\n\n\n  readonly TABLE_DEFAULTS = TABLE_DEFAULT_GENERATOR(this.config);\n\n  @ViewChild('Pagination') pagination?: CacPaginationComponent;\n  @ViewChild('FormMenu') tableFormMenu!: CacTableFormMenuComponent;\n  @ViewChild('MenuTriggerAddButton') menuTriggerAddButton?: MatMenuTrigger;\n  @ViewChild('PrintableTable') printableTable!: CacPrintableTableComponent;\n  @ViewChild('Table') tableElement!: ElementRef<HTMLElement>;\n  @ViewChild('ActionCol') actionCol!: CacTableColActionComponent;\n\n  @Input('options') rawOptions: TableClass<T> | TableOptions<T> = this.TABLE_DEFAULTS as TableOptions<T>;\n\n  @Output() add = new EventEmitter<TableButtonEvent>();\n  @Output() clickRow = new EventEmitter<T>();\n  @Output() export = new EventEmitter<TableExportOutput>();\n\n  private _sessionSubs = new Subscription();\n  private _eventSub?: Subscription;\n  private _printSub?: Subscription;\n  private _exportSub?: Subscription;\n  private _fetchSub?: Subscription;\n  private _refreshTrigger$ = new Subject();\n  private _dataSource$ = new BehaviorSubject<TableRow<T>[] | undefined>(undefined);\n  private _class?: TableClass<T>;\n\n  protected trackByProp = (index: number, item: TableColumnData<any>) => item.prop;\n  protected trackByItem: TrackByFunction<any> = (index: number, item: TableRow<T>) => `${item.id}${item.mutation}`;\n  protected isFirstLoad = signal(true);\n\n  dataSource: CdkTableDataSourceInput<TableRow<T> | undefined> = this._dataSource$.pipe(map((t) => t ?? []));\n  tableRawResponse$ = new BehaviorSubject<any>(undefined);\n\n  options = signal<TableOptions<T>>(this.TABLE_DEFAULTS);\n  totalItems = signal(0);\n  lastRequestOptions = signal<DataGetRequest | undefined>(undefined);\n  loading = signal(true);\n  initialized = signal(false);\n  hiddenColsArray = signal<(keyof T)[]>([]);\n  highlightedRowsArray = signal<(string | number)[]>([]);\n\n  // if undefined, pagination is disabled\n  paginationOptions = computed(\n    () => (!this.options().pagination ? null : this.options().pagination) as TablePagination | undefined,\n  );\n\n  hiddenCols = computed(() =>\n    this.hiddenColsArray().reduce(\n      (pre, cur) => {\n        pre[cur] = true;\n        return pre;\n      },\n      {} as { [key in keyof T]: boolean },\n    ),\n  );\n  highlightedRows = computed(() =>\n    this.highlightedRowsArray().reduce(\n      (pre, cur) => {\n        pre[cur] = true;\n        return pre;\n      },\n      {} as { [key: string | number]: boolean },\n    ),\n  );\n  columns = computed<TableColumnData<T>[]>(() =>\n    Object.entries(this.options().columns).map(([key, value]) => ({\n      prop: key,\n      isHidden: this.hiddenCols()[key as keyof T] ?? false,\n      ...value,\n    })),\n  );\n  actions = computed<TableAction<T>[]>(() => {\n    const actions = this.options().actions ?? [];\n    return actions.map((action) => this.actionAutoPermissionize(action));\n  });\n  bulkActions = computed<ItemRecord<TableBulkAction<T>>[]>(() =>\n    (this.options().bulkActions ?? []).map((t) => ({ label: t.content, value: t })),\n  );\n  isActionHidden = computed(\n    () => this.hiddenColsArray().includes(TABLE_COL_ACTION_PROP as any) || this.actions().length === 0,\n  );\n  hasFilter = computed(() => this.columns().some((v) => v.filterable));\n  columnsLabels = computed<string[]>(() => {\n    const isActionHidden = this.isActionHidden();\n    const cols = this.columns()\n      .filter((t) => !t.isHidden)\n      .map((x) => x.prop);\n\n    cols.unshift(\n      ...([\n        this.options().selectable ? TABLE_COL_SELECTION_PROP : undefined,\n        this.options().showIndex ? TABLE_COL_INDEX_PROP : undefined,\n      ].filter((x) => !!x) as string[]),\n    );\n    if (!isActionHidden) {\n      cols.push(TABLE_COL_ACTION_PROP);\n    }\n\n    return cols;\n  });\n\n  constructor() {\n    this._refreshTrigger$.pipe(takeUntilDestroyed(), debounceTime(50)).subscribe(() => {\n      this._refresh();\n    });\n\n    effectDep(this.options, () => {\n      this._sessionSubs.unsubscribe();\n      this._sessionSubs = new Subscription();\n      this._sessionSubs.add(\n        this.options().sortModel!.changes$.subscribe(() => {\n          this.onSort();\n        }),\n      );\n      this._sessionSubs.add(\n        this.options().filterModel!.changes$.subscribe(() => {\n          this.onFilter();\n        }),\n      );\n      if (!this.initialized()) return;\n      this.refresh();\n    });\n\n    effectDep(this.columns, (columns) => {\n      const options = this.options();\n      options.filterModel?.setColumns(columns);\n    });\n  }\n\n  ngOnInit() {\n    this.setOptions();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['rawOptions'] && !changes['rawOptions'].firstChange) {\n      this.setOptions();\n    }\n  }\n\n  ngAfterViewInit() {\n    this.actionCol.onVisible$.pipe(take(1)).subscribe((isVisible) => {\n      this.setHidden(!isVisible, TABLE_COL_ACTION_PROP as any);\n      this.cdr.detectChanges();\n    });\n\n    this.cdr.detectChanges();\n  }\n\n  ngAfterContentInit() {\n    setTimeout(() => {\n      this.initialized.set(true);\n      this.refresh();\n    }, 50);\n  }\n\n  ngOnDestroy() {\n    this._sessionSubs.unsubscribe();\n    this._eventSub?.unsubscribe();\n  }\n\n  print() {\n    const printOptions = this.options()?.print;\n    const originalColumns = this.columns();\n    let columns: TablePrintOptionsCol<T>[] = [];\n    if (typeof printOptions === 'object' && printOptions.cols && printOptions.cols.length) {\n      for (const col of printOptions.cols) {\n        if (typeof col === 'string') {\n          const foundCol = originalColumns.find((t) => t.prop === col);\n          if (!foundCol) continue;\n          columns.push(foundCol);\n          continue;\n        }\n        columns.push(col);\n      }\n    } else {\n      columns = originalColumns;\n    }\n\n    const items = this.invokeAdapter({\n      ...this.lastRequestOptions(),\n      pagination: {\n        page: 1,\n        size: 999999,\n      },\n    });\n\n    return items.pipe(\n      switchMap((value) => {\n        const items = this.mapResponseToItems(value.result);\n\n        const header: string[] = [];\n        for (const col of columns) {\n          header.push(col.label);\n        }\n\n        const rows: string[][] = [];\n        for (const item of items) {\n          const newItem: string[] = [];\n          for (const col of columns) {\n            const value = this.getPropertyValue(item, col.prop);\n            const transformedValue = this.transformValue(value, item, col);\n            newItem.push(transformedValue);\n          }\n          rows.push(newItem);\n        }\n\n        const extra: ItemRecord<string | number>[] = [];\n        extra.push({ value: value.totalItems.toString(), label: $localize`:@@base.feature.table.extras.total:Total` });\n        if (typeof printOptions === 'object' && printOptions.extra) {\n          extra.push(...printOptions.extra(value.result));\n        }\n\n        return this.printableTable.print({\n          header,\n          rows,\n          extra,\n        });\n      }),\n    );\n  }\n\n  getCurrentItems() {\n    return this._dataSource$.value;\n  }\n\n  getCurrentItems$() {\n    return this._dataSource$;\n  }\n\n  scrollToRowById(id: number | string | undefined) {\n    if (id === undefined) return;\n    const el = this.getRowsElementList().find((t) => t.dataset['id'] === id);\n    el?.scrollIntoView({ behavior: 'smooth', block: 'center' });\n  }\n\n  scrollToRowByIndex(index: number) {\n    const el = this.getRowsElementList().at(index);\n    el?.scrollIntoView({ behavior: 'smooth', block: 'center' });\n  }\n\n  setHighlighted(...ids: (string | number | undefined)[]) {\n    this.highlightedRowsArray.set(ids.filter((t) => t !== undefined) as (string | number)[]);\n  }\n  clearHighlights() {\n    this.highlightedRowsArray.set([]);\n  }\n\n  refresh() {\n    this._refreshTrigger$.next(null);\n  }\n\n  hide(...keys: (keyof T)[]) {\n    this.setHidden(true, ...keys);\n  }\n  show(...keys: (keyof T)[]) {\n    this.setHidden(false, ...keys);\n  }\n\n  setHidden(state: boolean, ...cols: (keyof T)[]) {\n    const current = this.hiddenColsArray();\n\n    for (const col of cols) {\n      const index = current.indexOf(col);\n\n      if (state && index === -1) {\n        current.push(col);\n      } else if (!state && index !== -1) {\n        current.splice(index, 1);\n      }\n    }\n    this.hiddenColsArray.set([...current]);\n  }\n\n  getRowsElementList() {\n    return Array.from(this.tableElement.nativeElement.querySelectorAll('tbody > tr')) as HTMLTableRowElement[];\n  }\n\n  getItem(id: number | string) {\n    const currentData = this._dataSource$.value;\n    if (!currentData) return null;\n    const index = currentData.findIndex((t) => t.id === id);\n    if (index === -1) return;\n    return currentData[index];\n  }\n\n  mutateItem(id: number | string, newData: Partial<T>) {\n    const currentData = this._dataSource$.value;\n    if (!currentData) return;\n    const index = currentData.findIndex((t) => t.id === id);\n    if (index === -1) return;\n\n    const currentItem = currentData[index];\n    currentData[index] = this.mapItemToRow(\n      {\n        ...currentItem.originalItem,\n        ...newData,\n      },\n      currentItem.mutation + 1,\n    );\n\n    this._dataSource$.next(currentData);\n  }\n\n  setOptions() {\n    let rawOpts;\n    if (this.rawOptions instanceof TableClass) {\n      this._class = this.rawOptions;\n      this._class.setRef(this);\n      rawOpts = this._class.options;\n    } else {\n      rawOpts = this.rawOptions;\n    }\n\n    if (!rawOpts) return;\n\n    const opt = {\n      ...this.TABLE_DEFAULTS,\n      ...rawOpts,\n      view: {\n        ...this.TABLE_DEFAULTS.view,\n        ...rawOpts.view,\n      },\n    };\n    if (opt.bulkActions?.length) {\n      opt.selectable = true;\n    }\n    this.options.set(opt);\n  }\n\n  protected onAction(item: T, action: TableAction<T>, trigger: MatMenuTrigger, e?: ButtonClickEvent) {\n    const result = action.action(item, {\n      ...this.createTableDialogParam('edit'),\n      ...this.createTableMenuParam('edit', trigger),\n    });\n\n    this.subscribeToEventResult(result, () =>\n      pipe(\n        tap(() => {\n          this.options().selectionModel?.clear();\n        }),\n        e?.pipe() ?? pipe(),\n      ),\n    );\n  }\n\n  protected onBulkActionApply(bulkAction: any, e: ButtonClickEvent) {\n    if (!bulkAction) return;\n\n    const selectedItems = this.options().selectionModel?.selected() ?? [];\n    if (selectedItems.length === 0) return;\n\n    const result = bulkAction.action(selectedItems, this.createTableStateParam());\n    this.subscribeToEventResult(result, () =>\n      pipe(\n        tap(() => {\n          // this.batchActionControl.setValue(undefined);\n          this.options().selectionModel?.clear();\n        }),\n      ),\n    );\n  }\n\n  protected onAdd(e: ButtonClickEvent) {\n    if (this.options().events?.add) {\n      const result = this.options().events!.add!({\n        ...this.createTableDialogParam('create'),\n        ...this.createTableMenuParam('create', this.menuTriggerAddButton!),\n      });\n\n      this.subscribeToEventResult(result);\n    }\n  }\n\n  protected onRowClick(row: T) {\n    if (this.options().clickableRows) {\n      this.clickRow.emit(row);\n    }\n  }\n\n  protected onExport(e: ButtonClickEvent) {\n    this._exportSub?.unsubscribe();\n    this._exportSub = this.options().export!(this.lastRequestOptions()).pipe(e.pipe()).subscribe();\n  }\n\n  protected onPaginate() {\n    if (this.initialized()) this.refresh();\n  }\n\n  protected onSort() {\n    this.pagination?.set(0);\n    this.refresh();\n  }\n\n  protected onFilter() {\n    this.pagination?.set(0);\n    this.refresh();\n  }\n\n  protected onPrint(e: ButtonClickEvent) {\n    this._printSub?.unsubscribe();\n    this._printSub = this.print().pipe(e.pipe()).subscribe();\n  }\n\n  protected onRefresh() {\n    this.refresh();\n  }\n\n  protected onHeaderSelection(checked: boolean) {\n    checked ? this.options().selectionModel!.selectAll() : this.options().selectionModel!.deselectAll();\n    // this.cdr.detectChanges();\n  }\n\n  protected onItemSelection(item: T, checked: boolean) {\n    checked ? this.options().selectionModel?.select(item) : this.options().selectionModel!.deselect(item);\n    // this.cdr.detectChanges();\n  }\n\n  private invokeAdapter(data: DataGetRequest) {\n    const items = this.options().itemsFn ? this.options().itemsFn!(data) : [];\n\n    return (items instanceof Array ? of(items) : items).pipe(\n      map((result) => {\n        let totalItems: number;\n        if (!result) {\n          totalItems = 0;\n        } else if (result instanceof Array) {\n          totalItems = result.length;\n        } else {\n          totalItems = result.pagination.total;\n        }\n        return {\n          result,\n          totalItems,\n        };\n      }),\n    );\n  }\n\n  private mapResponseToItems(result: DataGetResponse<T> | T[]) {\n    return (result instanceof Array ? result : result?.data) ?? [];\n  }\n\n  private mapItemToCol(item: T, col: TableColumnData<T>): TableRowData {\n    const value = this.getPropertyValue(item, col.prop);\n    const transformedValue = this.transformValue(value, item, col);\n    let value$;\n    const valueState$ = new BehaviorSubject(transformedValue);\n    if (col.transform$) {\n      const transformerFn = this.colToTransformFn(col);\n      value$ = col.transform$?.(value, item, transformerFn)?.pipe(tap((v) => valueState$.next(v)));\n    }\n\n    return {\n      rawValue: value,\n      value: transformedValue,\n      value$: value$?.pipe(map((v) => this.transformValue(v, item, col))),\n      dynamicClass: `${col.dynamicClass?.(value, item) ?? ''} ${col.class ?? ''}`,\n      dynamicClass$: col.dynamicClass\n        ? value$?.pipe(map((v) => `${col.dynamicClass!(v, item)} ${col.class ?? ''}`))\n        : undefined,\n      isValueTrue: this.isValueTrue(value),\n      isValueTrue$: value$?.pipe(map((t) => this.isValueTrue(t))),\n      getValue: () => valueState$.value,\n    };\n  }\n\n  private mapItemToRow(item: T, mutation?: number) {\n    const newItem: TableRow<T> = {\n      id: this.options().itemToIdFn!(item),\n      data: {},\n      originalItem: item,\n      actions: {},\n      mutation: mutation ?? 0,\n    };\n    for (const col of this.columns()) {\n      const mapped = this.mapItemToCol(item, col);\n      newItem.data[col.prop] = mapped;\n\n      const isHidden = typeof col.hide === 'function' ? col.hide(mapped.value, item) : (col.hide ?? false);\n      this.setHidden(isHidden, col.prop as any);\n    }\n    this.actions().forEach((action, index) => {\n      newItem.actions[index] = {\n        disabled$: action.disabled$?.(item),\n        disabled: action.disabled?.(item),\n        permission: typeof action.permission === 'function' ? action.permission(item) : action.permission,\n      };\n    });\n    return newItem;\n  }\n\n  private _refresh() {\n    const options = this.options();\n\n    if (options.itemsFn === undefined) {\n      return;\n    }\n\n    // Cancel the previous request\n    this._fetchSub?.unsubscribe();\n\n    this.loading.set(true);\n    this.options().events?.refresh?.();\n\n    let data: DataGetRequest = {\n      pagination: {\n        page: this.pagination?.page?.(),\n        size: this.pagination?.size() ?? -1,\n      },\n      sort: options.sortModel?.create(),\n      filters: options.filterModel?.create(),\n    };\n\n    if (options.transformRequest) {\n      data = options.transformRequest(data);\n    }\n\n    this.lastRequestOptions.set(data);\n\n    this._fetchSub = this.invokeAdapter(data)\n      .pipe(\n        take(1),\n        takeUntilDestroyed(this.destroyRef),\n        map((value) => {\n          const result = value.result;\n          this.options().events?.response?.(result);\n          const items = this.mapResponseToItems(result);\n          this._class?.items$?.next(items);\n\n          this.tableRawResponse$.next(result);\n          this.totalItems.set(value.totalItems);\n\n          this.options().selectionModel?.setItems(items);\n          this.options().selectionModel?.setTotalCount(value.totalItems);\n\n          // If total pages mismatched the current selected page, simply change the page.\n          if ('pagination' in result && result.pagination.totalPages !== undefined) {\n            const currentPage = this.pagination?.page() ?? 0;\n            if (result.pagination.totalPages !== 0 && currentPage > 1 && result.pagination.totalPages < currentPage) {\n              this.pagination?.set(result.pagination.totalPages - 1);\n              throw new TablePaginationMismatchError();\n            }\n          }\n\n          return items;\n        }),\n        map((result) => result.map((item) => this.mapItemToRow(item))),\n        tap((items) => {\n          this._dataSource$.next(items);\n          this.loading.set(false);\n          if (this.isFirstLoad()) {\n            this.isFirstLoad.set(false);\n          }\n        }),\n        catchError((err) => {\n          if (err instanceof TablePaginationMismatchError) {\n            console.warn(err.message);\n            return NEVER;\n          }\n          throw err;\n        }),\n      )\n      .subscribe();\n    this.cdr.detectChanges();\n  }\n\n  private actionAutoPermissionize(action: TableAction<T>): TableAction<T> {\n    const currentActionType = action.actionType;\n    if (currentActionType) return action;\n\n    switch (action.content) {\n      case 'edit':\n      case 'update':\n        return {\n          ...action,\n          actionType: 'update',\n        };\n\n      default:\n        return action;\n    }\n  }\n\n  private getPropertyValue(object: any, key: string) {\n    const segments = key.split('.');\n    let result = object;\n    for (const key of segments) {\n      result = result?.[key];\n      if (result === undefined || result === null) break;\n    }\n    return result;\n  }\n\n  private transformValue(value: any, row: T, col: TableColumn<T>) {\n    const valueToItemTransform = (value: any) => {\n      if ((col.items?.length ?? 0) === 0) return value;\n      if (value instanceof Array) {\n        return col.items!.filter((x) => value.includes(x.value)).map((x) => x.label);\n      } else {\n        return col.items!.find((x) => x.value === value)?.label;\n      }\n    };\n    const emptyValueTransform = (value: any) => {\n      return this.isValueEmpty(value) ? this.EMPTY_VALUE : value;\n    };\n\n    let newValue = value;\n\n    const transformerFn = this.colToTransformFn(col);\n\n    if (col.type === 'number') {\n      newValue = transformerFn(newValue);\n    }\n    if (col.transform) {\n      newValue = col.transform(newValue, row, transformerFn);\n    } else {\n      newValue = transformerFn(newValue);\n    }\n\n    if (col.items) {\n      newValue = valueToItemTransform(newValue);\n    }\n    newValue = emptyValueTransform(newValue);\n\n    return newValue;\n  }\n\n  private isValueTrue(value: any) {\n    return typeof value === 'number'\n      ? value === 1\n      : typeof value === 'string'\n        ? value === this.ACTIVE_STRING_VALUE\n        : !!value;\n  }\n\n  private isValueEmpty(value: any) {\n    return value === '' || value === undefined || value === null || (value instanceof Array && !value.length);\n  }\n\n  private colToTransformFn(col: TableColumn<T>) {\n    switch (col.type ?? 'text') {\n      case 'number':\n        return (value: any) => {\n          if (value === undefined || value === null) return value;\n\n          const digitsInfo = '1.0-0';\n          const locale = 'en';\n\n          const parsed = typeof value !== 'number' ? parseInt(value) : value;\n          if (parsed === value) {\n            return formatNumber(value, locale, digitsInfo);\n          } else {\n            return `${value}`.replace(`${parsed}`, formatNumber(parsed, locale, digitsInfo));\n          }\n        };\n\n      case 'boolean':\n        return (value: any) => {\n          return value ? this.TRUE_TEXT : this.FALSE_TEXT;\n        };\n\n      case 'status':\n        return (value: any) => {\n          const status =\n            typeof value === 'number'\n              ? value === 1\n              : typeof value === 'string'\n                ? value === this.ACTIVE_STRING_VALUE\n                : value;\n          return status ? this.ACTIVE_TEXT : this.INACTIVE_TEXT;\n        };\n\n      case 'date':\n        return (value: any) => {\n          if (this.isValueEmpty(value)) return this.EMPTY_VALUE;\n          return DateFns().format(new Date(value), 'yyyy/MM/dd');\n        };\n\n      case 'datetime':\n        return (value: any) => {\n          if (this.isValueEmpty(value)) return this.EMPTY_VALUE;\n          const format = DateFns().format(new Date(value), 'yyyy/MM/dd HH:mm').split(' ');\n          return `${this.DATE_TEXT} ${format[0]} \\n ${this.HOURS_TEXT} ${format[1]}`;\n        };\n\n      case 'minutes':\n        return (value: any) => {\n          const hours = Math.floor(value / 60);\n          const minutes = value % 60;\n          return `${hours > 0 ? `${hours} ${this.HOURS_AND_TEXT} ` : ''}${minutes} ${this.MINUTES_TEXT}`;\n        };\n\n      case 'plate':\n        return (value: any) => {\n          return `${value.slice(6)} ${this.PLATE_COUNTRY_TEXT} ${value.slice(3, 6)} ${value.slice(2, 3)} ${value.slice(0, 2)}`;\n        };\n\n      default:\n        return (value: any) => value;\n    }\n  }\n\n  private createTableStateParam() {\n    const e = {\n      setLoader: (loading) => this.loading.set(loading),\n      refresh: () => this.refresh(),\n    } as TableStateParams;\n    return e;\n  }\n\n  private createTableMenuParam(mode: 'create' | 'edit', trigger: MatMenuTrigger) {\n    return {\n      openMenu: (opt, value) =>\n        this.tableFormMenu.openFormMenu(trigger, {\n          itemName: this.options().view!.itemName,\n          mode: mode,\n          formBuilder: opt as any,\n          value,\n        }),\n    } as TableMenuParams;\n  }\n\n  private createTableDialogParam(mode: 'create' | 'edit') {\n    return {\n      openDialog: (formBuilder, value) => {\n        formBuilder.reset(value);\n\n        return this.dialog\n          .input({\n            title:\n              mode === 'create'\n                ? `${this.ADD_TEXT} ${this.options().view!.itemName} ${this.NEW_TEXT}`\n                : `${this.EDIT_TEXT} ${this.options().view!.itemName}`,\n            subtitle: $localize`:@@base.feature.table.createDialog.subtitle:Fill in the details and click save`,\n            deleteButton: true,\n            formBuilder,\n          })\n          .setActionType(mode === 'edit' ? 'update' : 'create');\n      },\n    } as TableDialogParams;\n  }\n\n  private subscribeToEventResult(result: void | Observable<any>, morePipe?: () => UnaryFunction<any, any>) {\n    if (result instanceof Observable) {\n      this._eventSub = result\n        .pipe(\n          tap(() => {\n            this.refresh();\n          }),\n          morePipe?.() ?? pipe(),\n        )\n        .subscribe({\n          error: (e) => {\n            if (e) {\n              console.error(e);\n            }\n          },\n        });\n    }\n  }\n}\n","<!-- -- -- -- -- -- --- -- -- -- -- -- -- -- -->\n<div class=\"hidden\">\n  <mat-icon svgIcon=\"sort\"></mat-icon>\n  <mat-icon svgIcon=\"sort-up\"></mat-icon>\n  <mat-icon svgIcon=\"sort-down\"></mat-icon>\n</div>\n<!-- Preload icons for a smoother experience! -->\n\n<div class=\"p-1\">\n  <!-- Header -->\n  <div class=\"flex flex-col gap-y-4 mb-6 pe-4 min-h-[3rem]\">\n    <!-- Title -->\n    <p class=\"text-2xl text-surface-medium font-medium\">{{ options().view?.title }}</p>\n    <!-- Second row of header -->\n    <div class=\"flex items-center gap-2 mt-2 flex-wrap\">\n      <ng-content select=\"[slot=header-start]\"></ng-content>\n\n      <cac-table-header\n        [options]=\"options()\"\n        [totalItems]=\"totalItems()\"\n        [loading]=\"loading()\"\n        [bulkActions]=\"bulkActions()\"\n        (onAdd)=\"onAdd($event)\"\n        (onExport)=\"onExport($event)\"\n        (onPrint)=\"onPrint($event)\"\n        (onBulkAction)=\"onBulkActionApply($event.value, $event.e)\"\n        (onRefresh)=\"onRefresh()\"\n      ></cac-table-header>\n\n      <ng-content select=\"[slot=header]\"></ng-content>\n    </div>\n  </div>\n\n  <!-- Body -->\n  <div class=\"relative overflow-auto bg-neutral-99 border border-surface-container-highest rounded-1 table-shadow\">\n    <ng-container [ngTemplateOutlet]=\"TableSkeletonLoader\"></ng-container>\n    <!-- Current Filters Bar -->\n    @if (hasFilter()) {\n      <cac-table-filter-bar [filterModel]=\"options().filterModel!\"></cac-table-filter-bar>\n    }\n\n    <div #Table class=\"table-container {{ loading() ? 'opacity-50' : '' }}\">\n      <!-- Table -->\n      <table [dataSource]=\"dataSource\" [trackBy]=\"trackByItem\" mat-table class=\"table\">\n        <!-- Selection (Checkbox) Define -->\n        <cac-table-col-selection\n          [options]=\"options()\"\n          (onSelect)=\"onItemSelection($event.row.originalItem, $event.state)\"\n          (onSelectAll)=\"onHeaderSelection($event)\"\n        ></cac-table-col-selection>\n\n        <!-- Index Define -->\n        <cac-table-col-index [options]=\"options()\" [startIndex]=\"Pagination.startIndex()\"></cac-table-col-index>\n\n        <!-- Other cols define -->\n        @for (col of columns(); track col.prop) {\n          <cac-table-col-default\n            [options]=\"options()\"\n            [col]=\"col\"\n            (onRowClick)=\"onRowClick($any($event))\"\n          ></cac-table-col-default>\n        }\n\n        <!-- Actions Define -->\n        <cac-table-col-action\n          #ActionCol\n          [options]=\"options()\"\n          [actions]=\"actions()\"\n          (onAction)=\"onAction($event.row, $event.action, $event.trigger, $event.clickEvent)\"\n        ></cac-table-col-action>\n\n        <!-- Columns registration -->\n        <tr mat-header-row *matHeaderRowDef=\"columnsLabels()\"></tr>\n\n        <!-- Rows registration -->\n        <tr\n          class=\"feature-table-row {{ $any(highlightedRows())[row.id] ? 'highlighted' : '' }}\"\n          mat-row\n          *matRowDef=\"let row; let col; columns: columnsLabels()\"\n          [attr.data-id]=\"row.originalItem.id\"\n        ></tr>\n      </table>\n    </div>\n    <div class=\"empty:hidden px-12 py-3 border-t border-inherit flex gap-16\">\n      <ng-content select=\"[slot=footer]\"></ng-content>\n    </div>\n  </div>\n  <cac-pagination\n    #Pagination\n    [size]=\"paginationOptions()?.size\"\n    [total]=\"totalItems()\"\n    [autoHide]=\"paginationOptions()?.autoHide ?? false\"\n    (onUpdate)=\"onPaginate()\"\n    class=\"block px-8 {{ !paginationOptions() ? 'hidden' : '' }}\"\n  ></cac-pagination>\n</div>\n\n<!-- Menu used for the Add/Edit action -->\n<cac-table-form-menu #FormMenu [options]=\"options()\"></cac-table-form-menu>\n\n<!-- Print -->\n<cac-printable-table #PrintableTable></cac-printable-table>\n\n<ng-template #TableSkeletonLoader>\n  <div class=\"table-loader {{ loading() ? 'is-visible' : '' }}\">\n    @if (hasFilter()) {\n      <cac-table-filter-bar\n        class=\"{{ !isFirstLoad() ? 'opacity-0 pointer-events-none' : '' }}\"\n      ></cac-table-filter-bar>\n    }\n\n    @if (loading()) {\n      <div class=\"table-container table-skeleton relative\">\n        <table class=\"table\">\n          <thead class=\"{{ !isFirstLoad() ? 'opacity-0 pointer-events-none' : '' }}\">\n            <tr class=\"mat-mdc-header-row mdc-data-table__header-row cdk-header-row\">\n              <th></th>\n            </tr>\n          </thead>\n          <tbody class=\"mdc-data-table__content relative\">\n            <tr class=\"absolute left-0 right-0 top-0\">\n              <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n            </tr>\n            <tr\n              *forNumber=\"8\"\n            class=\"mat-mdc-row mdc-data-table__row cdk-row feature-table-row {{\n              !isFirstLoad() ? 'bg-transparent' : ''\n            }}\"\n              >\n              <td>\n                <cac-skeleton class=\"bg-inherit\"></cac-skeleton>\n              </td>\n            </tr>\n          </tbody>\n        </table>\n      </div>\n    }\n  </div>\n</ng-template>\n","import { inject, Injectable } from '@angular/core';\nimport { map, Observable } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\n\nexport interface StrapiOptions {\n  search?: StrapiSearch[];\n  sort?: StrapiSort[];\n  pagination?: {\n    page: number;\n    perPage: number;\n  };\n  filters?: StrapiFilter[];\n}\nexport interface StrapiSearch {\n  strategy?: 'eq' | 'contains' | 'lte' | 'gte' | 'notNull' | 'null';\n  key: string;\n  term: string;\n  operator?: 'or' | 'and';\n  customKeyUsed?: boolean;\n}\nexport interface StrapiSort {\n  key: string;\n  direction: 'asc' | 'desc';\n  customKeyUsed?: boolean;\n}\nexport interface StrapiFilter {\n  key: string;\n  terms?: string | string[];\n  /* Default strategy is 'in' */\n  strategy?: 'eq' | 'ne' | 'in' | 'gte' | 'lte' | 'notNull' | 'null';\n  /* write the param you want except \"filters\" key */\n  andConditionParam?: string;\n}\n\nexport interface StrapiSingleResponse<T> {\n  data: T;\n  meta: {\n    // ...\n  };\n}\n\nexport interface StrapiPaginatedResponse<T> {\n  data: T[];\n  meta: {\n    pagination: {\n      page: number;\n      pageSize: number;\n      pageCount: number;\n      total: number;\n    };\n  };\n}\n\nconst StrapiIgnorableProps = ['attributes', 'data'];\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class TableStrapiAdapter {\n  private readonly http = inject(HttpClient);\n\n  createGetRequest<T>(\n    url: string,\n    mapFn?: (x: any) => StrapiPaginatedResponse<T>,\n  ): (options?: StrapiOptions) => Observable<StrapiPaginatedResponse<T> | T[]> {\n    return (options) => this.strapiFetchRequest(url, undefined, mapFn, options);\n  }\n\n  createPostRequest<T>(\n    url: string,\n    body: any,\n    requestOptions?: any,\n  ): (options?: StrapiOptions) => Observable<StrapiPaginatedResponse<T> | T[]> {\n    return (options) => this.strapiFetchRequest(url, body, undefined, options, requestOptions);\n  }\n\n  createSearchRequest<T>(url: string, searchOption: Omit<StrapiSearch, 'term'>[], term?: string) {\n    return this.strapiFetchRequest<T>(url, undefined, undefined, {\n      pagination: {\n        page: 1,\n        perPage: 10,\n      },\n      search: term\n        ? searchOption.map((x) => ({\n            term,\n            operator: 'or',\n            strategy: 'contains',\n            ...x,\n          }))\n        : [],\n    });\n  }\n\n  generateMultiIdParam(ids: number[], key = 'id') {\n    return ids.map((id, index) => `${key}[${index}]=${id}`).join('&');\n  }\n\n  generateMultiIdBody(ids: number[], key = 'id'): any {\n    return ids.reduce((pre, cur, index) => {\n      pre[key + '[' + index + ']'] = cur;\n      return pre;\n    }, {} as any);\n  }\n\n  private strapiFetchRequest<T>(\n    url: string,\n    body?: any,\n    mapFn?: (x: any) => StrapiPaginatedResponse<T>,\n    options?: StrapiOptions,\n    requestOptions?: any,\n  ): Observable<StrapiPaginatedResponse<T> | T[]> {\n    const requestUrl = this.optionsToUrl(url, options);\n    return (\n      body\n        ? (this.http.post<StrapiPaginatedResponse<T> | T[]>(requestUrl, body, requestOptions) as any)\n        : this.http.get<StrapiPaginatedResponse<T> | T[]>(requestUrl)\n    ).pipe(map(mapFn ?? ((x) => x)));\n  }\n\n  optionsToUrl(url: string, options: StrapiOptions | undefined, features?: { pagination?: boolean }) {\n    const FEATURES = {\n      pagination: true,\n      ...features,\n    };\n\n    let endpoint = url;\n    let params: string[] = [];\n    if (url.indexOf('?') !== -1) {\n      const split = url.split('?');\n      endpoint = split[0];\n      try {\n        params = split[1].split('&');\n        // eslint-disable-next-line no-empty\n      } catch {}\n    }\n    if (options?.pagination && FEATURES.pagination) {\n      params.push(`pagination[pageSize]=${options.pagination.perPage}`);\n      params.push(`pagination[page]=${options.pagination.page <= 0 ? 1 : options.pagination.page ?? 1}`);\n    }\n    if (options?.sort) {\n      options.sort.forEach((value, index) => {\n        const keyToUse = value.customKeyUsed ? value.key : this.keyToEndpointProcess(value.key);\n        params.push(`sort[${index}]=${keyToUse}:${value.direction.toLowerCase()}`);\n      });\n    }\n    let orIndex = 0;\n    if (options?.search) {\n      options.search.forEach((value) => {\n        if (!value.term) {\n          return;\n        }\n        const strategy = this.strategyResolver(value.strategy);\n        let operatorParam = '';\n        if (value.operator === 'or') {\n          operatorParam = `[$or][${orIndex}]`;\n          orIndex++;\n        }\n        const keyToUse = value.customKeyUsed ? value.key : this.keyToEndpointProcess(value.key);\n        params.push(`filters${operatorParam}${this.keyToBracket(keyToUse)}[${strategy}]=${value.term}`);\n      });\n    }\n    let filterAndIndex = 0;\n    if (options?.filters) {\n      options.filters.forEach((value) => {\n        let terms: string[] = value.terms as any;\n        if (value.terms instanceof Array && value.terms.length === 0) {\n          return;\n        } else if (!value.terms && value.strategy !== 'notNull' && value.strategy !== 'null') {\n          return;\n        }\n        if (typeof value.terms === 'string') {\n          terms = [value.terms];\n        }\n        const strategy = this.strategyResolver(value.strategy ?? 'in');\n        const param = `filters${\n          value.andConditionParam ? '[$and]' + '[' + filterAndIndex + ']' : ''\n        }${this.keyToBracket(value.key)}[${strategy}]`;\n        for (let i = 0; i < terms.length; i++) {\n          params.push(\n            `${param}${strategy !== '$null' && strategy !== '$notNull' ? `[${i}]` : ''}=${\n              strategy === '$null' || strategy === '$notNull' ? 'true' : terms[i]\n            }`,\n          );\n          if (value.andConditionParam) {\n            params.push(`filters[$and][${filterAndIndex}]${value.andConditionParam}`);\n            filterAndIndex++;\n          }\n        }\n      });\n    }\n    return `${endpoint}?${params.join('&')}`;\n  }\n\n  private iterateObject<V>(object: { [p: string]: V }, callback: (key: string, value: V, index: number) => void) {\n    let index = 0;\n    for (const key of Object.keys(object)) {\n      callback(key, (object as any)[key] as V, index);\n      index++;\n    }\n  }\n\n  private keyToBracket(key: string) {\n    return key\n      .split('.')\n      .map((x) => `[${x}]`)\n      .join('');\n  }\n\n  private keyToEndpointProcess(key: string) {\n    const segments = key.split('.');\n    const newSegments = [];\n    for (let i = 0; i < segments.length; i++) {\n      if (!StrapiIgnorableProps.includes(segments[i])) {\n        newSegments.push(segments[i]);\n      }\n    }\n    return newSegments.join('.');\n  }\n\n  private strategyResolver(strategy: string | undefined) {\n    switch (strategy) {\n      case 'gte':\n        return '$gte';\n      case 'lte':\n        return '$lte';\n      case 'contains':\n        return '$contains';\n      case 'null':\n        return '$null';\n      case 'notNull':\n        return '$notNull';\n      case 'in':\n        return '$in';\n      case 'ne':\n        return '$ne';\n      default:\n        return '$eq';\n    }\n  }\n}\n","import { Component, DestroyRef, EventEmitter, inject, Input, OnInit, Output, signal } from '@angular/core';\nimport { combineLatest, retry, timer } from 'rxjs';\nimport { CacLoaderScreenComponent } from '../../ui';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AuthBaseStore } from '../../../../core';\n\n@Component({\n  selector: 'cac-initialization-protection',\n  standalone: true,\n  imports: [CacLoaderScreenComponent],\n  templateUrl: './initialize-protection.component.html',\n  styleUrls: ['./initialize-protection.component.scss'],\n})\nexport class CacInitializeProtectionComponent implements OnInit {\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly auth = inject(AuthBaseStore);\n\n  refreshed = signal(false);\n  errored = signal(false);\n\n  @Input() refreshInterval?: number;\n\n  @Output() onRefreshSuccessful = new EventEmitter();\n\n  ngOnInit() {\n    combineLatest([this.auth.refresh(this.refreshInterval)])\n      .pipe(\n        takeUntilDestroyed(this.destroyRef),\n        retry({\n          count: 1,\n          delay: (err) => {\n            if (err?.status === 0) {\n              throw err;\n            }\n            return timer(500);\n          },\n        }),\n      )\n      .subscribe({\n        next: () => {\n          this.refreshed.set(true);\n          this.onRefreshSuccessful.emit();\n        },\n        error: () => {\n          this.errored.set(true);\n        },\n      });\n  }\n}\n","<cac-loader-screen [show]=\"!refreshed()\" [errored]=\"errored()\" [hideSpinner]=\"true\" [blurry]=\"true\"></cac-loader-screen>\n","import {\n  Component,\n  DestroyRef,\n  effect,\n  EventEmitter,\n  inject,\n  InjectionToken,\n  input,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  signal,\n} from '@angular/core';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { NgxFileDropEntry, NgxFileDropModule } from 'ngx-file-drop';\nimport { AsyncPipe } from '@angular/common';\nimport { CacButtonComponent } from '../../ui';\nimport { MatIcon } from '@angular/material/icon';\nimport { Observable, take } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { formControl, FormControlExtended } from '@al00x/forms';\nimport { componentWithDefaultConfig } from '../../../../core';\n\nexport type ImageUploaderComponent = InstanceType<typeof CacImageUploaderComponent>\nexport const IMAGE_UPLOADER_COMPONENT_CONFIG = new InjectionToken<Partial<ImageUploaderComponent>>('CacImageUploaderComponent');\n\n@Component({\n  selector: 'cac-image-uploader',\n  templateUrl: './image-uploader.component.html',\n  styleUrls: ['./image-uploader.component.scss'],\n  standalone: true,\n  imports: [MatProgressSpinner, NgxFileDropModule, AsyncPipe, CacButtonComponent, MatIcon],\n})\nexport class CacImageUploaderComponent<INPUT, OPTION> implements OnInit, OnDestroy {\n  private readonly destroyRef = inject(DestroyRef);\n\n  @Input() control: FormControlExtended = formControl<INPUT | null | undefined>();\n  @Input() fetchFn?: (value: INPUT, opts?: OPTION) => Observable<string | File | Blob>;\n  @Input() uploadFn?: (file: File, opts?: OPTION) => Observable<INPUT>;\n  @Input() options?: OPTION;\n  @Input() label = 'Image';\n  @Input() disabled = false;\n  @Input() accept = '.png,.jpeg,.jpg,.webp';\n\n  @Output() onUploading = new EventEmitter<boolean>();\n  @Output() onUploaded = new EventEmitter<INPUT>();\n\n  value = input<string | undefined>();\n\n  isLoading = signal(false);\n  url = signal<string | undefined>(undefined);\n\n  private _objectUrls: string[] = [];\n\n  constructor() {\n    componentWithDefaultConfig(this, IMAGE_UPLOADER_COMPONENT_CONFIG);\n\n    effect(() => {\n      const value = this.value();\n      if (value) {\n        this.control.setValue(value);\n      }\n    });\n  }\n\n  ngOnInit(): void {\n    this.updateValues();\n    this.control.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n      this.updateValues();\n    });\n  }\n\n  updateValues() {\n    const currentValue = this.control.value;\n    if (!this.fetchFn) {\n      throw new Error($localize`:@@base.feature.imageUploader.noFetchFnError:No fetchFn provided`);\n    }\n    if (currentValue && currentValue.length) {\n      if (currentValue.startsWith('http')) {\n        this.url.set(currentValue);\n      } else {\n        this.isLoading.set(true);\n        this.fetchFn(currentValue, this.options)\n          .pipe(take(1))\n          .subscribe({\n            next: (res) => {\n              if (typeof res === 'string') {\n                this.url.set(res);\n              } else {\n                const url = URL.createObjectURL(res);\n                this._objectUrls.push(url);\n              }\n\n              this.isLoading.set(false);\n            },\n            error: () => {\n              this.isLoading.set(false);\n            },\n          });\n      }\n    } else if (!currentValue) {\n      this.url.set(undefined);\n    }\n  }\n\n  ngOnDestroy() {\n    this._objectUrls.forEach((t) => URL.revokeObjectURL(t));\n  }\n\n  onFileDrop(files: NgxFileDropEntry[]) {\n    if (this.disabled || this.control.disabled) return;\n\n    if (!this.uploadFn) {\n      throw new Error($localize`:@@base.feature.imageUploader.noUploadFnError:No uploadFn provided`);\n    }\n\n    this.control.markAsTouched();\n\n    const droppedFile = files.at(0);\n    if (!droppedFile) return;\n\n    this.isLoading.set(true);\n    this.onUploading.next(true);\n    this.url.set(undefined);\n\n    const fileEntry = droppedFile.fileEntry as FileSystemFileEntry;\n    fileEntry.file((file: File) => {\n      const reader = new FileReader();\n      reader.addEventListener(\n        'load',\n        () => {\n          this.uploadFn!(file, this.options)\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe({\n              next: (result) => {\n                this.control.setValue(result);\n                this.url.set(reader.result as string);\n                this.isLoading.set(false);\n                this.onUploaded.next(result);\n                this.onUploading.next(false);\n              },\n              error: () => {\n                this.isLoading.set(false);\n                this.onUploading.next(false);\n              },\n            });\n        },\n        false,\n      );\n      reader.readAsDataURL(file);\n    });\n  }\n\n  onDelete() {\n    this.control.markAsTouched();\n    this.url.set(undefined);\n    this.control.setValue(null);\n  }\n}\n","@let disabledState = (control.disabled$ | async) || disabled;\n<ngx-file-drop\n  class=\"feature-image-uploader {{ disabledState ? 'is-disabled' : '' }}\"\n  [class.has-error]=\"!isLoading() && (control.showError$ | async)\"\n  [class.has-value]=\"control.hasValue$ | async\"\n  (onFileDrop)=\"onFileDrop($event)\"\n  [multiple]=\"false\"\n  [accept]=\"accept\"\n>\n  <ng-template ngx-file-drop-content-tmp let-openFileSelector=\"openFileSelector\">\n    <div\n      tabindex=\"0\"\n      class=\"transition-all w-full h-full flex flex-col items-center justify-center relative cursor-pointer hover:bg-neutral-50 overflow-hidden\"\n      (keydown.enter)=\"control.markAsTouched(); openFileSelector()\"\n      (click)=\"control.markAsTouched(); openFileSelector()\"\n    >\n      @if (url()) {\n        <img class=\"absolute w-full h-full object-contain\" [src]=\"url()\" alt=\"\" />\n        @if (!disabledState) {\n          <cac-button\n            (onClick)=\"$event.event.stopPropagation(); onDelete()\"\n            class=\"border-primary-on-container bg-primary-container text-primary-on-container absolute bottom-2 end-2 w-6 h-6\"\n            icon=\"trash\"\n          ></cac-button>\n        }\n      } @else {\n        @if (isLoading()) {\n          <mat-spinner mode=\"indeterminate\" [diameter]=\"32\" [strokeWidth]=\"4\"></mat-spinner>\n        } @else if (!disabledState) {\n          <mat-icon class=\"upload-icon absolute w-8 h-8\" svgIcon=\"camera\"></mat-icon>\n          <span class=\"upload-text mt-auto mb-7\">Upload {{ label }}</span>\n        }\n      }\n    </div>\n  </ng-template>\n</ngx-file-drop>\n","import { computed, inject, Injectable } from '@angular/core';\nimport { getStore, select } from '@ngneat/elf';\nimport { filter, interval, Observable, of, startWith, switchMap, tap, throwError } from 'rxjs';\nimport { Router } from '@angular/router';\nimport { BaseStore } from './_base.store';\nimport { flatten } from '../helpers';\nimport { localStorageStrategy, sessionStorageStrategy, StateStorage } from '@ngneat/elf-persist-state';\nimport { CacGlobalConfig } from '../../configs';\nimport { AppBaseStore } from './app-base.store';\nimport { SnackbarService } from '../../shared';\n\nexport interface AuthBaseStoreProps<USER> {\n  token?: string;\n  user?: USER;\n}\n\nexport interface AuthBaseStoreLoginModel {\n  username: string;\n  password: string;\n  rememberMe?: boolean;\n}\n\nfunction storage() {\n  // We are directly accessing the store to prevent circular dependencies\n  const store = getStore<any>(CacGlobalConfig.generateStoreKey('app'));\n  const rememberMe = store?.getValue().rememberMe ?? false;\n  if (rememberMe) {\n    return localStorageStrategy;\n  } else {\n    return sessionStorageStrategy;\n  }\n}\n\nexport const AuthStorageEngine: StateStorage = {\n  getItem: (key) => {\n    return storage().getItem(key);\n  },\n  setItem: (key, value) => {\n    return storage().setItem(key, value);\n  },\n  removeItem: (key) => {\n    return storage().removeItem(key);\n  },\n};\n\n// This should be extended for customization\nexport class _AuthBaseStore<T extends AuthBaseStoreProps<any>, L extends AuthBaseStoreLoginModel> extends BaseStore<T> {\n  protected router = inject(Router);\n  protected app = inject(AppBaseStore);\n  private readonly snackbar = inject(SnackbarService);\n\n  constructor(\n    public opts: {\n      loginApi: (model: L) => Observable<T>;\n\n      // Specific api which returns user info based on the current token\n      meApi: () => Observable<T['user']>;\n    } = {\n      loginApi: () => throwError(() => new Error('Please implement login api in the AuthStore')),\n      meApi: () => of(undefined),\n    },\n  ) {\n    super({\n      key: 'auth',\n      storageStrategy: AuthStorageEngine,\n    });\n  }\n\n  isAuthenticatedSignal = computed(() => this.isAuthenticated(this.signal()));\n  isLoggedInSignal = computed(() => this.isLoggedIn(this.signal()));\n  permissionKeysSignal = computed(() => this.permissionKeys(this.signal()));\n\n  isAuthenticated$ = this.store.pipe(select(this.isAuthenticated));\n  isLoggedIn$ = this.store.pipe(select(this.isLoggedIn));\n  permissionKeys$ = this.store.pipe(select(this.permissionKeys));\n\n  isAuthenticated(state?: T) {\n    const token = (state ?? this.state).token;\n    return !!token;\n  }\n\n  isLoggedIn(state?: T) {\n    const values = state ?? this.store.getValue();\n    return !!values.user?.id;\n  }\n\n  isSuper() {\n    return !!this.state.user?.permissions?.find((t: any) => t === 'SuperAdmin');\n  }\n\n  permissionKeys(state?: T): string[] {\n    const user = (state ?? this.state).user;\n    return user?.roles?.length ? flatten(user?.roles.map((t: any) => t.permissions)) : user?.permissions;\n  }\n\n  login(model: L) {\n    this.app.setRememberMe(model.rememberMe ?? false);\n    return this.opts.loginApi(model).pipe(\n      switchMap((result) => {\n        return this.checkLoginValidity(result);\n      }),\n      tap((result) => {\n        this.patch(result);\n      }),\n    );\n  }\n\n  // optional navigate is used by interceptors to prevent force navigating to /login\n  logout(optionalNavigate?: boolean) {\n    const isLogged = this.isLoggedIn();\n    this.store.reset();\n    return !isLogged && optionalNavigate ? new Promise<boolean>(() => true) : this.router.navigate(['/login']);\n  }\n\n  /**\n   *\n   * @param intervalPeriod ms - if provided, it will call the refresh within that interval repeatedly\n   */\n  refresh(intervalPeriod?: number) {\n    return (\n      intervalPeriod\n        ? interval(intervalPeriod).pipe(\n            startWith(0),\n            filter((counter) => (counter >= 1 ? document.visibilityState === 'visible' : true)),\n          )\n        : of(0)\n    ).pipe(\n      switchMap(() => {\n        if (!this.state.token) return of(true);\n\n        const userId = this.state.user?.id;\n        if (!userId) {\n          this.logout();\n          return of(true);\n        }\n\n        return this.opts.meApi().pipe(\n          tap((result) => {\n            if (result) {\n              // @ts-ignore\n              this.patch({\n                user: result,\n              });\n            }\n          }),\n          switchMap(() => {\n            const state = this.state;\n            if (this.isForbiddenToEnter(state)) {\n              this.logout();\n              return throwError(() => 'Forbidden');\n            }\n            return of(true);\n          }),\n        );\n      }),\n    );\n  }\n\n  // uses isForbiddenToEnter under the hood\n  protected checkLoginValidity(result: T) {\n    if (this.isForbiddenToEnter(result)) {\n      return throwError(() => 'Forbidden');\n    }\n    return of(result);\n  }\n\n  protected isForbiddenToEnter(state: T) {\n    const perms = this.permissionKeys(state);\n    if (perms?.length === 0) {\n      this.snackbar.error($localize`:@@base.errors.auth.yourAccessDenied:Your Access Denied.`);\n      return true;\n    }\n    return false;\n  }\n}\n\n// This is dummy, used to make service out of the `_AuthBaseStore`. For extension, `_AuthBaseStore` should be used\n@Injectable({\n  providedIn: 'root',\n})\nexport class AuthBaseStore extends _AuthBaseStore<AuthBaseStoreProps<any>, AuthBaseStoreLoginModel> {\n  constructor() {\n    super();\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { AuthBaseStore } from '../states';\n\n@Injectable()\nexport class TokenInterceptor implements HttpInterceptor {\n  private auth = inject(AuthBaseStore)\n\n  intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n    const token = this.auth.get().token;\n    if (token) {\n      request = request.clone({\n        setHeaders: {\n          Authorization: `Bearer ${token}`,\n        },\n      });\n    }\n    return next.handle(request);\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';\nimport { Observable, catchError, throwError } from 'rxjs';\nimport { ErrorHelper } from '../helpers';\nimport { AuthBaseStore } from '../states';\nimport { SnackbarService } from '../../shared';\n\n@Injectable()\nexport class ErrorInterceptor implements HttpInterceptor {\n  private readonly auth = inject(AuthBaseStore);\n  private readonly snackbar = inject(SnackbarService);\n\n  intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n    return next.handle(request).pipe(\n      catchError((e: any) => {\n        if (e.status === 401) {\n          this.auth.logout(true);\n        }\n        this.snackbar.showServerError(e.status, ErrorHelper.parseApiErrorObject(e.error));\n        return throwError(() => e);\n      }),\n    );\n  }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { DateAdapter, MAT_DATE_LOCALE } from '@angular/material/core';\nimport {\n  addDays,\n  addMonths,\n  addYears,\n  format,\n  getDate,\n  getDay,\n  set,\n  getDaysInMonth,\n  getMonth,\n  getYear,\n  Locale,\n  parse,\n  parseISO,\n  setDay,\n  setMonth,\n  toDate,\n} from 'date-fns-jalali';\nimport { faIR } from 'date-fns-jalali/locale';\n\nexport const DATEFNS_PERSIAN_DATE_FORMATS = {\n  parse: {\n    dateInput: 'yyyy/MM/dd',\n  },\n  display: {\n    dateInput: 'yyyy/MM/dd',\n    monthYearLabel: 'yyyy MMMM',\n    dateA11yLabel: 'yyyy/MM/dd',\n    monthYearA11yLabel: 'yyyy MMMM',\n  },\n};\n\nfunction range(start: number, end: number): number[] {\n  const arr: number[] = [];\n  for (let i = start; i <= end; i++) {\n    arr.push(i);\n  }\n\n  return arr;\n}\n\n@Injectable()\nexport class DatefnsJalaliDateAdapter extends DateAdapter<Date> {\n  private _dateFnsLocale?: Locale;\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  private getLocale = (localeCodeOrLocale: string | Locale): Locale => {\n    return faIR;\n  };\n\n  constructor(@Optional() @Inject(MAT_DATE_LOCALE) dateLocale: string) {\n    super();\n\n    try {\n      this.setLocale(dateLocale || faIR);\n    } catch (err) {\n      this.setLocale(faIR);\n    }\n  }\n\n  override setLocale(locale: string | Locale) {\n    if (!locale) {\n      throw new Error('setLocale should be called with the string locale code or date-fns Locale object');\n    }\n    this._dateFnsLocale = this.getLocale(locale);\n    super.setLocale(locale);\n  }\n\n  addCalendarDays(date: Date, days: number): Date {\n    return addDays(date, days);\n  }\n\n  addCalendarMonths(date: Date, months: number): Date {\n    return addMonths(date, months);\n  }\n\n  addCalendarYears(date: Date, years: number): Date {\n    return addYears(date, years);\n  }\n\n  clone(date: Date): Date {\n    return toDate(date);\n  }\n\n  createDate(year: number, month: number, date: number): Date {\n    // Check for invalid month and date (except upper bound on date which we have to check after\n    // creating the Date).\n    if (month < 0 || month > 11) {\n      throw Error(`Invalid month index \"${month}\". Month index has to be between 0 and 11.`);\n    }\n\n    if (date < 1) {\n      throw Error(`Invalid date \"${date}\". Date has to be greater than 0.`);\n    }\n\n    const result = this._createDateWithOverflow(year, month, date);\n    // Check that the date wasn't above the upper bound for the month, causing the month to overflow\n    if (getMonth(result) !== month) {\n      throw Error(`Invalid date \"${date}\" for month with index \"${month}\".`);\n    }\n\n    return result;\n  }\n\n  override deserialize(value: any): Date | null {\n    if (value) {\n      if (typeof value === 'string') {\n        return parseISO(value);\n      }\n      if (typeof value === 'number') {\n        return toDate(value);\n      }\n      if (value instanceof Date) {\n        return this.clone(value as Date);\n      }\n      return null;\n    }\n    return null;\n  }\n\n  format(date: Date, displayFormat: string): string {\n    return format(date, displayFormat, { locale: this._dateFnsLocale });\n  }\n\n  getDate(date: Date): number {\n    return getDate(date);\n  }\n\n  getDateNames(): string[] {\n    return range(1, 31).map((day) => String(day));\n  }\n\n  getDayOfWeek(date: Date): number {\n    return getDay(date);\n  }\n\n  getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\n    const map = {\n      long: 'EEEE',\n      short: 'EEE',\n      narrow: 'EEEEE',\n    };\n\n    const formatStr = map[style];\n    const date = new Date();\n\n    return range(0, 6).map((month) =>\n      format(setDay(date, month), formatStr, {\n        locale: this._dateFnsLocale,\n      }),\n    );\n  }\n\n  getFirstDayOfWeek(): number {\n    return this._dateFnsLocale?.options?.weekStartsOn ?? 0;\n  }\n\n  getMonth(date: Date): number {\n    return getMonth(date);\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\n    const date = new Date();\n\n    return range(0, 11).map((month) =>\n      format(setMonth(date, month), 'LLLL', {\n        locale: this._dateFnsLocale,\n      }),\n    );\n  }\n\n  getNumDaysInMonth(date: Date): number {\n    return getDaysInMonth(date);\n  }\n\n  getYear(date: Date): number {\n    return getYear(date);\n  }\n\n  getYearName(date: Date): string {\n    return format(date, 'yyyy', {\n      locale: this._dateFnsLocale,\n    });\n  }\n\n  invalid(): Date {\n    return new Date(NaN);\n  }\n\n  isDateInstance(obj: any): boolean {\n    return obj instanceof Date;\n  }\n\n  isValid(date: Date): boolean {\n    return date instanceof Date && !isNaN(date.getTime());\n  }\n\n  parse(value: any, parseFormat: any): Date | null {\n    if (value) {\n      if (typeof value === 'string') {\n        return parse(value.trim(), parseFormat, new Date(), {\n          locale: this._dateFnsLocale,\n        });\n      }\n      if (typeof value === 'number') {\n        return toDate(value);\n      }\n      if (value instanceof Date) {\n        return this.clone(value as Date);\n      }\n      return null;\n    }\n    return null;\n  }\n\n  toIso8601(date: Date): string {\n    return date.toISOString();\n  }\n\n  today(): Date {\n    return new Date();\n  }\n\n  private _createDateWithOverflow(year: number, month: number, date: number) {\n    return set(new Date(), { year, month, date });\n  }\n}\n","import { map, Observable } from 'rxjs';\nimport { DataGetFn, DataGetFnResponse, DataGetRequest } from '../interfaces';\nimport * as dateFns from 'date-fns';\n\nexport function GetOfflineAdapter<T>(request$: Observable<T[]>): DataGetFn<T> {\n  return (options) => {\n    return GetOfflineAdapterRequest(request$, options);\n  };\n}\n\nexport function GetOfflineAdapterRequest<T>(request$: Observable<T[]>, options?: DataGetRequest): DataGetFnResponse<T> {\n  return request$.pipe(\n    map((result) => {\n      let data = result;\n      if (!options) {\n        return data;\n      }\n\n      if (options.sort) {\n        const sort = options.sort;\n        data = data.sort((a, b) => {\n          const valueA = getObjectByPath(a, sort.key);\n          const valueB = getObjectByPath(b, sort.key);\n          return typeof valueA === 'string'\n            ? sort.direction === 'asc'\n              ? valueA.localeCompare(valueB)\n              : valueB.localeCompare(valueA)\n            : sort.direction === 'desc'\n              ? valueA > valueB\n                ? 1\n                : -1\n              : valueA < valueB\n                ? 1\n                : -1;\n        });\n      }\n\n      if (options.filters) {\n        options.filters.forEach((filter) => {\n          const filterValueString = (filter.value || '').toString();\n          const dateValue = new Date((filter.value || '').toString());\n          const isDate =\n            filter.value instanceof Array\n              ? false\n              : dateFns.isValid(dateValue) && (filterValueString.includes('/') || filterValueString.includes('-'));\n          switch (filter.type) {\n            case 'contains':\n              data = data.filter((x: any) => {\n                const itemValue = getObjectByPath(x, filter.key);\n                return filter.value instanceof Array\n                  ? filter.value.every((term) => itemValue.includes(term))\n                  : itemValue.includes(filter.value);\n              });\n              break;\n            case 'equal':\n              data = isDate\n                ? data.filter((x: any) => {\n                    const val = new Date(getObjectByPath(x, filter.key));\n                    // If the difference is below 24hours\n                    return (\n                      Math.abs(val.getTime() - dateValue.getTime()) < 24 * 60 * 60 * 1000 &&\n                      val.getDate() === dateValue.getDate()\n                    );\n                  })\n                : data.filter((x: any) => {\n                    const itemValue = getObjectByPath(x, filter.key);\n                    if (typeof itemValue === 'boolean') {\n                      return (\n                        (itemValue && filter.value && filter.value === 'true') ||\n                        (!itemValue && (filter.value === 'false' || !filter.value))\n                      );\n                    } else {\n                      return filter.value instanceof Array\n                        ? filter.value.some((t) => itemValue.toString() === t)\n                        : itemValue.toString() === filter.value;\n                    }\n                  });\n              break;\n            case 'lower':\n              data = isDate\n                ? data.filter((x: any) => dateFns.isBefore(new Date(getObjectByPath(x, filter.key)), dateValue))\n                : data.filter(\n                    (x: any) =>\n                      x[filter.key] < (typeof filter.value === 'string' ? filter.value || '' : filter.value || 0),\n                  );\n              break;\n            case 'greater':\n              data = isDate\n                ? data.filter((x: any) => dateFns.isAfter(new Date(getObjectByPath(x, filter.key)), dateValue))\n                : data.filter(\n                    (x: any) =>\n                      x[filter.key] > (typeof filter.value === 'string' ? filter.value || '' : filter.value || 0),\n                  );\n              break;\n            default:\n              break;\n          }\n        });\n      }\n\n      const pageSize = options.pagination?.size || 10;\n      const start = ((options.pagination?.page || 1) - 1) * pageSize;\n      const end = start + pageSize;\n      const paginatedData = (data.slice(start, end) || []) as T[];\n\n      return {\n        data: paginatedData,\n        pagination: {\n          total: data.length,\n          size: pageSize,\n          page: options.pagination?.page || 1,\n          totalPages: Math.ceil(data.length / pageSize),\n        },\n      };\n    }),\n  );\n}\n\nfunction getObjectByPath(obj: any, path: string) {\n  const segments = path.split('.');\n  let currentObj = obj;\n  for (const key of segments) {\n    if (currentObj === undefined || currentObj === null) {\n      return currentObj;\n    }\n    currentObj = currentObj[key];\n  }\n  return currentObj;\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { AuthBaseStore } from '../states';\n\nexport const AuthGuard: CanActivateFn = () => {\n  const router = inject(Router);\n  const auth = inject(AuthBaseStore);\n  return auth.isAuthenticated() ? true : router.createUrlTree(['/login']);\n};\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { AuthBaseStore } from '../states';\n\nexport const NonAuthGuard: CanActivateFn = () => {\n  const router = inject(Router);\n  const auth = inject(AuthBaseStore);\n  return !auth.isAuthenticated() ? true : router.createUrlTree(['/']);\n};\n","import { computed, inject, Injectable, signal } from '@angular/core';\nimport { ActivatedRouteSnapshot, NavigationEnd, ResolveStart, Router, Routes } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { RouteExtended, RouteItem, RoutePermission, RoutesExtended } from '../interfaces';\nimport { Location } from '@angular/common';\nimport { isRouteExtended } from '../helpers';\nimport { AuthBaseStore } from '../states';\n\n// TODO: Fix Permissions\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class RouteHelperService {\n  private router = inject(Router);\n  private location = inject(Location);\n  private auth = inject(AuthBaseStore);\n\n  private _initialized = false;\n  private _allRoutes = signal<RouteItem[]>([]);\n  private _currentRoutePermissionTree = signal<RoutePermission[] | undefined>(undefined);\n\n  path = signal<string>('/');\n  layout = signal<RouteExtended>(null as any);\n  layoutRootPath = signal<string>('');\n\n  allRoutes = this._allRoutes.asReadonly();\n  currentRoutePermissionTree = this._currentRoutePermissionTree.asReadonly();\n\n  pathChunks = computed(() => this.routeToChunks(this.path()))\n  routes = computed(() => this.filterRoutes(this.allRoutes()));\n  routeItems = computed(() => {\n    return this.getRouteItems();\n  });\n\n  constructor() {\n    this.setupRouterEvents();\n    this.updateConfig();\n  }\n\n  getRoutePermissions(state?: ActivatedRouteSnapshot | null) {\n    const permsTree: RoutePermission[] = [];\n    // let route = state?.root ?? null;\n    // let lastPermissionName: string | undefined;\n\n    // while (route) {\n    //   const perm = (route?.routeConfig as RouteExtended)?.permissions;\n    //   if (perm) {\n    //     lastPermissionName = (typeof perm === 'string' ? perm : perm.name) ?? lastPermissionName;\n    //     let keys: string[] | undefined;\n    //\n    //     if (lastPermissionName && (typeof perm !== 'string' ? !perm.key : true)) {\n    //       keys = this.roleApi.getPermissionKeysByAction(lastPermissionName, 'read');\n    //     } else if (typeof perm !== 'string') {\n    //       keys = perm!.key instanceof Array ? perm!.key : [perm!.key];\n    //     }\n    //\n    //     permsTree.push({\n    //       name: lastPermissionName!,\n    //       keys: keys ?? [],\n    //     });\n    //   }\n    //   route = route.firstChild;\n    // }\n\n    this._currentRoutePermissionTree.set(permsTree);\n    return permsTree;\n  }\n\n  navigate(pathOrItem: string | string[] | RouteItem) {\n    const chunks = this.routeToChunks(pathOrItem, true);\n    return this.router.navigate(chunks);\n  }\n\n  /**\n   * Check if a route is currently active (default behavior will check if the route is exactly activated)\n   * @param route route to check if active\n   * @param partial returns true if the given route is a parent of the activated route\n   */\n  isActive(route: string | string[] | RouteItem, partial?: boolean) {\n    const chunks = this.routeToChunks(route);\n    const currentRouteChunks = this.routeToChunks(this.path());\n\n    if (chunks.length > currentRouteChunks.length) return false;\n    if (chunks.length !== currentRouteChunks.length && !partial) return false;\n\n    for(let i = 0; i < currentRouteChunks.length; i++) {\n      const current = currentRouteChunks[i];\n      const chunk = chunks.at(i);\n\n      if (!chunk && partial) break;\n      if (current !== chunk) return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Same as `isActive(route, true)` function but returns true if either given route is a parent of the activated route or is exactly activated\n   * @param route route to check if active\n   */\n  isActivePartially(route: string | string[] | RouteItem) {\n    return this.isActive(route, true);\n  }\n\n  // if no url parameter is provided, the current url will be used\n  getRouteItemAtLevel(level: number, url?: string): RouteItem | undefined {\n    return (url ? this.getRouteItems(url) : this.routeItems())[level];\n  }\n\n  // if no url parameter is provided, the current url will be used\n  getRouteChildrenAtLevel(level: number, url?: string) {\n    return this.getRouteItemAtLevel(level, url)?.children ?? [];\n  }\n\n  // if no url parameter is provided, the current url will be used\n  getRoutePathAtLevel(level: number, url?: string): string | undefined {\n    return (url ? this.routeToChunks(url) : this.pathChunks())[level];\n  }\n\n  getFirstAllowedRoute(): string | null {\n    const findFirstAllowedChild = (routes: RouteItem[]): string | null => {\n      for (const route of routes) {\n        if (route.children?.length) {\n          const childPath = findFirstAllowedChild(route.children);\n          if (childPath) return `${route.path}/${childPath}`;\n        }\n        return route.path;\n      }\n      return null;\n    };\n\n    return findFirstAllowedChild(this.routes());\n  }\n\n  private setupRouterEvents() {\n    this.router.events.pipe(takeUntilDestroyed()).subscribe((e) => {\n      if (e instanceof ResolveStart) {\n        this.getRoutePermissions(e.state.root);\n        this.resolveRoutePath(e.url);\n      } else if (e instanceof NavigationEnd) {\n        if (!this._initialized) {\n          this._initialized = true;\n          this.getRoutePermissions(this.router.routerState.snapshot.root);\n        }\n        this.resolveRoutePath(e.urlAfterRedirects);\n      }\n    });\n  }\n\n  private updateConfig() {\n    this._allRoutes.set(this.parseRouteConfig(this.router.config) ?? []);\n    this.resolveRoutePath(this.location.path());\n  }\n\n  private getRoutesAtLevel(level: number): RouteItem[] {\n    let currentRoutes = this.routes();\n    if (currentRoutes.length === 0) return [];\n\n    for (let i = 0; i < level; i++) {\n      currentRoutes = currentRoutes[0].children || [];\n    }\n    return currentRoutes;\n  }\n\n  private resolveRoutePath(urlPath: string) {\n    this.path.set(this.cleanupRouteUrl(urlPath));\n  }\n\n  private cleanupRouteUrl(url: string) {\n    return url.startsWith('/') ? url.substring(1) : url;\n  }\n\n  private parseRouteConfig(config: RoutesExtended | Routes): RouteItem[] | null {\n    const mainEntry = config.find((t) => isRouteExtended(t) && t.layout === 'main') as RouteExtended;\n\n    this.layout.set(mainEntry);\n    this.layoutRootPath.set(mainEntry.path ? mainEntry.path.startsWith('/') ? mainEntry.path : `/${mainEntry.path}` : '')\n\n    return mainEntry ? this.getRouteChildren(mainEntry) : null;\n  }\n\n  private getRouteChildren(route: RouteExtended): RouteItem[] {\n    const rootPath = this.layoutRootPath();\n\n    const processRoute = (item: RouteExtended, level = 0, parent?: RouteItem): RouteItem | null => {\n      if (item.redirectTo || (!item.path && !item.children) || !item.view) return null;\n\n      const routeItem = this.routeToRouteItem(item, level, parent, rootPath);\n      if (item.children) {\n        routeItem.children = item.children\n          .map((t) => processRoute(t, level + 1, routeItem))\n          .filter((child): child is RouteItem => child !== null);\n      }\n\n      return routeItem;\n    };\n\n    return (route.children ?? []).map((t) => processRoute(t)).filter((item): item is RouteItem => item !== null);\n  }\n\n  private routeToChunks(route: string | string[] | RouteItem, applySlash = false): string[] {\n    const joined = Array.isArray(route) ? route.join('/') : typeof route === 'object' ? route.fullPath : route;\n    const normalized = joined.replace(/\\/+/g, '/');\n    const chunks = normalized.split('/').filter(t => t.length)\n\n    if (applySlash) chunks.unshift('/');\n\n    return chunks;\n  }\n\n  private routeToRouteItem(route: RouteExtended, level: number, parent?: RouteItem, rootPath?: string): RouteItem {\n    const { permissionName, permissionKey } = this.extractPermissions(route);\n\n    return {\n      fullPath: `${parent?.fullPath ?? rootPath}/${route.path}`,\n      path: route.path!,\n      level,\n      icon: this.extractIcon(route),\n      label: route.view?.label,\n      permission: permissionName && permissionKey ? { name: permissionName, keys: permissionKey } : undefined,\n      visibleToGuest: route.visibleToGuest,\n      children: [],\n      parent,\n      isPlaceholder: !route.component && !route.loadComponent,\n      permittedRoles: route.permittedRoles,\n      hidden: !route.view,\n    };\n  }\n\n  private extractPermissions(route: RouteExtended): { permissionName?: string; permissionKey?: string[] } {\n    // if (!route.permissions) return {};\n    //\n    // const permissionName = typeof route.permissions === 'string' ? route.permissions : route.permissions.name;\n    // const rawKey = typeof route.permissions === 'string' ? undefined : route.permissions.key;\n    //\n    // const permissionKey =\n    //   !rawKey && permissionName\n    //     ? this.roleApi.getPermissionKeysByAction(permissionName, 'read')\n    //     : typeof rawKey === 'string'\n    //     ? [rawKey]\n    //     : rawKey;\n    //\n    // return { permissionName, permissionKey };\n    return { permissionName: undefined, permissionKey: undefined };\n  }\n\n  private extractIcon(route: RouteExtended) {\n    return route.view?.icon\n      ? typeof route.view.icon === 'string'\n        ? { default: route.view.icon }\n        : route.view.icon\n      : undefined;\n  }\n\n  // if no route parameter is provided, the current route will be used\n  private getRouteItems(route?: string) {\n    const parts = route ? this.routeToChunks(route) : this.pathChunks();\n    let currentItems = this.routes();\n    const items: RouteItem[] = [];\n\n    parts.forEach((part) => {\n      const item = currentItems.find((r) => r.path === part);\n      if (item) {\n        items.push(item);\n        currentItems = item.children || [];\n        item.children?.forEach((r) => items.push(r));\n      }\n    });\n\n    return items;\n  }\n\n  private filterRoutes(routes: RouteItem[]): RouteItem[] {\n    return routes;\n\n    // const filteredRoutes: RouteItem[] = [];\n    // const mappedRoutes = (this.auth.permissionKeysSignal() ?? []).map(x => x.permissions);\n    // const userPermissions = mappedRoutes.length ? mappedRoutes.reduce((prev, cur) => prev.concat(cur)) : [];\n    // routes.forEach(route => {\n    //   if (!route.permittedRoles || route.permittedRoles.find(x => userPermissions.includes(x))) {\n    //     const filteredChildren = route.children ? this.filterRoutes(route.children) : undefined;\n    //     filteredRoutes.push({...route, children: filteredChildren});\n    //   }\n    // });\n    // return filteredRoutes;\n\n    // const perms = this.auth.permissionKeysSignal()?.map(t => t.toLowerCase()) ?? [];\n    // const isLoggedIn = this.auth.isLoggedIn();\n\n    // const filterRoute = (route: RouteItem): RouteItem | null => {\n    //   const isVisible = isLoggedIn\n    //     ? route.permission\n    //       ? includes(perms, route.permission.keys.map(t => t.toLowerCase()))\n    //       : true\n    //     : !!route.visibleToGuest;\n\n    //   if (!isVisible) return null;\n\n    //   const filteredChildren = route.children\n    //     ?.map(filterRoute)\n    //     .filter((child): child is RouteItem => child !== null) ?? [];\n\n    //   return { ...route, children: filteredChildren };\n    // };\n\n    // return routes.map(filterRoute).filter((route): route is RouteItem => route !== null);\n  }\n}\n","import { map, Observable, tap } from 'rxjs';\nimport { inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { getFormattedDate, toPascalCase } from '../helpers';\nimport { DataGetOptions, DataGetRequest, ItemRecord } from '../interfaces';\nimport { API_BASEURL } from '../../configs';\n\ntype ResponseType = 'json' | 'text' | 'blob' | undefined;\ninterface ApiOptions {\n  responseType?: ResponseType;\n}\n\nexport type EndpointMethods = 'get' | 'getById' | 'post' | 'put' | 'delete' | 'deleteById';\nexport type EndpointMapper = { [p in EndpointMethods]?: ((path: string) => string) | string };\n\nclass Endpoint {\n  constructor(\n    public path: string,\n    public mapper?: EndpointMapper,\n  ) {}\n\n  get(method: EndpointMethods) {\n    let path = toPascalCase(this.path);\n    if (this.mapper && method in this.mapper) {\n      const mapFn = this.mapper![method]!;\n      path = typeof mapFn === 'function' ? mapFn(path) : mapFn;\n    }\n    return path;\n  }\n}\n\nfunction GetApiAdapter<T>(s: string, options: DataGetOptions<any> | undefined) {\n  return null as any;\n}\n\nfunction GetApiRequest<T>(s: any, p: any) {\n  return null as any;\n}\n\nfunction GetApiAdapterOptionsToQueryParam(param: {pagination: undefined}) {\n  return null as any;\n}\n\nexport class BaseApi<ENTITY, CREATE = any, UPDATE = any> {\n  readonly http = inject(HttpClient);\n  readonly apiBaseUrl = inject(API_BASEURL);\n\n  protected endpoint: Endpoint;\n  protected prefix: string;\n\n  /**\n   *\n   * @param endpoint is the base url to request at, slash at the start is optional\n   * @param endpointMapper is used when the endpoint path is not following the default rule and needs to be changed.\n   */\n  constructor(endpoint: string, endpointMapper?: EndpointMapper) {\n    const segments = this.dropSlash(endpoint).split('/');\n    this.endpoint = new Endpoint(segments.at(-1) ?? '', endpointMapper);\n    this.prefix = `/${segments.length > 1 ? segments.slice(0, -1).join('/') + '/' : ''}`;\n  }\n\n  getAdapter(options?: DataGetOptions<ENTITY>) {\n    return GetApiAdapter<ENTITY>(`${this.prefix}${this.endpoint.get('get')}`, options);\n  }\n\n  getAdapterFiltered(defaultFilters?: DataGetRequest['filters']) {\n    return this.getAdapter({\n      default: {\n        filters: defaultFilters,\n      },\n    });\n  }\n\n  get(id: string | number, opts?: ApiOptions): Observable<ENTITY> {\n    return this.http.get(`${this.prefix}${this.endpoint.get('getById')}/${id}`, this.getOptions(opts) as never).pipe(\n      map((result: any) => {\n        const keys = Object.keys(result);\n        if (keys.length === 1 && !keys.includes('id')) {\n          return result[keys[0]];\n        }\n        return result;\n      }),\n    ) as never;\n  }\n\n  getAll<T = ENTITY>(opts?: DataGetRequest, overrideUrl?: string): Observable<T[]> {\n    return GetApiRequest<T>(overrideUrl ?? `${this.prefix}${this.endpoint.get('get')}`, {\n      pagination: {\n        page: 1,\n        size: 999999,\n      },\n      ...opts,\n    });\n  }\n\n  create<T>(model: CREATE, opts?: ApiOptions): Observable<T> {\n    return this.http.post<T>(\n      `${this.prefix}${this.endpoint.get('post')}`,\n      model,\n      this.getOptions(opts) as never,\n    ) as never;\n  }\n\n  update<T>(id: number, model: UPDATE, opts?: ApiOptions): Observable<T> {\n    return this.http.put<T>(\n      `${this.prefix}${this.endpoint.get('put')}/${id}`,\n      model,\n      this.getOptions(opts) as never,\n    ) as never;\n  }\n\n  delete<T>(id: number | number[] | { id: number } | { id: number }[], opts?: ApiOptions): Observable<T> {\n    return id instanceof Array\n      ? (this.http.delete(\n          `${this.prefix}${this.endpoint.get('delete')}?${id\n            .map((x) => `ID=${typeof x === 'number' ? x : x.id}`)\n            .join('&')}`,\n          this.getOptions(opts) as never,\n        ) as never)\n      : (this.http.delete(\n          `${this.prefix}${this.endpoint.get('deleteById')}/${typeof id === 'number' ? id : id.id}`,\n          this.getOptions(opts) as never,\n        ) as never);\n  }\n\n  protected getItemRecords(\n    mapTo: keyof ENTITY | ((item: ENTITY) => string | ItemRecord<number>),\n    filterByStatus = true,\n    filterBy?: ((item: ENTITY) => boolean) | DataGetRequest['filters'],\n  ): Observable<ItemRecord<number>[]> {\n    const filters: DataGetRequest['filters'] = [];\n    if (filterByStatus) {\n      filters.push({\n        key: 'status',\n        value: 'active',\n      });\n    }\n    if (filterBy instanceof Array) {\n      filters.push(...filterBy);\n    }\n\n    return this.getAll({\n      filters,\n    }).pipe(\n      map((result) => {\n        let currentList = result;\n        // We also do the filter manually, cause not all endpoints support filters...\n        if (filterByStatus) {\n          currentList = currentList.filter((t) => {\n            if (!t || typeof t !== 'object') return true;\n            let status: string | boolean | undefined;\n            if ('status' in t) {\n              status = t.status as any;\n            }\n\n            if (status !== undefined) {\n              return typeof status === 'string' ? status.toLowerCase() === 'active' : status;\n            }\n\n            return true;\n          });\n        }\n        if (filterBy && typeof filterBy === 'function') {\n          currentList = currentList.filter(filterBy);\n        }\n        return currentList.map((t) => {\n          if (typeof mapTo === 'function') {\n            const fnResult = mapTo(t);\n            return typeof fnResult === 'string' ? { label: fnResult, value: t['id' as never] } : fnResult;\n          } else {\n            return { label: t[mapTo], value: t['id' as never] };\n          }\n        }) as ItemRecord<number>[];\n      }),\n    );\n  }\n\n  protected exportAndDownload<T>(url: string, query?: DataGetRequest, filename?: string) {\n    const params = GetApiAdapterOptionsToQueryParam({\n      ...query,\n      pagination: undefined,\n    });\n    return this.http\n      .get<T>(`${this.prependSlash(url)}?${params}`)\n      .pipe(tap((result) => this.downloadUrl(result as never, filename)));\n  }\n\n  protected downloadUrl(resultUrl: object | string, filename?: string) {\n    let exportUrl;\n    if (typeof resultUrl === 'string') {\n      exportUrl = resultUrl;\n    } else {\n      exportUrl = Object.values(resultUrl).find((t) => typeof t === 'string');\n    }\n    if (!exportUrl || exportUrl === '') {\n      console.error('Cannot find a url from this object to download', resultUrl);\n      return;\n    }\n    // window.open(`${this.environment.apiBaseUrl}/${this.dropSlash(exportUrl)}`, '_blank');\n\n    const a = document.createElement('a');\n    a.setAttribute('target', '_blank');\n    a.href = `${this.apiBaseUrl}/${this.dropSlash(exportUrl)}`;\n    a.download = `${filename ? filename : 'export'}_${getFormattedDate(new Date(), 'yyyy-MM-dd_HH-mm-ss')}`;\n    a.style.display = 'none';\n    document.body.appendChild(a);\n    a.click();\n    document.body.removeChild(a);\n  }\n\n  private getOptions(options?: ApiOptions | undefined) {\n    return {\n      responseType: 'json' as const,\n      ...(options ?? {}),\n    };\n  }\n\n  private dropSlash(url: string) {\n    return url.startsWith('/') ? url.substring(1) : url;\n  }\n\n  private prependSlash(url: string) {\n    return url.startsWith('/') ? url : `/${url}`;\n  }\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { RouteHelperService } from '../services';\nimport { of } from 'rxjs';\nimport { AuthBaseStore } from '../states';\nimport { SnackbarService } from '../../shared';\n\n// TODO: Fix Permissions\n\nexport const PermissionGuard: CanActivateFn = (route) => {\n  // const roleService = inject(RoleService);\n  const routeHelper = inject(RouteHelperService);\n  const auth = inject(AuthBaseStore);\n  const router = inject(Router);\n  const snackbar = inject(SnackbarService);\n\n  routeHelper.getRoutePermissions(route);\n\n  // const result = roleService.hasActionPermission();\n  const result = true;\n\n  if (result) return of(true);\n  const firstRoute = routeHelper.getFirstAllowedRoute();\n  if (firstRoute) return router.navigate([firstRoute]);\n\n  snackbar.error($localize`:@@base.errors.permissionGuard.userAccessDenied:User access denied.`);\n  return auth.logout();\n};\n","// APIs Generic & Base properties\n\nexport interface APIError {\n  message: string;\n  code: number;\n}\n","import { inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { DialogService, SnackbarService } from './shared';\nimport { enableElfProdMode } from '@ngneat/elf';\n\nexport function setupGlobalServices() {\n  (globalThis as any).dialog$ = inject(DialogService);\n  (globalThis as any).snackbar$ = inject(SnackbarService);\n  (globalThis as any).http$ = inject(HttpClient);\n}\n\nexport function setupProdMode(prod: boolean) {\n  if (!prod) return;\n\n  enableElfProdMode();\n}\n","import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';\nimport { importProvidersFrom, provideAppInitializer, Provider } from '@angular/core';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { provideAnimations } from '@angular/platform-browser/animations';\nimport { ApiInterceptor, TokenInterceptor, ErrorInterceptor, DatefnsJalaliDateAdapter, AppBaseStore } from './core';\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';\nimport { CacGlobalConfig, API_BASEURL, registerIcons, ENVIRONMENT } from './configs';\nimport { setupGlobalServices, setupProdMode } from './globals';\nimport { DateFnsAdapter } from '@angular/material-date-fns-adapter';\nimport { loadTranslations } from '@angular/localize';\nimport { enUS } from 'date-fns/locale';\nimport localeEn from '@angular/common/locales/en';\nimport { registerLocaleData } from '@angular/common';\nimport { getStore } from '@ngneat/elf';\nimport { provideFormErrors } from '@al00x/forms';\n\n// factory should return a string\nexport const provideApiBaseUrl = (urlFn: Function, deps?: any[]) =>\n  ({\n    provide: API_BASEURL,\n    useFactory: urlFn,\n    deps,\n  }) as Provider;\n\nexport const provideEnvironment = (urlFn: Function, deps?: any[]) =>\n  ({\n    provide: ENVIRONMENT,\n    useFactory: urlFn,\n    deps,\n  }) as Provider;\n\nexport const provideApiInterceptor = () => ({\n  provide: HTTP_INTERCEPTORS,\n  useClass: ApiInterceptor,\n  multi: true,\n});\n\nexport const provideErrorInterceptor = () => ({\n  provide: HTTP_INTERCEPTORS,\n  useClass: ErrorInterceptor,\n  multi: true,\n});\n\nexport const provideTokenInterceptor = () => ({\n  provide: HTTP_INTERCEPTORS,\n  useClass: TokenInterceptor,\n  multi: true,\n});\n\nexport interface CacBaseProviderConfig {\n  initializeFn?: () => void;\n  interceptorOnly?: boolean;\n  providersOnly?: boolean;\n  environment?: any;\n\n  applicationName?: typeof CacGlobalConfig.applicationName;\n  localization?: typeof CacGlobalConfig.localization;\n  applyPrefixToStorageKeys?: typeof CacGlobalConfig.applyPrefixToStorageKeys;\n\n  isProd?: boolean;\n  apiBaseUrl?: string | { fn: Function; deps?: any[] };\n}\n\nexport const provideCacBase = (configOrFn?: CacBaseProviderConfig | (() => CacBaseProviderConfig)) => {\n  let providers: Provider[] = [];\n  let interceptors: Provider[] = [];\n  const additional: Provider[] = [];\n\n  const config = typeof configOrFn === 'function' ? configOrFn() : configOrFn;\n  const isProd = config?.isProd ?? false;\n\n  CacGlobalConfig.localization = config?.localization ?? CacGlobalConfig.localization;\n  CacGlobalConfig.applicationName = config?.applicationName ?? CacGlobalConfig.applicationName;\n  CacGlobalConfig.applyPrefixToStorageKeys =\n    config?.applyPrefixToStorageKeys ?? CacGlobalConfig.applyPrefixToStorageKeys;\n  CacGlobalConfig.defaultLang = CacGlobalConfig.localization.langs[0];\n\n  const appStore = getStore<any>(CacGlobalConfig.generateStoreKey('app')) ?? new AppBaseStore().store;\n\n  let currentLang = appStore?.getValue()?.lang as string | undefined;\n  if (!currentLang || !CacGlobalConfig.localization.langs.includes(currentLang)) {\n    currentLang = CacGlobalConfig.defaultLang;\n  }\n\n  const currentData = {\n    dateLocale: enUS,\n    // dateFormats: DateF,\n    localeData: localeEn,\n    ...CacGlobalConfig.localization.localesData?.[currentLang],\n  };\n  appStore?.update((v) => ({\n    ...v,\n    lang: currentLang,\n  }));\n\n  if (currentData.dateLocale) {\n    providers.push({ provide: MAT_DATE_LOCALE, useValue: currentData.dateLocale });\n  }\n  if (currentData.dateFormats) {\n    providers.push({ provide: MAT_DATE_FORMATS, useValue: currentData.dateFormats });\n  }\n  if (currentData.localeData) {\n    registerLocaleData(currentData.localeData);\n  }\n\n  if (!config?.interceptorOnly) {\n    providers = [\n      provideAnimations(),\n      provideAppInitializer(async () => {\n        config?.initializeFn?.();\n        setupGlobalServices();\n        setupProdMode(isProd);\n        registerIcons();\n\n        if (config?.localization?.localesPath && currentLang !== 'en') {\n          const path = `${!config.localization?.localesPath.startsWith('/') ? '/' : ''}${config.localization?.localesPath}${!config.localization?.localesPath.endsWith('/') ? '/' : ''}`;\n          const json = await fetch(`${path}${currentLang}.json`)\n            .then((r) => r.json())\n            .catch((e) => console.error(`Failed to load translations`, e));\n          loadTranslations(json.translations);\n          $localize.locale = currentLang;\n          document.documentElement.lang = currentLang;\n          document.documentElement.dir = json.rtl ? 'rtl' : 'ltr';\n        }\n\n        // const roleApi = inject(RoleApiService)\n        // firstValueFrom(roleApi.fetchPermissions())\n      }),\n      provideFormErrors({\n        default: $localize`:@@base.errors.control.default:This Field Is Incorrect.`,\n        required: $localize`:@@base.errors.control.required:This Field Is Required.`,\n        email: $localize`:@@base.errors.control.email:Email Format Is Incorrect.`,\n        codeMelli: $localize`:@@base.errors.control.nationalCode:National Code Format Is Incorrect.`,\n        unmatched: $localize`:@@base.errors.control.unmatched:This Field Does Not Match.`,\n        passwordLength: $localize`:@@base.errors.control.passwordLength:Password Should Be 8 Characters Or More`,\n        passwordChars: $localize`:@@base.errors.control.passwordChars:Password Should Contain Both Numbers And Letters.`,\n      }),\n      importProvidersFrom(HttpClientModule, MatDialogModule, MatSnackBarModule, MatProgressSpinnerModule),\n\n      {\n        provide: DateAdapter,\n        useClass: currentLang === 'fa' ? DatefnsJalaliDateAdapter : DateFnsAdapter,\n        deps: [MAT_DATE_LOCALE],\n      },\n    ] as Provider[];\n  }\n\n  if (!config?.providersOnly) {\n    interceptors = [provideApiInterceptor(), provideTokenInterceptor(), provideErrorInterceptor()];\n  }\n\n  if (config?.environment) {\n    additional.push(provideEnvironment(() => config.environment));\n  }\n\n  if (config?.apiBaseUrl && typeof config.apiBaseUrl === 'object') {\n    additional.push(provideApiBaseUrl(config?.apiBaseUrl?.fn, config?.apiBaseUrl?.deps));\n  } else {\n    additional.push(provideApiBaseUrl(() => config?.apiBaseUrl));\n  }\n\n  return [...providers, ...interceptors, ...additional];\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i4","i5","i7","i3","switchMap","Validators"],"mappings":"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"}