{"version":3,"file":"flexi-grid.mjs","sources":["../../../library/src/lib/directives/flexi-grid-cell-template.directive.ts","../../../library/src/lib/directives/flexi-grid-header-template.directive.ts","../../../library/src/lib/directives/flexi-grid-footer-template.directive.ts","../../../library/src/lib/components/flexi-grid-column.component.ts","../../../library/src/lib/models/state.model.ts","../../../library/src/lib/directives/flexi-grid-column-command-template.directive.ts","../../../library/src/lib/directives/flexi-grid-caption-command-template.directive.ts","../../../library/src/lib/components/flexi-grid.component.ts","../../../library/src/lib/components/flexi-grid.component.html","../../../library/src/lib/services/flexi-grid.service.ts","../../../library/src/lib/modules/flexi-grid.module.ts","../../../library/src/lib/models/flexi-grid-filter-data.model.ts","../../../library/src/flexi-grid.ts"],"sourcesContent":["import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n    selector: '[flexiGridCellTemplate]',\r\n    standalone: false\r\n})\r\nexport class FlexiGridCellTemplateDirective {\r\n  constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n    selector: '[flexiGridHeaderTemplate]',\r\n    standalone: false\r\n})\r\nexport class FlexiGridHeaderTemplateDirective {\r\n  constructor(public templateRef: TemplateRef<any>) { }\r\n}","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[flexiGridFooterTemplate]',\r\n  standalone: false\r\n})\r\nexport class FlexiGridFooterTemplateDirective {\r\n constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n","import { Component, SimpleChanges, TemplateRef, output, input, Input, signal, linkedSignal, contentChild, contentChildren } from '@angular/core';\r\nimport { FlexiGridFilterDataModel } from '../models/flexi-grid-filter-data.model';\r\nimport { FlexiGridCellTemplateDirective } from '../directives/flexi-grid-cell-template.directive';\r\nimport { FlexiGridHeaderTemplateDirective } from '../directives/flexi-grid-header-template.directive';\r\nimport { FlexiGridFooterTemplateDirective } from '../directives/flexi-grid-footer-template.directive';\r\nimport { FilterOperator } from '../models/state.model';\r\n\r\n@Component({\r\n    selector: 'flexi-grid-column',\r\n    host: { '[attr.host-id]': '\"flexi-grid-column-1\"' },\r\n    template: '',\r\n    standalone: false\r\n})\r\nexport class FlexiGridColumnComponent {\r\n  readonly field = input<string>(\"\");\r\n  readonly title = input<string>(\"\");\r\n  readonly sortable = input<boolean>(true);\r\n  readonly filterable = input<boolean>(true);\r\n  readonly visible = input<boolean>(true);\r\n  readonly filterType = input<FilterType>(\"text\");\r\n  readonly format = input<string | CurrencyFormatType | null>(null);\r\n  readonly fraction = input<number>(2);\r\n  readonly symbol = input<string>(\"\");\r\n  readonly showSymbolInFront = input<boolean>(true);\r\n  readonly width = input<string>(\"160px\");\r\n  readonly resizable = input<boolean>(true);\r\n  readonly className = input<string>(\"\");\r\n  readonly textAlign = input<TextAlignType>(\"left\");\r\n  readonly hideOverflow = input<boolean>(true);\r\n  readonly filterData = input<FlexiGridFilterDataModel[] | string[] | number[]>([]);\r\n  readonly booleanData = input<string[]>([]);\r\n  readonly showCheckbox = input<boolean>(false);\r\n  readonly filterValue = input<any>();\r\n  readonly filterValue2 = input<any>();\r\n\r\n  readonly showSecondDate = signal<boolean>(false);\r\n  readonly filterOperator = signal<FilterOperator>(\"contains\");\r\n  readonly timeStamp = signal<string>(\r\n    `${new Date().getTime()}-${Math.random().toString(36).slice(2, 11)}`\r\n  );\r\n  readonly filterValueSignal = linkedSignal(()=> this.filterValue());\r\n  readonly filterValue2Signal = linkedSignal(()=> this.filterValue2());\r\n  readonly visibleSignal = linkedSignal(() => this.visible());\r\n  readonly widthSignal = linkedSignal(() => this.width());\r\n\r\n  readonly onChange = output<any>();\r\n\r\n  readonly cellTemplate = contentChild(FlexiGridCellTemplateDirective, { read: TemplateRef });\r\n  readonly headerTemplate = contentChild(FlexiGridHeaderTemplateDirective, { read: TemplateRef });\r\n  readonly footerTemplates = contentChildren(FlexiGridFooterTemplateDirective, {read: TemplateRef});\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['filterType']) {\r\n      this.setDefaultFilterOperator();\r\n    }\r\n  }\r\n\r\n  setDefaultFilterOperator() {\r\n    const filterType = this.filterType();\r\n    if (filterType === 'number') {\r\n      this.filterOperator.set('ge');\r\n    }\r\n    else if (filterType === \"boolean\" || filterType === \"select\") {\r\n      this.filterOperator.set(\"eq\");\r\n    }\r\n    else if (filterType === \"date\") {\r\n      this.filterOperator.set(\"eq\");\r\n    }\r\n    else {\r\n      this.filterOperator.set('contains');\r\n    }\r\n  }\r\n}\r\n\r\nexport type TextAlignType = \"left\" | \"center\" | \"right\";\r\nexport type FilterType = \"text\" | \"date\" | \"date-time\" | \"number\" | \"select\" | \"boolean\"\r\nexport type CurrencyFormatType = \"n\" | \"c\"","import { FilterType } from \"../components/flexi-grid-column.component\";\r\n\r\nexport class StateModel{\r\n    pageNumber: number = 1;\r\n    pageSize: number = 10;\r\n    skip: number = 0;\r\n    sort: StateSortModel = {\r\n      field: '',\r\n      dir: 'asc'\r\n    };\r\n    filter: StateFilterModel[] = [];\r\n  }\r\n\r\n  export interface StateSortModel{\r\n    dir: 'asc' | 'desc';\r\n    field: string;\r\n  }\r\n\r\n  export interface StateFilterModel{\r\n    field: string;\r\n    value: any;\r\n    value2?: string;\r\n    operator: FilterOperator;\r\n    type: FilterType;\r\n  }\r\n\r\n  export const initialStateFilterModel: StateFilterModel = {\r\n    field: '',\r\n    value: '',\r\n    operator: 'contains',\r\n    type: 'text'\r\n  }\r\n\r\n  export type FilterOperator =\r\n  | 'eq'           // Equals\r\n  | 'ne'           // Not equal\r\n  | 'contains'     // Contains\r\n  | 'not contains' // Does not contain\r\n  | 'startswith'   // Starts with\r\n  | 'endswith'     // Ends with\r\n  | 'gt'           // Greater than\r\n  | 'ge'           // Greater than or equal\r\n  | 'lt'           // Less than\r\n  | 'le'           // Less than or equal\r\n  | 'range';       // Range (for date and number types)","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[flexiGridColumnCommandTemplate]',\r\n  standalone: false\r\n})\r\nexport class FlexiGridColumnCommandTemplateDirective {\r\n  constructor(public templateRef: TemplateRef<any>) { }\r\n}","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[flexiGridCaptionCommandTemplate]',\r\n  standalone: false\r\n})\r\nexport class FlexiGridCaptionCommandTemplateDirective {\r\n  constructor(public templateRef: TemplateRef<any>) { }\r\n}","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostListener, Input, OnChanges, SimpleChanges, TemplateRef, ViewEncapsulation, inject, signal, output, input, contentChildren, viewChild, linkedSignal, computed, contentChild, OnInit } from '@angular/core';\r\nimport { FilterType, FlexiGridColumnComponent, TextAlignType } from './flexi-grid-column.component';\r\nimport { FilterOperator, initialStateFilterModel, StateFilterModel, StateModel, StateSortModel } from '../models/state.model';\r\nimport ExcelJS from 'exceljs';\r\nimport { saveAs } from 'file-saver-es';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { CdkDragDrop } from '@angular/cdk/drag-drop';\r\nimport { FlexiGridReorderModel } from '../models/flexi-grid-reorder.model';\r\nimport { FlexiGridColumnCommandTemplateDirective } from '../directives/flexi-grid-column-command-template.directive';\r\nimport { FlexiGridCaptionCommandTemplateDirective } from '../directives/flexi-grid-caption-command-template.directive';\r\nimport { StatusChangeEvent } from '@angular/forms';\r\n\r\n@Component({\r\n  selector: 'flexi-grid',\r\n  templateUrl: './flexi-grid.component.html',\r\n  styleUrls: [\r\n    \"./css/flexi-grid-start.css\",\r\n    \"./css/flexi-grid-data.css\",\r\n    \"./css/flexi-grid.common.css\",\r\n    \"./flexi-grid.component.css\",\r\n    \"./css/flexi-grid-command.css\",\r\n    \"./css/flexi-grid-dropdown.css\",\r\n    \"./css/flexi-grid-filter.css\",\r\n    \"./css/flexi-grid-sort.css\"\r\n  ],\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: false\r\n})\r\nexport class FlexiGridComponent implements OnChanges, AfterViewInit, OnInit {\r\n  readonly data = input.required<any[]>();\r\n  readonly total = input<number | null>(0);\r\n  readonly pageable = input<boolean>(true);\r\n  readonly showIndex = input<boolean>(false);\r\n  readonly indexTextAlign = input<TextAlignType>(\"center\");\r\n  readonly pageSizeList = input<number[]>([5, 10, 20, 30, 50, 100, 500, 1000]);\r\n  readonly loading = input<boolean>(false);\r\n  readonly sortable = input<boolean>(true);\r\n  readonly themeClass = input<\"light\" | \"dark\">(\"light\");\r\n  readonly filterable = input<boolean>(true);\r\n  readonly captionTitle = input<string>(\"\");\r\n  readonly footerTemplate = input<TemplateRef<any> | any>();\r\n  readonly showColumnVisibility = input<boolean>(true);\r\n  readonly showRefreshBtn = input<boolean>(true);\r\n  readonly dataBinding = input<boolean>(false);\r\n  readonly showCaption = input<boolean>(false);\r\n  readonly showExportExcelBtn = input<boolean>(false);\r\n  readonly height = input<string>(\"450px\");\r\n  readonly useMinHeight = input<boolean>(true);\r\n  readonly minHeight = input<string>(\"450px\");\r\n  readonly autoHeight = input<boolean>(true);\r\n  readonly minWidth = input<string>(\"1050px\");\r\n  readonly useMinWidth = input<boolean>(false);\r\n  readonly autoWidth = input<boolean>(true);\r\n  readonly width = input<string>(\"100%\");\r\n  readonly indexWidth = input<string>(\"45px\");\r\n  readonly exportExcelFileName = input<string>(\"excel-export\");\r\n  readonly exportExcelButtonClick = input<(() => void)>();\r\n  readonly resizable = input<boolean>(true);\r\n  readonly tbodyStyle = input<any>({});\r\n  readonly trMinHeight = input<string>(\"45px\");\r\n  readonly language = input<\"tr\" | \"en\" | \"bg\">(\"en\");\r\n  readonly commandColumnTitle = input<string>(\"\");\r\n  readonly commandColumnWidth = input<string>(\"130px\");\r\n  readonly commandColumnTextAlign = input<AlignSetting>(\"left\");\r\n  readonly stickyCommandColumn = input<boolean>(true);\r\n  readonly fontSize = input<string>(\"13px\");\r\n  readonly dataBindingExportEndpoint = input<string>('');\r\n  readonly dataBindingExportPath = input<string>('data');\r\n  readonly customColumns = input<any>([]);\r\n  readonly reOrderWidth = input<string>(\"50px\");\r\n  readonly reOrderTextAlign = input<TextAlignType>(\"center\");\r\n  readonly reorderable = input<boolean>(false);\r\n  readonly selectable = input<boolean>(false);\r\n  readonly selectableWidth = input<string>(\"50px\");\r\n  readonly selectableTextAlign = input<TextAlignType>(\"center\");\r\n  readonly selectableField = input<string>(\"\");\r\n  readonly useCommandDropdown = input<boolean>(false);\r\n  readonly fontFamily = input<string>('');\r\n  readonly showFilterPanel = input<boolean>(true);\r\n  readonly groupable = input<boolean>(false);\r\n  readonly groupableField = input<string>('');\r\n  readonly sort = input<StateSortModel | undefined>(undefined);\r\n  readonly filter = input<StateFilterModel[]>([]);\r\n\r\n  readonly columnsArray = signal<FlexiGridColumnComponent[]>([]);\r\n  readonly selectedRows = signal<Set<any>>(new Set());\r\n  readonly timeStamp = signal<string>(\r\n    `${new Date().getTime()}-${Math.random().toString(36).slice(2, 11)}`\r\n  );\r\n  readonly allSelected = signal<boolean>(false);\r\n  readonly totalSignal = linkedSignal(() => {\r\n    if (this.total()! > 0) {\r\n      return this.total();\r\n    } else if (this.prevTotal() > 0) {\r\n      return this.prevTotal();\r\n    }\r\n\r\n    return this.total();\r\n  });\r\n  readonly dataSignal = linkedSignal(() => this.data());\r\n  readonly commandColumnTitleSignal = linkedSignal(() => this.commandColumnTitle() ? this.commandColumnTitle() : (this.language() === \"tr\" ? \"İşlemler\" : (this.language() === \"en\" ? \"Operations\" : \"Операции\")));\r\n  readonly groupedDataSignal = computed(() => {\r\n    if (this.groupable() && this.groupableField() && this.pagedData()) {\r\n      const grouped = this.buildTree(this.pagedData(), this.groupableField());\r\n      const allCodes = this.collectAllGroupCodes(grouped);\r\n      this.normalExpandedNodes = new Set(allCodes);\r\n      return grouped;\r\n    }\r\n\r\n    return [];\r\n  });\r\n  normalExpandedNodes = new Set();\r\n  readonly expandedNodes = linkedSignal(() => this.normalExpandedNodes);\r\n  globalRowIndex = 0;\r\n  readonly pageableSignal = computed(() => this.pageable() && !this.groupable());\r\n  readonly heightSignal = computed(() => this.autoHeight() ? '100%' : this.height());\r\n  readonly columnsSignal = computed(() => this.getColumns() ?? []);\r\n  readonly sortSignal = computed(() => this.state().sort);\r\n  readonly sortFieldSignal = computed(() => this.state().sort.field);\r\n  readonly sortDirSignal = computed(() => this.state().sort.dir);\r\n  readonly filtersSignal = computed(() => this.state().filter);\r\n  readonly pageNumSignal = computed(() => this.state().pageNumber);\r\n  readonly pageSizeSignal = computed(() => this.state().pageSize);\r\n  readonly totalPageCountSignal = computed(() => this.totalPageCount());\r\n  readonly pageNumbersSignal = computed(() => this.pageNumbers());\r\n\r\n  readonly dataStateChange = output<any>();\r\n  readonly onChange = output<any>();\r\n  readonly onRefresh = output<void>();\r\n  readonly onReorder = output<FlexiGridReorderModel>();\r\n  readonly onSelected = output<any[]>();\r\n\r\n  @Input()\r\n  set pageSize(value: number) {\r\n    if (value !== this._pageSize()) {\r\n      this._pageSize.set(value);\r\n      this.changePageSize({ target: { value: value } });\r\n    }\r\n  }\r\n\r\n  get pageSize(): number {\r\n    return this._pageSize();\r\n  }\r\n\r\n  readonly pageNumberCount = signal<number>(5);\r\n  readonly pageNumbers = signal<number[]>([]);\r\n  readonly totalPageCount = signal<number>(0);\r\n  readonly state = signal<StateModel>(new StateModel());\r\n  readonly pagedData = signal<any[]>([]);\r\n  timeoutId: any;\r\n  readonly textFilterTypes = signal<{ operator: FilterOperator, value: string }[]>([]);\r\n  readonly numberFilterTypes = signal<{ operator: FilterOperator, value: string }[]>([]);\r\n  readonly dateFilterTypes = signal<{ operator: FilterOperator, value: string }[]>([]);\r\n  readonly _pageSize = signal<number>(10);\r\n  readonly resizingColumn = signal<any>(undefined);\r\n  readonly startX = signal<number | undefined>(undefined);\r\n  readonly startWidth = signal<number | undefined>(undefined);\r\n  readonly isShowMobileFilter = signal<boolean>(false);\r\n\r\n  readonly prevData = signal<any[]>([]);\r\n  readonly prevTotal = signal<number>(0);\r\n  readonly noData = computed(() => {\r\n    switch (this.language()) {\r\n      case \"tr\": return \"Gösterilecek veri bulunamadı!\"\r\n      case \"en\": return \"No data to display!\"\r\n      case \"bg\": return \"Няма данни за показване!\"\r\n      default: return \"\"\r\n    }\r\n  });\r\n  readonly columnVisibility = computed(() => {\r\n    switch (this.language()) {\r\n      case \"tr\": return \"Sütun Görünürlüğü\"\r\n      case \"en\": return \"Column Visibility\"\r\n      case \"bg\": return \"Видимост на колоните\"\r\n      default: return \"\"\r\n    }\r\n  });\r\n  readonly exportExcelText = computed(() => {\r\n    switch (this.language()) {\r\n      case \"tr\": return \"Excel'e Aktar\"\r\n      case \"en\": return \"Export Excel\"\r\n      case \"bg\": return \"Експортиране в Excel\"\r\n      default: return \"\"\r\n    }\r\n  });\r\n  readonly selectAnOption = computed(() => {\r\n    switch (this.language()) {\r\n      case \"tr\": return \"Seçim yapınız\";\r\n      case \"en\": return \"Select an option\";\r\n      case \"bg\": return \"Изберете опция\";\r\n      default: return \"\";\r\n    }\r\n  });\r\n  readonly applyBtnText = computed(() => {\r\n    switch (this.language()) {\r\n      case \"tr\": return \"Uygulama\";\r\n      case \"en\": return \"Apply\";\r\n      case \"bg\": return \"Приложи\";\r\n      default: return \"\";\r\n    }\r\n  });\r\n  readonly openFilterBtnText = computed(() => {\r\n    switch (this.language()) {\r\n      case \"tr\": return \"Filtreyi Aç\";\r\n      case \"en\": return \"Open Filter\";\r\n      case \"bg\": return \"Отвори филтър\";\r\n      default: return \"\";\r\n    }\r\n  });\r\n  readonly clearBtnText = computed(() => {\r\n    switch (this.language()) {\r\n      case \"tr\": return \"Temizle\";\r\n      case \"en\": return \"Clear\";\r\n      case \"bg\": return \"Изчисти\";\r\n      default: return \"\";\r\n    }\r\n  });\r\n  readonly selected = computed(() => {\r\n    switch (this.language()) {\r\n      case \"tr\": return \"Seçilen\";\r\n      case \"en\": return \"Selected\";\r\n      case \"bg\": return \"Избрани\";\r\n      default: return \"\";\r\n    }\r\n  });\r\n  readonly refreshText = computed(() => {\r\n    switch (this.language()) {\r\n      case \"tr\": return \"Yenile\";\r\n      case \"en\": return \"Refresh\";\r\n      case \"bg\": return \"Опресни\";\r\n      default: return \"\";\r\n    }\r\n  });\r\n  readonly collapseAllText = computed(() => {\r\n    switch (this.language()) {\r\n      case \"en\": return \"Collapse All\";\r\n      case \"tr\": return \"Tümünü Daralt\";\r\n      case \"bg\": return \"Свий всички\";\r\n      default: return \"\";\r\n    }\r\n  });\r\n  readonly expandAllText = computed(() => {\r\n    switch (this.language()) {\r\n      case \"en\": return \"Expand All\";\r\n      case \"tr\": return \"Tümünü Genişlet\";\r\n      case \"bg\": return \"Разшири всички\";\r\n      default: return \"\";\r\n    }\r\n  });\r\n  readonly ofText = computed(() => {\r\n    switch (this.language()) {\r\n      case \"en\": return \"of\";\r\n      case \"tr\": return \"toplam\";\r\n      case \"bg\": return \"от\";\r\n      default: return \"\";\r\n    }\r\n  });\r\n  readonly itemsText = computed(() => {\r\n    switch (this.language()) {\r\n      case \"en\": return \"items\";\r\n      case \"tr\": return \"kayıt\";\r\n      case \"bg\": return \"записи\";\r\n      default: return \"\";\r\n    }\r\n  });\r\n\r\n  readonly columns = contentChildren(FlexiGridColumnComponent, { descendants: true });\r\n\r\n  readonly columnCommandTemplate = contentChild(FlexiGridColumnCommandTemplateDirective, { read: TemplateRef });\r\n  readonly captionCommandTemplate = contentChild(FlexiGridCaptionCommandTemplateDirective, { read: TemplateRef });\r\n\r\n  readonly filterTr = viewChild<ElementRef<HTMLTableRowElement>>(\"filterTr\");\r\n  readonly tbody = viewChild<ElementRef>(\"tbody\");\r\n\r\n  #cdr = inject(ChangeDetectorRef);\r\n  #http = inject(HttpClient);\r\n\r\n  getColumns() {\r\n    return [...this.customColumns(), ...this.columns()]\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes[\"loading\"]) {\r\n      if (!this.loading()) {\r\n        this.prevData.set(this.data());\r\n        this.prevTotal.set(this.total()!);\r\n      }\r\n    }\r\n\r\n    if (this.dataSignal().length > 0) {\r\n      const columns = this.getColumns();\r\n      if (!columns || columns.length === 0) {\r\n        this.initializeColumnsFromData();\r\n        this.#cdr.detectChanges();\r\n      }\r\n    }\r\n\r\n    if (this.pageableSignal()) {\r\n      this.setPageNumbers();\r\n      this.updatePagedData();\r\n    } else {\r\n      this.pagedData.set(this.dataSignal());\r\n    }\r\n  }\r\n\r\n  ngOnInit() {\r\n    if (this.sort()) {\r\n      this.state.update(prev => ({ ...prev, sort: this.sort()!, filter: this.filter() }))\r\n      this.dataStateChange.emit(this.state());\r\n    } else {\r\n      this.state.update(prev => ({ ...prev, filter: this.filter() }));\r\n      this.dataStateChange.emit(this.state());\r\n    }\r\n\r\n\r\n    this.filter().forEach(val => {\r\n      const column = this.columns().find(i => i.field() === val.field);\r\n      if (column) {\r\n        column.filterOperator.set(val.operator);\r\n        column.filterValueSignal.set(val.value)\r\n      }\r\n    })\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    const columns = this.getColumns();\r\n    if (!columns || columns.length === 0) {\r\n      this.initializeColumnsFromData();\r\n      this.#cdr.detectChanges();\r\n    }\r\n\r\n    columns?.forEach((column: any) => {\r\n      if (column.filterValue() != undefined) {\r\n        this.filterMethod(column.field(), column.filterOperator(), column.filterValue(), column.filterType());\r\n      }\r\n    });\r\n\r\n    this.setupFilterTypes();\r\n  }\r\n\r\n  setupFilterTypes() {\r\n    switch (this.language()) {\r\n      case \"tr\":\r\n        this.textFilterTypes.set([\r\n          { operator: \"eq\", value: 'Eşittir' },\r\n          { operator: \"ne\", value: 'Eşit değildir' },\r\n          { operator: \"contains\", value: 'İçerir' },\r\n          { operator: \"not contains\", value: 'İçermez' },\r\n          { operator: \"startswith\", value: 'İle başlar' },\r\n          { operator: \"endswith\", value: 'İle biter' }\r\n        ]);\r\n        this.numberFilterTypes.set([\r\n          { operator: \"eq\", value: 'Eşittir' },\r\n          { operator: \"ne\", value: 'Eşit değildir' },\r\n          { operator: \"gt\", value: 'Daha büyüktür' },\r\n          { operator: \"ge\", value: 'Daha büyüktür ya da eşittir' },\r\n          { operator: \"lt\", value: 'Daha küçüktür' },\r\n          { operator: \"le\", value: 'Daha küçüktür ya da eşittir' }\r\n        ]);\r\n        this.dateFilterTypes.set([\r\n          { operator: \"eq\", value: 'Eşittir' },\r\n          { operator: \"ne\", value: 'Eşit değildir' },\r\n          { operator: \"gt\", value: 'Sonraki' },\r\n          { operator: \"ge\", value: 'Sonraki ya da aynı tarih' },\r\n          { operator: \"lt\", value: 'Önceki' },\r\n          { operator: \"le\", value: 'Önceki ya da aynı tarih' },\r\n          { operator: \"range\", value: 'Belirli bir tarih aralığında' }\r\n        ]);\r\n        break;\r\n\r\n      case \"en\":\r\n        this.textFilterTypes.set([\r\n          { operator: \"eq\", value: 'Equals' },\r\n          { operator: \"ne\", value: 'Not equal' },\r\n          { operator: \"contains\", value: 'Contains' },\r\n          { operator: \"not contains\", value: 'Does not contain' },\r\n          { operator: \"startswith\", value: 'Starts with' },\r\n          { operator: \"endswith\", value: 'Ends with' }\r\n        ]);\r\n        this.numberFilterTypes.set([\r\n          { operator: \"eq\", value: 'Equals' },\r\n          { operator: \"ne\", value: 'Not equal' },\r\n          { operator: \"gt\", value: 'Greater than' },\r\n          { operator: \"ge\", value: 'Greater than or equal' },\r\n          { operator: \"lt\", value: 'Less than' },\r\n          { operator: \"le\", value: 'Less than or equal' }\r\n        ]);\r\n        this.dateFilterTypes.set([\r\n          { operator: \"eq\", value: 'Equals' },\r\n          { operator: \"ne\", value: 'Not equal' },\r\n          { operator: \"gt\", value: 'Later' },\r\n          { operator: \"ge\", value: 'Later or same date' },\r\n          { operator: \"lt\", value: 'Earlier' },\r\n          { operator: \"le\", value: 'Earlier or same date' },\r\n          { operator: \"range\", value: 'Within a specific date range' }\r\n        ]);\r\n        break;\r\n\r\n      case \"bg\":\r\n        this.textFilterTypes.set([\r\n          { operator: \"eq\", value: 'Равно на' },\r\n          { operator: \"ne\", value: 'Различно от' },\r\n          { operator: \"contains\", value: 'Съдържа' },\r\n          { operator: \"not contains\", value: 'Не съдържа' },\r\n          { operator: \"startswith\", value: 'Започва с' },\r\n          { operator: \"endswith\", value: 'Завършва с' }\r\n        ]);\r\n        this.numberFilterTypes.set([\r\n          { operator: \"eq\", value: 'Равно на' },\r\n          { operator: \"ne\", value: 'Различно от' },\r\n          { operator: \"gt\", value: 'По-голямо от' },\r\n          { operator: \"ge\", value: 'По-голямо или равно на' },\r\n          { operator: \"lt\", value: 'По-малко от' },\r\n          { operator: \"le\", value: 'По-малко или равно на' }\r\n        ]);\r\n        this.dateFilterTypes.set([\r\n          { operator: \"eq\", value: 'Равно на' },\r\n          { operator: \"ne\", value: 'Различно от' },\r\n          { operator: \"gt\", value: 'След дата' },\r\n          { operator: \"ge\", value: 'След или на същата дата' },\r\n          { operator: \"lt\", value: 'Преди дата' },\r\n          { operator: \"le\", value: 'Преди или на същата дата' },\r\n          { operator: \"range\", value: 'В определен период' }\r\n        ]);\r\n        break;\r\n    }\r\n  }\r\n\r\n  buildTree(data: any[], groupField: string): any[] {\r\n    const map = new Map<string, any>();\r\n    const roots: any[] = [];\r\n\r\n    for (const item of data) {\r\n      const node = { ...item, children: [] };\r\n      map.set(item[groupField], node);\r\n    }\r\n\r\n    for (const item of data) {\r\n      const parts = item[groupField].split(\".\");\r\n      if (parts.length === 1) {\r\n        roots.push(map.get(item[groupField]));\r\n      } else {\r\n        const parentCode = parts.slice(0, parts.length - 1).join(\".\");\r\n        const parent = map.get(parentCode);\r\n        if (parent) {\r\n          parent.children.push(map.get(item[groupField]));\r\n        } else {\r\n          roots.push(map.get(item[groupField]));\r\n        }\r\n      }\r\n    }\r\n\r\n    return roots;\r\n  }\r\n\r\n  collectAllGroupCodes(nodes: any[]): string[] {\r\n    const codes: string[] = [];\r\n\r\n    const traverse = (items: any[]) => {\r\n      for (const item of items) {\r\n        if (item.children && item.children.length > 0) {\r\n          codes.push(item[this.groupableField()]);\r\n          traverse(item.children);\r\n        }\r\n      }\r\n    };\r\n\r\n    traverse(nodes);\r\n    return codes;\r\n  }\r\n\r\n  expandAll() {\r\n    const grouped = this.groupedDataSignal();\r\n    const allCodes = this.collectAllGroupCodes(grouped);\r\n    this.expandedNodes.set(new Set(allCodes));\r\n  }\r\n\r\n  collapseAll() {\r\n    this.expandedNodes.set(new Set());\r\n  }\r\n\r\n  toggleNodeExpand(code: string) {\r\n    const set = new Set(this.expandedNodes());\r\n    if (set.has(code)) {\r\n      set.delete(code);\r\n    } else {\r\n      set.add(code);\r\n    }\r\n    this.expandedNodes.set(set);\r\n  }\r\n\r\n  isNodeExpanded(code: string): boolean {\r\n    return this.expandedNodes().has(code);\r\n  }\r\n\r\n  resetGlobalRowIndex(): void {\r\n    this.globalRowIndex = 0;\r\n  }\r\n\r\n  getNextGlobalRowIndex(): number {\r\n    const pageNumber = this.state().pageNumber - 1;\r\n    const pageSize = this.state().pageSize;\r\n    const nextValue = (+this.globalRowIndex + 1) + (pageNumber * pageSize);\r\n    this.globalRowIndex = +nextValue;\r\n    return nextValue;\r\n  }\r\n\r\n  giveFilterValueByFilterType(filterType: string) {\r\n    switch (filterType) {\r\n      case \"text\":\r\n        return this.textFilterTypes();\r\n\r\n      case \"number\":\r\n        return this.numberFilterTypes();\r\n\r\n      case \"date\":\r\n        return this.dateFilterTypes();\r\n\r\n      default:\r\n        return [];\r\n    }\r\n  }\r\n\r\n  initializeColumnsFromData(): void {\r\n    const data = this.dataSignal();\r\n    if (data && data.length > 0) {\r\n      const firstItem = data[0];\r\n      const columnsArray = Object.keys(firstItem).map(key => {\r\n        let column: any = {\r\n          field: key,\r\n          title: this.capitalizeFirstLetter(key),\r\n          visible: true,\r\n          hideOverflow: true,\r\n        };\r\n        return column;\r\n      });\r\n\r\n      this.columnsArray.set(columnsArray);\r\n    }\r\n  }\r\n\r\n  capitalizeFirstLetter(string: string): string {\r\n    return string.charAt(0).toUpperCase() + string.slice(1);\r\n  }\r\n\r\n  changePage(pageNumber: number) {\r\n    if (this.state().pageNumber === pageNumber) return;\r\n    this.allSelected.set(false);\r\n\r\n    pageNumber = Math.min(Math.max(pageNumber, 1), this.totalPageCount());\r\n\r\n    this.state.update(prev => ({\r\n      ...prev,\r\n      pageNumber,\r\n      skip: (pageNumber - 1) * +prev.pageSize\r\n    }));\r\n\r\n    this.dataStateChange.emit(this.state());\r\n\r\n    this.setPageNumbers();\r\n    this.updatePagedData();\r\n  }\r\n\r\n  setPageNumbers() {\r\n    const pageCount = Math.ceil(this.totalSignal()! / +this.state().pageSize);\r\n    const numbers = [];\r\n\r\n    const currentGroup = Math.floor((this.state().pageNumber - 1) / this.pageNumberCount());\r\n    const startPage = currentGroup * this.pageNumberCount() + 1;\r\n    const endPage = Math.min(startPage + (this.pageNumberCount() - 1), pageCount);\r\n\r\n    for (let i = startPage; i <= endPage; i++) {\r\n      numbers.push(i);\r\n    }\r\n\r\n    this.pageNumbers.set(numbers);\r\n    this.totalPageCount.set(pageCount);\r\n  }\r\n\r\n  nextPageGroup() {\r\n    const pageCount = Math.ceil(this.totalSignal()! / +this.state().pageSize);\r\n    const currentGroup = Math.floor((this.state().pageNumber - 1) / this.pageNumberCount());\r\n    const nextGroupStartPage = (currentGroup + 1) * this.pageNumberCount() + 1;\r\n\r\n    if (nextGroupStartPage <= pageCount) {\r\n      this.state.update((prev) => ({\r\n        ...prev,\r\n        pageNumber: nextGroupStartPage,\r\n        skip: (nextGroupStartPage - 1) * +this.state().pageSize\r\n      }));\r\n    }\r\n\r\n    this.setPageNumbers();\r\n    if (this.dataBinding()) {\r\n      this.dataStateChange.emit(this.state());\r\n    } else {\r\n      this.updatePagedData();\r\n    }\r\n  }\r\n\r\n  previousPageGroup() {\r\n    const currentGroup = Math.floor((this.state().pageNumber - 1) / this.pageNumberCount());\r\n    const previousGroupStartPage = (currentGroup - 1) * this.pageNumberCount() + 1;\r\n\r\n    if (previousGroupStartPage > 0) {\r\n      this.state.update((prev) => ({\r\n        ...prev,\r\n        pageNumber: previousGroupStartPage,\r\n        skip: (previousGroupStartPage - 1) * +this.state().pageSize\r\n      }));\r\n    }\r\n\r\n    this.setPageNumbers();\r\n    if (this.dataBinding()) {\r\n      this.dataStateChange.emit(this.state());\r\n    } else {\r\n      this.updatePagedData();\r\n    }\r\n  }\r\n\r\n  changePageSize(event: any) {\r\n    const value = +event.target.value;\r\n    this.pageSize = value;\r\n    this.state.update(prev => ({\r\n      ...prev,\r\n      pageSize: value,\r\n      pageNumber: 1,\r\n      skip: 0\r\n    }));\r\n    if (this.pageableSignal() && this.dataBinding()) {\r\n      this.dataStateChange.emit(this.state());\r\n    } else {\r\n      this.updatePagedData();\r\n    }\r\n  }\r\n\r\n  updatePagedData() {\r\n    let filteredData = [...this.dataSignal()];\r\n\r\n    if (!filteredData) {\r\n      this.pagedData.set([]);\r\n      return;\r\n    }\r\n\r\n    const dataBinding = this.dataBinding();\r\n    if (this.filterable() && this.state().filter.length > 0 && !dataBinding) {\r\n      const filters = this.state().filter.filter(p => p.value != undefined);\r\n\r\n      filters.forEach((filter) => {\r\n        filteredData = filteredData.filter(item => {\r\n          const field = filter.field;\r\n          const value = filter.value;\r\n\r\n          const getValue = (obj: any, path: string) =>\r\n            path.split('.').reduce((o, k) => (o == null ? undefined : o[k]), obj);\r\n\r\n          let itemValue = getValue(item, String(field));\r\n          let filterValue: any = value;\r\n          let filterValue2: any = filter.value2;\r\n\r\n          if (filter.type !== \"boolean\" && filter.type !== \"select\" && filter.type !== \"number\") {\r\n            itemValue = itemValue ? itemValue.toString().toLocaleLowerCase('tr') : '';\r\n            filterValue = value ? value.toString().toLocaleLowerCase('tr') : '';\r\n          } else if (filter.type === \"boolean\") {\r\n            filterValue = value == \"true\" ? true : false;\r\n          } else if (filter.type === \"number\") {\r\n            filterValue = +value.toString().replace(\",\", \".\");\r\n          }\r\n\r\n          switch (filter.operator) {\r\n            case 'eq':\r\n              return itemValue === filterValue;\r\n            case 'ne':\r\n              return itemValue !== filterValue;\r\n            case 'contains':\r\n              return itemValue.includes(filterValue);\r\n            case 'not contains':\r\n              return !itemValue.includes(filterValue);\r\n            case 'startswith':\r\n              return itemValue.startsWith(filterValue);\r\n            case 'endswith':\r\n              return itemValue.endsWith(filterValue);\r\n            case 'gt':\r\n              if (filter.type === \"number\") {\r\n                return parseFloat(itemValue) > parseFloat(filterValue);\r\n              } else if (filter.type === \"date\") {\r\n                return new Date(itemValue) > new Date(filterValue);\r\n              } else {\r\n                return true;\r\n              }\r\n            case 'ge':\r\n              if (filter.type === \"number\") {\r\n                return parseFloat(itemValue) >= parseFloat(filterValue);\r\n              } else if (filter.type === \"date\") {\r\n                return new Date(itemValue) >= new Date(filterValue);\r\n              } else {\r\n                return true;\r\n              }\r\n            case 'lt':\r\n              if (filter.type === \"number\") {\r\n                return parseFloat(itemValue) < parseFloat(filterValue);\r\n              } else if (filter.type === \"date\") {\r\n                return new Date(itemValue) < new Date(filterValue);\r\n              } else {\r\n                return true;\r\n              }\r\n            case 'le':\r\n              if (filter.type === \"number\") {\r\n                return parseFloat(itemValue) <= parseFloat(filterValue);\r\n              } else if (filter.type === \"date\") {\r\n                return new Date(itemValue) <= new Date(filterValue);\r\n              } else {\r\n                return true;\r\n              }\r\n            case 'range':\r\n              if (filter.type === \"date\") {\r\n                const startDate = new Date(filterValue);\r\n                const endDate = new Date(filterValue2);\r\n                return new Date(itemValue) >= startDate && new Date(itemValue) <= endDate;\r\n              } else if (filter.type === \"number\") {\r\n                return parseFloat(itemValue) >= parseFloat(filterValue) && parseFloat(itemValue) <= parseFloat(filterValue2);\r\n              } else {\r\n                return true;\r\n              }\r\n            default:\r\n              return true;\r\n          }\r\n        });\r\n      });\r\n    }\r\n\r\n    if (this.sortable() && this.state().sort.field && !dataBinding) {\r\n      filteredData = filteredData.sort((a, b) => {\r\n        const field = this.state().sort.field;\r\n        const dir = this.state().sort.dir === 'asc' ? 1 : -1;\r\n        if (a[field] < b[field]) return -1 * dir;\r\n        if (a[field] > b[field]) return 1 * dir;\r\n        return 0;\r\n      });\r\n    }\r\n\r\n    if (!dataBinding) {\r\n      this.totalSignal.set(filteredData.length);\r\n      this.setPageNumbers();\r\n    }\r\n\r\n    if (filteredData) {\r\n      if (filteredData.length > +this.state().pageSize && !dataBinding && this.pageableSignal()) {\r\n        const start = this.state().skip;\r\n        const end = start + +this.state().pageSize;\r\n        this.pagedData.set(filteredData.slice(start, end));\r\n      } else {\r\n        this.pagedData.set(filteredData);\r\n      }\r\n    }\r\n\r\n    if (filteredData.length === 0 && !this.loading()) {\r\n      this.prevData.set([]);\r\n      this.prevTotal.set(0);\r\n    }\r\n  }\r\n\r\n  getValue(obj: any, path: string) {\r\n    return path.split('.').reduce((o, k) => (o == null ? undefined : o[k]), obj);\r\n  }\r\n\r\n  sortData() {\r\n    if (this.dataBinding()) {\r\n      this.dataStateChange.emit(this.state());\r\n    } else {\r\n      const { field, dir } = this.state().sort;\r\n      if (!field) return;\r\n\r\n      const data = [...this.dataSignal()];\r\n\r\n      data.sort((a, b) => {\r\n        const av = this.getValue(a, field);\r\n        const bv = this.getValue(b, field);\r\n\r\n        let result = 0;\r\n        if (av == null && bv == null) result = 0;\r\n        else if (av == null) result = -1;\r\n        else if (bv == null) result = 1;\r\n        else if (typeof av === 'string' && typeof bv === 'string') {\r\n          result = av.localeCompare(bv, 'tr');\r\n        } else {\r\n          result = av > bv ? 1 : av < bv ? -1 : 0;\r\n        }\r\n\r\n        return dir === 'asc' ? result : -result;\r\n      });\r\n      this.dataSignal.set([...data]);\r\n      this.updatePagedData();\r\n    }\r\n  }\r\n\r\n  sortMethod(sortable: boolean, column: any) {\r\n    if (!column.sortable() || !sortable) return;\r\n\r\n    const oldSortField = this.state().sort.field;\r\n    const sort = this.state().sort;\r\n    sort.field = column.field();\r\n\r\n    this.state.update(prev => ({\r\n      ...prev,\r\n      sort: sort,\r\n      pageNumber: 1\r\n    }));\r\n\r\n    if (this.state().sort.dir === \"asc\" && oldSortField === sort.field) {\r\n      this.state.update(prev => ({\r\n        ...prev,\r\n        sort: { dir: \"desc\", field: prev.sort.field }\r\n      }))\r\n    } else if (this.state().sort.dir === 'desc' && oldSortField === sort.field) {\r\n      this.state.update(prev => ({\r\n        ...prev,\r\n        sort: { field: '', dir: 'asc' }\r\n      }))\r\n    } else {\r\n      this.state.update(prev => ({\r\n        ...prev,\r\n        sort: { dir: \"asc\", field: prev.sort.field }\r\n      }));\r\n    }\r\n\r\n    this.sortData();\r\n  }\r\n\r\n  setTextAlignForTh(filterable: boolean, column: any) {\r\n    let className: string = \"\";\r\n\r\n    const filter: boolean = (filterable && column.filterable());\r\n    className += filter ? 'flexi-th ' : '';\r\n    if (column.textAlign() === \"right\") {\r\n      if (filter) className += 'flexi-flex-reverse';\r\n      else className += 'flexi-grid-right';\r\n    }\r\n    else if (column.textAlign() === \"center\" && !filter) className += \"flexi-grid-center\"\r\n\r\n    return className;\r\n  }\r\n\r\n  setTextAlignForThTitle(filterable: boolean, column: any) {\r\n    const filter: boolean = (filterable && column.filterable());\r\n\r\n    if (column.textAlign() === \"right\") {\r\n      if (filter) return \"flexi-flex-reverse flexi-grid-justify-content-end\";\r\n      else return \"flexi-grid-justify-content-end\";\r\n    }\r\n\r\n    if (column.textAlign() === \"center\" && !filter) return \"flexi-grid-justify-content-center\"\r\n\r\n    return \"\"\r\n  }\r\n\r\n  toggleFilterDropdown(index: number, stamp: number) {\r\n    const el = document.getElementById(`flexi-grid-filter-dropdown-${index}-${stamp}`);\r\n    if (!el) return;\r\n\r\n    const isCurrentlyOpen = el.classList.contains(\"show\");\r\n    this.closeAllFilterDropdown();\r\n\r\n    if (!isCurrentlyOpen) {\r\n      // First show the dropdown to calculate its dimensions\r\n      el.classList.add(\"show\");\r\n\r\n      // Calculate available space\r\n      const dropdownRect = el.getBoundingClientRect();\r\n      const windowWidth = window.innerWidth;\r\n      const spaceOnRight = windowWidth - dropdownRect.right;\r\n      const spaceOnLeft = dropdownRect.left;\r\n\r\n      // Clear both position classes first\r\n      el.classList.remove(\"flexi-grid-dropdown-menu-right\");\r\n      el.classList.remove(\"flexi-grid-dropdown-menu-left\");\r\n\r\n      // Decide which side has more space and apply appropriate class\r\n      if (spaceOnRight < 50 && spaceOnLeft > dropdownRect.width) {\r\n        // Not enough space on right, but enough on left\r\n        el.classList.add(\"flexi-grid-dropdown-menu-left\");\r\n      } else if (spaceOnLeft < 50 && spaceOnRight > dropdownRect.width) {\r\n        // Not enough space on left, but enough on right\r\n        el.classList.add(\"flexi-grid-dropdown-menu-right\");\r\n      } else if (spaceOnRight < spaceOnLeft) {\r\n        // More space on left than right\r\n        el.classList.add(\"flexi-grid-dropdown-menu-left\");\r\n      } else {\r\n        // Default or more space on right than left\r\n        el.classList.add(\"flexi-grid-dropdown-menu-right\");\r\n      }\r\n    }\r\n  }\r\n\r\n  closeAllFilterDropdown() {\r\n    const els = document.querySelectorAll(\".flexi-grid-filter-dropdown\");\r\n    els.forEach(el => el.classList.remove(\"show\"));\r\n  }\r\n\r\n  applyFilter(column: FlexiGridColumnComponent, operator: FilterOperator) {\r\n    column.filterOperator.set(operator);\r\n\r\n    if (operator === \"range\") {\r\n      column.showSecondDate.set(true);\r\n\r\n      if (!column.filterValueSignal() || !column.filterValue2Signal()) {\r\n        return;\r\n      }\r\n    } else {\r\n      column.showSecondDate.set(false);\r\n    }\r\n\r\n    if (column.filterValueSignal() !== \"\") {\r\n      this.filterMethod(column.field(), operator, column.filterValueSignal(), column.filterType(), column.filterValue2Signal());\r\n    }\r\n  }\r\n\r\n  filterDateRange(column: FlexiGridColumnComponent) {\r\n    column.filterOperator.set(\"range\");\r\n    column.showSecondDate.set(true);\r\n    this.filterMethod(column.field(), column.filterOperator(), column.filterValueSignal(), column.filterType(), column.filterValue2Signal());\r\n  }\r\n\r\n  filterMethod(field: string, operator: FilterOperator, value: string, type: FilterType, value2?: string) {\r\n    if (value === undefined || value.toString() === 'undefined') value = \"\";\r\n    if (operator === \"range\" && !value2) return;\r\n\r\n    if (this.timeoutId) {\r\n      clearTimeout(this.timeoutId);\r\n    }\r\n\r\n    this.timeoutId = setTimeout(() => {\r\n      if (value.toString() !== '') {\r\n        this.state.update(prev => ({\r\n          ...prev,\r\n          pageNumber: 1,\r\n          skip: 0\r\n        }));\r\n        let filterField = this.state().filter.find(p => p.field === field);\r\n        if (filterField) {\r\n          filterField.value = value;\r\n          filterField.value2 = value2 ?? \"\";\r\n          filterField.operator = operator;\r\n        } else {\r\n          filterField = { ...initialStateFilterModel };\r\n          filterField.field = field;\r\n          filterField.operator = operator;\r\n          filterField.value = value;\r\n          filterField.value2 = value2 ?? \"\";\r\n          filterField.type = type\r\n          const filter = this.state().filter;\r\n          filter.push(filterField);\r\n          this.state.update(prev => ({\r\n            ...prev,\r\n            filter: [...filter]\r\n          }));\r\n        }\r\n      } else {\r\n        const findIndex = this.state().filter.findIndex(p => p.field === field);\r\n\r\n        if (findIndex > -1) {\r\n          this.state.update(prev => ({\r\n            ...prev,\r\n            filter: prev.filter.filter((_, i) => i !== findIndex)\r\n          }));\r\n        }\r\n      }\r\n\r\n      if (this.dataBinding()) {\r\n        this.dataStateChange.emit(this.state());\r\n      } else {\r\n        this.updatePagedData();\r\n      }\r\n    }, this.dataBinding() ? 500 : 1);\r\n  }\r\n\r\n  showClearFilter(column: any) {\r\n    const filter = column.field && this.haveFilterValue(column.filterType());\r\n    if (!filter) return false;\r\n\r\n    if (column.filterValueSignal()) return true;\r\n    return false;\r\n  }\r\n\r\n  clearFilter(field: string) {\r\n    this.filterMethod(field, \"contains\", \"\", \"text\");\r\n    const column = this.getColumns()?.find((p: any) => p.field() === field);\r\n    if (column) {\r\n      column.filterValueSignal.set(\"\");\r\n      column.filterValue2Signal.set(\"\");\r\n    }\r\n\r\n    if (this.dataBinding()) {\r\n\r\n    } else {\r\n      this.updatePagedData();\r\n    }\r\n  }\r\n\r\n  toggleColumnVisibilityDropdown() {\r\n    const el = document.getElementById(`flexi-grid-column-visibility-dropdown-${this.timeStamp()}`);\r\n    if (!el) return;\r\n\r\n    if (el.classList.contains(\"show\")) {\r\n      el.classList.remove(\"show\")\r\n    } else {\r\n      el.classList.add(\"show\")\r\n    }\r\n  }\r\n\r\n  refreshDataMethod() {\r\n    this.onRefresh.emit();\r\n\r\n    if (!this.dataBinding()) return;\r\n\r\n    this.dataStateChange.emit({ ...this.state() });\r\n  }\r\n\r\n  onMouseDown(event: MouseEvent | any, column: any, width: any) {\r\n    this.resizingColumn.set(column);\r\n    this.startX.set(event.pageX);\r\n    this.startWidth.set(+width.toString().replace(\"px\", \"\"))\r\n\r\n    document.addEventListener('mousemove', this.onMouseMove);\r\n    document.addEventListener('mouseup', this.onMouseUp);\r\n  }\r\n\r\n  @HostListener('document:mousemove', ['$event'])\r\n  onMouseMove = (event: MouseEvent) => {\r\n    if (this.resizingColumn()) {\r\n      const offset = event.pageX - this.startX()!;\r\n      this.resizingColumn().widthSignal.set(this.startWidth()! + offset + 'px');\r\n    }\r\n  }\r\n\r\n  @HostListener('document:mouseup')\r\n  onMouseUp = () => {\r\n    this.resizingColumn.set(undefined);\r\n    document.removeEventListener('mousemove', this.onMouseMove);\r\n    document.removeEventListener('mouseup', this.onMouseUp);\r\n  }\r\n\r\n  getFieldValue(item: any, field: string) {\r\n    try {\r\n      if (!field.includes(\".\")) {\r\n        const value = item[field];\r\n        const returnValue = (value !== undefined && value !== null) ? value : \"\"\r\n        return returnValue;\r\n      } else {\r\n        const fields = field.split(\".\");\r\n        let currentValue = item;\r\n\r\n        for (const f of fields) {\r\n          if (currentValue && f in currentValue) {\r\n            currentValue = currentValue[f];\r\n          } else {\r\n            //console.warn(`Field \"${f}\" not found in item`, item);\r\n            return \"\";\r\n          }\r\n        }\r\n\r\n        return currentValue !== undefined && currentValue !== null ? currentValue : \"\";\r\n      }\r\n    } catch (error) {\r\n      console.log(error);\r\n    }\r\n  }\r\n\r\n  getBooleanInputValue(item: any, column: FlexiGridColumnComponent, event: any,) {\r\n    const value = event.target.checked;\r\n    const field = column.field();\r\n    if (!field.includes(\".\")) {\r\n      item[field] = value;\r\n    } else {\r\n      const fields = field.split(\".\");\r\n      if (fields.length === 2) {\r\n        item[fields[0]][fields[1]] = value;\r\n      }\r\n    }\r\n\r\n    column.onChange.emit(item);\r\n  }\r\n\r\n  openMobileFilter() {\r\n    this.filterTr()!.nativeElement.classList.add(\"show\");\r\n    this.isShowMobileFilter.set(true);\r\n    this.tbody()!.nativeElement.classList.add(\"hide\");\r\n  }\r\n\r\n  closeMobileFilter() {\r\n    this.filterTr()!.nativeElement.classList.remove(\"show\");\r\n    this.isShowMobileFilter.set(false);\r\n    this.tbody()!.nativeElement.classList.remove(\"hide\");\r\n  }\r\n\r\n  tdTemplateClassName(column: FlexiGridColumnComponent) {\r\n    let className: string = column.className();\r\n\r\n    if (className !== \"\") className += \" \";\r\n    className += column.hideOverflow() ? 'flexi-grid-text-overflow-hidden' : ''\r\n\r\n    return className;\r\n  }\r\n\r\n  getTBodyStyle() {\r\n    const style: { [key: string]: any } = {\r\n      ...this.tbodyStyle()\r\n    };\r\n    return style;\r\n  }\r\n\r\n  trackByFn() {\r\n    return 'id-' + (Date.now() * Math.random());\r\n  }\r\n\r\n  calculateColspan(): number {\r\n    const columns = this.getColumns();\r\n    const columnsCount = columns ? columns.length : 0;\r\n    const indexCount = this.showIndex() ? 1 : 0;\r\n    const commandCount = this.columnCommandTemplate() ? 1 : 0;\r\n    const total = columnsCount + indexCount + commandCount;\r\n    return total > 0 ? total : 1; // En az 1 olmasını sağlar\r\n  }\r\n\r\n  getSortState(column: string): string {\r\n    if (this.state().sort.field === column) {\r\n      return this.state().sort.dir === 'asc' ? 'ascending' : 'descending';\r\n    }\r\n    return 'none';\r\n  }\r\n\r\n  getSortIcon(column: any): string {\r\n    if (this.state().sort.field === column.field()) {\r\n      return this.state().sort.dir === 'asc' ? '↑' : '↓';\r\n    }\r\n    return '';\r\n  }\r\n\r\n  async onExportExcelButtonClick() {\r\n    const exportExcelButtonClick = this.exportExcelButtonClick();\r\n    if (exportExcelButtonClick) {\r\n      exportExcelButtonClick();\r\n    } else {\r\n      if (this.dataBinding() && this.dataBindingExportEndpoint()) {\r\n        await this.fetchAllData();\r\n      }\r\n      this.exportExcel();\r\n    }\r\n  }\r\n\r\n  async fetchAllData() {\r\n    try {\r\n      const response: any = await this.#http.get(this.dataBindingExportEndpoint()).toPromise();\r\n\r\n      let fetchedData: any[] = [];\r\n\r\n      const dataBindingExportPath = this.dataBindingExportPath();\r\n      if (dataBindingExportPath) {\r\n        // Kullanıcının belirttiği yolu kullanarak veriyi al\r\n        fetchedData = this.getNestedProperty(response, dataBindingExportPath);\r\n      } else if (Array.isArray(response)) {\r\n        // Yanıt doğrudan bir dizi ise\r\n        fetchedData = response;\r\n      } else if (typeof response === 'object' && response.hasOwnProperty('data') && Array.isArray(response.data)) {\r\n        // Yanıt bir nesne ve 'data' özelliği bir dizi ise\r\n        fetchedData = response.data;\r\n      }\r\n\r\n      if (Array.isArray(fetchedData) && fetchedData.length > 0) {\r\n        this.dataSignal.set(fetchedData);\r\n      } else {\r\n        console.error('Geçerli veri bulunamadı');\r\n      }\r\n    } catch (error) {\r\n      console.error('Veri çekme hatası:', error);\r\n    }\r\n  }\r\n\r\n  private getNestedProperty(obj: any, path: string): any {\r\n    return path.split('.').reduce((acc, part) => acc && acc[part], obj);\r\n  }\r\n\r\n  async exportExcel() {\r\n    const workbook = new ExcelJS.Workbook();\r\n    const worksheet = workbook.addWorksheet('Sayfa1');\r\n\r\n    const visibleColumns = this.getColumns()?.filter((column: any) => column.visible()) || [];\r\n\r\n    // Başlıkları ekle\r\n    worksheet.addRow(visibleColumns.map((col: any) => col.title() || col.field()));\r\n\r\n    // Verileri ekle\r\n    this.dataSignal().forEach(row => {\r\n      const rowData = visibleColumns.map((col: any) => {\r\n        return this.getFieldValue(row, col.field());\r\n      });\r\n      worksheet.addRow(rowData);\r\n    });\r\n\r\n    // Stil ayarları\r\n    worksheet.getRow(1).font = { bold: true };\r\n    visibleColumns.forEach((col: any, index: number) => {\r\n      const column = worksheet.getColumn(index + 1);\r\n      column.width = 15;\r\n      const textAlign = col.textAlign();\r\n      if (textAlign === 'right') {\r\n        column.alignment = { horizontal: 'right' };\r\n      } else if (textAlign === 'center') {\r\n        column.alignment = { horizontal: 'center' };\r\n      }\r\n    });\r\n\r\n    // Excel dosyasını oluştur ve indir\r\n    const buffer = await workbook.xlsx.writeBuffer();\r\n    const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n    saveAs(blob, `${this.exportExcelFileName()}.xlsx`);\r\n  }\r\n\r\n  drop(event: CdkDragDrop<string[]>) {\r\n    const currentData = this.getPagedData();\r\n\r\n    const previousIndex = event.previousIndex;\r\n    const currentIndex = event.currentIndex;\r\n\r\n    if (previousIndex < 0 || currentIndex < 0 ||\r\n      previousIndex >= currentData.length ||\r\n      currentIndex >= currentData.length) {\r\n      console.warn('Invalid drag drop indices');\r\n      return;\r\n    }\r\n\r\n    const previousData = currentData[previousIndex];\r\n    const newPositionData = currentData[currentIndex];\r\n\r\n    const reorderData: FlexiGridReorderModel = {\r\n      previousIndex: previousIndex,\r\n      currentIndex: currentIndex,\r\n      previousData: previousData,\r\n      currentData: newPositionData\r\n    };\r\n\r\n    this.onReorder.emit(reorderData);\r\n  }\r\n\r\n  toggleRowSelection(item: any) {\r\n    if (!this.selectable()) return;\r\n\r\n    if (this.selectedRows().has(item)) {\r\n      this.selectedRows().delete(item);\r\n    } else {\r\n      this.selectedRows().add(item);\r\n    }\r\n\r\n    this.onSelected.emit([...this.selectedRows()]);\r\n  }\r\n\r\n  selectAll(): void {\r\n    this.selectedRows().clear();\r\n    if (this.dataBinding()) {\r\n      this.pagedData().forEach((item) => {\r\n        this.selectedRows().add(item);\r\n      });\r\n\r\n    } else {\r\n      this.data().forEach((item) => {\r\n        this.selectedRows().add(item);\r\n      });\r\n    }\r\n\r\n    this.allSelected.set(true);\r\n  }\r\n\r\n  unselectAll(): void {\r\n    this.selectedRows().clear();\r\n    this.allSelected.set(false);\r\n  }\r\n\r\n  toggleSelectAll(): void {\r\n    if (this.allSelected()) {\r\n      this.unselectAll();\r\n    } else {\r\n      this.selectAll();\r\n    }\r\n\r\n    this.onSelected.emit([...this.selectedRows()]);\r\n  }\r\n\r\n  allSelectedWasIndeterminate(): boolean {\r\n    const totalItems = this.dataBinding() ? this.total() ?? this.data().length : this.data().length;\r\n    const selectedItems = this.selectedRows().size;\r\n    return selectedItems > 0 && selectedItems < totalItems;\r\n  }\r\n\r\n  checked(item: any) {\r\n    const result = this.selectedRows().has(item);\r\n    return result\r\n  }\r\n\r\n  clearSelected() {\r\n    this.selectedRows().clear();\r\n  }\r\n\r\n  getMaxFooterTemplateCount() {\r\n    let maxCount = 0;\r\n    this.getColumns().forEach(column => {\r\n      const templateCount = column.footerTemplates().length;\r\n      if (templateCount > maxCount) {\r\n        maxCount = templateCount;\r\n      }\r\n    });\r\n\r\n    const numbers = Array(maxCount).fill(0).map((_, i) => i);\r\n\r\n    return numbers;\r\n  }\r\n\r\n  getPagedData() {\r\n    if (this.pagedData().length > 0) return this.pagedData();\r\n\r\n    return this.prevData();\r\n  }\r\n\r\n  haveFilterValue(filterType?: FilterType) {\r\n    if (filterType) {\r\n      if (filterType === \"boolean\" || filterType === \"date-time\" || filterType === \"select\") return false;\r\n      else return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  setDropdownInputType(column: FlexiGridColumnComponent) {\r\n    switch (column.filterType()) {\r\n      case \"text\": return \"search\"\r\n      case \"number\": return \"search\"\r\n      case \"date\": return \"date\"\r\n      case \"date-time\": return \"datetime-local\"\r\n      default: return \"search\"\r\n    }\r\n  }\r\n\r\n  setDropdownInputClass(column: FlexiGridColumnComponent) {\r\n    switch (column.filterType()) {\r\n      case \"text\": return \"flexi-grid-filter-dropdown-input\"\r\n      case \"number\": return \"flexi-grid-filter-dropdown-input\"\r\n      case \"date\": return \"flexi-grid-filter-dropdown-date\"\r\n      case \"date-time\": return \"flexi-grid-filter-dropdown-date\"\r\n      default: return \"search\"\r\n    }\r\n  }\r\n\r\n  autoFitColumnWidth(column: FlexiGridColumnComponent) {\r\n    const columnField = column.field();\r\n    if (!columnField) return;\r\n\r\n    const cells = Array.from(document.querySelectorAll(`td[data-label=\"${column.title() || column.field()}\"]`));\r\n    if (cells.length === 0) return;\r\n\r\n    let maxContentWidth = 0;\r\n    cells.forEach(cell => {\r\n      const content = cell.textContent || '';\r\n      const tempSpan = document.createElement('span');\r\n      tempSpan.style.visibility = 'hidden';\r\n      tempSpan.style.position = 'absolute';\r\n      tempSpan.style.whiteSpace = 'nowrap';\r\n      tempSpan.textContent = content;\r\n      document.body.appendChild(tempSpan);\r\n      maxContentWidth = Math.max(maxContentWidth, tempSpan.offsetWidth);\r\n      document.body.removeChild(tempSpan);\r\n    });\r\n\r\n    column.widthSignal.set(`${maxContentWidth + 5}px`);\r\n  }\r\n}","@if(columnsSignal().length > 0){\r\n<div [attr.data-bs-theme]=\"themeClass()\" class=\"flexi-grid-table-container overflow-x\"\r\n  [ngClass]=\"(loading()) ? 'flexi-grid-disabled-div' : ''\"\r\n  [ngStyle]=\"{ width: autoWidth() ? '100%' : width(), 'font-size': fontSize(), 'font-family': fontFamily() }\">\r\n  @if(showCaption()){\r\n  <div class=\"flexi-grid-caption-div\">\r\n    <span class=\"flexi-grid-caption-title\">{{ captionTitle() }}</span>\r\n    <div class=\"flexi-grid-caption-button-div\" style=\"gap: 10px\">\r\n      @if(captionCommandTemplate()){\r\n        <ng-container *ngTemplateOutlet=\"captionCommandTemplate()!\" />\r\n      }\r\n\r\n      @if(groupable() && groupableField()){\r\n        <flexi-button (click)=\"expandAll()\" btnSize=\"medium\" btnIcon=\"unfold_more\" btnColor=\"dark\" flexiTooltip=\"left\" [title]=\"expandAllText()\" />\r\n        <flexi-button (click)=\"collapseAll()\" btnSize=\"medium\" btnIcon=\"unfold_less\" btnColor=\"pink\" flexiTooltip=\"left\" [title]=\"collapseAllText()\" />\r\n      }\r\n\r\n      @if(showExportExcelBtn()){\r\n        <flexi-button btnIcon=\"file_save\" flexiTooltip btnSize=\"medium\" [title]=\"exportExcelText()\" btnColor=\"warning\" (click)=\"onExportExcelButtonClick()\" />\r\n      }\r\n\r\n      @if(showColumnVisibility()){\r\n        <div style=\"position: relative\">\r\n          <flexi-button btnIcon=\"menu\" btnColor=\"info\" btnSize=\"medium\" flexiTooltip [title]=\"columnVisibility()\"\r\n            (click)=\"toggleColumnVisibilityDropdown()\" />\r\n          <div class=\"flexi-grid-dropdown-menu\" style=\"top: 40px\" id=\"flexi-grid-column-visibility-dropdown-{{timeStamp()}}\">\r\n            <div style=\"padding: 10px; padding-bottom: 2px; background-color: var(--flexi-grid-bg-color-part)\">\r\n              <div class=\"flexi-grid-dropdown-title\">{{ columnVisibility() }}</div>\r\n              <div class=\"flexi-grid-bottom-line\"></div>\r\n              @for(column of columnsSignal(); track trackByFn()){\r\n              <label class=\"flexi-grid-dropdown-checkbox-item\" [for]=\"column.field() ? column.field() : column.title()\">\r\n                <input [(ngModel)]=\"column.visibleSignal\" [id]=\"column.field() ? column.field() : column.title()\"\r\n                  type=\"checkbox\" />\r\n                <span style=\"margin-left: 3px;\">\r\n                  {{ column.title() ? column.title() : column.field() }}\r\n                </span>\r\n              </label>\r\n              }\r\n            </div>\r\n          </div>\r\n        </div>\r\n      }\r\n\r\n      @if(showRefreshBtn() || dataBinding()){\r\n        <flexi-button btnIcon=\"refresh\" btnColor=\"dark\" btnSize=\"medium\" flexiTooltip [title]=\"refreshText()\" (click)=\"refreshDataMethod()\" />\r\n      }\r\n    </div>\r\n  </div>\r\n  }\r\n  <div class=\"flexi-grid-table-container-wrapper\">\r\n    @if(loading()){\r\n    <div class=\"flexi-grid-spinner-container\">\r\n      <div class=\"flexi-grid-spinner-1\"></div>\r\n      <div class=\"flexi-grid-spinner-2\"></div>\r\n    </div>\r\n    }\r\n    <div class=\"flexi-grid-table-wrapper\">\r\n      <div class=\"flexi-grid-table-wrapper-inner\">\r\n        <table class=\"flexi-grid-table\" [ngStyle]=\"{\r\n            'min-width': !useMinWidth() ? '100%' : minWidth(),\r\n            position: 'relative'\r\n          }\" aria-label=\"Flexi Grid Table\" role=\"table\">\r\n          <thead role=\"rowgroup\">\r\n            <tr role=\"row\">\r\n              @if(selectable()){\r\n                <th [ngStyle]=\"{\r\n                      width: selectableWidth(),\r\n                      'text-align': selectableTextAlign()\r\n                    }\" scope=\"col\" role=\"columnheader\" (click)=\"toggleSelectAll()\">\r\n                  <input class=\"checkbox-custom\" type=\"checkbox\" style=\"transform: scale(1.3);\" [ngModel]=\"allSelected()\"\r\n                    [indeterminate]=\"allSelectedWasIndeterminate()\">\r\n                </th>\r\n              }\r\n\r\n              @if(reorderable() && !groupable()){\r\n                <th [ngStyle]=\"{\r\n                    width: reOrderWidth(),\r\n                    'text-align': reOrderTextAlign()\r\n                  }\" scope=\"col\" role=\"columnheader\">\r\n                  <span></span>\r\n                </th>\r\n              }\r\n\r\n              @if(showIndex()){\r\n                <th [ngStyle]=\"{\r\n                    'cursor': 'auto',\r\n                    width: indexWidth(),\r\n                    'text-align': indexTextAlign()\r\n                  }\" scope=\"col\" role=\"columnheader\">\r\n                  <span style=\"font-weight: bold;\">#</span>\r\n                </th>\r\n              }\r\n\r\n              @for(column of columnsSignal(); track trackByFn(); let columnIndex = $index){\r\n                <th class=\"flexi-grid-border\" [hidden]=\"!column.visibleSignal()\"\r\n                  [ngStyle]=\"{ width: column.widthSignal() }\" scope=\"col\" role=\"columnheader\"\r\n                  [attr.aria-sort]=\"getSortState(column.field())\">\r\n                  <div [ngClass]=\"setTextAlignForTh(filterable(), column)\">\r\n                    @if(resizable() && column.resizable()){\r\n                      <div class=\"flexi-grid-resize-handle\" (mousedown)=\"onMouseDown($event, column, column.widthSignal())\" (dblclick)=\"autoFitColumnWidth(column)\">\r\n                      </div>\r\n                    }\r\n                    @if(sortable() && column.sortable() && column.field() && data().length > 0){\r\n                      <div (click)=\"sortMethod(sortable(), column)\" class=\"flexi-grid-sortable-th\" [ngClass]=\"setTextAlignForThTitle(filterable(), column)\">\r\n                        <span>\r\n                          {{column.title() ? column.title() : column.field()}}\r\n                        </span>\r\n                        <div class=\"flexi-grid-d-flex\">\r\n                          @if(sortSignal().field === column.field()){\r\n                            @if(sortSignal().dir === \"asc\"){\r\n                              <span class=\"material-symbols-outlined\">\r\n                                arrow_upward_alt\r\n                              </span>\r\n                            }@else{\r\n                              <span class=\"material-symbols-outlined\">\r\n                                arrow_downward_alt\r\n                              </span>\r\n                            }\r\n                          }\r\n                        </div>\r\n                      </div>\r\n                    }@else {\r\n                      <div>\r\n                        <span>{{column.title() ? column.title() : column.field()}}</span>\r\n                      </div>\r\n                    } @if(filterable() && column.filterable()){\r\n                      <div class=\"flexi-grid-p-relative flexi-grid-d-flex flexi-grid-no-flex-wrap\" [ngClass]=\"!(column.field() && haveFilterValue(column.filterType())) ? 'flexi-grid-disabled' : ''\">\r\n                        <div class=\"flexi-grid-p-relative\">\r\n                          <span class=\"material-symbols-outlined flexi-grid-cursor flexi-grid-filter\" [ngClass]=\"{'flexi-grid-filter-filled': column.filterValueSignal()}\" (click)=\"toggleFilterDropdown(columnIndex, column.timeStamp())\">\r\n                            filter_list\r\n                          </span>\r\n                          @if(column.filterValueSignal()){\r\n                            <span class=\"material-symbols-outlined\" style=\"position: absolute; font-size: 10px; top: 3px; right: 1px;\">\r\n                              asterisk\r\n                            </span>\r\n                          }\r\n                        </div>\r\n                        <div class=\"flexi-grid-dropdown-menu flexi-grid-filter-dropdown\" id=\"flexi-grid-filter-dropdown-{{columnIndex}}-{{column.timeStamp()}}\">\r\n                          <div class=\"flexi-grid-filter-dropdown-content\">\r\n                            <select class=\"flexi-grid-filter-dropdown-select\" name=\"flexi-filter-select-{{column.timeStamp()}}\" [(ngModel)]=\"column.filterOperator\" (change)=\"applyFilter(column, column.filterOperator())\">\r\n                              @for(filterType of giveFilterValueByFilterType(column.filterType()); track filterType.operator){\r\n                                <option [value]=\"filterType.operator\">{{ filterType.value }}</option>\r\n                              }\r\n                            </select>\r\n                            <div class=\"flexi-grid-p-relative\">\r\n                              <input [type]=\"setDropdownInputType(column)\" [ngClass]=\"setDropdownInputClass(column)\" [(ngModel)]=\"column.filterValueSignal\" name=\"filexi-filter-input-{{column.timeStamp()}}\" (input)=\"\r\n                              filterMethod(\r\n                                column.field(),\r\n                                column.filterOperator(),\r\n                                column.filterValueSignal(),\r\n                                column.filterType(),\r\n                                column.filterValue2Signal()\r\n                              )\r\n                            \">\r\n                              @if(column.filterType() === \"text\" || column.filterType() === \"number\"){\r\n                                <span class=\"material-symbols-outlined flexi-grid-filter-dropdown-input-search-icon\">\r\n                                  search\r\n                                </span>\r\n                              }\r\n                            </div>\r\n                            @if(column.showSecondDate()){\r\n                              <input [type]=\"setDropdownInputType(column)\" [ngClass]=\"setDropdownInputClass(column)\" [(ngModel)]=\"column.filterValue2Signal\" name=\"filexi-filter-input-{{column.timeStamp()}}\" (input)=\"filterDateRange(column)\">\r\n                            }\r\n                            <flexi-button btnWidth=\"100%\" [btnText]=\"clearBtnText()\" btnColor=\"dark\" (click)=\"clearFilter(column.field())\" [btnDisabled]=\"!column.filterValueSignal()\"/>\r\n                          </div>\r\n                        </div>\r\n                      </div>\r\n                    }\r\n                  </div>\r\n                </th>\r\n              } @if(columnCommandTemplate()){\r\n                <th [ngStyle]=\"{\r\n                    width: commandColumnWidth(),\r\n                    'text-align': commandColumnTextAlign()\r\n                  }\" [ngClass]=\"\r\n                    stickyCommandColumn()\r\n                      ? 'flexi-sticky-column flexi-sticky-th-column'\r\n                      : ''\r\n                  \" scope=\"col\" role=\"columnheader\">\r\n                  {{ commandColumnTitleSignal() }}\r\n                </th>\r\n              }\r\n            </tr>\r\n            @if(filterable() && showFilterPanel()){\r\n            <tr class=\"flexi-grid-mobile-filter-tr\" role=\"row\">\r\n              <th colSpan=\"2\" scope=\"col\" role=\"columnheader\">\r\n                @if(isShowMobileFilter()){\r\n                <flexi-button btnColor=\"success\" btnIcon=\"sweep\" btnSize=\"medium\" (click)=\"closeMobileFilter()\"\r\n                  [btnText]=\"applyBtnText()\" />\r\n                }@else {\r\n                <flexi-button btnColor=\"primary\" btnIcon=\"filter_list\" btnSize=\"medium\" (click)=\"openMobileFilter()\"\r\n                  [btnText]=\"openFilterBtnText()\" />\r\n                }\r\n              </th>\r\n            </tr>\r\n            <tr class=\"flexi-grid-filter-tr\" #filterTr role=\"row\" role=\"columnheader\">\r\n              @if(selectable() && !isShowMobileFilter()){\r\n                <th class=\"flexi-grid-filter-th\" [ngStyle]=\"{\r\n                    width: selectableWidth(),\r\n                    textAlign: selectableTextAlign(),\r\n                    cursor: 'pointer'\r\n                  }\" scope=\"col\" role=\"columnheader\">\r\n                </th>\r\n              }\r\n\r\n              @if(reorderable() && !isShowMobileFilter() && !groupable()){\r\n                <th class=\"flexi-grid-filter-th\" [ngStyle]=\"{ width: reOrderWidth() }\" scope=\"col\" role=\"columnheader\">\r\n                </th>\r\n              }\r\n\r\n              @if(showIndex() && !isShowMobileFilter()){\r\n                <th class=\"flexi-grid-filter-th\" [ngStyle]=\"{ width: indexWidth() }\" scope=\"col\" role=\"columnheader\"></th>\r\n              }\r\n\r\n              @for(column of columnsSignal(); track trackByFn()){\r\n                @if(column.filterable()){\r\n                <th class=\"flexi-grid-filter-th\" [hidden]=\"!column.visibleSignal()\"\r\n                  [attr.data-label]=\"column.title() ? column.title() : column.field()\" scope=\"col\" role=\"columnheader\">\r\n                  <div class=\"flexi-grid-d-flex flexi-grid-filter-container\">\r\n                    @if(column.headerTemplate()){\r\n                    <ng-container *ngTemplateOutlet=\"column.headerTemplate()\" />\r\n                    }@else if(column.field()){ @if(column.filterType() === \"text\"){\r\n                      <input class=\"flexi-grid-filter-input\" type=\"search\" [name]=\"column.field + '-text-field-' + $index\" [(ngModel)]=\"column.filterValueSignal\" (input)=\"\r\n                          filterMethod(\r\n                            column.field(),\r\n                            column.filterOperator(),\r\n                            column.filterValueSignal(),\r\n                            column.filterType()\r\n                          )\r\n                        \" (search)=\"filterMethod(\r\n                            column.field(),\r\n                            column.filterOperator(),\r\n                            column.filterValueSignal(),\r\n                            column.filterType()\r\n                          )\" />\r\n                    }@else if(column.filterType() === \"date\"){\r\n                      <div class=\"flexi-grid-filter-date-content\">\r\n                        <input class=\"flexi-grid-filter-input\" [ngClass]=\"{'flexi-grid-with-50': column.showSecondDate()}\" type=\"date\" [name]=\"column.field + '-first-date-field-' + $index\" [(ngModel)]=\"column.filterValueSignal\" (input)=\"\r\n                              filterMethod(\r\n                                column.field(),\r\n                                column.filterOperator(),\r\n                                column.filterValueSignal(),\r\n                                column.filterType()\r\n                              )\r\n                            \" (search)=\"filterMethod(\r\n                                column.field(),\r\n                                column.filterOperator(),\r\n                                column.filterValueSignal(),\r\n                                column.filterType()\r\n                              )\" />\r\n                          @if(column.showSecondDate()){\r\n                            <input class=\"flexi-grid-filter-input\" style=\"width: 50%;\" [name]=\"column.field + '-second-date-field-' + $index\" type=\"date\" [(ngModel)]=\"column.filterValue2Signal\" (input)=\"\r\n                                  filterMethod(\r\n                                    column.field(),\r\n                                    column.filterOperator(),\r\n                                    column.filterValueSignal(),\r\n                                    column.filterType(),\r\n                                    column.filterValue2Signal()\r\n                                  )\r\n                                \"  />\r\n                          }\r\n                      </div>\r\n                    }@else if(column.filterType() === \"date-time\"){\r\n                      <input class=\"flexi-grid-filter-input\" type=\"datetime-local\" [name]=\"column.field + '-date-time-field-' + $index\" [(ngModel)]=\"column.filterValueSignal\"\r\n                        (input)=\"\r\n                          filterMethod(\r\n                            column.field(),\r\n                            column.filterOperator(),\r\n                            column.filterValueSignal(),\r\n                            column.filterType()\r\n                          )\r\n                        \"  />\r\n                    }@else if(column.filterType() === \"number\"){\r\n                      <input class=\"flexi-grid-filter-input\" type=\"text\" [name]=\"column.field + '-number-field-' + $index\" [ngStyle]=\"{\r\n                          'text-align': column.textAlign()\r\n                        }\" [(ngModel)]=\"column.filterValueSignal\" (input)=\"\r\n                          filterMethod(\r\n                            column.field(),\r\n                            column.filterOperator(),\r\n                            column.filterValueSignal(),\r\n                            column.filterType()\r\n                          )\r\n                        \" (search)=\"filterMethod(\r\n                                column.field(),\r\n                                column.filterOperator(),\r\n                                column.filterValueSignal(),\r\n                                column.filterType()\r\n                              )\" />\r\n                    }@else if(column.filterType() === \"select\"){\r\n                      <select class=\"flexi-grid-filter-select\" [name]=\"column.field + '-select-field-' + $index\" [(ngModel)]=\"column.filterValueSignal\" (change)=\"\r\n                          filterMethod(\r\n                            column.field(),\r\n                            'eq',\r\n                            column.filterValueSignal(),\r\n                            column.filterType()\r\n                          )\r\n                        \">\r\n                          <option [value]=\"undefined\">{{selectAnOption()}}</option>\r\n                          @for(data of column.filterData();track data?.value ?? data){\r\n                            @if(data?.value){\r\n                              <option [value]=\"data.value\">{{ data.name }}</option>\r\n                            }@else {\r\n                              <option>{{ data }}</option>\r\n                            }\r\n                          }\r\n                      </select>\r\n                    }@else if(column.filterType() === \"boolean\" &&\r\n                    column.booleanData().length > 0){\r\n                      <select class=\"flexi-grid-filter-select\" [name]=\"column.field + '-boolean-field-' + $index\" [(ngModel)]=\"column.filterValueSignal\" (change)=\"\r\n                          filterMethod(\r\n                            column.field(),\r\n                            'eq',\r\n                            column.filterValueSignal(),\r\n                            column.filterType()\r\n                          )\r\n                        \">\r\n                        <option [value]=\"undefined\">{{selectAnOption()}}</option>\r\n                        <option [value]=\"true\">\r\n                          {{ column.booleanData()[0] }}\r\n                        </option>\r\n                        <option [value]=\"false\">\r\n                          {{ column.booleanData()[1] }}\r\n                        </option>\r\n                      </select>\r\n                    }\r\n                  }\r\n                  </div>\r\n                </th>\r\n                }@else {\r\n                  @if(!isShowMobileFilter()){\r\n                  <th [hidden]=\"!column.visibleSignal()\" scope=\"col\" role=\"columnheader\"></th>\r\n                  }\r\n                }\r\n              }\r\n              @if(columnCommandTemplate()){\r\n              <th [ngClass]=\"\r\n                  stickyCommandColumn()\r\n                    ? 'flexi-sticky-column flexi-sticky-th-column'\r\n                    : ''\r\n                \" scope=\"col\" role=\"columnheader\"></th>\r\n              }\r\n            </tr>\r\n            }\r\n          </thead>\r\n        </table>\r\n      </div>\r\n    </div>\r\n\r\n    <div class=\"flexi-grid-tbody-wrapper\" [style.height]=\"heightSignal()\" [style.minHeight]=\"useMinHeight() ? minHeight() : heightSignal()\">\r\n      <div class=\"flexi-grid-tbody-wrapper-inner\">\r\n        <table class=\"flexi-grid-table\"\r\n              [ngStyle]=\"{\r\n                  minWidth: !useMinWidth() ? '100%' : minWidth(),\r\n                  position: 'relative'\r\n              }\"\r\n              aria-label=\"Flexi Grid Table\"\r\n              role=\"table\"\r\n        >\r\n          @if(groupable() && groupableField()){\r\n            <tbody cdkDropList [cdkDropListDisabled]=\"!reorderable()\" (cdkDropListDropped)=\"drop($event)\" #tbody class=\"flexi-grid-p-relative\" [ngStyle]=\"getTBodyStyle()\" role=\"rowgroup\">\r\n              @if(data().length > 0 || prevData().length > 0){\r\n                @if(showIndex()){\r\n                  {{resetGlobalRowIndex()}}\r\n                }\r\n                @for(item of groupedDataSignal(); track item; let groupIndex = $index){\r\n                  <ng-container *ngTemplateOutlet=\"treeRow; context: { $implicit: item, level: 0, index: groupIndex }\"></ng-container>\r\n                }\r\n              }@else {\r\n                @if(!loading()){\r\n                  <div class=\"flexi-grid-no-data-div\">\r\n                    <span class=\"flexi-grid-no-data-title\"><i>{{ noData() }}</i></span>\r\n                  </div>\r\n                }\r\n              }\r\n            </tbody>\r\n          }@else {\r\n            <tbody cdkDropList [cdkDropListDisabled]=\"!reorderable()\" (cdkDropListDropped)=\"drop($event)\" #tbody class=\"flexi-grid-p-relative\" [ngStyle]=\"getTBodyStyle()\" role=\"rowgroup\">\r\n              @if(data().length > 0 || prevData().length > 0){\r\n                @for(item of (pagedData().length > 0 ? pagedData() : prevData()); track trackByFn(); let i = $index){\r\n                  <tr cdkDrag [cdkDragDisabled]=\"!reorderable()\"\r\n                    [class.flexi-grid-selected-row]=\"selectedRows().has(item)\"\r\n                    [ngStyle]=\"{ 'min-height': trMinHeight() }\" role=\"row\">\r\n                    @if(selectable()){\r\n                      <td [ngStyle]=\"{\r\n                            width: selectableWidth(),\r\n                            textAlign: selectableTextAlign(),\r\n                            userSelect: 'none',\r\n                            cursor: 'pointer'\r\n                          }\" [attr.data-label]=\"'#'\" scope=\"cell\" (click)=\"toggleRowSelection(item)\">\r\n                        <input class=\"checkbox-custom\" type=\"checkbox\" style=\"transform: scale(1.3);\"\r\n                          [checked]=\"checked(item)\" id=\"flexi-grid-column-selectable-checkbox-{{timeStamp()}}\">\r\n                      </td>\r\n                    }\r\n\r\n                    @if(reorderable()){\r\n                      <td cdkDragHandle [ngStyle]=\"{\r\n                              'width': reOrderWidth(),\r\n                              'text-align': reOrderTextAlign(),\r\n                              'cursor':'pointer',\r\n                              'user-select': 'none'\r\n                            }\"\r\n                            [attr.data-label]=\"'#'\"\r\n                            scope=\"cell\">\r\n                        <span class=\"material-symbols-outlined\">\r\n                          reorder\r\n                        </span>\r\n                      </td>\r\n                    }\r\n\r\n                    @if(showIndex()){\r\n                      <td [ngStyle]=\"{\r\n                            width: indexWidth(),\r\n                            'text-align': indexTextAlign()\r\n                          }\"\r\n                          [attr.data-label]=\"'#'\"\r\n                          scope=\"cell\">\r\n                        @if(!pageableSignal()){\r\n                        <span style=\"font-weight: bold;\">{{ $index + 1 }}</span>\r\n                        }@else {\r\n                        <span style=\"font-weight: bold;\">{{$index + (pageNumSignal() - 1) * +pageSizeSignal() + 1}}</span>\r\n                        }\r\n                      </td>\r\n                    }\r\n\r\n                    @for(column of columnsSignal(); track trackByFn()){\r\n                      <td\r\n                          [style.width]=\"column.widthSignal()\" [style.text-align]=\"column.textAlign()\"\r\n                          (click)=\"toggleRowSelection(item[selectableField()])\"\r\n                          [hidden]=\"!column.visibleSignal()\"\r\n                          [ngClass]=\"tdTemplateClassName(column)\"\r\n                          [attr.data-label]=\"column.title() ? column.title() : column.field()\" [title]=\"\r\n                            item && !column.cellTemplate()\r\n                              ? getFieldValue(item, column.field())\r\n                              : ''\r\n                          \"\r\n                          scope=\"cell\">\r\n                          @if(column.cellTemplate()){\r\n                            <ng-container *ngTemplateOutlet=\"column.cellTemplate(); context: { $implicit: item, column: column, rowIndex: i }\" />\r\n                          }@else{\r\n                            @if(column.field()){\r\n                              @if((column.filterType() === \"date\" || column.filterType() === \"date-time\") && column.filterType()){\r\n                                @if(language() === \"bg\"){\r\n                                  {{ getFieldValue(item, column.field()) | date : column.format()!:'':language() }}\r\n                                }@else {\r\n                                  {{ getFieldValue(item, column.field()) | date : column.format()!}}\r\n                                }\r\n                              }@else if(column.filterType() === \"number\" && column.filterType()){\r\n                                @if(column.format() === \"n\" || column.format() === null){\r\n                                  {{ getFieldValue(item, column.field()) | trCurrency : \"\" : true : column.fraction() }}\r\n                                }@else if(column.format() === \"c\"){\r\n                                  {{\r\n                                  getFieldValue(item, column.field())\r\n                                  | trCurrency\r\n                                  : column.symbol()\r\n                                  : column.showSymbolInFront()\r\n                                  : column.fraction()\r\n                                  }}\r\n                                }\r\n                              }@else if(column.filterType() === \"boolean\"){\r\n                                @if(column.showCheckbox()){\r\n                                  <input class=\"flexi-grid-checkbox\" type=\"checkbox\" [checked]=\"getFieldValue(item, column.field())\"\r\n                                        (change)=\"getBooleanInputValue(item, column, $event)\" />\r\n                                }@else {\r\n                                  @if(getFieldValue(item, column.field())){\r\n                                  <span class=\"flexi-grid-card flexi-grid-card-success\">\r\n                                    {{ column.booleanData()[0] }}\r\n                                  </span>\r\n                                  }@else {\r\n                                  <span class=\"flexi-grid-card flexi-grid-card-danger\">\r\n                                    {{ column.booleanData()[1] }}\r\n                                  </span>\r\n                                  }\r\n                                }\r\n                              }@else {\r\n                                {{ getFieldValue(item, column.field()) }}\r\n                              }\r\n                            }\r\n                          }\r\n                      </td>\r\n                    }\r\n                    @if(columnCommandTemplate()){\r\n                    <td [ngStyle]=\"{\r\n                          width: commandColumnWidth(),\r\n                          'text-align': commandColumnTextAlign()\r\n                        }\"\r\n                      [ngClass]=\"{'flexi-grid-selected-row': selectedRows().has(item), 'flexi-sticky-column flexi-sticky-td-column': stickyCommandColumn()}\"\r\n                      [attr.data-label]=\"commandColumnTitleSignal()\" scope=\"cell\">\r\n                      @if(useCommandDropdown()){\r\n                        <div class=\"flexi-grid-command-dropdown\">\r\n                          <flexi-button btnColor=\"primary\" btnSize=\"small\" btnIcon=\"more_vert\" />\r\n                          <div class=\"flexi-grid-command-dropdown-content\">\r\n                            <div class=\"flexi-grid-command-display-flex\">\r\n                                <ng-container *ngTemplateOutlet=\"\r\n                                      columnCommandTemplate()!;\r\n                                      context: { $implicit: item, index: i}\" />\r\n                            </div>\r\n                          </div>\r\n                        </div>\r\n                      }@else {\r\n                        <div class=\"flexi-grid-command-display-flex\">\r\n                            <ng-container *ngTemplateOutlet=\"columnCommandTemplate()!; context: { $implicit: item, index: i}\" />\r\n                        </div>\r\n                      }\r\n                    </td>\r\n                    }\r\n                  </tr>\r\n                }\r\n              }@else {\r\n                @if(!loading()){\r\n                <div class=\"flexi-grid-no-data-div\">\r\n                  <span class=\"flexi-grid-no-data-title\"><i>{{ noData() }}</i></span>\r\n                </div>\r\n                }\r\n              }\r\n            </tbody>\r\n          }\r\n          <tfoot class=\"flexi-grid-foot\">\r\n            @for(footerIndex of getMaxFooterTemplateCount(); track footerIndex){\r\n              <tr>\r\n                @if(selectable()){\r\n                  <td [ngStyle]=\"{\r\n                    width: selectableWidth()\r\n                  }\"></td>\r\n                }\r\n\r\n                @if(reorderable()){\r\n                  <td [ngStyle]=\"{\r\n                    width: reOrderWidth()\r\n                  }\"></td>\r\n                }\r\n\r\n                @if(showIndex()){\r\n                  <td [ngStyle]=\"{\r\n                    width: indexWidth()\r\n                  }\"></td>\r\n                }\r\n\r\n                @for(column of columnsSignal(); track column){\r\n                  <td\r\n                    [style.width]=\"column.widthSignal()\" [style.text-align]=\"column.textAlign()\"\r\n                    [hidden]=\"!column.visibleSignal()\"\r\n                    [ngClass]=\"tdTemplateClassName(column)\">\r\n                      <div class=\"flexi-grid-cell-footer\">\r\n                        @if(column.footerTemplates()[footerIndex]){\r\n                          <ng-container *ngTemplateOutlet=\"column.footerTemplates()[footerIndex]; context: { $implicit:getPagedData(), column: column, rowIndex: footerIndex }\" />\r\n                        }@else {\r\n                        }\r\n                      </div>\r\n                  </td>\r\n                }\r\n                @if(columnCommandTemplate()){\r\n                  <td style=\"background-color: var(--flexi-grid-bg-color)\"\r\n                  [ngStyle]=\"{\r\n                    width: commandColumnWidth(),\r\n                  }\" [ngClass]=\"\r\n                    stickyCommandColumn()\r\n                      ? 'flexi-sticky-column flexi-sticky-th-column'\r\n                      : ''\r\n                  \"></td>\r\n                }\r\n              </tr>\r\n            }\r\n            <ng-container *ngTemplateOutlet=\"footerTemplate()\" class=\"overflow-x\" />\r\n          </tfoot>\r\n        </table>\r\n      </div>\r\n    </div>\r\n  </div>\r\n  @if(pageableSignal()){\r\n  <div class=\"flexi-grid-pagination-container\">\r\n    @if(!isShowMobileFilter()){\r\n    <div class=\"flexi-grid-pagination-part-one\">\r\n      <select class=\"flexi-grid-pagesize-select\" [ngModel]=\"pageSizeSignal()\" (change)=\"changePageSize($event)\">\r\n        @for(size of pageSizeList(); track size){\r\n          <option>{{ size }}</option>\r\n        }\r\n      </select>\r\n      <span [ngStyle]=\"{visibility: selectedRows().size > 0 ? 'visible' : 'hidden', height: selectedRows().size > 0 ? '100%' : '0px'}\">\r\n        <span style=\"margin-left: 10px;\">{{selected()}}: </span><b>{{selectedRows().size}}</b>\r\n      </span>\r\n    </div>\r\n    <div class=\"flexi-grid-pagination-part-two\">\r\n      <ul class=\"flexi-grid-pagination\">\r\n        @if(pageNumbersSignal().length > 0){\r\n        <li class=\"flexi-grid-page-item\" [ngClass]=\"pageNumSignal() === 1 ? 'disabled' : ''\" (click)=\"changePage(1)\">\r\n          <div class=\"flexi-grid-page-link\" aria-label=\"Previous\">\r\n            <span aria-hidden=\"true\">&laquo;</span>\r\n          </div>\r\n        </li>\r\n        <li class=\"flexi-grid-page-item\" [ngClass]=\"pageNumSignal() === 1 ? 'disabled' : ''\"\r\n          (click)=\"changePage(pageNumSignal() - 1)\">\r\n          <div class=\"flexi-grid-page-link\" aria-label=\"Previous\">\r\n            <span aria-hidden=\"true\">&#8249;</span>\r\n          </div>\r\n        </li>\r\n        @if(pageNumbersSignal()[0] !== 1){\r\n        <li class=\"flexi-grid-page-item\" (click)=\"previousPageGroup()\">\r\n          <div class=\"flexi-grid-page-link\">...</div>\r\n        </li>\r\n        } @for(pageNumber of pageNumbersSignal(); track trackByFn()){\r\n        <li class=\"flexi-grid-page-item\">\r\n          <div (click)=\"changePage(pageNumber)\" class=\"flexi-grid-page-link\" [ngClass]=\"\r\n              pageNumSignal() === pageNumber ? 'flexi-grid-active' : ''\r\n            \">\r\n            {{ pageNumber }}\r\n          </div>\r\n        </li>\r\n        } @if(pageNumbersSignal()[pageNumbersSignal().length - 1] !== totalPageCountSignal()){\r\n        <li class=\"flexi-grid-page-item\" (click)=\"nextPageGroup()\">\r\n          <div class=\"flexi-grid-page-link\">...</div>\r\n        </li>\r\n        }\r\n        <li class=\"flexi-grid-page-item\" [ngClass]=\"pageNumSignal() === totalPageCountSignal() ? 'disabled' : ''\"\r\n          (click)=\"changePage(pageNumSignal() + 1)\">\r\n          <div class=\"flexi-grid-page-link\" aria-label=\"Next\">\r\n            <span aria-hidden=\"true\">&#8250;</span>\r\n          </div>\r\n        </li>\r\n        <li class=\"flexi-grid-page-item\" [ngClass]=\"pageNumSignal() === totalPageCountSignal() ? 'disabled' : ''\"\r\n          (click)=\"changePage(totalPageCountSignal())\">\r\n          <div class=\"flexi-grid-page-link\" aria-label=\"Next\">\r\n            <span aria-hidden=\"true\">&raquo;</span>\r\n          </div>\r\n        </li>\r\n        }\r\n      </ul>\r\n    </div>\r\n    }\r\n    <div class=\"flexi-grid-pagination-part-third\">\r\n      @if(totalPageCountSignal()){\r\n        <span>\r\n          <b>{{ pageNumSignal() }}</b> - <b>{{ totalPageCountSignal() }}</b> {{ ofText() }}\r\n          <b>{{ (totalSignal() | currency : \"\" : \"\" : \"1.0\")!.replace(\",\", \".\") }}</b> {{ itemsText() }}\r\n        </span>\r\n      }\r\n    </div>\r\n  </div>\r\n  }\r\n</div>\r\n}\r\n\r\n<ng-template #treeRow let-node let-level=\"level\" let-index=\"index\">\r\n  <tr [class.flexi-grid-selected-row]=\"selectedRows().has(level)\"\r\n      [ngStyle]=\"{ 'min-height': trMinHeight() }\" role=\"row\">\r\n    @if(selectable()){\r\n      <td [ngStyle]=\"{\r\n            width: selectableWidth(),\r\n            textAlign: selectableTextAlign(),\r\n            userSelect: 'none',\r\n            cursor: 'pointer'\r\n          }\"\r\n          (click)=\"toggleRowSelection(node)\">\r\n        <input class=\"checkbox-custom\" type=\"checkbox\" style=\"transform: scale(1.3);\" [checked]=\"checked(node)\">\r\n      </td>\r\n    }\r\n\r\n    @if(reorderable() && !groupable()){\r\n      <td [ngStyle]=\"{\r\n            'width': reOrderWidth(),\r\n            'text-align': reOrderTextAlign(),\r\n            'cursor':'pointer',\r\n            'user-select': 'none'\r\n          }\"\r\n          [attr.data-label]=\"'#'\"\r\n          scope=\"cell\"\r\n      >\r\n        <span class=\"material-symbols-outlined\">reorder</span>\r\n      </td>\r\n    }\r\n\r\n    @if(showIndex()){\r\n      <td [ngStyle]=\"{\r\n          width: indexWidth(),\r\n          textAlign: indexTextAlign()\r\n        }\"\r\n        [attr.data-label]=\"'#'\"\r\n        scope=\"cell\"\r\n      >\r\n        <span style=\"font-weight: bold;\">{{ getNextGlobalRowIndex() }}</span>\r\n      </td>\r\n    }\r\n\r\n    @for(column of columnsSignal(); track column; let columnIndex = $index){\r\n      <td\r\n          [style.width]=\"column.widthSignal()\" [style.text-align]=\"column.textAlign()\"\r\n          [ngClass]=\"tdTemplateClassName(column)\"\r\n          [hidden]=\"!column.visibleSignal()\"\r\n          [attr.data-label]=\"column.title() || column.field()\"\r\n          scope=\"cell\"\r\n          [style.padding-left.px]=\"columnIndex  === 0 ? (level * 40) + 10 : 10\"\r\n      >\r\n          @if(columnIndex === 0 && node.children && node.children.length > 0){\r\n            <span\r\n              class=\"material-symbols-outlined\"\r\n              style=\"cursor: pointer; vertical-align: middle; margin-right: 4px;\"\r\n              (click)=\"toggleNodeExpand(node[groupableField()])\"\r\n            >\r\n              {{ isNodeExpanded(node[groupableField()]) ? 'keyboard_arrow_down' : 'chevron_right' }}\r\n            </span>\r\n          }\r\n\r\n          @if(column.cellTemplate()){\r\n            <ng-container *ngTemplateOutlet=\"column.cellTemplate(); context: { $implicit: node, column: column, rowIndex: index }\" />\r\n          }@else{\r\n            @if(column.field()){\r\n              @if((column.filterType() === \"date\" || column.filterType() === \"date-time\") && column.filterType()){\r\n                {{ getFieldValue(node, column.field()) | date : column.format()!:'':language() }}\r\n              }@else if(column.filterType() === \"number\" && column.filterType()){\r\n                @if(column.format() === \"n\" || column.format() === null){\r\n                  {{ getFieldValue(node, column.field()) | trCurrency : \"\" : true : column.fraction() }}\r\n                }@else if(column.format() === \"c\"){\r\n                  {{\r\n                  getFieldValue(node, column.field())\r\n                  | trCurrency\r\n                  : column.symbol()\r\n                  : column.showSymbolInFront()\r\n                  : column.fraction()\r\n                  }}\r\n                }\r\n              }@else if(column.filterType() === \"boolean\"){\r\n                @if(column.showCheckbox()){\r\n                  <input class=\"flexi-grid-checkbox\" type=\"checkbox\" [checked]=\"getFieldValue(node, column.field())\"\r\n                    (change)=\"getBooleanInputValue(node, column, $event)\" />\r\n                }@else {\r\n                  @if(getFieldValue(node, column.field())){\r\n                    <span class=\"flexi-grid-card flexi-grid-card-success\">\r\n                      {{ column.booleanData()[0] }}\r\n                    </span>\r\n                  }@else {\r\n                    <span class=\"flexi-grid-card flexi-grid-card-danger\">\r\n                      {{ column.booleanData()[1] }}\r\n                    </span>\r\n                  }\r\n                }\r\n              }@else {\r\n                {{ getFieldValue(node, column.field()) }}\r\n              }\r\n            }\r\n          }\r\n      </td>\r\n    }\r\n\r\n    @if(columnCommandTemplate()){\r\n      <td [ngStyle]=\"{\r\n            width: commandColumnWidth(),\r\n            'text-align': commandColumnTextAlign()\r\n          }\"\r\n          [ngClass]=\"{'flexi-grid-selected-row': selectedRows().has(level), 'flexi-sticky-column flexi-sticky-td-column': stickyCommandColumn()}\"\r\n          [attr.data-label]=\"commandColumnTitleSignal()\" scope=\"cell\"\r\n      >\r\n        <div class=\"flexi-grid-command-display-flex\">\r\n          <ng-container *ngTemplateOutlet=\"columnCommandTemplate()!; context: { $implicit: node }\" />\r\n        </div>\r\n      </td>\r\n    }\r\n  </tr>\r\n\r\n  @if(node.children && node.children.length > 0){\r\n    @if(isNodeExpanded(node[groupableField()])){\r\n      @for(child of node.children; track child; let childIndex = $index){\r\n        <ng-container *ngTemplateOutlet=\"treeRow; context: { $implicit: child, level: level + 1, index: childIndex }\"></ng-container>\r\n      }\r\n    }\r\n  }\r\n</ng-template>","import { Injectable } from \"@angular/core\";\r\nimport { StateFilterModel, StateModel } from \"../models/state.model\"\r\nimport ExcelJS from 'exceljs';\r\nimport { saveAs } from 'file-saver-es';\r\n\r\n@Injectable({\r\n  providedIn: \"root\"\r\n})\r\nexport class FlexiGridService {\r\n  getODataEndpoint(state: StateModel) {\r\n    let endpoint = `$top=${state.pageSize}&$skip=${state.skip}`;\r\n\r\n    if (state.sort.field !== '') {\r\n      endpoint += `&$orderby=${this.toTitleCase(state.sort.field)}`;\r\n      if (state.sort.dir === 'desc') {\r\n        endpoint += ` desc`;\r\n      }\r\n    }\r\n\r\n    if (state.filter.length > 0) {\r\n      const filters = state.filter.filter(p => p.value.toString() !== 'undefined' && p.value.toString() !== \"\");\r\n\r\n      if (filters.length > 0) {\r\n        endpoint += `&$filter=`;\r\n        let filterValue: string = \"\";\r\n\r\n        filters.forEach((val: StateFilterModel) => {\r\n          if (filterValue !== \"\") {\r\n            filterValue = filterValue + \" and \";\r\n          }\r\n\r\n          if (val.type === \"date\") {\r\n            if (val.operator === \"range\" && !val.value2) return;\r\n\r\n            const date1 = new Date(val.value);\r\n            const isoDate1 = date1.toISOString().split('T')[0];\r\n\r\n            if (val.operator === \"range\") {\r\n              const date2 = new Date(val.value2 ?? '');\r\n              const isoDate2 = date2.toISOString().split('T')[0];\r\n              filterValue += `${this.toTitleCase(val.field)} ge ${isoDate1} and ${this.toTitleCase(val.field)} le ${isoDate2}`;\r\n            } else {\r\n              filterValue += `${this.toTitleCase(val.field)} ${val.operator} ${isoDate1}`;\r\n            }\r\n          }\r\n          else if (val.type === \"date-time\") {\r\n            const date = new Date(val.value);\r\n            const isoDate = date.toISOString()\r\n            filterValue += `${this.toTitleCase(val.field)} eq ${isoDate}`;\r\n          }\r\n          else if (val.type === \"number\") {\r\n            if (val.operator === \"contains\") val.operator = \"eq\";\r\n            const value = +val.value.toString().replace(\",\", \".\");\r\n            filterValue += `${this.toTitleCase(val.field)} ${val.operator} ${value}`;\r\n          }\r\n          else if (val.type === \"text\") {\r\n            switch (val.operator) {\r\n              case \"contains\":\r\n                filterValue += `contains(${this.toTitleCase(val.field)}, '${val.value}')`;\r\n                break;\r\n              case \"not contains\":\r\n                filterValue += `not(contains(${this.toTitleCase(val.field)}, '${val.value}'))`;\r\n                break;\r\n              case \"startswith\":\r\n                filterValue += `startswith(${this.toTitleCase(val.field)}, '${val.value}')`;\r\n                break;\r\n              case \"endswith\":\r\n                filterValue += `endswith(${this.toTitleCase(val.field)}, '${val.value}')`;\r\n                break;\r\n              case \"eq\":\r\n              case \"ne\":\r\n                filterValue += `${this.toTitleCase(val.field)} ${val.operator} '${val.value}'`;\r\n                break;\r\n              default:\r\n                filterValue += `${this.toTitleCase(val.field)} ${val.operator} '${val.value}'`;\r\n                break;\r\n            }\r\n          } else if (val.type === \"select\" || val.type === \"boolean\") {\r\n            let valueStr: any;\r\n            if (val.type !== \"boolean\") {\r\n              if (typeof val.value === \"number\" || (!isNaN(Number(val.value)) && val.value.toString().trim() !== \"\")) {\r\n                valueStr = `${val.value}`;\r\n              } else {\r\n                valueStr = `'${val.value}'`;\r\n              }\r\n            } else {\r\n              valueStr = val.value;\r\n            }\r\n            filterValue += `${this.toTitleCase(val.field)} ${val.operator} ${valueStr}`;\r\n          }\r\n        });\r\n        endpoint += filterValue;\r\n      }\r\n    }\r\n\r\n    return endpoint;\r\n  }\r\n\r\n  toTitleCase(str: string) {\r\n    return str\r\n      .split(' ') // Metni boşluklardan ayırarak kelimelere bölüyoruz.\r\n      .map(word => word.charAt(0).toUpperCase() + word.slice(1)) // Her kelimenin ilk harfini büyük yapıyoruz.\r\n      .join(' '); // Kelimeleri tekrar birleştiriyoruz.\r\n  }\r\n\r\n  async exportDataToExcel(data: any[], fileName: string) {\r\n    if (data.length === 0) {\r\n      console.error('No data to export');\r\n      return;\r\n    }\r\n\r\n    const workbook = new ExcelJS.Workbook();\r\n    const worksheet = workbook.addWorksheet('Sayfa1');\r\n\r\n    // Sütun başlıklarını ekle\r\n    const headers = Object.keys(data[0]);\r\n    worksheet.addRow(headers);\r\n\r\n    // Verileri ekle\r\n    data.forEach(row => {\r\n      const rowData = headers.map(header => row[header] || '');\r\n      worksheet.addRow(rowData);\r\n    });\r\n\r\n    // Stil ayarları\r\n    worksheet.getRow(1).font = { bold: true };\r\n    headers.forEach((header, index) => {\r\n      const column = worksheet.getColumn(index + 1);\r\n      column.width = 15; // Kolon genişliği\r\n      column.alignment = { horizontal: 'left' }; // Varsayılan hizalama\r\n    });\r\n\r\n    // Excel dosyasını oluştur ve indir\r\n    const buffer = await workbook.xlsx.writeBuffer();\r\n    const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n    saveAs(blob, `${fileName}.xlsx`);\r\n  }\r\n\r\n  buildHierarchy(flatArray: any[], options?: {\r\n    codeProperty?: string,\r\n    separator?: string,\r\n    childrenProperty?: string,\r\n    levelProperty?: string\r\n  }) {\r\n    const codeProp = options?.codeProperty || 'code';\r\n    const separator = options?.separator || '-';\r\n    const childrenProp = options?.childrenProperty || 'children';\r\n    const levelProp = options?.levelProperty || 'level';\r\n\r\n    const rootNodes: any[] = [];\r\n    const nodesMap: { [key: string]: any } = {};\r\n\r\n    flatArray.forEach(item => {\r\n      const codeValue = item[codeProp];\r\n      let parentCode: string | null = null;\r\n      let level: number = 0;\r\n\r\n      // Initialize the children array\r\n      item[childrenProp] = [];\r\n\r\n      // Add the item to the nodesMap for easy reference\r\n      nodesMap[codeValue] = item;\r\n\r\n      // Determine the parent code\r\n      if (codeValue.includes(separator)) {\r\n        // If the code contains the separator, parent code is code up to the last separator\r\n        const lastSeparatorIndex = codeValue.lastIndexOf(separator);\r\n        parentCode = codeValue.substring(0, lastSeparatorIndex);\r\n      } else {\r\n        // If the code doesn't contain the separator\r\n        if (codeValue.length > 1) {\r\n          // Remove the last digit(s) to get the parent code\r\n          parentCode = codeValue.slice(0, -1);\r\n        } else {\r\n          parentCode = null; // This is a top-level node\r\n        }\r\n      }\r\n\r\n      // Determine the level\r\n      if (parentCode === null) {\r\n        level = 0;\r\n      } else {\r\n        const parentNode = nodesMap[parentCode];\r\n        if (parentNode) {\r\n          level = (parentNode[levelProp] || 0) + 1;\r\n        } else {\r\n          level = 0; // Parent not found; treat as top-level\r\n        }\r\n      }\r\n\r\n      item[levelProp] = level; // Set the level\r\n\r\n      if (parentCode === null) {\r\n        // This is a top-level node\r\n        rootNodes.push(item);\r\n      } else {\r\n        const parentNode = nodesMap[parentCode];\r\n        if (parentNode) {\r\n          parentNode[childrenProp].push(item);\r\n        } else {\r\n          // Handle the case where the parent node is missing\r\n          rootNodes.push(item);\r\n        }\r\n      }\r\n    });\r\n\r\n    return rootNodes;\r\n  }\r\n\r\n}","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TrCurrencyPipe } from 'tr-currency';\r\nimport { FlexiGridCellTemplateDirective } from '../directives/flexi-grid-cell-template.directive';\r\nimport { FlexiGridHeaderTemplateDirective } from '../directives/flexi-grid-header-template.directive';\r\nimport { FlexiGridComponent } from '../components/flexi-grid.component';\r\nimport { FlexiGridColumnComponent } from '../components/flexi-grid-column.component';\r\nimport { FlexiButtonComponent } from 'flexi-button';\r\nimport { FlexiTooltipDirective } from 'flexi-tooltip';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { FlexiGridFooterTemplateDirective } from '../directives/flexi-grid-footer-template.directive';\r\nimport { FlexiGridColumnCommandTemplateDirective } from '../directives/flexi-grid-column-command-template.directive';\r\nimport { FlexiGridCaptionCommandTemplateDirective } from '../directives/flexi-grid-caption-command-template.directive';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FlexiGridComponent,\r\n    FlexiGridColumnComponent,\r\n    FlexiGridCellTemplateDirective,\r\n    FlexiGridHeaderTemplateDirective,\r\n    FlexiGridFooterTemplateDirective,\r\n    FlexiGridColumnCommandTemplateDirective,\r\n    FlexiGridCaptionCommandTemplateDirective\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    FormsModule,\r\n    TrCurrencyPipe,\r\n    FlexiTooltipDirective,\r\n    FlexiButtonComponent,\r\n    DragDropModule,\r\n    ],\r\n  exports: [\r\n    FlexiGridComponent,\r\n    FlexiGridColumnComponent,\r\n    FlexiGridCellTemplateDirective,\r\n    FlexiGridHeaderTemplateDirective,\r\n    FlexiTooltipDirective,\r\n    DragDropModule,\r\n    FlexiButtonComponent,\r\n    FlexiGridFooterTemplateDirective,\r\n    FlexiGridColumnCommandTemplateDirective,\r\n    FlexiGridCaptionCommandTemplateDirective\r\n  ]\r\n})\r\nexport class FlexiGridModule { }\r\n","export class FlexiGridFilterDataModel{\r\n    value: any;\r\n    name: any;\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}