{"version":3,"file":"lztic-table.mjs","sources":["../../../projects/lztic-table/src/lib/lztic-table.token.ts","../../../projects/lztic-table/src/lib/cell-template.directive.ts","../../../projects/lztic-table/src/lib/data-table.component.ts","../../../projects/lztic-table/src/lib/data-table.component.html","../../../projects/lztic-table/src/lib/lztic-table.ts","../../../projects/lztic-table/src/public-api.ts","../../../projects/lztic-table/src/lztic-table.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport interface LzticTableOptions {\n  density?: 'compact' | 'normal' | 'spacious';\n  pagination?: boolean;\n  pageSizeOptions?: number[];\n  pageSize?: number;\n  striped?: boolean;\n  globalSearch?: boolean;\n  showColumnFilters?: boolean;\n  showExportButtons?: boolean;\n  showSelection?: boolean;\n  showNewButton?: boolean;\n  showHideColumns?: boolean;\n}\n\nexport const LZTIC_TABLE_OPTIONS = new InjectionToken<LzticTableOptions>(\n  'lztic-table-options',\n  {\n    providedIn: 'root',\n    factory: () => ({}),\n  }\n);\n","import { Directive, Input, TemplateRef } from '@angular/core';\n\n@Directive({\n    selector: '[tableCellTemplate]',\n    standalone: true,\n})\nexport class CellTemplateDirective {\n    @Input('tableCellTemplate') key!: string;\n\n    constructor(public template: TemplateRef<any>) {}\n}\n","import { CommonModule } from '@angular/common';\nimport { LZTIC_TABLE_OPTIONS, LzticTableOptions } from './lztic-table.token';\nimport {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  ContentChildren,\n  DestroyRef,\n  effect,\n  inject,\n  Input,\n  input,\n  output,\n  QueryList,\n  signal,\n  TemplateRef,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { debounceTime, Subject } from 'rxjs';\nimport * as XLSX from 'xlsx';\nimport jsPDF from 'jspdf';\nimport 'jspdf-autotable';\n\nimport { CellTemplateDirective } from './cell-template.directive';\n\n// Tipos de datos para la configuración de la tabla\nexport interface TableFilter {\n  campo: string;\n  valor: any;\n  tipo:\n    | 'string'\n    | 'select'\n    | 'badge'\n    | 'boolean'\n    | 'date'\n    | 'datetime'\n    | 'currency';\n}\n\nexport interface TableState {\n  skip?: number;\n  first?: number;\n  order?: string | null;\n  search?: string;\n  filtros?: TableFilter[];\n  rows?: number;\n}\n\nexport interface RowClassCondition<T> {\n  condition: (item: T) => boolean;\n  class: string;\n}\n\nexport interface TableColumn<T> {\n  key: string;\n  label: string;\n  type:\n    | 'string'\n    | 'date'\n    | 'datetime'\n    | 'badge'\n    | 'boolean'\n    | 'select'\n    | 'currency';\n    \n  filterable?: boolean;\n  options?: { value: any; label: string }[];\n  badgeConfig?: { [key: string]: { class: string; label: string } };\n  width?: string;\n  sortable?: boolean;\n  visible?: boolean;\n  exportValue?: (item: T) => any;\n}\n\nexport interface TableAction {\n  label: string;\n  action: string;\n  class?: string;\n}\n\n@Component({\n  selector: 'lztic-table',\n  standalone: true,\n  imports: [CommonModule, FormsModule],\n  templateUrl: './data-table.component.html',\n  styleUrls: ['./data-table.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class DataTableComponent<T extends Record<string, any>>\n  implements AfterContentInit\n{\n  // Entradas del componente\n  #lzticTableOptions: LzticTableOptions | null = inject(LZTIC_TABLE_OPTIONS, { optional: true });\n  density = input<'normal' | 'compact' | 'spacious'>(this.#lzticTableOptions?.density ?? 'normal');\n  columns = input.required<TableColumn<T>[]>();\n  data = input.required<T[]>();\n  actions = input<TableAction[]>([]);\n  rowClassConditions = input<RowClassCondition<T>[]>([]);\n  pagination = input<boolean>(this.#lzticTableOptions?.pagination ?? false);\n  pageSizeOptions = input<number[]>(this.#lzticTableOptions?.pageSizeOptions ?? [25, 50, 100]);\n  pageSize = input(this.#lzticTableOptions?.pageSize ?? 25);\n  serverSide = input<boolean>(false);\n  totalItems = input<number>(0);\n  striped = input<boolean>(this.#lzticTableOptions?.striped ?? true);\n  globalSearch = input<boolean>(this.#lzticTableOptions?.globalSearch ?? false);\n  showColumnFilters = input<boolean>(this.#lzticTableOptions?.showColumnFilters ?? true);\n  showExportButtons = input<boolean>(this.#lzticTableOptions?.showExportButtons ?? false);\n  showSelection = input<boolean>(this.#lzticTableOptions?.showSelection ?? false);\n  loading = input<boolean>(false);\n  showNewButton = input<boolean>(this.#lzticTableOptions?.showNewButton ?? false);\n  showHideColumns = input<boolean>(this.#lzticTableOptions?.showHideColumns ?? false);\n\n  // State for sorting\n  sortColumn = signal<string | null>(null);\n  sortDirection = signal<'asc' | 'desc' | null>(null);\n\n  // Salidas del componente\n  actionClicked = output<{ action: string; item: T }>();\n  newButtonClicked = output<void>();\n  stateChanged = output<TableState>();\n  selectionChange = output<any[]>();\n  dataKey = input<string | null>(null); // Clave única para identificar cada fila\n\n  // Estado interno del componente\n  showFiltersRow = signal(false);\n  globalFilter = signal('');\n  filters = signal<Record<string, string>>({});\n  currentPage = signal(1);\n  _pageSize = signal(25);\n  selectedRows = signal<Set<any>>(new Set());\n  hiddenColumns = signal<Set<string>>(new Set());\n  columnDropdownOpen = signal(false);\n\n  totalRecords = computed(() => {\n    return this.serverSide() ? this.totalItems() : this.data()?.length ?? 0;\n  });\n\n  private filterSubject = new Subject<{ key: string; value: string }>();\n  private globalFilterSubject = new Subject<string>();\n\n  private destroyRef = inject(DestroyRef);\n\n  // Plantillas personalizadas\n  @ContentChildren(CellTemplateDirective)\n  private cellTemplates!: QueryList<CellTemplateDirective>;\n  customCellTemplates: Record<string, TemplateRef<any>> = {};\n\n  initialState = input<TableState | null>(null);\n\n  // Determina si todas las filas visibles están seleccionadas\n  allRowsSelected = computed(() => {\n    const paginated = this.paginatedData();\n    if (paginated.length === 0) return false;\n\n    return paginated.every((row) => this.isRowSelected(row));\n  });\n\n  constructor() {\n    this.filterSubject\n      .pipe(debounceTime(300), takeUntilDestroyed(this.destroyRef))\n      .subscribe(({ key, value }) => {\n        this.filters.update((current) => ({ ...current, [key]: value }));\n        this.currentPage.set(1);\n      });\n\n    this.globalFilterSubject\n      .pipe(debounceTime(300), takeUntilDestroyed(this.destroyRef))\n      .subscribe((value) => {\n        this.globalFilter.set(value);\n        this.currentPage.set(1);\n      });\n\n    effect(() => {\n      if (this.serverSide()) {\n        this.emitState();\n      }\n    });\n\n    // Efecto para emitir los cambios en la selección\n    effect(() => {\n      const selected = Array.from(this.selectedRows());\n      this.selectionChange.emit(selected);\n    });\n\n    // Effect to sync pageSize input with internal signal\n    effect(() => {\n      this._pageSize.set(this.pageSize());\n    });\n\n    // Effect to handle initial state\n    effect(() => {\n      const state = this.initialState();\n      if (state) {\n        // Set global search\n        if (state.search) {\n          this.globalFilter.set(state.search);\n        }\n\n        // Set sorting\n        if (state.order) {\n          const isDesc = state.order.startsWith('-');\n          this.sortColumn.set(isDesc ? state.order.substring(1) : state.order);\n          this.sortDirection.set(isDesc ? 'desc' : 'asc');\n        } else {\n          this.sortColumn.set(null);\n          this.sortDirection.set(null);\n        }\n\n        // Set filters and show the filter row if needed\n        if (state.filtros && state.filtros.length > 0) {\n          const filtersRecord = state.filtros.reduce((acc, filter) => {\n            acc[filter.campo] = filter.valor;\n            return acc;\n          }, {} as Record<string, string>);\n          this.filters.set(filtersRecord);\n          this.showFiltersRow.set(true);\n        }\n\n        // Set pagination\n        if (state.rows) {\n          this._pageSize.set(state.rows);\n        }\n\n        if (state.skip !== undefined && this._pageSize() > 0) {\n          this.currentPage.set(Math.floor(state.skip / this._pageSize()) + 1);\n        }\n      }\n    });\n\n    // Effect to set initial hidden columns\n    effect(() => {\n      const initiallyHidden = this.columns()\n        .filter(c => c.visible === false)\n        .map(c => c.key);\n      if (initiallyHidden.length > 0) {\n        this.hiddenColumns.set(new Set(initiallyHidden));\n      }\n    });\n  }\n\n  ngAfterContentInit(): void {\n    this.cellTemplates.forEach((template) => {\n      this.customCellTemplates[template.key] = template.template;\n    });\n  }\n\n  // --- Lógica de datos (computados) ---\n\n  filteredAndSortedData = computed(() => {\n    if (this.serverSide()) {\n      return this.data() ?? [];\n    }\n\n    const sourceData = this.data();\n    if (!sourceData) {\n      return [];\n    }\n\n    let data = [...sourceData];\n\n    const globalSearch = this.globalFilter().toLowerCase();\n    const activeFilters = Object.entries(this.filters()).filter(\n      ([, value]) => value !== null && value !== ''\n    );\n\n    if (globalSearch || activeFilters.length > 0) {\n      data = data.filter((item) => {\n        // Global search condition\n        const matchesGlobalSearch = globalSearch\n          ? this.columns().some((col) =>\n              String(this.getItemValue(item, col.key))\n                .toLowerCase()\n                .includes(globalSearch)\n            )\n          : true;\n\n        // Column filter condition\n        const matchesColumnFilters = activeFilters.every(([key, value]) => {\n          const column = this.columns().find((c) => c.key === key);\n          const itemValue = this.getItemValue(item, key);\n\n          if (!column) return true;\n\n          switch (column.type) {\n            case 'badge':\n            case 'select':\n            case 'boolean':\n              return String(itemValue) === value;\n            case 'date':\n            case 'datetime':\n              if (!value) return true;\n              const itemDate = new Date(itemValue);\n              const yyyy = itemDate.getFullYear();\n              const mm = String(itemDate.getMonth() + 1).padStart(2, '0');\n              const dd = String(itemDate.getDate()).padStart(2, '0');\n              return `${yyyy}-${mm}-${dd}` === value;\n            default: // 'string', 'currency', etc.\n              return String(itemValue)\n                .toLowerCase()\n                .includes(String(value).toLowerCase());\n          }\n        });\n\n        return matchesGlobalSearch && matchesColumnFilters;\n      });\n    }\n\n    // Ordenación\n    const sortKey = this.sortColumn();\n    if (sortKey) {\n      const direction = this.sortDirection() === 'asc' ? 1 : -1;\n      data.sort((a, b) => {\n        const valA = this.getItemValue(a, sortKey);\n        const valB = this.getItemValue(b, sortKey);\n        if (valA < valB) return -1 * direction;\n        if (valA > valB) return 1 * direction;\n        return 0;\n      });\n    }\n\n    return data;\n  });\n\n  totalItemsDisplay = computed(() =>\n    this.serverSide() ? this.totalItems() : this.filteredAndSortedData().length\n  );\n\n  totalPages = computed(() =>\n    Math.ceil(this.totalItemsDisplay() / this._pageSize())\n  );\n\n  paginatedData = computed(() => {\n    const data = this.filteredAndSortedData() ?? [];\n\n    if (!this.pagination() || this.serverSide()) {\n      return data;\n    }\n\n    const start = (this.currentPage() - 1) * this._pageSize();\n    const end = start + this._pageSize();\n    return data.slice(start, end);\n  });\n\n  startItem = computed(() => {\n    if (this.totalItemsDisplay() === 0) return 0;\n    return (this.currentPage() - 1) * this._pageSize() + 1;\n  });\n  endItem = computed(() => {\n    if (this.totalItemsDisplay() === 0) return 0;\n    return Math.min(this.currentPage() * this._pageSize(), this.totalItemsDisplay());\n  });\n\n  // Columnas que se mostrarán en la tabla\n  displayColumns = computed(() => {\n    const allColumns = this.columns();\n    const hidden = this.hiddenColumns();\n    if (hidden.size === 0) {\n      return allColumns;\n    }\n    return allColumns.filter((c) => !hidden.has(c.key));\n  });\n\n  // --- Métodos de interacción ---\n\n  toggleFiltersRow(): void {\n    this.showFiltersRow.update((s) => !s);\n  }\n\n  onGlobalFilterInput(event: Event): void {\n    const value = (event.target as HTMLInputElement).value;\n    this.globalFilterSubject.next(value);\n  }\n\n  onFilterInput(key: string, value: string): void {\n    this.filterSubject.next({ key, value });\n  }\n\n  sortTable(key: string): void {\n    if (this.sortColumn() === key) {\n      this.sortDirection.update((dir) => (dir === 'asc' ? 'desc' : 'asc'));\n    } else {\n      this.sortColumn.set(key);\n      this.sortDirection.set('asc');\n    }\n    this.currentPage.set(1);\n  }\n\n  clearFilters(): void {\n    this.filters.set({});\n    this.globalFilter.set('');\n    this.currentPage.set(1);\n  }\n\n  nextPage(): void {\n    if (this.currentPage() < this.totalPages()) {\n      this.currentPage.update((page) => page + 1);\n    }\n  }\n\n  previousPage(): void {\n    if (this.currentPage() > 1) {\n      this.currentPage.update((page) => page - 1);\n    }\n  }\n\n  goToPage(page: number): void {\n    if (page >= 1 && page <= this.totalPages()) {\n      this.currentPage.set(page);\n    }\n  }\n\n  onActionClick(action: string, item: T): void {\n    this.actionClicked.emit({ action, item });\n  }\n\n  getRowClass(item: T): string {\n    const conditions = this.rowClassConditions();\n    if (conditions.length === 0) {\n      return '';\n    }\n    return conditions\n      .filter(condition => condition.condition(item))\n      .map(condition => condition.class)\n      .join(' ');\n  }\n\n  onPageSizeChange(event: Event): void {\n    const newSize = Number((event.target as HTMLSelectElement).value);\n    this._pageSize.set(newSize);\n    this.currentPage.set(1); // Reset to first page\n  }\n\n  toggleColumnVisibility(key: string): void {\n    this.hiddenColumns.update((hidden) => {\n      const newHidden = new Set(hidden);\n      if (newHidden.has(key)) {\n        newHidden.delete(key);\n      } else {\n        newHidden.add(key);\n      }\n      return newHidden;\n    });\n  }\n\n  toggleColumnDropdown(): void {\n    this.columnDropdownOpen.update(open => !open);\n  }\n\n  // --- Métodos de utilidad ---\n\n  getPages(): number[] {\n    const total = this.totalPages();\n    const current = this.currentPage();\n    const delta = 2;\n    const range = [];\n    const rangeWithDots: number[] = [];\n    let l: number | undefined;\n\n    if (total <= 1) {\n      return [1];\n    }\n\n    range.push(1);\n    for (\n      let i = Math.max(2, current - delta);\n      i <= Math.min(total - 1, current + delta);\n      i++\n    ) {\n      range.push(i);\n    }\n    range.push(total);\n\n    for (const i of range) {\n      if (l) {\n        if (i - l === 2) {\n          rangeWithDots.push(l + 1);\n        } else if (i - l > 1) {\n          rangeWithDots.push(-1); // Use -1 for ellipsis\n        }\n      }\n      rangeWithDots.push(i);\n      l = i;\n    }\n\n    return rangeWithDots.filter((v, i, a) => a.indexOf(v) === i); // Remove duplicates\n  }\n\n  getItemValue(item: any, key: string): any {\n    return key.split('.').reduce((acc, part) => acc && acc[part], item);\n  }\n\n  getFilterValue(key: string): string {\n    return this.filters()[key] || '';\n  }\n\n  getBadgeClass(column: TableColumn<T>, item: T): string {\n    const value = this.getItemValue(item, column.key);\n    return column.badgeConfig?.[value]?.class ?? '';\n  }\n\n  getBadgeLabel(column: TableColumn<T>, item: T): string {\n    const value = this.getItemValue(item, column.key);\n    return column.badgeConfig?.[value]?.label ?? String(value);\n  }\n\n  // --- Métodos de Exportación ---\n\n  private getExportData(): Record<string, any>[] {\n    const selected = this.selectedRows();\n    const dataKey = this.dataKey();\n\n    let dataToProcess: T[];\n\n    if (selected.size > 0) {\n      if (dataKey) {\n        const selectedKeys = Array.from(selected.values());\n        dataToProcess = this.data().filter(item => \n          selectedKeys.includes(this.getItemValue(item, dataKey))\n        );\n      } else {\n        dataToProcess = Array.from(selected.values()) as T[];\n      }\n    } else {\n      dataToProcess = this.filteredAndSortedData();\n    }\n\n    const columns = this.displayColumns();\n\n    return dataToProcess.map((item: T) => {\n      const row: { [key: string]: any } = {};\n      columns.forEach((col) => {\n        if (col.exportValue) {\n          row[col.label] = col.exportValue(item);\n        } else {\n          row[col.label] = this.getItemValue(item, col.key);\n        }\n      });\n      return row;\n    });\n  }\n\n  exportToExcel(): void {\n    const data = this.getExportData();\n    const ws: XLSX.WorkSheet = XLSX.utils.json_to_sheet(data);\n    const wb: XLSX.WorkBook = XLSX.utils.book_new();\n    XLSX.utils.book_append_sheet(wb, ws, 'Data');\n    XLSX.writeFile(wb, 'data.xlsx');\n  }\n\n  exportToCsv(): void {\n    const data = this.getExportData();\n    const ws: XLSX.WorkSheet = XLSX.utils.json_to_sheet(data);\n    const csv = XLSX.utils.sheet_to_csv(ws);\n    const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });\n    const link = document.createElement('a');\n    const url = URL.createObjectURL(blob);\n    link.setAttribute('href', url);\n    link.setAttribute('download', 'data.csv');\n    link.style.visibility = 'hidden';\n    document.body.appendChild(link);\n    link.click();\n    document.body.removeChild(link);\n  }\n\n  exportToPdf(): void {\n    const doc = new jsPDF();\n    const columns = this.displayColumns();\n    const head = [columns.map((c) => c.label)];\n    const data = this.getExportData();\n\n    const body = data.map((item: Record<string, any>) =>\n      columns.map((col) => {\n        const value = item[col.label];\n        return value !== null && value !== undefined ? String(value) : '';\n      })\n    );\n\n    (doc as any).autoTable({\n      head: head,\n      body: body,\n    });\n    doc.save('data.pdf');\n  }\n\n  getSelectOptionLabel(column: TableColumn<T>, item: T): string {\n    const value = this.getItemValue(item, column.key);\n    const option = column.options?.find((opt) => opt.value === value);\n    return option?.label ?? String(value);\n  }\n\n  onSort(columnKey: string): void {\n    if (this.sortColumn() === columnKey) {\n      // Cycle through directions: asc -> desc -> null\n      if (this.sortDirection() === 'asc') {\n        this.sortDirection.set('desc');\n      } else {\n        this.sortColumn.set(null);\n        this.sortDirection.set(null);\n      }\n    } else {\n      // New column to sort\n      this.sortColumn.set(columnKey);\n      this.sortDirection.set('asc');\n    }\n  }\n\n  // --- Métodos de Selección ---\n\n  isRowSelected(row: T): boolean {\n    const key = this.dataKey();\n    if (key) {\n      const rowKey = this.getItemValue(row, key);\n      return this.selectedRows().has(rowKey);\n    }\n    return this.selectedRows().has(row);\n  }\n\n  toggleRowSelection(row: T): void {\n    const key = this.dataKey();\n    const selected = new Set(this.selectedRows());\n    const identifier = key ? this.getItemValue(row, key) : row;\n\n    if (selected.has(identifier)) {\n      selected.delete(identifier);\n    } else {\n      selected.add(identifier);\n    }\n    this.selectedRows.set(selected);\n  }\n\n  toggleSelectAll(): void {\n    const allSelected = this.allRowsSelected();\n    const selected = new Set(this.selectedRows());\n    const key = this.dataKey();\n\n    for (const row of this.paginatedData()) {\n      const identifier = key ? this.getItemValue(row, key) : row;\n      if (allSelected) {\n        selected.delete(identifier);\n      } else {\n        selected.add(identifier);\n      }\n    }\n    this.selectedRows.set(selected);\n  }\n\n  private emitState(): void {\n    const activeFilters = Object.entries(this.filters()).filter(\n      ([, value]) => value !== null && value !== ''\n    );\n\n    const tableFilters = activeFilters.reduce((acc: TableFilter[], [key, value]) => {\n      const column = this.columns().find((c) => c.key === key);\n\n      if (column?.type === 'datetime') {\n        const date = new Date(value as string);\n        const year = date.getFullYear();\n        const month = (date.getMonth() + 1).toString().padStart(2, '0');\n        const day = date.getDate().toString().padStart(2, '0');\n\n        acc.push({\n          campo: `${key}__gte`,\n          valor: `${year}-${month}-${day}T00:00:00`,\n          tipo: 'datetime',\n        });\n        acc.push({\n          campo: `${key}__lte`,\n          valor: `${year}-${month}-${day}T23:59:59`,\n          tipo: 'datetime',\n        });\n      } else {\n        const initialFiltros = this.initialState()?.filtros || [];\n        const initialFilter = initialFiltros.find(f => f.campo === key);\n        acc.push({\n          campo: key,\n          valor: value,\n          tipo: column?.type || initialFilter?.tipo || 'string',\n        });\n      }\n      return acc;\n    }, []);\n\n    const state: TableState = {\n      skip: (this.currentPage() - 1) * this._pageSize(),\n      first: this._pageSize(),\n      rows: this._pageSize(),\n      order: this.sortColumn()\n        ? this.sortDirection() === 'desc'\n          ? `-${this.sortColumn()}`\n          : this.sortColumn()\n        : null,\n      search: this.globalFilter(),\n      filtros: tableFilters,\n    };\n\n    this.stateChanged.emit(state);\n  }\n\n  onNewButtonClick(): void {\n    this.newButtonClicked.emit();\n  }\n}\n","<div class=\"dt-container\" [class.compact]=\"density() === 'compact'\">\n  <!-- Header -->\n  <div class=\"dt-header\">\n    <div class=\"dt-header-main-actions\">\n      @if (showNewButton()) {\n      <button class=\"dt-button\" (click)=\"onNewButtonClick()\">\n        <svg\n          width=\"14\"\n          height=\"14\"\n          viewBox=\"0 0 24 24\"\n          fill=\"none\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n        >\n          <path\n            d=\"M12 4V20M4 12H20\"\n            stroke=\"currentColor\"\n            stroke-width=\"2\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n          />\n        </svg>\n        <span>NUEVO</span>\n      </button>\n      }\n      <ng-content select=\"[lztic-header-actions]\"></ng-content>\n    </div>\n    <div class=\"dt-header-actions\">\n      <!-- Botones de Exportación -->\n      @if (showExportButtons()) {\n      <div class=\"dt-export-buttons\">\n        <button class=\"dt-button\" (click)=\"exportToCsv()\">CSV</button>\n        <button class=\"dt-button\" (click)=\"exportToExcel()\">EXCEL</button>\n        <button class=\"dt-button\" (click)=\"exportToPdf()\">PDF</button>\n      </div>\n      } @if (showColumnFilters()) { @if (showFiltersRow()) {\n      <button\n        class=\"dt-button dt-button--icon\"\n        (click)=\"clearFilters()\"\n        data-tooltip=\"Limpiar Filtros\"\n      >\n        <svg\n          width=\"800px\"\n          height=\"800px\"\n          viewBox=\"0 0 24 24\"\n          fill=\"none\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n        >\n          <path\n            d=\"M2.21151 13.8205C2.35815 13.9402 2.54146 14 2.76142 14C3.12239 14 3.37056 13.8124 3.50592 13.4371L4.58037 10.5167H9.41117L10.4941 13.4371C10.6294 13.8124 10.8776 14 11.2386 14C11.4585 14 11.639 13.9402 11.78 13.8205C11.9267 13.6954 12 13.5404 12 13.3555C12 13.2468 11.969 13.1108 11.9069 12.9477L7.97293 2.70156C7.79244 2.23385 7.47377 2 7.01692 2C6.53187 2 6.1991 2.23657 6.01861 2.70972L2.09306 12.9477C2.03102 13.1108 2 13.2468 2 13.3555C2 13.5404 2.0705 13.6954 2.21151 13.8205ZM8.9797 9.26852H5.0203L6.97462 3.90075H7.02538L8.9797 9.26852Z\"\n            fill=\"#212121\"\n          />\n          <path\n            d=\"M13 13.1053L14.7485 11.3568C14.5186 10.8745 14.4037 10.3005 14.4037 9.63489C14.4037 8.70453 14.6308 7.95267 15.0852 7.37931C15.545 6.80054 16.1346 6.51116 16.854 6.51116C17.6004 6.51116 18.19 6.79243 18.6227 7.35497C18.9793 7.81848 19.1889 8.41603 19.2517 9.14762C19.6763 9.28718 20.0754 9.52574 20.4131 9.86347L20.6987 10.149C20.7102 9.98232 20.716 9.81094 20.716 9.63489C20.716 8.31508 20.3888 7.25761 19.7343 6.46247C19.0798 5.66734 18.2197 5.26978 17.1542 5.26978C16.5646 5.26978 16.0318 5.40771 15.5558 5.68357C15.0852 5.95943 14.7147 6.34077 14.4442 6.82759H14.4118V2.75456C14.4118 2.53279 14.3442 2.35159 14.2089 2.21095C14.0791 2.07032 13.9114 2 13.7059 2C13.5003 2 13.33 2.07032 13.1947 2.21095C13.0649 2.35159 13 2.53279 13 2.75456V13.1053Z\"\n            fill=\"#212121\"\n          />\n          <path\n            d=\"M16.9815 21.5001H20.0019C20.4161 21.5001 20.7519 21.8358 20.7519 22.2501C20.7519 22.6643 20.4161 23.0001 20.0019 23.0001H14.5005L14.5029 22.9927C14.0622 22.9544 13.6321 22.7667 13.2949 22.4296L10.571 19.7056C9.80965 18.9443 9.81042 17.7091 10.5727 16.9468L16.9473 10.5723C17.7095 9.80999 18.9447 9.80923 19.706 10.5706L22.43 13.2945C23.1913 14.0559 23.1906 15.291 22.4283 16.0533L16.9815 21.5001ZM18.0079 11.6329L13.851 15.7899L17.2107 19.1495L21.3676 14.9926C21.5453 14.8149 21.5436 14.5295 21.3693 14.3552L18.6454 11.6312C18.471 11.4569 18.1856 11.4552 18.0079 11.6329ZM12.7903 16.8505L11.6334 18.0075C11.4556 18.1852 11.4573 18.4706 11.6317 18.6449L14.3556 21.3689C14.5299 21.5432 14.8153 21.5449 14.9931 21.3672L16.15 20.2102L12.7903 16.8505Z\"\n            fill=\"#212121\"\n          />\n        </svg>\n      </button>\n      }\n      <button\n        class=\"dt-button dt-button--icon\"\n        (click)=\"toggleFiltersRow()\"\n        [attr.data-tooltip]=\"\n          showFiltersRow() ? 'Ocultar Filtros' : 'Mostrar Filtros'\n        \"\n      >\n        @if (showFiltersRow()) {\n        <!-- Icono Ocultar Filtros (con slash) -->\n        <svg\n          width=\"800px\"\n          height=\"800px\"\n          viewBox=\"0 0 24 24\"\n          fill=\"none\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n        >\n          <g id=\"Interface / Filter_Off\">\n            <path\n              id=\"Vector\"\n              d=\"M13 4H18.4C18.9601 4 19.2409 4 19.4548 4.10899C19.6429 4.20487 19.7948 4.35774 19.8906 4.5459C19.9996 4.75981 20 5.04005 20 5.6001V6.3448C20 6.58444 20 6.70551 19.9727 6.81942C19.9482 6.92146 19.9072 7.01893 19.8524 7.1084C19.7906 7.20931 19.7043 7.2958 19.5314 7.46875L18 9.00012M7.49961 4H5.59961C5.03956 4 4.75981 4 4.5459 4.10899C4.35774 4.20487 4.20487 4.35774 4.10899 4.5459C4 4.75981 4 5.04005 4 5.6001V6.33736C4 6.58195 4 6.70433 4.02763 6.81942C4.05213 6.92146 4.09263 7.01893 4.14746 7.1084C4.20928 7.20928 4.29591 7.29591 4.46875 7.46875L9.53149 12.5315C9.70443 12.7044 9.79044 12.7904 9.85228 12.8914C9.90711 12.9808 9.94816 13.0786 9.97266 13.1807C10 13.2946 10 13.4155 10 13.6552V18.411C10 19.2682 10 19.6971 10.1805 19.9552C10.3382 20.1806 10.5814 20.331 10.8535 20.3712C11.1651 20.4172 11.5487 20.2257 12.3154 19.8424L13.1154 19.4424C13.4365 19.2819 13.5966 19.2013 13.7139 19.0815C13.8176 18.9756 13.897 18.8485 13.9453 18.7083C14 18.5499 14 18.37 14 18.011V13.6626C14 13.418 14 13.2958 14.0276 13.1807C14.0521 13.0786 14.0926 12.9809 14.1475 12.8915C14.2091 12.7909 14.2952 12.7048 14.4669 12.5331L14.4688 12.5314L15.5001 11.5001M15.5001 11.5001L5 1M15.5001 11.5001L19 15\"\n              stroke=\"#000000\"\n              stroke-width=\"2\"\n              stroke-linecap=\"round\"\n              stroke-linejoin=\"round\"\n            />\n          </g>\n        </svg>\n        } @else {\n        <!-- Icono Mostrar Filtros -->\n        <svg\n          width=\"800px\"\n          height=\"800px\"\n          viewBox=\"0 0 24 24\"\n          fill=\"none\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n        >\n          <g id=\"Interface / Filter\">\n            <path\n              id=\"Vector\"\n              d=\"M20 5.6001C20 5.04005 19.9996 4.75981 19.8906 4.5459C19.7948 4.35774 19.6423 4.20487 19.4542 4.10899C19.2403 4 18.9597 4 18.3996 4H5.59961C5.03956 4 4.75981 4 4.5459 4.10899C4.35774 4.20487 4.20487 4.35774 4.10899 4.5459C4 4.75981 4 5.04005 4 5.6001V6.33736C4 6.58195 4 6.70433 4.02763 6.81942C4.05213 6.92146 4.09263 7.01893 4.14746 7.1084C4.20928 7.20928 4.29591 7.29591 4.46875 7.46875L9.53149 12.5315C9.70443 12.7044 9.79044 12.7904 9.85228 12.8914C9.90711 12.9808 9.94816 13.0786 9.97266 13.1807C10 13.2946 10 13.4155 10 13.6552V18.411C10 19.2682 10 19.6971 10.1805 19.9552C10.3382 20.1806 10.5814 20.331 10.8535 20.3712C11.1651 20.4172 11.5487 20.2257 12.3154 19.8424L13.1154 19.4424C13.4365 19.2819 13.5966 19.2013 13.7139 19.0815C13.8176 18.9756 13.897 18.8485 13.9453 18.7084C14 18.5499 14 18.37 14 18.011V13.6626C14 13.418 14 13.2958 14.0276 13.1807C14.0521 13.0786 14.0926 12.9808 14.1475 12.8914C14.2089 12.7911 14.2947 12.7053 14.4653 12.5347L14.4688 12.5315L19.5315 7.46875C19.7044 7.2958 19.7904 7.20932 19.8523 7.1084C19.9071 7.01893 19.9482 6.92146 19.9727 6.81942C20 6.70551 20 6.58444 20 6.3448V5.6001Z\"\n              stroke=\"#000000\"\n              stroke-width=\"2\"\n              stroke-linecap=\"round\"\n              stroke-linejoin=\"round\"\n            />\n          </g>\n        </svg>\n        }\n      </button>\n      } @if (globalSearch()) {\n      <!-- Global Search -->\n      <div class=\"dt-global-search\">\n        <input\n          type=\"text\"\n          class=\"dt-input\"\n          placeholder=\"Buscar en la tabla...\"\n          [value]=\"globalFilter()\"\n          (input)=\"onGlobalFilterInput($event)\"\n        />\n      </div>\n      }\n      <!-- Botón para Ocultar/Mostrar Columnas -->\n      @if (showHideColumns()) {\n      <div class=\"dt-column-toggle\">\n        <button\n          class=\"dt-button dt-button--icon\"\n          (click)=\"toggleColumnDropdown()\"\n          data-tooltip=\"Mostrar/Ocultar Columnas\"\n        >\n          <svg\n            width=\"24\"\n            height=\"24\"\n            viewBox=\"0 0 24 24\"\n            fill=\"none\"\n            xmlns=\"http://www.w3.org/2000/svg\"\n          >\n            <path\n              d=\"M3 18v-2h18v2H3Zm0-5v-2h18v2H3Zm0-5V6h18v2H3Z\"\n              fill=\"currentColor\"\n            />\n          </svg>\n        </button>\n        @if (columnDropdownOpen()) {\n        <div class=\"dt-column-dropdown\">\n          @for(column of columns(); track column.key) {\n          <label class=\"dt-column-dropdown-item\">\n            <input\n              type=\"checkbox\"\n              [checked]=\"!hiddenColumns().has(column.key)\"\n              (change)=\"toggleColumnVisibility(column.key)\"\n            />\n            {{ column.label }}\n          </label>\n          }\n        </div>\n        }\n      </div>\n      }\n    </div>\n  </div>\n  <div class=\"dt-title-container\">\n    <ng-content select=\"[lztic-title-content]\"></ng-content>\n  </div>\n  <!-- Table title -->\n  <div class=\"dt-table-wrapper\">\n    <table class=\"dt-table\">\n      <thead class=\"dt-thead\">\n        <!-- Column Headers -->\n        <tr class=\"dt-tr\">\n          @if (showSelection()) {\n          <th class=\"dt-th dt-th--selection\">\n            <input\n              type=\"checkbox\"\n              [checked]=\"allRowsSelected()\"\n              (change)=\"toggleSelectAll()\"\n            />\n          </th>\n          } @if (actions().length > 0) {\n          <th\n            class=\"dt-th dt-th-actions\"\n            style=\"width: 1%; white-space: nowrap\"\n          >\n            Acciones\n          </th>\n          } @for (column of displayColumns(); track column.key) {\n          <th\n            class=\"dt-th\"\n            [style.width]=\"column.width\"\n            [class.sortable]=\"column.sortable\"\n            (click)=\"column.sortable ? onSort(column.key) : null\"\n          >\n            <div class=\"dt-th-content\">\n              <span>{{ column.label }}</span>\n              @if (column.sortable) {\n              <div class=\"sort-indicator\">\n                @if (sortColumn() === column.key) { @if (sortDirection() ===\n                'asc') {\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\">\n                  <path fill=\"currentColor\" d=\"m7 14l5-5l5 5z\" />\n                </svg>\n                } @else if (sortDirection() === 'desc') {\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\">\n                  <path fill=\"currentColor\" d=\"m7 10l5 5l5-5z\" />\n                </svg>\n                } } @else {\n                <svg\n                  width=\"16\"\n                  height=\"16\"\n                  viewBox=\"0 0 24 24\"\n                  style=\"opacity: 0.3\"\n                >\n                  <path fill=\"currentColor\" d=\"m7 14l5-5l5 5z\" />\n                </svg>\n                }\n              </div>\n              }\n            </div>\n          </th>\n          }\n        </tr>\n\n        <!-- Filter Row -->\n        @if (showFiltersRow()) {\n        <tr class=\"dt-tr dt-filter-row\">\n          @if (showSelection()) {\n          <td class=\"dt-td dt-td-filter dt-td--selection\"></td>\n          } @if (actions().length > 0) {\n          <td class=\"dt-td dt-td-filter\"></td>\n          } @for (column of displayColumns(); track column.key) {\n          <td class=\"dt-td dt-td-filter\" [style.width]=\"column.width\">\n            @if (column.filterable) { @switch (column.type) { @case ('currency')\n            {\n            <input\n              type=\"text\"\n              class=\"dt-input\"\n              [ngModel]=\"getFilterValue(column.key)\"\n              (ngModelChange)=\"onFilterInput(column.key, $event)\"\n            />\n            } @case ('string') {\n            <input\n              type=\"text\"\n              class=\"dt-input\"\n              [ngModel]=\"getFilterValue(column.key)\"\n              (ngModelChange)=\"onFilterInput(column.key, $event)\"\n            />\n            } @case ('badge') {\n            <select\n              class=\"dt-select\"\n              [ngModel]=\"getFilterValue(column.key)\"\n              (ngModelChange)=\"onFilterInput(column.key, $event)\"\n            >\n              <option value=\"\">Todos</option>\n              @for (option of column.options; track option.value) {\n              <option [value]=\"option.value\">\n                {{ option.label }}\n              </option>\n              }\n            </select>\n            } @case ('select') {\n            <select\n              class=\"dt-select\"\n              [ngModel]=\"getFilterValue(column.key)\"\n              (ngModelChange)=\"onFilterInput(column.key, $event)\"\n            >\n              <option value=\"\">Todos</option>\n              @for (option of column.options; track option.value) {\n              <option [value]=\"option.value\">\n                {{ option.label }}\n              </option>\n              }\n            </select>\n            } @case ('boolean') {\n            <select\n              class=\"dt-select\"\n              [value]=\"getFilterValue(column.key)\"\n              (change)=\"onFilterInput(column.key, $any($event.target).value)\"\n            >\n              <option value=\"\">Todos</option>\n              <option value=\"true\">Sí</option>\n              <option value=\"false\">No</option>\n            </select>\n            } @case ('date') {\n            <input\n              type=\"date\"\n              class=\"dt-input\"\n              [ngModel]=\"getFilterValue(column.key)\"\n              (ngModelChange)=\"onFilterInput(column.key, $event)\"\n            />\n            } @case ('datetime') {\n            <input\n              type=\"date\"\n              class=\"dt-input\"\n              [ngModel]=\"getFilterValue(column.key)\"\n              (ngModelChange)=\"onFilterInput(column.key, $event)\"\n            />\n            } } }\n          </td>\n          }\n        </tr>\n        }\n      </thead>\n\n      <tbody class=\"dt-tbody\">\n        @if(loading()) { @for (i of [1, 2, 3, 4, 5]; track i) {\n        <tr class=\"dt-tr dt-tr-skeleton\">\n          @if (showSelection()) {\n          <td class=\"dt-td dt-td--selection\">\n            <div class=\"skeleton-box skeleton-checkbox\"></div>\n          </td>\n          } @if (actions().length > 0) {\n          <td class=\"dt-td dt-td--actions\">\n            <div class=\"skeleton-box skeleton-button\"></div>\n          </td>\n          } @for (column of displayColumns(); track column.key) {\n          <td class=\"dt-td\">\n            <div class=\"skeleton-box skeleton-text\"></div>\n          </td>\n          }\n        </tr>\n        } } @else { @for (item of paginatedData(); track item) {\n        <tr class=\"dt-tr\" [class.dt-tr-even]=\"striped() && $even\" [ngClass]=\"getRowClass(item)\">\n          @if (showSelection()) {\n          <td class=\"dt-td dt-td--selection\">\n            <input\n              type=\"checkbox\"\n              [checked]=\"isRowSelected(item)\"\n              (change)=\"toggleRowSelection(item)\"\n            />\n          </td>\n          } @if (actions().length > 0) {\n          <td\n            class=\"dt-td dt-td-actions\"\n            style=\"width: 1%; white-space: nowrap\"\n          >\n            <div class=\"flex gap-2 items-center dt-action-buttons\">\n              @for ( action of actions(); track action.action ) {\n              <button\n                (click)=\"onActionClick(action.action, item)\"\n                [class]=\"action.class || 'dt-button'\"\n              >\n                @if ( action.label.toLowerCase() === 'eliminar' ) {\n                <svg\n                  width=\"24px\"\n                  height=\"24px\"\n                  viewBox=\"0 0 24 24\"\n                  fill=\"none\"\n                  xmlns=\"http://www.w3.org/2000/svg\"\n                >\n                  <path\n                    d=\"M4 6H20M16 6L15.7294 5.18807C15.4671 4.40125 15.3359 4.00784 15.0927 3.71698C14.8779 3.46013 14.6021 3.26132 14.2905 3.13878C13.9376 3 13.523 3 12.6936 3H11.3064C10.477 3 10.0624 3 9.70951 3.13878C9.39792 3.26132 9.12208 3.46013 8.90729 3.71698C8.66405 4.00784 8.53292 4.40125 8.27064 5.18807L8 6M18 6V16.2C18 17.8802 18 18.7202 17.673 19.362C17.3854 19.9265 16.9265 20.3854 16.362 20.673C15.7202 21 14.8802 21 13.2 21H10.8C9.11984 21 8.27976 21 7.63803 20.673C7.07354 20.3854 6.6146 19.9265 6.32698 19.362C6 18.7202 6 17.8802 6 16.2V6M14 10V17M10 10V17\"\n                    stroke=\"#000000\"\n                    stroke-width=\"2\"\n                    stroke-linecap=\"round\"\n                    stroke-linejoin=\"round\"\n                  />\n                </svg>\n                } @if ( action.label.toLowerCase() === 'editar' ) {\n                <svg\n                  width=\"24px\"\n                  height=\"24px\"\n                  viewBox=\"0 0 24 24\"\n                  xmlns=\"http://www.w3.org/2000/svg\"\n                >\n                  <g id=\"Complete\">\n                    <g id=\"edit\">\n                      <g>\n                        <path\n                          d=\"M20,16v4a2,2,0,0,1-2,2H4a2,2,0,0,1-2-2V6A2,2,0,0,1,4,4H8\"\n                          fill=\"none\"\n                          stroke=\"#000000\"\n                          stroke-linecap=\"round\"\n                          stroke-linejoin=\"round\"\n                          stroke-width=\"2\"\n                        />\n\n                        <polygon\n                          fill=\"none\"\n                          points=\"12.5 15.8 22 6.2 17.8 2 8.3 11.5 8 16 12.5 15.8\"\n                          stroke=\"#000000\"\n                          stroke-linecap=\"round\"\n                          stroke-linejoin=\"round\"\n                          stroke-width=\"2\"\n                        />\n                      </g>\n                    </g>\n                  </g>\n                </svg>\n                }\n              </button>\n              }\n            </div>\n          </td>\n          } @for (column of displayColumns(); track column.key) {\n          <td class=\"dt-td\" [style.width]=\"column.width\">\n            @if (customCellTemplates[column.key]) {\n            <ng-container\n              [ngTemplateOutlet]=\"customCellTemplates[column.key]\"\n              [ngTemplateOutletContext]=\"{\n                                            $implicit: item,\n                                        }\"\n            ></ng-container>\n            } @else { @switch (column.type) { @case ('currency') {\n            <span>{{ getItemValue(item, column.key) | currency : \"EUR\" }}</span>\n            } @case ('string') {\n            <span>{{ getItemValue(item, column.key) }}</span>\n            } @case ('date') {\n            <span>{{\n              getItemValue(item, column.key) | date : \"dd/MM/yyyy\"\n            }}</span>\n            } @case ('datetime') {\n            <span>{{\n              getItemValue(item, column.key) | date : \"dd/MM/yyyy HH:mm:ss\"\n            }}</span>\n            } @case ('boolean') {\n            <span\n              class=\"px-2 py-1 text-xs font-semibold leading-tight rounded-full\"\n              [class]=\"\n                getItemValue(item, column.key)\n                  ? 'bg-green-300 text-green-700'\n                  : 'bg-red-300 text-red-700'\n              \"\n            >\n              {{ getItemValue(item, column.key) ? \"Sí\" : \"No\" }}\n            </span>\n            } @case ('badge') {\n            <span class=\"dt-badge\" [class]=\"getBadgeClass(column, item)\">\n              {{ getBadgeLabel(column, item) }}\n            </span>\n            } @case ('select') {\n            <span>{{ getSelectOptionLabel(column, item) }}</span>\n            } } }\n          </td>\n          }\n        </tr>\n        } @empty {\n        <tr class=\"dt-tr\">\n          <td\n            class=\"dt-td dt-td-empty\"\n            [attr.colspan]=\"\n              displayColumns().length +\n              (actions().length > 0 ? 1 : 0) +\n              (showSelection() ? 1 : 0)\n            \"\n          >\n            No hay datos para mostrar\n          </td>\n        </tr>\n        } }\n      </tbody>\n    </table>\n  </div>\n\n  <!-- Paginator -->\n  @if (pagination()) {\n  <div class=\"dt-paginator\">\n    <div class=\"dt-pagination-info\">\n      <div class=\"dt-page-size-selector\">\n        <span>Items por página:</span>\n        <select [ngModel]=\"_pageSize()\" (change)=\"onPageSizeChange($event)\">\n          @for (size of pageSizeOptions(); track size) {\n          <option [value]=\"size\">{{ size }}</option>\n          }\n        </select>\n      </div>\n\n      <span>\n        Mostrando {{ startItem() }} a {{ endItem() }} de un total de\n        {{ totalItemsDisplay() }} items\n      </span>\n    </div>\n    @if (totalPages() > 1) {\n    <div class=\"dt-pagination-controls\">\n      <div class=\"dt-paginator-navigation\">\n        <button\n          class=\"dt-paginator-button\"\n          (click)=\"previousPage()\"\n          [disabled]=\"currentPage() === 1\"\n        >\n          <svg viewBox=\"0 0 24 24\">\n            <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\" />\n          </svg>\n        </button>\n\n        <!-- Lógica de botones de página -->\n        @for (page of getPages(); track page) { @if (page === -1) {\n        <span class=\"dt-paginator-ellipsis\">...</span>\n        } @else {\n        <button\n          class=\"dt-paginator-page-button\"\n          [class.dt-paginator-page-button-active]=\"page === currentPage()\"\n          (click)=\"goToPage(page)\"\n        >\n          {{ page }}\n        </button>\n        } }\n\n        <button\n          class=\"dt-paginator-button\"\n          (click)=\"nextPage()\"\n          [disabled]=\"currentPage() === totalPages()\"\n        >\n          <svg viewBox=\"0 0 24 24\">\n            <path d=\"M8.59 16.59L10 18l6-6-6-6-1.41 1.41L13.17 12z\" />\n          </svg>\n        </button>\n      </div>\n    </div>\n    }\n  </div>\n  }\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lib-lztic-table',\n  imports: [],\n  template: `\n    <p>\n      lztic-table works!\n    </p>\n  `,\n  styles: ``\n})\nexport class LzticTable {\n\n}\n","/*\n * Public API Surface of lztic-table\n */\n\nexport * from './lib/data-table.component';\nexport * from './lib/cell-template.directive';\nexport * from './lib/lztic-table';\nexport * from './lib/lztic-table.token';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}