{"version":3,"file":"bootkit-ng1-components-table.mjs","sources":["../../../projects/ng1/components/table/table-column.directive.ts","../../../projects/ng1/components/table/table-detail-row.directive.ts","../../../projects/ng1/components/table/table.component.ts","../../../projects/ng1/components/table/table.component.html","../../../projects/ng1/components/table/table.module.ts","../../../projects/ng1/components/table/bootkit-ng1-components-table.ts"],"sourcesContent":["import { booleanAttribute, computed, ContentChild, Directive, EnvironmentInjector, inject, input, model, OnInit, signal, TemplateRef } from '@angular/core';\nimport { TableColumnType, TableColumnFilterType } from './types';\nimport { defaultFormatter, objectFormatterAttribute } from '@bootkit/ng1/localization';\nimport { DataSource, dataSourceAttribute, DataSourceLike } from '@bootkit/ng1/data';\nimport { defaultEqualityComparer, defaultValueWriter, equalityComparerAttribute, valueWriterAttribute } from '@bootkit/ng1/common';\n\n/**\n * Directive for defining a column in the ng0-table component.\n * This directive is used to specify the configuration of each column, such as the field to bind to, the title, formatting options, filtering options, and sorting options.\n */\n@Directive({\n  selector: 'ng1-table-col',\n  standalone: true,\n})\nexport class TableColumnDirective implements OnInit {\n  private readonly _injector = inject(EnvironmentInjector);\n\n  /**\n   * The field in the data source to bind to. If not set, the column will not display any data.\n   * @deprecated Use formatBy input.\n   */\n  public readonly field = input<string>();\n\n  /**\n   * A fromatter to convert each item to a string for display.\n   * This can be a function, a string (field name), or an array of formatters.\n   * If not set, the default formatter will be used, which simply calls toString() on the value.\n   */\n  public readonly formatBy = input(defaultFormatter, {\n    transform: objectFormatterAttribute(this._injector)\n  });\n\n  /**\n   * The title of the column. This will be displayed in the header row.\n   */\n  public readonly title = input<string>();\n\n  /**\n   * Text to display in the cell if the value is null or undefined.\n   */\n  public readonly emptyCell = input<string>();\n\n  /**\n   * Type of the table cell.\n   * @deprecated The `type` input is no longer used for formatting. Use `formatBy` instead.\n   */\n  public readonly type = input<TableColumnType>('text');\n\n  /**\n   * CSS class(es) to apply to the table cell.\n   */\n  public readonly cellClass = input<string | string[] | { [klass: string]: any; } | null>();\n\n  /** \n   * @deprecated Use `cellClass` instead.\n   */\n  public readonly bold = input(false, { transform: booleanAttribute });\n\n  /** \n   * @deprecated Use `cellClass` instead.\n   */\n  public readonly shrink = input(false, { transform: booleanAttribute });\n\n  /**\n   * If true, the column will support filtering.\n   */\n  public readonly filterable = input(false, { transform: booleanAttribute });\n\n  /**\n   * The type of filter to show in the column header when filtering is enabled. \n   * This determines the UI of the filter input.\n   */\n  public readonly filterType = input<TableColumnFilterType>('text');\n\n  /**\n   * The data source to use for filtering.\n   * This is used when the filterType is 'select' to populate the dropdown options.\n   */\n  public readonly filterItems = input<DataSource<any>, DataSourceLike<any>>(undefined, {\n    transform: v => dataSourceAttribute(v)\n  });\n\n  /**\n   * A formatter to convert each filter item to a string for display in the filter dropdown.\n   * This is used when the filterType is 'select' to display the options in the dropdown. It can be a function, a string (field name), or an array of formatters.\n   * If not set, the default formatter will be used, which simply calls toString() on the value.\n   */\n  public readonly filterFormatBy = input(defaultFormatter, {\n    transform: objectFormatterAttribute(this._injector)\n  });\n\n  /**\n   * A function to compare filter items for selection. \n   * This is used when the filterType is 'select' to determine which item is selected based on the current filterValue.\n   * If not set, the default equality comparer will be used, which compares values using strict equality (===).\n   */\n  public readonly filterCompareBy = input(defaultEqualityComparer, {\n    transform: equalityComparerAttribute\n  });\n\n\n  /**\n   * A function to write the filter value back to the model when using select filter type.\n   * This is used when the filterType is 'select' to convert the selected item from the dropdown back to the value that should be set as filterValue.\n   * If not set, the default value writer will be used, which simply returns the selected item as is.\n   */\n  public readonly filterWriteBy = input(defaultValueWriter, {\n    transform: valueWriterAttribute\n  });\n\n\n  /**\n   * The name of the filter to use for this column.\n   * This is used when grid is creating a DataRequest object to send to the data source.\n   */\n  public readonly filterName = input<string>();\n\n  /**\n   * The current filter value of the column.\n   */\n  public readonly filterValue = model<any>();\n\n\n  /**\n   * The current filter operator of the column.\n   */\n  public readonly filterOperator = model<string>();\n\n  /**\n   * The list of filter operators to show in the filter dropdown. If not set, a default list will be used based on the column type.\n   */\n  public readonly filterOperators = input<string[]>();\n\n  /**\n   * If true, the filter operators dropdown will be shown.\n   */\n  public readonly showFilterOperators = signal(false);\n\n  /**\n   * The name of the field in the data source. If not set, the `field` property will be used.\n   * @deprecated Use FilterName for filtering and FormatBy for display instead.\n   */\n  public readonly fieldName = input<string>();\n\n  /**\n   * If true, the column will support sorting.\n   */\n  public readonly sortable = input(false, { transform: booleanAttribute });\n\n  /**\n   * The current sort direction of the column.\n   */\n  public readonly sortDirection = model<'none' | 'asc' | 'desc'>('none');\n\n  @ContentChild(TemplateRef) public readonly template?: TemplateRef<any>;\n\n  constructor() {\n  }\n\n  ngOnInit(): void {\n    if (this.filterOperator() == undefined) {\n      const type = this.filterType() || this.type();\n      this.filterOperator.set(type == 'text' ? 'contains' : 'eq');\n    }\n  }\n\n  /**\n   * @private \n   */\n  public getFilterOperators() {\n    let op = this.filterOperators();\n    if (op && op.length > 0)\n      return op;\n\n    let type = this.filterType() || this.type();\n    if (type == 'text') {\n      return ['contains', 'startsWith', 'endsWith', 'eq', 'ne']\n    } else {\n      return ['eq', 'ne', 'gt', 'gte', 'lt', 'lte',]\n    }\n  }\n\n  /**\n   * Toggle the sort direction of the column.\n   * @returns void\n   */\n  public toggleSortDirection(): void {\n    if (!this.sortable()) {\n      return;\n    }\n\n    let dir = this.sortDirection();\n    if (dir === 'none') {\n      this.sortDirection.set('asc');\n    } else if (dir === 'asc') {\n      this.sortDirection.set('desc');\n    } else {\n      this.sortDirection.set('none');\n    }\n  }\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\n\n@Directive({\n  selector: '[ng0-table-detail-row]',\n  standalone: true,\n})\nexport class TableDetailRowDirective {\n  @Input() showCallback?: (row: any) => boolean;\n\n  constructor(public readonly templateRef: TemplateRef<any>) {\n  }\n}\n","import { AfterContentInit, booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, ContentChild, ContentChildren, DestroyRef, HostBinding, inject, input, model, numberAttribute, OnDestroy, QueryList, signal } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { TableColumnDirective } from './table-column.directive';\nimport { TableDetailRowDirective } from './table-detail-row.directive';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, NgModel } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { formatString } from '@bootkit/ng1/common';\nimport { LocalizationModule, LocalizationService, TableComponentPagingFormatter } from '@bootkit/ng1/localization';\nimport { DataRequest, DataRequestFilter, DataRequestPage, DataRequestSort, DataResult, DataSource, dataSourceAttribute, DataSourceLike } from '@bootkit/ng1/data';\nimport { PaginationComponent } from '@bootkit/ng1/components/pagination';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { NumberDirective } from '@bootkit/ng1/form';\nimport { ItemSelectEvent, SelectComponent } from '@bootkit/ng1/components/select';\nimport { Filter1Icon } from '@bootkit/ng1/icons';\n\n/**\n * A generic table component that can display data in a tabular format.\n * It supports features like pagination, sorting, filtering, and row details.\n * It can be used with any data source that implements the DataSource interface.\n */\n@Component({\n  selector: 'ng1-table',\n  exportAs: 'ng1Table',\n  templateUrl: './table.component.html',\n  styleUrls: ['./table.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    LocalizationModule,\n    PaginationComponent,\n    NumberDirective,\n    OverlayModule,\n    SelectComponent,\n    Filter1Icon\n  ]\n})\nexport class TableComponent implements AfterContentInit, OnDestroy {\n  protected readonly _ls = inject(LocalizationService);\n  private readonly _destroyRef = inject(DestroyRef);\n  protected _changeDetectorRef = inject(ChangeDetectorRef);\n\n  private _changeSubscription?: Subscription;\n\n  @ContentChildren(TableColumnDirective)\n  protected _columns!: QueryList<TableColumnDirective>;\n\n  @ContentChild(TableDetailRowDirective)\n  protected _detailRow?: TableDetailRowDirective;\n\n  protected readonly _dataResult = signal<DataResult | undefined>(undefined);\n  protected readonly _error = signal(undefined);\n  protected _rowStates = new Map<any, { expanded: boolean }>();\n  protected _formatString = formatString;\n  protected _pagingFormatter!: TableComponentPagingFormatter;\n\n\n  /**\n   * The data source for the table.\n   * This can be an array of data, a function that returns an observable of data,\n   * or an instance of DataSource.\n   */\n  public readonly source = input.required<DataSource<any>, DataSourceLike<any>>({ transform: dataSourceAttribute });\n\n  /**\n   * If true, the table will automatically load data when initialized.\n   * This is useful for tables that need to display data immediately without user interaction.\n   */\n  public readonly autoLoad = input(true, { transform: booleanAttribute });\n\n  /**\n   * If true, the table will show row numbers.\n   * This will add a column to the left of the table with the row numbers.\n   */\n  public readonly showRowNumbers = input(false, { transform: booleanAttribute });\n\n  /** \n   * If true, the table will show the header row.\n   */\n  public readonly showHeader = input(true, { transform: booleanAttribute });\n\n  /**\n   * If true, the table will support pagination.\n   */\n  public readonly pageable = input(false, { transform: booleanAttribute });\n\n  /**\n   * The currently selected page in the table.\n   * @default 0\n   */\n  public readonly pageIndex = model(0);\n\n  /**\n   * The number of records to display per page.\n   * @default 10\n   */\n  public readonly pageSize = model(10);\n\n  /**\n   * Maximum number of visible pages in the pagination controls.\n   * @default 10\n   */\n  public readonly maxVisiblePages = input(10, { transform: numberAttribute });\n\n  /**\n   * If true, the table will show pagination controls at the bottom.\n   * This will allow users to navigate between pages of data.\n   * @default true\n   */\n  public readonly showPagingControls = input(true, { transform: booleanAttribute });\n\n  /**\n   * Whether to show the first and last buttons in the pagination controls.\n   * @default true\n   */\n  public readonly showFirstLastButtons = input(false, { transform: booleanAttribute });\n\n  /**\n   * Whetheer to show the next and previous buttons in the pagination controls.\n   * @default true\n   */\n  public readonly showNextPreviousButtons = input(false, { transform: booleanAttribute });\n\n  /**\n   * Array of page size options to display in the page size selector.\n   * If not provided, the default page size options will be used.\n   * @default true\n   */\n  public readonly pageSizeOptions = input<number[] | undefined>([10, 25, 50, 100]);\n\n  /**\n   * Whether to show paging info at the bottom of the table.\n   * This will show the number of records displayed and total records.\n   * @default true\n   */\n  public readonly showPagingInfo = input(true, { transform: booleanAttribute });\n\n  /**\n   * If true, the table will support sorting.\n   * This will add a sort icon to each column header.\n   */\n  public readonly sortable = input(true, { transform: booleanAttribute });\n\n  /**\n   * The CSS class to apply to the internal table element.\n   * This can be used to apply custom styles to the table.\n   */\n  public readonly tableClass = input<string | string[]>();\n\n  /**\n   * The CSS class to apply to the header element.\n   */\n  public readonly headerClass = input<string>();\n\n  /**\n   * The caption of the table.\n   */\n  public readonly caption = input<string>();\n\n  /**\n   * The height of the table in pixels.\n   * This can be used to set a fixed height for the table.\n   */\n  public readonly height = input<number>();\n\n  /**\n   * If true, the table will support filtering.\n   * This will add a filter input to each column header.\n   */\n  public readonly filterable = input(true, { transform: booleanAttribute });\n\n  /**\n   * The indicator to show while the table is loading data for the first time.\n   */\n  public readonly loadingIndicator = input<'none' | 'simple' | 'spinner'>('spinner');\n\n  /** If true, the table will show a loading cover while data is being loaded.\n   * This can be used to prevent user interaction with the table while loading.\n   * This cover is not displayed when the table is loading for the first time.\n   * Instead, the table will show a loading based on loadingIndicator settings.\n   */\n  public readonly loadingCover = input<'none' | 'simple' | 'spinner'>('spinner');\n\n  ngAfterContentInit(): void {\n    const locale = this._ls.get();\n    this._pagingFormatter = locale?.definition.components?.table?.pagingInfo ??\n      ((o) => `Showing ${o.firstRecord}-${o.lastRecord} of ${o.totalRecords} records`);\n\n    // this._changeSubscription = this.dataSource().change.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(result => {\n    //   this.reload();\n    // });\n\n    if (this.autoLoad()) {\n      this.load();\n    }\n  }\n\n  /**\n   * Manually triggers a refresh of the table. This can be used to update the table's display after making changes to the data or state.\n   * It will mark the component for check, which will cause Angular to re-render the component and update the displayed data.\n   */\n  public refresh(): void {\n    this._changeDetectorRef.markForCheck();\n  }\n\n  /**\n   * Loads data from the data source based on the current state of the table (pagination, sorting, filtering).\n   * This method can be called manually to refresh the data in the table.\n   * It will construct a DataRequest object based on the current pagination, sorting, and filtering settings,\n   * and then call the load method of the data source with that request.\n   */\n  public load(pageIndex?: number) {\n    let filters: DataRequestFilter[] = [];\n    let page: DataRequestPage | undefined;\n    let sort: DataRequestSort | undefined;\n\n    if (this.filterable()) {\n      this._columns.forEach(col => {\n        if (col.filterable() && col.filterName()) {\n          const filterName = col.filterName() || col.fieldName() || col.field();\n          filters.push({ field: filterName, value: col.filterValue(), operator: col.filterOperator() });\n        }\n      });\n    }\n\n    if (this.pageable()) {\n      if (pageIndex != undefined) {\n        this.pageIndex.set(pageIndex);\n      }\n\n      page = {\n        index: this.pageIndex(),\n        size: this.pageSize(),\n      };\n    }\n\n    if (this.sortable()) {\n      let col = this._columns.find(c => c.sortable() && c.sortDirection() != 'none' && (c.field() != '' || c.fieldName() != ''));\n      if (col) {\n        sort = {\n          field: col.fieldName() ?? col.field()!,\n          asc: col.sortDirection() === 'asc'\n        }\n      }\n    }\n\n    var request = new DataRequest({ page, filters, sort, select: [], computeTotal: true });\n\n    this.source().load(request)\n      .pipe(takeUntilDestroyed(this._destroyRef)).subscribe({\n        next: result => {\n          this._dataResult.set(result);\n          this._error.set(undefined);\n        }, error: err => {\n          this._error.set(err);\n        }\n      });\n  }\n\n  /**\n   * Determines if the table is currently loading data.\n   */\n  @HostBinding('class.ng0-loading')\n  public get isLoading() {\n    return this.source().isLoading;\n  }\n\n  protected _getCellValue(row: any, col: TableColumnDirective) {\n    var subFields = col.field()!.split('.');\n    let value = row[subFields[0]];\n    for (let i = 1; i < subFields.length; i++) {\n      if (value == null) break;\n      value = value[subFields[i]];\n    }\n\n    return value;\n  }\n\n  protected _onPageChange(pageIndex: number) {\n    this.load(pageIndex);\n  }\n\n  protected _onToggleRowDetailClick(row: any) {\n    var state = this._rowStates.get(row)\n    if (!state) {\n      this._rowStates.set(row, { expanded: true });\n    } else {\n      state.expanded = !state.expanded;\n    }\n  }\n\n  protected isRowExpanded(row: any) {\n    var state = this._rowStates.get(row)\n    return state == undefined ? false : state.expanded;\n  }\n\n  protected _onToggleFilterOperator(col: TableColumnDirective) {\n    if (col.showFilterOperators()) {\n      col.showFilterOperators.set(false)\n    } else {\n      this._columns.forEach(x => x.showFilterOperators.set(false));\n      col.showFilterOperators.set(true)\n    }\n  }\n\n  protected _onSelectFilterOperator(col: TableColumnDirective, filterOperator: string) {\n    col.filterOperator.set(filterOperator);\n    this._columns.forEach(x => x.showFilterOperators.set(false));\n    this.load(0);\n  }\n\n  _onPageSizeOptionsItemSelect(e: ItemSelectEvent) {\n    this.pageSize.set(e.value);\n    this.load(0);\n  }\n\n  _onColumnHeaderClick(col: TableColumnDirective) {\n    if (this.sortable() && col.sortable()) {\n      this._columns.filter(c => c !== col).forEach(c => c.sortDirection.set('none'));\n      col.toggleSortDirection();\n      this.load();\n    }\n  }\n\n  protected _hasFilterableColumns = computed(() => {\n    const filterable = this.filterable(); // Track\n    const filterableColumns = this._columns.some(c => c.filterable()); // Track\n    return filterable && filterableColumns;\n  })\n\n  ngOnDestroy(): void {\n    this._changeSubscription?.unsubscribe();\n  }\n}\n","@let $dataResult = _dataResult();\n@let $pageable = pageable();\n@let $pageIndex = pageIndex();\n@let $pageSize = pageSize();\n@let $data = $dataResult?.data;\n@let $anyRecords = $data && $data.length > 0;\n@let $totalRecordsCount = $dataResult?.total;\n@let $firstRecordIndex = $pageable ? ($pageSize * $pageIndex) : 0;\n@let $lastRecordIndex = $data ? $firstRecordIndex + $data.length - 1 : 1;\n@let $isFirstLoad = $dataResult == undefined;\n@let $columnsCount = _columns.length + (showRowNumbers() ? 1 : 0);\n@let $tableLocale = _ls.get()?.definition?.components?.table;\n\n<div class=\"table-responsive\" [style.height]=\"height()\" [class.table-scrollable]=\"height()! > 0\">\n    <table class=\"table\" [ngClass]=\"tableClass()\">\n        @if (caption()) {\n            <caption>\n                {{caption()}}\n            </caption>\n        }\n\n        @if (showHeader()) {\n            <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n        }\n\n        @if (filterable() && _hasFilterableColumns()) {\n            <ng-container *ngTemplateOutlet=\"filtersTemplate\"></ng-container>\n        }\n\n        <tbody>\n            @if (isLoading() && $isFirstLoad && loadingIndicator()) {\n                <tr class=\"ng1-table-loading-row\">\n                    <td [attr.colspan]=\"$columnsCount\">\n                        @switch (loadingIndicator()) {\n                            @case ('spinner') {\n                                <div class=\"text-center\">\n                                    <div class=\"spinner-border\" role=\"status\"></div>\n                                </div>\n                            }\n                        }\n                    </td>\n                </tr>\n            } @else {\n                @if ($data) {\n                    @if ($data.length > 0) {\n                        <ng-container *ngTemplateOutlet=\"dataRowsTemplate\" />\n                    } @else {\n                        <tr class=\"ng1-table-no-records-row\">\n                            <td [attr.colSpan]=\"$columnsCount\" class=\"text-center p-2\">\n                                {{ $tableLocale?.noRecords ?? 'No Records.' }}\n                            </td>\n                        </tr>\n                    }\n                } @else if (_error()) {\n                    <ng-container *ngTemplateOutlet=\"nowDataTemplate\"></ng-container>\n                }\n            }\n        </tbody>\n    </table>\n</div>\n\n<div class=\"ng1-table-footer d-flex align-items-baseline\">\n    <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n</div>\n\n@if (isLoading() && !$isFirstLoad && loadingCover()) {\n    <div class=\"ng1-table-loading-cover text-center\">\n        @if (loadingCover() == 'spinner') {\n            <div class=\"spinner-border\" role=\"status\"></div>\n        }\n    </div>\n}\n\n<ng-template #filtersTemplate>\n    <thead>\n        <tr>\n            @if (_detailRow) {\n                <th></th>\n            }\n\n            @if (showRowNumbers()) {\n                <th></th>\n            }\n\n            @for (col of _columns; track $index) {\n                <th>\n                    @if (col.filterable()) {\n                        @if (col.filterType()) {\n                            <div class=\"input-group \">\n                                @switch (col.filterType()) {\n                                    @case ('text') {\n                                        <input\n                                            [name]=\"'filter-' + col.filterName()\"\n                                            type=\"search\"\n                                            [maxlength]=\"50\"\n                                            class=\"form-control form-control-sm\"\n                                            [(ngModel)]=\"col.filterValue\"\n                                            (keydown.enter)=\"load(0)\" />\n                                    }\n                                    @case ('number') {\n                                        <input\n                                            [name]=\"'datatablecol-' + col.filterName()\"\n                                            type=\"search\"\n                                            ng1Number\n                                            class=\"form-control form-control-sm\"\n                                            [(ngModel)]=\"col.filterValue\"\n                                            (keydown.enter)=\"load(0)\" />\n                                    }\n                                    @case ('select') {\n                                        <ng1-select\n                                            [name]=\"'datatablecol-' + col.filterName()\"\n                                            [source]=\"col.filterItems()\"\n                                            [formatBy]=\"col.filterFormatBy()\"\n                                            [compareBy]=\"col.filterCompareBy()\"\n                                            [writeBy]=\"col.filterWriteBy()\"\n                                            [(ngModel)]=\"col.filterValue\"\n                                            (itemSelect)=\"load(0)\">\n                                        </ng1-select>\n                                    }\n                                }\n\n                                <button\n                                    class=\"btn btn-outline-light\"\n                                    style=\"border-color: var(--bs-border-color);\"\n                                    cdkOverlayOrigin\n                                    #trigger=\"cdkOverlayOrigin\"\n                                    (click)=\"_onToggleFilterOperator(col)\">\n                                    <ng1-icon-filter1 />\n                                </button>\n                            </div>\n\n                            <ng-template\n                                cdkConnectedOverlay\n                                [cdkConnectedOverlayOrigin]=\"trigger\"\n                                [cdkConnectedOverlayOpen]=\"col.showFilterOperators()\"\n                                (overlayOutsideClick)=\"col.showFilterOperators.set(false)\"\n                                (detach)=\"col.showFilterOperators.set(false)\">\n                                <ul class=\"dropdown-menu show\" animate.enter=\"fade-in\">\n                                    @for (item of col.getFilterOperators(); track $index) {\n                                        <li>\n                                            <button\n                                                class=\"dropdown-item\"\n                                                [class.active]=\"item == col.filterOperator()\"\n                                                (click)=\"_onSelectFilterOperator(col, item)\">\n                                                {{_ls.get()?.definition?.data?.logicalOperators?.[item] ?? item }}\n                                            </button>\n                                        </li>\n                                    }\n                                </ul>\n                            </ng-template>\n                        } @else if (col.type()) {\n                            <!--  \n                            Deprecated bindings, to be removed in future versions.\n                            -->\n\n                            <div class=\"input-group \">\n                                @switch (col.type()) {\n                                    @case ('text') {\n                                        <input\n                                            [name]=\"'filter-' + col.field\"\n                                            type=\"search\"\n                                            [maxlength]=\"50\"\n                                            class=\"form-control form-control-sm\"\n                                            [(ngModel)]=\"col.filterValue\"\n                                            (keydown.enter)=\"load(0)\" />\n                                    }\n                                    @case ('number') {\n                                        <input\n                                            [name]=\"'datatablecol-' + col.field\"\n                                            type=\"search\"\n                                            ng1Number\n                                            class=\"form-control form-control-sm\"\n                                            [(ngModel)]=\"col.filterValue\"\n                                            (keydown.enter)=\"load(0)\" />\n                                    }\n                                }\n\n                                <button\n                                    class=\"btn btn-outline-light\"\n                                    style=\"border-color: var(--bs-border-color);\"\n                                    cdkOverlayOrigin\n                                    #trigger2=\"cdkOverlayOrigin\"\n                                    (click)=\"_onToggleFilterOperator(col)\">\n                                    <ng1-icon-filter1 />\n                                </button>\n                            </div>\n\n                            <ng-template\n                                cdkConnectedOverlay\n                                [cdkConnectedOverlayOrigin]=\"trigger2\"\n                                [cdkConnectedOverlayOpen]=\"col.showFilterOperators()\"\n                                (overlayOutsideClick)=\"col.showFilterOperators.set(false)\"\n                                (detach)=\"col.showFilterOperators.set(false)\">\n                                <ul class=\"dropdown-menu show\" animate.enter=\"fade-in\">\n                                    @for (item of col.getFilterOperators(); track $index) {\n                                        <li>\n                                            <button\n                                                class=\"dropdown-item\"\n                                                [class.active]=\"item == col.filterOperator()\"\n                                                (click)=\"_onSelectFilterOperator(col, item)\">\n                                                {{_ls.get()?.definition?.data?.logicalOperators?.[item] ?? item }}\n                                            </button>\n                                        </li>\n                                    }\n                                </ul>\n                            </ng-template>\n                        }\n                    }\n                </th>\n            }\n        </tr>\n    </thead>\n</ng-template>\n\n<ng-template #headerTemplate>\n    <thead [ngClass]=\"headerClass()\">\n        <tr>\n            @if (_detailRow) {\n                <th></th>\n            }\n\n            @if (showRowNumbers()) {\n                <th class=\"row-number text-muted\">#</th>\n            }\n\n            @for (col of _columns; track $index) {\n                <th\n                    (click)=\"_onColumnHeaderClick(col)\"\n                    [class.sortable]=\"sortable() && col.sortable()\"\n                    [ngClass]=\"{ \n                        'sort-asc': col.sortDirection() == 'asc', \n                        'sort-desc': col.sortDirection() == 'desc',\n                        'sort-none': col.sortDirection() == 'none'\n                        }\">\n                    {{ col.title() }}\n\n                    @if (sortable() && col.sortable()) {\n                        <svg\n                            class=\"ng1-table-sort-icon\"\n                            width=\"24\"\n                            height=\"24\"\n                            viewBox=\"0 0 24 24\"\n                            fill=\"none\"\n                            xmlns=\"http://www.w3.org/2000/svg\">\n                            <path\n                                d=\"M12 7L12 16\"\n                                stroke=\"currentColor\"\n                                stroke-width=\"1\"\n                                stroke-linecap=\"round\"\n                                stroke-linejoin=\"round\" />\n                            <path\n                                d=\"M8 13L12 17L16 13\"\n                                stroke=\"currentColor\"\n                                stroke-width=\"2\"\n                                stroke-linecap=\"round\"\n                                stroke-linejoin=\"round\" />\n                        </svg>\n                    }\n                </th>\n            }\n        </tr>\n    </thead>\n</ng-template>\n\n<ng-template #dataRowsTemplate>\n    @for (row of $data; track $index) {\n        <tr [class.table-active]=\"isRowExpanded(row)\">\n            @if (_detailRow) {\n                <td class=\"detail-row-expander\">\n                    @if (_detailRow.showCallback == null || _detailRow.showCallback(row)) {\n                        <button class=\"btn\" (click)=\"_onToggleRowDetailClick(row)\">\n                            @if (isRowExpanded(row)) {\n                                <i class=\"far fa-minus\"></i>\n                            } @else {\n                                <i class=\"far fa-plus\"></i>\n                            }\n                        </button>\n                    }\n                </td>\n            }\n\n            @if (showRowNumbers()) {\n                <td class=\"ng1-table-row-number\">\n                    {{ $firstRecordIndex + $index + 1}}\n                </td>\n            }\n\n            @for (col of _columns; track $index) {\n                <td\n                    [ngClass]=\"col.cellClass()\"\n                    [class.shrinked]=\"col.shrink()\"\n                    [class.fw-bold]=\"col.bold()\">\n                    @if (col.template) {\n                        <ng-container *ngTemplateOutlet=\"col.template; context: { $implicit: row }\">\n                        </ng-container>\n                    } @else if (col.field()) {\n                        @let cellValue = _getCellValue(row, col);\n\n                        @if (\n                            (cellValue === null || cellValue === undefined) && col.emptyCell()\n                        ) {\n                            {{ col.emptyCell() }}\n                        } @else {\n                            @if (col.type()) {\n                                @let type = $any(col.type());\n\n                                @if (type == \"date\") {\n                                    {{ cellValue | ng1Date }}\n                                } @else if (type == \"number\") {\n                                    {{ cellValue | number }}\n                                } @else if (type == \"currency\") {\n                                    {{ cellValue | currency }}\n                                } @else if (type.enum) {\n                                    {{ cellValue | ng1TranslateEnum: type.enum.name : type.enum.fallback }}\n                                } @else if (type.boolean || type == \"boolean\") {\n                                    {{ cellValue | ng1LocalizeBool: type.boolean.false ?? \"false\" : type.boolean.false ?? \"true\" }}\n                                } @else {\n                                    {{ cellValue }}\n                                }\n                            }\n                        }\n                    } @else if (col.formatBy()) {\n                        {{col.formatBy()(row)}}\n                    }\n                </td>\n            }\n        </tr>\n\n        @if (_detailRow && isRowExpanded(row)) {\n            <tr class=\"detail-row\">\n                <td\n                    [attr.colspan]=\"_columns.length + (showRowNumbers() ? 1 : 0) + 1\"\n                    class=\"ps-2 pb-4\">\n                    <ng-container\n                        *ngTemplateOutlet=\"_detailRow.templateRef; context: { $implicit: row }\"></ng-container>\n                </td>\n            </tr>\n        }\n    }\n</ng-template>\n\n<ng-template #footerTemplate>\n    @if ($pageable && showPagingControls() && $anyRecords && $totalRecordsCount! > 0) {\n        <div class=\"ng1-table-pagination me-2\">\n            <ng1-pagination\n                class=\"mb-0 d-inline-block\"\n                [showFirstLastButtons]=\"showFirstLastButtons()\"\n                [showNextPreviousButtons]=\"showNextPreviousButtons()\"\n                [totalRecords]=\"$totalRecordsCount!\"\n                [pageSize]=\"pageSize()\"\n                [selectedPage]=\"pageIndex()\"\n                (itemClick)=\"_onPageChange($event)\"\n                [maxVisiblePages]=\"maxVisiblePages()\">\n                <ng-container ngProjectAs=\"first\">\n                    <ng-content select=\"paging-first\">\n                        {{ \"first\" | ng1Translate }}\n                    </ng-content>\n                </ng-container>\n\n                <ng-container ngProjectAs=\"last\">\n                    <ng-content select=\"paging-last\">\n                        {{ \"last\" | ng1Translate }}\n                    </ng-content>\n                </ng-container>\n\n                <ng-container ngProjectAs=\"next\">\n                    <ng-content select=\"paging-next\">\n                        {{ \"next\" | ng1Translate }}\n                    </ng-content>\n                </ng-container>\n\n                <ng-container ngProjectAs=\"previous\">\n                    <ng-content select=\"paging-previous\">\n                        {{ \"previous\" | ng1Translate }}\n                    </ng-content>\n                </ng-container>\n            </ng1-pagination>\n        </div>\n\n        @if (pageSizeOptions()) {\n            <div class=\"ng1-table-paging-options\">\n                <ng1-select\n                    name=\"pageSize\"\n                    [source]=\"pageSizeOptions()\"\n                    [(ngModel)]=\"pageSize\"\n                    (itemSelect)=\"_onPageSizeOptionsItemSelect($event)\"></ng1-select>\n                <!-- <select name=\"pageSizeOptions\" class=\"form-select w-auto d-inline-block\">\n      <option [ngValue]=\"10\" selected>10</option>\n    </select> -->\n            </div>\n        }\n\n        @if (showPagingInfo()) {\n            <div class=\"ng1-table-paging-info ms-auto\">\n                <ng-content select=\"paging-info\">\n                    {{\n      _pagingFormatter({firstRecord: $firstRecordIndex + 1, lastRecord: $lastRecordIndex + 1, totalRecords:\n      $totalRecordsCount!,\n      currentPage: $pageIndex!})\n                    }}\n                </ng-content>\n            </div>\n        }\n    }\n</ng-template>\n\n<ng-template #nowDataTemplate>\n    <tr class=\"ng1-table-error-row\">\n        <td [attr.colSpan]=\"$columnsCount\" class=\"p-2\">\n            <div class=\"d-flex align-items-baseline\">\n                <span>{{ $tableLocale?.loadError ?? 'Error loading data.' }} </span>\n                <button (click)=\"load()\" class=\"btn btn-warning ms-auto\">\n                    {{ \"retry\" | ng1Translate }}\n                </button>\n            </div>\n        </td>\n    </tr>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { TableColumnDirective } from './table-column.directive';\nimport { TableComponent } from './table.component';\nimport { TableDetailRowDirective } from './table-detail-row.directive';\n\n@NgModule({\n    imports: [\n        TableComponent,\n        TableColumnDirective,\n        TableDetailRowDirective,\n    ],\n    exports: [\n        TableComponent,\n        TableColumnDirective,\n        TableDetailRowDirective\n    ],\n})\nexport class TableModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}