{"version":3,"file":"dm-cmps.mjs","sources":["../../../projects/dm-cmps/src/lib/dm-cmps.service.ts","../../../projects/dm-cmps/src/lib/dm-cmps.component.ts","../../../projects/dm-cmps/src/lib/dm-table/dm-table-indexed-db.service.ts","../../../projects/dm-cmps/src/lib/dm-cmps-input/dm-cmps-date.service.ts","../../../projects/dm-cmps/src/lib/dm-table/excel.service.ts","../../../projects/dm-cmps/src/lib/html-printer/html-printer.service.ts","../../../projects/dm-cmps/src/lib/pipes/run-once-pipe.service.ts","../../../projects/dm-cmps/src/lib/dm-select/dm-select.component.ts","../../../projects/dm-cmps/src/lib/dm-select/dm-select.component.html","../../../projects/dm-cmps/src/lib/dm-cmps-input/dm-cmps-input.component.ts","../../../projects/dm-cmps/src/lib/dm-cmps-input/dm-cmps-input.component.html","../../../projects/dm-cmps/src/lib/dm-table/dm-table.component.ts","../../../projects/dm-cmps/src/lib/dm-table/dm-table.component.html","../../../projects/dm-cmps/src/lib/dm-cmps-spinner/dm-cmps-spinner.service.ts","../../../projects/dm-cmps/src/lib/dm-cmps-spinner/dm-cmps-spinner.component.ts","../../../projects/dm-cmps/src/lib/dm-cmps-spinner/dm-cmps-spinner.component.html","../../../projects/dm-cmps/src/lib/dm-cmps-side-nav/dm-cmps-side-nav.component.ts","../../../projects/dm-cmps/src/lib/dm-cmps-side-nav/dm-cmps-side-nav.component.html","../../../projects/dm-cmps/src/lib/dm-cmps-color-picker/dm-cmps-color-picker.component.ts","../../../projects/dm-cmps/src/lib/dm-cmps-color-picker/dm-cmps-color-picker.component.html","../../../projects/dm-cmps/src/lib/pipes/run-once.pipe.ts","../../../projects/dm-cmps/src/lib/pipes/filter-by.pipe.ts","../../../projects/dm-cmps/src/lib/dm-cmps-rating/dm-cmps-rating.component.ts","../../../projects/dm-cmps/src/lib/dm-cmps-rating/dm-cmps-rating.component.html","../../../projects/dm-cmps/src/lib/pipes/dm-cmps-date.pipe.ts","../../../projects/dm-cmps/src/lib/dm-cmps.module.ts","../../../projects/dm-cmps/src/lib/html-printer/html-builder.utils.ts","../../../projects/dm-cmps/src/lib/html-printer/html-builder.ts","../../../projects/dm-cmps/src/lib/dm-cmps-mock-data-generator/mock.data.utils.ts","../../../projects/dm-cmps/src/lib/dm-cmps-mock-data-generator/mock.data.generator.ts","../../../projects/dm-cmps/src/public-api.ts","../../../projects/dm-cmps/src/dm-cmps.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DmCmpsService {\n\n  constructor() { }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lib-dm-cmps',\n  template: `\n    <p>\n      dm-cmps works!\n    </p>\n  `,\n  styles: [\n  ]\n})\nexport class DmCmpsComponent {\n\n}\n","import { Injectable } from '@angular/core';\nimport {\n  IDBPDatabase,\n  openDB,\n  DBSchema,\n  deleteDB,\n  IDBPCursorWithValue,\n} from 'idb';\n\ninterface DMCmpsTableDBSchema {\n  name: string;\n  keyPath: string;\n  autoIncrement: boolean;\n  indices?: { name: string; keyPath: string; options: IDBIndexParameters }[];\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DmTableIndexedDBService {\n  static database: IDBPDatabase | undefined;\n\n  constructor() {}\n\n  static async openDatabaseWithSchema(\n    dbName: string,\n    version: number,\n    schemas: DMCmpsTableDBSchema[]\n  ) {\n    this.database = await openDB(dbName, version, {\n      upgrade(db, oldVersion, newVersion, transaction) {\n        for (const schema of schemas) {\n          const name = schema['name'];\n\n          if (db.objectStoreNames.contains(name)) {\n            db.deleteObjectStore(name);\n          }\n          db.createObjectStore(name, schema);\n\n          schema.indices?.forEach((index) => {\n            const store = transaction.objectStore(name);\n            store.createIndex(index.name, index.keyPath, index.options);\n          });\n        }\n      },\n    });\n  }\n\n  static deleteDB(dbName: string) {\n    if (this.database) deleteDB(dbName);\n  }\n\n  // private async initDatabase() {\n  //   this.database = await openDB('DmCmpsTableDB', 1, {\n  //     upgrade(db, oldVersion, newVersion, transaction) {\n  //       if (oldVersion < 4) {\n  //         const citiesStore = transaction.objectStoreNames.contains('cities')\n  //           ? transaction.objectStore('cities')\n  //           : db.createObjectStore('cities', {\n  //               keyPath: 'id',\n  //               autoIncrement: true,\n  //             });\n  //         if (!citiesStore.indexNames.contains('_id')) {\n  //           citiesStore.createIndex('_id', '_id', { unique: true });\n  //         }\n  //         if (!citiesStore.indexNames.contains('name')) {\n  //           citiesStore.createIndex('name', 'name', { unique: false });\n  //         }\n\n  //         const schoolsStore = transaction.objectStoreNames.contains('schools')\n  //           ? transaction.objectStore('schools')\n  //           : db.createObjectStore('schools', {\n  //               keyPath: 'id',\n  //               autoIncrement: true,\n  //             });\n\n  //         if (!schoolsStore.indexNames.contains('_id')) {\n  //           schoolsStore.createIndex('_id', '_id', { unique: true });\n  //         }\n  //         if (!schoolsStore.indexNames.contains('shem_mosad')) {\n  //           schoolsStore.createIndex('shem_mosad', 'shem_mosad', {\n  //             unique: false,\n  //           });\n  //         }\n  //         if (!schoolsStore.indexNames.contains('semel_yishuv')) {\n  //           schoolsStore.createIndex('semel_yishuv', 'semel_yishuv', {\n  //             unique: false,\n  //           });\n  //         }\n  //         if (!schoolsStore.indexNames.contains('msemel')) {\n  //           schoolsStore.createIndex('msemel', 'msemel', { unique: false });\n  //         }\n\n  //         const dataUpdatingStore = transaction.objectStoreNames.contains(\n  //           'dataUpdating'\n  //         )\n  //           ? transaction.objectStore('dataUpdating')\n  //           : db.createObjectStore('dataUpdating', {\n  //               keyPath: 'id',\n  //               autoIncrement: true,\n  //             });\n  //         if (!dataUpdatingStore.indexNames.contains('_id')) {\n  //           dataUpdatingStore.createIndex('_id', '_id', { unique: true });\n  //         }\n\n  //         const contactsStore = transaction.objectStoreNames.contains(\n  //           'contacts'\n  //         )\n  //           ? transaction.objectStore('contacts')\n  //           : db.createObjectStore('contacts', {\n  //               keyPath: 'id',\n  //               autoIncrement: true,\n  //             });\n  //         if (!contactsStore.indexNames.contains('_id')) {\n  //           contactsStore.createIndex('_id', '_id', { unique: true });\n  //         }\n  //         if (!contactsStore.indexNames.contains('schoolId')) {\n  //           contactsStore.createIndex('schoolId', 'schoolId', {\n  //             unique: false,\n  //           });\n  //         }\n  //         if (!contactsStore.indexNames.contains('fName')) {\n  //           contactsStore.createIndex('fName', 'fName', { unique: false });\n  //         }\n  //       }\n  //     },\n  //     blocked() {\n  //       console.error('Database is blocked.');\n  //     },\n  //     blocking() {\n  //       console.error('Upgrade attempt is blocked by another connection.');\n  //     },\n  //     terminated() {\n  //       console.error('Connection to the database is terminated.');\n  //     },\n  //   });\n  // }\n}\n","import { Injectable } from '@angular/core';\nimport { Timestamp } from 'firebase/firestore';\n\nexport type DmCmpsDateTypes =\n  | Timestamp\n  | Date\n  | string\n  | { _seconds: number; _nanoseconds: number }\n  | { seconds: number; nanoseconds: number }\n  | number;\n\nexport type DmCmpsDateFormats =\n  | 'dd/MM/yyyy'\n  | 'yyyy/MM/dd'\n  | 'dd/MM/yyyy HH:mm';\n\nexport type DmCmpsLangs = 'en' | 'he' | 'ar';\n\nexport const daysOfWeek: Record<DmCmpsLangs, string[]> = {\n  en: [\n    'Sunday',\n    'Monday',\n    'Tuesday',\n    'Wednesday',\n    'Thursday',\n    'Friday',\n    'Saturday',\n  ],\n  he: ['ראשון', 'שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת'],\n  ar: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],\n};\ndeclare global {\n  interface Date {\n    getWeekOfYear(): number;\n    getWeekOfMonth(): number;\n    getDayOfYear(): number;\n  }\n}\n\nDate.prototype.getWeekOfYear = function (): number {\n  const d = new Date(\n    Date.UTC(this.getFullYear(), this.getMonth(), this.getDate())\n  );\n  const dayNum = d.getUTCDay() || 7;\n  d.setUTCDate(d.getUTCDate() + 4 - dayNum);\n  const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\n  return Math.ceil(((d.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);\n};\n\nDate.prototype.getWeekOfMonth = function (): number {\n  const firstDay = new Date(this.getFullYear(), this.getMonth(), 1).getDay();\n  const day = this.getDate();\n  return Math.ceil((day + firstDay) / 7);\n};\n\nDate.prototype.getDayOfYear = function (): number {\n  const start = new Date(this.getFullYear(), 0, 0);\n  const diff = this.getTime() - start.getTime();\n  const oneDay = 1000 * 60 * 60 * 24;\n  return Math.floor(diff / oneDay);\n};\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DmCmpsDateService {\n  constructor() {}\n\n  getDate(\n    date:\n      | Timestamp\n      | Date\n      | string\n      | { _seconds: number; _nanoseconds: number }\n      | { seconds: number; nanoseconds: number }\n      | number\n      | null\n  ): Date | null {\n    if (!date) return null;\n    if (date instanceof Date) return date;\n    if (typeof date === 'string') {\n      if (date == '') return null;\n      return new Date(date) || null;\n    }\n    if ('seconds' in (date as any) && 'nanoseconds' in (date as any)) {\n      return new Date((date as any).seconds * 1000);\n    }\n    if ('_seconds' in (date as any) && '_nanoseconds' in (date as any)) {\n      return new Date((date as any)._seconds * 1000);\n    }\n    if (!isNaN(Number(date))) {\n      return new Date(1900, 0, +date - 1);\n    }\n    return null;\n  }\n\n  /**\n   *\n   * @param date the date to transform\n   * @param format the format of the date\n   * @param lang the language of the date\n   * @returns the date as a string\n   *\n   * @example\n   * The format can be any string that contains the following:\n   * - 'dd' - the day of the month\n   * - 'MM' - the month\n   * - 'yyyy' - the year\n   * - 'yy' - the year (2 digits)\n   * - 'HH' - the hour\n   * - 'mm' - the minute\n   * - 'ss' - the second\n   * - 'SSS' - the millisecond\n   * - 'DM_a' - the AM/PM\n   * - 'DM_E' - the day of the week\n   * - 'DM_Z' - the time zone\n   * - 'DM_z' - the time zone offset\n   * - 'DM_yw' - the week of the year\n   * - 'DM_mw' - the week of the month\n   * - 'DM_yd' - the day of the year\n   */\n  getDateString(\n    date:\n      | Timestamp\n      | Date\n      | string\n      | { _seconds: number; _nanoseconds: number }\n      | { seconds: number; nanoseconds: number }\n      | number\n      | null,\n    format: DmCmpsDateFormats | string = 'dd/MM/yyyy',\n    lang: DmCmpsLangs = 'he'\n  ): string {\n    if (!date) return '';\n    const res = this.getDate(date) as Date;\n    if (!res || !(res instanceof Date) || isNaN(res.getTime())) return '';\n    // const day = res.getDate().toString().padStart(2, '0');\n    // const month = (res.getMonth() + 1).toString().padStart(2, '0');\n    // const year = res.getFullYear();\n    // const hours = res.getHours().toString().padStart(2, '0');\n    // const minutes = res.getMinutes().toString().padStart(2, '0');\n\n    const replacements: Record<string, string> = {\n      dd: res.getDate().toString().padStart(2, '0'),\n      MM: (res.getMonth() + 1).toString().padStart(2, '0'),\n      yyyy: res.getFullYear().toString(),\n      yy: res.getFullYear().toString().slice(-2),\n      HH: res.getHours().toString().padStart(2, '0'),\n      mm: res.getMinutes().toString().padStart(2, '0'),\n      SSS: res.getMilliseconds().toString().padStart(3, '0'),\n      ss: res.getSeconds().toString().padStart(2, '0'),\n      DD: daysOfWeek[lang][res.getDay()],\n      DM_a: res.getHours() < 12 ? 'AM' : 'PM',\n      DM_E: res.getDay().toString(),\n      DM_Z: res.toTimeString().match(/\\(([^)]+)\\)/)?.[1] || '',\n      DM_z: res.getTimezoneOffset().toString(),\n      DM_yw: res.getWeekOfYear().toString(),\n      DM_mw: res.getWeekOfMonth().toString(),\n      DM_yd: res.getDayOfYear().toString(),\n    };\n\n    // Replace format placeholders with actual values\n    return format.replace(\n      /(dd|MM|yyyy|yy|HH|mm|SSS|ss|DD|DM_a|DM_E|DM_Z|DM_z|DM_yw|DM_mw|DM_yd)/g,\n      (match) => replacements[match] || match\n    );\n\n    // if (format === 'dd/MM/yyyy') {\n    //   return `${day}/${month}/${year}`;\n    // }\n    // if (format === 'yyyy/MM/dd') {\n    //   return `${year}/${month}/${day}`;\n    // }\n    // return `${day}/${month}/${year} ${hours}:${minutes}`;\n  }\n\n  /**\n   *\n   * @param date the date to transform\n   * @param format the format of the date\n   * @param lang the language of the date\n   * @returns the date as a string\n   *\n   * @example\n   * The format can be any string that contains the following:\n   * - 'dd' - the day of the month\n   * - 'MM' - the month\n   * - 'yyyy' - the year\n   * - 'yy' - the year (2 digits)\n   * - 'HH' - the hour\n   * - 'mm' - the minute\n   * - 'ss' - the second\n   * - 'SSS' - the millisecond\n   * - 'DM_a' - the AM/PM\n   * - 'DM_E' - the day of the week\n   * - 'DM_Z' - the time zone\n   * - 'DM_z' - the time zone offset\n   * - 'DM_yw' - the week of the year\n   * - 'DM_mw' - the week of the month\n   * - 'DM_yd' - the day of the year\n   */\n  static getDateString(\n    date:\n      | Timestamp\n      | Date\n      | string\n      | { _seconds: number; _nanoseconds: number }\n      | { seconds: number; nanoseconds: number }\n      | number\n      | null,\n    format: DmCmpsDateFormats | string = 'dd/MM/yyyy',\n    lang: DmCmpsLangs = 'he'\n  ): string {\n    if (!date) return '';\n    const res = DmCmpsDateService.getDate(date) as Date;\n    if (!res || !(res instanceof Date) || isNaN(res.getDate())) return '';\n\n    const replacements: Record<string, string> = {\n      dd: res.getDate().toString().padStart(2, '0'),\n      MM: (res.getMonth() + 1).toString().padStart(2, '0'),\n      yyyy: res.getFullYear().toString(),\n      yy: res.getFullYear().toString().slice(-2),\n      HH: res.getHours().toString().padStart(2, '0'),\n      mm: res.getMinutes().toString().padStart(2, '0'),\n      SSS: res.getMilliseconds().toString().padStart(3, '0'),\n      ss: res.getSeconds().toString().padStart(2, '0'),\n      DD: daysOfWeek[lang][res.getDay()],\n      DM_a: res.getHours() < 12 ? 'AM' : 'PM',\n      DM_E: res.getDay().toString(),\n      DM_Z: res.toTimeString().match(/\\(([^)]+)\\)/)?.[1] || '',\n      DM_z: res.getTimezoneOffset().toString(),\n      DM_yw: res.getWeekOfYear().toString(),\n      DM_mw: res.getWeekOfMonth().toString(),\n      DM_yd: res.getDayOfYear().toString(),\n    };\n\n    // Replace format placeholders with actual values\n    return format.replace(\n      /(dd|MM|yyyy|yy|HH|mm|SSS|ss|DD|DM_a|DM_E|DM_Z|DM_z|DM_yw|DM_mw|DM_yd)/g,\n      (match) => replacements[match] || match\n    );\n\n    // const day = res.getDate().toString().padStart(2, '0');\n    // const month = (res.getMonth() + 1).toString().padStart(2, '0');\n    // const year = res.getFullYear();\n    // const hours = res.getHours().toString().padStart(2, '0');\n    // const minutes = res.getMinutes().toString().padStart(2, '0');\n\n    // if (format === 'dd/MM/yyyy') {\n    //   return `${day}/${month}/${year}`;\n    // }\n    // if (format === 'yyyy/MM/dd') {\n    //   return `${year}/${month}/${day}`;\n    // }\n    // return `${day}/${month}/${year} ${hours}:${minutes}`;\n  }\n\n  static getDate(\n    date:\n      | Timestamp\n      | Date\n      | string\n      | { _seconds: number; _nanoseconds: number }\n      | { seconds: number; nanoseconds: number }\n      | number\n      | null\n  ): Date | null {\n    if (!date) return null;\n    if (date instanceof Date) return date;\n    if (typeof date === 'string') {\n      if (date == '') return null;\n      return new Date(date) || null;\n    }\n    if ('_seconds' in (date as any) && '_nanoseconds' in (date as any)) {\n      return new Date((date as any)._seconds * 1000);\n    }\n    if ('seconds' in (date as any) && 'nanoseconds' in (date as any)) {\n      return new Date((date as any).seconds * 1000);\n    }\n    if (!isNaN(Number(date))) {\n      return new Date(1900, 0, +date - 1);\n    }\n    return null;\n  }\n\n  static getTimeString(\n    date:\n      | Timestamp\n      | Date\n      | string\n      | { _seconds: number; _nanoseconds: number }\n      | { seconds: number; nanoseconds: number }\n      | number\n      | null\n  ): string {\n    if (!date) return '';\n    const res = DmCmpsDateService.getDate(date) as Date;\n    if (!res || !(res instanceof Date)) return '';\n    return `${(res.getHours() < 10 ? '0' : '') + res.getHours()}:${\n      (res.getMinutes() < 10 ? '0' : '') + res.getMinutes()\n    }`;\n  }\n\n  static now(): Date {\n    return new Date();\n  }\n\n  now(): Date {\n    return new Date();\n  }\n\n  getAge(\n    date:\n      | Timestamp\n      | Date\n      | string\n      | { _seconds: number; _nanoseconds: number }\n      | { seconds: number; nanoseconds: number }\n      | number\n      | null\n      | null,\n    fixed: number | null = null,\n    result: 'string' | 'number' = 'number'\n  ): number | string {\n    if (!date) return 0;\n    const res = this.getDate(date) as Date;\n    if (!res || !(res instanceof Date)) return 0;\n    const today = new Date();\n    let age = today.getFullYear() - res.getFullYear();\n    let monthDiff = today.getMonth() - res.getMonth();\n\n    if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < res.getDate())) {\n      age--;\n      monthDiff += 12;\n    }\n    const ageWithMonths = age + monthDiff / 12;\n\n    if (result === 'string') {\n      if (fixed || fixed === 0) {\n        return ageWithMonths.toFixed(fixed);\n      }\n      return ageWithMonths;\n    }\n    if (fixed || fixed === 0) {\n      return Number(ageWithMonths.toFixed(fixed));\n    }\n    return ageWithMonths;\n  }\n\n  static getAge(\n    date:\n      | Timestamp\n      | Date\n      | string\n      | { _seconds: number; _nanoseconds: number }\n      | { seconds: number; nanoseconds: number }\n      | number\n      | null\n      | null,\n    fixed: number | null = null,\n    result: 'string' | 'number' = 'number'\n  ): number | string {\n    if (!date) return 0;\n    const res = DmCmpsDateService.getDate(date) as Date;\n    if (!res || !(res instanceof Date)) return 0;\n    const today = new Date();\n    let age = today.getFullYear() - res.getFullYear();\n    let monthDiff = today.getMonth() - res.getMonth();\n\n    if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < res.getDate())) {\n      age--;\n      monthDiff += 12;\n    }\n    const ageWithMonths = age + monthDiff / 12;\n\n    if (result === 'string') {\n      if (fixed || fixed === 0) {\n        return ageWithMonths.toFixed(fixed);\n      }\n      return ageWithMonths;\n    }\n    if (fixed || fixed === 0) {\n      return Number(ageWithMonths.toFixed(fixed));\n    }\n    return ageWithMonths;\n  }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ExcelService {\n  constructor() {}\n\n  public exportAsExcelFile(\n    tableData: any[],\n    columns: string[],\n    fileName: string\n  ): void {\n    let csvContent = 'data:text/csv;charset=utf-8,';\n\n    // Adding column headers - Adjust with your actual headers\n    const headers = columns.join(',');\n    csvContent += `${headers}\\n`;\n\n    // Looping over the rows and columns to add the data\n    tableData.forEach((row) => {\n      let rowContent = '';\n      Object.values(row).forEach((value) => {\n        rowContent += `${value},`;\n      });\n      csvContent += rowContent + '\\n';\n    });\n\n    const encodedUri = encodeURI(csvContent);\n    const link = document.createElement('a');\n    link.setAttribute('href', encodedUri);\n    link.setAttribute('download', `${fileName}.csv`);\n    document.body.appendChild(link); // Required for FF\n\n    link.click(); // This will download the file\n  }\n}\n","import {\n  ApplicationRef,\n  createComponent,\n  EnvironmentInjector,\n  Injectable,\n  Injector,\n  SecurityContext,\n  Type,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DmCmpsHtmlPrinterService {\n  /**\n   * Controls the direction of the printed content.\n   *\n   * When no value is provided, the service uses the current document direction.\n   */\n  readonly direction$ = new BehaviorSubject<\n    'rtl' | 'ltr' | undefined\n  >(undefined);\n\n  constructor(\n    private readonly sanitizer: DomSanitizer,\n    private readonly injector: Injector,\n  ) {}\n\n  /**\n   * Prints the provided HTML content.\n   *\n   * On mobile devices, the content is opened in a new browser window.\n   * On larger screens, the content is rendered inside a temporary iframe.\n   *\n   * @param htmlContent HTML content to print.\n   * @returns Opens the browser printing dialog with the provided HTML content.\n   *\n   * @usageNotes\n   *\n   * #### TypeScript\n   *\n   * ```typescript\n   * export class YourComponent {\n   *   constructor(\n   *     private readonly htmlPrinterService: DmCmpsHtmlPrinterService,\n   *   ) {}\n   *\n   *   print(): void {\n   *     this.htmlPrinterService.printHtml(`\n   *       <html>\n   *         <body>\n   *           <h1>Content to print</h1>\n   *         </body>\n   *       </html>\n   *     `);\n   *   }\n   * }\n   * ```\n   */\n  printHtml(htmlContent: string): void {\n    if (window.innerWidth <= 796) {\n      this.printHtmlUsingWindow(htmlContent);\n      return;\n    }\n\n    this.printHtmlUsingIframe(htmlContent);\n  }\n\n  /**\n   * Prints the provided HTML element.\n   *\n   * The method copies the current document stylesheets and includes them in the\n   * printed document.\n   *\n   * @param htmlElement HTML element to print.\n   * @returns Opens the browser printing dialog with the provided element.\n   *\n   * @usageNotes\n   *\n   * #### HTML\n   *\n   * ```html\n   * <div id=\"example-area-to-print\">\n   *   <!-- Template to print -->\n   * </div>\n   * ```\n   *\n   * #### TypeScript\n   *\n   * ```typescript\n   * export class YourComponent {\n   *   constructor(\n   *     private readonly htmlPrinterService: DmCmpsHtmlPrinterService,\n   *   ) {}\n   *\n   *   print(): void {\n   *     const element = document.getElementById('example-area-to-print');\n   *\n   *     if (!element) {\n   *       console.error('Element not found');\n   *       return;\n   *     }\n   *\n   *     this.htmlPrinterService.printHtmlElement(element);\n   *   }\n   * }\n   * ```\n   */\n  printHtmlElement(htmlElement: HTMLElement): void {\n    const styles = this.getDocumentStyles();\n\n    const direction =\n      this.direction$.value ??\n      (document.documentElement.dir || 'ltr');\n\n    const html = `\n      <!doctype html>\n      <html dir=\"${direction}\">\n        <head>\n          <meta charset=\"utf-8\">\n          ${styles}\n        </head>\n\n        <body>\n          ${htmlElement.outerHTML}\n        </body>\n      </html>\n    `;\n\n    this.printHtml(html);\n  }\n\n  /**\n   * Creates and prints an Angular component dynamically.\n   *\n   * The component must be available to the application's environment injector.\n   * The component instance is destroyed after its rendered HTML is copied for\n   * printing.\n   *\n   * Angular services needed for dynamic component creation are resolved lazily\n   * only when this method is called. This prevents circular dependency errors\n   * while constructing this service.\n   *\n   * @param component Angular component type to print.\n   *\n   * @usageNotes\n   *\n   * #### TypeScript\n   *\n   * ```typescript\n   * export class YourComponent {\n   *   constructor(\n   *     private readonly htmlPrinterService: DmCmpsHtmlPrinterService,\n   *   ) {}\n   *\n   *   print(): void {\n   *     this.htmlPrinterService.printComponent(ComponentToPrint);\n   *   }\n   * }\n   * ```\n   */\n  printComponent<T>(component: Type<T>): void {\n    /*\n     * Resolve these dependencies lazily instead of injecting them in the\n     * constructor. This prevents ApplicationRef and the component creation\n     * mechanism from participating in the service's initial DI chain.\n     */\n    const appRef = this.injector.get(ApplicationRef);\n    const environmentInjector =\n      this.injector.get(EnvironmentInjector);\n\n    const componentRef = createComponent(component, {\n      environmentInjector,\n    });\n\n    try {\n      appRef.attachView(componentRef.hostView);\n\n      /*\n       * Run change detection so bindings and the component template are\n       * rendered before reading the native element.\n       */\n      componentRef.changeDetectorRef.detectChanges();\n\n      const domElement =\n        componentRef.location.nativeElement as HTMLElement;\n\n      this.printHtmlElement(domElement);\n    } finally {\n      appRef.detachView(componentRef.hostView);\n      componentRef.destroy();\n    }\n  }\n\n  /**\n   * Opens and prints HTML content using a new browser window.\n   *\n   * This method is mainly used on mobile devices where printing from a hidden\n   * iframe may not work reliably.\n   */\n  private printHtmlUsingWindow(htmlContent: string): void {\n    const printWindow = window.open('', '_blank');\n\n    if (!printWindow) {\n      console.error('Print window could not be opened');\n      return;\n    }\n\n    const sanitizedHtml =\n      this.sanitizer.sanitize(\n        SecurityContext.HTML,\n        htmlContent,\n      ) ?? '';\n\n    printWindow.document.open();\n    printWindow.document.write(sanitizedHtml);\n    printWindow.document.close();\n\n    setTimeout(() => {\n      printWindow.focus();\n      printWindow.print();\n      printWindow.close();\n    }, 1500);\n  }\n\n  /**\n   * Opens and prints HTML content using a temporary hidden iframe.\n   */\n  private printHtmlUsingIframe(htmlContent: string): void {\n    const iframe = document.createElement('iframe');\n\n    iframe.style.position = 'absolute';\n    iframe.style.width = '0';\n    iframe.style.height = '0';\n    iframe.style.border = 'none';\n    iframe.style.opacity = '0';\n    iframe.setAttribute('aria-hidden', 'true');\n\n    document.body.appendChild(iframe);\n\n    const iframeContentWindow = iframe.contentWindow;\n\n    if (!iframeContentWindow) {\n      iframe.remove();\n      console.error('Print window could not be opened');\n      return;\n    }\n\n    const iframeDocument = iframeContentWindow.document;\n\n    iframeDocument.open();\n    iframeDocument.write(htmlContent);\n    iframeDocument.close();\n\n    setTimeout(() => {\n      iframeContentWindow.focus();\n      iframeContentWindow.print();\n\n      setTimeout(() => {\n        iframe.remove();\n      }, 1000);\n    }, 1500);\n  }\n\n  /**\n   * Returns all stylesheet links and inline style elements from the current\n   * document.\n   */\n  private getDocumentStyles(): string {\n    const stylesheets = document.querySelectorAll(\n      'link[rel=\"stylesheet\"], style',\n    );\n\n    return Array.from(stylesheets)\n      .map((stylesheet) => stylesheet.outerHTML)\n      .join('\\n');\n  }\n}","import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DmCmpsRunOncePipeService {\n  private cache = new Map<string, any>();\n\n  private argsMap = new Map<string, any>();\n\n  generateFunctionKey(func: (...args: any[]) => any, ...args: any[]) {\n    let functionName = func.name;\n    if (functionName.includes('bound')) {\n      functionName = functionName.replace('bound ', '');\n    }\n    const argsString = args\n      .map((arg) => {\n        if (typeof arg === 'object') {\n          return JSON.stringify(arg);\n        } else if (typeof arg === 'function') {\n          return arg.name;\n        } else {\n          return arg;\n        }\n      })\n      .join(':');\n    if (argsString) {\n      functionName = `${functionName}:${argsString}`;\n    }\n    return `${functionName}`;\n  }\n\n  getOrCache(key: string, fn: () => any, args: any[]): any {\n    if (this.cache.has(key) && this.argsMap.has(key)) {\n      const cachedArgs = this.argsMap.get(key);\n      if (JSON.stringify(cachedArgs) == JSON.stringify(args)) {\n        return this.cache.get(key);\n      }\n    }\n    const result = fn();\n    this.cache.set(key, result);\n    this.argsMap.set(key, args);\n    return result;\n  }\n\n  private clearCache(key?: string): void {\n    if (key) {\n      this.cache.delete(key);\n    } else {\n      this.cache.clear();\n    }\n  }\n\n  /**\n   *\n   * @param func - the function that called with the pipe `runOnce`\n   *\n   * @result when you need to trigger the function again, just call `triggerFunction` with the function\n   *\n   * @usageExample\n   *\n   * #### html\n   * ```html\n   * <!-- example without properties -->\n   * <div [innerText]=\"myFucntion.bind(this) | runOnce\"></div>\n   *\n   * <!-- example with properties -->\n   * <div [innerText]=\"myFucntion.bind(this) | runOnce : '1122'\"></div>\n   * ```\n   *\n   * you can define properties as you need\n   *\n   * #### typescript\n   * ```typescript\n   * export class YourComponent {\n   *    constructor(private runOncePipeService: DmCmpsRunOncePipeService) {}\n   *\n   *    myFucntion(prop?: any) {\n   *      let result: any;\n   *      // any logic here\n   *      return result;\n   *    }\n   *\n   *    //this will trigger the function every time its called\n   *    triggerFunction() {\n   *      this.runOncePipeService.triggerFunction(this.myFucntion)\n   *    }\n   * }\n   * ```\n   */\n  triggerFunction(func: (...args: any[]) => any) {\n    const key = this.generateFunctionKey(func);\n    this.clearCache(key);\n  }\n}\n","// import {\n//   Component,\n//   ElementRef,\n//   EventEmitter,\n//   HostListener,\n//   Input,\n//   OnInit,\n//   Output,\n//   ViewChild,\n//   booleanAttribute,\n//   forwardRef,\n// } from '@angular/core';\n// import {\n//   ControlValueAccessor,\n//   FormControl,\n//   NG_VALUE_ACCESSOR,\n//   Validators,\n// } from '@angular/forms';\n// import { MatOptionSelectionChange } from '@angular/material/core';\n// import { MatSlideToggleChange } from '@angular/material/slide-toggle';\n\n// export interface DmSelectItemStyle {\n//   disabled?: boolean;\n//   icon?: string;\n//   icon_color?: string;\n//   color?: string;\n//   background_color?: string;\n//   bold?: boolean;\n//   italic?: boolean;\n//   underline?: boolean;\n//   font_size?: string;\n//   additional_text?: string;\n//   additional_text_color?: string;\n//   additional_text_bold?: boolean;\n//   additional_text_italic?: boolean;\n//   additional_text_underline?: boolean;\n//   additional_text_font_size?: string;\n// }\n\n// export type StyleByOption = Map<any, DmSelectItemStyle>;\n\n// export type DmCmpsSelectOutput = string | string[] | number | number[] | any;\n\n// @Component({\n//   selector: 'dm-cmps-select',\n//   templateUrl: './dm-select.component.html',\n//   styleUrls: ['./dm-select.component.scss'],\n//   providers: [\n//     {\n//       provide: NG_VALUE_ACCESSOR,\n//       useExisting: forwardRef(() => DmSelectComponent),\n//       multi: true,\n//     },\n//   ],\n// })\n// export class DmSelectComponent implements OnInit, ControlValueAccessor {\n//   @Input() formFieldClass: string = '';\n//   @Input() wrapperClass: string = '';\n//   @Input() label: string = '';\n//   @Input() formControl: FormControl | undefined;\n//   @Input() error: string = '';\n//   @Input({ transform: booleanAttribute }) set required(value: boolean) {\n//     if (value) {\n//       this._ctrl.setValidators(Validators.required);\n//       this._ctrl.updateValueAndValidity();\n//     } else {\n//       this._ctrl.clearValidators();\n//       this._ctrl.updateValueAndValidity();\n//     }\n//   }\n//   @Input() placeHolder: string = '';\n//   @Input({ transform: booleanAttribute }) set multiple(value: boolean) {\n//     if (value) {\n//       this._multiple = true;\n//     } else {\n//       this._multiple = false;\n//     }\n//   }\n//   @Input({ transform: booleanAttribute }) set outline(value: boolean) {\n//     if (value) {\n//       this._outline = true;\n//     } else {\n//       this._outline = false;\n//     }\n//   }\n\n//   @Input({ transform: booleanAttribute }) set simpleArray(value: boolean) {\n//     if (value) {\n//       this._simpleArray = true;\n//     } else {\n//       this._simpleArray = false;\n//     }\n//     this.initArrayOptions();\n//   }\n\n//   @Input() set options(value: any[]) {\n//     this._orginalOptions = [...value];\n//     this.initArrayOptions();\n//   }\n//   @Input() optionName: string = 'name';\n//   @Input() optionValue: string = '_id';\n//   @Input() set styleByOption(styleMap: StyleByOption) {\n//     this._styleByOption = styleMap\n//       ? structuredClone(styleMap)\n//       : new Map<any, DmSelectItemStyle>();\n//   }\n//   @Input() searchLabel: string = '';\n//   @Input() panelWidth: number | string = 'auto';\n//   @Input({ transform: booleanAttribute }) set disabled(value: boolean) {\n//     if (value) {\n//       this._disabled = true;\n//     } else {\n//       this._disabled = false;\n//     }\n//     this.setCtrlAbility();\n//   }\n//   @Input() optionNameFormat?: (option: any) => string;\n//   @Input() attrToSearchIn: string[] = [];\n//   @Input() icon: string = '';\n//   @Input({ transform: booleanAttribute }) set sortBySelected(value: boolean) {\n//     if (value) {\n//       this._sortBySelected = true;\n//     } else {\n//       this._sortBySelected = false;\n//     }\n//   }\n\n//   @Input({ transform: booleanAttribute }) set searchable(value: boolean) {\n//     if (value) {\n//       this._searchable = true;\n//       if (!this.panelWidth) this.panelWidth = 350;\n//     } else {\n//       this._searchable = false;\n//     }\n//   }\n\n//   @Input() emptyOption: string = '';\n\n//   @Input({ transform: booleanAttribute }) searchFromFieldAppearance: boolean =\n//     true;\n\n//   @Input({ transform: booleanAttribute }) alignOptionIconToEnd: boolean = false;\n\n//   @Input() set selected(value: DmCmpsSelectOutput) {\n//     this._selected = value;\n//     this.initSelectValue();\n//   }\n\n//   @Input() optionStyle: ((option: any) => DmSelectItemStyle) | undefined;\n\n//   _selected: DmCmpsSelectOutput = '';\n\n//   @Input() set noDataMessage(value: string) {\n//     this._noDataMessage = value;\n//   }\n\n//   @Input({ transform: booleanAttribute }) ignoreSpecialCharacters: boolean =\n//     false;\n\n//   @Input() searchPredicate:\n//     | ((option: any, value: string) => boolean)\n//     | undefined;\n\n//   @Input({ transform: booleanAttribute }) showSelectAll: boolean = false;\n\n//   @Input() selectAllLabel: string = 'בחר הכל';\n\n//   @Input({ transform: booleanAttribute }) returnObject: boolean = false;\n\n//   @Input({ transform: booleanAttribute }) searchInputAutoFocus: boolean = false;\n\n//   @Input({ transform: booleanAttribute })\n//   searchInputAutoFocusOnEnterClick: boolean = false;\n\n//   @Input() ngModel: any;\n//   @Output() ngModelChange: EventEmitter<any> = new EventEmitter();\n\n//   @Output() selectionChange: EventEmitter<DmCmpsSelectOutput> =\n//     new EventEmitter();\n\n//   @ViewChild('searchInput') searchInput: ElementRef | undefined;\n//   @ViewChild('dmCmpsSelect') dmCmpsSelect: ElementRef | undefined;\n\n//   @HostListener('click')\n//   onClick() {\n//     if (this._searchable && this.searchInput && this.searchInputAutoFocus) {\n//       setTimeout(() => {\n//         this.searchInput?.nativeElement.focus();\n//       }, 50);\n//     }\n//   }\n\n//   @HostListener('keydown', ['$event'])\n//   handleKeyboardEvent(event: KeyboardEvent) {\n//     if (\n//       this._searchable &&\n//       this.searchInput &&\n//       this.searchInputAutoFocusOnEnterClick\n//     ) {\n//       if (event.key === 'Enter') {\n//         setTimeout(() => {\n//           this.searchInput?.nativeElement.focus();\n//         }, 50);\n//       }\n//     }\n//   }\n\n//   _simpleArray: boolean = false;\n//   _disabled: boolean = false;\n//   _sortBySelected: boolean = false;\n//   _searchable: boolean = false;\n//   _multiple: boolean = false;\n//   _outline: boolean = false;\n//   _orginalOptions: any[] = [];\n//   _options: any[] = [];\n//   _optionsCopy: any[] = [];\n//   _styleByOption: StyleByOption = new Map<string, DmSelectItemStyle>();\n//   _noDataMessage: string = 'אין נתונים להצגה';\n\n//   _ctrl: FormControl = new FormControl();\n//   _ctrlCopy: FormControl = new FormControl();\n//   _searchControl: FormControl = new FormControl('');\n\n//   set searchCtrlValue(value: string) {\n//     this._searchControl.setValue(value);\n//   }\n\n//   get ctrlCopyValue() {\n//     return this._multiple\n//       ? this._ctrlCopy.value || []\n//       : this._ctrlCopy.value || '';\n//   }\n\n//   set ctrlCopyValue(value: any) {\n//     this._ctrlCopy.setValue(value);\n//   }\n\n//   get ctrlValue() {\n//     return this._multiple ? this._ctrl.value || [] : this._ctrl.value || '';\n//   }\n\n//   set ctrlValue(value: any) {\n//     this._ctrl.setValue(value);\n//   }\n\n//   constructor() {}\n\n//   initArrayOptions() {\n//     if (this._simpleArray) {\n//       this._orginalOptions = this.createOptionsArray(this._orginalOptions);\n//     }\n//     this._options = [...this._orginalOptions];\n//     this._optionsCopy = [...this._orginalOptions];\n//   }\n\n//   writeValue(value: any): void {}\n\n//   registerOnChange(fn: any): void {}\n\n//   registerOnTouched(fn: any): void {}\n\n//   setCtrlAbility() {\n//     if (this._disabled) {\n//       this._ctrl.disable();\n//     } else {\n//       this._ctrl.enable();\n//     }\n//   }\n\n//   initSelectValue() {\n//     if (this._selected !== undefined) {\n//       this.ctrlCopyValue = this._selected;\n//       this.ctrlValue = this._selected;\n//     }\n//   }\n\n//   ngOnInit(): void {\n//     if (this.ngModel) {\n//       this._selected = this.ngModel;\n//       this.initSelectValue();\n//     }\n//     this._ctrl = this.formControl || this._ctrl;\n//     this._ctrlCopy.setValue(this._ctrl.value);\n//     this.setCtrlAbility();\n//     this._searchControl.valueChanges.subscribe((value) => {\n//       if (!value) {\n//         this._options = this._optionsCopy;\n//         return;\n//       }\n//       this.applyFilter(value);\n//     });\n//     this._ctrlCopy.valueChanges.subscribe((value) => {\n//       this.ctrlValue = value;\n//       this.emitOutput();\n//       this.sortOptionsBySelected();\n//     });\n//   }\n\n//   applyFilter(value: string) {\n//     this._options = this._optionsCopy.filter((o) => {\n//       if (this.ignoreSpecialCharacters) {\n//         if (this.searchPredicate) {\n//           return this.searchPredicate(o, value);\n//         } else {\n//           if (this.optionNameFormat) {\n//             return this.getSimpleString(this.optionNameFormat(o))\n//               .toString()\n//               .toLowerCase()\n//               .includes(value.toString().toLowerCase());\n//           } else if (this.attrToSearchIn.length > 0) {\n//             return this.attrToSearchIn.some((attr) =>\n//               this.getSimpleString(o[attr])\n//                 .toString()\n//                 .toLowerCase()\n//                 .includes(value.toString().toLowerCase())\n//             );\n//           } else {\n//             return this.getSimpleString(o[this.optionName])\n//               .toString()\n//               .toLowerCase()\n//               .includes(value.toString().toLowerCase());\n//           }\n//         }\n//         // return this.searchPredicate\n//         //   ? this.searchPredicate(o, value)\n//         //   : (this.optionNameFormat\n//         //       ? this.getSimpleString(this.optionNameFormat(o))\n//         //           .toString()\n//         //           .toLowerCase()\n//         //           .includes(value.toString().toLowerCase())\n//         //       : this.getSimpleString(o[this.optionName])\n//         //           .toString()\n//         //           .toLowerCase()\n//         //           .includes(value.toString().toLowerCase())) ||\n//         //       this.attrToSearchIn.some((attr) =>\n//         //         this.getSimpleString(o[attr])\n//         //           .toString()\n//         //           .toLowerCase()\n//         //           .includes(value.toString().toLowerCase())\n//         //       ) ||\n//         //       (this.optionNameFormat\n//         //         ? this.optionNameFormat(o)\n//         //             .toString()\n//         //             .toLowerCase()\n//         //             .includes(value.toString().toLowerCase())\n//         //         : o[this.optionName]\n//         //             .toString()\n//         //             .toLowerCase()\n//         //             .includes(value.toString().toLowerCase())) ||\n//         //       this.attrToSearchIn.some((attr) =>\n//         //         o[attr]\n//         //           .toString()\n//         //           .toLowerCase()\n//         //           .includes(value.toString().toLowerCase())\n//         //       );\n//       } else {\n//         if (this.searchPredicate) {\n//           return this.searchPredicate(o, value);\n//         } else if (this.optionNameFormat) {\n//           return this.optionNameFormat(o)\n//             .toString()\n//             .toLowerCase()\n//             .includes(value.toString().toLowerCase());\n//         } else if (this.attrToSearchIn.length > 0) {\n//           return this.attrToSearchIn.some((attr) =>\n//             o[attr]\n//               .toString()\n//               .toLowerCase()\n//               .includes(value.toString().toLowerCase())\n//           );\n//         } else {\n//           return o[this.optionName]\n//             .toString()\n//             .toLowerCase()\n//             .includes(value.toString().toLowerCase());\n//         }\n//         // return this.searchPredicate\n//         //   ? this.searchPredicate(o, value)\n//         //   : (this.optionNameFormat\n//         //       ? this.optionNameFormat(o)\n//         //           .toString()\n//         //           .toLowerCase()\n//         //           .includes(value.toString().toLowerCase())\n//         //       : o[this.optionName]\n//         //           .toString()\n//         //           .toLowerCase()\n//         //           .includes(value.toString().toLowerCase())) ||\n//         //       this.attrToSearchIn.some((attr) =>\n//         //         o[attr]\n//         //           .toString()\n//         //           .toLowerCase()\n//         //           .includes(value.toString().toLowerCase())\n//         //       );\n//       }\n//     });\n//   }\n\n//   createOptionsArray(options: any[]) {\n//     return options.map((o) => {\n//       return {\n//         [this.optionName]: o,\n//         [this.optionValue]: o,\n//       };\n//     });\n//   }\n\n//   get checkIfAllSelected() {\n//     return this.ctrlValue.length === this._optionsCopy.length;\n//   }\n\n//   getStyle(option: any): DmSelectItemStyle {\n//     return this._styleByOption.get(option) || {};\n//   }\n\n//   getAdditionalTextStyle(option: any): DmSelectItemStyle {\n//     const style = this.optionStyle\n//       ? this.optionStyle(option)\n//       : this.getStyle(option[this.optionValue]);\n//     if (!style.additional_text) return {};\n//     return style || {};\n//   }\n\n//   getIconStyle(option: any): DmSelectItemStyle | null {\n//     const style = this.optionStyle\n//       ? this.optionStyle(option)\n//       : this.getStyle(option[this.optionValue]);\n//     if (!style?.icon) return null;\n//     return style || null;\n//   }\n\n//   checkIfDisabled(option: any): boolean {\n//     const style = this.optionStyle\n//       ? this.optionStyle(option)\n//       : this.getStyle(option[this.optionValue]);\n//     return style.disabled || false;\n//   }\n\n//   getOptionStyle(option: any): Object {\n//     const style = this.optionStyle\n//       ? this.optionStyle(option)\n//       : this.getStyle(option[this.optionValue]);\n//     return {\n//       color: style?.color || 'none',\n//       'background-color': style?.background_color || 'none',\n//       'font-size': style?.font_size || 'none',\n//       'font-weight': style?.bold ? 'bold' : 'normal',\n//       'font-style': style?.italic ? 'italic' : 'normal',\n//       'text-decoration': style?.underline ? 'underline' : 'none',\n//     };\n//   }\n\n//   onSelectAll(event: MatSlideToggleChange) {\n//     this.ctrlCopyValue = event.checked\n//       ? this._optionsCopy.map((o) => o[this.optionValue])\n//       : [];\n//     this.searchCtrlValue = '';\n//     if (this.ngModel) {\n//       this.ngModel = this.ctrlCopyValue;\n//       this.ngModelChange.emit(this.ngModel);\n//     }\n//   }\n\n//   onSelectionChanged(event: MatOptionSelectionChange, option: any) {\n//     if (event.isUserInput) {\n//       this.searchCtrlValue = '';\n//       if (this._multiple) {\n//         if (event.source.selected) {\n//           if (!this.ctrlCopyValue.includes(option[this.optionValue])) {\n//             const value = [...this.ctrlCopyValue, option[this.optionValue]];\n//             this.ctrlCopyValue = value;\n//           }\n//         } else {\n//           const value = structuredClone(this.ctrlCopyValue).filter(\n//             (v: any) => v !== option[this.optionValue]\n//           );\n//           this.ctrlCopyValue = value;\n//         }\n//       } else {\n//         this.ctrlCopyValue = option[this.optionValue];\n//       }\n//       if (this.ngModel) {\n//         this.ngModel = this.ctrlCopyValue;\n//         this.ngModelChange.emit(this.ngModel);\n//       }\n//     }\n//   }\n\n//   onEmptyOptionSelected(event: MatOptionSelectionChange) {\n//     if (this._multiple) return;\n//     if (event.isUserInput) {\n//       this.ctrlCopyValue = '';\n//     }\n//     if (this.ngModel) {\n//       this.ngModel = this.ctrlCopyValue;\n//       this.ngModelChange.emit(this.ngModel);\n//     }\n//   }\n\n//   sortOptionsBySelected() {\n//     if (this._sortBySelected && this._multiple) {\n//       this._options.sort((a, b) => {\n//         if (this.ctrlCopyValue.includes(a[this.optionValue])) {\n//           return -1;\n//         }\n//         if (this.ctrlCopyValue.includes(b[this.optionValue])) {\n//           return 1;\n//         }\n//         return 0;\n//       });\n//     }\n//   }\n\n//   emitOutput() {\n//     if (!this.returnObject) {\n//       this.selectionChange.emit(this.ctrlCopyValue);\n//       return;\n//     } else {\n//       if (this._multiple) {\n//         this.selectionChange.emit(\n//           this._optionsCopy.filter((o) =>\n//             this.ctrlCopyValue.includes(o[this.optionValue])\n//           )\n//         );\n//       } else {\n//         this.selectionChange.emit(\n//           this._optionsCopy.find(\n//             (o) => o[this.optionValue] == this.ctrlCopyValue\n//           )\n//         );\n//       }\n//     }\n//   }\n\n//   private getSimpleString(value: string): string {\n//     let str = value;\n//     str = str.replace(/أ/g, 'ا');\n//     str = str.replace(/إ/g, 'ا');\n//     str = str.replace(/آ/g, 'ا');\n//     str = str.replace(/لإ/g, 'لا');\n//     str = str.replace(/لأ/g, 'لا');\n//     str = str.replace(/لآ/g, 'لا');\n//     str = str.replace(/ى/g, 'ي');\n//     str = str.replace(/ّ/g, '');\n//     str = str.replace(/َ/g, '');\n//     str = str.replace(/ً/g, '');\n//     str = str.replace(/ُ/g, '');\n//     str = str.replace(/ٌ/g, '');\n//     str = str.replace(/ِ/g, '');\n//     str = str.replace(/ٍ/g, '');\n//     str = str.replace(/ْ/g, '');\n//     return str;\n//   }\n// }\nimport {\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  HostListener,\n  Input,\n  OnInit,\n  Output,\n  ViewChild,\n  booleanAttribute,\n  forwardRef,\n} from '@angular/core';\nimport {\n  ControlValueAccessor,\n  FormControl,\n  NG_VALUE_ACCESSOR,\n  Validators,\n} from '@angular/forms';\nimport { MatOptionSelectionChange } from '@angular/material/core';\nimport { MatSlideToggleChange } from '@angular/material/slide-toggle';\n\nexport interface DmSelectOptionStyle {\n  disabled?: boolean;\n  icon?: string;\n  icon_color?: string;\n  color?: string;\n  background_color?: string;\n  bold?: boolean;\n  italic?: boolean;\n  underline?: boolean;\n  font_size?: string;\n  additional_text?: string;\n  additional_text_color?: string;\n  additional_text_bold?: boolean;\n  additional_text_italic?: boolean;\n  additional_text_underline?: boolean;\n  additional_text_font_size?: string;\n}\n\nexport type StyleByOption = Map<any, DmSelectOptionStyle>;\n\nexport type DmCmpsSelectOutput = string | string[] | number | number[] | any;\n\n@Component({\n  selector: 'dm-cmps-select',\n  templateUrl: './dm-select.component.html',\n  styleUrls: ['./dm-select.component.scss'],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DmSelectComponent),\n      multi: true,\n    },\n  ],\n})\nexport class DmSelectComponent implements OnInit, ControlValueAccessor {\n  @Input() formFieldClass: string = '';\n  @Input() wrapperClass: string = '';\n  @Input() label: string = '';\n  @Input() formControl: FormControl | undefined;\n  @Input() error: string = '';\n  @Input({ transform: booleanAttribute }) set required(value: boolean) {\n    if (value) {\n      this._ctrl.setValidators(Validators.required);\n      this._ctrl.updateValueAndValidity();\n    } else {\n      this._ctrl.clearValidators();\n      this._ctrl.updateValueAndValidity();\n    }\n  }\n  @Input() placeHolder: string = '';\n  @Input({ transform: booleanAttribute }) set multiple(value: boolean) {\n    if (value) {\n      this._multiple = true;\n    } else {\n      this._multiple = false;\n    }\n  }\n  @Input({ transform: booleanAttribute }) set outline(value: boolean) {\n    if (value) {\n      this._outline = true;\n    } else {\n      this._outline = false;\n    }\n  }\n\n  @Input({ transform: booleanAttribute }) set simpleArray(value: boolean) {\n    if (value) {\n      this._simpleArray = true;\n    } else {\n      this._simpleArray = false;\n    }\n    this.initArrayOptions();\n  }\n\n  @Input({ transform: booleanAttribute }) emptyOption: boolean = false;\n  @Input() emptyOptionLabel: string = 'ללא';\n  @Input() emptyOptionValue: any = null;\n\n  @Input() set options(value: any[]) {\n    this._orginalOptions = [...value];\n    this.initArrayOptions();\n  }\n  @Input() optionName: string = 'name';\n  @Input() optionValue: string = '_id';\n  @Input() set styleByOption(styleMap: StyleByOption) {\n    this._styleByOption = styleMap\n      ? structuredClone(styleMap)\n      : new Map<any, DmSelectOptionStyle>();\n  }\n  @Input() searchLabel: string = 'חפש';\n  @Input() panelWidth: number | string | undefined;\n\n  @HostBinding('style.--dm-cmps-select-panel-width')\n  get _panelWidth() {\n    const result = this.panelWidth\n      ? typeof this.panelWidth === 'number'\n        ? `${this.panelWidth}px`\n        : this.panelWidth\n      : '';\n    return result;\n  }\n\n  @Input() panelClass: string = '';\n  @Input({ transform: booleanAttribute }) set disabled(value: boolean) {\n    if (value) {\n      this._disabled = true;\n    } else {\n      this._disabled = false;\n    }\n    this.setCtrlAbility();\n  }\n  @Input() optionNameFormat?: (option: any) => string;\n  @Input() attrToSearchIn: string[] = [];\n  @Input() icon: string = '';\n  @Input({ transform: booleanAttribute }) set sortBySelected(value: boolean) {\n    if (value) {\n      this._sortBySelected = true;\n    } else {\n      this._sortBySelected = false;\n    }\n  }\n\n  @Input({ transform: booleanAttribute }) focusSearchInputOnApear: boolean =\n    false;\n  @Input({ transform: booleanAttribute }) set searchable(value: boolean) {\n    if (value) {\n      this._searchable = true;\n      // if (!this.panelWidth) this.panelWidth = 350;\n    } else {\n      this._searchable = false;\n    }\n  }\n\n  @Input() set filterPredicate(\n    predicate: (data: any, value: string) => boolean\n  ) {\n    this._filterPredicate = predicate;\n  }\n\n  @Input({ transform: booleanAttribute }) alignOptionIconToEnd: boolean = false;\n\n  @Input() set noDataMessage(text: string) {\n    this._noDataMessage = text;\n  }\n\n  @Input() set selected(value: DmCmpsSelectOutput) {\n    this._selected = value;\n    this.initSelectValue();\n  }\n\n  @Input({ transform: booleanAttribute }) set ignoreSpecialChars(\n    value: boolean\n  ) {\n    if (value) {\n      this._ignoreSpecialChars = true;\n    } else {\n      this._ignoreSpecialChars = false;\n    }\n  }\n\n  @Input() selectAllLabel: string = 'בחר הכל';\n  @Input({ transform: booleanAttribute }) showSelectAll: boolean = false;\n  @Input({ transform: booleanAttribute }) clearSearchOnSelect: boolean = true;\n  @Input() optionStyle: ((element: any) => DmSelectOptionStyle) | undefined;\n\n  _selected: DmCmpsSelectOutput = '';\n\n  @Input() optionsDirection: 'ltr' | 'rtl' = 'rtl';\n\n  @Input() ngModel: any;\n  @Output() ngModelChange: EventEmitter<any> = new EventEmitter();\n\n  @Input() value: any;\n  @Output() valueChange: EventEmitter<any> = new EventEmitter();\n\n  @Input({ transform: booleanAttribute }) set returnObject(value: boolean) {\n    if (value) {\n      this._returnObject = true;\n    }\n  }\n\n  @Input() selectTriggerDirection: 'ltr' | 'rtl' = 'rtl';\n\n  @Input() colorizeNameBy: string = '';\n\n  @Output() selectionChange: EventEmitter<DmCmpsSelectOutput> =\n    new EventEmitter();\n\n  @ViewChild('searchInput') searchInput: ElementRef | undefined;\n\n  @HostBinding('style.--select-trigger-direction')\n  get _selectTriggerDirection() {\n    return this.selectTriggerDirection || 'rtl';\n  }\n\n  @HostListener('click')\n  onClick(target: HTMLElement) {\n    this.focusSearchInput();\n  }\n\n  @HostListener('keydown')\n  onEnterPress(event: KeyboardEvent) {\n    if (this.focusSearchInputOnApear) this.focusSearchInput();\n  }\n\n  private focusSearchInput(): void {\n    if (this._searchable && this.searchInput) {\n      setTimeout(() => {\n        this.searchInput?.nativeElement.focus();\n      }, 50);\n    }\n  }\n\n  _filterPredicate: ((data: any, value: string) => boolean) | undefined;\n  _simpleArray: boolean = false;\n  _disabled: boolean = false;\n  _sortBySelected: boolean = false;\n  _searchable: boolean = false;\n  _multiple: boolean = false;\n  _outline: boolean = false;\n  _orginalOptions: any[] = [];\n  _options: any[] = [];\n  _optionsCopy: any[] = [];\n  _styleByOption: StyleByOption = new Map<string, DmSelectOptionStyle>();\n  _noDataMessage: string = 'אין נתונים להצגה';\n  _ignoreSpecialChars: boolean = false;\n  _returnObject: boolean = false;\n\n  _ctrl: FormControl = new FormControl();\n  _ctrlCopy: FormControl = new FormControl();\n  _searchControl: FormControl = new FormControl('');\n\n  set searchCtrlValue(value: string) {\n    this._searchControl.setValue(value);\n  }\n\n  get ctrlCopyValue() {\n    return this._multiple\n      ? this._ctrlCopy.value || []\n      : this._ctrlCopy.value || '';\n  }\n\n  set ctrlCopyValue(value: any) {\n    this._ctrlCopy.setValue(value);\n  }\n\n  get ctrlValue() {\n    return this._multiple ? this._ctrl.value || [] : this._ctrl.value || '';\n  }\n\n  set ctrlValue(value: any) {\n    this._ctrl.setValue(value);\n  }\n\n  constructor() {}\n\n  initArrayOptions() {\n    if (this._simpleArray) {\n      this._orginalOptions = this.createOptionsArray(this._orginalOptions);\n    }\n    this._options = [...this._orginalOptions];\n    this._optionsCopy = [...this._orginalOptions];\n  }\n\n  writeValue(value: any): void {}\n\n  registerOnChange(fn: any): void {}\n\n  registerOnTouched(fn: any): void {}\n\n  setCtrlAbility() {\n    if (this._disabled) {\n      this._ctrl.disable();\n    } else {\n      this._ctrl.enable();\n    }\n  }\n\n  initSelectValue() {\n    if (this.ngModel !== undefined) {\n      if (this._returnObject) {\n        this.ctrlCopyValue = this._optionsCopy.find(\n          (o) => o[this.optionValue] === this.ngModel\n        );\n        this.ctrlValue = this.ctrlCopyValue;\n      } else {\n        this.ctrlCopyValue = this.ngModel;\n        this.ctrlValue = this.ngModel;\n      }\n    }\n    if (this.value !== undefined) {\n      if (this._returnObject) {\n        this.ctrlCopyValue = this._optionsCopy.find(\n          (o) => o[this.optionValue] === this.value\n        );\n        this.ctrlValue = this.ctrlCopyValue;\n      } else {\n        this.ctrlCopyValue = this.value;\n        this.ctrlValue = this.value;\n      }\n    }\n    if (this._selected !== undefined) {\n      if (this._returnObject) {\n        this.ctrlCopyValue = this._optionsCopy.find(\n          (o) => o[this.optionValue] === this._selected\n        );\n        this.ctrlValue = this.ctrlCopyValue;\n      } else {\n        this.ctrlCopyValue = this._selected;\n        this.ctrlValue = this._selected;\n      }\n    }\n    this.sortOptionsBySelected();\n  }\n\n  ngOnInit(): void {\n    this._ctrl = this.formControl || this._ctrl;\n    this._ctrlCopy.setValue(this._ctrl.value);\n    this.setCtrlAbility();\n    this._searchControl.valueChanges.subscribe((value) => {\n      if (!value) {\n        this._options = this._optionsCopy;\n        return;\n      }\n      this.applyFilter(value);\n    });\n    this._ctrlCopy.valueChanges.subscribe((value) => {\n      this.ctrlValue = value;\n      this.emitOutput();\n      this.sortOptionsBySelected();\n    });\n    this.sortOptionsBySelected();\n  }\n\n  applyFilter(value: string) {\n    if (this._filterPredicate) {\n      this._options = this._optionsCopy.filter((element) => {\n        return this._filterPredicate\n          ? this._filterPredicate(element, value)\n          : true;\n      });\n      return;\n    }\n    this._options = this._optionsCopy.filter((o) => {\n      if (this._ignoreSpecialChars) {\n        return (\n          (this.optionNameFormat\n            ? this.optionNameFormat(o)\n                .toString()\n                .toLowerCase()\n                .includes(value.toString().toLowerCase()) ||\n              this.getSimpleString(this.optionNameFormat(o))\n                .toString()\n                .toLowerCase()\n                .includes(value.toString().toLowerCase())\n            : o[this.optionName]\n                .toString()\n                .toLowerCase()\n                .includes(value.toString().toLowerCase()) ||\n              this.getSimpleString(o[this.optionName])\n                .toString()\n                .toLowerCase()\n                .includes(value.toString().toLowerCase())) ||\n          this.attrToSearchIn.some((attr) => {\n            return this.getSimpleString(o[attr])\n              .toString()\n              .toLowerCase()\n              .includes(value.toString().toLowerCase());\n          })\n        );\n      } else {\n        return (\n          (this.optionNameFormat\n            ? this.optionNameFormat(o)\n                .toString()\n                .toLowerCase()\n                .includes(value.toString().toLowerCase())\n            : o[this.optionName]\n                .toString()\n                .toLowerCase()\n                .includes(value.toString().toLowerCase())) ||\n          this.attrToSearchIn.some((attr) =>\n            o[attr]\n              .toString()\n              .toLowerCase()\n              .includes(value.toString().toLowerCase())\n          )\n        );\n      }\n    });\n  }\n\n  createOptionsArray(options: any[]) {\n    return options.map((o) => {\n      return {\n        [this.optionName]: o,\n        [this.optionValue]: o,\n      };\n    });\n  }\n\n  get checkIfAllSelected() {\n    return (\n      this.ctrlValue.length === this._options.length && this._options.length > 0\n    );\n  }\n\n  getOptionStyle(option: any): any {\n    const style = this.getStyle(option) || {};\n    return {\n      'background-color': style.background_color || 'none',\n      color: style.color || 'none',\n      'font-weight': style.bold ? 'bold' : 'none',\n      'font-style': style.italic ? 'italic' : 'none',\n      'text-decoration': style.underline ? 'underline' : 'none',\n      'font-size': style.font_size ? style.font_size : 'none',\n    };\n  }\n  isOptionDisabled(option: any): boolean {\n    return this.getStyle(option)?.disabled || false;\n  }\n\n  getStyle(option: any): DmSelectOptionStyle | null {\n    return this.optionStyle\n      ? this.optionStyle(option)\n      : this._styleByOption.get(option[this.optionValue]) || null;\n  }\n\n  getAdditionalTextStyle(option: any): DmSelectOptionStyle | null {\n    const style = this.getStyle(option);\n    if (!style?.additional_text) return null;\n    return style || null;\n  }\n\n  getIconStyle(option: any): DmSelectOptionStyle | null {\n    const style = this.getStyle(option);\n    if (!style?.icon) return null;\n    return style || null;\n  }\n\n  onSelectAll(event: MatSlideToggleChange) {\n    this.ctrlCopyValue = event.checked\n      ? this._options.map((o) => o[this.optionValue])\n      : [];\n    if (this.clearSearchOnSelect) {\n      this.searchCtrlValue = '';\n    }\n    this.sortOptionsBySelected();\n  }\n\n  getEmptyOptionObject() {\n    return {\n      [this.optionValue]: this.emptyOptionValue,\n    };\n  }\n\n  onSelectionChanged(event: MatOptionSelectionChange, option: any) {\n    if (event.isUserInput) {\n      if (this.clearSearchOnSelect) {\n        this.searchCtrlValue = '';\n      }\n      if (this._multiple) {\n        if (event.source.selected) {\n          if (!this.ctrlCopyValue.includes(option[this.optionValue])) {\n            const value = [...this.ctrlCopyValue, option[this.optionValue]];\n            this.ctrlCopyValue = value;\n          }\n        } else {\n          const value = structuredClone(this.ctrlCopyValue).filter(\n            (v: any) => v !== option[this.optionValue]\n          );\n          this.ctrlCopyValue = value;\n        }\n      } else {\n        this.ctrlCopyValue = option[this.optionValue];\n      }\n    }\n  }\n\n  sortOptionsBySelected() {\n    if (this._sortBySelected && this._multiple) {\n      this._options.sort((a, b) => {\n        if (this.ctrlCopyValue.includes(a[this.optionValue])) {\n          return -1;\n        }\n        if (this.ctrlCopyValue.includes(b[this.optionValue])) {\n          return 1;\n        }\n        return 0;\n      });\n    }\n  }\n\n  emitOutput() {\n    if (this._returnObject) {\n      const result = this._multiple\n        ? this._optionsCopy.filter((o) =>\n            this.ctrlCopyValue.includes(o[this.optionValue])\n          )\n        : this._optionsCopy.find(\n            (o) => o[this.optionValue] === this.ctrlCopyValue\n          );\n      this.selectionChange.emit(result);\n      if (this.ngModel) {\n        this.ngModel = result;\n        this.ngModelChange.emit(this.ngModel);\n      }\n      if (this.value !== undefined) {\n        this.value = result;\n        this.valueChange.emit(this.value);\n      }\n      return;\n    }\n    this.selectionChange.emit(this.ctrlCopyValue);\n    if (this.ngModel) {\n      this.ngModel = this.ctrlCopyValue;\n      this.ngModelChange.emit(this.ngModel);\n    }\n    if (this.value !== undefined) {\n      this.value = this.ctrlCopyValue;\n      this.valueChange.emit(this.value);\n    }\n  }\n\n  private getSimpleString(value: string): string {\n    let str = value;\n    str = str.replace(/أ/g, 'ا');\n    str = str.replace(/إ/g, 'ا');\n    str = str.replace(/آ/g, 'ا');\n    str = str.replace(/لإ/g, 'لا');\n    str = str.replace(/لأ/g, 'لا');\n    str = str.replace(/لآ/g, 'لا');\n    str = str.replace(/ى/g, 'ي');\n    str = str.replace(/ّ/g, '');\n    str = str.replace(/َ/g, '');\n    str = str.replace(/ً/g, '');\n    str = str.replace(/ُ/g, '');\n    str = str.replace(/ٌ/g, '');\n    str = str.replace(/ِ/g, '');\n    str = str.replace(/ٍ/g, '');\n    str = str.replace(/ْ/g, '');\n    return str;\n  }\n}\n","<!-- <div class=\"dm-cmps-select-wrapper {{ wrapperClass }}\">\n  <mat-form-field\n    [appearance]=\"_outline ? 'outline' : 'fill'\"\n    class=\"w-100 {{ formFieldClass }}\"\n  >\n    <mat-label>{{ label }}</mat-label>\n    <mat-select\n      [panelWidth]=\"panelWidth ? panelWidth : 'auto'\"\n      [formControl]=\"_ctrl\"\n      [multiple]=\"_multiple\"\n      [placeholder]=\"placeHolder\"\n      (blur)=\"_searchControl.setValue('')\"\n      [panelClass]=\"'dm-cmps-select-panel-class'\"\n      #dmCmpsSelect\n    >\n      <div\n        *ngIf=\"_searchable || (_multiple && showSelectAll)\"\n        class=\"d-flex justify-content-start align-items-center sticky-top ps-2 pe-2 dm-cmps-select-search-section\"\n      >\n        <mat-form-field\n          class=\"dm-cmps-select-search-field\"\n          [appearance]=\"searchFromFieldAppearance ? 'outline' : 'fill'\"\n          *ngIf=\"_searchable\"\n        >\n          <mat-label>{{ searchLabel || \"חיפוש\" }}</mat-label>\n          <input\n            matInput\n            #searchInput\n            type=\"text\"\n            placeholder=\"{{ searchLabel || 'חפש...' }}\"\n            aria-label=\"חפש...\"\n            aria-describedby=\"חיפוש\"\n            [formControl]=\"_searchControl\"\n            (keyDown.Space)=\"$event.stopPropagation()\"\n          />\n          <button\n            mat-icon-button\n            matSuffix\n            (click)=\"_searchControl.setValue('')\"\n            matTooltip=\"נקה חיפוש\"\n            matTooltipPosition=\"above\"\n            *ngIf=\"_searchControl.value\"\n          >\n            <mat-icon>cancel</mat-icon>\n          </button>\n        </mat-form-field>\n        <mat-slide-toggle\n          class=\"select-all-slide-toggle\"\n          (change)=\"onSelectAll($event)\"\n          [checked]=\"checkIfAllSelected\"\n          color=\"primary\"\n          *ngIf=\"_multiple && showSelectAll\"\n        >\n          {{ selectAllLabel }}\n        </mat-slide-toggle>\n      </div>\n      <mat-option\n        *ngIf=\"!_multiple && emptyOption\"\n        (onSelectionChange)=\"onEmptyOptionSelected($event)\"\n        >{{ emptyOption }}</mat-option\n      >\n      <mat-option\n        *ngFor=\"let option of _options\"\n        (onSelectionChange)=\"onSelectionChanged($event, option)\"\n        [ngStyle]=\"getOptionStyle(option)\"\n        [value]=\"option[optionValue]\"\n        [disabled]=\"checkIfDisabled(option)\"\n      >\n        <div class=\"d-flex align-items-center\">\n          <ng-container *ngIf=\"alignOptionIconToEnd; else reversedView\">\n            <ng-container *ngTemplateOutlet=\"optionNameTemplate\" />\n            <ng-container *ngTemplateOutlet=\"additionalTextTemplate\" />\n            <ng-container *ngTemplateOutlet=\"optionIconTemplate\" />\n          </ng-container>\n          <ng-template #reversedView>\n            <ng-container *ngTemplateOutlet=\"optionIconTemplate\" />\n            <ng-container *ngTemplateOutlet=\"optionNameTemplate\" />\n            <ng-container *ngTemplateOutlet=\"additionalTextTemplate\" />\n          </ng-template>\n\n          <ng-template #additionalTextTemplate>\n            <span\n              *ngIf=\"getAdditionalTextStyle(option) as additionalTextStyle\"\n              class=\"ms-1 me-1\"\n              [ngStyle]=\"\n                {\n                    color: additionalTextStyle.additional_text_color || 'none',\n                    'font-weight': additionalTextStyle.additional_text_bold ? 'bold' : 'none',\n                    'font-style': additionalTextStyle.additional_text_italic ? 'italic' : 'none',\n                    'text-decoration': additionalTextStyle.additional_text_underline ? 'underline' : 'none',\n                    'font-size': additionalTextStyle.additional_text_font_size ? additionalTextStyle.additional_text_font_size : 'none',\n                }\"\n              >{{ additionalTextStyle.additional_text }}</span\n            >\n          </ng-template>\n          <ng-template #optionNameTemplate>\n            <span>\n              {{\n                optionNameFormat ? optionNameFormat(option) : option[optionName]\n              }}\n            </span>\n          </ng-template>\n          <ng-template #optionIconTemplate>\n            <mat-icon\n              *ngIf=\"getIconStyle(option) as iconStyle\"\n              [ngStyle]=\"\n                iconStyle.icon_color ? { color: iconStyle.icon_color } : {}\n              \"\n              >{{ iconStyle.icon }}</mat-icon\n            >\n          </ng-template>\n        </div>\n      </mat-option>\n      <mat-option\n        *ngIf=\"_options.length === 0\"\n        [disabled]=\"true\"\n        [value]=\"null\"\n      >\n        {{ _noDataMessage }}\n      </mat-option>\n    </mat-select>\n    <mat-icon *ngIf=\"icon\" matSuffix>{{ icon }}</mat-icon>\n    <ng-container matSuffix>\n      <ng-content select=\"[suffix]\"></ng-content>\n    </ng-container>\n    <mat-error> {{ error }} </mat-error>\n  </mat-form-field>\n</div> -->\n\n<div class=\"dm-cmps-select-wrapper {{ wrapperClass }}\">\n  <mat-form-field\n    [appearance]=\"_outline ? 'outline' : 'fill'\"\n    class=\"w-100 {{ formFieldClass }}\"\n  >\n    <mat-label>{{ label }}</mat-label>\n    <mat-select\n      [panelClass]=\"panelWidth ? 'dm-cmps-select-panel-width' : ''\"\n      [formControl]=\"_ctrl\"\n      [multiple]=\"_multiple\"\n      [placeholder]=\"placeHolder\"\n      (blur)=\"_options.length == 0 ? _searchControl.setValue('') : ''\"\n    >\n      <div\n        class=\"d-flex justify-content-start align-items-center sticky-top ps-2 pe-2 searchSection\"\n      >\n        <mat-form-field\n          appearance=\"outline\"\n          class=\"dm-cmps-select-search-field\"\n          *ngIf=\"_searchable\"\n        >\n          <mat-label>{{ searchLabel }}</mat-label>\n\n          <input\n            #searchInput\n            matInput\n            placeholder=\"{{ searchLabel + '...' }}\"\n            type=\"text\"\n            [formControl]=\"_searchControl\"\n            (keyDown.Space)=\"$event.stopPropagation()\"\n          />\n          <!-- <input matInput *ngIf=\"_searchable\" type=\"text\" class=\"form-control form-control-lg searchInput\"\n                        placeholder=\"{{ searchLabel || 'חפש...' }}\" aria-label=\"חפש...\" aria-describedby=\"חיפוש\"\n                        [formControl]=\"_searchControl\" (keyDown.Space)=\"$event.stopPropagation()\" /> -->\n          <mat-icon\n            matSuffix\n            class=\"icon24 pointer\"\n            *ngIf=\"_searchControl.value\"\n            (click)=\"_searchControl.setValue('')\"\n            matTooltip=\"{{ 'נקה חיפוש' }}\"\n            matTooltipPosition=\"above\"\n          >\n            cancel\n          </mat-icon>\n        </mat-form-field>\n        <!-- <span class=\"input-group-text p-0\" id=\"basic-addon2\" *ngIf=\"_searchable\"><button mat-icon-button\n                            matSuffix (click)=\"_searchControl.setValue('')\" matTooltip=\"נקה חיפוש\"\n                            matTooltipPosition=\"above\">\n                            <mat-icon>cancel</mat-icon>\n                        </button></span> -->\n        <span\n          class=\"d-flex align-items-center pt-0 pm-0 dm-select-selectall-slide-toggle\"\n          id=\"basic-addon2\"\n          *ngIf=\"_multiple && showSelectAll\"\n        >\n          <mat-slide-toggle\n            (change)=\"onSelectAll($event)\"\n            color=\"primary\"\n            [checked]=\"checkIfAllSelected\"\n          >\n            {{ selectAllLabel }}\n          </mat-slide-toggle>\n          <!-- <mat-checkbox (change)=\"onSelectAll($event)\" [checked]=\"checkIfAllSelected\">בחר\n                            הכל</mat-checkbox> -->\n        </span>\n      </div>\n      <mat-option\n        *ngIf=\"emptyOption\"\n        (onSelectionChange)=\"onSelectionChanged($event, getEmptyOptionObject())\"\n        [value]=\"emptyOptionValue\"\n        >{{ emptyOptionLabel }}</mat-option\n      >\n      <mat-option\n        *ngFor=\"let option of _options\"\n        (onSelectionChange)=\"onSelectionChanged($event, option)\"\n        [ngStyle]=\"getOptionStyle(option)\"\n        [value]=\"option[optionValue]\"\n        [disabled]=\"isOptionDisabled(option)\"\n        [dir]=\"optionsDirection\"\n      >\n        <div class=\"d-flex align-items-center\">\n          <ng-container *ngIf=\"alignOptionIconToEnd; else reversedView\">\n            <ng-container *ngTemplateOutlet=\"optionNameTemplate\"></ng-container>\n            <ng-container\n              *ngTemplateOutlet=\"additionalTextTemplate\"\n            ></ng-container>\n            <ng-container *ngTemplateOutlet=\"optionIconTemplate\"></ng-container>\n          </ng-container>\n          <ng-template #reversedView>\n            <ng-container *ngTemplateOutlet=\"optionIconTemplate\"></ng-container>\n            <ng-container *ngTemplateOutlet=\"optionNameTemplate\"></ng-container>\n            <ng-container\n              *ngTemplateOutlet=\"additionalTextTemplate\"\n            ></ng-container>\n          </ng-template>\n\n          <ng-template #additionalTextTemplate>\n            <span\n              *ngIf=\"getAdditionalTextStyle(option) as additionalTextStyle\"\n              class=\"ms-1 me-1\"\n              [ngStyle]=\"{\n                color: additionalTextStyle.additional_text_color || 'none',\n                'font-weight': additionalTextStyle.additional_text_bold\n                  ? 'bold'\n                  : 'none',\n                'font-style': additionalTextStyle.additional_text_italic\n                  ? 'italic'\n                  : 'none',\n                'text-decoration': additionalTextStyle.additional_text_underline\n                  ? 'underline'\n                  : 'none',\n                'font-size':\n                  additionalTextStyle.additional_text_font_size || 'none',\n                'white-space': 'pre'\n              }\"\n              >{{ additionalTextStyle.additional_text }}</span\n            >\n          </ng-template>\n          <ng-template #optionNameTemplate>\n            <span\n              *ngIf=\"\n                optionNameFormat\n                  ? optionNameFormat(option)\n                  : option[optionName] as optionName\n              \"\n            >\n              <span *ngIf=\"!colorizeNameBy\">\n                {{ optionName }}\n              </span>\n              <span *ngIf=\"colorizeNameBy\">\n                <ul\n                  class=\"list-unstyled d-flex align-items-center colorized-ul\"\n                >\n                  <li\n                    *ngFor=\"\n                      let namePart of optionName.split(colorizeNameBy);\n                      let i = index\n                    \"\n                  >\n                    <span>{{ namePart.trim() }}</span>\n                    <span\n                      *ngIf=\"i < optionName.split(colorizeNameBy).length - 1\"\n                      >&nbsp;{{ colorizeNameBy }}&nbsp;</span\n                    >\n                  </li>\n                </ul>\n              </span>\n            </span>\n          </ng-template>\n          <ng-template #optionIconTemplate>\n            <mat-icon\n              *ngIf=\"getIconStyle(option) as iconStyle\"\n              [ngStyle]=\"\n                iconStyle.icon_color ? { color: iconStyle.icon_color } : {}\n              \"\n              >{{ iconStyle.icon }}</mat-icon\n            >\n          </ng-template>\n        </div>\n      </mat-option>\n      <mat-option\n        *ngIf=\"_options.length === 0\"\n        [disabled]=\"true\"\n        [dir]=\"optionsDirection\"\n      >\n        {{ _noDataMessage }}\n      </mat-option>\n    </mat-select>\n    <mat-icon *ngIf=\"icon\" matSuffix>{{ icon }}</mat-icon>\n    <ng-container matSuffix>\n      <ng-content select=\"[suffix]\"></ng-content>\n    </ng-container>\n    <mat-error> {{ error }} </mat-error>\n  </mat-form-field>\n</div>\n","import {\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  ViewChild,\n  booleanAttribute,\n  forwardRef,\n  numberAttribute,\n} from '@angular/core';\nimport {\n  ControlValueAccessor,\n  FormControl,\n  NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { DmCmpsDateService } from './dm-cmps-date.service';\nimport {\n  MatDatepicker,\n  MatDatepickerInputEvent,\n} from '@angular/material/datepicker';\nimport { TooltipPosition } from '@angular/material/tooltip';\n\nexport type InputType =\n  | 'text'\n  | 'number'\n  | 'password'\n  | 'email'\n  | 'tel'\n  | 'url'\n  | 'date';\n\nexport type DatepickerStartView = 'month' | 'year' | 'multi-year';\n\n@Component({\n  selector: 'dm-cmps-input',\n  templateUrl: './dm-cmps-input.component.html',\n  styleUrls: ['./dm-cmps-input.component.scss'],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DmCmpsInputComponent),\n      multi: true,\n    },\n  ],\n})\nexport class DmCmpsInputComponent implements OnInit, ControlValueAccessor {\n  @ViewChild(MatDatepicker) picker: MatDatepicker<any> | undefined;\n  @Output() change: EventEmitter<Event> = new EventEmitter();\n  @Output() input: EventEmitter<Event> = new EventEmitter();\n  @Output() focus: EventEmitter<Event> = new EventEmitter();\n  @Output() blur: EventEmitter<Event> = new EventEmitter();\n  @Output() keydown: EventEmitter<KeyboardEvent> = new EventEmitter();\n  @Output() dateChange: EventEmitter<MatDatepickerInputEvent<any>> =\n    new EventEmitter();\n  @Output() keyup: EventEmitter<KeyboardEvent> = new EventEmitter();\n\n  @Input() label: string = '';\n  @Input({ transform: booleanAttribute }) set outline(value: boolean) {\n    this._outline = value;\n  }\n  @Input() placeHolder: string = '';\n  @Input() type: InputType = 'text';\n  @Input({ transform: booleanAttribute }) set showHidePasswordButton(\n    value: boolean\n  ) {\n    if (this.isPasswordType) {\n      this._showHidePasswordButton = value;\n    } else {\n      this._showHidePasswordButton = false;\n    }\n  }\n  @Input() showPasswordTooltip: string = 'הצג סיסמה';\n  @Input() hidePasswordTooltip: string = 'הסתר סיסמה';\n  @Input() showHidePasswordButtonTooltipPosition: TooltipPosition = 'above';\n  @Input() disabled: boolean = false;\n  @Input({ transform: booleanAttribute }) required: boolean = false;\n  @Input() error: string = '';\n  @Input() formControl: FormControl | undefined;\n  @Input() icon: string = '';\n  @Input({ transform: numberAttribute }) min?: number;\n  @Input({ transform: numberAttribute }) max?: number;\n  @Input() datePickerStartView: DatepickerStartView = 'month';\n  @Input() datePickerStartAt: Date | undefined;\n\n  @Input() onClick: (event: Event) => any = () => {};\n\n  @Input({ transform: booleanAttribute }) clearButton: boolean = false;\n  @Input() clearInputTooltip: string = 'נקה';\n  @Input() clearInputTooltipPosition: TooltipPosition = 'above';\n  @Input() clearInputIcon: string = 'clear';\n  @Input() onClearInputClick: () => any = () => {};\n\n  @Input({ transform: booleanAttribute })\n  toggleDatePickerOnInputClick: boolean = false;\n\n  @Input() customErrors: { [key: string]: string | number | boolean | null } =\n    {};\n\n  @Input() set setErrors(\n    errors: { [key: string]: string | number | boolean | null } | null\n  ) {\n    this._resultCtrl.setErrors(errors);\n  }\n\n  @Input() datePickerParseError: string = 'תאריך לא חוקי';\n\n  @Input() class: string = '';\n  @Input() wrapperDirection: 'ltr' | 'rtl' = 'rtl';\n  @Input() inputDirection: 'ltr' | 'rtl' = 'rtl';\n  @Input({ transform: booleanAttribute }) set idCheck(value: boolean) {\n    if (value) {\n      this._idCheck = value;\n      this.forceNumericInput = true;\n    }\n  }\n  @Input() idValidationErrorMessage: string = 'ת.ז לא תקינה';\n  @Input({ transform: booleanAttribute }) forceNumericInput: boolean = false;\n  @Input({ transform: booleanAttribute }) forceEmailInput: boolean = false;\n  @Input({ transform: booleanAttribute }) set phoneNumberCheck(value: boolean) {\n    if (value) {\n      this._phoneNumberCheck = value;\n      this.forceNumericInput = true;\n    }\n  }\n  @Input() phoneNumberValidationErrorMessage: string = \"מס' טלפון לא תקין\";\n  @Input({ transform: booleanAttribute }) set emailCheck(value: boolean) {\n    if (value) {\n      this._emailCheck = value;\n      this.forceEmailInput = true;\n    }\n  }\n  @Input() emailNumberValidationErrorMessage: string = 'דוא\"ל לא תקין';\n\n  @Input() ngModel: any;\n  @Output() ngModelChange: EventEmitter<any> = new EventEmitter();\n\n  _emailCheck: boolean = false;\n  _dateInputDisabled: boolean = false;\n  _phoneNumberCheck: boolean = false;\n  _idCheck: boolean = false;\n  _outline: boolean = false;\n  _showHidePasswordButton: boolean = false;\n  _resultCtrl: FormControl = new FormControl();\n\n  set resultCtrlValue(value: any) {\n    this._resultCtrl.setValue(value);\n    setTimeout(() => {\n      this.cdr.detectChanges();\n    }, 0);\n  }\n\n  get resultCtrlErrors() {\n    return (this._resultCtrl.errors as { [key: string]: string }) || {};\n  }\n\n  constructor(private cdr: ChangeDetectorRef) {}\n\n  ngOnInit(): void {\n    this._resultCtrl = this.formControl || this._resultCtrl;\n    if (this.ngModel) {\n      this.resultCtrlValue = this.ngModel;\n    }\n    if (this.isDateType) {\n      this.resultCtrlValue =\n        DmCmpsDateService.getDate(this._resultCtrl.value) || null;\n    }\n\n    this._resultCtrl.valueChanges.subscribe((value) => {\n      this.idCheckValidation(value);\n      this.phoneNumberCheckValidation(value);\n      this.emailCheckValidation(value);\n    });\n  }\n\n  _toggleDatePicker() {\n    this.picker?.open();\n  }\n\n  get isPasswordType() {\n    return this.type === 'password';\n  }\n\n  get isNumberType() {\n    return this.type === 'number';\n  }\n\n  get isDateType() {\n    return this.type === 'date';\n  }\n\n  writeValue(value: any): void {}\n\n  registerOnChange(fn: any): void {}\n\n  registerOnTouched(fn: any): void {}\n\n  togglePasswordType() {\n    this.type = this.type === 'password' ? 'text' : 'password';\n  }\n\n  onChange(event: Event) {\n    this.change.emit(event);\n  }\n\n  onNgMopdelChange(event: any) {\n    this.ngModel = event;\n    this.ngModelChange.emit(this.ngModel);\n  }\n\n  clearInput() {\n    this.resultCtrlValue = '';\n    this.onClearInputClick();\n  }\n\n  onInput(event: Event) {\n    if (this.forceNumericInput) {\n      (event.target as HTMLInputElement).value = (\n        event.target as HTMLInputElement\n      ).value.replace(/[^0-9]/g, '');\n    }\n    if (this.forceEmailInput) {\n      (event.target as HTMLInputElement).value = (\n        event.target as HTMLInputElement\n      ).value.replace(/[^a-zA-Z0-9@._-]/g, '');\n    }\n    this.input.emit(event);\n  }\n\n  onFocus(event: Event) {\n    this.focus.emit(event);\n  }\n\n  onBlur(event: Event) {\n    this.blur.emit(event);\n  }\n\n  onKeyDown(event: KeyboardEvent) {\n    this.keydown.emit(event);\n  }\n\n  onKeyUp(event: KeyboardEvent) {\n    this.keyup.emit(event);\n  }\n\n  onDateChange(event: MatDatepickerInputEvent<any>) {\n    this.dateChange.emit(event);\n    this.ngModel = event.value;\n    this.ngModelChange.emit(this.ngModel);\n  }\n  _onClick(event: Event) {\n    if (this.toggleDatePickerOnInputClick) {\n      this._toggleDatePicker();\n    }\n    this.onClick(event);\n  }\n\n  idCheckValidation(value: string) {\n    if (this._idCheck) {\n      if (this._idCheckMethod(value)) {\n        const errors = this._resultCtrl.errors;\n        if (errors) {\n          delete errors['invalidId'];\n          this._resultCtrl.setErrors(errors);\n        }\n      } else {\n        const errors = this._resultCtrl.errors || {};\n        this._resultCtrl.setErrors({\n          ...errors,\n          invalidId: this.idValidationErrorMessage,\n        });\n      }\n    }\n  }\n\n  phoneNumberCheckValidation(value: string) {\n    if (this._phoneNumberCheck) {\n      if (this._phoneNumberCheckMethod(value)) {\n        const errors = this._resultCtrl.errors;\n        if (errors) {\n          delete errors['invalidPhone'];\n          this._resultCtrl.setErrors(errors);\n        }\n      } else {\n        const errors = this._resultCtrl.errors || {};\n        this._resultCtrl.setErrors({\n          ...errors,\n          invalidPhone: this.phoneNumberValidationErrorMessage,\n        });\n      }\n    }\n  }\n\n  emailCheckValidation(value: string) {\n    if (this._emailCheck) {\n      if (this._emailCheckMethod(value)) {\n        const errors = this._resultCtrl.errors;\n        if (errors) {\n          delete errors['invalidEmail'];\n          this._resultCtrl.setErrors(errors);\n        }\n      } else {\n        const errors = this._resultCtrl.errors || {};\n        this._resultCtrl.setErrors({\n          ...errors,\n          invalidEmail: this.emailNumberValidationErrorMessage,\n        });\n      }\n    }\n  }\n\n  _emailCheckMethod(value: string): boolean {\n    if (value.length < 5) return false;\n    const emailRegex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6}$/;\n    return emailRegex.test(value);\n  }\n\n  _phoneNumberCheckMethod(value: string): boolean {\n    if (value.length < 9 || value.length > 10) return false;\n    if (value.length === 9) {\n      if (\n        value.startsWith('04') ||\n        value.startsWith('03') ||\n        value.startsWith('02') ||\n        value.startsWith('08') ||\n        value.startsWith('09')\n      ) {\n        return true;\n      }\n    } else if (value.length === 10) {\n      if (value.startsWith('05')) return true;\n    }\n    return false;\n  }\n\n  _idCheckMethod(id: string): boolean {\n    if (!id || id == '') return false;\n    if (id.length !== 9) {\n      return false;\n    }\n    let sum = 0;\n    for (let i = 0; i < 9; i++) {\n      let num = Number(id.charAt(i));\n      if (i % 2 === 0) {\n        num *= 1;\n      } else {\n        num *= 2;\n      }\n      if (num > 9) {\n        num -= 9;\n      }\n      sum += num;\n    }\n    return sum % 10 === 0;\n  }\n}\n","<div class=\"dm-cmps-input-wrapper {{ class }}\" [dir]=\"wrapperDirection\">\n  <mat-form-field [appearance]=\"_outline ? 'outline' : 'fill'\" class=\"w-100\">\n    <mat-label>{{ label }}</mat-label>\n\n    <ng-container *ngIf=\"isDateType; else nonDateType\">\n      <input\n        [dir]=\"inputDirection\"\n        matInput\n        [matDatepicker]=\"picker\"\n        [placeholder]=\"placeHolder\"\n        [type]=\"isDateType ? 'text' : type\"\n        [required]=\"required\"\n        [formControl]=\"_resultCtrl\"\n        [disabled]=\"disabled\"\n        [min]=\"isNumberType && min != undefined ? min : null\"\n        [max]=\"isNumberType && max != undefined ? max : null\"\n        (change)=\"onChange($event)\"\n        (input)=\"onInput($event)\"\n        (focus)=\"onFocus($event)\"\n        (blur)=\"onBlur($event)\"\n        (keydown)=\"onKeyDown($event)\"\n        (keyup)=\"onKeyUp($event)\"\n        (dateChange)=\"onDateChange($event)\"\n        (click)=\"_onClick($event)\"\n      />\n    </ng-container>\n\n    <ng-template #nonDateType>\n      <input\n        [dir]=\"inputDirection\"\n        matInput\n        [placeholder]=\"placeHolder\"\n        [type]=\"isDateType ? 'text' : type\"\n        [disabled]=\"disabled\"\n        [required]=\"required\"\n        [formControl]=\"_resultCtrl\"\n        [min]=\"isNumberType && min != undefined ? min : undefined\"\n        [max]=\"isNumberType && max != undefined ? max : undefined\"\n        (change)=\"onChange($event)\"\n        (ngModelChange)=\"onNgMopdelChange($event)\"\n        (input)=\"onInput($event)\"\n        (focus)=\"onFocus($event)\"\n        (blur)=\"onBlur($event)\"\n        (keydown)=\"onKeyDown($event)\"\n        (keyup)=\"onKeyUp($event)\"\n        (click)=\"_onClick($event)\"\n        oninput=\"if(this.forceNumricInput) {\n          this.value = this.value.replace(/[^0-9]/g, '');\n        }\"\n      />\n    </ng-template>\n\n    <mat-icon\n      matSuffix\n      *ngIf=\"clearButton && _resultCtrl.value\"\n      (click)=\"clearInput()\"\n      [matTooltip]=\"clearInputTooltip\"\n      [matTooltipPosition]=\"clearInputTooltipPosition\"\n      class=\"dm-cmps-input-pointer\"\n    >\n      {{ clearInputIcon }}\n    </mat-icon>\n\n    <mat-icon\n      matSuffix\n      *ngIf=\"_showHidePasswordButton\"\n      (click)=\"togglePasswordType()\"\n      [matTooltip]=\"isPasswordType ? showPasswordTooltip : hidePasswordTooltip\"\n      [matTooltipPosition]=\"showHidePasswordButtonTooltipPosition\"\n      class=\"dm-cmps-input-pointer\"\n    >\n      {{ isPasswordType ? \"visibility\" : \"visibility_off\" }}\n    </mat-icon>\n\n    <mat-icon matSuffix *ngIf=\"icon\">{{ icon }}</mat-icon>\n\n    <mat-datepicker-toggle\n      *ngIf=\"isDateType\"\n      matSuffix\n      [for]=\"picker\"\n      #datePickerToggle\n      [disabled]=\"disabled || _resultCtrl.disabled\"\n    ></mat-datepicker-toggle>\n    <mat-datepicker\n      [startView]=\"datePickerStartView\"\n      [startAt]=\"datePickerStartAt || null\"\n      #picker\n    ></mat-datepicker>\n\n    <!-- <div matSuffix>\n      <ng-content></ng-content>\n    </div> -->\n\n    <mat-error *ngFor=\"let validator of resultCtrlErrors | keyvalue\">\n      <span *ngIf=\"_resultCtrl.hasError(validator.key)\">\n        <span *ngIf=\"validator.key == 'matDatepickerParse'\">\n          {{ datePickerParseError }}\n        </span>\n        <span *ngIf=\"validator.key != 'matDatepickerParse'\">\n          {{\n            validator.key == \"required\"\n              ? error || customErrors[validator.key]\n              : customErrors[validator.key] || validator.value\n          }}\n        </span>\n      </span>\n    </mat-error>\n  </mat-form-field>\n</div>\n","import {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  Renderer2,\n  ViewChild,\n  ViewChildren,\n  booleanAttribute,\n  numberAttribute,\n} from '@angular/core';\nimport { TooltipPosition } from '@angular/material/tooltip';\nimport { DmTableIndexedDBService } from './dm-table-indexed-db.service';\nimport { FormControl } from '@angular/forms';\nimport { MatOptionSelectionChange } from '@angular/material/core';\nimport { Subject, debounceTime, distinctUntilChanged } from 'rxjs';\nimport { DmCmpsDateService } from '../dm-cmps-input/dm-cmps-date.service';\nimport { MatSlideToggleChange } from '@angular/material/slide-toggle';\nimport { ExcelService } from './excel.service';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { DmCmpsHtmlPrinterService } from '../html-printer/html-printer.service';\nimport { DmCmpsRunOncePipeService } from '../pipes/run-once-pipe.service';\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\n\nexport interface DmCmpsTableSettings {\n  archiveIcon?: string;\n  archiveTooltip?: string;\n  archiveColor?: string;\n  archiveTooptipPosition?: TooltipPosition;\n  nonArchiveIcon?: string;\n  nonArchiveTooltip?: string;\n  nonArchiveColor?: string;\n  addButtonTooltip?: string;\n  addButtonTooltipPosition?: TooltipPosition;\n  addButtonIcon?: string;\n  searchLabel?: string;\n  searchPlaceholder?: string;\n  addButtonColor?: string;\n  filterSelectLabel?: string;\n  filterSelectSelectAllLabel?: string;\n  filterSelectPlaceholder?: string;\n  filterSelectOptionName?: string;\n  filterSelectOptionValue?: string;\n  filterSelectOutline?: boolean;\n  fieldToFilterBy?: string;\n  filterSelectOptions?: any[];\n  filterSelectBooleanOptions?: boolean;\n  filterSelectTrueOptionName?: string;\n  filterSelectFalseOptionName?: string;\n  outlinedFormFields?: boolean;\n  columnsControl?: boolean;\n  columnsControlSearchable?: boolean;\n  columnsControlLabel?: string;\n  columnsControlSearchLabel?: string;\n  actionButtonsMenu?: boolean;\n  actionButtonsMenuIcon?: string;\n  noDataText?: string;\n  searchable?: boolean;\n  searchOutline?: boolean;\n  tableStyle?: DmTableStyle;\n  actions?: DmTableActionButton[];\n  addButton?: boolean;\n  archive?: boolean;\n  archiveField?: string;\n  archiveValue?: string;\n  filterSelect?: boolean;\n  filterSelectSearchable?: boolean;\n  paginator?: boolean;\n  paginatorData?: DmTablePaginator;\n  autoPaginatorAbove?: number;\n  elementIdField?: string;\n  elementStyle?: (element: any) => DmTableElementStyle;\n  totalRow?: boolean;\n  printable?: boolean;\n  printData?: DmTablePrintData;\n  printTooltip?: string;\n  printTooltipPosition?: TooltipPosition;\n  printButtonColor?: string;\n  printButtonIcon?: string;\n  exportToExcel?: boolean;\n  exportToExcelTooltip?: string;\n  exportToExcelTooltipPosition?: TooltipPosition;\n  exportToExcelButtonColor?: string;\n}\nexport interface DmTableColumn {\n  name: string;\n  field: string;\n  hideIf?: (() => boolean) | boolean;\n  searchable?: boolean;\n  sortable?: boolean;\n  sortFunction?: (\n    element1: any,\n    element2: any,\n    direction: 'asc' | 'desc'\n  ) => number;\n  minWidthToShow?: number;\n  type?: DmTableColumnType;\n  actions?: DmTableActionButton[];\n  actionsMenuButtonIcon?: string;\n  actionsMenuButtonTooltip?: string;\n  valueType?: 'string' | 'number' | 'date' | 'boolean';\n  listType?: 'ul' | 'ol' | 'comma' | 'newLine';\n  imageDetails?: DmTableImageDetails;\n  customHtml?: (element: any) => string;\n  totalRow?: DmTableTotalRowDetails;\n  fixedNumber?: number;\n  slideToggleDetails?: DmTableSlideToggleDetails;\n  dateFormat?: 'dd/MM/yyyy' | 'dd/MM/yyyy HH:mm';\n  valueToShow?: (element: any) => string | string[];\n  onHeaderClick?: () => any;\n  onHeaderDoubleClick?: () => any;\n  onCellClick?: (element: any, index?: number) => any;\n  onCellDoubleClick?: (element: any, index?: number) => any;\n  onCellContentClick?: (element: any, index?: number) => any;\n  onCellContentDoubleClick?: (element: any, index?: number) => any;\n  cellStyle?: (element: any) => DmTableElementStyle;\n  totalCellStyle?: (elements: any[]) => DmTableElementStyle;\n  onTotalCellClick?: () => any;\n  onTotalCellDoubleClick?: () => any;\n}\n\nexport interface DmTableTotalRowDetails {\n  type?: 'sum' | 'avg' | 'count' | 'max' | 'min' | 'custom';\n  label?: string;\n  suffix?: string;\n  totalFunction?: (data: any[]) => string;\n}\n\nexport interface DmTableSlideToggleDetails {\n  trueLabel: string;\n  falseLabel: string;\n  trueTooltip: string;\n  falseTooltip: string;\n  trueValue?: any;\n  falseValue?: any;\n}\n\nexport interface DmTableColumns {\n  columns: DmTableColumn[];\n  displayedColumns?: string[];\n  actionButtonMenuMaxWidth?: number;\n}\n\nexport interface DmTableActionButton {\n  name: string;\n  color: string;\n  icon: string;\n  tooltip: ((element: any) => string) | string;\n  action?: (element: any) => void;\n  hideIf?: (element: any) => boolean;\n  disabled?: (element: any) => boolean;\n  showIn?: 'archive' | 'nonArchive' | 'both';\n}\n\nexport interface DmTableElementStyle {\n  color?: string;\n  background_color?: string;\n  font_weight?: string;\n  italic?: boolean;\n  underline?: boolean;\n  font_size?: string;\n}\nexport interface DmTableStyle {\n  header?: {\n    style?: DmTableElementStyle;\n    hover_style?: DmTableElementStyle;\n  };\n  row_hovered_style?: DmTableElementStyle;\n  odd_row?: {\n    style?: DmTableElementStyle;\n  };\n  even_row?: {\n    style?: DmTableElementStyle;\n  };\n  total_row?: {\n    style?: DmTableElementStyle;\n    hover_style?: DmTableElementStyle;\n  };\n  paginator?: {\n    style?: DmTableElementStyle;\n    border_radius?: string;\n  };\n  max_height?: string;\n  table_border_radius?: string;\n  scrollbar_width?: string;\n  scrollbar_color?: string;\n  scrollbar_background_color?: string;\n  scrollbar_hover_color?: string;\n}\n\nexport interface DmTablePaginator {\n  pageSize: number;\n  pageSizeOptions: number[];\n  showFirstLastButtons?: boolean;\n  outlineSelect?: boolean;\n  details?: {\n    firstPageLabel?: string;\n    lastPageLabel?: string;\n    nextPageLabel?: string;\n    previousPageLabel?: string;\n    chooseElementsPerPageLabel?: string;\n  };\n}\n\nexport interface DmTableActionButtonEvent {\n  action: string;\n  element: any;\n  elementIndex: number;\n}\nexport interface DmTableSlideToggleEvent {\n  value: boolean;\n  element: any;\n  elementIndex: number;\n  column: DmTableColumn;\n}\n\nexport interface DmTableRowDoubleClickEvent {\n  element: any;\n  elementIndex: number;\n}\n\nexport interface DmTablePrintData {\n  title: string;\n  footer?: string;\n  documentTitle: string;\n  imgSrc?: string;\n}\n\ninterface DmTablePrintPrefs {\n  data: DmTableDataToPrint;\n  printData: DmTablePrintData;\n}\n\nexport interface DmTableImageDetails {\n  width: number;\n  height: number;\n}\nexport type DmTableColumnType =\n  | 'date'\n  | 'tel'\n  | 'mail'\n  | 'link'\n  | 'whatsapp'\n  | 'actions'\n  | '#'\n  | 'list'\n  | 'image'\n  | 'customHtml'\n  | 'slideToggle';\ntype DmTableValuesToShow = Map<string, string | string[]>;\ntype DmTableValuesToShowMap = Map<string, DmTableValuesToShow>;\n\n@Component({\n  selector: 'dm-cmps-table',\n  templateUrl: './dm-table.component.html',\n  styleUrls: ['./dm-table.component.scss'],\n})\nexport class DmTableComponent implements OnInit, OnDestroy, AfterViewInit {\n  protected hoveredRow: number = -1;\n  protected headerHovered: boolean = false;\n\n  // exportAsExcelConfig: ExportAsConfig = {\n  //   type: 'xlsx',\n  //   options: {\n  //     orientation: 'landscape',\n  //     onorientationchange: 'landscape',\n  //     margins: {\n  //       top: '20',\n  //     },\n  //   },\n  //   elementIdOrContent: 'tableToExport',\n  // };\n\n  _exportMode: boolean = false;\n\n  @Output() onAddButtonClick: EventEmitter<void> = new EventEmitter();\n  @Output() onActionButtonClick: EventEmitter<DmTableActionButtonEvent> =\n    new EventEmitter();\n  @Output() onRowDoubleClick: EventEmitter<any> = new EventEmitter();\n  @Output() onSlideToggleChange: EventEmitter<DmTableSlideToggleEvent> =\n    new EventEmitter();\n\n  @Input() set dataSource(data: any[]) {\n    const _data = structuredClone(data);\n    this._dataSource.setDataSource(_data);\n    if (this.searchCtrl.value) {\n      this.applyFilter(this.searchCtrl.value);\n    }\n    this.sortByColumn();\n  }\n\n  @Input() set columns(columns: DmTableColumns) {\n    this.initColumns(columns);\n  }\n\n  @Input() tableStyle: DmTableStyle = {};\n\n  /**\n   * actions - an array of actions to show in the action column\n   */\n  @Input() actions: DmTableActionButton[] | undefined;\n\n  /**\n   * addButton - if true, an add button will be shown\n   */\n  @Input({ transform: booleanAttribute }) set addButton(value: boolean) {\n    this._addButton = value;\n  }\n\n  /**\n   * archive - if true, an archive button will be shown\n   */\n  @Input({ transform: booleanAttribute }) set archive(value: boolean) {\n    this._archive = value;\n    this._dataSource.applyArchive(value);\n  }\n\n  /**\n   * condition to hide archive button if true, (still filtering the archived items by archiveField)\n   */\n  @Input({ transform: booleanAttribute }) set hideArchiveIf(value: boolean) {\n    this._hideArchive = value;\n  }\n\n  /**\n   * archiveField - the field to filter by when archive is true\n   */\n  @Input() set archiveField(field: string) {\n    this._dataSource.setArchiveField(field);\n  }\n\n  /**\n   * archiveValue - the value to filter by when archive is true\n   */\n  @Input() set archiveValue(value: any) {\n    this._dataSource.setArchiveValue(value);\n  }\n\n  /**\n   * archiveIcon - the icon of the archive button\n   */\n  @Input() archiveIcon: string = 'archive';\n\n  /**\n   * archiveTooltip - the tooltip of the archive button\n   */\n  @Input() archiveTooltip: string = 'ארכיון';\n\n  /**\n   * archiveColor - the color of the archive icon\n   */\n  @Input() archiveColor: string = '#20a21e';\n\n  /**\n   * archiveTooptipPosition - the position of the archive button tooltip\n   */\n  @Input() archiveTooptipPosition: TooltipPosition = 'above';\n\n  /**\n   * nonArchiveIcon - the icon of the non archive button\n   */\n  @Input() nonArchiveIcon: string = 'table_chart';\n\n  /**\n   * nonArchiveTooltip - the tooltip of the non archive button\n   */\n  @Input() nonArchiveTooltip: string = 'הצג נתונים';\n\n  /**\n   * nonArchiveColor - the color of the non archive icon\n   */\n  @Input() nonArchiveColor: string = '#3f51b5';\n\n  /**\n   * addButtonTooltip - the tooltip of the add button\n   */\n  @Input() addButtonTooltip: string = 'הוסף';\n\n  /**\n   * addButtonTooltipPosition - the position of the add button tooltip\n   */\n  @Input() addButtonTooltipPosition: TooltipPosition = 'above';\n\n  /**\n   * addButtonIcon - the icon of the add button\n   */\n  @Input() addButtonIcon: string = 'add';\n\n  /**\n   * searchLabel - the label of the search input\n   */\n  @Input() searchLabel: string = 'חפש';\n\n  /**\n   * searchPlaceHolder - the placeholder of the search input\n   */\n  @Input() searchPlaceholder: string = 'חפש...';\n\n  /**\n   * searchable - if true, a search input will be shown\n   */\n  @Input({ transform: booleanAttribute }) set searchable(value: boolean) {\n    this._searchable = value;\n  }\n\n  /**\n   * searchOutline - if true, the search input will be outlined\n   */\n  @Input({ transform: booleanAttribute }) set searchOutline(value: boolean) {\n    this._searchOutline = value;\n  }\n\n  /**\n   * addButtonColor - the color of the add button\n   */\n  @Input() addButtonColor: string = '#3f51b5';\n\n  /**\n   * addButtonAction - a function to run when the add button is clicked\n   */\n  @Input() addButtonAction: () => void = () => {};\n\n  /**\n   * filterSelect - if true, a filter select will be shown\n   */\n  @Input({ transform: booleanAttribute }) set filterSelect(value: boolean) {\n    this._filterSelect = value;\n  }\n\n  /**\n   * filterSelectSearchable - if true, the filter select will be searchable\n   */\n  @Input({ transform: booleanAttribute }) set filterSelectSearchable(\n    value: boolean\n  ) {\n    if (value) this._filterSelectSearchable = true;\n    else this._filterSelectSearchable = false;\n  }\n\n  _filterSelectSearchable: boolean = false;\n  _filterSelectSearchLabel: string = 'חפש';\n\n  /**\n   * filterSelectLabel - the label of the filter select\n   */\n  @Input() filterSelectLabel: string = 'סנן לפי';\n\n  /**\n   * filterSelectOptions - an array of options to filter with\n   */\n  @Input() set filterSelectOptions(options: any[]) {\n    this._filterSelectOptions = structuredClone(options);\n    this.initFilterSelectOptions();\n  }\n\n  /**\n   * filterSelectOutline - if true, the filter select will be outlined\n   */\n  @Input({ transform: booleanAttribute }) set filterSelectOutline(\n    value: boolean\n  ) {\n    if (value) this._filterSelectOutline = true;\n    else this._filterSelectOutline = false;\n  }\n\n  /**\n   * filterSelectSelectAllLabel - the label of the select all option in the filter select\n   */\n  @Input() filterSelectSelectAllLabel: string = 'בחר הכל';\n\n  /**\n   * filterSelectPlaceholder - the placeholder of the filter select\n   */\n  @Input() filterSelectPlaceholder: string = 'סנן';\n\n  /**\n   * filterSelectOptionName - the name of the option field to be shown in the select\n   */\n  @Input() filterSelectOptionName: string = 'name';\n\n  /**\n   * filterSelectOptionValue - the value of the option field to be used in the filter\n   */\n  @Input() filterSelectOptionValue: string = '_id';\n\n  /**\n   * fieldToFilterBy - the field of the table element to filter by\n   */\n  @Input() fieldToFilterBy: string = '';\n\n  /**\n   * filterSelectBooleanOptions - if true, the filter select will show true and false options\n   */\n  @Input({ transform: booleanAttribute }) filterSelectBooleanOptions: boolean =\n    false;\n\n  /**\n   * filterSelectTrueOptionName - the name of the true option in the filter select\n   */\n  @Input() set filterSelectTrueOptionName(name: string) {\n    this._filterSelectTrueOptionName = name;\n    this.initFilterSelectOptions();\n  }\n\n  /**\n   * filterSelectFalseOptionName - the name of the false option in the filter select\n   */\n  @Input() set filterSelectFalseOptionName(name: string) {\n    this._filterSelectFalseOptionName = name;\n    this.initFilterSelectOptions();\n  }\n\n  /**\n   * outlinedFormFields - if true, the search, filter select and columns control will be outlined\n   */\n  @Input({ transform: booleanAttribute }) set outlinedFormFields(\n    value: boolean\n  ) {\n    if (value) {\n      this._filterSelectOutline = value;\n      this._searchOutline = value;\n      this._columnsControlOutline = value;\n    }\n  }\n\n  /**\n   * columnsControlLabel - the label of the columns control field\n   */\n  @Input() columnsControlLabel: string = 'עמודות להצגה';\n\n  /**\n   * columnsControl - if true, a columns control will be shown\n   */\n  @Input({ transform: booleanAttribute }) set columnsControl(value: boolean) {\n    this._columnsControl = value;\n  }\n\n  /**\n   * columnsControlOutline - if true, the columns control will be outlined\n   */\n  @Input({ transform: booleanAttribute }) set columnsControlOutline(\n    value: boolean\n  ) {\n    if (value) this._columnsControlOutline = true;\n    else this._columnsControlOutline = false;\n  }\n\n  /**\n   * columnsControlSearchable - if true, the columns control will be searchable\n   */\n  @Input({ transform: booleanAttribute }) set columnsControlSearchable(\n    value: boolean\n  ) {\n    if (value) this._columnsControlSearchable = true;\n    else this._columnsControlSearchable = false;\n  }\n\n  _columnsControlSearchable: boolean = false;\n\n  /**\n   * columnsControlSearchLabel - the label of the columns control search input\n   */\n  @Input() columnsControlSearchLabel: string = 'חפש עמודה';\n\n  @Input({ transform: booleanAttribute }) set actionButtonsMenu(\n    value: boolean\n  ) {\n    this._actionButtonsMenu = value;\n  }\n\n  /**\n   * actionButtonsMenuIcon - the icon of the action buttons menu\n   */\n  @Input() actionButtonsMenuIcon: string = 'more_vert';\n\n  /**\n   * noDataText - the text to show when there is no data to show in the table\n   */\n  @Input() noDataText: string = 'אין נתונים להצגה';\n\n  /**\n   * paginator - if true, a paginator will be shown\n   */\n  @Input({ transform: booleanAttribute }) set paginator(value: boolean) {\n    if (value) {\n      this._dataSource.applyPaginator();\n    } else {\n      this._dataSource.removePaginator();\n    }\n  }\n\n  /**\n   * paginatorData - the paginator data\n   */\n  @Input() set paginatorData(data: DmTablePaginator) {\n    this._paginatorData = data;\n    this._dataSource.setPaginatorData(data);\n  }\n\n  /**\n   * autoPaginatorAbove - the length of the data to show the paginator above the table (default as 100)\n   */\n  @Input({ transform: numberAttribute }) set autoPaginatorAbove(\n    length: number\n  ) {\n    this._dataSource.setAutoPaginatorAbove(length);\n  }\n\n  /**\n   * elementIdField - the field of the table element to be used as an id\n   */\n  @Input() set elementIdField(field: string) {\n    this._dataSource.setElementIdField(field);\n    this._elementIdField = field;\n  }\n\n  /**\n   * elementStyle - a function that gets an element and returns the style of the element row as DmTableElementStyle\n   */\n  @Input() elementStyle: ((element: any) => DmTableElementStyle) | undefined;\n\n  /**\n   * totalRow - if true, a total row will be shown\n   */\n  @Input({ transform: booleanAttribute }) set totalRow(value: boolean) {\n    this._totalRow = value;\n    this._dataSource.setTotalRow(value);\n  }\n\n  /**\n   * printable - if true, a print button will be shown\n   */\n  @Input({ transform: booleanAttribute }) set printable(value: boolean) {\n    this._dataSource._printable = value;\n  }\n\n  /**\n   * printData - the data to print as DmTablePrintData\n   */\n  @Input() set printData(data: DmTablePrintData) {\n    this._printData = data;\n    this._dataSource.setPrintData(data);\n  }\n\n  /**\n   * printTooltip - the tooltip of the print button\n   */\n  @Input() printTooltip: string = 'הדפסה';\n\n  /**\n   * printTooltipPosition - the position of the print button tooltip\n   */\n  @Input() printTooltipPosition: TooltipPosition = 'above';\n\n  /**\n   * printButtonColor - the color of the print button\n   */\n  @Input() printButtonColor: string = '#3f51b5';\n\n  /**\n   * printButtonIcon - the icon of the print button\n   */\n  @Input() printButtonIcon: string = 'print';\n\n  /**\n   * exportToExcel - if true, an export to excel button will be shown\n   */\n  @Input({ transform: booleanAttribute }) set exportToExcel(value: boolean) {\n    this._exportToExcel = false;\n  }\n\n  /**\n   * exportToExcelTooltip - the tooltip of the export to excel button\n   */\n  @Input() exportToExcelTooltip: string = 'יצוא לאקסל';\n\n  /**\n   * exportToExcelTooltipPosition - the position of the export to excel button tooltip\n   */\n  @Input() exportToExcelTooltipPosition: TooltipPosition = 'above';\n\n  /**\n   * exportToExcelButtonColor - the color of the export to excel button\n   */\n  @Input() exportToExcelButtonColor: string = '#107c41';\n\n  /**\n   * dragableColumns - if true, the columns will be dragable\n   */\n  @Input({ transform: booleanAttribute }) dragableColumns: boolean = false;\n\n  /**\n   * dragableColumnsHandler - if true, a handler will be shown to drag the\n   */\n  @Input({ transform: booleanAttribute }) dragableColumnsHandler: boolean =\n    false;\n\n  /**\n   * dragableRows - if true, the rows will be dragable\n   */\n  @Input({ transform: booleanAttribute }) dragableRows: boolean = false;\n\n  /**\n   * dragableRowsHandler - if true, a handler will be shown to drag the rows\n   */\n  @Input({ transform: booleanAttribute }) dragableRowsHandler: boolean = false;\n\n  /**\n   * dragDelay - the delay of the drag\n   */\n  @Input({ transform: numberAttribute }) dragDelay: number = 50;\n\n  /**\n   * actionsMenuButtonTooltip - the tooltip of the actions menu button\n   */\n  @Input() actionsMenuButtonTooltip: string = 'פעולות';\n\n  /**\n   * filterPredicate - a function that gets an element and a value and returns true if the element should be shown\n   */\n  @Input() filterPredicate:\n    | ((element: any, value: string) => boolean)\n    | undefined;\n\n  _filterSelectTrueOptionName: string = 'כן';\n  _filterSelectFalseOptionName: string = 'לא';\n  _exportToExcel: boolean = false;\n  _elementIdField: string = '_id';\n  _printData: DmTablePrintData | undefined;\n  _dataSource: DmCmpsTableDataSource<any> = new DmCmpsTableDataSource<any>();\n  _displayedColumnsCtrl: FormControl = new FormControl([]);\n  _sortable: boolean = true;\n  _addButton: boolean = false;\n  _archive: boolean = false;\n  _hideArchive: boolean = false;\n  _searchable: boolean = false;\n  _searchOutline: boolean = false;\n  _filterSelect: boolean = false;\n  _filterSelectOutline: boolean = false;\n  // _dmTableColumns: DmTableColumns = {\n  //   columns: [],\n  // };\n  _columnsControlOutline: boolean = false;\n  _columnsControl: boolean = false;\n  _attributesToSearchIn: string[] = [];\n  _actionButtonsMenu: boolean = false;\n\n  _allColumns: DmTableColumn[] = [];\n  _paginator: boolean = false;\n  _paginatorData: DmTablePaginator | undefined;\n\n  _filterSelectOptions: any[] = [];\n  _totalRow: boolean = false;\n  // _cellMinWidth: number = 30;\n\n  searchCtrl: FormControl = new FormControl('');\n\n  // get _mustOverFlow() {\n  //   return (\n  //     this.headerRow?.nativeElement.getBoundingClientRect().width >\n  //     this.tableElement?.nativeElement.getBoundingClientRect().width\n  //   );\n  // }\n\n  _sortedBy: {\n    index: number;\n    order: 'asc' | 'desc';\n  } = {\n    index: -1,\n    order: 'asc',\n  };\n\n  get _columnsFields() {\n    return this._dataSource.getColumnsToDisplay().map((col) => col.field);\n  }\n\n  get _displayedColumnsCtrlValue() {\n    return this._displayedColumnsCtrl.value as string[];\n  }\n\n  set _displayedColumnsCtrlValue(value: string[]) {\n    this._displayedColumnsCtrl.setValue(value);\n  }\n\n  get _showToolbar() {\n    return (\n      this._searchable ||\n      this._filterSelect ||\n      this._columnsControl ||\n      this._addButton ||\n      this._archive\n    );\n  }\n\n  @ViewChildren('headerSpan') headerSpans: QueryList<ElementRef> | undefined;\n\n  @ViewChild('tableElement') tableElement: ElementRef | undefined;\n  @ViewChild('printTemplate') printTemplate: ElementRef | undefined;\n  @ViewChild('headerRow') headerRow: ElementRef | undefined;\n  @ViewChildren('tableRowRef') tableRowRefs: QueryList<ElementRef> | undefined;\n  @ViewChild('totalRow') totalRowRef: ElementRef | undefined;\n\n  @HostBinding('style.--dm-cmps-table-scrollbar-color')\n  get scrollbarColor() {\n    return (\n      this.tableStyle?.scrollbar_color ||\n      this.tableStyle?.header?.style?.background_color ||\n      ''\n    );\n  }\n\n  @HostBinding('style.--dm-cmps-table-scrollbar-background-color')\n  get scrollbarBackgroundColor() {\n    return this.tableStyle?.scrollbar_background_color || '';\n  }\n\n  @HostBinding('style.--dm-cmps-table-scrollbar-hover-color')\n  get scrollbarHoverColor() {\n    return this.tableStyle?.scrollbar_hover_color || '';\n  }\n\n  @HostBinding('style.--dm-cmps-table-scrollbar-width')\n  get scrollbarWidth() {\n    return this.tableStyle?.scrollbar_width || '4px';\n  }\n\n  /**\n   * tableSettings - a struct that have most of the component inputs, another way to define the table properties\n   */\n  @Input() set tableSettings(settings: DmCmpsTableSettings) {\n    if (!settings) return;\n    this.setTableSettings(settings);\n  }\n\n  private searchTerms = new Subject<string>();\n  private _onDestroy = new Subject<void>();\n  constructor(\n    private renderer: Renderer2,\n    private cdr: ChangeDetectorRef,\n    private excelService: ExcelService,\n    // private exportAsService: ExportAsService,\n    private sanitizer: DomSanitizer,\n    private htmlPrintService: DmCmpsHtmlPrinterService,\n    protected dateService: DmCmpsDateService,\n    private runOncePipeService: DmCmpsRunOncePipeService\n  ) {}\n\n  [key: string]: any;\n\n  setTableSettings(settings: DmCmpsTableSettings) {\n    if (!settings) return;\n    for (const key in settings) {\n      if (settings.hasOwnProperty(key)) {\n        const value = settings[key as keyof DmCmpsTableSettings];\n        if (value) {\n          this[key] = value;\n        }\n      }\n    }\n  }\n\n  ngOnInit(): void {\n    window.addEventListener('resize', this.onResize, true);\n    this.searchTerms\n      .pipe(debounceTime(300), distinctUntilChanged())\n      .subscribe((term) => this.applyFilter(term));\n  }\n\n  _print: boolean = false;\n\n  cleareSearch() {\n    this.searchCtrl.setValue('');\n    this.searchTerms.next('');\n  }\n\n  search(event: Event) {\n    const filterValue = (event.target as HTMLInputElement).value;\n    this.searchTerms.next(filterValue);\n  }\n\n  getSlideToggleStyle(element: any, index: number): Object {\n    const elementStyle: DmTableElementStyle = this.elementStyle\n      ? this.elementStyle(element)\n      : {};\n    return {\n      color:\n        this.hoveredRow == index\n          ? this.tableStyle.row_hovered_style?.color\n            ? this.tableStyle.row_hovered_style?.color\n            : '#000'\n          : elementStyle.color\n          ? elementStyle.color\n          : index % 2 == 1\n          ? this.tableStyle.even_row?.style?.color\n            ? this.tableStyle.even_row?.style?.color\n            : '#000'\n          : this.tableStyle.odd_row?.style?.color\n          ? this.tableStyle.odd_row?.style?.color\n          : '#000',\n      'font-size':\n        this.hoveredRow == index\n          ? this.tableStyle.row_hovered_style?.font_size\n            ? this.tableStyle.row_hovered_style?.font_size\n            : '1rem'\n          : elementStyle.font_size\n          ? elementStyle.font_size\n          : index % 2 == 1\n          ? this.tableStyle.even_row?.style?.font_size\n            ? this.tableStyle.even_row?.style?.font_size\n            : '1rem'\n          : this.tableStyle.odd_row?.style?.font_size\n          ? this.tableStyle.odd_row?.style?.font_size\n          : '1rem',\n      'font-weight':\n        this.hoveredRow == index\n          ? this.tableStyle.row_hovered_style?.font_weight\n            ? this.tableStyle.row_hovered_style?.font_weight\n            : 'normal'\n          : elementStyle.font_weight\n          ? elementStyle.font_weight\n          : index % 2 == 1\n          ? this.tableStyle.even_row?.style?.font_weight\n            ? this.tableStyle.even_row?.style?.font_weight\n            : 'normal'\n          : this.tableStyle.odd_row?.style?.font_weight\n          ? this.tableStyle.odd_row?.style?.font_weight\n          : 'normal',\n      'text-decoration':\n        this.hoveredRow == index\n          ? this.tableStyle.row_hovered_style?.underline\n            ? 'underline'\n            : 'none'\n          : elementStyle.hasOwnProperty('underline')\n          ? elementStyle.underline\n            ? 'underline'\n            : 'none'\n          : index % 2 == 1\n          ? this.tableStyle.even_row?.style?.underline\n            ? 'underline'\n            : 'none'\n          : this.tableStyle.odd_row?.style?.underline\n          ? 'underline'\n          : 'none',\n      'font-style':\n        this.hoveredRow == index\n          ? this.tableStyle.row_hovered_style?.italic\n            ? 'italic'\n            : 'none'\n          : elementStyle.hasOwnProperty('italic')\n          ? elementStyle.italic\n            ? 'italic'\n            : 'none'\n          : index % 2 == 1\n          ? this.tableStyle.even_row?.style?.italic\n            ? 'italic'\n            : 'none'\n          : this.tableStyle.odd_row?.style?.italic\n          ? 'italic'\n          : 'none',\n    };\n  }\n\n  getCellStyle(column: DmTableColumn, element: any): Object {\n    if (!column.cellStyle) return {};\n    const cellStyle = column.cellStyle(element) || {};\n    const style: any = {};\n    if (cellStyle.color) {\n      style['color'] = cellStyle.color;\n    }\n    if (cellStyle.background_color) {\n      style['background-color'] = cellStyle.background_color;\n    }\n    if (cellStyle.font_weight) {\n      style['font-weight'] = cellStyle.font_weight;\n    }\n    if (cellStyle.italic) {\n      style['font-style'] = 'italic';\n    }\n    if (cellStyle.underline) {\n      style['text-decoration'] = 'underline';\n    }\n    if (cellStyle.font_size) {\n      style['font-size'] = cellStyle.font_size;\n    }\n    return style;\n  }\n\n  getTotalCellStyle(column: DmTableColumn, elements: any[]): Object {\n    if (!column.totalCellStyle) return {};\n    const totalCellStyle = column.totalCellStyle(elements) || {};\n    const style: any = {};\n    if (totalCellStyle.color) {\n      style['color'] = totalCellStyle.color;\n    }\n    if (totalCellStyle.background_color) {\n      style['background-color'] = totalCellStyle.background_color;\n    }\n    if (totalCellStyle.font_weight) {\n      style['font-weight'] = totalCellStyle.font_weight;\n    }\n    if (totalCellStyle.italic) {\n      style['font-style'] = 'italic';\n    }\n    if (totalCellStyle.underline) {\n      style['text-decoration'] = 'underline';\n    }\n    if (totalCellStyle.font_size) {\n      style['font-size'] = totalCellStyle.font_size;\n    }\n    return style;\n  }\n\n  getElementStyle(element: any, index: number): Object {\n    const elementStyle: DmTableElementStyle = this.elementStyle\n      ? this.elementStyle(element)\n      : {};\n    return {\n      'border-bottom': '1px solid #0000001f',\n      'background-color':\n        this.hoveredRow == index\n          ? this.tableStyle.row_hovered_style?.background_color\n            ? this.tableStyle.row_hovered_style?.background_color\n            : '#e0e0e0'\n          : elementStyle.background_color\n          ? elementStyle.background_color\n          : index % 2 == 1\n          ? this.tableStyle.even_row?.style?.background_color\n            ? this.tableStyle.even_row?.style?.background_color\n            : '#fff'\n          : this.tableStyle.odd_row?.style?.background_color\n          ? this.tableStyle.odd_row?.style?.background_color\n          : '#fff',\n      color:\n        this.hoveredRow == index\n          ? this.tableStyle.row_hovered_style?.color\n            ? this.tableStyle.row_hovered_style?.color\n            : '#000'\n          : elementStyle.color\n          ? elementStyle.color\n          : index % 2 == 1\n          ? this.tableStyle.even_row?.style?.color\n            ? this.tableStyle.even_row?.style?.color\n            : '#000'\n          : this.tableStyle.odd_row?.style?.color\n          ? this.tableStyle.odd_row?.style?.color\n          : '#000',\n      'font-size':\n        this.hoveredRow == index\n          ? this.tableStyle.row_hovered_style?.font_size\n            ? this.tableStyle.row_hovered_style?.font_size\n            : '1rem'\n          : elementStyle.font_size\n          ? elementStyle.font_size\n          : index % 2 == 1\n          ? this.tableStyle.even_row?.style?.font_size\n            ? this.tableStyle.even_row?.style?.font_size\n            : '1rem'\n          : this.tableStyle.odd_row?.style?.font_size\n          ? this.tableStyle.odd_row?.style?.font_size\n          : '1rem',\n      'font-weight':\n        this.hoveredRow == index\n          ? this.tableStyle.row_hovered_style?.font_weight\n            ? this.tableStyle.row_hovered_style?.font_weight\n            : 'normal'\n          : elementStyle.font_weight\n          ? elementStyle.font_weight\n          : index % 2 == 1\n          ? this.tableStyle.even_row?.style?.font_weight\n            ? this.tableStyle.even_row?.style?.font_weight\n            : 'normal'\n          : this.tableStyle.odd_row?.style?.font_weight\n          ? this.tableStyle.odd_row?.style?.font_weight\n          : 'normal',\n      'text-decoration':\n        this.hoveredRow == index\n          ? this.tableStyle.row_hovered_style?.underline\n            ? 'underline'\n            : 'none'\n          : elementStyle && elementStyle.hasOwnProperty('underline')\n          ? elementStyle.underline\n            ? 'underline'\n            : 'none'\n          : index % 2 == 1\n          ? this.tableStyle.even_row?.style?.underline\n            ? 'underline'\n            : 'none'\n          : this.tableStyle.odd_row?.style?.underline\n          ? 'underline'\n          : 'none',\n      'font-style':\n        this.hoveredRow == index\n          ? this.tableStyle.row_hovered_style?.italic\n            ? 'italic'\n            : 'none'\n          : elementStyle.hasOwnProperty('italic')\n          ? elementStyle.italic\n            ? 'italic'\n            : 'none'\n          : index % 2 == 1\n          ? this.tableStyle.even_row?.style?.italic\n            ? 'italic'\n            : 'none'\n          : this.tableStyle.odd_row?.style?.italic\n          ? 'italic'\n          : 'none',\n    };\n  }\n\n  getSafeHtml(text: string): string {\n    return this.sanitizer.bypassSecurityTrustHtml(text) as string;\n  }\n\n  ngOnDestroy(): void {\n    DmTableIndexedDBService.deleteDB('DmCmpsTableDB');\n    window.removeEventListener('resize', this.onResize, true);\n    this._onDestroy.next();\n    this._onDestroy.complete();\n  }\n\n  ngAfterViewInit(): void {\n    this._dataSource.filterPredicate = this._filterPredicate.bind(this);\n    // this.setCellMinWidth();\n    this.cdr.detectChanges();\n    this._dataSource.onWidthAdjustmentRequested.subscribe(() => {\n      // this.setCellMinWidth();\n    });\n    // this.setTotalRowWidth();\n  }\n\n  onColumnsSelectionChange(columns: any) {\n    const columnsToDisplay = this._allColumns.filter((col) =>\n      columns.includes(col.field)\n    );\n    this._dataSource.setColumnsToDisplay(columnsToDisplay);\n    // this.setCellMinWidth();\n  }\n\n  _toggleArchive() {\n    const archive = !this._dataSource.getArchive();\n    this._dataSource.setArchive(archive);\n  }\n\n  initColumns(columns: DmTableColumns) {\n    columns.columns = [...columns.columns].filter((column) => {\n      if (this.getColumnHideCondition(column)) {\n        columns.displayedColumns = columns.displayedColumns?.filter(\n          (col) => col !== column.field\n        );\n        return false;\n      }\n      return true;\n    });\n    // this._dmTableColumns = { ...columns };\n    this._dataSource.setTableColumns(columns);\n\n    this._allColumns = columns.columns;\n    if (columns.displayedColumns && columns.displayedColumns.length > 0) {\n      this._dataSource.setColumnsToDisplay(\n        this._allColumns.filter((col) =>\n          columns.displayedColumns?.includes(col.field)\n        )\n      );\n      this._displayedColumnsCtrlValue = columns.displayedColumns;\n    } else {\n      this._dataSource.setColumnsToDisplay(this._allColumns);\n      this._displayedColumnsCtrlValue = this._dataSource\n        .getColumnsToDisplay()\n        .map((col) => col.field) as string[];\n    }\n    this._attributesToSearchIn = this._allColumns\n      .filter((col) => col.searchable)\n      .map((col) => col.field);\n    if (this._attributesToSearchIn.length === 0) {\n      this._attributesToSearchIn = this._allColumns.map((col) => col.field);\n    }\n\n    this.onResize();\n  }\n\n  columnDrop(event: CdkDragDrop<any[]>) {\n    moveItemInArray(\n      this._dataSource.getColumnsToDisplayTest(),\n      event.previousIndex,\n      event.currentIndex\n    );\n  }\n\n  rowDrop(event: CdkDragDrop<any[]>) {\n    moveItemInArray(\n      this._dataSource.resultData,\n      event.previousIndex,\n      event.currentIndex\n    );\n  }\n\n  // get _actionButtonsTotalWidth() {\n  //   // let width = this.actions.length * 68;\n  //   // return width;\n  //   return 0;\n  // }\n\n  // setCellMinWidth() {\n  //   if (this.tableElement) {\n  //     let tableWidth =\n  //       this.tableElement.nativeElement.getBoundingClientRect().width;\n\n  //     if (\n  //       this._dataSource.getColumnsToDisplay().some((col) => col.type === '#')\n  //     ) {\n  //       this._cellMinWidth =\n  //         (tableWidth - 70) /\n  //         (this._dataSource.getColumnsToDisplay().length - 1);\n  //     } else {\n  //       this._cellMinWidth =\n  //         tableWidth / this._dataSource.getColumnsToDisplay().length;\n  //     }\n  //   }\n  // }\n\n  setTotalRowWidth() {\n    if (this.headerRow && this.totalRowRef) {\n      const width = this.headerRow.nativeElement.getBoundingClientRect().width;\n      this.renderer.setStyle(\n        this.totalRowRef.nativeElement,\n        'width',\n        `${width}px`\n      );\n      this.renderer.setStyle(\n        this.totalRowRef.nativeElement,\n        'min-width',\n        `${width}px`\n      );\n    }\n  }\n\n  getColumnHideCondition(column: DmTableColumn) {\n    if (typeof column.hideIf === 'boolean') return column.hideIf;\n    return column.hideIf && column.hideIf();\n  }\n\n  checkColumnHideCondition(field: string) {\n    const column = this._allColumns.find((col) => col.field === field);\n    if (!column) return false;\n    return this.getColumnHideCondition(column);\n  }\n\n  onResize = () => {\n    if (\n      this._dataSource.getDmTableColumns().actionButtonMenuMaxWidth !==\n      undefined\n    ) {\n      this._actionButtonsMenu =\n        window.innerWidth <=\n        this._dataSource.getDmTableColumns().actionButtonMenuMaxWidth!;\n    }\n    // this.setCellMinWidth();\n    const columnsToDisplay = this._allColumns.filter((column) => {\n      if (column.hideIf) {\n        return !this.getColumnHideCondition(column);\n      }\n      if (this._columnsControl) {\n        if (this._displayedColumnsCtrlValue.includes(column.field)) {\n          return true;\n        }\n        return false;\n      } else {\n        if (this._displayedColumnsCtrlValue.includes(column.field)) {\n          return true;\n        }\n      }\n      if (this._displayedColumnsCtrlValue?.length > 0) {\n        return this._displayedColumnsCtrlValue.includes(column.field);\n      }\n      if (column.minWidthToShow) {\n        return window.innerWidth >= column.minWidthToShow;\n      } else {\n        return true;\n      }\n    });\n    this._dataSource.setColumnsToDisplay(columnsToDisplay);\n  };\n\n  initFilterSelectOptions() {\n    if (this.filterSelectBooleanOptions) {\n      this._filterSelectOptions = [\n        {\n          [this.filterSelectOptionName]: this.filterSelectSelectAllLabel,\n          [this.filterSelectOptionValue]: 'dm-cmps-all',\n        },\n        {\n          [this.filterSelectOptionName]: this._filterSelectTrueOptionName,\n          [this.filterSelectOptionValue]: true,\n        },\n        {\n          [this.filterSelectOptionName]: this._filterSelectFalseOptionName,\n          [this.filterSelectOptionValue]: false,\n        },\n      ];\n    } else {\n      this._filterSelectOptions.unshift({\n        [this.filterSelectOptionName]: this.filterSelectSelectAllLabel,\n        [this.filterSelectOptionValue]: 'dm-cmps-all',\n      });\n    }\n  }\n\n  onFilterSelectionChange(event: any) {\n    if (!this.fieldToFilterBy) return;\n    this.cleareSearch();\n    this._dataSource.filterByFieldAndValue(\n      this.fieldToFilterBy,\n      event,\n      this.filterSelectBooleanOptions\n    );\n  }\n\n  _onClearInputClick() {\n    this.searchTerms.next('');\n  }\n\n  _onAddButtonClick() {\n    this.onAddButtonClick.emit();\n    this.addButtonAction();\n  }\n\n  _onActionButtonClick(button: DmTableActionButton, element: any) {\n    if (button.hideIf && button.hideIf(element)) return;\n    if (button.disabled && button.disabled(element)) return;\n    if (button.action) {\n      button.action(element);\n    }\n    const elementIndex = this._dataSource.getElementIndex(element);\n    this.onActionButtonClick.emit({\n      action: button.name,\n      elementIndex,\n      element,\n    });\n  }\n\n  _onRowDoubleClick(element: any) {\n    const elementIndex = this._dataSource.getElementIndex(element);\n    this.onRowDoubleClick.emit({ element, elementIndex });\n  }\n\n  _onSlideToggleChange(\n    event: MatSlideToggleChange,\n    element: any,\n    column: DmTableColumn\n  ) {\n    const elementIndex = this._dataSource.getElementIndex(element);\n    this.onSlideToggleChange.emit({\n      value: event.checked,\n      elementIndex,\n      element,\n      column,\n    });\n  }\n\n  _getSlideToggleLabel(column: DmTableColumn, element: any) {\n    if (!column.slideToggleDetails) return '';\n    if (\n      column.slideToggleDetails.trueValue &&\n      column.slideToggleDetails.falseValue\n    ) {\n      return element[column.field] === column.slideToggleDetails.trueValue\n        ? column.slideToggleDetails.trueValue\n        : element[column.field] === column.slideToggleDetails.falseValue\n        ? column.slideToggleDetails.falseValue\n        : '';\n    }\n    return element[column.field]\n      ? column.slideToggleDetails.trueLabel\n      : column.slideToggleDetails.falseLabel;\n  }\n\n  _getSlideToggleTooltip(column: DmTableColumn, element: any) {\n    if (!column.slideToggleDetails) return '';\n    if (\n      column.slideToggleDetails.trueValue &&\n      column.slideToggleDetails.falseValue\n    ) {\n      return element[column.field] === column.slideToggleDetails.trueValue\n        ? column.slideToggleDetails.trueTooltip\n        : element[column.field] === column.slideToggleDetails.falseValue\n        ? column.slideToggleDetails.falseTooltip\n        : '';\n    }\n    return element[column.field]\n      ? column.slideToggleDetails.trueTooltip\n      : column.slideToggleDetails.falseTooltip;\n  }\n\n  _getTotalRowValue(column: DmTableColumn): string {\n    const details = column.totalRow;\n    if (!details) return '';\n    if (details.type === 'custom') {\n      if (details.totalFunction) {\n        return details.totalFunction(this._dataSource.getTotalData());\n      }\n      return '';\n    }\n    if (details.type === 'avg') {\n      return this._dataSource.getAvg(column);\n    }\n    if (details.type === 'sum') {\n      return this._dataSource.getSum(column);\n    }\n    if (details.type === 'count') {\n      return this._dataSource.getCount(column);\n    }\n    if (details.type === 'max') {\n      return this._dataSource.getMax(column);\n    }\n    if (details.type === 'min') {\n      return this._dataSource.getMin(column);\n    }\n    return '';\n  }\n\n  sortByColumn() {\n    if (this._sortedBy.index === -1) {\n      this._dataSource.setDefaultSort();\n      return;\n    }\n    const column = this._dataSource.getColumnsToDisplay()[this._sortedBy.index];\n    this._dataSource.sortByField(column, this._sortedBy.order);\n  }\n\n  setSortedBy(index: number) {\n    this.toggleSort(index);\n  }\n\n  toggleSort(index: number) {\n    if (this._sortedBy.index == index) {\n      if (this._sortedBy.order == 'asc') {\n        this._sortedBy.order = 'desc';\n      } else {\n        this._sortedBy.index = -1;\n        this._sortedBy.order = 'asc';\n        this._dataSource.setDefaultSort();\n\n        return;\n      }\n    } else {\n      this._sortedBy.index = index;\n      this._sortedBy.order = 'asc';\n    }\n    this.sortByColumn();\n    const className = `.icon-${index}`;\n    const arrowIcon = document.querySelector(className);\n    if (arrowIcon) arrowIcon.classList.toggle('flipped');\n  }\n\n  showSortIcon(column: DmTableColumn) {\n    const spanId = 'th' + column.field;\n    const spanEl = this.headerSpans?.find(\n      (span: ElementRef) => span.nativeElement.id === spanId\n    );\n\n    if (spanEl) {\n      this.renderer.addClass(spanEl.nativeElement, 'show-sort-icon');\n    }\n  }\n\n  hideSortIcon(column: DmTableColumn): void {\n    const spanId = 'th' + column.field;\n    const spanEl = this.headerSpans?.find(\n      (span: ElementRef) => span.nativeElement.id === spanId\n    );\n\n    if (spanEl) {\n      this.renderer.removeClass(spanEl.nativeElement, 'show-sort-icon');\n    }\n  }\n\n  getButtonTooltip(button: DmTableActionButton, element: any): string {\n    return typeof button.tooltip === 'string'\n      ? button.tooltip\n      : button.tooltip(element);\n  }\n\n  applyFilter(value: string) {\n    this._dataSource.onFilter(value);\n  }\n\n  _filterPredicate(data: any, filter: string) {\n    if (this.filterPredicate) return this.filterPredicate(data, filter);\n    if (this._attributesToSearchIn.length === 0) {\n      return this._dataSource.getColumnsToDisplay().some((column) => {\n        if (\n          !data[column.field] &&\n          !this._dataSource.getValue(data[this._elementIdField], column)\n        )\n          return false;\n        return this._dataSource.getValue(data[this._elementIdField], column)\n          ? this._dataSource\n              .getValue(data[this._elementIdField], column)\n              .toString()\n              .toLowerCase()\n              .includes(filter.toLocaleLowerCase())\n          : data[column.field]\n              .toString()\n              .toLowerCase()\n              .includes(filter.toLocaleLowerCase());\n      });\n    } else {\n      return this._attributesToSearchIn.some((attr) => {\n        if (\n          !data[attr] &&\n          !this._dataSource.getValue(\n            data[this._elementIdField],\n            this._allColumns.find((column) => column.field == attr)!\n          )\n        )\n          return false;\n        return this._dataSource.getValue(\n          data[this._elementIdField],\n          this._allColumns.find((column) => column.field == attr)!\n        )\n          ? this._dataSource\n              .getValue(\n                data[this._elementIdField],\n                this._allColumns.find((column) => column.field == attr)!\n              )\n              .toString()\n              .toLowerCase()\n              .includes(filter.toLocaleLowerCase())\n          : data[attr]\n              .toString()\n              .toLowerCase()\n              .includes(filter.toLocaleLowerCase());\n      });\n    }\n  }\n\n  onPageSizeChange(event: MatOptionSelectionChange, option: number) {\n    if (event.isUserInput) {\n      this._dataSource.setElementsPerPage(option);\n      this._dataSource.changePage(0);\n      setTimeout(() => {\n        // this.setCellMinWidth();\n        this.cdr.detectChanges();\n      }, 100);\n    }\n  }\n\n  nextPage() {\n    this._dataSource.nextPage();\n  }\n  previousPage() {\n    this._dataSource.previousPage();\n  }\n  lastPage() {\n    this._dataSource.lastPage();\n  }\n  firstPage() {\n    this._dataSource.firstPage();\n  }\n\n  exportDataToExcel() {\n    this._exportMode = true;\n    // setTimeout(() => {\n    //   this.exportAsExcelConfig.elementIdOrContent = 'tableToExport';\n    //   this.exportAsService\n    //     .save(this.exportAsExcelConfig, 'table')\n    //     .subscribe(() => {\n    //       console.log('saved!');\n    //       this._exportMode = false;\n    //     });\n    // }, 1000);\n    // this._dataSource.getDataToPrint();\n    // const result: { [key: string]: any }[] = [];\n    // const data = this._dataSource.getDataSourcePrint();\n    // data.forEach((element, i) => {\n    //   const row: { [key: string]: any } = {};\n    //   const columns = this._dataSource.getColumnsToDisplay();\n    //   columns.forEach((column) => {\n    //     if (column.type === 'actions') return;\n    //     if (column.type === '#') {\n    //       row[column.field] = i + 1;\n    //       return;\n    //     }\n    //     let value;\n    //     value = element[column.field];\n    //     // remove all commas (,) from the value\n    //     if (typeof value === 'string') {\n    //       value = value.replace(/,/g, '');\n    //     }\n    //     row[column.field] = value;\n    //   });\n    //   result.push(row);\n    // });\n    // const columns = this._dataSource\n    //   .getColumnsToDisplay()\n    //   .filter((column) => {\n    //     return column.type !== 'actions';\n    //   })\n    //   .map((column) => {\n    //     return column.name;\n    //   });\n    // this.excelService.exportAsExcelFile(result, columns, 'result');\n  }\n\n  printDataSource() {\n    this._dataSource.getDataToPrint();\n    const columnsToDisplayPrint = this._dataSource.getColumnsToPrint();\n    const dataSourcePrint = this._dataSource._printPrefs.data;\n\n    const title = this._dataSource._printPrefs.printData.title;\n    const footer = this._dataSource._printPrefs?.printData?.footer;\n    const documentTitle =\n      this._dataSource._printPrefs?.printData?.documentTitle;\n    const documnetLogo = this._dataSource._printPrefs?.printData?.imgSrc;\n\n    let rowCounter = 0;\n\n    // const printWindow = window.open(\n    //   'send to print',\n    //   '_blank',\n    //   'toolbar=0,location=0,menubar=0' +\n    //     ',scrollbars=1,status=1' +\n    //     ',width=' +\n    //     screen.availWidth +\n    //     ',height=' +\n    //     screen.availHeight +\n    //     'left=20,top=20,width=' +\n    //     (screen.availWidth - 40) +\n    //     ',height=' +\n    //     (screen.availHeight - 40)\n    // );\n\n    // if (!printWindow) return;\n\n    // printWindow.document.write(\n    const htmlToPrint = `\n      <html>\n        <head>\n          <title>${documentTitle}</title>\n          <style>\n            body {\n              direction: rtl;\n              text-align: right;\n              position: relative;\n              min-height: 90vh;\n              margin: 0;\n              padding-bottom: 4rem; /* Footer height */\n            }\n\n            /* סגנונות הטבלה */\n            .branchesTable {\n              width: 100%;\n            }\n            .branchesTable table {\n              width: 100%;\n              border-collapse: collapse;\n            }\n            .branchesTable th, .branchesTable td {\n              border: 1px solid #ddd;\n              padding: 8px;\n            }\n            .branchesTable th {\n              background-color: #f2f2f2;\n              color: black;\n            }\n            .text-censtartter {\n              text-align: center;\n            }\n\n            /* עיצוב הכותרת והבעלים */\n            .fs-3 {\n              font-size: 1.75rem;\n              font-weight: bold;\n            }\n            .fs-5 {\n              font-size: 1.25rem;\n              font-weight: bold;\n            }\n          \n            /* סגנונות הלוגו */\n            .logoToPrint {\n              max-width: 100%;\n              height: auto;\n            }\n\n            /* הבהרת הטקסט */\n            .fw-bolder {\n              font-weight: bold;\n            }\n\n            footer {\n              position: absolute;\n              right: 0;\n              bottom: 0;\n              left: 0;\n              padding: 1rem;\n              text-align: center;\n              color: gray;\n              font-size: 12px;\n            }\n            .logoToPrint {\n              width: 100px;\n              height: 100px;\n            }\n            .headerToPrint {\n              display: flex;\n              justify-content: space-between;\n              align-items: center;\n              border-bottom: 1px solid #000; /* או כל צבע אחר שאתה רוצה לקבוע לגבול התחתון */\n              padding-bottom: 20px; /* או כל מרחק אחר שאתה רוצה להגדיר מתחת לכותרת */\n              }\n\n              .headerToPrint .col-8 {\n                  flex: 0 0 66.666667%; /* משמש כדי להחליף את .col-8 ב-Bootstrap */\n                  max-width: 66.666667%; /* משמש כדי להחליף את .col-8 ב-Bootstrap */\n              }\n\n              .headerToPrint .col-4 {\n                  flex: 0 0 33.333333%; /* משמש כדי להחליף את .col-4 ב-Bootstrap */\n                  max-width: 33.333333%; /* משמש כדי להחליף את .col-4 ב-Bootstrap */\n                  display: flex;\n                  justify-content: flex-end;\n              }\n\n              .headerToPrint .fs-3 {\n                  font-size: 2rem; /* המידה שאתה רוצה להגדיר למלל הראשון */\n                  font-weight: bold;\n              }\n\n              .headerToPrint .fs-5 {\n                  font-size: 1.25rem; /* המידה שאתה רוצה להגדיר למלל השני */\n                  font-weight: bold;\n              }\n\n              table {\n                  width: 100%;\n                  border-collapse: collapse;\n              }\n\n              table th, table td {\n                  border: 1px solid #ddd;\n                  padding: 8px;\n              }\n\n              .logoImg{\n                  display: flex;\n                  justify-content: center;\n                  margin-bottom: 20px;\n                  img {\n                      max-height: 250px;\n                      width: auto;\n                      height: auto;\n                      max-width: 100%;\n                  }\n              }\n\n          </style>\n\n        </head>\n       \n        <body>          \n        <div id=\"print-section\">\n        <div class=\"logoImg\">${\n          documnetLogo\n            ? `<img src=\"${this.getImgFromUrl(documnetLogo)}\" alt=\"logo\" />`\n            : ''\n        }\n          \n        </div>\n        <div class=\"header d-flex justify-content-center\">\n          <div class=\"title\">\n            <h1>${title}</h1>\n          </div>\n        </div>\n        ${this.getTable(columnsToDisplayPrint, dataSourcePrint, rowCounter)}\n        \n      </div>\n      \n          <footer>\n            <div class=\"text-censtartter fw-bolder\">${footer}</div>\n          </footer>          \n        </body>\n      </html>\n    `;\n    // );\n    this.htmlPrintService.printHtml(htmlToPrint);\n    // setTimeout(() => {\n    //   printWindow.document.close();\n    //   printWindow.focus();\n    //   printWindow.print();\n    //   printWindow.close();\n    // }, 1500);\n  }\n\n  getTable(\n    columnsToDisplayPrint: DmTableColumn[],\n    dataSourcePrint: DmTablePrintPrefs['data'],\n    rowCounter: number\n  ) {\n    return `<table>\n    <thead>\n      <tr>\n        ${columnsToDisplayPrint\n          .map(\n            (column) =>\n              `<th [style.border]=\"'1px solid #000'\">${column.name}</th>`\n          )\n          .join('')}\n      </tr>\n    </thead>\n    <tbody>\n    ${dataSourcePrint.dataSource\n      .map(\n        (element) =>\n          `\n      <tr>${columnsToDisplayPrint\n        .map((column) =>\n          column.type == '#'\n            ? `<td [style.border]=\"'1px solid #000'\">${++rowCounter}</td>`\n            : `\n        <td\n          [style.border]=\"'1px solid #000'\"\n        >\n        ${element[column.field]}</td>`\n        )\n        .join('')}</tr>`\n      )\n      .join('')}\n      ${\n        dataSourcePrint.totalRow !== undefined\n          ? `<tr>\n        ${columnsToDisplayPrint\n          .map((column) =>\n            dataSourcePrint.totalRow![column.field]\n              ? `<td [style.border]=\"'1px solid #000'\">${\n                  dataSourcePrint.totalRow![column.field] || ''\n                }</td>`\n              : `<td [style.border]=\"'1px solid #000'\"></td>`\n          )\n          .join('')}\n      </tr>`\n          : ''\n      }\n    </tbody>\n  </table>`;\n  }\n\n  getImgFromUrl(url: string) {\n    const img = new Image();\n    img.src = url;\n    return img.src;\n  }\n}\n\nexport interface DmObject {\n  [key: string]: any;\n}\n\ninterface DmTableDataToPrint {\n  dataSource: any[];\n  totalRow?: {\n    [key: string]: string;\n  };\n}\nexport class DmCmpsTableDataSource<T> {\n  onWidthAdjustmentRequested = new EventEmitter<void>();\n  private data: T[];\n  filter: string;\n  resultData: T[];\n  private sortedData: T[];\n  private filteredData: T[];\n  private filteredDataByFieldValue: T[] = [];\n  private dataForTotalFunction: T[] = [];\n\n  private fieldToFilterBy: string = '';\n  private fieldFilterValue: any = 'dm-cmps-all';\n  private filterSelectBooleanOptions: boolean = false;\n\n  private elementsPerPage: number = -1;\n  private currentPage: number = 0;\n  private paginator: boolean = false;\n  private _autoPaginatorAbove: number = 100;\n  private _paginatorData: DmTablePaginator = {\n    pageSize: 25,\n    pageSizeOptions: [10, 25, 50],\n    showFirstLastButtons: true,\n  };\n  private _paginatorDetails: DmTablePaginator['details'] = {};\n\n  private _tableColumns: _DmTableColumns = new _DmTableColumns();\n\n  private valuesToShow: DmTableValuesToShowMap = new Map();\n\n  private elementIdField: string = '_id';\n\n  private _applyArchive: boolean = false;\n\n  private _archive: boolean = false;\n\n  private _totalRow: boolean = false;\n\n  private _archiveField: string = 'isDeleted';\n\n  private _archiveValue: any = true;\n\n  private _dataToPrint: DmTableDataToPrint | undefined;\n\n  _printPrefs: DmTablePrintPrefs = {\n    data: {\n      dataSource: [],\n      totalRow: {},\n    },\n    printData: {\n      title: 'document',\n      footer: '',\n      documentTitle: 'document',\n    },\n  };\n\n  _printable: boolean = false;\n\n  filterPredicate?: (data: any, filter: string) => boolean;\n\n  constructor(data?: T[]) {\n    this.data = data ? [...data] : [];\n    this.resultData = [];\n    this.sortedData = this.getData();\n    this.filter = '';\n    this.filteredData = [];\n    this.filteredDataByFieldValue = [];\n    this.changePage(0);\n    this.renderPaginator();\n  }\n\n  setTotalRow(value: boolean) {\n    this._totalRow = value;\n  }\n\n  getElementIndex(element: any) {\n    return this.data.findIndex(\n      (el: any) => el[this.elementIdField] === element[this.elementIdField]\n    );\n  }\n\n  getNumber(text: string | number): number {\n    if (typeof text === 'number') return text;\n    const cleanedText = (text || '').replace(/[^\\d.]/g, '');\n    const num = Number(cleanedText);\n\n    return isNaN(num) ? 0 : num;\n  }\n\n  getColumnsToDisplay() {\n    return this._tableColumns._columnsToDisplay;\n  }\n  count = 0;\n  getColumnsToDisplayTest() {\n    return this._tableColumns._columnsToDisplay;\n  }\n\n  getColumnsToPrint() {\n    return this.getColumnsToDisplay().filter((column) => {\n      return column.type !== 'actions';\n    });\n  }\n\n  setColumnsToDisplay(columnsToDisplay: DmTableColumn[]) {\n    this._tableColumns._columnsToDisplay = columnsToDisplay;\n  }\n\n  getDmTableColumns() {\n    return this._tableColumns;\n  }\n\n  setPrintData(data: DmTablePrintData) {\n    this._printPrefs.printData = data;\n  }\n\n  // setPrintColumns(columns?: string[]) {\n  //   if (columns && columns.length > 0) {\n  //     this._printPrefs!.columnsToPrint = [\n  //       ...this._tableColumns!.columns,\n  //     ].filter((column) => {\n  //       return columns.includes(column.field);\n  //     });\n  //   } else {\n  //     if (\n  //       this._tableColumns?.displayedColumns &&\n  //       this._tableColumns?.displayedColumns.length > 0\n  //     ) {\n  //       this._printPrefs!.columnsToPrint = [\n  //         ...this._tableColumns!.columns,\n  //       ].filter((column) => {\n  //         return this._tableColumns!.displayedColumns!.includes(column.field);\n  //       });\n  //     } else {\n  //       this._printPrefs!.columnsToPrint =\n  //         this._tableColumns?.columns.filter((col) => col.type !== 'actions') ||\n  //         [];\n  //     }\n  //   }\n  // }\n\n  applyArchive(value: boolean) {\n    this._applyArchive = value;\n  }\n\n  setArchive(value: boolean) {\n    this._archive = value;\n    this.setDefaultSort();\n    this.changePage(0);\n  }\n\n  getArchive() {\n    return this._archive;\n  }\n\n  getArchiveValue() {\n    return this._archiveValue;\n  }\n\n  setArchiveField(field: string) {\n    this._archiveField = field;\n    this.setDefaultSort();\n    this.changePage(0);\n  }\n\n  setArchiveValue(value: any) {\n    this._archiveValue = value;\n    this.setDefaultSort();\n    this.changePage(0);\n  }\n\n  // requestWidthAdjustment() {\n  //   this.onWidthAdjustmentRequested.emit();\n  // }\n\n  setTableColumns(columns: DmTableColumns) {\n    this._tableColumns = new _DmTableColumns(columns);\n    this.setValuesToShow();\n  }\n\n  setElementIdField(field: string) {\n    this.elementIdField = field;\n  }\n\n  setValuesToShow() {\n    const data = [...this.data];\n    if (!this._tableColumns || !data) return;\n    data.forEach((element: any) => {\n      const values: DmTableValuesToShow = new Map();\n      this._tableColumns.getColumns().forEach((column) => {\n        if (column.valueToShow) {\n          values.set(column.field, column.valueToShow(element));\n        } else if (column.type === 'date') {\n          const date = DmCmpsDateService.getDateString(\n            element[column.field],\n            column.dateFormat || 'dd/MM/yyyy'\n          );\n          values.set(column.field, date);\n        }\n      });\n      this.valuesToShow.set(element[this.elementIdField], values);\n    });\n  }\n\n  getValue(elementId: string, column: DmTableColumn): string | string[] {\n    const element = this.valuesToShow.get(elementId);\n    if (!element) return '';\n\n    return element.get(column.field) || '';\n  }\n\n  getFixedNumber = (fixed: number, num: string | number): string => {\n    if (!num) return '';\n    if (fixed === -1) return this.getNumber(num).toString();\n    const result = this.getNumber(num).toFixed(fixed);\n    return result;\n  };\n\n  getAvg(column: DmTableColumn): string {\n    const data = this.getTotalData();\n    if (data.length === 0) return '';\n    let sum = 0;\n    data.forEach((element: any) => {\n      const value = this.getNumber(\n        this.getValue(element[this.elementIdField], column) ||\n          element[column.field]\n      );\n\n      sum += value;\n    });\n    return this.getFixedNumber(column.fixedNumber || -1, sum / data.length);\n  }\n\n  getSum(column: DmTableColumn): string {\n    const data = this.getTotalData();\n    if (data.length === 0) return '';\n    let sum = 0;\n    data.forEach((element: any) => {\n      const value = this.getNumber(\n        this.getValue(element[this.elementIdField], column) ||\n          element[column.field]\n      );\n\n      sum += value;\n    });\n    return this.getFixedNumber(column.fixedNumber || -1, sum);\n  }\n\n  getCount(column: DmTableColumn): string {\n    const data = this.getTotalData();\n    return data.length.toString();\n  }\n\n  getMax(column: DmTableColumn): string {\n    const data = this.getTotalData();\n    if (data.length === 0) return '';\n    let max = 0;\n    data.forEach((element: any) => {\n      const value = this.getNumber(\n        this.getValue(element[this.elementIdField], column) ||\n          element[column.field]\n      );\n\n      if (value > max) max = value;\n    });\n    return this.getFixedNumber(column.fixedNumber || -1, max);\n  }\n\n  getMin(column: DmTableColumn): string {\n    const data = this.getTotalData();\n    if (data.length === 0) return '';\n    let min = 0;\n    data.forEach((element: any, i) => {\n      const value = this.getNumber(\n        this.getValue(element[this.elementIdField], column) ||\n          element[column.field]\n      );\n\n      if (i === 0) {\n        min = value;\n      } else if (value < min) {\n        min = value;\n      }\n    });\n    return this.getFixedNumber(column.fixedNumber || -1, min);\n  }\n\n  applyPaginator() {\n    this.paginator = true;\n  }\n\n  removePaginator() {\n    this.paginator = false;\n  }\n\n  _getPaginatorAppearance() {\n    return this.paginator;\n  }\n\n  _getPaginatorDetails() {\n    return this._paginatorDetails;\n  }\n\n  renderPaginator() {\n    if (this._autoPaginatorAbove <= this.data.length) {\n      this.applyPaginator();\n      this.changePage(0);\n    }\n  }\n\n  getPaginatorData(): DmTablePaginator {\n    return this._paginatorData;\n  }\n\n  setPaginatorData(paginatorData: DmTablePaginator) {\n    this._paginatorData = paginatorData;\n    if (paginatorData.details) {\n      this._paginatorDetails = paginatorData.details;\n    }\n    this.changePage(0);\n  }\n\n  setAutoPaginatorAbove(length: number) {\n    this._autoPaginatorAbove = length;\n    this.renderPaginator();\n  }\n\n  setCurrentPage(page: number) {\n    this.currentPage = page;\n  }\n\n  getElementsPerPage() {\n    return this._paginatorData.pageSize;\n  }\n\n  setElementsPerPage(value: number) {\n    this._paginatorData.pageSize = value;\n  }\n\n  _firstIndexInPage() {\n    return this.currentPage * this._paginatorData.pageSize + 1;\n  }\n\n  _lastIndexInPage() {\n    return this.currentPage * this._paginatorData.pageSize +\n      this._paginatorData.pageSize >\n      this._totalElements()\n      ? this._totalElements()\n      : this.currentPage * this._paginatorData.pageSize +\n          this._paginatorData.pageSize;\n  }\n\n  _totalElements() {\n    return this.filteredData && this.filteredData.length > 0\n      ? this.filteredData.length\n      : this.filteredDataByFieldValue.length > 0 ||\n        (this.fieldFilterValue != 'dm-cmps-all' &&\n          this.filteredDataByFieldValue.length == 0)\n      ? this.filteredDataByFieldValue.length\n      : this.sortedData.length;\n  }\n\n  _pageSize() {\n    return this._paginatorData.pageSize;\n  }\n\n  _pageSizeOptions() {\n    return this._paginatorData.pageSizeOptions;\n  }\n\n  private getMaxPagesNumnber() {\n    if (this.filteredData && this.filteredData.length > 0) {\n      return Math.ceil(this.filteredData.length / this._paginatorData.pageSize);\n    }\n    return Math.ceil(this.sortedData.length / this._paginatorData.pageSize);\n  }\n\n  nextPage() {\n    if (this._paginatorData.pageSize === -1) return;\n    if (this.getMaxPagesNumnber() === this.currentPage + 1) return;\n    this.changePage(++this.currentPage);\n  }\n\n  previousPage() {\n    if (this._paginatorData.pageSize === -1) return;\n    if (this.currentPage === 0) return;\n    this.changePage(--this.currentPage);\n  }\n\n  lastPage() {\n    if (this._paginatorData.pageSize === -1) return;\n    this.changePage(this.getMaxPagesNumnber() - 1);\n  }\n\n  firstPage() {\n    if (this._paginatorData.pageSize === -1) return;\n    this.changePage(0);\n  }\n\n  initIndexedDB(data: T[]) {\n    DmTableIndexedDBService.openDatabaseWithSchema('DmCmpsTableDB', 1, [\n      {\n        name: 'dm-cmps-table',\n        keyPath: 'id',\n        autoIncrement: true,\n      },\n    ]);\n  }\n\n  getResultData() {\n    return this.filteredData.length > 0\n      ? this.filteredData\n      : this.getFilteredDataByFieldValue();\n  }\n\n  getTotalData() {\n    return this.dataForTotalFunction;\n  }\n\n  changePage(page: number) {\n    if (\n      !this.paginator &&\n      this.filteredData.length == 0 &&\n      this.filter === ''\n    ) {\n      this.resultData = this.getResultData();\n      this.dataForTotalFunction = this.getResultData();\n      // this.requestWidthAdjustment();\n      return;\n    }\n    if (this._paginatorData.pageSize === -1) {\n      this.resultData = this.getResultData();\n      this.dataForTotalFunction = this.getResultData();\n\n      // this.requestWidthAdjustment();\n      return;\n    }\n    if (\n      (this.filteredData && this.filteredData.length > 0) ||\n      this.filter !== ''\n    ) {\n      this.currentPage = page;\n      let stratIndex = page * this._paginatorData.pageSize;\n      const data = this.filteredData.slice(\n        stratIndex,\n        stratIndex + this._paginatorData.pageSize\n      );\n      this.resultData = data;\n      this.dataForTotalFunction = this.filteredData;\n    } else {\n      this.currentPage = page;\n      let stratIndex = page * this._paginatorData.pageSize;\n      const data = this.getFilteredDataByFieldValue().slice(\n        stratIndex,\n        stratIndex + this._paginatorData.pageSize\n      );\n      this.resultData = data;\n      this.dataForTotalFunction = this.getFilteredDataByFieldValue();\n    }\n    // this.requestWidthAdjustment();\n  }\n  setDefaultSort() {\n    this.sortedData = this.getData();\n    this.changePage(this.currentPage);\n  }\n\n  sortByField(column: DmTableColumn | undefined, direction: 'asc' | 'desc') {\n    const field = column?.field;\n    if (!field) {\n      this.sortedData = this.getData();\n      this.changePage(this.currentPage);\n      return;\n    }\n    if (column.sortFunction && typeof column.sortFunction == 'function') {\n      this.sortedData.sort((a: T, b: T) => {\n        return column.sortFunction ? column.sortFunction(a, b, direction) : 0;\n      });\n    } else {\n      this.sortedData.sort((a: T, b: T) => {\n        let valA =\n          this.getValue((a as any)[this.elementIdField], column) ||\n          (a as any)[field];\n        let valB =\n          this.getValue((b as any)[this.elementIdField], column) ||\n          (b as any)[field];\n\n        if (valA == null) valA = direction === 'asc' ? -Infinity : Infinity;\n        if (valB == null) valB = direction === 'asc' ? -Infinity : Infinity;\n\n        if (typeof valA === 'string' && typeof valB === 'string') {\n          valA = valA.toLowerCase();\n          valB = valB.toLowerCase();\n        }\n\n        if (column.valueType === 'number') {\n          valA = this.getNumber(valA);\n          valB = this.getNumber(valB);\n        } else if (column.valueType === 'date') {\n          valA = new Date(valA).getTime();\n          valB = new Date(valB).getTime();\n        } else if (column.valueType === 'boolean') {\n          valA = valA ? 1 : 0;\n          valB = valB ? 1 : 0;\n        } else if (column.valueType === 'string') {\n          valA = valA.toLowerCase();\n          valB = valB.toLowerCase();\n        }\n\n        if (valA > valB) {\n          return direction === 'asc' ? 1 : -1;\n        } else if (valA < valB) {\n          return direction === 'asc' ? -1 : 1;\n        }\n        return 0;\n      });\n    }\n    this.changePage(this.currentPage);\n  }\n\n  setDataSource(data: T[]) {\n    this.data = [...data] || [];\n    this.resultData = [];\n    this.sortedData = this.getData();\n    this.filter = '';\n    this.filteredData = [];\n    this.filteredDataByFieldValue = [];\n    this.renderPaginator();\n    this.setCurrentPage(0);\n    this.changePage(this.currentPage);\n    this.setValuesToShow();\n  }\n\n  private getSortedData() {\n    return [...this.sortedData];\n  }\n\n  private getFilteredDataByFieldValue() {\n    this._filterByFieldAndValue();\n    if (this.filteredDataByFieldValue.length > 0) {\n      return [...this.filteredDataByFieldValue];\n    }\n    if (this.fieldFilterValue != 'dm-cmps-all') return [];\n    return [...this.sortedData];\n  }\n\n  getData() {\n    if (this._applyArchive) {\n      if (this._archive) {\n        return [...this.data].filter((item: any) => {\n          return item[this._archiveField] == this._archiveValue;\n        });\n      }\n      return [...this.data].filter((item: any) => {\n        return item[this._archiveField] !== this._archiveValue;\n      });\n    }\n    return [...this.data];\n  }\n\n  onFilter(filter: string) {\n    this.filter = filter;\n    this._onFilter();\n    this.setCurrentPage(0);\n    this.changePage(this.currentPage);\n  }\n\n  _onFilter() {\n    if (this.filter === '' || this.filter === undefined) {\n      this.filteredData = [];\n    } else {\n      if (this.filteredDataByFieldValue.length > 0) {\n        this.filteredData = this.filteredDataByFieldValue.filter((item) => {\n          return this.filterPredicate\n            ? this.filterPredicate(item, this.filter)\n            : false;\n        });\n      } else {\n        this.filteredData = this.getSortedData().filter((item) => {\n          return this.filterPredicate\n            ? this.filterPredicate(item, this.filter)\n            : false;\n        });\n      }\n    }\n  }\n\n  filterByFieldAndValue(field: string, value: any, booleanOptions: boolean) {\n    this.filter = '';\n    this._onFilter();\n    this.filterSelectBooleanOptions = booleanOptions;\n    this.fieldToFilterBy = field;\n    this.fieldFilterValue = value;\n    this._filterByFieldAndValue();\n    this.setCurrentPage(0);\n    this.changePage(this.currentPage);\n  }\n\n  _filterByFieldAndValue() {\n    if (this.fieldFilterValue == 'dm-cmps-all') {\n      this.filteredData = [];\n      this.filteredDataByFieldValue = [];\n      return;\n    }\n    if (this.filterSelectBooleanOptions) {\n      this.filteredDataByFieldValue = this.getSortedData().filter((item) => {\n        if (this.fieldFilterValue) return (item as any)[this.fieldToFilterBy];\n        else return !(item as any)[this.fieldToFilterBy];\n      });\n      return;\n    }\n    this.filteredDataByFieldValue = this.getSortedData().filter((item) => {\n      return (item as any)[this.fieldToFilterBy] === this.fieldFilterValue;\n    });\n  }\n\n  getDataSourcePrint() {\n    const data = structuredClone(this.getResultData());\n\n    data.forEach((element: any) => {\n      this._tableColumns.getColumns().forEach((column) => {\n        if (column.type === 'date') {\n          const date = DmCmpsDateService.getDateString(\n            element[column.field],\n            column.dateFormat || 'yyyy/MM/dd'\n          );\n          element[column.field] = date;\n        } else if (column.type === 'slideToggle') {\n          if (column.slideToggleDetails) {\n            element[column.field] = element[column.field]\n              ? column.slideToggleDetails.trueLabel\n              : column.slideToggleDetails.falseLabel;\n          }\n        } else if (column.valueToShow) {\n          element[column.field] =\n            this.getValue(element[this.elementIdField], column) ||\n            element[column.field];\n        }\n      });\n    });\n    return data;\n  }\n\n  getTotalRowToPrint(): DmTableDataToPrint['totalRow'] {\n    if (!this._totalRow) return undefined;\n    const totalRow: { [key: string]: string } = {};\n    this._tableColumns.getColumns().forEach((column) => {\n      if (column.totalRow) {\n        let label = column.totalRow?.label || '';\n        let value = '';\n        let suffix = column.totalRow?.suffix || '';\n        if (column.totalRow.type === 'custom') {\n          if (column.totalRow.totalFunction) {\n            value = column.totalRow.totalFunction(this.getTotalData());\n          }\n        } else if (column.totalRow.type === 'avg') {\n          value = this.getAvg(column);\n        } else if (column.totalRow.type === 'sum') {\n          value = this.getSum(column);\n        } else if (column.totalRow.type === 'count') {\n          value = this.getCount(column);\n        } else if (column.totalRow.type === 'max') {\n          value = this.getMax(column);\n        } else if (column.totalRow.type === 'min') {\n          value = this.getMin(column);\n        }\n        totalRow[column.field] = `${label} ${value} ${suffix}`;\n      }\n    });\n    return totalRow;\n  }\n\n  getDataToPrint() {\n    this._printPrefs.data.dataSource = this.getDataSourcePrint();\n    this._printPrefs.data.totalRow = this.getTotalRowToPrint() || undefined;\n  }\n}\n\nclass _DmTableColumns {\n  private columns: DmTableColumn[] = [];\n  private displayedColumns?: string[];\n  _columnsToDisplay: DmTableColumn[] = [];\n  actionButtonMenuMaxWidth?: number;\n\n  constructor(tableColumns?: DmTableColumns) {\n    this.columns = tableColumns?.columns || [];\n    this.displayedColumns =\n      tableColumns?.displayedColumns ||\n      this.columns.map((col) => col.field) ||\n      [];\n    if (tableColumns && tableColumns.actionButtonMenuMaxWidth) {\n      this.actionButtonMenuMaxWidth = tableColumns.actionButtonMenuMaxWidth;\n    }\n  }\n\n  getColumns() {\n    return this.columns;\n  }\n\n  getDisplayedColumns() {\n    return this.displayedColumns;\n  }\n\n  setColumns(columns: DmTableColumn[]) {\n    this.columns = columns;\n  }\n\n  setDisplayedColumns(columns: string[]) {\n    this.displayedColumns = columns;\n  }\n}\n","<div class=\"dm-cmps-table-component-wrapper\">\n  <ng-content></ng-content>\n\n  <div class=\"dm-cmps-table-toolbar row row-cols-auto\" *ngIf=\"_showToolbar\">\n    <div class=\"col\">\n      <dm-cmps-input\n        *ngIf=\"_searchable\"\n        [label]=\"searchLabel\"\n        [placeHolder]=\"searchPlaceholder\"\n        (keyup)=\"search($event)\"\n        [outline]=\"_searchOutline\"\n        [formControl]=\"searchCtrl\"\n        clearButton\n        [onClearInputClick]=\"_onClearInputClick.bind(this)\"\n      />\n    </div>\n\n    <div class=\"col\">\n      <dm-cmps-select\n        *ngIf=\"_filterSelect\"\n        [label]=\"filterSelectLabel\"\n        [optionName]=\"filterSelectOptionName\"\n        [optionValue]=\"filterSelectOptionValue\"\n        [options]=\"_filterSelectOptions\"\n        [placeHolder]=\"filterSelectPlaceholder\"\n        [outline]=\"_filterSelectOutline\"\n        [searchable]=\"_filterSelectSearchable\"\n        [searchLabel]=\"_filterSelectSearchLabel\"\n        [selected]=\"'dm-cmps-all'\"\n        (selectionChange)=\"onFilterSelectionChange($event)\"\n      />\n    </div>\n    <div class=\"col\">\n      <dm-cmps-select\n        *ngIf=\"_columnsControl\"\n        optionName=\"name\"\n        optionValue=\"field\"\n        [options]=\"_allColumns\"\n        [formControl]=\"_displayedColumnsCtrl\"\n        wrapperClass=\"me-2\"\n        showSelectAll\n        [label]=\"columnsControlLabel\"\n        [outline]=\"_columnsControlOutline\"\n        [searchable]=\"_columnsControlSearchable\"\n        [searchLabel]=\"columnsControlSearchLabel\"\n        icon=\"'view_week'\"\n        multiple\n        (selectionChange)=\"onColumnsSelectionChange($event)\"\n      />\n    </div>\n    <div class=\"col flex-grow-1 d-flex justify-content-end\">\n      <button\n        *ngIf=\"_exportToExcel\"\n        mat-icon-button\n        [matTooltip]=\"exportToExcelTooltip\"\n        [matTooltipPosition]=\"exportToExcelTooltipPosition\"\n        (click)=\"exportDataToExcel()\"\n      >\n        <svg\n          xmlns=\"http://www.w3.org/2000/svg\"\n          width=\"16\"\n          height=\"16\"\n          fill=\"currentColor\"\n          class=\"bi bi-filetype-xlsx\"\n          viewBox=\"0 0 16 16\"\n          [style.color]=\"exportToExcelButtonColor\"\n        >\n          <path\n            fill-rule=\"evenodd\"\n            d=\"M14 4.5V11h-1V4.5h-2A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v9H2V2a2 2 0 0 1 2-2h5.5zM7.86 14.841a1.13 1.13 0 0 0 .401.823q.195.162.479.252.284.091.665.091.507 0 .858-.158.355-.158.54-.44a1.17 1.17 0 0 0 .187-.656q0-.336-.135-.56a1 1 0 0 0-.375-.357 2 2 0 0 0-.565-.21l-.621-.144a1 1 0 0 1-.405-.176.37.37 0 0 1-.143-.299q0-.234.184-.384.188-.152.513-.152.214 0 .37.068a.6.6 0 0 1 .245.181.56.56 0 0 1 .12.258h.75a1.1 1.1 0 0 0-.199-.566 1.2 1.2 0 0 0-.5-.41 1.8 1.8 0 0 0-.78-.152q-.44 0-.777.15-.336.149-.527.421-.19.273-.19.639 0 .302.123.524t.351.367q.229.143.54.213l.618.144q.31.073.462.193a.39.39 0 0 1 .153.326.5.5 0 0 1-.085.29.56.56 0 0 1-.255.193q-.168.07-.413.07-.176 0-.32-.04a.8.8 0 0 1-.249-.115.58.58 0 0 1-.255-.384zm-3.726-2.909h.893l-1.274 2.007 1.254 1.992h-.908l-.85-1.415h-.035l-.853 1.415H1.5l1.24-2.016-1.228-1.983h.931l.832 1.438h.036zm1.923 3.325h1.697v.674H5.266v-3.999h.791zm7.636-3.325h.893l-1.274 2.007 1.254 1.992h-.908l-.85-1.415h-.035l-.853 1.415h-.861l1.24-2.016-1.228-1.983h.931l.832 1.438h.036z\"\n          />\n        </svg>\n      </button>\n      <button\n        *ngIf=\"_dataSource._printable\"\n        mat-icon-button\n        [matTooltip]=\"printTooltip\"\n        [matTooltipPosition]=\"printTooltipPosition\"\n        (click)=\"printDataSource()\"\n      >\n        <mat-icon [style.color]=\"printButtonColor\">\n          {{ printButtonIcon }}\n        </mat-icon>\n      </button>\n      <button\n        *ngIf=\"_archive && !_hideArchive\"\n        mat-icon-button\n        matTooltip=\"{{\n          _dataSource.getArchive() ? nonArchiveTooltip : archiveTooltip\n        }}\"\n        [matTooltipPosition]=\"archiveTooptipPosition\"\n        (click)=\"_toggleArchive()\"\n      >\n        <mat-icon\n          [style.color]=\"\n            _dataSource.getArchive() ? nonArchiveColor : archiveColor\n          \"\n        >\n          {{ _dataSource.getArchive() ? nonArchiveIcon : archiveIcon }}\n        </mat-icon>\n      </button>\n      <button\n        *ngIf=\"_addButton\"\n        mat-icon-button\n        [matTooltip]=\"addButtonTooltip\"\n        [matTooltipPosition]=\"addButtonTooltipPosition\"\n        (click)=\"_onAddButtonClick()\"\n      >\n        <mat-icon [style.color]=\"addButtonColor\">\n          {{ addButtonIcon }}\n        </mat-icon>\n      </button>\n    </div>\n  </div>\n  <div\n    class=\"dm-cmps-table-wrapper\"\n    [style.max-height]=\"tableStyle.max_height ? tableStyle.max_height : 'none'\"\n    [style.overflow-y]=\"tableStyle.max_height ? 'scroll' : 'auto'\"\n  >\n    <table\n      #tableElement\n      class=\"dm-cmps-table-classic dm-cmps-table-set-overflow-x-auto\"\n      [style.border-radius]=\"\n        tableStyle.table_border_radius ? tableStyle.table_border_radius : '0px'\n      \"\n    >\n      <thead\n        style=\"\n          position: sticky !important;\n          top: 0 !important;\n          z-index: 1 !important;\n        \"\n        class=\"dm-cmps-table-header\"\n        [ngStyle]=\"{\n          'box-shadow': '0px 1px 0px 0px #0000001f'\n        }\"\n        cdkDropList\n        (cdkDropListDropped)=\"columnDrop($event)\"\n        cdkDropListOrientation=\"horizontal\"\n        cdkDropListLockAxis=\"x\"\n      >\n        <tr\n          #headerRow\n          [style.background-color]=\"\n            headerHovered\n              ? tableStyle.header?.hover_style?.background_color\n                ? tableStyle.header?.hover_style?.background_color\n                : tableStyle.header?.style?.background_color\n                ? tableStyle.header?.style?.background_color\n                : 'white'\n              : tableStyle.header?.style?.background_color\n              ? tableStyle.header?.style?.background_color\n              : 'white'\n          \"\n        >\n          <!-- [style.max-width]=\"'none'\"\n          [style.min-width]=\"\n            column.type === 'actions'\n              ? (_actionButtonsTotalWidth >= _cellMinWidth + 30\n                  ? _actionButtonsTotalWidth\n                  : _cellMinWidth) + 'px !important'\n              : column.type === '#'\n              ? '70px !important'\n              : _cellMinWidth + 'px !important'\n          \" -->\n          <th\n            *ngIf=\"dragableRows && dragableRowsHandler\"\n            [style.font-size]=\"\n              headerHovered\n                ? tableStyle.header?.hover_style?.font_size\n                  ? tableStyle.header?.hover_style?.font_size\n                  : tableStyle.header?.style?.font_size\n                  ? tableStyle.header?.style?.font_size\n                  : '1rem'\n                : tableStyle.header?.style?.font_size\n                ? tableStyle.header?.style?.font_size\n                : '1rem'\n            \"\n            [style.font-weight]=\"\n              headerHovered\n                ? tableStyle.header?.hover_style?.font_weight\n                  ? tableStyle.header?.hover_style?.font_weight\n                  : tableStyle.header?.style?.font_weight\n                  ? tableStyle.header?.style?.font_weight\n                  : 'bold'\n                : tableStyle.header?.style?.font_weight\n                ? tableStyle.header?.style?.font_weight\n                : 'bold'\n            \"\n            [style.background-color]=\"\n              headerHovered\n                ? tableStyle.header?.hover_style?.background_color\n                  ? tableStyle.header?.hover_style?.background_color\n                  : tableStyle.header?.style?.background_color\n                  ? tableStyle.header?.style?.background_color\n                  : 'white'\n                : tableStyle.header?.style?.background_color\n                ? tableStyle.header?.style?.background_color\n                : 'white'\n            \"\n            [style.text-decoration]=\"\n              headerHovered\n                ? tableStyle.header?.hover_style?.underline\n                  ? 'underline'\n                  : tableStyle.header?.style?.underline\n                  ? 'underline'\n                  : 'none'\n                : tableStyle.header?.style?.underline\n                ? 'underline'\n                : 'none'\n            \"\n            [style.font-style]=\"\n              headerHovered\n                ? tableStyle.header?.hover_style?.italic\n                  ? 'italic'\n                  : tableStyle.header?.style?.italic\n                  ? 'italic'\n                  : 'none'\n                : tableStyle.header?.style?.italic\n                ? 'italic'\n                : 'none'\n            \"\n            [style.color]=\"\n              headerHovered\n                ? tableStyle.header?.hover_style?.color\n                  ? tableStyle.header?.hover_style?.color\n                  : tableStyle.header?.style?.color\n                  ? tableStyle.header?.style?.color\n                  : '#000'\n                : tableStyle.header?.style?.color\n                ? tableStyle.header?.style?.color\n                : '#000'\n            \"\n            [style.border-radius]=\"\n              '0px ' +\n              (tableStyle.table_border_radius\n                ? tableStyle.table_border_radius\n                : '0px') +\n              ' 0px 0px'\n            \"\n          ></th>\n          <th\n            *ngFor=\"\n              let column of _dataSource.getColumnsToDisplayTest();\n              let i = index\n            \"\n            cdkDrag\n            [cdkDragStartDelay]=\"dragDelay\"\n            [cdkDragDisabled]=\"!dragableColumns\"\n            (mouseenter)=\"headerHovered = true\"\n            (mouseleave)=\"headerHovered = false\"\n            [style.font-size]=\"\n              headerHovered\n                ? tableStyle.header?.hover_style?.font_size\n                  ? tableStyle.header?.hover_style?.font_size\n                  : tableStyle.header?.style?.font_size\n                  ? tableStyle.header?.style?.font_size\n                  : '1rem'\n                : tableStyle.header?.style?.font_size\n                ? tableStyle.header?.style?.font_size\n                : '1rem'\n            \"\n            [style.font-weight]=\"\n              headerHovered\n                ? tableStyle.header?.hover_style?.font_weight\n                  ? tableStyle.header?.hover_style?.font_weight\n                  : tableStyle.header?.style?.font_weight\n                  ? tableStyle.header?.style?.font_weight\n                  : 'bold'\n                : tableStyle.header?.style?.font_weight\n                ? tableStyle.header?.style?.font_weight\n                : 'bold'\n            \"\n            [style.background-color]=\"\n              headerHovered\n                ? tableStyle.header?.hover_style?.background_color\n                  ? tableStyle.header?.hover_style?.background_color\n                  : tableStyle.header?.style?.background_color\n                  ? tableStyle.header?.style?.background_color\n                  : 'white'\n                : tableStyle.header?.style?.background_color\n                ? tableStyle.header?.style?.background_color\n                : 'white'\n            \"\n            [style.text-decoration]=\"\n              headerHovered\n                ? tableStyle.header?.hover_style?.underline\n                  ? 'underline'\n                  : tableStyle.header?.style?.underline\n                  ? 'underline'\n                  : 'none'\n                : tableStyle.header?.style?.underline\n                ? 'underline'\n                : 'none'\n            \"\n            [style.font-style]=\"\n              headerHovered\n                ? tableStyle.header?.hover_style?.italic\n                  ? 'italic'\n                  : tableStyle.header?.style?.italic\n                  ? 'italic'\n                  : 'none'\n                : tableStyle.header?.style?.italic\n                ? 'italic'\n                : 'none'\n            \"\n            [style.color]=\"\n              headerHovered\n                ? tableStyle.header?.hover_style?.color\n                  ? tableStyle.header?.hover_style?.color\n                  : tableStyle.header?.style?.color\n                  ? tableStyle.header?.style?.color\n                  : '#000'\n                : tableStyle.header?.style?.color\n                ? tableStyle.header?.style?.color\n                : '#000'\n            \"\n            [style.border-radius]=\"\n              i == 0 && (!dragableRows || !dragableRowsHandler)\n                ? '0px ' +\n                  (tableStyle.table_border_radius\n                    ? tableStyle.table_border_radius\n                    : '0px') +\n                  ' 0px 0px'\n                : i == _dataSource.getColumnsToDisplay().length - 1\n                ? (tableStyle.table_border_radius\n                    ? tableStyle.table_border_radius\n                    : '0px') + ' 0px 0px 0px'\n                : '0px 0px 0px 0px'\n            \"\n          >\n            <div class=\"header-drag-preview\">\n              <span\n                class=\"innner-header-cell view-sort-icon\"\n                (mouseenter)=\"showSortIcon(column)\"\n                (mouseleave)=\"hideSortIcon(column)\"\n                [attr.id]=\"'th' + column.field\"\n                #headerSpan\n              >\n                <span\n                  (click)=\"column.onHeaderClick ? column.onHeaderClick() : null\"\n                  (dblclick)=\"\n                    column.onHeaderDoubleClick\n                      ? column.onHeaderDoubleClick()\n                      : null\n                  \"\n                  [ngClass]=\"{\n                    'cursor-pointer':\n                      column.onHeaderClick || column.onHeaderDoubleClick\n                  }\"\n                >\n                  {{ column.name }}\n                </span>\n                <ng-container *ngIf=\"_sortable && column.sortable\">\n                  <mat-icon\n                    *ngIf=\"_sortedBy.index != i\"\n                    matTooltip=\"{{ 'לחיצה כפולה למיון לפי ' + column.name }}\"\n                    matTooltipPosition=\"above\"\n                    class=\"dm-cmps-table-sort-icon {{ 'icon-' + i }}\"\n                    (dblclick)=\"setSortedBy(i)\"\n                    >mobiledata_off</mat-icon\n                  >\n                  <mat-icon\n                    *ngIf=\"_sortedBy.index == i && _sortedBy.index != -1\"\n                    matTooltip=\"{{\n                      _sortedBy.order == 'asc' ? 'מיין בסדר יורד' : 'בטל מיון'\n                    }}\"\n                    matTooltipPosition=\"above\"\n                    class=\"dm-cmps-table-sort-icon {{ 'icon-' + i }}\"\n                    (click)=\"toggleSort(i)\"\n                    >arrow_upward_alt</mat-icon\n                  >\n                </ng-container>\n              </span>\n              <button\n                mat-icon-button\n                *ngIf=\"dragableColumns && dragableColumnsHandler\"\n                cdkDragHandle\n              >\n                <mat-icon>drag_indicator</mat-icon>\n              </button>\n            </div>\n          </th>\n        </tr>\n      </thead>\n      <tbody\n        cdkDropList\n        (cdkDropListDropped)=\"rowDrop($event)\"\n        cdkDropListOrientation=\"vertical\"\n        cdkDropListLockAxis=\"y\"\n      >\n        <tr\n          *ngFor=\"let element of _dataSource.resultData; let i = index\"\n          (dblclick)=\"_onRowDoubleClick(element)\"\n          [ngStyle]=\"getElementStyle(element, i)\"\n          (mouseenter)=\"hoveredRow = i\"\n          (mouseleave)=\"hoveredRow = -1\"\n          cdkDrag\n          [cdkDragStartDelay]=\"dragDelay\"\n          [cdkDragDisabled]=\"!dragableRows\"\n        >\n          <!-- [style.max-width]=\"'none'\"\n          [style.min-width]=\"\n            column.type === 'actions'\n              ? (_actionButtonsTotalWidth >= _cellMinWidth + 30\n                  ? _actionButtonsTotalWidth\n                  : _cellMinWidth) + 'px !important'\n              : column.type === '#'\n              ? '70px !important'\n              : _cellMinWidth + 'px !important'\n          \" -->\n          <td\n            *ngIf=\"dragableRows && dragableRowsHandler\"\n            [style.border-radius]=\"\n              !_totalRow\n                ? i == _dataSource.resultData.length - 1\n                  ? '0px 0px ' +\n                    (tableStyle.table_border_radius\n                      ? tableStyle.table_border_radius\n                      : '0px') +\n                    ' 0px'\n                  : '0px 0px 0px 0px'\n                : '0px 0px 0px 0px'\n            \"\n          >\n            <button mat-icon-button cdkDragHandle>\n              <mat-icon>drag_handle</mat-icon>\n            </button>\n          </td>\n          <td\n            *ngFor=\"\n              let column of _dataSource.getColumnsToDisplay();\n              let j = index\n            \"\n            [style.border-radius]=\"\n              !_totalRow\n                ? i == _dataSource.resultData.length - 1\n                  ? j == 0 && dragableRows && dragableRowsHandler\n                    ? '0px 0px ' +\n                      (tableStyle.table_border_radius\n                        ? tableStyle.table_border_radius\n                        : '0px') +\n                      ' 0px'\n                    : j == _dataSource.getColumnsToDisplay().length - 1 &&\n                      dragableRows &&\n                      dragableRowsHandler\n                    ? '0px 0px 0px ' +\n                      (tableStyle.table_border_radius\n                        ? tableStyle.table_border_radius\n                        : '0px')\n                    : '0px 0px 0px 0px'\n                  : '0px 0px 0px 0px'\n                : '0px 0px 0px 0px'\n            \"\n            [ngStyle]=\"{ \n              'padding-top': column.type == 'actions' || column.type == 'slideToggle' ? '5px' : '',\n              'padding-bottom': column.type == 'actions' || column.type == 'slideToggle' ? '5px' : '',\n             }\"\n          >\n            <div\n              (click)=\"\n                column.onCellClick ? column.onCellClick(element, i) : null\n              \"\n              (dblclick)=\"\n                column.onCellDoubleClick\n                  ? column.onCellDoubleClick(element, i)\n                  : null\n              \"\n              [ngClass]=\"{\n                'cursor-pointer': column.onCellClick || column.onCellDoubleClick\n              }\"\n              [ngStyle]=\"getCellStyle(column, element)\"\n            >\n              <ng-container [ngSwitch]=\"column.type\">\n                <ng-container *ngSwitchCase=\"'#'\">\n                  <span\n                    [ngClass]=\"{\n                      'cursor-pointer':\n                        column.onCellContentClick ||\n                        column.onCellContentDoubleClick\n                    }\"\n                    (click)=\"\n                      column.onCellContentClick\n                        ? column.onCellContentClick(element, i)\n                        : null\n                    \"\n                    (dblclick)=\"\n                      column.onCellContentDoubleClick\n                        ? column.onCellContentDoubleClick(element, i)\n                        : null\n                    \"\n                  >\n                    {{ _dataSource._firstIndexInPage() + i }}\n                  </span>\n                </ng-container>\n                <ng-container *ngSwitchCase=\"'actions'\">\n                  <ng-container\n                    *ngIf=\"!_actionButtonsMenu; else actionsMenuTemplate\"\n                  >\n                    <div class=\"buttons-div\">\n                      <ng-container\n                        *ngFor=\"let button of column.actions || actions || []\"\n                      >\n                        <button\n                          *ngIf=\"\n                            (_dataSource.getArchive() &&\n                              (button.showIn == 'archive' ||\n                                button.showIn == 'both')) ||\n                            (!_dataSource.getArchive() &&\n                              button.showIn != 'archive')\n                          \"\n                          mat-icon-button\n                          (click)=\"_onActionButtonClick(button, element)\"\n                          [disabled]=\"\n                            button.hideIf\n                              ? button.hideIf(element)\n                              : button.disabled\n                              ? button.disabled(element)\n                              : false\n                          \"\n                          [matTooltip]=\"getButtonTooltip(button, element)\"\n                          [matTooltipPosition]=\"'above'\"\n                          class=\"my-0\"\n                        >\n                          <mat-icon [style.color]=\"button.color\">\n                            {{\n                              (button.hideIf ? !button.hideIf(element) : true)\n                                ? button.icon\n                                : \"\"\n                            }}\n                          </mat-icon>\n                        </button>\n                      </ng-container>\n                    </div>\n                  </ng-container>\n                  <ng-template #actionsMenuTemplate>\n                    <button\n                      mat-icon-button\n                      [matMenuTriggerFor]=\"actionsMenu\"\n                      [matTooltip]=\"\n                        column.actionsMenuButtonTooltip ||\n                        actionsMenuButtonTooltip\n                      \"\n                      [matTooltipPosition]=\"'above'\"\n                      [matMenuTriggerData]=\"{ element: element, column }\"\n                      class=\"my-0\"\n                    >\n                      <mat-icon>{{\n                        column.actionsMenuButtonIcon || actionButtonsMenuIcon\n                      }}</mat-icon>\n                    </button>\n                  </ng-template>\n                </ng-container>\n                <ng-container *ngSwitchCase=\"'slideToggle'\">\n                  <mat-slide-toggle\n                    [checked]=\"\n                      _dataSource.getValue(\n                        element[this._elementIdField],\n                        column\n                      ) || element[column.field]\n                    \"\n                    (change)=\"_onSlideToggleChange($event, element, column)\"\n                    [matTooltip]=\"\n                      _getSlideToggleTooltip(column, element) || 'החלף ערך'\n                    \"\n                  >\n                    <span [ngStyle]=\"getSlideToggleStyle(element, i)\">\n                      {{ _getSlideToggleLabel(column, element) }}\n                    </span>\n                  </mat-slide-toggle>\n                </ng-container>\n                <ng-container *ngSwitchCase=\"'date'\">\n                  <span\n                    [ngClass]=\"{\n                      'cursor-pointer':\n                        column.onCellContentClick ||\n                        column.onCellContentDoubleClick\n                    }\"\n                    (click)=\"\n                      column.onCellContentClick\n                        ? column.onCellContentClick(element, i)\n                        : null\n                    \"\n                    (dblclick)=\"\n                      column.onCellContentDoubleClick\n                        ? column.onCellContentDoubleClick(element, i)\n                        : null\n                    \"\n                  >\n                    {{\n                      _dataSource.getValue(\n                        element[this._elementIdField],\n                        column\n                      ) || element[column.field]\n                    }}\n                  </span>\n                </ng-container>\n                <ng-container *ngSwitchCase=\"'tel'\">\n                  <a\n                    href=\"tel:{{\n                      _dataSource.getValue(\n                        element[this._elementIdField],\n                        column\n                      ) || element[column.field]\n                    }}\"\n                    >{{\n                      _dataSource.getValue(\n                        element[this._elementIdField],\n                        column\n                      ) || element[column.field]\n                    }}</a\n                  >\n                </ng-container>\n                <ng-container *ngSwitchCase=\"'mail'\">\n                  <a\n                    href=\"mailTo:{{\n                      _dataSource.getValue(\n                        element[this._elementIdField],\n                        column\n                      ) || element[column.field]\n                    }}\"\n                    >{{\n                      _dataSource.getValue(\n                        element[this._elementIdField],\n                        column\n                      ) || element[column.field]\n                    }}</a\n                  >\n                </ng-container>\n                <ng-container *ngSwitchCase=\"'link'\">\n                  <a\n                    href=\"{{\n                      _dataSource.getValue(\n                        element[this._elementIdField],\n                        column\n                      ) || element[column.field]\n                    }}\"\n                    target=\"_blank\"\n                    rel=\"noopener noreferrer\"\n                    >{{\n                      _dataSource.getValue(\n                        element[this._elementIdField],\n                        column\n                      ) || element[column.field]\n                    }}</a\n                  >\n                </ng-container>\n                <ng-container *ngSwitchCase=\"'whatsapp'\">\n                  <a\n                    href=\"https://wa.me/{{\n                      _dataSource.getValue(\n                        element[this._elementIdField],\n                        column\n                      ) || element[column.field]\n                    }}\"\n                    target=\"_blank\"\n                    rel=\"noopener noreferrer\"\n                    >{{\n                      _dataSource.getValue(\n                        element[this._elementIdField],\n                        column\n                      ) || element[column.field]\n                    }}</a\n                  >\n                </ng-container>\n                <ng-container *ngSwitchCase=\"'list'\">\n                  <span\n                    [ngClass]=\"{\n                      'cursor-pointer':\n                        column.onCellContentClick ||\n                        column.onCellContentDoubleClick\n                    }\"\n                    (click)=\"\n                      column.onCellContentClick\n                        ? column.onCellContentClick(element, i)\n                        : null\n                    \"\n                    (dblclick)=\"\n                      column.onCellContentDoubleClick\n                        ? column.onCellContentDoubleClick(element, i)\n                        : null\n                    \"\n                  >\n                    <ng-container [ngSwitch]=\"column.listType\">\n                      <ng-container *ngSwitchCase=\"'ol'\">\n                        <ol>\n                          <li\n                            *ngFor=\"\n                              let item of column.valueToShow\n                                ? _dataSource.getValue(\n                                    element[this._elementIdField],\n                                    column\n                                  )\n                                : element[column.field]\n                            \"\n                          >\n                            {{ item }}\n                          </li>\n                        </ol>\n                      </ng-container>\n                      <ng-container *ngSwitchCase=\"'ul'\">\n                        <ul>\n                          <li\n                            *ngFor=\"\n                              let item of column.valueToShow\n                                ? _dataSource.getValue(\n                                    element[this._elementIdField],\n                                    column\n                                  )\n                                : element[column.field]\n                            \"\n                          >\n                            {{ item }}\n                          </li>\n                        </ul>\n                      </ng-container>\n                      <ng-container *ngSwitchCase=\"'comma'\">\n                        <ng-container\n                          *ngFor=\"\n                            let item of column.valueToShow\n                              ? _dataSource.getValue(\n                                  element[this._elementIdField],\n                                  column\n                                )\n                              : element[column.field];\n                            let i = index\n                          \"\n                        >\n                          {{ item\n                          }}{{\n                            i < element[column.field].length - 1 ? \", \" : \"\"\n                          }}\n                        </ng-container>\n                      </ng-container>\n                      <ng-container *ngSwitchCase=\"'newLine'\">\n                        <ng-container\n                          *ngFor=\"\n                            let item of column.valueToShow\n                              ? _dataSource.getValue(\n                                  element[this._elementIdField],\n                                  column\n                                )\n                              : element[column.field];\n                            let i = index\n                          \"\n                        >\n                          {{ item }}\n                          <span\n                            *ngIf=\"\n                              i <\n                              (column.valueToShow\n                                ? _dataSource.getValue(\n                                    element[this._elementIdField],\n                                    column\n                                  )\n                                : element[column.field]\n                              ).length -\n                                1\n                            \"\n                          >\n                            <br />\n                          </span>\n                        </ng-container>\n                      </ng-container>\n                      <ng-container *ngSwitchDefault>\n                        {{\n                          column.valueToShow\n                            ? _dataSource.getValue(\n                                element[this._elementIdField],\n                                column\n                              )\n                            : element[column.field]\n                        }}\n                      </ng-container>\n                    </ng-container>\n                  </span>\n                </ng-container>\n\n                <ng-container *ngSwitchCase=\"'customHtml'\">\n                  <span\n                    [ngClass]=\"{\n                      'cursor-pointer':\n                        column.onCellContentClick ||\n                        column.onCellContentDoubleClick\n                    }\"\n                    (click)=\"\n                      column.onCellContentClick\n                        ? column.onCellContentClick(element, i)\n                        : null\n                    \"\n                    (dblclick)=\"\n                      column.onCellContentDoubleClick\n                        ? column.onCellContentDoubleClick(element, i)\n                        : null\n                    \"\n                  >\n                    <div\n                      [innerHTML]=\"\n                        column.customHtml\n                          ? getSafeHtml(column.customHtml(element))\n                          : getSafeHtml(element[column.field])\n                      \"\n                    ></div>\n                  </span>\n                </ng-container>\n                <ng-container *ngSwitchCase=\"'image'\">\n                  <span\n                    [ngClass]=\"{\n                      'cursor-pointer':\n                        column.onCellContentClick ||\n                        column.onCellContentDoubleClick\n                    }\"\n                    (click)=\"\n                      column.onCellContentClick\n                        ? column.onCellContentClick(element, i)\n                        : null\n                    \"\n                    (dblclick)=\"\n                      column.onCellContentDoubleClick\n                        ? column.onCellContentDoubleClick(element, i)\n                        : null\n                    \"\n                  >\n                    <img\n                      [src]=\"\n                        (_dataSource.getValue(\n                          element[this._elementIdField],\n                          column\n                        ) || element[column.field]) != '' &&\n                        (_dataSource.getValue(\n                          element[this._elementIdField],\n                          column\n                        ) || element[column.field]) != undefined\n                          ? _dataSource.getValue(\n                              element[this._elementIdField],\n                              column\n                            ) || element[column.field]\n                          : 'https://fl-1.cdn.flockler.com/embed/no-image.svg'\n                      \"\n                      [width]=\"column.imageDetails?.width || 75\"\n                      [height]=\"column.imageDetails?.height || 75\"\n                      [alt]=\"\n                        _dataSource.getValue(\n                          element[this._elementIdField],\n                          column\n                        ) || element[column.field]\n                      \"\n                    />\n                  </span>\n                </ng-container>\n                <ng-container *ngSwitchDefault>\n                  <span\n                    [ngClass]=\"{\n                      'cursor-pointer':\n                        column.onCellContentClick ||\n                        column.onCellContentDoubleClick\n                    }\"\n                    (click)=\"\n                      column.onCellContentClick\n                        ? column.onCellContentClick(element, i)\n                        : null\n                    \"\n                    (dblclick)=\"\n                      column.onCellContentDoubleClick\n                        ? column.onCellContentDoubleClick(element, i)\n                        : null\n                    \"\n                  >\n                    {{\n                      column.valueToShow\n                        ? _dataSource.getValue(\n                            element[this._elementIdField],\n                            column\n                          )\n                        : element[column.field]\n                    }}\n                  </span>\n                </ng-container>\n              </ng-container>\n            </div>\n          </td>\n        </tr>\n        <ng-content select=\"[dmTableTotalRow]\"></ng-content>\n      </tbody>\n      <tfoot\n        class=\"sticky-bottom\"\n        *ngIf=\"_dataSource.resultData.length > 0 && _totalRow\"\n      >\n        <tr\n          #totalRowRef\n          [ngStyle]=\"{\n         'box-shadow': '0px -1px 0px 0px #0000001f',\n        'background-color':\n        tableStyle.total_row?.style?.background_color\n              ? tableStyle.total_row?.style?.background_color\n              : '#fff',\n              color:\n              tableStyle.total_row?.style?.color\n              ? tableStyle.total_row?.style?.color\n              : '#000',\n              'font-size':\n              tableStyle.total_row?.style?.font_size\n              ? tableStyle.total_row?.style?.font_size\n              : '1rem',\n              \n              'font-weight':\n              tableStyle.total_row?.style?.font_weight\n              ? tableStyle.total_row?.style?.font_weight\n              : 'bold',\n              'text-decoration':\n              tableStyle.total_row?.style?.underline\n              ? 'underline'\n              : 'none',\n              'font-style':\n              tableStyle.total_row?.style?.italic\n              ? 'italic'\n              : 'none',\n            }\"\n        >\n          <td *ngIf=\"dragableRows && dragableColumnsHandler\"></td>\n          <td\n            *ngFor=\"let column of _dataSource.getColumnsToDisplay()\"\n            [ngStyle]=\"getTotalCellStyle(column, _dataSource.resultData)\"\n          >\n            <span\n              [ngClass]=\"{\n                'cursor-pointer':\n                  column.onTotalCellClick || column.onTotalCellDoubleClick\n              }\"\n              (click)=\"\n                column.onTotalCellClick ? column.onTotalCellClick() : null\n              \"\n              (dblclick)=\"\n                column.onTotalCellDoubleClick\n                  ? column.onTotalCellDoubleClick()\n                  : null\n              \"\n              [style.white-space]=\"'pre-line'\"\n            >\n              {{ column.totalRow?.label || \"\" }}\n              {{ _getTotalRowValue(column) || \"\" }}\n              {{ column.totalRow?.suffix || \"\" }}\n            </span>\n          </td>\n        </tr>\n      </tfoot>\n    </table>\n  </div>\n  <div class=\"dm-cmps-table-no-data\" *ngIf=\"_dataSource.resultData.length == 0\">\n    <span>{{ noDataText }}</span>\n  </div>\n  <ng-container\n    [ngTemplateOutlet]=\"paginator\"\n    *ngIf=\"\n      _dataSource.resultData.length > 0 && _dataSource._getPaginatorAppearance()\n    \"\n  />\n</div>\n\n<mat-menu #actionsMenu=\"matMenu\" [yPosition]=\"'above'\">\n  <ng-template matMenuContent let-element=\"element\" let-column=\"column\">\n    <ng-container *ngFor=\"let button of column.actions || actions || []\">\n      <div\n        *ngIf=\"\n          ((_dataSource.getArchive() &&\n            (button.showIn == 'archive' || button.showIn == 'both')) ||\n            (!_dataSource.getArchive() && button.showIn != 'archive')) &&\n          (button.hideIf\n            ? !button.hideIf(element)\n            : button.disabled\n            ? !button.disabled(element)\n            : true)\n        \"\n        class=\"d-flex align-items-center justify-content-between\"\n        mat-menu-item\n        (click)=\"_onActionButtonClick(button, element)\"\n      >\n        <mat-icon [style.color]=\"button.color\">{{ button.icon }}</mat-icon>\n        <span>{{ getButtonTooltip(button, element) }}</span>\n      </div>\n    </ng-container>\n  </ng-template>\n</mat-menu>\n\n<ng-template #paginator>\n  <div\n    class=\"dm-cmps-paginator-row row-cols-auto\"\n    [style.background-color]=\"\n      tableStyle.paginator?.style?.background_color\n        ? tableStyle.paginator?.style?.background_color\n        : '#bcbcbc'\n    \"\n    [style.color]=\"\n      tableStyle.paginator?.style?.color\n        ? tableStyle.paginator?.style?.color\n        : 'black'\n    \"\n    [style.font-size]=\"\n      tableStyle.paginator?.style?.font_size\n        ? tableStyle.paginator?.style?.font_size\n        : '1rem'\n    \"\n    [style.font-weight]=\"\n      tableStyle.paginator?.style?.font_weight\n        ? tableStyle.paginator?.style?.font_weight\n        : 'bold'\n    \"\n    [style.text-decoration]=\"\n      tableStyle.paginator?.style?.underline ? 'underline' : 'none'\n    \"\n    [style.font-style]=\"tableStyle.paginator?.style?.italic ? 'italic' : 'none'\"\n    [style.border-radius]=\"\n      tableStyle.paginator?.border_radius\n        ? tableStyle.paginator?.border_radius\n        : 'none'\n    \"\n  >\n    <p class=\"mb-0\">\n      {{\n        _dataSource._getPaginatorDetails()?.chooseElementsPerPageLabel ||\n          \"מספר פריטים בדף:\"\n      }}\n    </p>\n\n    <div class=\"col\">\n      <mat-form-field\n        style=\"width: 100px\"\n        class=\"dm-cmps-paginator-form-field ms-2 me-2\"\n        [appearance]=\"\n          _dataSource.getPaginatorData().outlineSelect ? 'outline' : 'fill'\n        \"\n      >\n        <mat-select\n          class=\"dm-cmps-paginator-select\"\n          [value]=\"_dataSource._pageSize()\"\n        >\n          <mat-option\n            *ngFor=\"let option of _dataSource._pageSizeOptions()\"\n            [value]=\"option\"\n            (onSelectionChange)=\"onPageSizeChange($event, option)\"\n            >{{ option }}</mat-option\n          >\n        </mat-select>\n      </mat-form-field>\n    </div>\n\n    <div class=\"col\" *ngIf=\"_dataSource.getElementsPerPage() > 0\">\n      <div class=\"d-flex align-items-center\">\n        <p class=\"me-1 mb-0\">{{ _dataSource._firstIndexInPage() }}</p>\n\n        <p class=\"me-1 mb-0\">-</p>\n\n        <p class=\"me-1 mb-0\">{{ _dataSource._lastIndexInPage() }}</p>\n\n        <p class=\"me-1 mb-0\">מתוך</p>\n\n        <p class=\"me-1 mb-0\">{{ _dataSource._totalElements() }}</p>\n      </div>\n    </div>\n\n    <div class=\"col\">\n      <button\n        mat-icon-button\n        (click)=\"firstPage()\"\n        [matTooltip]=\"\n          _dataSource._getPaginatorDetails()?.firstPageLabel || 'דף ראשון'\n        \"\n        [matTooltipPosition]=\"'above'\"\n        *ngIf=\"_dataSource.getPaginatorData()?.showFirstLastButtons\"\n      >\n        <mat-icon>keyboard_double_arrow_right</mat-icon>\n      </button>\n      <button\n        mat-icon-button\n        (click)=\"previousPage()\"\n        [matTooltip]=\"\n          _dataSource._getPaginatorDetails()?.previousPageLabel || 'דף קודם'\n        \"\n        [matTooltipPosition]=\"'above'\"\n      >\n        <mat-icon>chevron_right</mat-icon>\n      </button>\n      <button\n        mat-icon-button\n        (click)=\"nextPage()\"\n        [matTooltip]=\"\n          _dataSource._getPaginatorDetails()?.nextPageLabel || 'דף הבא'\n        \"\n        [matTooltipPosition]=\"'above'\"\n      >\n        <mat-icon>chevron_left</mat-icon>\n      </button>\n      <button\n        mat-icon-button\n        *ngIf=\"_dataSource.getPaginatorData()?.showFirstLastButtons\"\n        (click)=\"lastPage()\"\n        [matTooltip]=\"\n          _dataSource._getPaginatorDetails()?.lastPageLabel || 'דף אחרון'\n        \"\n        [matTooltipPosition]=\"'above'\"\n      >\n        <mat-icon>keyboard_double_arrow_left</mat-icon>\n      </button>\n    </div>\n  </div>\n</ng-template>\n\n<table\n  id=\"tableToExport\"\n  *ngIf=\"_exportMode\"\n  style=\"display: none\"\n  class=\"printTemplate\"\n  hidden\n>\n  <thead>\n    <tr>\n      <th *ngFor=\"let column of _dataSource.getColumnsToPrint(); let i = index\">\n        {{ column.name }}\n      </th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr *ngFor=\"let element of _dataSource.getDataSourcePrint(); let i = index\">\n      <ng-container\n        *ngFor=\"let column of _dataSource.getColumnsToPrint(); let j = index\"\n      >\n        <td *ngIf=\"column.field !== 'dm-actions'\">\n          <ng-container [ngSwitch]=\"column.field\">\n            <ng-container *ngSwitchCase=\"'#'\">\n              {{ _dataSource._firstIndexInPage() + i }}\n            </ng-container>\n\n            <ng-container *ngSwitchDefault>\n              <span [dir]=\"'ltr'\" style=\"direction: rtl\">\n                {{\n                  column.type == \"date\"\n                    ? dateService.getDateString(\n                        element[column.field],\n                        column.dateFormat || \"yyyy/MM/dd\"\n                      )\n                      ? dateService.getDateString(\n                          element[column.field],\n                          column.dateFormat || \"yyyy/MM/dd\"\n                        )\n                      : _dataSource.getValue(element[_elementIdField], column)\n                      ? _dataSource.getValue(element[_elementIdField], column)\n                      : element[column.field]\n                    : element[column.field]\n                }}\n              </span>\n              <!-- <ng-container [ngSwitch]=\"column.type\">\n                <ng-container *ngSwitchCase=\"'date'\">\n                  {{\n                    _dataSource.getValue(\n                      element[this._elementIdField],\n                      column.field\n                    ) || element[column.field]\n                  }}\n                </ng-container>\n                <ng-container *ngSwitchCase=\"'tel'\">\n                  <a\n                    href=\"tel:{{\n                      _dataSource.getValue(\n                        element[this._elementIdField],\n                        column.field\n                      ) || element[column.field]\n                    }}\"\n                    >{{\n                      _dataSource.getValue(\n                        element[this._elementIdField],\n                        column.field\n                      ) || element[column.field]\n                    }}</a\n                  >\n                </ng-container>\n                <ng-container *ngSwitchCase=\"'mail'\">\n                  <a\n                    href=\"mailTo:{{\n                      _dataSource.getValue(\n                        element[this._elementIdField],\n                        column.field\n                      ) || element[column.field]\n                    }}\"\n                    >{{\n                      _dataSource.getValue(\n                        element[this._elementIdField],\n                        column.field\n                      ) || element[column.field]\n                    }}</a\n                  >\n                </ng-container>\n                <ng-container *ngSwitchCase=\"'link'\">\n                  <a\n                    href=\"{{\n                      _dataSource.getValue(\n                        element[this._elementIdField],\n                        column.field\n                      ) || element[column.field]\n                    }}\"\n                    >{{\n                      _dataSource.getValue(\n                        element[this._elementIdField],\n                        column.field\n                      ) || element[column.field]\n                    }}</a\n                  >\n                </ng-container>\n                <ng-container *ngSwitchCase=\"'whatsapp'\">\n                  <a\n                    href=\"https://wa.me/{{\n                      _dataSource.getValue(\n                        element[this._elementIdField],\n                        column.field\n                      ) || element[column.field]\n                    }}\"\n                    >{{\n                      _dataSource.getValue(\n                        element[this._elementIdField],\n                        column.field\n                      ) || element[column.field]\n                    }}</a\n                  >\n                </ng-container>\n                <ng-container *ngSwitchDefault>\n                  {{\n                    column.valueToShow\n                      ? _dataSource.getValue(\n                          element[this._elementIdField],\n                          column.field\n                        )\n                      : element[column.field]\n                  }}\n                </ng-container>\n              </ng-container> -->\n            </ng-container>\n          </ng-container>\n        </td>\n      </ng-container>\n    </tr>\n  </tbody>\n</table>\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DmCmpsSpinnerService {\n  visibility$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n\n  spinnerToShow$: BehaviorSubject<string> = new BehaviorSubject<string>(\n    'dm-cmps-spinner'\n  );\n  spinnerTasks$: BehaviorSubject<Set<string>> = new BehaviorSubject<\n    Set<string>\n  >(new Set());\n\n  spinnerText: string = '';\n  constructor() {}\n\n  showSpinner(spinnerId: string = 'dm-cmps-spinner') {\n    this.visibility$.next(true);\n    this.spinnerToShow$.next(spinnerId);\n  }\n\n  startLoading(taskName: string, spinnerId: string = 'dm-cmps-spinner') {\n    this.spinnerToShow$.next(spinnerId);\n    const tasks = this.spinnerTasks$.value;\n    tasks.add(taskName);\n    this.spinnerTasks$.next(tasks);\n  }\n\n  stopLoading(taskName: string) {\n    let tasks = this.spinnerTasks$.value;\n    tasks.delete(taskName);\n    this.spinnerTasks$.next(tasks);\n  }\n\n  hideSpinner() {\n    this.visibility$.next(false);\n    this.spinnerToShow$.next('dm-cmps-spinner');\n  }\n}\n","import {\n  Component,\n  HostBinding,\n  Input,\n  OnDestroy,\n  OnInit,\n  Renderer2,\n  booleanAttribute,\n  numberAttribute,\n} from '@angular/core';\nimport { DmCmpsSpinnerService } from './dm-cmps-spinner.service';\nimport { Subscription } from 'rxjs';\n\n@Component({\n  selector: 'dm-cmps-spinner',\n  templateUrl: './dm-cmps-spinner.component.html',\n  styleUrls: ['./dm-cmps-spinner.component.scss'],\n})\nexport class DmCmpsSpinnerComponent implements OnInit, OnDestroy {\n  @HostBinding('style.--spinner-color') get spinnerColorStyle() {\n    return this.color;\n  }\n\n  @HostBinding('style.--spinner-size') get spinnerSizeStyle() {\n    return this.size;\n  }\n\n  @HostBinding('style.--spinner-shape-size') get spinnerShapeSizeStyle() {\n    return this.shapeSize;\n  }\n\n  @HostBinding('style.--spinner-speed') get spinnerSpeedStyle() {\n    return this.speed;\n  }\n\n  @HostBinding('style.--spinner-border-thikness')\n  get spinnerBorderThiknessStyle() {\n    return this.borderThikness;\n  }\n\n  @HostBinding('style.--spinner-position') get spinnerPositionStyle() {\n    return this.position;\n  }\n\n  @HostBinding('style.--spinner-background-color')\n  get spinnerBackgroundColorStyle() {\n    return this.backgroundColor;\n  }\n  @HostBinding('style.--spinner-type')\n  get spinnerTypeStyle() {\n    return null;\n  }\n\n  @HostBinding('style.--spinner-text-color') get spinnerTextColorStyle() {\n    return this.textColor;\n  }\n\n  @HostBinding('style.--spinner-font-size') get spinnerFontSizeStyle() {\n    return this.fontSize || 20;\n  }\n\n  @HostBinding('style.--spinner-text-position') get spinnerTextPositionStyle() {\n    return this.textPosition;\n  }\n\n  @HostBinding('style.--spinner-first-color')\n  get spinnerFirstColorStyle() {\n    return this.colors[0] || this.color;\n  }\n\n  @HostBinding('style.--spinner-second-color')\n  get spinnerSecondColorStyle() {\n    return this.colors[1] || this.color;\n  }\n\n  @HostBinding('style.--spinner-third-color')\n  get spinnerThirdColorStyle() {\n    return this.colors[2] || this.color;\n  }\n\n  @HostBinding('style.--spinner-fourth-color')\n  get spinnerFourthColorStyle() {\n    return this.colors[3] || this.color;\n  }\n\n  @HostBinding('style.--spinner-background-blur')\n  get spinnerBackgroundBlurStyle() {\n    return `${this.backgroundBlur || 0}px`;\n  }\n\n  @HostBinding('style.--spinner-text-position-y-offset')\n  get spinnerTextPositionYOffsetStyle() {\n    return `${this.textPositionYOffset || 0}px`;\n  }\n\n  @Input() color: string = '#1a4bd6';\n  @Input() type: 'rounded' | 'flower' | 'gif' = 'rounded';\n  @Input() gifSrc: string = 'https://media.tenor.com/I6kN-6X7nhAAAAAi/loading-buffering.gif';\n  @Input() size: number = 40;\n  @Input() shapeSize: number = 25;\n  @Input() speed: number = 2;\n  @Input() borderThikness: number = 5;\n  @Input() position: 'absolute' | 'relative' | 'fixed' = 'absolute';\n  @Input() backgroundColor: string = '';\n  @Input() text: string = 'טוען...';\n  @Input() textColor: string = '#000000';\n  @Input() fontSize: number = 20;\n  @Input() textPosition: 'center' | 'bottom' = 'center';\n  @Input() colors: string[] = ['#1a4bd6', '#000000'];\n  @Input({ transform: numberAttribute }) backgroundBlur: number = 5;\n  @Input({ transform: numberAttribute }) textPositionYOffset: number = 0;\n\n  @Input() name: string = 'dm-cmps-spinner';\n\n  private visibilitySubscription: Subscription | undefined;\n  constructor(\n    protected spinnerService: DmCmpsSpinnerService,\n    private renderer: Renderer2\n  ) {}\n\n  ngOnInit() {\n    this.visibilitySubscription = this.spinnerService.visibility$.subscribe(\n      (isVisible) => {\n        if (isVisible) {\n          this.renderer.addClass(document.body, 'loading-active');\n        } else {\n          this.renderer.removeClass(document.body, 'loading-active');\n        }\n      }\n    );\n    if(this.spinnerService.spinnerText) {\n      this.text = this.spinnerService.spinnerText;\n    }\n  }\n\n  ngOnDestroy() {\n    if (this.visibilitySubscription) this.visibilitySubscription.unsubscribe();\n  }\n}\n","<div\n  class=\"dm-cmps-spinner-wrapper\"\n  *ngIf=\"\n    ((spinnerService.visibility$ | async) &&\n      spinnerService.spinnerToShow$.value == name) ||\n    (spinnerService.spinnerTasks$.value.size > 0 && name == 'dm-cmps-spinner')\n  \"\n>\n  <ng-container [ngSwitch]=\"type\">\n    <ng-container *ngSwitchCase=\"'flower'\">\n      <div class=\"dm-cmps-spinner-flower\"></div>\n    </ng-container>\n    <ng-container *ngSwitchCase=\"'rounded'\">\n      <div class=\"dm-cmps-spinner-rounded\"></div>\n    </ng-container>\n    <ng-container *ngSwitchCase=\"'gif'\">\n      <img\n        class=\"dm-cmps-spinner-gif\"\n        [src]=\"gifSrc\"\n        [width]=\"size\"\n        [height]=\"'auto'\"\n      />\n    </ng-container>\n  </ng-container>\n  <div class=\"dm-cmps-spinner-text\" [style.font-size.px]=\"fontSize\">\n    {{ text }}\n  </div>\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lib-dm-cmps-side-nav',\n  templateUrl: './dm-cmps-side-nav.component.html',\n  styleUrls: ['./dm-cmps-side-nav.component.scss']\n})\nexport class DmCmpsSideNavComponent {\n\n}\n","<p>dm-cmps-side-nav works!</p>\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  ViewChild,\n  booleanAttribute,\n  forwardRef,\n} from '@angular/core';\nimport {\n  ControlValueAccessor,\n  FormControl,\n  NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { TooltipPosition } from '@angular/material/tooltip';\n\nexport interface DmCmpsColor {\n  color: string;\n  tooltip?: string;\n}\n\n@Component({\n  selector: 'dm-cmps-color-picker',\n  templateUrl: './dm-cmps-color-picker.component.html',\n  styleUrls: ['./dm-cmps-color-picker.component.scss'],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DmCmpsColorPickerComponent),\n      multi: true,\n    },\n  ],\n})\nexport class DmCmpsColorPickerComponent\n  implements OnInit, ControlValueAccessor\n{\n  @Input() colors: DmCmpsColor[] = [\n    { color: '#FF0000' },\n    { color: '#FFA500' },\n    { color: '#FFFF00' },\n    { color: '#008000' },\n    { color: '#0000FF' },\n    { color: '#4B0082' },\n    { color: '#EE82EE' },\n    { color: '#A9A9A9' },\n    { color: '#FFFFFF' },\n    { color: '#000000' },\n  ];\n  @Input() formControl: FormControl | undefined;\n\n  @Input() selectedColor: string = '#ffffff';\n\n  @Input() tooltip: string = '';\n  @Input() tooltipPosition: TooltipPosition = 'above';\n  @Input({ transform: booleanAttribute }) customColor: boolean = false;\n\n  @Input({ transform: booleanAttribute }) opacitySlider: boolean = false;\n  @Input() opacitySliderColor: 'primary' | 'accent' | 'warn' = 'primary';\n  @Input() opacitySliderLabel: string = 'שקיפות';\n  @Input() customColorTooltip: string = 'צבע מותאם אישית';\n\n  @Input() wrapperClass: string = '';\n  @Input() wrapperStyle: string = '';\n\n  @Output() onColorChange = new EventEmitter<string>();\n\n  @Input() ngModel: string = '';\n  @Output() ngModelChange = new EventEmitter<string>();\n\n  _selectedColorCtrl: FormControl = new FormControl('');\n\n  constructor() {}\n\n  ngOnInit(): void {\n    if (this.ngModel) {\n      this.selectedColor = this.ngModel;\n    }\n    this._selectedColorCtrl = this.formControl || this._selectedColorCtrl;\n  }\n\n  onColorSelected(color: string) {\n    this.selectedColor = color;\n    this._selectedColorCtrl.setValue(color);\n    this.onColorChange.emit(color);\n    this.ngModel = color;\n    this.ngModelChange.emit(this.ngModel);\n  }\n\n  _onColorChange(event: any) {\n    const color = event.target.value;\n    this.onColorSelected(color);\n  }\n\n  formatLabel(value: number): string {\n    return Math.round(value) + '%';\n  }\n\n  getOpacity() {\n    const value = this.selectedColor.slice(7) || 'FF';\n    return Math.round((parseInt(value, 16) / 255) * 100);\n  }\n\n  setOpacity(value: string) {\n    this.selectedColor = this.selectedColor.slice(0, 7);\n    this.selectedColor += value;\n  }\n\n  opacityChangeHandler(value: string) {\n    let hex = Math.round((parseInt(value) / 100) * 255).toString(16);\n    if (hex.length < 2) {\n      hex = '0' + hex;\n    }\n    this.setOpacity(hex);\n  }\n\n  onOpacityChange(opacity: Event) {\n    const value = (opacity.target as HTMLInputElement).value;\n    this.opacityChangeHandler(value);\n  }\n\n  updateSelectedColor() {\n    console.log('updateSelectedColor');\n\n    this.onColorSelected(structuredClone(this.selectedColor));\n  }\n\n  writeValue(value: any): void {}\n\n  registerOnChange(fn: any): void {}\n\n  registerOnTouched(fn: any): void {}\n}\n","<div\n  class=\"dm-cmps-color-picker-wrapper\"\n  [class]=\"wrapperClass\"\n  [style]=\"wrapperStyle\"\n>\n  <div\n    class=\"dm-cmps-color-picker\"\n    [matMenuTriggerFor]=\"colorPicker\"\n    [style.background-color]=\"selectedColor\"\n    [matTooltip]=\"tooltip\"\n    [matTooltipPosition]=\"tooltipPosition\"\n  ></div>\n  <div class=\"d-flex align-items-center gap-2\" *ngIf=\"opacitySlider\">\n    {{ opacitySliderLabel }}\n    <mat-slider\n      min=\"0\"\n      max=\"100\"\n      showTickMarks\n      discrete\n      [displayWith]=\"formatLabel\"\n      [color]=\"opacitySliderColor\"\n    >\n      <input\n        matSliderThumb\n        [value]=\"getOpacity()\"\n        (input)=\"onOpacityChange($event)\"\n        (change)=\"updateSelectedColor()\"\n        #slider\n      />\n    </mat-slider>\n  </div>\n</div>\n\n<mat-menu #colorPicker=\"matMenu\">\n  <div class=\"dm-cmps-color-picker-menu\">\n    <div\n      *ngFor=\"let color of colors\"\n      (click)=\"onColorSelected(color.color)\"\n      class=\"dm-cmps-color-div\"\n      [matTooltip]=\"color.tooltip || ''\"\n      matTooltipPosition=\"above\"\n      [style.background-color]=\"color.color\"\n    ></div>\n    <input\n      *ngIf=\"customColor\"\n      (click)=\"$event.stopPropagation()\"\n      [matTooltip]=\"customColorTooltip\"\n      [matTooltipPosition]=\"tooltipPosition\"\n      [value]=\"selectedColor\"\n      type=\"color\"\n      class=\"pointer\"\n      (change)=\"_onColorChange($event)\"\n    />\n  </div>\n</mat-menu>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DmCmpsRunOncePipeService } from './run-once-pipe.service';\n\n@Pipe({\n  name: 'runOnce',\n  pure: false,\n})\nexport class DmCmpsRunOncePipe implements PipeTransform {\n  constructor(private runOncePipeService: DmCmpsRunOncePipeService) {}\n\n  /**\n   * @explain - Runs the specified function only once, simplifying function calls in HTML.\n   * - This prevents redundant computations by caching results.\n   * @param func - The function to be executed only once.\n   * @param args - The arguments to be passed to the `func` function.\n   * @result The result of executing the `func` function, or the cached result if already executed.\n   * ### Example of Usage\n   * ```html\n   * <!-- function without arguments -->\n   * <div [innerText]=\"myFunction.bind(this) | runOnce\"></div>\n   *\n   * <!-- function with arguments -->\n   * <div [innerText]=\"myFunction.bind(this) | runOnce : '' : myVariable : false\"></div>\n   * ```\n   */\n  transform(func: (...args: any[]) => any, ...args: any[]): any {\n    const key = this.runOncePipeService.generateFunctionKey(func, ...args);\n    return this.runOncePipeService.getOrCache(key, () => func(...args), [\n      ...args,\n    ]);\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'filterBy',\n  pure: false,\n})\nexport class DmCmpsFilterByPipe implements PipeTransform {\n  /**\n   *\n   * @param array - (any[]) source array\n   * @param filterPredicate - can get a function or object:\n   *\n   * @usageNotes\n   * #### Example as function\n   *\n   * ```typescript\n   * filterPredicateFunction(item: any) {\n   *    return item.age > 18 && item.weight > 80;\n   * }\n   * ```\n   *\n   * #### Example as object\n   *\n   * ```typescript\n   * filterPredicateObject: { [key: string]: any } = {\n   *   age: 18,\n   *   weight: 80\n   * }\n   * ```\n   *\n   * @usageExample\n   * #### Use function predicate\n   * ```html\n   * <div *ngFor=\"let item of source | filterBy: filterPredicateFunction.bind(this)\">\n   * <!-- any html content here -->\n   * </div>\n   * ```\n   *\n   * #### Use object - with check all\n   * ```html\n   * <div *ngFor=\"let item of source | filterBy: filterPredicateObject\">\n   * <!-- any html content here -->\n   * </div>\n   * ```\n   *\n   * #### Use object - returns the items that have some properties from the object\n   * ```html\n   * <div *ngFor=\"let item of source | filterBy: filterPredicateObject : false\">\n   * <!-- any html content here -->\n   * </div>\n   * ```\n   *\n   * @param checkAll - when `filterPredicate` is an object,\n   *  if `checkAll=true` it will return just the elements that have the `filterPredicate` keys and values,\n   *  if `checkAll=false` it will return all the elements thet have some properties from the `filterPredicate` with same values,\n   *  | default is `checkAll=true`\n   *\n   *\n   * @returns (any[]) filterd array\n   */\n  transform(\n    array: any[],\n    filterPredicate: ((item: any) => boolean) | { [key: string]: any },\n    checkAll: boolean = true,\n    ...args: any[]\n  ): any[] {\n    if (!Array.isArray(array)) {\n      return array;\n    }\n\n    if (typeof filterPredicate === 'function') {\n      return array.filter(filterPredicate as (item: any) => boolean);\n    }\n\n    if (typeof filterPredicate === 'object') {\n      return array.filter((item) => {\n        if (checkAll) {\n          return Object.keys(filterPredicate).every((key) => {\n            return item[key] === filterPredicate[key];\n          });\n        } else {\n          return Object.keys(filterPredicate).some((key) => {\n            return item[key] === filterPredicate[key];\n          });\n        }\n      });\n    }\n\n    return array;\n  }\n}\n","import {\n  booleanAttribute,\n  Component,\n  EventEmitter,\n  Input,\n  numberAttribute,\n  OnInit,\n  Output,\n} from '@angular/core';\n\nexport interface DmCmpsRatingData {}\n\n@Component({\n  selector: 'dm-cmps-rating',\n  templateUrl: './dm-cmps-rating.component.html',\n  styleUrls: ['./dm-cmps-rating.component.scss'],\n})\nexport class DmCmpsRatingComponent implements OnInit {\n  @Input({ transform: numberAttribute }) min: number = 1;\n  @Input({ transform: numberAttribute }) max: number = 5;\n  @Input() set value(selected: number) {\n    this._value = selected;\n  }\n  @Input({ transform: booleanAttribute }) readonly: boolean = false;\n\n  @Input() set message(value: string) {\n    this._message = value;\n  }\n\n  @Input() starsColor: string = '#ffee00';\n  @Input({ transform: numberAttribute }) starSize: number | string = 25;\n  @Input() starTooltip: (value: number) => string = (index: number) =>\n    index + 1 + '';\n  @Input() direction: 'rtl' | 'ltr' = 'rtl';\n  @Output() onRatingSelect: EventEmitter<number> = new EventEmitter();\n\n  hoveredStartIndex: number = -1;\n\n  protected _value: number = 0;\n  protected _message: string = '';\n\n  constructor() {}\n\n  ngOnInit(): void {}\n\n  rate(selectedStartNumber: number) {\n    if (selectedStartNumber < this.min || selectedStartNumber > this.max) {\n      return;\n    }\n    this._value = selectedStartNumber;\n    this.onRatingSelect.emit(selectedStartNumber);\n  }\n}\n","<div class=\"dm-cmps-rating-wrapper\" [dir]=\"direction\">\n  <div class=\"dm-cmps-rating-stars-wrapper\">\n    <div\n      [dir]=\"direction\"\n      class=\"dm-cmps-rating__star\"\n      *ngFor=\"let star of [].constructor(max).fill(0); let i = index\"\n      (click)=\"rate(i + 1)\"\n      (mouseenter)=\"hoveredStartIndex = i\"\n      (mouseleave)=\"hoveredStartIndex = -1\"\n      [matTooltip]=\"starTooltip(i)\"\n      [matTooltipPosition]=\"'above'\"\n    >\n      <ng-container\n        *ngIf=\"hoveredStartIndex >= i || _value - 1 >= i; else emptyStart\"\n      >\n        <svg\n          xmlns=\"http://www.w3.org/2000/svg\"\n          fill=\"currentColor\"\n          class=\"bi bi-star-fill\"\n          viewBox=\"0 0 16 16\"\n          [style.color]=\"starsColor\"\n          [style.width]=\"starSize\"\n          [style.height]=\"starSize\"\n        >\n          <path\n            d=\"M3.612 15.443c-.386.198-.824-.149-.746-.592l.83-4.73L.173 6.765c-.329-.314-.158-.888.283-.95l4.898-.696L7.538.792c.197-.39.73-.39.927 0l2.184 4.327 4.898.696c.441.062.612.636.282.95l-3.522 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256z\"\n          />\n        </svg>\n      </ng-container>\n      <ng-template #emptyStart>\n        <svg\n          xmlns=\"http://www.w3.org/2000/svg\"\n          fill=\"currentColor\"\n          class=\"bi bi-star\"\n          viewBox=\"0 0 16 16\"\n          [style.color]=\"starsColor\"\n          [style.width]=\"starSize\"\n          [style.height]=\"starSize\"\n        >\n          <path\n            d=\"M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.56.56 0 0 0-.163-.505L1.71 6.745l4.052-.576a.53.53 0 0 0 .393-.288L8 2.223l1.847 3.658a.53.53 0 0 0 .393.288l4.052.575-2.906 2.77a.56.56 0 0 0-.163.506l.694 3.957-3.686-1.894a.5.5 0 0 0-.461 0z\"\n          />\n        </svg>\n      </ng-template>\n    </div>\n  </div>\n  <div class=\"dm-cmps-rating__message\" *ngIf=\"_message\">{{ _message }}</div>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport {\n  DmCmpsDateFormats,\n  DmCmpsDateService,\n  DmCmpsDateTypes,\n  DmCmpsLangs,\n} from '../dm-cmps-input/dm-cmps-date.service';\n\n@Pipe({\n  name: 'dmCmpsDate',\n})\nexport class DmCmpsDatePipe implements PipeTransform {\n  /**\n   * Transforms a date to a string\n   * @param value - the date to transform\n   * @param format - the format of the date\n   * @param lang - the language of the date\n   * @returns the date as a string\n   * @example\n   * {{ date | dmCmpsDate: 'dd/MM/yyyy' }}\n   * {{ date | dmCmpsDate: 'dd/MM/yyyy HH:mm' }}\n   * {{ date | dmCmpsDate: 'yyyy/MM/dd' }}\n   * {{ date | dmCmpsDate: 'dd/MM/yyyy': 'en' }}\n   * {{ date | dmCmpsDate: 'dd/MM/yyyy': 'he' }}\n   * {{ date | dmCmpsDate: 'dd/MM/yyyy': 'ar' }}\n   * {{ date | dmCmpsDate: 'dd/MM/yyyy HH:mm': 'en' }}\n   * {{ date | dmCmpsDate: 'dd/MM/yyyy HH:mm': 'he' }}\n   * {{ date | dmCmpsDate: 'dd/MM/yyyy HH:mm': 'ar' }}\n   * {{ date | dmCmpsDate: 'yyyy/MM/dd': 'en' }}\n   * {{ date | dmCmpsDate: 'yyyy/MM/dd': 'he' }}\n   *\n   * The format can be any string that contains the following:\n   * - 'dd' - the day of the month\n   * - 'MM' - the month\n   * - 'yyyy' - the year\n   * - 'yy' - the year (2 digits)\n   * - 'HH' - the hour\n   * - 'mm' - the minute\n   * - 'ss' - the second\n   * - 'SSS' - the millisecond\n   * - 'DM_a' - the AM/PM\n   * - 'DM_E' - the day of the week\n   * - 'DM_Z' - the time zone\n   * - 'DM_z' - the time zone offset\n   * - 'DM_yw' - the week of the year\n   * - 'DM_mw' - the week of the month\n   * - 'DM_yd' - the day of the year\n   */\n  transform(\n    value: DmCmpsDateTypes,\n    format: DmCmpsDateFormats | string = 'dd/MM/yyyy',\n    lang: DmCmpsLangs = 'he'\n  ): string {\n    if (!value) return '';\n    return DmCmpsDateService.getDateString(value, format, lang);\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { DmCmpsComponent } from './dm-cmps.component';\nimport { CommonModule } from '@angular/common';\n\n// material\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatNativeDateModule, MatOptionModule } from '@angular/material/core';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatChipEvent } from '@angular/material/chips';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatListModule } from '@angular/material/list';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport {\n  DateAdapter,\n  MAT_DATE_FORMATS,\n  MAT_DATE_LOCALE,\n} from '@angular/material/core';\nimport { MatSliderModule } from '@angular/material/slider';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatGridListModule } from '@angular/material/grid-list';\n\n// drag and drop\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport {\n  FormsModule,\n  ReactiveFormsModule,\n  ɵInternalFormsSharedModule,\n} from '@angular/forms';\nimport { DmTableComponent } from './dm-table/dm-table.component';\nimport { DmSelectComponent } from './dm-select/dm-select.component';\nimport { DmCmpsSpinnerComponent } from './dm-cmps-spinner/dm-cmps-spinner.component';\nimport { DmCmpsSpinnerService } from './dm-cmps-spinner/dm-cmps-spinner.service';\nimport { DmCmpsSideNavComponent } from './dm-cmps-side-nav/dm-cmps-side-nav.component';\nimport { DmCmpsInputComponent } from './dm-cmps-input/dm-cmps-input.component';\nimport { DmCmpsDateService } from './dm-cmps-input/dm-cmps-date.service';\nimport { DmCmpsColorPickerComponent } from './dm-cmps-color-picker/dm-cmps-color-picker.component';\nimport { DmCmpsRunOncePipe } from './pipes/run-once.pipe';\nimport { DmCmpsHtmlPrinterService } from './html-printer/html-printer.service';\nimport { DmCmpsFilterByPipe } from './pipes/filter-by.pipe';\nimport { DmCmpsRunOncePipeService } from './pipes/run-once-pipe.service';\nimport { DmCmpsRatingComponent } from './dm-cmps-rating/dm-cmps-rating.component';\nimport { DmCmpsDatePipe } from './pipes/dm-cmps-date.pipe';\nexport const MY_DATE_FORMATS = {\n  parse: {\n    dateInput: 'LL',\n  },\n  display: {\n    dateInput: 'DD/MM/YYYY',\n    monthYearLabel: 'MMMM YYYY',\n    dateA11yLabel: 'LL',\n    monthYearA11yLabel: 'MMMM YYYY',\n  },\n};\n\n@NgModule({\n  declarations: [\n    DmCmpsComponent,\n    DmTableComponent,\n    DmSelectComponent,\n    DmCmpsSpinnerComponent,\n    DmCmpsSideNavComponent,\n    DmCmpsInputComponent,\n    DmCmpsColorPickerComponent,\n    DmCmpsRunOncePipe,\n    DmCmpsFilterByPipe,\n    DmCmpsRatingComponent,\n    DmCmpsDatePipe,\n  ],\n  imports: [\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule,\n    ɵInternalFormsSharedModule,\n\n    // material\n    MatCardModule,\n    MatButtonModule,\n    MatInputModule,\n    MatIconModule,\n    MatCheckboxModule,\n    MatTableModule,\n    MatDialogModule,\n    MatFormFieldModule,\n    MatSelectModule,\n    MatToolbarModule,\n    MatDividerModule,\n    MatMenuModule,\n    MatTooltipModule,\n    MatSlideToggleModule,\n    MatSortModule,\n    MatDatepickerModule,\n    MatNativeDateModule,\n    MatTabsModule,\n    MatSidenavModule,\n    MatSnackBarModule,\n    MatAutocompleteModule,\n    MatChipsModule,\n    MatRadioModule,\n    MatProgressSpinnerModule,\n    MatListModule,\n    MatPaginatorModule,\n    MatSliderModule,\n    MatBadgeModule,\n    MatButtonToggleModule,\n    MatGridListModule,\n    MatOptionModule,\n\n    // drag and drop\n    DragDropModule,\n  ],\n  providers: [\n    { provide: MAT_DATE_FORMATS, useValue: MY_DATE_FORMATS },\n    { provide: MAT_DATE_LOCALE, useValue: 'he-IL' },\n    // DmCmpsRunOncePipe,\n    // DmCmpsFilterByPipe,\n  ],\n\n  exports: [\n    DmCmpsComponent,\n    DmSelectComponent,\n    DmCmpsSpinnerComponent,\n    DmCmpsInputComponent,\n    DmTableComponent,\n    DmCmpsColorPickerComponent,\n    DmCmpsFilterByPipe,\n    DmCmpsRunOncePipe,\n    DmCmpsRatingComponent,\n    DmCmpsDatePipe,\n  ],\n})\nexport class DmCmpsModule {}\n","export enum HtmlTag {\n  A = 'a',\n  B = 'b',\n  BODY = 'body',\n  BR = 'br',\n  BUTTON = 'button',\n  CODE = 'code',\n  COL = 'col',\n  COLGROUP = 'colgroup',\n  DIV = 'div',\n  FOOTER = 'footer',\n  H1 = 'h1',\n  H2 = 'h2',\n  H3 = 'h3',\n  H4 = 'h4',\n  H5 = 'h5',\n  H6 = 'h6',\n  HEAD = 'head',\n  HR = 'hr',\n  HTML = 'html',\n  I = 'i',\n  IMG = 'img',\n  INPUT = 'input',\n  LABEL = 'label',\n  LI = 'li',\n  LINK = 'link',\n  MARK = 'mark',\n  META = 'meta',\n  OL = 'ol',\n  OPTGROUP = 'optgroup',\n  OPTION = 'option',\n  P = 'p',\n  PRE = 'pre',\n  SECTION = 'section',\n  SELECT = 'select',\n  SMALL = 'small',\n  SPAN = 'span',\n  STRONG = 'strong',\n  STYLE = 'style',\n  SCRIPT = 'script',\n  TABLE = 'table',\n  TBODY = 'tbody',\n  TD = 'td',\n  TEXTAREA = 'textarea',\n  TFOOT = 'tfoot',\n  TH = 'th',\n  THEAD = 'thead',\n  TIME = 'time',\n  TITLE = 'title',\n  TR = 'tr',\n  U = 'u',\n  UL = 'ul',\n}\n\nexport const defaultStyles: Record<string, Record<string, string>> = {\n  container: {\n    width: '100%',\n    'padding-right': 'var(--bs-gutter-x, 0.75rem)',\n    'padding-left': 'var(--bs-gutter-x, 0.75rem)',\n    'margin-right': 'auto',\n    'margin-left': 'auto',\n  },\n  row: {\n    display: 'flex',\n    'flex-wrap': 'wrap',\n    'margin-top': 'calc(-1 * var(--bs-gutter-y, 0.75rem))',\n    'margin-right': 'calc(-0.5 * var(--bs-gutter-x, 0.75rem))',\n    'margin-left': 'calc(-0.5 * var(--bs-gutter-x, 0.75rem))',\n  },\n  col: {\n    flex: '1',\n    'padding-right': 'var(--bs-gutter-x, 0.75rem)',\n    'padding-left': 'var(--bs-gutter-x, 0.75rem)',\n  },\n  btn: {\n    display: 'inline-block',\n    'font-weight': '400',\n    color: '#212529',\n    'text-align': 'center',\n    'vertical-align': 'middle',\n    'user-select': 'none',\n    'background-color': 'transparent',\n    border: '1px solid transparent',\n    padding: '0.375rem 0.75rem',\n    'font-size': '1rem',\n    'line-height': '1.5',\n    'border-radius': '0.375rem',\n    transition:\n      'color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out',\n  },\n  'd-flex': {\n    display: 'flex',\n  },\n  'justify-content-center': {\n    'justify-content': 'center',\n  },\n  'justify-content-between': {\n    'justify-content': 'space-between',\n  },\n  'justify-content-end': {\n    'justify-content': 'flex-end',\n  },\n  'align-items-center': {\n    'align-items': 'center',\n  },\n  'align-items-start': {\n    'align-items': 'flex-start',\n  },\n  'align-items-end': {\n    'align-items': 'flex-end',\n  },\n  'align-items-baseline': {\n    'align-items': 'baseline',\n  },\n  'align-items-stretch': {\n    'align-items': 'stretch',\n  },\n  'flex-row': {\n    'flex-direction': 'row',\n  },\n  'flex-column': {\n    'flex-direction': 'column',\n  },\n  'flex-wrap': {\n    'flex-wrap': 'wrap',\n  },\n  'flex-nowrap': {\n    'flex-wrap': 'nowrap',\n  },\n  'flex-grow-1': {\n    'flex-grow': '1',\n  },\n  'flex-shrink-1': {\n    'flex-shrink': '1',\n  },\n  'flex-grow-0': {\n    'flex-grow': '0',\n  },\n  'flex-shrink-0': {\n    'flex-shrink': '0',\n  },\n  'flex-fill': {\n    flex: '1 1 auto',\n  },\n  'btn-primary': {\n    color: '#fff',\n    'background-color': '#007bff',\n    'border-color': '#007bff',\n  },\n  'text-center': {\n    'text-align': 'center',\n  },\n  'text-right': {\n    'text-align': 'right',\n  },\n  'text-left': {\n    'text-align': 'left',\n  },\n  'font-bold': {\n    'font-weight': '700',\n  },\n  'display-1': {\n    'font-size': '4.5rem',\n    'font-weight': '300',\n    'line-height': '1.2',\n  },\n  alert: {\n    position: 'relative',\n    padding: '0.75rem 1.25rem',\n    'margin-bottom': '1rem',\n    border: '1px solid transparent',\n    'border-radius': '0.375rem',\n  },\n  'alert-success': {\n    color: '#155724',\n    'background-color': '#d4edda',\n    'border-color': '#c3e6cb',\n  },\n  'alert-danger': {\n    color: '#721c24',\n    'background-color': '#f8d7da',\n    'border-color': '#f5c6cb',\n  },\n  'shadow-sm': {\n    'box-shadow': '0 0.125rem 0.25rem rgba(0, 0, 0, 0.075)',\n  },\n  'text-muted': {\n    color: '#6c757d',\n  },\n  'm-0': {\n    margin: '0',\n  },\n  'mt-0': {\n    'margin-top': '0',\n  },\n  'mb-0': {\n    'margin-bottom': '0',\n  },\n  'ml-0': {\n    'margin-left': '0',\n  },\n  'mr-0': {\n    'margin-right': '0',\n  },\n  'p-0': {\n    padding: '0',\n  },\n  'pt-0': {\n    'padding-top': '0',\n  },\n  'pb-0': {\n    'padding-bottom': '0',\n  },\n  'pl-0': {\n    'padding-left': '0',\n  },\n  'pr-0': {\n    'padding-right': '0',\n  },\n  'w-100': {\n    width: '100%',\n  },\n  'h-100': {\n    height: '100%',\n  },\n  underline: {\n    'text-decoration': 'underline',\n  },\n  'fw-bolder': {\n    'font-weight': 'bolder',\n  },\n};\n\nexport const buildClass = (\n  name: string,\n  attributes: Record<string, string>\n): string => {\n  const attrs = Object.keys(attributes)\n    .map((key) => `${key}: ${attributes[key]}`)\n    .join('; ');\n  return `.${name} {${attrs}}`;\n};\n\nexport const buildDefaultClasses = () => {\n  return Object.keys(defaultStyles)\n    .map((selector) => {\n      return buildClass(selector, defaultStyles[selector]);\n    })\n    .join('\\n');\n};\n\nexport enum ParamsStyle {\n  m = 'margin',\n  mt = 'margin-top',\n  mb = 'margin-bottom',\n  ml = 'margin-left',\n  mr = 'margin-right',\n  p = 'padding',\n  pt = 'padding-top',\n  pb = 'padding-bottom',\n  pl = 'padding-left',\n  pr = 'padding-right',\n}\n\nexport const buildParamsClass = (name: ParamsStyle, value: string): string => {\n  return `${name}: \"${value}\"`;\n};\n","import { HtmlTag } from './html-builder.utils';\nexport type TagAttributes = Record<string, string | number>;\n\nexport class HtmlBuilder {\n  private tag: HtmlTag;\n  private attributes: TagAttributes = {};\n  private content: string = '';\n  private children: HtmlBuilder[] = [];\n\n  constructor(tag: HtmlTag, attributes?: TagAttributes, content?: string) {\n    this.tag = tag;\n    if (attributes) {\n      this.attributes = attributes;\n    }\n    if (content) {\n      this.content = content;\n    }\n  }\n\n  getTag() {\n    return this.tag;\n  }\n\n  getAttributes() {\n    return this.attributes;\n  }\n\n  setAttributes(attributes: TagAttributes) {\n    this.attributes = attributes;\n  }\n\n  getContent() {\n    return this.content;\n  }\n\n  setContent(content: string) {\n    this.content = content;\n  }\n\n  getChildren() {\n    return this.children;\n  }\n\n  setChildren(children: HtmlBuilder[]) {\n    this.children = children;\n  }\n\n  getChildByTag(tag: HtmlTag): HtmlBuilder | undefined {\n    return this.children.find((child) => child.tag == tag);\n  }\n\n  getId(): string {\n    return this.attributes['id'] + '';\n  }\n\n  getChildById(id: string): HtmlBuilder | undefined {\n    return this.children.find((child) => child.getId() == id);\n  }\n\n  createElement(\n    tag: HtmlTag,\n    attributes?: TagAttributes,\n    content?: string\n  ): HtmlBuilder {\n    return new HtmlBuilder(tag, attributes, content);\n  }\n\n  appendElement(element: HtmlBuilder) {\n    this.children.push(element);\n    return element;\n  }\n\n  appendNewElement(\n    tag: HtmlTag,\n    attributes?: TagAttributes,\n    content?: string\n  ): HtmlBuilder {\n    const child = this.createElement(tag, attributes, content);\n    this.children.push(child);\n    return child;\n  }\n\n  appendElementByTag(targetTag: HtmlTag, element: HtmlBuilder): HtmlBuilder {\n    const targetElement = this.children.find((child) => child.tag == targetTag);\n    targetElement?.appendElement(element);\n    return element;\n  }\n\n  appendNewElementByTag(\n    targetTag: HtmlTag,\n    tag: HtmlTag,\n    attributes?: TagAttributes,\n    content?: string\n  ): HtmlBuilder {\n    const targetElement = this.children.find((child) => child.tag == targetTag);\n    const child = this.createElement(tag, attributes, content);\n    targetElement?.appendElement(child);\n    return child;\n  }\n\n  appendElementById(\n    targetId: string,\n    tag: HtmlTag,\n    attributes?: TagAttributes,\n    content?: string\n  ): HtmlBuilder {\n    const targetElement = this.children.find(\n      (child) => child.getId() == targetId\n    );\n    const child = this.createElement(tag, attributes, content);\n    targetElement?.appendElement(child);\n    return child;\n  }\n\n  setAttribute(key: string, value: string): HtmlBuilder {\n    this.attributes[key] = value;\n    return this;\n  }\n\n  setRecursiveAttribute(\n    key: string,\n    value: string,\n    override: boolean = false\n  ): HtmlBuilder {\n    if (override || !this.attributes[key]) {\n      this.attributes[key] = value;\n    }\n    this.children.forEach((child) => child.setRecursiveAttribute(key, value));\n    return this;\n  }\n\n  setRecursiveStyle(\n    key: string,\n    value: string,\n    override: boolean = false\n  ): HtmlBuilder {\n    if (this.attributes['style']) {\n      if (!(this.attributes['style'] + '').includes(`${key}:`)) {\n        this.attributes['style'] += ` ${key}: ${value};`;\n      } else {\n        if (override) {\n          this.attributes['style'] = (this.attributes['style'] + '').replace(\n            new RegExp(`${key}: [^;]+;`, 'g'),\n            `${key}: ${value};`\n          );\n        }\n      }\n    } else {\n      this.attributes['style'] = `${key}: ${value};`;\n    }\n    this.children.forEach((child) => child.setRecursiveStyle(key, value));\n    return this;\n  }\n\n  addRecursiveClass(className: string) {\n    if (this.attributes['class']) {\n      const classes = (this.attributes['class'] + '').split(' ');\n      if (!classes.includes(className)) {\n        this.attributes['class'] += ` ${className}`;\n      }\n    } else {\n      this.attributes['class'] = className;\n    }\n    this.children.forEach((child) => child.addRecursiveClass(className));\n    return this;\n  }\n\n  setStyle(key: string, value: string): HtmlBuilder {\n    if (this.attributes['style']) {\n      if (!(this.attributes['style'] + '').includes(`${key}:`)) {\n        this.attributes['style'] += ` ${key}: ${value};`;\n      } else {\n        this.attributes['style'] = (this.attributes['style'] + '').replace(\n          new RegExp(`${key}: [^;]+;`, 'g'),\n          `${key}: ${value};`\n        );\n      }\n    } else {\n      this.attributes['style'] = `${key}: ${value};`;\n    }\n    return this;\n  }\n\n  setTextContent(content: string): HtmlBuilder {\n    this.content = content;\n    return this;\n  }\n\n  toHtml(): string {\n    const attrs = Object.keys(this.attributes)\n      .map((key) => `${key}=\"${this.attributes[key]}\"`)\n      .join(' ');\n\n    const childrenHtml = this.children.map((child) => child.toHtml()).join('');\n    return `<${this.tag} ${attrs}>${this.content}${childrenHtml}</${this.tag}>`;\n  }\n\n  static createHtmlDocument(): HtmlBuilder {\n    const html = new HtmlBuilder(HtmlTag.HTML);\n    const head = new HtmlBuilder(HtmlTag.HEAD).setAttribute('id', 'head');\n    const body = new HtmlBuilder(HtmlTag.BODY).setAttribute('id', 'body');\n    // const defaultClasses = buildDefaultClasses();\n\n    // head.appendNewElement(HtmlTag.STYLE, {}, defaultClasses);\n\n    html.appendElement(head);\n    html.appendElement(body);\n\n    return html;\n  }\n\n  createAndAppendToHead(\n    tag: HtmlTag,\n    attributes: TagAttributes = {},\n    content: string = ''\n  ): HtmlBuilder {\n    const head = this.children.find((child) => child.tag == 'head');\n    const child = this.createElement(tag, attributes, content);\n    head?.appendElement(child);\n    return child;\n  }\n\n  appendToHead(element: HtmlBuilder): HtmlBuilder {\n    const head = this.children.find((child) => child.tag == 'head');\n    head?.appendElement(element);\n    return element;\n  }\n\n  createAndAppendToBody(\n    tag: HtmlTag,\n    attributes: TagAttributes = {},\n    content: string = ''\n  ): HtmlBuilder {\n    const body = this.children.find((child) => child.tag == 'body');\n    const child = this.createElement(tag, attributes, content);\n    body?.appendElement(child);\n    return child;\n  }\n\n  appendToBody(element: HtmlBuilder): HtmlBuilder {\n    const body = this.children.find((child) => child.tag == 'body');\n    body?.appendElement(element);\n    return element;\n  }\n\n  static copyElement(\n    element: HtmlBuilder,\n    options?: { deep?: boolean; attributes?: boolean; content?: boolean }\n  ): HtmlBuilder {\n    const newElement = new HtmlBuilder(element.tag);\n    if (options?.attributes) {\n      newElement.setAttributes(element.getAttributes());\n    }\n    if (options?.content) {\n      newElement.setContent(element.getContent());\n    }\n    if (options?.deep) {\n      element.children.forEach((child) => {\n        newElement.appendElement(this.copyElement(child, options));\n      });\n    }\n    return newElement;\n  }\n}\n","import { Gender, Lang } from './mock.data.generator';\n\nexport const Names: Record<Lang, Record<Gender, string[]>> = {\n  en: {\n    male: [\n      'James',\n      'John',\n      'Robert',\n      'Michael',\n      'William',\n      'David',\n      'Richard',\n      'Joseph',\n      'Thomas',\n      'Charles',\n      'Christopher',\n      'Daniel',\n      'Matthew',\n      'Anthony',\n      'Mark',\n      'Donald',\n      'Steven',\n      'Paul',\n      'Andrew',\n      'Joshua',\n      'Kenneth',\n      'Kevin',\n      'Brian',\n      'George',\n      'Timothy',\n      'Ronald',\n      'Edward',\n      'Jason',\n      'Jeffrey',\n      'Ryan',\n      'Jacob',\n      'Gary',\n      'Nicholas',\n      'Eric',\n      'Jonathan',\n      'Stephen',\n      'Larry',\n      'Justin',\n      'Scott',\n      'Brandon',\n      'Benjamin',\n      'Samuel',\n      'Frank',\n      'Gregory',\n      'Raymond',\n      'Alexander',\n      'Patrick',\n      'Jack',\n      'Dennis',\n      'Jerry',\n      'Tyler',\n      'Aaron',\n      'Jose',\n      'Adam',\n      'Henry',\n      'Nathan',\n      'Douglas',\n      'Zachary',\n      'Peter',\n      'Kyle',\n      'Walter',\n      'Ethan',\n      'Jeremy',\n      'Harold',\n      'Keith',\n      'Christian',\n      'Roger',\n      'Noah',\n      'Gerald',\n      'Carl',\n      'Terry',\n      'Sean',\n      'Austin',\n      'Arthur',\n      'Lawrence',\n      'Jesse',\n      'Dylan',\n      'Bryan',\n      'Joe',\n      'Jordan',\n      'Billy',\n      'Bruce',\n      'Albert',\n      'Willie',\n      'Gabriel',\n      'Logan',\n      'Alan',\n      'Juan',\n      'Wayne',\n      'Roy',\n      'Ralph',\n      'Randy',\n      'Eugene',\n      'Vincent',\n      'Russell',\n      'Elijah',\n      'Louis',\n      'Bobby',\n      'Philip',\n      'Johnny',\n    ],\n    female: [\n      'Mary',\n      'Patricia',\n      'Jennifer',\n      'Linda',\n      'Elizabeth',\n      'Barbara',\n      'Susan',\n      'Jessica',\n      'Sarah',\n      'Karen',\n      'Nancy',\n      'Margaret',\n      'Lisa',\n      'Betty',\n      'Dorothy',\n      'Sandra',\n      'Ashley',\n      'Kimberly',\n      'Donna',\n      'Emily',\n      'Michelle',\n      'Carol',\n      'Amanda',\n      'Melissa',\n      'Deborah',\n      'Stephanie',\n      'Rebecca',\n      'Laura',\n      'Sharon',\n      'Cynthia',\n      'Kathleen',\n      'Amy',\n      'Shirley',\n      'Angela',\n      'Helen',\n      'Anna',\n      'Brenda',\n      'Pamela',\n      'Nicole',\n      'Samantha',\n      'Katherine',\n      'Emma',\n      'Ruth',\n      'Christine',\n      'Evelyn',\n      'Denise',\n      'Janet',\n      'Marilyn',\n      'Catherine',\n      'Frances',\n      'Ann',\n      'Joyce',\n      'Diane',\n      'Alice',\n      'Julie',\n      'Heather',\n      'Teresa',\n      'Doris',\n      'Gloria',\n      'Evelyn',\n      'Jean',\n      'Cheryl',\n      'Mildred',\n      'Katherine',\n      'Joan',\n      'Ashley',\n      'Judith',\n      'Rose',\n      'Janice',\n      'Kelly',\n      'Nicole',\n      'Judy',\n      'Christina',\n      'Kathy',\n      'Theresa',\n      'Beverly',\n      'Denise',\n      'Tammy',\n      'Irene',\n      'Jane',\n      'Lori',\n      'Rachel',\n      'Marilyn',\n      'Andrea',\n      'Kathryn',\n      'Louise',\n      'Sara',\n      'Anne',\n      'Jacqueline',\n      'Wanda',\n      'Bonnie',\n      'Julia',\n      'Ruby',\n      'Lois',\n      'Tina',\n      'Phyllis',\n      'Norma',\n      'Paula',\n      'Diana',\n      'Annie',\n    ],\n  },\n  ar: {\n    male: [\n      'جيمس',\n      'جون',\n      'روبرت',\n      'مايكل',\n      'وليام',\n      'ديفيد',\n      'ريتشارد',\n      'جوزيف',\n      'توماس',\n      'تشارلز',\n      'كريستوفر',\n      'دانيال',\n      'ماثيو',\n      'أنتوني',\n      'مارك',\n      'دونالد',\n      'ستيفن',\n      'بول',\n      'أندرو',\n      'جوشوا',\n      'كينيث',\n      'كيفن',\n      'برايان',\n      'جورج',\n      'تيموثي',\n      'رونالد',\n      'إدوارد',\n      'جايسون',\n      'جيفري',\n      'ريان',\n      'يعقوب',\n      'غاري',\n      'نيكولاس',\n      'إريك',\n      'جوناثان',\n      'ستيفن',\n      'لاري',\n      'جستن',\n      'سكوت',\n      'براندون',\n      'بنجامين',\n      'صموئيل',\n      'فرانك',\n      'جريجوري',\n      'ريمون',\n      'ألكساندر',\n      'باتريك',\n      'جاك',\n      'دنيس',\n      'جيري',\n      'تايلر',\n      'أرون',\n      'جوزيه',\n      'آدم',\n      'هنري',\n      'ناثان',\n      'دوغلاس',\n      'زكريا',\n      'بيتر',\n      'كايل',\n      'والتر',\n      'إيثان',\n      'جيرمي',\n      'هارولد',\n      'كيث',\n      'كريستيان',\n      'روجر',\n      'نوح',\n      'جيرالد',\n      'كارل',\n      'تيري',\n      'شون',\n      'أوستن',\n      'أرثر',\n      'لورنس',\n      'جيسي',\n      'ديلان',\n      'بريان',\n      'جو',\n      'جوردان',\n      'بيلي',\n      'بروس',\n      'ألبرت',\n      'ويلي',\n      'جبريل',\n      'لوغان',\n      'ألان',\n      'خوان',\n      'واين',\n      'روي',\n      'رالف',\n      'راندي',\n      'يوجين',\n      'فينسنت',\n      'راسل',\n      'إليا',\n      'لويس',\n      'بوبي',\n      'فيليب',\n      'جوني',\n      'برادلي',\n      'إيفان',\n      'ويسلي',\n      'إيان',\n      'أمير',\n      'كمال',\n      'نديم',\n      'سمير',\n      'مهند',\n      'باسل',\n    ],\n    female: [\n      'فاطمة',\n      'ليلى',\n      'نور',\n      'سميرة',\n      'حفصة',\n      'رحمة',\n      'سارة',\n      'عائشة',\n      'هند',\n      'أمينة',\n      'حنان',\n      'زينب',\n      'نادية',\n      'ياسمين',\n      'رنا',\n      'دلال',\n      'بسمة',\n      'رجاء',\n      'ميسون',\n      'نجلاء',\n      'سلوى',\n      'هدى',\n      'منال',\n      'جميلة',\n      'صفاء',\n      'ريم',\n      'إيمان',\n      'غادة',\n      'فريدة',\n      'سهى',\n      'كاميليا',\n      'مها',\n      'لميس',\n      'نهى',\n      'عبير',\n      'شيرين',\n      'تغريد',\n      'نوال',\n      'أسماء',\n      'لمى',\n      'منى',\n      'هيفاء',\n      'أميرة',\n      'ثريا',\n      'رانيا',\n      'سماهر',\n      'أنوار',\n      'علا',\n      'تمارا',\n      'وفاء',\n      'خديجة',\n      'مروة',\n      'جواهر',\n      'ناهد',\n      'مي',\n      'سعاد',\n      'منار',\n      'هالة',\n      'لبنى',\n      'شهد',\n      'سحر',\n      'أمل',\n      'جليلة',\n      'فاتن',\n      'مريم',\n      'لطيفة',\n      'نبيلة',\n      'ريهام',\n      'رباب',\n      'هناء',\n      'إلهام',\n      'نادرة',\n      'منى',\n      'نسرين',\n      'صباح',\n      'رفيف',\n      'هبة',\n      'بتول',\n      'ملاك',\n      'عهد',\n      'تقوى',\n      'حياة',\n      'فوزية',\n      'أسيل',\n      'دعاء',\n      'سلمى',\n      'سمية',\n      'عزة',\n      'ميادة',\n      'رشا',\n      'هند',\n      'ريما',\n      'ميعاد',\n      'كوثر',\n      'شيماء',\n      'عائدة',\n      'سناء',\n      'حلا',\n      'ليان',\n      'ميساء',\n    ],\n  },\n  he: {\n    male: [\n      'יעקב',\n      'יוחנן',\n      'רוברט',\n      'מיכאל',\n      'ויליאם',\n      'דוד',\n      \"ריצ'רד\",\n      'יוסף',\n      'תומס',\n      \"צ'ארלס\",\n      'כריסטופר',\n      'דניאל',\n      'מתתיהו',\n      'אנטוני',\n      'מרק',\n      'דונלד',\n      'סטיבן',\n      'פול',\n      'אנדרו',\n      'יהושע',\n      'כנת',\n      'קווין',\n      'בריאן',\n      \"ג'ורג'\",\n      'טימותי',\n      'רונלד',\n      'אדוארד',\n      \"ג'ייסון\",\n      \"ג'פרי\",\n      'ריאן',\n      'יועז',\n      'גרי',\n      'ניקולס',\n      'אריק',\n      'יונתן',\n      'סטפן',\n      'אליעזר',\n      'יהונתן',\n      'סקוט',\n      'ברנדון',\n      'בנימין',\n      'שמואל',\n      'פרנק',\n      'גרגורי',\n      'רימון',\n      'אלכסנדר',\n      'פטריק',\n      'יעקב',\n      'דניס',\n      'ירמיהו',\n      'טלר',\n      'אהרון',\n      'יוסי',\n      'אדם',\n      'הנרי',\n      'נתן',\n      'דגליש',\n      'זכריה',\n      'פטר',\n      'כליל',\n      'אביגדור',\n      'איתן',\n      'ירמי',\n      'חיים',\n      'קית',\n      'נוצרי',\n      'רוגר',\n      'נח',\n      \"ג'רלד\",\n      'קרל',\n      'תירוש',\n      'שון',\n      'אוסטין',\n      'ארתור',\n      'לורנץ',\n      'ישי',\n      'דילן',\n      'בריין',\n      'יוסף',\n      'יורדן',\n      'בלע',\n      'ברוך',\n      'אברהם',\n      'וילי',\n      'גבריאל',\n      'לוגן',\n      'אלן',\n      'חואן',\n      'וינס',\n      'רועי',\n      'רפאל',\n      'רנדי',\n      \"יוג'ין\",\n      'וינסנט',\n      'ראסל',\n      'אליהו',\n      'לואי',\n      'בובי',\n      'פיליפ',\n      'יונתן',\n      'ברדלי',\n      'אוון',\n      'וסלי',\n      'עין',\n      'עמיר',\n      'כמאל',\n      'נדים',\n      'שמיר',\n      'מוהנד',\n      'בסל',\n    ],\n    female: [\n      'אביגיל',\n      'אדה',\n      'אהובה',\n      'אורה',\n      'אורלי',\n      'אורנית',\n      'אילנה',\n      'אילת',\n      'אירית',\n      'אלה',\n      'אלונה',\n      'אמירה',\n      'אסתר',\n      'ברכה',\n      \"ג'וליה\",\n      'גילה',\n      'דבורה',\n      'דינה',\n      'דליה',\n      'דנה',\n      'הדס',\n      'הדסה',\n      'הילה',\n      'ורד',\n      'זהבה',\n      'חגית',\n      'חוה',\n      'חיה',\n      'טליה',\n      'יעל',\n      'יפה',\n      'יקירה',\n      'כרמית',\n      'לאה',\n      'ליאת',\n      'לילך',\n      'מאיה',\n      'מור',\n      'מיכל',\n      'מירה',\n      'מרים',\n      'נאוה',\n      'נועה',\n      'נטע',\n      'נילי',\n      'נעמה',\n      'נצה',\n      'סיגל',\n      'עדי',\n      'עדנה',\n      'עילית',\n      'ענבל',\n      'פנינה',\n      'צביה',\n      'ציפורה',\n      'קרן',\n      'רונית',\n      'רחל',\n      'רינת',\n      'רית',\n      'שולמית',\n      'שירה',\n      'שירלי',\n      'שרה',\n      'שרון',\n      'תהל',\n      'תמר',\n      'תפארת',\n      'תרצה',\n      'ירדן',\n      'לימור',\n      'מרגלית',\n      'נעמי',\n      'סמדר',\n      'עופרה',\n      'רויטל',\n      'שירי',\n      'איילה',\n      'בתיה',\n      'גליה',\n      'דורית',\n      'הילדה',\n      'ויקטוריה',\n      'זיוה',\n      'חינה',\n      'טל',\n      'יפית',\n      'כרמלה',\n      'לבנה',\n      'מלכה',\n      'נורית',\n      'סלע',\n      'עולה',\n      'פיגה',\n      'קרין',\n      'רות',\n      'שקד',\n      'תמי',\n      'אילנית',\n      'ברוריה',\n    ],\n  },\n};\n\nexport const LastNames: Record<Lang, string[]> = {\n  en: [\n    'Smith',\n    'Johnson',\n    'Williams',\n    'Brown',\n    'Jones',\n    'Garcia',\n    'Miller',\n    'Davis',\n    'Rodriguez',\n    'Martinez',\n    'Hernandez',\n    'Lopez',\n    'Gonzalez',\n    'Wilson',\n    'Anderson',\n    'Thomas',\n    'Taylor',\n    'Moore',\n    'Jackson',\n    'Martin',\n    'Lee',\n    'Perez',\n    'Thompson',\n    'White',\n    'Harris',\n    'Sanchez',\n    'Clark',\n    'Ramirez',\n    'Lewis',\n    'Robinson',\n    'Walker',\n    'Young',\n    'Allen',\n    'King',\n    'Wright',\n    'Scott',\n    'Torres',\n    'Nguyen',\n    'Hill',\n    'Flores',\n    'Green',\n    'Adams',\n    'Nelson',\n    'Baker',\n    'Hall',\n    'Rivera',\n    'Campbell',\n    'Mitchell',\n    'Carter',\n    'Roberts',\n    'Gomez',\n    'Phillips',\n    'Evans',\n    'Turner',\n    'Diaz',\n    'Parker',\n    'Cruz',\n    'Edwards',\n    'Collins',\n    'Reyes',\n    'Stewart',\n    'Morris',\n    'Morales',\n    'Murphy',\n    'Cook',\n    'Rogers',\n    'Gutierrez',\n    'Ortiz',\n    'Morgan',\n    'Cooper',\n    'Peterson',\n    'Bailey',\n    'Reed',\n    'Kelly',\n    'Howard',\n    'Ramos',\n    'Kim',\n    'Cox',\n    'Ward',\n    'Richardson',\n    'Watson',\n    'Brooks',\n    'Chavez',\n    'Wood',\n    'James',\n    'Bennett',\n    'Gray',\n    'Mendoza',\n    'Ruiz',\n    'Hughes',\n    'Price',\n    'Alvarez',\n    'Castillo',\n    'Sanders',\n    'Patel',\n    'Myers',\n    'Long',\n    'Ross',\n    'Foster',\n    'Jimenez',\n  ],\n  he: [\n    'סמיתה',\n    'גוהנסונ',\n    'וילליאמס',\n    'ברוונ',\n    'גונאס',\n    'גארכיא',\n    'מיללאר',\n    'דאויס',\n    'רודריגואז',\n    'מארתינאז',\n    'הארנאנדאז',\n    'לופאז',\n    'גונזאלאז',\n    'וילסונ',\n    'אנדארסונ',\n    'תהומאס',\n    'תאילור',\n    'מוורא',\n    'גאככסונ',\n    'מארתינ',\n    'לאא',\n    'פאראז',\n    'תהומפסונ',\n    'והיתא',\n    'הארריס',\n    'סאנכהאז',\n    'כלארכ',\n    'ראמיראז',\n    'לאויס',\n    'רובינסונ',\n    'ואלכאר',\n    'יוונג',\n    'אללאנ',\n    'כינג',\n    'וריגהת',\n    'סכותת',\n    'תורראס',\n    'נגויאנ',\n    'הילל',\n    'פלוראס',\n    'גראאנ',\n    'אדאמס',\n    'נאלסונ',\n    'באכאר',\n    'האלל',\n    'ריוארא',\n    'כאמפבאלל',\n    'מיתכהאלל',\n    'כארתאר',\n    'רובארתס',\n    'גומאז',\n    'פהילליפס',\n    'אואנס',\n    'תורנאר',\n    'דיאז',\n    'פארכאר',\n    'כרוז',\n    'אדוארדס',\n    'כוללינס',\n    'ראיאס',\n    'סתאוארת',\n    'מורריס',\n    'מוראלאס',\n    'מורפהי',\n    'כווכ',\n    'רוגארס',\n    'גותיארראז',\n    'ורתיז',\n    'מורגאנ',\n    'כוופאר',\n    'פאתארסונ',\n    'באילאי',\n    'ראאד',\n    'כאללי',\n    'הווארד',\n    'ראמוס',\n    'כימ',\n    'כוקס',\n    'וארד',\n    'ריכהארדסונ',\n    'ואתסונ',\n    'ברווכס',\n    'כהאואז',\n    'וווד',\n    'גאמאס',\n    'באננאתת',\n    'גראי',\n    'מאנדוזא',\n    'רויז',\n    'הוגהאס',\n    'פריכא',\n    'אלואראז',\n    'כאסתיללו',\n    'סאנדארס',\n    'פאתאל',\n    'מיארס',\n    'לונג',\n    'רוסס',\n    'פוסתאר',\n    'גימאנאז',\n  ],\n  ar: [\n    'سميته',\n    'جوهنسون',\n    'ويلليامس',\n    'بروون',\n    'جونيس',\n    'جاركيا',\n    'ميللير',\n    'دافيس',\n    'رودريجويز',\n    'مارتينيز',\n    'هيرنانديز',\n    'لوبيز',\n    'جونزاليز',\n    'ويلسون',\n    'انديرسون',\n    'تهوماس',\n    'تايلور',\n    'مووري',\n    'جاككسون',\n    'مارتين',\n    'ليي',\n    'بيريز',\n    'تهومبسون',\n    'وهيتي',\n    'هارريس',\n    'سانكهيز',\n    'كلارك',\n    'راميريز',\n    'ليويس',\n    'روبينسون',\n    'والكير',\n    'يوونج',\n    'اللين',\n    'كينج',\n    'وريجهت',\n    'سكوتت',\n    'تورريس',\n    'نجويين',\n    'هيلل',\n    'فلوريس',\n    'جريين',\n    'ادامس',\n    'نيلسون',\n    'باكير',\n    'هالل',\n    'ريفيرا',\n    'كامببيلل',\n    'ميتكهيلل',\n    'كارتير',\n    'روبيرتس',\n    'جوميز',\n    'بهيلليبس',\n    'يفانس',\n    'تورنير',\n    'دياز',\n    'باركير',\n    'كروز',\n    'يدواردس',\n    'كوللينس',\n    'ريييس',\n    'ستيوارت',\n    'مورريس',\n    'موراليس',\n    'موربهي',\n    'كووك',\n    'روجيرس',\n    'جوتييرريز',\n    'ورتيز',\n    'مورجان',\n    'كووبير',\n    'بيتيرسون',\n    'بايليي',\n    'رييد',\n    'كيللي',\n    'هووارد',\n    'راموس',\n    'كيم',\n    'كوكس',\n    'وارد',\n    'ريكهاردسون',\n    'واتسون',\n    'برووكس',\n    'كهافيز',\n    'ووود',\n    'جاميس',\n    'بيننيتت',\n    'جراي',\n    'ميندوزا',\n    'رويز',\n    'هوجهيس',\n    'بريكي',\n    'الفاريز',\n    'كاستيللو',\n    'سانديرس',\n    'باتيل',\n    'مييرس',\n    'لونج',\n    'روسس',\n    'فوستير',\n    'جيمينيز',\n  ],\n};\n\nexport const Countries: Record<Lang, string[]> = {\n  en: [\n    'United States',\n    'China',\n    'India',\n    'Russia',\n    'Brazil',\n    'Japan',\n    'Germany',\n    'Iran',\n    'Canada',\n    'France',\n    'United Kingdom',\n    'Italy',\n    'Spain',\n    'Turkey',\n    'Australia',\n    'Saudi Arabia',\n    'South Korea',\n    'Mexico',\n    'Indonesia',\n    'Netherlands',\n    'Switzerland',\n    'Sweden',\n    'Belgium',\n    'Poland',\n    'Argentina',\n    'Austria',\n    'Norway',\n    'Denmark',\n    'Egypt',\n    'Greece',\n    'Portugal',\n    'Israel',\n    'Thailand',\n    'Singapore',\n    'South Africa',\n    'Ireland',\n    'Finland',\n    'Chile',\n    'Pakistan',\n    'Malaysia',\n    'New Zealand',\n    'Vietnam',\n    'Nigeria',\n    'Colombia',\n    'Philippines',\n    'Bangladesh',\n    'Morocco',\n    'Algeria',\n    'Czech Republic',\n    'Hungary',\n  ],\n  he: [\n    'ארצות הברית',\n    'סין',\n    'הודו',\n    'רוסיה',\n    'ברזיל',\n    'יפן',\n    'גרמניה',\n    'איראן',\n    'קנדה',\n    'צרפת',\n    'הממלכה המאוחדת',\n    'איטליה',\n    'ספרד',\n    'טורקיה',\n    'אוסטרליה',\n    'ערב הסעודית',\n    'דרום קוריאה',\n    'מקסיקו',\n    'אינדונזיה',\n    'הולנד',\n    'שווייץ',\n    'שוודיה',\n    'בלגיה',\n    'פולין',\n    'ארגנטינה',\n    'אוסטריה',\n    'נורווגיה',\n    'דנמרק',\n    'מצרים',\n    'יוון',\n    'פורטוגל',\n    'ישראל',\n    'תאילנד',\n    'סינגפור',\n    'דרום אפריקה',\n    'אירלנד',\n    'פינלנד',\n    \"צ'ילה\",\n    'פקיסטן',\n    'מלזיה',\n    'ניו זילנד',\n    'וייטנאם',\n    'ניגריה',\n    'קולומביה',\n    'הפיליפינים',\n    'בנגלדש',\n    'מרוקו',\n    \"אלג'יריה\",\n    \"הרפובליקה הצ'כית\",\n    'הונגריה',\n  ],\n  ar: [\n    'الولايات المتحدة',\n    'الصين',\n    'الهند',\n    'روسيا',\n    'البرازيل',\n    'اليابان',\n    'ألمانيا',\n    'إيران',\n    'كندا',\n    'فرنسا',\n    'المملكة المتحدة',\n    'إيطاليا',\n    'إسبانيا',\n    'تركيا',\n    'أستراليا',\n    'المملكة العربية السعودية',\n    'كوريا الجنوبية',\n    'المكسيك',\n    'إندونيسيا',\n    'هولندا',\n    'سويسرا',\n    'السويد',\n    'بلجيكا',\n    'بولندا',\n    'الأرجنتين',\n    'النمسا',\n    'النرويج',\n    'الدنمارك',\n    'مصر',\n    'اليونان',\n    'البرتغال',\n    'إسرائيل',\n    'تايلاند',\n    'سنغافورة',\n    'جنوب أفريقيا',\n    'أيرلندا',\n    'فنلندا',\n    'تشيلي',\n    'باكستان',\n    'ماليزيا',\n    'نيوزيلندا',\n    'فيتنام',\n    'نيجيريا',\n    'كولومبيا',\n    'الفلبين',\n    'بنغلاديش',\n    'المغرب',\n    'الجزائر',\n    'جمهورية التشيك',\n    'المجر',\n  ],\n};\n\nexport const ObjectKeys: string[] = [\n  'latitude',\n  'country',\n  'address',\n  'user',\n  'phone',\n  'status',\n  'metadata',\n  'description',\n  'settings',\n  'isActive',\n  'weight',\n  'id',\n  'longitude',\n  'type',\n  'zipcode',\n  'name',\n  'timestamp',\n  'parentId',\n  'email',\n  'date',\n  'quantity',\n  'price',\n  'details',\n  'category',\n  'color',\n  'location',\n  'city',\n  'size',\n  'permissions',\n  'value',\n];\n","import {\n  DmCmpsDateService,\n  DmCmpsDateTypes,\n} from '../dm-cmps-input/dm-cmps-date.service';\nimport { Countries, LastNames, Names, ObjectKeys } from './mock.data.utils';\n\nexport type Lang = 'en' | 'he' | 'ar';\nexport type Gender = 'male' | 'female';\nclass MockData {\n  firstName(lang: Lang = 'en', gender: Gender = 'male', index: number = -1) {\n    if (index == -1) {\n      index = Math.floor(Math.random() * Names[lang][gender].length);\n    }\n    if (index > Names[lang][gender].length) {\n      index = index % Names[lang][gender].length;\n    }\n    return Names[lang][gender][index];\n  }\n\n  lastName(lang: Lang = 'en', index: number = -1) {\n    if (index == -1) {\n      index = Math.floor(Math.random() * LastNames[lang].length);\n    }\n    if (index > LastNames[lang].length) {\n      index = index % LastNames[lang].length;\n    }\n    return LastNames[lang][index];\n  }\n\n  randomNumber(min?: number, max?: number) {\n    if (min == undefined) {\n      min = 0;\n    }\n    if (max == undefined) {\n      max = 10000;\n    }\n    if (min > max) {\n      [min, max] = [max, min];\n    }\n    return Math.floor(Math.random() * (max - min) + min);\n  }\n\n  fromArray<T>(array: T[]): T {\n    const index = this.randomNumber(0, array.length);\n    return array[index];\n  }\n\n  randomDate(startDate?: DmCmpsDateTypes, endDate?: DmCmpsDateTypes) {\n    if (!startDate) {\n      startDate = new Date(1900, 0, 1);\n    } else {\n      startDate = DmCmpsDateService.getDate(startDate) as Date;\n    }\n    if (!endDate) {\n      endDate = new Date();\n    } else {\n      endDate = DmCmpsDateService.getDate(endDate) as Date;\n    }\n    let startTime = startDate.getTime();\n    let endTime = endDate.getTime();\n    if (startTime > endTime) {\n      [startTime, endTime] = [endTime, startTime];\n    }\n    return new Date(\n      Math.floor(Math.random() * (endTime - startTime) + startTime)\n    );\n  }\n\n  randomBoolean() {\n    return Math.random() > 0.5;\n  }\n\n  phoneNumber() {\n    return `05${Math.floor(Math.random() * 100000000)}`;\n  }\n\n  idNumber() {\n    return `${Math.floor(Math.random() * 1000000000)}`;\n  }\n\n  validIdNumber() {\n    let id = this.idNumber();\n    let sum = 0;\n    for (let i = 0; i < id.length - 1; i++) {\n      let num = +id[i];\n      if (i % 2 == 0) {\n        sum += num;\n      } else {\n        sum += num * 2;\n      }\n    }\n    let lastDigit = 10 - (sum % 10);\n    return id.slice(0, -1) + lastDigit;\n  }\n\n  email() {\n    const domains: string[] = [\n      'gmail.com',\n      'yahoo.com',\n      'hotmail.com',\n      'outlook.com',\n      'example.com',\n    ];\n    return `${this.firstName().toLowerCase()}${this.lastName().toLowerCase()}.${this.randomNumber()}@${this.fromArray(\n      domains\n    )}`;\n  }\n\n  country(lang: Lang = 'en', index: number = -1) {\n    if (index == -1) {\n      index = Math.floor(Math.random() * Countries[lang].length);\n    }\n    if (index > Countries[lang].length) {\n      index = index % Countries[lang].length;\n    }\n    return Countries[lang][index];\n  }\n\n  address(lang: Lang = 'en') {\n    return `${this.randomNumber(1, 100)} ${this.country(\n      lang\n    )} ${this.randomNumber(10000, 99999)}`;\n  }\n\n  randomArray<T>(\n    generator: () => T,\n    length: number = -1,\n    min?: number,\n    max?: number\n  ): T[] {\n    if (min == undefined) {\n      min = 1;\n    }\n    if (max == undefined) {\n      max = 10;\n    }\n    if (min > max) {\n      [min, max] = [max, min];\n    }\n    if (length == -1) {\n      length = this.randomNumber(min, max);\n    }\n    let arr: T[] = [];\n    for (let i = 0; i < length; i++) {\n      arr.push(generator());\n    }\n    return arr;\n  }\n\n  randomObject(\n    keys: string[] = [],\n    size: number = -1,\n    min?: number,\n    max?: number\n  ) {\n    if (min == undefined) {\n      min = 1;\n    }\n    if (max == undefined) {\n      max = 10;\n    }\n    if (min > max) {\n      [min, max] = [max, min];\n    }\n    if (size == -1) {\n      size = this.randomNumber(min, max);\n    }\n    if (keys.length == 0) {\n      keys = this.randomArray(() => this.fromArray(ObjectKeys), size);\n    }\n    const functions: Record<number, Function> = {\n      0: () => this.randomNumber(),\n      1: () => this.randomBoolean(),\n      2: () => this.phoneNumber(),\n      3: () => this.idNumber(),\n      4: () => this.validIdNumber(),\n      5: () => this.email(),\n      6: () => this.country(),\n      7: () => this.address(),\n      8: () =>\n        this.randomArray(functions[this.randomNumber(0, 12)] as () => any),\n      9: () => this.randomObject(),\n      10: () => this.randomDate(),\n      11: () => this.firstName(),\n      12: () => this.lastName(),\n    };\n    let obj: any = {};\n    for (let i = 0; i < size; i++) {\n      let key = keys[i];\n      obj[key] = functions[this.randomNumber(0, 12)]();\n    }\n    return obj;\n  }\n\n  objectId() {\n    const chars =\n      '0123456789abcdefghijklm0123456789nopqrstuvwxyzABCDEF0123456789GHIJKLM0123456789NOPQRSTUVWXYZ';\n    let objectId = '';\n    for (let i = 0; i < 24; i++) {\n      objectId += chars[Math.floor(Math.random() * chars.length)];\n    }\n    return objectId;\n  }\n}\n\ntype DmCmpsDataDefinition = {\n  [key: string]: any;\n};\n\ntype DmCmpsMockDataArrayDefinition = [DmCmpsDataDefinition, number | Function];\nexport type DmCmpsMockDataDefinition =\n  | DmCmpsDataDefinition\n  | DmCmpsMockDataArrayDefinition;\n\nexport function generateMockData(definition: DmCmpsMockDataDefinition): any {\n  if (\n    Array.isArray(definition) &&\n    (typeof definition[1] === 'number' || typeof definition[1] === 'function')\n  ) {\n    let [template, count] = definition;\n    if (typeof count === 'function') {\n      count = count();\n    }\n    return Array.from({ length: count }, () => generateSingleObject(template));\n  } else {\n    return generateSingleObject(definition as DmCmpsDataDefinition);\n  }\n}\n\nexport function generateSingleObject(template: DmCmpsDataDefinition): any {\n  let result: { [key: string]: any } = {};\n  for (const key in template) {\n    const value = template[key];\n    if (typeof value === 'function') {\n      result[key] = value();\n    } else if (\n      Array.isArray(value) &&\n      (typeof value[1] === 'number' || typeof value[1] === 'function')\n    ) {\n      let [innerTemplate, length] = value;\n      if (typeof length === 'function') {\n        length = length();\n      }\n      result[key] = Array.from({ length }, () =>\n        generateSingleObject(innerTemplate)\n      );\n    } else if (typeof value === 'object' && value !== null) {\n      result[key] = generateSingleObject(value);\n    } else {\n      result[key] = value;\n    }\n  }\n  return result;\n}\n\nexport const mockData = new MockData();\n","/*\n * Public API Surface of dm-cmps\n */\n\nexport * from './lib/dm-cmps.service';\nexport * from './lib/dm-cmps.component';\nexport * from './lib/dm-cmps.module';\nexport * from './lib/dm-select/dm-select.component';\nexport * from './lib/dm-table/dm-table.component';\nexport * from './lib/dm-cmps-spinner/dm-cmps-spinner.component';\nexport * from './lib/dm-cmps-spinner/dm-cmps-spinner.service';\nexport * from './lib/dm-cmps-input/dm-cmps-input.component';\nexport * from './lib/dm-cmps-input/dm-cmps-date.service';\nexport * from './lib/dm-cmps-color-picker/dm-cmps-color-picker.component';\nexport * from './lib/html-printer/html-printer.service';\nexport * from './lib/pipes/filter-by.pipe';\nexport * from './lib/pipes/run-once.pipe';\nexport * from './lib/pipes/run-once-pipe.service';\nexport * from './lib/html-printer/html-builder';\nexport * from './lib/html-printer/html-builder.utils';\nexport * from './lib/dm-cmps-mock-data-generator/mock.data.generator';\nexport * from './lib/dm-cmps-rating/dm-cmps-rating.component';\nexport * from './lib/pipes/dm-cmps-date.pipe';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i9","i7","i8","i1.ExcelService","i2","i3.DmCmpsHtmlPrinterService","i4.DmCmpsDateService","i5.DmCmpsRunOncePipeService","i6","i10","i11","i12","i13","i15","i16","i18.DmSelectComponent","i19.DmCmpsInputComponent","i1.DmCmpsSpinnerService","i3","i4","i1.DmCmpsRunOncePipeService"],"mappings":"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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MAyDa,iBAAiB,CAAA;IAM5B,IAA4C,QAAQ,CAAC,KAAc,EAAA;AACjE,QAAA,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC;AACrC,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;AAC7B,YAAA,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC;AACrC,SAAA;KACF;IAED,IAA4C,QAAQ,CAAC,KAAc,EAAA;AACjE,QAAA,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC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M;YACN,KAAK;YACL,MAAM;YACN,KAAK;YACL,OAAO;YACP,OAAO;YACP,KAAK;YACL,MAAM;YACN,SAAS;YACT,MAAM;YACN,MAAM;YACN,MAAM;YACN,KAAK;YACL,OAAO;YACP,MAAM;YACN,IAAI;YACJ,OAAO;YACP,KAAK;YACL,OAAO;YACP,KAAK;YACL,QAAQ;YACR,OAAO;YACP,OAAO;YACP,KAAK;YACL,MAAM;YACN,OAAO;YACP,MAAM;YACN,OAAO;YACP,KAAK;YACL,MAAM;YACN,OAAO;YACP,MAAM;YACN,QAAQ;YACR,MAAM;YACN,KAAK;YACL,MAAM;YACN,MAAM;YACN,MAAM;YACN,MAAM;YACN,MAAM;YACN,QAAQ;YACR,QAAQ;YACR,MAAM;YACN,OAAO;YACP,MAAM;YACN,MAAM;YACN,OAAO;YACP,OAAO;YACP,OAAO;YACP,MAAM;YACN,MAAM;YACN,KAAK;YACL,MAAM;YACN,MAAM;YACN,MAAM;YACN,MAAM;YACN,OAAO;YACP,KAAK;AACN,SAAA;AACD,QAAA,MAAM,EAAE;YACN,QAAQ;YACR,KAAK;YACL,OAAO;YACP,MAAM;YACN,OAAO;YACP,QAAQ;YACR,OAAO;YACP,MAAM;YACN,OAAO;YACP,KAAK;YACL,OAAO;YACP,OAAO;YACP,MAAM;YACN,MAAM;YACN,QAAQ;YACR,MAAM;YACN,OAAO;YACP,MAAM;YACN,MAAM;YACN,KAAK;YACL,KAAK;YACL,MAAM;YACN,MAAM;YACN,KAAK;YACL,MAAM;YACN,MAAM;YACN,KAAK;YACL,KAAK;YACL,MAAM;YACN,KAAK;YACL,KAAK;YACL,OAAO;YACP,OAAO;YACP,KAAK;YACL,MAAM;YACN,MAAM;YACN,MAAM;YACN,KAAK;YACL,MAAM;YACN,MAAM;YACN,MAAM;YACN,MAAM;YACN,MAAM;YACN,KAAK;YACL,MAAM;YACN,MAAM;YACN,KAAK;YACL,MAAM;YACN,KAAK;YACL,MAAM;YACN,OAAO;YACP,MAAM;YACN,OAAO;YACP,MAAM;YACN,QAAQ;YACR,KAAK;YACL,OAAO;YACP,KAAK;YACL,MAAM;YACN,KAA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"}