{"version":3,"file":"rohansahana-dynamic-table.mjs","sources":["../../../projects/dynamic-table/src/lib/services/dynamic-table-state.service.ts","../../../projects/dynamic-table/src/lib/directives/column-resize.directive.ts","../../../projects/dynamic-table/src/lib/directives/row-resize.directive.ts","../../../projects/dynamic-table/src/lib/plugins/dynamic-table.tokens.ts","../../../projects/dynamic-table/src/lib/components/dynamic-table/dynamic-table.component.ts","../../../projects/dynamic-table/src/lib/components/dynamic-table/dynamic-table.component.html","../../../projects/dynamic-table/src/public-api.ts","../../../projects/dynamic-table/src/rohansahana-dynamic-table.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { DynamicTableState } from '../models/dynamic-table.models';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class DynamicTableStateService {\r\n    private storage = typeof window !== 'undefined' ? window.localStorage : undefined;\r\n    private cache = new Map<string, BehaviorSubject<DynamicTableState>>();\r\n\r\n    getState(key: string): BehaviorSubject<DynamicTableState> {\r\n        if (!this.cache.has(key)) {\r\n            const restored = this.restore(key);\r\n            this.cache.set(key, new BehaviorSubject<DynamicTableState>(restored));\r\n        }\r\n        return this.cache.get(key)!;\r\n    }\r\n\r\n    updateState(key: string, partial: Partial<DynamicTableState>) {\r\n        const subject = this.getState(key);\r\n        const current = subject.value || {};\r\n        const next: DynamicTableState = { ...current, ...partial };\r\n        subject.next(next);\r\n        this.persist(key, next);\r\n    }\r\n\r\n    private persist(key: string, state: DynamicTableState) {\r\n        if (!this.storage) return;\r\n        try {\r\n            this.storage.setItem(this.makeKey(key), JSON.stringify(state));\r\n        } catch (e) {\r\n            // ignore quota errors\r\n        }\r\n    }\r\n\r\n    private restore(key: string): DynamicTableState {\r\n        if (!this.storage) return {};\r\n        try {\r\n            const raw = this.storage.getItem(this.makeKey(key));\r\n            return raw ? JSON.parse(raw) : {};\r\n        } catch {\r\n            return {};\r\n        }\r\n    }\r\n\r\n    private makeKey(key: string) {\r\n        return `dynTable:${key}`;\r\n    }\r\n}\r\n","import { Directive, ElementRef, EventEmitter, HostListener, Input, NgZone, OnDestroy, OnInit, Output, Renderer2 } from '@angular/core';\r\n\r\n@Directive({\r\n    selector: '[dtColumnResize]',\r\n    standalone: true\r\n})\r\nexport class ColumnResizeDirective implements OnInit, OnDestroy {\r\n    @Input('dtColumnResize') columnKey!: string;\r\n    @Input() minWidth = 40;\r\n    @Input() maxWidth?: number;\r\n    @Output() resized = new EventEmitter<{ key: string; width: number }>();\r\n\r\n    private startX = 0;\r\n    private startWidth = 0;\r\n    private pressing = false;\r\n    private removeListeners: Array<() => void> = [];\r\n\r\n    constructor(private el: ElementRef<HTMLElement>, private renderer: Renderer2, private zone: NgZone) { }\r\n\r\n    ngOnInit(): void {\r\n        const handle = this.renderer.createElement('div');\r\n        this.renderer.addClass(handle, 'dt-resize-handle');\r\n        this.renderer.appendChild(this.el.nativeElement, handle);\r\n        this.renderer.setStyle(this.el.nativeElement, 'position', 'relative');\r\n        this.renderer.setStyle(handle, 'position', 'absolute');\r\n        this.renderer.setStyle(handle, 'top', '0');\r\n        this.renderer.setStyle(handle, 'right', '0');\r\n        this.renderer.setStyle(handle, 'width', '6px');\r\n        this.renderer.setStyle(handle, 'cursor', 'col-resize');\r\n        this.renderer.setStyle(handle, 'user-select', 'none');\r\n        this.renderer.setStyle(handle, 'height', '100%');\r\n        this.renderer.setStyle(handle, 'touch-action', 'none');\r\n        this.renderer.addClass(handle, 'dt-resize-grip');\r\n        this.zone.runOutsideAngular(() => {\r\n            const mousedown = this.renderer.listen(handle, 'pointerdown', (e: PointerEvent) => this.onPointerDown(e));\r\n            this.removeListeners.push(mousedown);\r\n        });\r\n    }\r\n\r\n    ngOnDestroy(): void {\r\n        this.removeListeners.forEach(fn => fn());\r\n    }\r\n\r\n    private onPointerDown(e: PointerEvent) {\r\n        e.preventDefault();\r\n        this.pressing = true;\r\n        this.startX = e.clientX;\r\n        this.startWidth = this.el.nativeElement.getBoundingClientRect().width;\r\n        const move = (ev: PointerEvent) => this.onPointerMove(ev);\r\n        const up = (ev: PointerEvent) => this.onPointerUp(ev, move, up);\r\n        window.addEventListener('pointermove', move, { passive: true });\r\n        window.addEventListener('pointerup', up, { passive: true, once: true });\r\n    }\r\n\r\n    private onPointerMove(e: PointerEvent) {\r\n        if (!this.pressing) return;\r\n        const dx = e.clientX - this.startX;\r\n        let width = this.startWidth + dx;\r\n        if (this.minWidth) width = Math.max(width, this.minWidth);\r\n        if (this.maxWidth) width = Math.min(width, this.maxWidth);\r\n        this.renderer.setStyle(this.el.nativeElement, 'width', `${width}px`);\r\n    }\r\n\r\n    private onPointerUp(e: PointerEvent, move: any, up: any) {\r\n        if (!this.pressing) return;\r\n        this.pressing = false;\r\n        window.removeEventListener('pointermove', move as any);\r\n        const finalWidth = this.el.nativeElement.getBoundingClientRect().width;\r\n        this.resized.emit({ key: this.columnKey, width: Math.round(finalWidth) });\r\n    }\r\n}\r\n","import { Directive, ElementRef, EventEmitter, Input, NgZone, OnDestroy, OnInit, Output, Renderer2 } from '@angular/core';\r\n\r\n@Directive({\r\n    selector: '[dtRowResize]',\r\n    standalone: true\r\n})\r\nexport class RowResizeDirective implements OnInit, OnDestroy {\r\n    @Input('dtRowResize') rowIndex!: number;\r\n    @Input() minHeight = 24;\r\n    @Input() maxHeight?: number;\r\n    @Output() resized = new EventEmitter<{ rowIndex: number; height: number }>();\r\n\r\n    private startY = 0;\r\n    private startH = 0;\r\n    private active = false;\r\n    private handle!: HTMLElement;\r\n\r\n    constructor(private el: ElementRef<HTMLElement>, private r: Renderer2, private zone: NgZone) { }\r\n\r\n    ngOnInit(): void {\r\n        this.handle = this.r.createElement('div');\r\n        this.r.addClass(this.handle, 'dt-row-resize-handle');\r\n        this.r.setStyle(this.handle, 'position', 'absolute');\r\n        this.r.setStyle(this.handle, 'bottom', '0');\r\n        this.r.setStyle(this.handle, 'left', '0');\r\n        this.r.setStyle(this.handle, 'right', '0');\r\n        this.r.setStyle(this.handle, 'height', '5px');\r\n        this.r.setStyle(this.handle, 'cursor', 'row-resize');\r\n        this.r.setStyle(this.handle, 'user-select', 'none');\r\n        this.r.setStyle(this.el.nativeElement, 'position', 'relative');\r\n        this.r.appendChild(this.el.nativeElement, this.handle);\r\n        this.zone.runOutsideAngular(() => {\r\n            this.handle.addEventListener('pointerdown', this.pointerDown, { passive: true });\r\n        });\r\n    }\r\n\r\n    ngOnDestroy(): void {\r\n        this.handle?.removeEventListener('pointerdown', this.pointerDown as any);\r\n        window.removeEventListener('pointermove', this.pointerMove as any);\r\n        window.removeEventListener('pointerup', this.pointerUp as any);\r\n    }\r\n\r\n    private pointerDown = (e: PointerEvent) => {\r\n        e.preventDefault();\r\n        this.active = true;\r\n        this.startY = e.clientY;\r\n        this.startH = this.el.nativeElement.getBoundingClientRect().height;\r\n        window.addEventListener('pointermove', this.pointerMove, { passive: true });\r\n        window.addEventListener('pointerup', this.pointerUp, { passive: true, once: true });\r\n    };\r\n\r\n    private pointerMove = (e: PointerEvent) => {\r\n        if (!this.active) return;\r\n        let h = this.startH + (e.clientY - this.startY);\r\n        if (this.minHeight) h = Math.max(h, this.minHeight);\r\n        if (this.maxHeight) h = Math.min(h, this.maxHeight);\r\n        this.r.setStyle(this.el.nativeElement, 'height', `${h}px`);\r\n    };\r\n\r\n    private pointerUp = () => {\r\n        if (!this.active) return;\r\n        this.active = false;\r\n        const finalH = this.el.nativeElement.getBoundingClientRect().height;\r\n        this.resized.emit({ rowIndex: this.rowIndex, height: Math.round(finalH) });\r\n    };\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\nimport { DynamicTablePlugin } from './dynamic-table.types';\r\n\r\nexport const DYNAMIC_TABLE_PLUGINS = new InjectionToken<DynamicTablePlugin[]>(\r\n    'DYNAMIC_TABLE_PLUGINS',\r\n    { factory: () => [] }\r\n);\r\n","import { AsyncPipe, CommonModule, NgTemplateOutlet } from '@angular/common';\r\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, effect, EventEmitter, HostBinding, Injector, Input, OnChanges, OnDestroy, Output, SimpleChanges, TemplateRef, TrackByFunction, ViewChild, ViewEncapsulation, signal } from '@angular/core';\r\nimport { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';\r\nimport { CdkDragDrop, DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { BehaviorSubject, combineLatest, isObservable, map, of, Subject, take, takeUntil, Observable } from 'rxjs';\r\nimport { ColumnResizeDirective } from '../../directives/column-resize.directive';\r\nimport { RowResizeDirective } from '../../directives/row-resize.directive';\r\nimport { DynamicTableColumn, DynamicTableExportOptions, DynamicTableFilterDescriptor, DynamicTableSortEvent, DynamicTableState, PaginationConfig, SortDirection, VirtualScrollConfig, RowAction } from '../../models/dynamic-table.models';\r\nimport { DynamicTableStateService } from '../../services/dynamic-table-state.service';\r\nimport { DYNAMIC_TABLE_PLUGINS } from '../../plugins/dynamic-table.tokens';\r\nimport { DynamicTablePlugin } from '../../plugins/dynamic-table.types';\r\n\r\n@Component({\r\n    selector: 'dynamic-table',\r\n    standalone: true,\r\n    imports: [CommonModule, ScrollingModule, DragDropModule, AsyncPipe, NgTemplateOutlet, ColumnResizeDirective, RowResizeDirective],\r\n    templateUrl: './dynamic-table.component.html',\r\n    styleUrls: ['./dynamic-table.component.scss'],\r\n    encapsulation: ViewEncapsulation.None,\r\n    changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DynamicTableComponent<T = any> implements OnChanges, AfterViewInit, OnDestroy {\r\n    // Core Inputs\r\n    @Input({ required: true }) columns: DynamicTableColumn<T>[] = [];\r\n    @Input() data: T[] | ReadonlyArray<T> | BehaviorSubject<T[]> | Observable<T[]> = [];\r\n    @Input() trackBy: TrackByFunction<T> = (i: number, row: any) => (row as any)?.id ?? i;\r\n    @Input() virtualScroll: boolean | Partial<VirtualScrollConfig> = true;\r\n    @Input() rowHeight = 48;\r\n    @Input() height: string | number = 400;\r\n    @Input() pagination: PaginationConfig | false = false;\r\n    @Input() sortMode: 'single' | 'multi' | 'none' = 'single';\r\n    @Input() serverSide = false; // external data slice control\r\n    @Input() filterable = false;\r\n    @Input() selectable: boolean | 'multi' = false;\r\n    @Input() dense = false;\r\n    @Input() stickyHeader = true;\r\n    @Input() theme: string = 'light';\r\n    @Input() stateKey?: string; // persisted state ID\r\n    @Input() searchPlaceholder = 'Search…';\r\n    @Input() rowActions: RowAction<T>[] = [];\r\n    @Input() enableColumnReorder = true;\r\n    @Input() enableColumnResize = true;\r\n    @Input() globalFilter = false;\r\n    @Input() expandable = true;\r\n    @Input() showFilterRow = true;\r\n    @Input() showColumnPanel = true;\r\n    @Input() adaptivePageSize = true;\r\n    @Input() pageSizeOptions: number[] = [10, 20, 50, 100];\r\n    @Input() plugins: DynamicTablePlugin<T>[] = [];\r\n\r\n    // Templates (projected)\r\n    @ContentChild('rowTemplate', { read: TemplateRef }) rowTemplate?: TemplateRef<any>;\r\n    @ContentChild('noRowsTemplate', { read: TemplateRef }) noRowsTemplate?: TemplateRef<any>;\r\n    @ContentChild('loadingTemplate', { read: TemplateRef }) loadingTemplate?: TemplateRef<any>;\r\n    @ContentChild('headerExtra', { read: TemplateRef }) headerExtra?: TemplateRef<any>;\r\n    @ContentChild('rowExpandedTemplate', { read: TemplateRef }) rowExpandedTemplate?: TemplateRef<any>;\r\n\r\n    @ViewChild(CdkVirtualScrollViewport) viewport?: CdkVirtualScrollViewport;\r\n\r\n    @Output() rowClick = new EventEmitter<T>();\r\n    @Output() selectionChange = new EventEmitter<T[]>();\r\n    @Output() sortChange = new EventEmitter<DynamicTableSortEvent>();\r\n    @Output() pageChange = new EventEmitter<PaginationConfig>();\r\n    @Output() filterChange = new EventEmitter<DynamicTableFilterDescriptor[]>();\r\n    @Output() columnResize = new EventEmitter<{ key: string; width: number }>();\r\n    @Output() columnReorder = new EventEmitter<string[]>();\r\n    @Output() stateChange = new EventEmitter<DynamicTableState>();\r\n\r\n    @HostBinding('class.dt-dense') get clsDense() { return this.dense; }\r\n    @HostBinding('class.dt-theme-dark') get clsDark() { return this.theme === 'dark'; }\r\n    @HostBinding('style.--dt-row-height.px') get cssRowHeight() { return this.rowHeight; }\r\n    @HostBinding('class.dt-sticky-header') get clsSticky() { return this.stickyHeader; }\r\n\r\n    private destroy$ = new Subject<void>();\r\n    private filterSubject = new BehaviorSubject<DynamicTableFilterDescriptor[]>([]);\r\n    private searchSubject = new BehaviorSubject<string>('');\r\n    sortStack: Array<{ key: string; direction: SortDirection }> = [];\r\n    private selectionSet = new Set<any>();\r\n    private expandedSet = new Set<any>();\r\n    internalColumns$ = new BehaviorSubject<DynamicTableColumn<T>[]>([]);\r\n    data$ = new BehaviorSubject<T[]>([]);\r\n    colPanelOpen = false;\r\n    savedViews: Array<{ name: string; state: DynamicTableState }> = [];\r\n    adaptiveSizes: number[] = [];\r\n    private globalPlugins: DynamicTablePlugin<T>[] | null = null;\r\n    // Accessibility live region + roving focus state\r\n    activeCell = { row: 0, col: 0 };\r\n    liveMessage = '';\r\n    private liveTimer?: any;\r\n    private lastPagedLength = 0;\r\n\r\n    viewData$ = combineLatest([\r\n        this.data$,\r\n        this.filterSubject,\r\n        this.searchSubject,\r\n        this.internalColumns$\r\n    ]).pipe(\r\n        map(([rows, filters, search, cols]: [T[], DynamicTableFilterDescriptor[], string, DynamicTableColumn<T>[]]) => {\r\n            rows = this.runBeforeData(rows);\r\n            let result = [...rows];\r\n            if (this.globalFilter && search?.trim()) {\r\n                const q = search.toLowerCase();\r\n                result = result.filter(r => cols.some((c: DynamicTableColumn<T>) => String(this.getCellValue(r, c)).toLowerCase().includes(q)));\r\n            }\r\n            filters.forEach((f: DynamicTableFilterDescriptor) => {\r\n                result = result.filter((r: T) => {\r\n                    const column = cols.find((c: DynamicTableColumn<T>) => c.key === f.key);\r\n                    const value = column ? this.getCellValue(r, column) : (r as any)[f.key];\r\n                    if (f.operator === 'contains' || !f.operator) {\r\n                        return String(value).toLowerCase().includes(String(f.value).toLowerCase());\r\n                    }\r\n                    if (f.operator === 'eq') return value == f.value;\r\n                    if (f.operator === 'neq') return value != f.value;\r\n                    if (f.operator === 'gt') return value > f.value;\r\n                    if (f.operator === 'lt') return value < f.value;\r\n                    return true;\r\n                });\r\n            });\r\n            if (this.sortStack.length) {\r\n                result.sort((a, b) => {\r\n                    for (const s of this.sortStack) {\r\n                        const col = cols.find((c: DynamicTableColumn<T>) => c.key === s.key);\r\n                        if (!col) continue;\r\n                        const av = col.sortAccessor ? col.sortAccessor(a) : this.getCellValue(a, col);\r\n                        const bv = col.sortAccessor ? col.sortAccessor(b) : this.getCellValue(b, col);\r\n                        let cmp = 0;\r\n                        if (col.compareFn) {\r\n                            cmp = col.compareFn(av, bv, s.direction);\r\n                        } else {\r\n                            if (av == null && bv != null) cmp = -1; else if (av != null && bv == null) cmp = 1; else if (av < bv) cmp = -1; else if (av > bv) cmp = 1;\r\n                        }\r\n                        if (cmp !== 0) return s.direction === 'asc' ? cmp : -cmp;\r\n                    }\r\n                    return 0;\r\n                });\r\n            }\r\n            this.runAfterData(result);\r\n            return result;\r\n        })\r\n    );\r\n\r\n    pagedData$ = this.viewData$.pipe(\r\n        map((rows: T[]) => {\r\n            if (!this.pagination || this.serverSide) return rows;\r\n            const { pageIndex, pageSize } = this.pagination;\r\n            return rows.slice(pageIndex * pageSize, pageIndex * pageSize + pageSize);\r\n        })\r\n    );\r\n\r\n    total$ = this.viewData$.pipe(map((r: T[]) => r.length));\r\n    totalPages$ = this.total$.pipe(map((total: number) => {\r\n        if (!this.pagination) return 1;\r\n        return Math.max(1, Math.ceil(total / this.pagination.pageSize));\r\n    }));\r\n\r\n    gridTemplate = signal('');\r\n\r\n    constructor(\r\n        private cdr: ChangeDetectorRef,\r\n        private stateSvc: DynamicTableStateService,\r\n        private injector: Injector\r\n    ) {\r\n        try { this.globalPlugins = this.injector.get(DYNAMIC_TABLE_PLUGINS); } catch { this.globalPlugins = null; }\r\n        effect(() => {\r\n            if (this.stateKey) {\r\n                const state$ = this.stateSvc.getState(this.stateKey);\r\n                state$.pipe(takeUntil(this.destroy$)).subscribe((state: DynamicTableState | null) => { if (state) this.applyState(state); });\r\n            }\r\n        });\r\n    }\r\n\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        if (changes['columns']) {\r\n            this.internalColumns$.next(this.columns.filter(c => !c.hidden));\r\n            this.updateGridTemplate();\r\n        }\r\n        if (changes['data']) {\r\n            this.bindData(this.data);\r\n        }\r\n    }\r\n\r\n    ngAfterViewInit(): void {\r\n        this.bindData(this.data);\r\n        this.updateGridTemplate();\r\n        this.initPlugins();\r\n        if (this.adaptivePageSize && this.pagination) this.calculateAdaptiveSizes();\r\n        if (this.stateKey) {\r\n            const raw = localStorage.getItem(`${this.stateKey}:views`);\r\n            if (raw) {\r\n                try { this.savedViews = JSON.parse(raw) || []; } catch { /* ignore malformed saved views */ }\r\n            }\r\n        }\r\n        // track paged length for roving focus (vertical navigation)\r\n        this.pagedData$.pipe(takeUntil(this.destroy$)).subscribe(rows => this.lastPagedLength = rows.length);\r\n    }\r\n\r\n    private bindData(source: any) {\r\n        let obs$ = of(source as T[]);\r\n        if (Array.isArray(source)) {\r\n            obs$ = of(source as T[]);\r\n        } else if (isObservable(source)) {\r\n            obs$ = source as Observable<T[]>;\r\n        }\r\n        obs$.pipe(takeUntil(this.destroy$)).subscribe((rows: T[]) => {\r\n            this.data$.next(rows ?? []);\r\n            this.cdr.markForCheck();\r\n        });\r\n    }\r\n\r\n    toggleSort(col: DynamicTableColumn) {\r\n        if (!col.sortable || this.sortMode === 'none') return;\r\n        const existing = this.sortStack.find(s => s.key === col.key);\r\n        if (!existing) {\r\n            if (this.sortMode === 'single') this.sortStack = [];\r\n            this.sortStack.push({ key: col.key, direction: 'asc' });\r\n        } else {\r\n            if (existing.direction === 'asc') existing.direction = 'desc';\r\n            else if (existing.direction === 'desc') this.sortStack = this.sortStack.filter(s => s.key !== col.key);\r\n        }\r\n        const evt: DynamicTableSortEvent = { key: col.key, direction: this.sortStack.find(s => s.key === col.key)?.direction || '', multi: this.sortStack };\r\n        this.sortChange.emit(evt);\r\n        this.persist();\r\n        const dir = this.sortStack.find(s => s.key === col.key)?.direction || 'cleared';\r\n        this.announce(`Sorted ${col.header || col.key} ${dir}`);\r\n    }\r\n\r\n    applySearch(value: string) { this.searchSubject.next(value); }\r\n\r\n    applyFilters(filters: DynamicTableFilterDescriptor[]) { this.filterSubject.next(filters); this.filterChange.emit(filters); this.persist(); }\r\n\r\n    changePage(index: number) {\r\n        if (!this.pagination) return;\r\n        this.pagination.pageIndex = index;\r\n        this.pageChange.emit(this.pagination);\r\n        this.persist();\r\n        this.announce(`Page ${this.pagination.pageIndex + 1}`);\r\n    }\r\n\r\n    trackCol = (_: number, c: DynamicTableColumn) => c.key;\r\n\r\n    getCellValue(row: T, col: DynamicTableColumn) {\r\n        if (col.valueAccessor) return col.valueAccessor(row);\r\n        const path = col.key.split('.');\r\n        let value: any = row as any;\r\n        for (const p of path) {\r\n            if (value == null) return value;\r\n            value = value[p];\r\n        }\r\n        return value;\r\n    }\r\n\r\n    onRowClick(row: T) { this.rowClick.emit(row); }\r\n\r\n    toggleRowSelection(row: T) {\r\n        if (!this.selectable) return;\r\n        const key = (row as any)?.id ?? row;\r\n        if (this.selectionSet.has(key)) this.selectionSet.delete(key); else {\r\n            if (this.selectable === true) this.selectionSet.clear();\r\n            this.selectionSet.add(key);\r\n        }\r\n        const selectedRows = this.data$.value.filter((r: T) => this.selectionSet.has((r as any)?.id ?? r));\r\n        this.selectionChange.emit(selectedRows);\r\n        this.persist();\r\n        this.announce(`${selectedRows.length} row${selectedRows.length === 1 ? '' : 's'} selected`);\r\n    }\r\n    isSelected(row: T): boolean { const key = (row as any)?.id ?? row; return this.selectionSet.has(key); }\r\n    allSelected(): boolean { return !!this.data$.value.length && this.data$.value.every(r => this.selectionSet.has((r as any)?.id ?? r)); }\r\n    toggleAllSelection(checked: boolean) {\r\n        if (this.selectable !== 'multi') return;\r\n        if (checked) this.selectionSet = new Set(this.data$.value.map(r => (r as any)?.id ?? r)); else this.selectionSet.clear();\r\n        const selectedRows = this.data$.value.filter(r => this.selectionSet.has((r as any)?.id ?? r));\r\n        this.selectionChange.emit(selectedRows);\r\n        this.persist();\r\n        this.cdr.markForCheck();\r\n    }\r\n\r\n    dropColumn(event: CdkDragDrop<DynamicTableColumn[]>) {\r\n        if (!this.enableColumnReorder) return;\r\n        const cols = [...this.internalColumns$.value];\r\n        moveItemInArray(cols, event.previousIndex, event.currentIndex);\r\n        this.internalColumns$.next(cols);\r\n        this.updateGridTemplate();\r\n        this.columnReorder.emit(cols.map(c => c.key));\r\n        this.persist();\r\n        this.announce('Columns reordered');\r\n    }\r\n\r\n    onColumnResized(e: { key: string; width: number }) {\r\n        const col = this.columns.find(c => c.key === e.key);\r\n        if (col) {\r\n            col.width = e.width;\r\n            this.updateGridTemplate();\r\n        }\r\n        this.columnResize.emit(e);\r\n        this.persist();\r\n    }\r\n\r\n    export(options: DynamicTableExportOptions) {\r\n        let rows = this.viewDataSnapshot();\r\n        // plugin hook before export (allow mutation/filter)\r\n        for (const p of this.plugins) {\r\n            const maybe = p.beforeExport?.(rows, this.makePluginCtx());\r\n            if (Array.isArray(maybe)) rows = maybe;\r\n        }\r\n        const cols = this.internalColumns$.value.filter((c: DynamicTableColumn<T>) => !c.hidden && (options.includeHidden || !c.hidden));\r\n        const selectedKeys = options.columns?.length ? options.columns : cols.map((c: DynamicTableColumn<T>) => c.key);\r\n        const header = selectedKeys.join(',');\r\n        const lines = rows.map((r: T) => selectedKeys.map((k: string) => {\r\n            const col = cols.find((c: DynamicTableColumn<T>) => c.key === k)!;\r\n            const v = this.getCellValue(r, col);\r\n            const s = v == null ? '' : String(v).replace(/\"/g, '\"\"');\r\n            return `\"${s}\"`;\r\n        }).join(','));\r\n        const csv = [header, ...lines].join('\\n');\r\n        const blob = new Blob([options.bom ? '\\ufeff' + csv : csv], { type: 'text/csv;charset=utf-8;' });\r\n        const a = document.createElement('a');\r\n        a.href = URL.createObjectURL(blob);\r\n        a.download = (options.filename || 'export') + '.csv';\r\n        a.click();\r\n        URL.revokeObjectURL(a.href);\r\n    }\r\n\r\n    private viewDataSnapshot(): T[] {\r\n        const cols = this.internalColumns$.value;\r\n        let result = [...this.data$.value];\r\n        const search = this.searchSubject.value;\r\n        if (this.globalFilter && search?.trim()) {\r\n            const q = search.toLowerCase();\r\n            result = result.filter(r => cols.some(c => String(this.getCellValue(r, c)).toLowerCase().includes(q)));\r\n        }\r\n        this.filterSubject.value.forEach(f => {\r\n            result = result.filter(r => {\r\n                const column = cols.find(c => c.key === f.key);\r\n                const value = column ? this.getCellValue(r, column) : (r as any)[f.key];\r\n                if (f.operator === 'contains' || !f.operator) {\r\n                    return String(value).toLowerCase().includes(String(f.value).toLowerCase());\r\n                }\r\n                if (f.operator === 'eq') return value == f.value;\r\n                if (f.operator === 'neq') return value != f.value;\r\n                if (f.operator === 'gt') return value > f.value;\r\n                if (f.operator === 'lt') return value < f.value;\r\n                return true;\r\n            });\r\n        });\r\n        if (this.sortStack.length) {\r\n            result.sort((a, b) => {\r\n                for (const s of this.sortStack) {\r\n                    const col = cols.find(c => c.key === s.key);\r\n                    if (!col) continue;\r\n                    const av = col.sortAccessor ? col.sortAccessor(a) : this.getCellValue(a, col);\r\n                    const bv = col.sortAccessor ? col.sortAccessor(b) : this.getCellValue(b, col);\r\n                    let cmp = 0;\r\n                    if (col.compareFn) {\r\n                        cmp = col.compareFn(av, bv, s.direction);\r\n                    } else {\r\n                        if (av == null && bv != null) cmp = -1; else if (av != null && bv == null) cmp = 1; else if (av < bv) cmp = -1; else if (av > bv) cmp = 1;\r\n                    }\r\n                    if (cmp !== 0) return s.direction === 'asc' ? cmp : -cmp;\r\n                }\r\n                return 0;\r\n            });\r\n        }\r\n        return result;\r\n    }\r\n\r\n    private updateGridTemplate() {\r\n        const cols = this.internalColumns$.value;\r\n        let segments = cols.map((c: DynamicTableColumn<T>) => c.width ? (typeof c.width === 'number' ? `${c.width}px` : c.width) : 'minmax(120px,1fr)');\r\n        if (this.selectable === 'multi') segments = ['40px', ...segments];\r\n        if (this.rowActions?.length) segments.push('minmax(60px,auto)');\r\n        this.gridTemplate.set(segments.join(' '));\r\n        this.cdr.markForCheck();\r\n    }\r\n\r\n    private persist() {\r\n        if (!this.stateKey) return;\r\n        const state: DynamicTableState = {\r\n            sort: this.sortStack,\r\n            filters: this.filterSubject.value,\r\n            pageIndex: this.pagination ? this.pagination.pageIndex : undefined,\r\n            pageSize: this.pagination ? this.pagination.pageSize : undefined,\r\n            columnOrder: this.internalColumns$.value.map((c: DynamicTableColumn<T>) => c.key),\r\n            hiddenColumns: this.columns.filter(c => c.hidden).map(c => c.key),\r\n            selection: Array.from(this.selectionSet)\r\n        };\r\n        this.stateSvc.updateState(this.stateKey, state);\r\n        this.stateChange.emit(state);\r\n    }\r\n\r\n    private applyState(state: DynamicTableState) {\r\n        if (!state) return;\r\n        if (state.sort) this.sortStack = [...state.sort];\r\n        if (state.filters) this.filterSubject.next(state.filters);\r\n        if (this.pagination && typeof state.pageIndex === 'number') this.pagination.pageIndex = state.pageIndex;\r\n        if (this.pagination && typeof state.pageSize === 'number') this.pagination.pageSize = state.pageSize;\r\n        if (state.columnOrder?.length) {\r\n            const ordered: DynamicTableColumn<T>[] = [];\r\n            state.columnOrder.forEach(k => {\r\n                const found = this.columns.find(c => c.key === k);\r\n                if (found && !found.hidden) ordered.push(found);\r\n            });\r\n            const remaining = this.columns.filter(c => !state.columnOrder!.includes(c.key) && !c.hidden);\r\n            this.internalColumns$.next([...ordered, ...remaining]);\r\n        }\r\n        if (state.selection) {\r\n            this.selectionSet = new Set(state.selection);\r\n        }\r\n        this.cdr.markForCheck();\r\n    }\r\n\r\n    ngOnDestroy(): void {\r\n        this.destroy$.next();\r\n        this.destroy$.complete();\r\n    }\r\n\r\n    // Advanced feature methods\r\n    toggleColPanel() { this.colPanelOpen = !this.colPanelOpen; }\r\n    isColumnHidden(key: string) { return !!this.columns.find(c => c.key === key)?.hidden; }\r\n    toggleColumnVisibility(key: string, visible: boolean) { const col = this.columns.find(c => c.key === key); if (col) col.hidden = !visible; this.internalColumns$.next(this.columns.filter(c => !c.hidden)); this.updateGridTemplate(); this.persist(); }\r\n    reorderColumns(event: CdkDragDrop<DynamicTableColumn<T>[]>) { this.dropColumn(event); }\r\n    saveView(name: string) {\r\n        if (!name?.trim()) return;\r\n        const pageIndex = this.pagination && typeof (this.pagination as any).pageIndex === 'number' ? (this.pagination as PaginationConfig).pageIndex : undefined;\r\n        const pageSize = this.pagination && typeof (this.pagination as any).pageSize === 'number' ? (this.pagination as PaginationConfig).pageSize : undefined;\r\n        const state: DynamicTableState = {\r\n            sort: [...this.sortStack],\r\n            filters: [...this.filterSubject.value],\r\n            columnOrder: this.internalColumns$.value.map(c => c.key),\r\n            hiddenColumns: this.columns.filter(c => c.hidden).map(c => c.key),\r\n            pageIndex,\r\n            pageSize\r\n        };\r\n        const entry = { name, state };\r\n        this.savedViews = this.savedViews.filter(v => v.name !== name).concat(entry);\r\n        if (this.stateKey) localStorage.setItem(`${this.stateKey}:views`, JSON.stringify(this.savedViews));\r\n    }\r\n    applySavedView(name: string) { const v = this.savedViews.find(x => x.name === name); if (!v) return; this.applyState(v.state); }\r\n    onFilterInput(key: string, value: string) { const filters = [...this.filterSubject.value.filter(f => f.key !== key)]; if (value.trim()) filters.push({ key, value: value.trim(), operator: 'contains' }); this.applyFilters(filters); }\r\n    currentFilterValue(key: string) { return this.filterSubject.value.find(f => f.key === key)?.value || ''; }\r\n    toggleRowExpansion(row: T) {\r\n        if (!this.expandable) return;\r\n        const id = (row as any)?.id ?? row;\r\n        const expanding = !this.expandedSet.has(id);\r\n        if (expanding) this.expandedSet.add(id); else this.expandedSet.delete(id);\r\n        this.cdr.markForCheck();\r\n        this.announce(`Row ${expanding ? 'expanded' : 'collapsed'}`);\r\n    }\r\n    isRowExpanded(row: T) { const id = (row as any)?.id ?? row; return this.expandedSet.has(id); }\r\n    onRowKeydown(event: KeyboardEvent, row: T, rowIndex?: number) { if (event.key === 'Enter') { this.toggleRowExpansion(row); event.preventDefault(); } if (event.key === ' ' || event.key === 'Spacebar') { this.toggleRowSelection(row); event.preventDefault(); } }\r\n    onCellKeydown(event: KeyboardEvent, row: T, colIndex: number) {\r\n        const key = event.key;\r\n        const colCount = this.internalColumns$.value.length;\r\n        let { row: r, col: c } = this.activeCell;\r\n        const maxRow = this.lastPagedLength - 1;\r\n        const move = () => { this.focusCell(r, c); event.preventDefault(); };\r\n        switch (key) {\r\n            case 'ArrowRight':\r\n                if (c < colCount - 1) { c++; move(); }\r\n                break;\r\n            case 'ArrowLeft':\r\n                if (c > 0) { c--; move(); }\r\n                break;\r\n            case 'ArrowDown':\r\n                if (r < maxRow) { r++; move(); }\r\n                break;\r\n            case 'ArrowUp':\r\n                if (r > 0) { r--; move(); }\r\n                break;\r\n            case 'Home':\r\n                c = 0; move();\r\n                break;\r\n            case 'End':\r\n                c = colCount - 1; move();\r\n                break;\r\n            case 'PageDown':\r\n                if (this.pagination) { this.changePage(Math.min(this.pagination.pageIndex + 1, Math.ceil((this.totalSnapshot()) / this.pagination.pageSize) - 1)); }\r\n                break;\r\n            case 'PageUp':\r\n                if (this.pagination) { this.changePage(Math.max(this.pagination.pageIndex - 1, 0)); }\r\n                break;\r\n        }\r\n    }\r\n    ariaSort(key: string): string | null { const s = this.sortStack.find(x => x.key === key); if (!s) return null; return s.direction === 'asc' ? 'ascending' : 'descending'; }\r\n    calculateAdaptiveSizes() { if (!this.pagination) return; const base = this.pageSizeOptions; if (typeof this.height === 'number') { const usable = (this.height as number) - 120; const rowsFit = Math.max(3, Math.floor(usable / this.rowHeight)); const dynamicSizes = Array.from(new Set([rowsFit, rowsFit * 2, rowsFit * 3])).sort((a, b) => a - b); this.adaptiveSizes = [...new Set([...dynamicSizes, ...base])].sort((a, b) => a - b); if (!this.adaptiveSizes.includes(this.pagination.pageSize)) this.pagination.pageSize = this.adaptiveSizes[0]; } else { this.adaptiveSizes = base; } }\r\n    visiblePages(): Array<number | '...'> { if (!this.pagination) return []; const totalPages = Math.max(1, Math.ceil((this.totalSnapshot()) / this.pagination.pageSize)); const current = this.pagination.pageIndex; const pages: Array<number | '...'> = []; const window = 2; for (let i = 0; i < totalPages; i++) { if (i === 0 || i === totalPages - 1 || (i >= current - window && i <= current + window)) pages.push(i); else if (pages[pages.length - 1] !== '...') pages.push('...'); } return pages; }\r\n    trackNumber = (_: number, v: any) => v; gotoPage(p: number | '...') { if (p === '...' || !this.pagination) return; this.changePage(p); }\r\n    changePageSize(size: number) { if (!this.pagination) return; this.pagination.pageSize = +size; this.pagination.pageIndex = 0; this.persist(); }\r\n    onPageSizeChange(event: Event) { const sel = event.target as HTMLSelectElement | null; if (!sel) return; this.changePageSize(Number(sel.value)); this.cdr.markForCheck(); }\r\n    totalSnapshot(): number { let val = 0; this.total$.pipe(take(1)).subscribe(v => val = v); return val; }\r\n    private initPlugins() { const all = [...(this.globalPlugins || []), ...(this.plugins || [])].sort((a, b) => (a.order || 0) - (b.order || 0)); all.forEach(p => p.onInit?.(this.makePluginCtx())); this.plugins = all; }\r\n    private runBeforeData(rows: T[]): T[] { let current = rows; for (const p of this.plugins) { const maybe = p.beforeDataProcess?.(current, this.makePluginCtx()); if (Array.isArray(maybe)) current = maybe; } return current; }\r\n    private runAfterData(rows: T[]): void { this.plugins.forEach(p => p.afterDataProcess?.(rows, this.makePluginCtx())); }\r\n    private makePluginCtx(): any { return { component: this, columns: this.internalColumns$.value }; }\r\n\r\n    onRowAction(ev: MouseEvent, action: RowAction<T>, row: T) {\r\n        ev.stopPropagation();\r\n        if (action.disabled?.(row)) return;\r\n        try {\r\n            const result = action.run(row);\r\n            if (result instanceof Promise) {\r\n                result.catch(err => console.error('[dynamic-table] row action error', action.id, err));\r\n            }\r\n        } catch (err) {\r\n            console.error('[dynamic-table] row action error', action.id, err);\r\n        }\r\n    }\r\n\r\n    getActionTitle(action: RowAction<T>, row: T): string | undefined {\r\n        if (!action) return undefined;\r\n        const tt = action.tooltip;\r\n        if (typeof tt === 'function') {\r\n            try { return tt(row); } catch { return action.label; }\r\n        }\r\n        return tt || action.label;\r\n    }\r\n\r\n    getSortEntry(key: string) { return this.sortStack.find(s => s.key === key); }\r\n    handleHeaderToggle(ev: Event) { const input = ev.target as HTMLInputElement | null; if (!input) return; this.toggleAllSelection(input.checked); }\r\n    public focusCell(row: number, col: number) {\r\n        // clamp indices to current page & column bounds\r\n        const colCount = this.internalColumns$.value.length;\r\n        if (colCount === 0) return;\r\n        if (this.lastPagedLength <= 0) {\r\n            // derive synchronously from current paged data observable if possible\r\n            this.pagedData$.pipe(take(1)).subscribe(r => this.lastPagedLength = r.length);\r\n        }\r\n        const maxRow = this.lastPagedLength - 1;\r\n        if (maxRow < 0) return;\r\n        if (row < 0) row = 0; else if (row > maxRow) row = maxRow;\r\n        if (col < 0) col = 0; else if (col > colCount - 1) col = colCount - 1;\r\n        this.activeCell = { row, col };\r\n        requestAnimationFrame(() => {\r\n            const host: HTMLElement | null = document.querySelector('.dt-table');\r\n            if (!host) return;\r\n            const baseIndex = (this.selectable === 'multi' ? 1 : 0) + col + 1; // nth-child is 1-based\r\n            const selector = `.dt-row:nth-child(${row + 1}) .dt-cell:nth-child(${baseIndex})`;\r\n            const el = host.querySelector<HTMLElement>(selector);\r\n            el?.focus();\r\n            if (this.virtualScroll && this.viewport) this.viewport.scrollToIndex(row, 'smooth');\r\n        });\r\n    }\r\n\r\n    /** Focus the first data cell (0,0) if available */\r\n    public focusFirstCell() { this.focusCell(0, 0); }\r\n\r\n    /** Focus a row by object reference (first column) */\r\n    public focusRow(row: T, col: number = 0) {\r\n        this.pagedData$.pipe(take(1)).subscribe(page => {\r\n            const idx = page.findIndex(r => r === row);\r\n            if (idx >= 0) this.focusCell(idx, col);\r\n        });\r\n    }\r\n\r\n    private announce(msg: string) {\r\n        if (!msg) return;\r\n        // throttle updates so screen readers don't drop rapid changes\r\n        clearTimeout(this.liveTimer);\r\n        this.liveTimer = setTimeout(() => { this.liveMessage = msg; this.cdr.markForCheck(); }, 50);\r\n    }\r\n}\r\n","<div class=\"dt-root\" [class.dt-selectable]=\"selectable\" [style.height.px]=\"height\">\r\n    <div class=\"dt-toolbar\" *ngIf=\"globalFilter || headerExtra || showColumnPanel\">\r\n        <div class=\"dt-left\">\r\n            <ng-container *ngIf=\"globalFilter\">\r\n                <input class=\"dt-search\" type=\"text\" [placeholder]=\"searchPlaceholder\"\r\n                    (input)=\"applySearch($event.target.value)\">\r\n            </ng-container>\r\n            <ng-container *ngTemplateOutlet=\"headerExtra\"></ng-container>\r\n            <button *ngIf=\"showColumnPanel\" type=\"button\" class=\"dt-btn dt-col-panel-toggle\"\r\n                (click)=\"toggleColPanel()\">Columns</button>\r\n        </div>\r\n        <div class=\"dt-right\">\r\n            <button type=\"button\" class=\"dt-btn\"\r\n                (click)=\"export({format:'csv', filename:'table-export', bom:true})\">Export CSV</button>\r\n        </div>\r\n    </div>\r\n    <div class=\"dt-col-panel\" *ngIf=\"colPanelOpen\" role=\"dialog\" aria-label=\"Column settings\">\r\n        <h4>Columns</h4>\r\n        <div class=\"dt-col-list\" cdkDropList (cdkDropListDropped)=\"reorderColumns($event)\">\r\n            <div class=\"dt-col-item\" *ngFor=\"let col of internalColumns$ | async; trackBy: trackCol\" cdkDrag>\r\n                <input type=\"checkbox\" [checked]=\"!isColumnHidden(col.key)\"\r\n                    (change)=\"toggleColumnVisibility(col.key,$event.target.checked)\" [id]=\"'col-vis-'+col.key\"> <label\r\n                    [for]=\"'col-vis-'+col.key\">{{ col.header || col.key }}</label>\r\n                <span cdkDragHandle style=\"margin-left:auto; cursor:grab\" aria-label=\"Drag to reorder\">⋮⋮</span>\r\n            </div>\r\n        </div>\r\n        <div class=\"dt-view-list\">\r\n            <span *ngFor=\"let v of savedViews\" class=\"dt-view-chip\" (click)=\"applySavedView(v.name)\"\r\n                [title]=\"'Apply view '+v.name\">{{ v.name }}</span>\r\n        </div>\r\n        <div style=\"display:flex; gap:.25rem; margin-top:.25rem;\">\r\n            <input #viewName type=\"text\" placeholder=\"Save view name\" style=\"flex:1; padding:2px 4px; font-size:11px;\"\r\n                (keydown.enter)=\"saveView(viewName.value); viewName.value=''\">\r\n            <button class=\"dt-btn\" (click)=\"saveView(viewName.value); viewName.value=''\"\r\n                [disabled]=\"!viewName.value.trim()\">Save</button>\r\n        </div>\r\n    </div>\r\n    <div class=\"dt-table-wrapper\">\r\n        <div class=\"dt-table\" role=\"grid\" [attr.aria-rowcount]=\"(total$ | async) || 0\" cdkDropList\r\n            (cdkDropListDropped)=\"dropColumn($event)\" [style.gridTemplateColumns]=\"gridTemplate()\">\r\n            <div class=\"dt-header-row\" role=\"row\" *ngIf=\"stickyHeader\">\r\n                <div class=\"dt-header-cell dt-select-cell\" *ngIf=\"selectable==='multi'\" role=\"columnheader\"\r\n                    aria-label=\"Select all rows\">\r\n                    <input type=\"checkbox\" (change)=\"handleHeaderToggle($event)\" [checked]=\"allSelected()\"\r\n                        aria-label=\"Select all\">\r\n                </div>\r\n                <div class=\"dt-header-cell\" role=\"columnheader\"\r\n                    *ngFor=\"let col of internalColumns$ | async; trackBy: trackCol\" cdkDrag [attr.data-key]=\"col.key\"\r\n                    [class.dt-sortable]=\"col.sortable\" (click)=\"toggleSort(col)\" [dtColumnResize]=\"col.key\"\r\n                    (resized)=\"onColumnResized($event)\" [attr.aria-sort]=\"ariaSort(col.key)\">\r\n                    <span class=\"dt-header-text\">{{ col.header || col.key }}</span>\r\n                    <span class=\"dt-sort-indicator\" *ngIf=\"getSortEntry(col.key) as s\">{{ s.direction === 'asc' ? '▲' :\r\n                        '▼' }}</span>\r\n                    <span class=\"dt-resize-placeholder\"></span>\r\n                </div>\r\n                <div class=\"dt-header-cell dt-actions-header\" *ngIf=\"rowActions?.length\" role=\"columnheader\"\r\n                    aria-label=\"Row actions\">Actions</div>\r\n            </div>\r\n            <div class=\"dt-filter-row\" *ngIf=\"showFilterRow\" role=\"row\">\r\n                <div class=\"dt-filter-cell\" *ngFor=\"let col of internalColumns$ | async; trackBy: trackCol\"\r\n                    role=\"gridcell\">\r\n                    <input *ngIf=\"col.filterable\" class=\"dt-filter-input\" type=\"text\"\r\n                        (input)=\"onFilterInput(col.key, $event.target.value)\" [value]=\"currentFilterValue(col.key)\"\r\n                        [placeholder]=\"'Filter ' + (col.header||col.key)\" aria-label=\"Filter {{col.header||col.key}}\">\r\n                </div>\r\n            </div>\r\n            <cdk-virtual-scroll-viewport *ngIf=\"virtualScroll; else noVirtual\" [itemSize]=\"rowHeight\"\r\n                class=\"dt-viewport\">\r\n                <div class=\"dt-row\" role=\"row\" [dtRowResize]=\"rowIndex\"\r\n                    (resized)=\"rowHeight=$event.height; calculateAdaptiveSizes();\"\r\n                    *cdkVirtualFor=\"let row of pagedData$ | async; let rowIndex = index; trackBy: trackBy\"\r\n                    (click)=\"onRowClick(row)\" [class.dt-selected]=\"isSelected(row)\" (dblclick)=\"toggleRowSelection(row)\"\r\n                    (keydown)=\"onRowKeydown($event,row,rowIndex)\" tabindex=\"0\">\r\n                    <div class=\"dt-cell dt-select-cell\" *ngIf=\"selectable==='multi'\" role=\"gridcell\">\r\n                        <input type=\"checkbox\" (click)=\"$event.stopPropagation()\" (change)=\"toggleRowSelection(row)\"\r\n                            [checked]=\"isSelected(row)\" aria-label=\"Select row\">\r\n                    </div>\r\n                    <div class=\"dt-cell\" role=\"gridcell\"\r\n                        *ngFor=\"let col of internalColumns$ | async; let colIndex = index; trackBy: trackCol\"\r\n                        [attr.tabindex]=\"(activeCell.row===rowIndex && activeCell.col===colIndex) ? 0 : -1\"\r\n                        (focus)=\"activeCell={row:rowIndex,col:colIndex}\" (keydown)=\"onCellKeydown($event,row,colIndex)\"\r\n                        aria-colindex=\"{{colIndex+1}}\">\r\n                        <ng-container *ngIf=\"!col.cellTemplate; else customCell\">\r\n                            {{ getCellValue(row, col) }}\r\n                        </ng-container>\r\n                        <ng-template #customCell>\r\n                            <ng-container\r\n                                *ngTemplateOutlet=\"col.cellTemplate; context: { $implicit: getCellValue(row,col), value: getCellValue(row,col), row: row, column: col, rowIndex: rowIndex, colIndex: colIndex }\"></ng-container>\r\n                        </ng-template>\r\n                    </div>\r\n                    <div class=\"dt-cell dt-actions-cell\" *ngIf=\"rowActions?.length\">\r\n                        <button type=\"button\" class=\"dt-action-btn\" *ngFor=\"let action of rowActions\"\r\n                            [disabled]=\"action.disabled?.(row)\" [title]=\"getActionTitle(action, row)\"\r\n                            (click)=\"onRowAction($event, action, row)\">\r\n                            <span *ngIf=\"action.icon\" class=\"dt-action-icon\" [class]=\"action.icon\"></span>\r\n                            <span class=\"dt-action-label\" *ngIf=\"!action.icon\">{{ action.label }}</span>\r\n                        </button>\r\n                    </div>\r\n                    <div class=\"dt-expanded-row\" *ngIf=\"isRowExpanded(row)\">\r\n                        <ng-container *ngIf=\"rowExpandedTemplate; else defaultExpand\"\r\n                            [ngTemplateOutlet]=\"rowExpandedTemplate\"\r\n                            [ngTemplateOutletContext]=\"{ $implicit: row, row: row, columns: internalColumns$ | async }\"></ng-container>\r\n                        <ng-template #defaultExpand>\r\n                            <pre\r\n                                style=\"margin:0; font-size:12px; max-height:200px; overflow:auto;\">{{ row | json }}</pre>\r\n                        </ng-template>\r\n                    </div>\r\n                </div>\r\n            </cdk-virtual-scroll-viewport>\r\n            <ng-template #noVirtual>\r\n                <div class=\"dt-row\" role=\"row\" [dtRowResize]=\"rowIndex\"\r\n                    (resized)=\"rowHeight=$event.height; calculateAdaptiveSizes();\"\r\n                    *ngFor=\"let row of pagedData$ | async; let rowIndex = index; trackBy: trackBy\"\r\n                    (click)=\"onRowClick(row)\" [class.dt-selected]=\"isSelected(row)\" (dblclick)=\"toggleRowSelection(row)\"\r\n                    (keydown)=\"onRowKeydown($event,row,rowIndex)\" tabindex=\"0\">\r\n                    <div class=\"dt-cell dt-select-cell\" *ngIf=\"selectable==='multi'\" role=\"gridcell\">\r\n                        <input type=\"checkbox\" (click)=\"$event.stopPropagation()\" (change)=\"toggleRowSelection(row)\"\r\n                            [checked]=\"isSelected(row)\" aria-label=\"Select row\">\r\n                    </div>\r\n                    <div class=\"dt-cell\" role=\"gridcell\"\r\n                        *ngFor=\"let col of internalColumns$ | async; let colIndex = index; trackBy: trackCol\"\r\n                        [attr.tabindex]=\"(activeCell.row===rowIndex && activeCell.col===colIndex) ? 0 : -1\"\r\n                        (focus)=\"activeCell={row:rowIndex,col:colIndex}\" (keydown)=\"onCellKeydown($event,row,colIndex)\"\r\n                        aria-colindex=\"{{colIndex+1}}\">\r\n                        <ng-container *ngIf=\"!col.cellTemplate; else customCell2\">\r\n                            {{ getCellValue(row, col) }}\r\n                        </ng-container>\r\n                        <ng-template #customCell2>\r\n                            <ng-container\r\n                                *ngTemplateOutlet=\"col.cellTemplate; context: { $implicit: getCellValue(row,col), value: getCellValue(row,col), row: row, column: col, rowIndex: rowIndex, colIndex: colIndex }\"></ng-container>\r\n                        </ng-template>\r\n                    </div>\r\n                    <div class=\"dt-cell dt-actions-cell\" *ngIf=\"rowActions?.length\">\r\n                        <button type=\"button\" class=\"dt-action-btn\" *ngFor=\"let action of rowActions\"\r\n                            [disabled]=\"action.disabled?.(row)\" [title]=\"getActionTitle(action, row)\"\r\n                            (click)=\"onRowAction($event, action, row)\">\r\n                            <span *ngIf=\"action.icon\" class=\"dt-action-icon\" [class]=\"action.icon\"></span>\r\n                            <span class=\"dt-action-label\" *ngIf=\"!action.icon\">{{ action.label }}</span>\r\n                        </button>\r\n                    </div>\r\n                    <div class=\"dt-expanded-row\" *ngIf=\"isRowExpanded(row)\">\r\n                        <ng-container *ngIf=\"rowExpandedTemplate; else defaultExpand2\"\r\n                            [ngTemplateOutlet]=\"rowExpandedTemplate\"\r\n                            [ngTemplateOutletContext]=\"{ $implicit: row, row: row, columns: internalColumns$ | async }\"></ng-container>\r\n                        <ng-template #defaultExpand2>\r\n                            <pre\r\n                                style=\"margin:0; font-size:12px; max-height:200px; overflow:auto;\">{{ row | json }}</pre>\r\n                        </ng-template>\r\n                    </div>\r\n                </div>\r\n            </ng-template>\r\n        </div>\r\n    </div>\r\n    <div class=\"dt-footer\" *ngIf=\"pagination && !serverSide\">\r\n        <div class=\"dt-pagination\" aria-label=\"Pagination\">\r\n            <button type=\"button\" class=\"dt-btn\" [disabled]=\"pagination.pageIndex===0\"\r\n                (click)=\"changePage(pagination.pageIndex-1)\">Prev</button>\r\n            <ng-container *ngFor=\"let p of visiblePages(); trackBy: trackNumber\">\r\n                <button type=\"button\" class=\"dt-btn\" [disabled]=\"p==='...'\" [class.active]=\"p===pagination.pageIndex\"\r\n                    (click)=\"gotoPage(p)\" *ngIf=\"p==='...' ? true : p>=0\">{{ p==='...' ? '…' : (p+1) }}</button>\r\n            </ng-container>\r\n            <button type=\"button\" class=\"dt-btn\"\r\n                [disabled]=\"(pagination.pageIndex+1) * pagination.pageSize >= (total$ | async)!\"\r\n                (click)=\"changePage(pagination.pageIndex+1)\">Next</button>\r\n            <select *ngIf=\"adaptivePageSize\" (change)=\"onPageSizeChange($event)\" [value]=\"pagination.pageSize\"\r\n                style=\"margin-left:.5rem;\">\r\n                <option *ngFor=\"let size of adaptiveSizes\" [value]=\"size\">{{ size }}</option>\r\n            </select>\r\n        </div>\r\n    </div>\r\n    <div class=\"dt-live\" aria-live=\"polite\" aria-atomic=\"true\"\r\n        style=\"position:absolute;left:-9999px;top:auto;width:1px;height:1px;overflow:hidden;\">{{ liveMessage }}</div>\r\n</div>","// Public API Surface of dynamic-table library\r\nexport * from './lib/models/dynamic-table.models';\r\nexport * from './lib/services/dynamic-table-state.service';\r\nexport * from './lib/directives/column-resize.directive';\r\nexport * from './lib/directives/row-resize.directive';\r\nexport * from './lib/components/dynamic-table/dynamic-table.component';\r\nexport * from './lib/plugins/dynamic-table.types';\r\nexport * from './lib/plugins/dynamic-table.tokens';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.DynamicTableStateService"],"mappings":"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"}