@angular-bootstrap/ngbootstrap 1.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"angular-bootstrap-ngbootstrap.mjs","sources":["../../../src/pagination/src/pagination/pagination.component.ts","../../../src/pagination/src/pagination/pager-settings.ts","../../../src/pagination/src/pagination/pager.component.ts","../../../src/datagrid/src/models/datagrid-pageable.ts","../../../src/datagrid/src/directives/datagrid-templates.directive.ts","../../../src/datagrid/src/models/filtering.ts","../../../src/datagrid/src/data-operations.ts","../../../src/datagrid/src/services/export.services.ts","../../../src/datagrid/src/services/editing.service.ts","../../../src/datagrid/src/adapters/jsdf.adapter.ts","../../../src/datagrid/src/adapters/xlsx.adapter.ts","../../../src/datagrid/src/directives/export-button.directive.ts","../../../src/datagrid/src/directives/grid-column.directive.ts","../../../src/datagrid/src/foundation/datagrid-button.directive.ts","../../../src/datagrid/src/foundation/datagrid-control.directive.ts","../../../src/datagrid/src/datagrid/components/datagrid-add-row.component.ts","../../../src/datagrid/src/datagrid/components/datagrid-colgroup.component.ts","../../../src/datagrid/src/datagrid/components/datagrid-data-row.component.ts","../../../src/datagrid/src/datagrid/components/datagrid-detail-row.component.ts","../../../src/datagrid/src/datagrid/components/datagrid-footer.component.ts","../../../src/datagrid/src/foundation/datagrid-field-shell.component.ts","../../../src/datagrid/src/datagrid/components/datagrid-header.component.ts","../../../src/datagrid/src/foundation/datagrid-surface-card.component.ts","../../../src/datagrid/src/foundation/datagrid-floating-panel.directive.ts","../../../src/datagrid/src/datagrid/components/datagrid-filter-menu-panel.component.ts","../../../src/datagrid/src/datagrid/components/datagrid-row-filter-operator-panel.component.ts","../../../src/datagrid/src/datagrid/components/datagrid-toolbar.component.ts","../../../src/datagrid/src/datagrid/components/datagrid-editing-toolbar.component.ts","../../../src/datagrid/src/datagrid/components/datagrid-external-editor.component.ts","../../../src/datagrid/src/datagrid/directives/grid-highlight.directive.ts","../../../src/drag-drop/src/a11y/live-announcer.service.ts","../../../src/drag-drop/src/i18n/dnd-i18n.ts","../../../src/drag-drop/src/service/drag-state.service.ts","../../../src/datagrid/src/datagrid/directives/colgroup-sync.directive.ts","../../../src/drag-drop/src/directive/dnd-list.directive.ts","../../../src/drag-drop/src/directive/dnd-item.directive.ts","../../../src/datagrid/src/layout-toolbar/datagrid-host.token.ts","../../../src/datagrid/src/models/datagrid-labels.ts","../../../src/datagrid/src/datagrid/datagrid.component.ts","../../../src/datagrid/src/datagrid/datagrid.component.html","../../../src/datagrid/src/layout-toolbar/datagrid-tool-host.ts","../../../src/datagrid/src/layout-toolbar/datagrid-layout-toolbar-coordinator.ts","../../../src/datagrid/src/layout-toolbar/datagrid-column-chooser-tool.component.ts","../../../src/datagrid/src/layout-toolbar/datagrid-filter-tool.component.ts","../../../src/datagrid/src/layout-toolbar/datagrid-sort-tool.component.ts","../../../src/datagrid/src/layout-toolbar/datagrid-layout-toolbar.component.ts","../../../src/datagrid/src/chart/data-chart.helpers.ts","../../../src/datagrid/src/chart/data-chart.component.ts","../../../src/datagrid/src/chart/data-sparkline.component.ts","../../../src/datagrid/src/chart/grid-chart.component.ts","../../../src/datagrid/src/search/advanced-search.component.ts","../../../src/datagrid/src/search/search-highlight.component.ts","../../../src/datagrid/src/datagrid.types.ts","../../../src/datagrid/src/theme/datagrid-theme-picker.component.ts","../../../src/drag-drop/src/directive/dnd-handle.directive.ts","../../../src/drag-drop/src/json-preview/json-preview.component.ts","../../../src/stepper/src/stepper/step-label.directive.ts","../../../src/stepper/src/stepper/stepper.component.ts","../../../src/stepper/src/stepper/stepper.component.html","../../../src/splitter/src/splitter/splitter-pane.component.ts","../../../src/splitter/src/splitter/splitter.component.ts","../../../src/chips/src/chips/chips.component.ts","../../../src/typeahead/src/typeahead/typeahead.component.ts","../../../src/tree/src/tree/tree.component.ts","../../../src/index.ts","../../../src/angular-bootstrap-ngbootstrap.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'ngb-pagination',\n standalone: true,\n imports: [CommonModule, FormsModule],\n template: `\n @if (totalPages >= 1) {\n <nav\n class=\"ngb-pagination\"\n [class.ngb-pagination--responsive]=\"responsive\"\n aria-label=\"Pagination\"\n >\n @if (pagerType === 'input') {\n <div class=\"ngb-pagination__input-group\">\n @if (previousNext) {\n <button\n class=\"btn btn-sm btn-outline-secondary\"\n type=\"button\"\n [disabled]=\"page === 1\"\n (click)=\"go(page - 1)\"\n aria-label=\"Previous page\"\n >\n ‹\n </button>\n }\n <label class=\"ngb-pagination__input-label\">\n <span class=\"visually-hidden\">Page</span>\n <input\n class=\"form-control form-control-sm ngb-pagination__page-input\"\n type=\"number\"\n [min]=\"1\"\n [max]=\"totalPages\"\n [ngModel]=\"page\"\n (ngModelChange)=\"go($event)\"\n aria-label=\"Current page\"\n />\n </label>\n <span class=\"ngb-pagination__input-total\" aria-hidden=\"true\">/ {{ totalPages }}</span>\n @if (previousNext) {\n <button\n class=\"btn btn-sm btn-outline-secondary\"\n type=\"button\"\n [disabled]=\"page === totalPages\"\n (click)=\"go(page + 1)\"\n aria-label=\"Next page\"\n >\n ›\n </button>\n }\n </div>\n } @else {\n <ul class=\"pagination pagination-sm justify-content-center mb-0\">\n @if (previousNext) {\n <li class=\"page-item\" [class.disabled]=\"page === 1\">\n <button\n class=\"page-link\"\n type=\"button\"\n (click)=\"go(page - 1)\"\n aria-label=\"Previous page\"\n >\n <span aria-hidden=\"true\">«</span>\n </button>\n </li>\n }\n\n @for (p of pages; track p) {\n <li\n class=\"page-item\"\n [class.active]=\"p === page\"\n [class.disabled]=\"p === '…'\"\n >\n @if (p === '…') {\n <span class=\"page-link\" aria-hidden=\"true\">…</span>\n } @else {\n <button\n class=\"page-link\"\n type=\"button\"\n (click)=\"go(p)\"\n [attr.aria-current]=\"p === page ? 'page' : null\"\n >\n {{ p }}\n </button>\n }\n </li>\n }\n\n @if (previousNext) {\n <li class=\"page-item\" [class.disabled]=\"page === totalPages\">\n <button\n class=\"page-link\"\n type=\"button\"\n (click)=\"go(page + 1)\"\n aria-label=\"Next page\"\n >\n <span aria-hidden=\"true\">»</span>\n </button>\n </li>\n }\n </ul>\n }\n </nav>\n }\n `,\n styles: [`\n .ngb-pagination--responsive .pagination {\n flex-wrap: wrap;\n justify-content: center;\n gap: 0.15rem;\n }\n\n .ngb-pagination .page-link,\n .ngb-pagination .btn {\n border-color: var(--dg-pager-control-border, var(--bs-border-color));\n background-color: var(--dg-pager-control-bg, var(--bs-body-bg));\n color: var(--dg-pager-link-text, var(--dg-primary, var(--bs-primary)));\n }\n\n .ngb-pagination .page-link:hover,\n .ngb-pagination .btn:hover {\n border-color: var(--dg-border-strong, var(--bs-border-color));\n background-color: var(--dg-pager-control-hover-bg, var(--bs-tertiary-bg));\n color: var(--dg-primary-hover, var(--bs-link-hover-color));\n }\n\n .ngb-pagination .page-item.active .page-link {\n border-color: var(--dg-pager-active-border, var(--dg-primary, var(--bs-primary)));\n background-color: var(--dg-pager-active-bg, var(--dg-primary, var(--bs-primary)));\n color: var(--dg-pager-active-text, var(--dg-on-primary, #fff));\n }\n\n .ngb-pagination .page-item.disabled .page-link,\n .ngb-pagination .btn:disabled {\n border-color: var(--dg-pager-control-border, var(--bs-border-color));\n background-color: var(--dg-pager-control-bg, var(--bs-body-bg));\n color: var(--dg-text-subtle, var(--bs-secondary-color));\n opacity: 0.55;\n }\n\n .ngb-pagination__input-group {\n display: inline-flex;\n align-items: center;\n gap: 0.35rem;\n flex-wrap: wrap;\n justify-content: center;\n }\n\n .ngb-pagination__page-input {\n width: 4.25rem;\n text-align: center;\n border-color: var(--dg-pager-control-border, var(--bs-border-color));\n background-color: var(--dg-pager-control-bg, var(--bs-body-bg));\n color: var(--dg-text, var(--bs-body-color));\n }\n\n .ngb-pagination__input-label {\n margin: 0;\n }\n\n .ngb-pagination__input-total {\n font-size: 0.875rem;\n color: var(--dg-pager-text, var(--bs-secondary-color));\n white-space: nowrap;\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgbPaginationComponent {\n @Input() page = 1;\n @Input() pageSize = 10;\n @Input() collectionSize = 0;\n /** @deprecated Use `buttonCount`. Kept for compatibility. */\n @Input() maxSize = 5;\n @Input() buttonCount?: number;\n @Input() previousNext = true;\n @Input() pagerType: 'numeric' | 'input' = 'numeric';\n @Input() responsive = true;\n @Output() pageChange = new EventEmitter<number>();\n\n get effectiveButtonCount(): number {\n const count = this.buttonCount ?? this.maxSize;\n return Math.max(3, count | 0);\n }\n\n get totalPages(): number {\n return Math.max(1, Math.ceil(this.collectionSize / Math.max(1, this.pageSize)));\n }\n\n get pages(): Array<number | '…'> {\n const total = this.totalPages;\n const max = this.effectiveButtonCount;\n if (total <= max) return Array.from({ length: total }, (_, i) => i + 1);\n\n const half = Math.floor(max / 2);\n let start = Math.max(1, this.page - half);\n let end = start + max - 1;\n if (end > total) {\n end = total;\n start = end - max + 1;\n }\n\n const nums = Array.from({ length: end - start + 1 }, (_, i) => start + i);\n const head = start > 1 ? [1, start > 2 ? ('…' as const) : 2] : [];\n const tail = end < total ? [end < total - 1 ? ('…' as const) : total - 1, total] : [];\n return [...head, ...nums, ...tail];\n }\n\n go(p: number | string): void {\n const next = typeof p === 'string' ? Number(p) : p;\n if (!Number.isFinite(next)) return;\n const page = Math.trunc(next);\n if (page < 1 || page > this.totalPages || page === this.page) return;\n this.pageChange.emit(page);\n }\n}\n","export type NgbPagerType = 'numeric' | 'input';\n\n/**\n * Responsive pager density based on container width.\n * - `full`: info, pagination, and page-size controls\n * - `compact`: hides range info\n * - `minimal`: hides range info and page-size controls (pagination remains)\n */\nexport type NgbPagerDensity = 'full' | 'compact' | 'minimal';\n\n/** Width breakpoints (px) for {@link ngbResolvePagerDensity}. */\nexport const NGB_PAGER_BREAKPOINTS = {\n fullMinWidth: 520,\n compactMinWidth: 360,\n} as const;\n\n/** Configuration for {@link NgbPagerComponent}. */\nexport interface NgbPagerSettings {\n /** Maximum numeric page buttons before ellipsis collapse. Default `10`. */\n buttonCount?: number;\n /** Shows the current range and total record count. Default `true`. */\n info?: boolean;\n /**\n * Page-size presets. `false` hides the control (set `pageSize` yourself).\n * The active `pageSize` is included when it is not already in the list.\n */\n pageSizes?: false | number[];\n /** Shows previous/next pager buttons. Default `true`. */\n previousNext?: boolean;\n /** `numeric` (page buttons) or `input` (type a page number). Default `numeric`. */\n type?: NgbPagerType;\n /**\n * When `true` (default), hides info and page-size controls as the container narrows.\n * When `false`, all controls stay visible and wrap onto new rows.\n */\n responsive?: boolean;\n}\n\nexport const NGB_PAGER_DEFAULT_SETTINGS: Required<\n Omit<NgbPagerSettings, 'pageSizes'>\n> & { pageSizes: false | number[] } = {\n buttonCount: 10,\n info: true,\n pageSizes: false,\n previousNext: true,\n type: 'numeric',\n responsive: true,\n};\n\nexport function ngbResolvePagerSettings(\n settings: boolean | NgbPagerSettings | null | undefined\n): NgbPagerSettings | null {\n if (!settings) return null;\n const overrides = typeof settings === 'object' ? settings : {};\n return { ...NGB_PAGER_DEFAULT_SETTINGS, ...overrides };\n}\n\nexport function ngbResolvePagerDensity(width: number): NgbPagerDensity {\n if (width >= NGB_PAGER_BREAKPOINTS.fullMinWidth) return 'full';\n if (width >= NGB_PAGER_BREAKPOINTS.compactMinWidth) return 'compact';\n return 'minimal';\n}\n\nexport function ngbResolvePagerPageSizeOptions(\n pageSizes: false | number[] | undefined,\n pageSize: number\n): number[] {\n const presets = Array.isArray(pageSizes) && pageSizes.length ? pageSizes : [];\n const options = presets\n .map((value) => Number(value))\n .filter((value) => Number.isFinite(value) && value > 0);\n const size = Number(pageSize);\n if (Number.isFinite(size) && size > 0 && !options.includes(size)) {\n options.push(size);\n }\n return options.sort((a, b) => a - b);\n}\n\nexport function ngbPagerButtonCountForDensity(\n base: number,\n density: NgbPagerDensity,\n responsive: boolean\n): number {\n if (!responsive) return base;\n if (density === 'minimal') return Math.min(base, 3);\n if (density === 'compact') return Math.min(base, 5);\n return base;\n}\n\nexport function ngbFormatPagerRangeLabel(\n start: number,\n end: number,\n total: number,\n template = '{start}–{end} of {total}'\n): string {\n return template\n .replace(/\\{start\\}/g, String(start))\n .replace(/\\{end\\}/g, String(end))\n .replace(/\\{total\\}/g, String(total));\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgbPaginationComponent } from './pagination.component';\nimport {\n NgbPagerDensity,\n NgbPagerSettings,\n ngbFormatPagerRangeLabel,\n ngbPagerButtonCountForDensity,\n ngbResolvePagerDensity,\n ngbResolvePagerPageSizeOptions,\n ngbResolvePagerSettings,\n} from './pager-settings';\n\n@Component({\n selector: 'ngb-pager',\n standalone: true,\n imports: [CommonModule, FormsModule, NgbPaginationComponent],\n template: `\n <div\n #pagerRoot\n class=\"ngb-pager\"\n [class.ngb-pager--wrap]=\"!responsiveEnabled\"\n [class.ngb-pager--responsive]=\"responsiveEnabled\"\n [class.ngb-pager--density-compact]=\"pagerDensity === 'compact' || pagerDensity === 'minimal'\"\n [class.ngb-pager--density-minimal]=\"pagerDensity === 'minimal'\"\n >\n @if (showInfoSetting) {\n <div\n class=\"ngb-pager__range ngb-pager__part--info small text-muted\"\n [class.ngb-pager__part--hidden]=\"!showInfo\"\n [attr.aria-hidden]=\"showInfo ? null : true\"\n >\n {{ displayInfoLabel }}\n </div>\n } @else {\n <div class=\"ngb-pager__range ngb-pager__part--info ngb-pager__part--spacer\" aria-hidden=\"true\"></div>\n }\n\n <div class=\"ngb-pager__pagination ngb-pager__part--nav\">\n <ngb-pagination\n [page]=\"page\"\n [pageSize]=\"pageSize\"\n [collectionSize]=\"collectionSize\"\n [buttonCount]=\"effectiveButtonCount\"\n [previousNext]=\"previousNextEnabled\"\n [pagerType]=\"pagerType\"\n [responsive]=\"!responsiveEnabled\"\n (pageChange)=\"onPageChange($event)\"\n >\n </ngb-pagination>\n </div>\n\n @if (showPageSizesSetting) {\n <div\n class=\"ngb-pager__page-size ngb-pager__part--sizes\"\n [class.ngb-pager__part--hidden]=\"!showPageSizes\"\n [attr.aria-hidden]=\"showPageSizes ? null : true\"\n >\n <label class=\"ngb-pager__page-size-label\" [attr.for]=\"pageSizeSelectId\">\n {{ rowsPerPageLabel }}\n </label>\n <select\n [id]=\"pageSizeSelectId\"\n class=\"form-select form-select-sm ngb-pager__page-size-select\"\n [ngModel]=\"pageSize\"\n (ngModelChange)=\"onPageSizeChange($event)\"\n [disabled]=\"!showPageSizes\"\n [attr.aria-label]=\"rowsPerPageLabel\"\n >\n @for (s of resolvedPageSizeOptions; track s) {\n <option [ngValue]=\"s\">{{ s }}</option>\n }\n </select>\n </div>\n } @else {\n <div class=\"ngb-pager__page-size ngb-pager__part--sizes ngb-pager__part--spacer\" aria-hidden=\"true\"></div>\n }\n </div>\n `,\n styles: [`\n .ngb-pager {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);\n align-items: center;\n gap: 0.5rem 0.75rem;\n width: 100%;\n color: var(--dg-pager-text, var(--bs-secondary-color));\n }\n\n .ngb-pager__range {\n justify-self: start;\n min-width: 0;\n color: var(--dg-pager-text, var(--bs-secondary-color)) !important;\n }\n\n .ngb-pager__pagination {\n display: flex;\n justify-content: center;\n justify-self: center;\n min-width: 0;\n }\n\n .ngb-pager__page-size {\n display: inline-flex;\n align-items: center;\n justify-self: end;\n gap: 0.5rem;\n min-width: 0;\n }\n\n .ngb-pager__page-size-label {\n margin: 0;\n white-space: nowrap;\n font-size: 0.875rem;\n line-height: 1.25;\n color: var(--dg-pager-text, var(--bs-secondary-color));\n }\n\n .ngb-pager__page-size-select {\n width: auto;\n min-width: 4.5rem;\n flex: 0 0 auto;\n border-color: var(--dg-pager-control-border, var(--bs-border-color));\n background-color: var(--dg-pager-control-bg, var(--bs-body-bg));\n background-image: var(--dg-pager-select-icon);\n background-position: right 0.75rem center;\n background-repeat: no-repeat;\n background-size: 16px 12px;\n color: var(--dg-text, var(--bs-body-color));\n padding-right: 2.25rem;\n appearance: none;\n }\n\n .ngb-pager--wrap {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n }\n\n .ngb-pager--wrap .ngb-pager__range {\n flex: 1 1 100%;\n justify-self: auto;\n }\n\n .ngb-pager--wrap .ngb-pager__pagination {\n flex: 1 1 100%;\n justify-content: center;\n justify-self: auto;\n }\n\n .ngb-pager--wrap .ngb-pager__page-size {\n flex: 0 0 auto;\n justify-self: auto;\n }\n\n .ngb-pager--responsive {\n flex-wrap: nowrap;\n overflow: hidden;\n }\n\n .ngb-pager__part--hidden {\n visibility: hidden;\n pointer-events: none;\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgbPagerComponent implements AfterViewInit, OnDestroy {\n private static nextId = 0;\n\n private readonly uid = NgbPagerComponent.nextId++;\n\n readonly pageSizeSelectId = `ngb-pager-page-size-${this.uid}`;\n\n pagerDensity: NgbPagerDensity = 'full';\n\n private resizeObserver?: ResizeObserver;\n\n @ViewChild('pagerRoot') pagerRoot?: ElementRef<HTMLElement>;\n\n @Input() page = 1;\n @Input() pageSize = 10;\n @Input() collectionSize = 0;\n @Input() settings: boolean | NgbPagerSettings | null = true;\n /** Overrides the default range label when `info` is enabled. */\n @Input() infoLabel?: string;\n @Input() rangeLabelTemplate = '{start}–{end} of {total}';\n @Input() rowsPerPageLabel = 'Rows per page';\n /** When set, overrides `settings.responsive`. */\n @Input() responsive?: boolean;\n\n @Output() pageChange = new EventEmitter<number>();\n @Output() pageSizeChange = new EventEmitter<number>();\n\n constructor(private readonly cdr: ChangeDetectorRef) {}\n\n get resolved(): NgbPagerSettings {\n return ngbResolvePagerSettings(this.settings) ?? ngbResolvePagerSettings(true)!;\n }\n\n get responsiveEnabled(): boolean {\n return this.responsive ?? this.resolved.responsive !== false;\n }\n\n get showInfoSetting(): boolean {\n return this.resolved.info !== false;\n }\n\n get showPageSizesSetting(): boolean {\n const pageSizes = this.resolved.pageSizes;\n return Array.isArray(pageSizes) && pageSizes.length > 0;\n }\n\n get showInfo(): boolean {\n return this.pagerDensity === 'full';\n }\n\n get showPageSizes(): boolean {\n return this.pagerDensity !== 'minimal';\n }\n\n get previousNextEnabled(): boolean {\n return this.resolved.previousNext !== false;\n }\n\n get pagerType(): 'numeric' | 'input' {\n return this.resolved.type ?? 'numeric';\n }\n\n get effectiveButtonCount(): number {\n const base = this.resolved.buttonCount ?? 10;\n return ngbPagerButtonCountForDensity(base, this.pagerDensity, this.responsiveEnabled);\n }\n\n get resolvedPageSizeOptions(): number[] {\n return ngbResolvePagerPageSizeOptions(this.resolved.pageSizes, this.pageSize);\n }\n\n get displayInfoLabel(): string {\n if (this.infoLabel != null && this.infoLabel !== '') {\n return this.infoLabel;\n }\n const total = this.collectionSize;\n const start = total ? (this.page - 1) * this.pageSize + 1 : 0;\n const end = Math.min(this.page * this.pageSize, total);\n return ngbFormatPagerRangeLabel(start, end, total, this.rangeLabelTemplate);\n }\n\n ngAfterViewInit(): void {\n this.observeWidth();\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n }\n\n onPageChange(page: number): void {\n this.pageChange.emit(page);\n }\n\n onPageSizeChange(size: number): void {\n this.pageSizeChange.emit(size);\n }\n\n private observeWidth(): void {\n if (!this.responsiveEnabled || !this.pagerRoot?.nativeElement) {\n this.pagerDensity = 'full';\n return;\n }\n\n const element = this.pagerRoot.nativeElement;\n const apply = (width: number) => {\n const next = ngbResolvePagerDensity(width);\n if (next !== this.pagerDensity) {\n this.pagerDensity = next;\n this.cdr.markForCheck();\n }\n };\n\n apply(element.getBoundingClientRect().width);\n\n if (typeof ResizeObserver === 'undefined') {\n return;\n }\n\n this.resizeObserver = new ResizeObserver((entries) => {\n const width = entries[0]?.contentRect.width ?? element.getBoundingClientRect().width;\n apply(width);\n });\n this.resizeObserver.observe(element);\n }\n}\n","import {\n NGB_PAGER_BREAKPOINTS,\n NGB_PAGER_DEFAULT_SETTINGS,\n NgbPagerDensity,\n NgbPagerSettings,\n NgbPagerType,\n ngbResolvePagerDensity,\n} from '../../../pagination';\n\nexport type NgbDatagridPagerType = NgbPagerType;\n\nexport type NgbDatagridPagerPosition = 'top' | 'bottom' | 'both';\n\nexport type NgbDatagridPagerDensity = NgbPagerDensity;\n\n/** @deprecated Use {@link NGB_PAGER_BREAKPOINTS}. */\nexport const NGB_DATAGRID_PAGER_BREAKPOINTS = NGB_PAGER_BREAKPOINTS;\n\n/** Pager configuration for {@link Datagrid} via `[pageable]`. */\nexport interface NgbDatagridPageableSettings extends NgbPagerSettings {\n /** Pager placement relative to the table. Default `bottom`. */\n position?: NgbDatagridPagerPosition;\n}\n\nexport const NGB_DATAGRID_DEFAULT_PAGEABLE: Required<\n Omit<NgbDatagridPageableSettings, 'pageSizes'>\n> & { pageSizes: false | number[] } = {\n ...NGB_PAGER_DEFAULT_SETTINGS,\n position: 'bottom',\n};\n\nexport { ngbResolvePagerDensity };\n\nexport function ngbResolvePageableSettings(\n pageable: boolean | NgbDatagridPageableSettings | null | undefined,\n legacy?: { enablePagination?: boolean; pageSizeOptions?: number[] }\n): NgbDatagridPageableSettings | null {\n if (pageable) {\n const overrides = typeof pageable === 'object' ? pageable : {};\n return { ...NGB_DATAGRID_DEFAULT_PAGEABLE, ...overrides };\n }\n if (legacy?.enablePagination) {\n return {\n ...NGB_DATAGRID_DEFAULT_PAGEABLE,\n pageSizes: legacy.pageSizeOptions?.length ? legacy.pageSizeOptions : [5, 10, 25, 50],\n };\n }\n return null;\n}\n\n/** Settings for {@link NgbPagerComponent} (excludes grid-only `position`). */\nexport function ngbDatagridPagerSettings(\n pageable: NgbDatagridPageableSettings\n): NgbPagerSettings {\n const { position: _position, ...settings } = pageable;\n return settings;\n}\n\nexport function ngbResolveDatagridPagerSettings(\n pageable: boolean | NgbDatagridPageableSettings | null | undefined,\n legacy?: { enablePagination?: boolean; pageSizeOptions?: number[] }\n): NgbPagerSettings | null {\n const resolved = ngbResolvePageableSettings(pageable, legacy);\n return resolved ? ngbDatagridPagerSettings(resolved) : null;\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\nimport { AbstractControl, FormGroup } from '@angular/forms';\nimport { ColumnDef } from '../models/column-def';\nimport { NgbCompositeFilterDescriptor, NgbFilterDescriptor, NgbFilterOperator } from '../models/filtering';\n\nexport interface CellCtx<T = any> { $implicit: any; row: T; col: ColumnDef<T>; index: number; }\nexport interface EditCtx<T = any> { $implicit: AbstractControl | null; control: AbstractControl | null; row: T; col: ColumnDef<T>; form: FormGroup; index: number; isNew: boolean; }\nexport interface FilterCtx<T = any> {\n $implicit: AbstractControl | null;\n control: AbstractControl | null;\n col: ColumnDef<T>;\n /** Column field name (same as `col.field`). */\n field: string;\n descriptor: NgbFilterDescriptor | null;\n /** Current composite filter root (clone). Use with `filterChange` for custom filter templates. */\n filter: NgbCompositeFilterDescriptor;\n operators: NgbFilterOperator[];\n setOperator: (operator: NgbFilterOperator) => void;\n setValue: (value: any) => void;\n clear: () => void;\n /** Replaces the grid filter state and emits `filterChange` when enabled. */\n filterChange: (filter: NgbCompositeFilterDescriptor) => void;\n /** Sets this column's field filter in the current descriptor and commits. */\n setFieldFilter: (operator: NgbFilterOperator, value?: any) => void;\n}\nexport interface GlobalFilterCtx { $implicit: AbstractControl; }\n\nexport interface PagerCtx<T = any> {\n grid: T;\n page: number;\n pageSize: number;\n total: number;\n pageCount: number;\n}\n\n@Directive({ selector: 'ng-template[ngbCell]', standalone: true })\nexport class NgbCellTemplate<T = any> {\n @Input('ngbCell') field!: string;\n constructor(public readonly template: TemplateRef<CellCtx<T>>) {}\n}\n\n@Directive({ selector: 'ng-template[ngbEditor]', standalone: true })\nexport class NgbEditorTemplate<T = any> {\n @Input('ngbEditor') field!: string;\n constructor(public readonly template: TemplateRef<EditCtx<T>>) {}\n}\n\n@Directive({ selector: 'ng-template[ngbFilter]', standalone: true })\nexport class NgbFilterTemplate<T = any> {\n @Input('ngbFilter') field!: string;\n constructor(public readonly template: TemplateRef<FilterCtx<T>>) {}\n}\n\n@Directive({ selector: 'ng-template[ngbFilterMenu]', standalone: true })\nexport class NgbFilterMenuTemplate<T = any> {\n @Input('ngbFilterMenu') field!: string;\n constructor(public readonly template: TemplateRef<FilterCtx<T>>) {}\n}\n\n@Directive({ selector: 'ng-template[ngbGlobalFilter]', standalone: true })\nexport class NgbGlobalFilterTemplate {\n constructor(public readonly template: TemplateRef<GlobalFilterCtx>) {}\n}\n\n\n@Directive({ selector: 'ng-template[ngbRowDetail]', standalone: true })\nexport class NgbRowDetailTemplate<T = any> {\n constructor(public readonly template: TemplateRef<{ $implicit: T; index: number }>) {}\n}\n\n@Directive({ selector: 'ng-template[ngbPager]', standalone: true })\nexport class NgbPagerTemplate<T = any> {\n constructor(public readonly template: TemplateRef<PagerCtx<T>>) {}\n}\n\n/** Handy constant to import in consumer apps */\nexport const DATAGRID_TEMPLATE_DIRECTIVES = [\n NgbCellTemplate,\n NgbEditorTemplate,\n NgbFilterTemplate,\n NgbFilterMenuTemplate,\n NgbGlobalFilterTemplate,\n NgbRowDetailTemplate,\n NgbPagerTemplate,\n];\n","import { ColumnType } from './column-def';\n\nexport type NgbFilterMode = 'row' | 'menu' | 'multi' | 'none';\nexport type NgbFilterable = boolean | 'row' | 'menu' | 'multi' | 'none';\n\nexport type NgbFilterOperator =\n | 'contains'\n | 'doesnotcontain'\n | 'eq'\n | 'neq'\n | 'startswith'\n | 'endswith'\n | 'gt'\n | 'gte'\n | 'lt'\n | 'lte'\n | 'isnull'\n | 'isnotnull'\n | 'isempty'\n | 'isnotempty';\n\nexport interface NgbFilterDescriptor {\n field: string;\n operator: NgbFilterOperator;\n value?: any;\n ignoreCase?: boolean;\n}\n\n/** Single condition in a column filter menu or layout-toolbar filter tool. */\nexport interface NgbMenuFilterConditionDraft {\n operator: NgbFilterOperator;\n value: any;\n}\n\nexport interface NgbCompositeFilterDescriptor {\n logic: 'and' | 'or';\n filters: Array<NgbFilterDescriptor | NgbCompositeFilterDescriptor>;\n}\n\nexport interface NgbFilterState {\n global?: string;\n root: NgbCompositeFilterDescriptor;\n}\n\nexport type NgbColumnFilterType = 'text' | 'numeric' | 'boolean' | 'date' | 'select';\n\nexport const NGB_TEXT_FILTER_OPERATORS: NgbFilterOperator[] = [\n 'eq',\n 'neq',\n 'contains',\n 'doesnotcontain',\n 'startswith',\n 'endswith'\n];\n\nexport const NGB_NUMERIC_FILTER_OPERATORS: NgbFilterOperator[] = [\n 'eq',\n 'neq',\n 'gte',\n 'gt',\n 'lte',\n 'lt'\n];\n\nexport const NGB_BOOLEAN_FILTER_OPERATORS: NgbFilterOperator[] = ['eq', 'neq', 'isnull', 'isnotnull'];\n\nexport const NGB_DATE_FILTER_OPERATORS: NgbFilterOperator[] = [\n 'eq',\n 'neq',\n 'gte',\n 'gt',\n 'lte',\n 'lt'\n];\n\nexport const NGB_SELECT_FILTER_OPERATORS: NgbFilterOperator[] = [\n 'contains',\n 'doesnotcontain',\n 'eq',\n 'neq',\n 'isempty',\n 'isnotempty',\n 'isnull',\n 'isnotnull'\n];\n\nexport function ngbColumnTypeToFilterType(type?: ColumnType): NgbColumnFilterType {\n switch (type) {\n case 'number':\n return 'numeric';\n case 'boolean':\n return 'boolean';\n case 'date':\n return 'date';\n case 'select':\n return 'select';\n default:\n return 'text';\n }\n}\n\nexport function ngbDefaultFilterOperator(type: NgbColumnFilterType): NgbFilterOperator {\n switch (type) {\n case 'numeric':\n case 'boolean':\n return 'eq';\n case 'date':\n return 'gte';\n default:\n return 'contains';\n }\n}\n\nexport function ngbAllowedFilterOperators(type: NgbColumnFilterType): NgbFilterOperator[] {\n switch (type) {\n case 'numeric':\n return [...NGB_NUMERIC_FILTER_OPERATORS];\n case 'boolean':\n return [...NGB_BOOLEAN_FILTER_OPERATORS];\n case 'date':\n return [...NGB_DATE_FILTER_OPERATORS];\n case 'select':\n return [...NGB_SELECT_FILTER_OPERATORS];\n default:\n return [...NGB_TEXT_FILTER_OPERATORS];\n }\n}\n\nexport function ngbFilterOperatorLabel(operator: NgbFilterOperator, type: NgbColumnFilterType = 'text'): string {\n if (type === 'date') {\n switch (operator) {\n case 'eq': return 'Is equal to';\n case 'neq': return 'Is not equal to';\n case 'gte': return 'Is after or equal to';\n case 'gt': return 'Is after';\n case 'lte': return 'Is before or equal to';\n case 'lt': return 'Is before';\n default: break;\n }\n }\n if (type === 'numeric') {\n switch (operator) {\n case 'eq': return 'Is equal to';\n case 'neq': return 'Is not equal to';\n case 'gte': return 'Is greater than or equal to';\n case 'gt': return 'Is greater than';\n case 'lte': return 'Is less than or equal to';\n case 'lt': return 'Is less than';\n default: break;\n }\n }\n if (type === 'text' || type === 'select') {\n switch (operator) {\n case 'eq': return 'Is equal to';\n case 'neq': return 'Is not equal to';\n case 'contains': return 'Contains';\n case 'doesnotcontain': return 'Does not contain';\n case 'startswith': return 'Starts with';\n case 'endswith': return 'Ends with';\n default: break;\n }\n }\n const labels: Record<NgbFilterOperator, string> = {\n contains: 'Contains',\n doesnotcontain: 'Does not contain',\n eq: 'Equals',\n neq: 'Does not equal',\n startswith: 'Starts with',\n endswith: 'Ends with',\n gt: 'Greater than',\n gte: 'Greater than or equal',\n lt: 'Less than',\n lte: 'Less than or equal',\n isnull: 'Is null',\n isnotnull: 'Is not null',\n isempty: 'Is empty',\n isnotempty: 'Is not empty'\n };\n return labels[operator];\n}\n\nexport function ngbIsCompositeFilter(\n filter: NgbFilterDescriptor | NgbCompositeFilterDescriptor\n): filter is NgbCompositeFilterDescriptor {\n return Array.isArray((filter as NgbCompositeFilterDescriptor).filters);\n}\n\n/** Recursively collects leaf filter descriptors from a composite filter tree. */\nexport function ngbFlattenFilterDescriptors(\n composite: NgbCompositeFilterDescriptor | null | undefined\n): NgbFilterDescriptor[] {\n if (!composite?.filters?.length) return [];\n const descriptors: NgbFilterDescriptor[] = [];\n for (const item of composite.filters) {\n if (ngbIsCompositeFilter(item)) {\n descriptors.push(...ngbFlattenFilterDescriptors(item));\n } else {\n descriptors.push(item);\n }\n }\n return descriptors;\n}\n\n/** Returns the first leaf descriptor for `field`, searching nested composite nodes. */\nexport function ngbFindFieldFilterDescriptor(\n composite: NgbCompositeFilterDescriptor | null | undefined,\n field: string\n): NgbFilterDescriptor | null {\n return ngbFlattenFilterDescriptors(composite).find((descriptor) => descriptor.field === field) ?? null;\n}\n\nfunction ngbWithoutFieldFilters(\n filters: Array<NgbFilterDescriptor | NgbCompositeFilterDescriptor>,\n field: string\n): Array<NgbFilterDescriptor | NgbCompositeFilterDescriptor> {\n return filters.filter((filter) => {\n if (ngbIsCompositeFilter(filter)) {\n return !filter.filters.every((item) => !ngbIsCompositeFilter(item) && item.field === field);\n }\n return filter.field !== field;\n });\n}\n\nexport function ngbOperatorRequiresFilterValue(operator: NgbFilterOperator): boolean {\n return !['isnull', 'isnotnull', 'isempty', 'isnotempty'].includes(operator);\n}\n\n/**\n * Returns a new composite filter with the field set (or removed when value is empty).\n * Supports manual `filterChange(root)` updates from custom filter templates.\n */\nexport function ngbSetFieldFilter(\n composite: NgbCompositeFilterDescriptor,\n field: string,\n operator: NgbFilterOperator,\n value?: any,\n options?: { requiresValue?: (operator: NgbFilterOperator) => boolean }\n): NgbCompositeFilterDescriptor {\n const requiresValue = options?.requiresValue ?? ngbOperatorRequiresFilterValue;\n const filters = ngbWithoutFieldFilters([...composite.filters], field);\n if (requiresValue(operator)) {\n const normalized = value === undefined ? null : value;\n if (normalized === null || normalized === '') {\n return { logic: composite.logic, filters };\n }\n filters.push({ field, operator, value: normalized, ignoreCase: true });\n } else {\n filters.push({ field, operator, ignoreCase: true });\n }\n return { logic: composite.logic, filters };\n}\n","import {\n NgbColumnFilterType,\n NgbCompositeFilterDescriptor,\n NgbFilterDescriptor,\n NgbFilterOperator,\n ngbColumnTypeToFilterType,\n ngbIsCompositeFilter,\n ngbOperatorRequiresFilterValue,\n} from './models/filtering';\nimport {\n NgbDataGridAggregateDescriptor,\n NgbDataGridAggregateResults,\n NgbDataGridDataResult,\n NgbDataGridProcessOptions,\n NgbDataGridSortDescriptor,\n NgbDataGridState,\n} from './datagrid.types';\n\ntype ColumnMeta<T> = NonNullable<NgbDataGridProcessOptions<T>['columns']>[number];\n\nconst EMPTY_FILTER: NgbCompositeFilterDescriptor = { logic: 'and', filters: [] };\n\nexport function ngbApplyDataGridOperations<T>(\n data: readonly T[] | null | undefined,\n options: NgbDataGridProcessOptions<T> = {},\n): NgbDataGridDataResult<T> {\n const state = options.state ?? {};\n const rows = [...(data ?? [])];\n const columns = options.columns ?? [];\n const filtered = applyGlobalFilter(\n applyCompositeFilter(rows, state.filter ?? EMPTY_FILTER, columns),\n state.globalFilter,\n options.globalFilterFields ?? columns.map((column) => String(column.field)),\n );\n const sorted = applySort(filtered, state.sort ?? []);\n const total = sorted.length;\n const aggregates = ngbCalculateDataGridAggregates(sorted, options.aggregates ?? []);\n const page = options.page === false ? sorted : applyPage(sorted, state);\n\n return {\n data: page,\n total,\n ...(Object.keys(aggregates).length ? { aggregates } : {}),\n };\n}\n\nexport function ngbCalculateDataGridAggregates<T>(\n data: readonly T[] | null | undefined,\n descriptors: readonly NgbDataGridAggregateDescriptor[] | null | undefined,\n): NgbDataGridAggregateResults {\n const rows = [...(data ?? [])];\n const results: NgbDataGridAggregateResults = {};\n\n for (const descriptor of descriptors ?? []) {\n const field = descriptor.field;\n const bucket = results[field] ?? {};\n const values = rows\n .map((row) => (row as Record<string, unknown>)?.[field])\n .filter((value) => value !== null && value !== undefined && value !== '');\n\n switch (descriptor.aggregate) {\n case 'count':\n bucket.count = values.length;\n break;\n case 'sum':\n bucket.sum = numericValues(values).reduce((sum, value) => sum + value, 0);\n break;\n case 'average': {\n const numbers = numericValues(values);\n bucket.average = numbers.length ? numbers.reduce((sum, value) => sum + value, 0) / numbers.length : null;\n break;\n }\n case 'min':\n bucket.min = minMax(values, 'min');\n break;\n case 'max':\n bucket.max = minMax(values, 'max');\n break;\n default:\n break;\n }\n\n results[field] = bucket;\n }\n\n return results;\n}\n\nfunction applyCompositeFilter<T>(\n rows: T[],\n filter: NgbCompositeFilterDescriptor,\n columns: readonly ColumnMeta<T>[],\n): T[] {\n if (!filter.filters.length) return rows;\n return rows.filter((row) => matchesComposite(row, filter, columns));\n}\n\nfunction matchesComposite<T>(\n row: T,\n filter: NgbCompositeFilterDescriptor,\n columns: readonly ColumnMeta<T>[],\n): boolean {\n if (!filter.filters.length) return true;\n const results = filter.filters.map((item) =>\n ngbIsCompositeFilter(item) ? matchesComposite(row, item, columns) : matchesDescriptor(row, item, columns),\n );\n return filter.logic === 'or' ? results.some(Boolean) : results.every(Boolean);\n}\n\nfunction matchesDescriptor<T>(\n row: T,\n descriptor: NgbFilterDescriptor,\n columns: readonly ColumnMeta<T>[],\n): boolean {\n const raw = (row as Record<string, unknown>)?.[descriptor.field];\n const column = columns.find((item) => String(item.field) === descriptor.field);\n const filterType = resolveFilterType(column, raw, descriptor.value);\n const cellValue = normalizeFilterValue(raw, filterType);\n const compareValue = normalizeFilterValue(descriptor.value, filterType);\n const ignoreCase = descriptor.ignoreCase ?? (filterType === 'text' || filterType === 'select');\n\n if (descriptor.operator === 'isnull') return raw == null;\n if (descriptor.operator === 'isnotnull') return raw != null;\n if (descriptor.operator === 'isempty') return raw === '';\n if (descriptor.operator === 'isnotempty') return raw !== '' && raw != null;\n if (ngbOperatorRequiresFilterValue(descriptor.operator) && (descriptor.value === '' || descriptor.value == null)) {\n return true;\n }\n\n if (filterType === 'numeric' || filterType === 'date') {\n const left = cellValue as number | null;\n const right = compareValue as number | null;\n if (left == null || right == null) return false;\n return compareByOperator(left, right, descriptor.operator);\n }\n\n if (filterType === 'boolean') {\n switch (descriptor.operator) {\n case 'eq':\n return cellValue === compareValue;\n case 'neq':\n return cellValue !== compareValue;\n default:\n return false;\n }\n }\n\n const left = String(cellValue ?? '');\n const right = String(compareValue ?? '');\n const normalizedLeft = ignoreCase ? left.toLowerCase() : left;\n const normalizedRight = ignoreCase ? right.toLowerCase() : right;\n switch (descriptor.operator) {\n case 'contains':\n return normalizedLeft.includes(normalizedRight);\n case 'doesnotcontain':\n return !normalizedLeft.includes(normalizedRight);\n case 'eq':\n return normalizedLeft === normalizedRight;\n case 'neq':\n return normalizedLeft !== normalizedRight;\n case 'startswith':\n return normalizedLeft.startsWith(normalizedRight);\n case 'endswith':\n return normalizedLeft.endsWith(normalizedRight);\n default:\n return false;\n }\n}\n\nfunction applyGlobalFilter<T>(rows: T[], rawFilter: string | null | undefined, fields: readonly string[]): T[] {\n const filter = String(rawFilter ?? '').trim().toLowerCase();\n if (!filter) return rows;\n return rows.filter((row) => {\n const source = row as Record<string, unknown>;\n const searchFields = fields.length ? fields : Object.keys(source);\n return searchFields.some((field) => String(source[field] ?? '').toLowerCase().includes(filter));\n });\n}\n\nfunction applySort<T>(rows: T[], descriptors: readonly NgbDataGridSortDescriptor[]): T[] {\n const sort = descriptors.filter((descriptor) => descriptor.field && descriptor.direction);\n if (!sort.length) return rows;\n return [...rows].sort((left, right) => {\n for (const descriptor of sort) {\n const result = compareValues(\n (left as Record<string, unknown>)?.[descriptor.field],\n (right as Record<string, unknown>)?.[descriptor.field],\n );\n if (result !== 0) return descriptor.direction === 'asc' ? result : -result;\n }\n return 0;\n });\n}\n\nfunction applyPage<T>(rows: T[], state: NgbDataGridState): T[] {\n const pageSize = Number(state.pageSize);\n if (!Number.isFinite(pageSize) || pageSize <= 0) return rows;\n const skip = Number.isFinite(Number(state.skip))\n ? Math.max(0, Math.trunc(Number(state.skip)))\n : Math.max(0, (Math.max(1, Math.trunc(Number(state.page) || 1)) - 1) * pageSize);\n return rows.slice(skip, skip + pageSize);\n}\n\nfunction resolveFilterType<T>(\n column: ColumnMeta<T> | undefined,\n raw: unknown,\n value: unknown,\n): NgbColumnFilterType {\n if (column?.filterType) return column.filterType as NgbColumnFilterType;\n if (column?.type) return ngbColumnTypeToFilterType(column.type as any);\n if (typeof raw === 'number' || typeof value === 'number') return 'numeric';\n if (typeof raw === 'boolean' || typeof value === 'boolean') return 'boolean';\n if (raw instanceof Date || value instanceof Date) return 'date';\n return 'text';\n}\n\nfunction normalizeFilterValue(value: unknown, type: NgbColumnFilterType): unknown {\n if (value === '' || value === undefined || value === null) return null;\n switch (type) {\n case 'numeric': {\n const parsed = Number(value);\n return Number.isNaN(parsed) ? null : parsed;\n }\n case 'date': {\n const parsed = value instanceof Date ? value.getTime() : Date.parse(String(value));\n return Number.isNaN(parsed) ? null : parsed;\n }\n case 'boolean':\n if (value === 'true') return true;\n if (value === 'false') return false;\n return !!value;\n default:\n return String(value);\n }\n}\n\nfunction compareByOperator(left: number, right: number, operator: NgbFilterOperator): boolean {\n switch (operator) {\n case 'eq':\n return left === right;\n case 'neq':\n return left !== right;\n case 'gt':\n return left > right;\n case 'gte':\n return left >= right;\n case 'lt':\n return left < right;\n case 'lte':\n return left <= right;\n default:\n return false;\n }\n}\n\nfunction compareValues(left: unknown, right: unknown): number {\n if (left == null && right == null) return 0;\n if (left == null) return -1;\n if (right == null) return 1;\n const leftNumber = Number(left);\n const rightNumber = Number(right);\n if (!Number.isNaN(leftNumber) && !Number.isNaN(rightNumber)) {\n return leftNumber - rightNumber;\n }\n return String(left).localeCompare(String(right), undefined, { numeric: true, sensitivity: 'base' });\n}\n\nfunction numericValues(values: unknown[]): number[] {\n return values.map((value) => Number(value)).filter((value) => Number.isFinite(value));\n}\n\nfunction minMax(values: unknown[], mode: 'min' | 'max'): number | string | Date | null {\n if (!values.length) return null;\n return values.reduce((winner, candidate) => {\n const result = compareValues(candidate, winner);\n return mode === 'min' ? (result < 0 ? candidate : winner) : (result > 0 ? candidate : winner);\n }) as number | string | Date | null;\n}\n","import { inject, Injectable } from \"@angular/core\";\n\nexport interface PdfExportPayload { fileName: string; columns: string[]; rows: any[]; options?: any; }\nexport interface ExcelExportPayload { fileName: string; sheetName: string; columns: Array<{ key: string; title: string }>; rows: any[]; }\n\nexport abstract class PdfExportAdapter { abstract export(p: PdfExportPayload): Promise<void>; }\nexport abstract class ExcelExportAdapter { abstract export(p: ExcelExportPayload): Promise<void>; }\n\n@Injectable({ providedIn: 'root' })\nexport class NgbExportService {\n // Optional injections via inject()\n private pdf = inject(PdfExportAdapter, { optional: true });\n private excel = inject(ExcelExportAdapter, { optional: true });\n\n exportPdf(p: PdfExportPayload) {\n if (!this.pdf) throw new Error('No PdfExportAdapter provided');\n return this.pdf.export(p);\n }\n\n exportExcel(p: ExcelExportPayload) {\n if (!this.excel) throw new Error('No ExcelExportAdapter provided');\n return this.excel.export(p);\n }\n}","import { signal } from '@angular/core';\n\nexport type NgbDatagridTrackByFn<T> = (index: number, row: T) => any;\n\nexport interface NgbDatagridEditService<T> {\n /**\n * Create a new row in the provided data set.\n * Implementations may mark the row as \"new\" until `saveChanges` is called.\n */\n create(data: readonly T[], newRow: T, rowIndex: number, rowId: any): T[];\n\n /**\n * Update an existing row in the provided data set.\n * Implementations may snapshot the original row to support `cancelChanges` and `hasChanges`.\n */\n update(data: readonly T[], updatedRow: T, rowIndex: number, rowId: any): T[];\n\n /**\n * Remove a row from the provided data set.\n */\n remove(data: readonly T[], rowIndex: number, rowId: any): T[];\n\n /**\n * Used by the datagrid while editing to compute a new row instance.\n * Default behavior is a shallow merge of the values into the row.\n */\n assignValues(row: T, values: Partial<T>): T;\n\n /**\n * Whether this row is considered newly created (not yet saved).\n */\n isNew(rowId: any): boolean;\n\n /**\n * Whether the row differs from its captured baseline (after `update`/`create` starts tracking).\n */\n hasChanges(rowId: any, currentRow: T): boolean;\n\n /**\n * Commit current changes (and clear tracking state) for the row.\n */\n saveChanges(data: readonly T[], rowIndex: number, rowId: any, currentRow: T): T[];\n\n /**\n * Revert tracked changes for the row (or remove it if it was new).\n */\n cancelChanges(data: readonly T[], rowIndex: number, rowId: any): T[];\n}\n\nconst clone = <T>(value: T): T => {\n try {\n // Prefer structuredClone when available.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return (globalThis as any).structuredClone ? (globalThis as any).structuredClone(value) : JSON.parse(JSON.stringify(value));\n } catch {\n return value;\n }\n};\n\nconst shallowEqual = (a: any, b: any): boolean => {\n if (a === b) return true;\n if (!a || !b) return false;\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) return false;\n for (const key of aKeys) {\n if (a[key] !== b[key]) return false;\n }\n return true;\n};\n\nexport class NgbDatagridDefaultEditService<T> implements NgbDatagridEditService<T> {\n private originals = signal<Array<{ id: any; row: T }>>([]);\n private newRows = signal<any[]>([]);\n\n create(data: readonly T[], newRow: T, _rowIndex: number, rowId: any): T[] {\n this.newRows.update((ids) => (ids.some((id) => Object.is(id, rowId)) ? ids : [...ids, rowId]));\n // Baseline for a new row is itself until saved/cancelled.\n this.originals.update((items) => {\n if (items.some((it) => Object.is(it.id, rowId))) return items;\n return [...items, { id: rowId, row: clone(newRow) }];\n });\n return [...data, newRow];\n }\n\n update(data: readonly T[], updatedRow: T, rowIndex: number, rowId: any): T[] {\n // Snapshot original the first time we see this rowId.\n const hasBaseline = this.originals().some((it) => Object.is(it.id, rowId));\n if (!hasBaseline) {\n const current = data[rowIndex];\n if (current != null) {\n this.originals.update((items) => [...items, { id: rowId, row: clone(current as any) }]);\n }\n }\n return this.replaceRow(data, updatedRow, rowIndex);\n }\n\n remove(data: readonly T[], rowIndex: number, rowId: any): T[] {\n this.newRows.update((ids) => ids.filter((id) => !Object.is(id, rowId)));\n this.originals.update((items) => items.filter((it) => !Object.is(it.id, rowId)));\n return this.removeRow(data, rowIndex);\n }\n\n assignValues(row: T, values: Partial<T>): T {\n return { ...(row as any), ...(values as any) } as T;\n }\n\n isNew(rowId: any): boolean {\n return this.newRows().some((id) => Object.is(id, rowId));\n }\n\n hasChanges(rowId: any, currentRow: T): boolean {\n const baseline = this.originals().find((it) => Object.is(it.id, rowId))?.row;\n if (!baseline) return false;\n return !shallowEqual(baseline as any, currentRow as any);\n }\n\n saveChanges(data: readonly T[], _rowIndex: number, rowId: any, currentRow: T): T[] {\n this.newRows.update((ids) => ids.filter((id) => !Object.is(id, rowId)));\n // Once saved, clear baseline tracking (no longer \"dirty\").\n this.originals.update((items) => items.filter((it) => !Object.is(it.id, rowId)));\n // Data is already updated by `create` or `update` at this point.\n return data.slice();\n }\n\n cancelChanges(data: readonly T[], rowIndex: number, rowId: any): T[] {\n if (this.newRows().some((id) => Object.is(id, rowId))) {\n this.newRows.update((ids) => ids.filter((id) => !Object.is(id, rowId)));\n this.originals.update((items) => items.filter((it) => !Object.is(it.id, rowId)));\n return this.removeRow(data, rowIndex);\n }\n const baseline = this.originals().find((it) => Object.is(it.id, rowId))?.row;\n this.originals.update((items) => items.filter((it) => !Object.is(it.id, rowId)));\n if (!baseline) return data.slice();\n return this.replaceRow(data, baseline, rowIndex);\n }\n\n private replaceRow(data: readonly T[], updatedRow: T, rowIndex: number): T[] {\n if (rowIndex < 0 || rowIndex >= data.length) return data.slice();\n const copy = data.slice();\n (copy as any)[rowIndex] = updatedRow;\n return copy;\n }\n\n private removeRow(data: readonly T[], rowIndex: number): T[] {\n if (rowIndex < 0 || rowIndex >= data.length) return data.slice();\n return data.filter((_, i) => i !== rowIndex);\n }\n}\n","import { PdfExportAdapter, PdfExportPayload } from '../services/export.services';\n\nexport class JsPdfAdapter implements PdfExportAdapter {\n async export({ fileName, columns, rows, options }: PdfExportPayload) {\n const { jsPDF } = await import(/* webpackIgnore: true */ 'jspdf');\n const autoTable = (await import(/* webpackIgnore: true */ 'jspdf-autotable')).default;\n const doc = new jsPDF({ orientation: options?.landscape ? 'landscape' : 'portrait' });\n autoTable(doc, { head: [columns], body: rows.map(r => columns.map(k => r[k])), margin: options?.margins });\n doc.save(`${fileName}.pdf`);\n }\n}\n","import { ExcelExportAdapter, ExcelExportPayload } from '../services/export.services';\n\nexport class XlsxAdapter implements ExcelExportAdapter {\n async export({ fileName, sheetName, columns, rows }: ExcelExportPayload) {\n const XLSX = await import(/* webpackIgnore: true */ 'xlsx');\n const header = [columns.map(c => c.title)];\n const data = rows.map(r => columns.map(c => r[c.key]));\n const ws = XLSX.utils.aoa_to_sheet([...header, ...data]);\n const wb = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(wb, ws, sheetName);\n XLSX.writeFile(wb, `${fileName}.xlsx`);\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\nexport interface ExportButtonContext {\n $implicit: (kind: 'pdf' | 'excel') => void; // let-trigger\n}\n\n// eslint-disable-next-line @angular-eslint/directive-selector\n@Directive({ selector: '[ngbExportButton]' })\nexport class ExportButtonDirective {\n // Expose the TemplateRef so the grid can render it with a context\n readonly templateRef = inject<TemplateRef<ExportButtonContext>>(TemplateRef as any);\n}","import { Directive, Input } from '@angular/core';\nimport { ColumnDef, ColumnType } from '../models/column-def';\nimport { NgbColumnFilterType, NgbFilterOperator } from '../models/filtering';\n\n@Directive({\n selector: 'ngb-grid-column',\n standalone: true\n})\nexport class NgbGridColumnDirective<T = any> implements ColumnDef<T> {\n @Input() field!: Extract<keyof T, string>;\n @Input() header!: string;\n @Input() title?: string;\n @Input() cellTitle?: string | ((row: T) => string);\n @Input() sortable?: boolean;\n @Input() filterable?: boolean;\n @Input() filterType?: NgbColumnFilterType;\n @Input() defaultFilterOperator?: NgbFilterOperator;\n @Input() allowedFilterOperators?: NgbFilterOperator[];\n @Input() showFilterMenu?: boolean;\n @Input() showFilterRow?: boolean;\n @Input() showFilterOperator?: boolean;\n @Input() editable?: boolean;\n @Input() type?: ColumnType;\n @Input() options?: Array<{ label: string; value: any }>;\n @Input() width?: number;\n @Input() stackedGroup?: 'start' | 'center' | 'end';\n @Input() required?: boolean;\n @Input() hidden?: boolean;\n @Input() sticky?: boolean | 'start' | 'end';\n @Input() locked?: boolean;\n @Input() reorderable?: boolean;\n @Input() resizable?: boolean;\n @Input() minResizableWidth?: number;\n @Input() maxResizableWidth?: number;\n\n toColumnDef(): ColumnDef<T> {\n return {\n field: this.field,\n header: this.header,\n title: this.title,\n cellTitle: this.cellTitle,\n sortable: this.sortable,\n filterable: this.filterable,\n filterType: this.filterType,\n defaultFilterOperator: this.defaultFilterOperator,\n allowedFilterOperators: this.allowedFilterOperators,\n showFilterMenu: this.showFilterMenu,\n showFilterRow: this.showFilterRow,\n showFilterOperator: this.showFilterOperator,\n editable: this.editable,\n type: this.type,\n options: this.options,\n width: this.width,\n stackedGroup: this.stackedGroup,\n required: this.required,\n hidden: this.hidden,\n sticky: this.sticky,\n locked: this.locked,\n reorderable: this.reorderable,\n resizable: this.resizable,\n minResizableWidth: this.minResizableWidth,\n maxResizableWidth: this.maxResizableWidth\n };\n }\n}\n\nexport const DATAGRID_COLUMN_DIRECTIVES = [NgbGridColumnDirective];\n","import { Directive, HostBinding, Input } from '@angular/core';\n\nexport type NgbDatagridButtonVariant =\n | 'primary'\n | 'secondary'\n | 'success'\n | 'danger'\n | 'neutral'\n | 'icon';\n\n@Directive({\n selector: 'button[ngbDatagridButton], a[ngbDatagridButton]',\n standalone: true,\n})\nexport class NgbDatagridButtonDirective {\n @Input('ngbDatagridButton') variant: NgbDatagridButtonVariant = 'secondary';\n\n @HostBinding('class.datagrid-toolbar__button') get toolbarButtonClass(): boolean {\n return this.variant === 'primary' || this.variant === 'secondary';\n }\n\n @HostBinding('class.datagrid-toolbar__button--primary') get toolbarPrimary(): boolean {\n return this.variant === 'primary';\n }\n\n @HostBinding('class.datagrid-toolbar__button--secondary') get toolbarSecondary(): boolean {\n return this.variant === 'secondary';\n }\n\n @HostBinding('class.grid-row-action') get rowActionClass(): boolean {\n return this.variant === 'success' || this.variant === 'danger' || this.variant === 'neutral';\n }\n\n @HostBinding('class.grid-row-action--success') get rowSuccess(): boolean {\n return this.variant === 'success';\n }\n\n @HostBinding('class.grid-row-action--danger') get rowDanger(): boolean {\n return this.variant === 'danger';\n }\n\n @HostBinding('class.grid-row-action--neutral') get rowNeutral(): boolean {\n return this.variant === 'neutral';\n }\n\n @HostBinding('class.grid-filter-menu-trigger') get iconButtonClass(): boolean {\n return this.variant === 'icon';\n }\n}\n","import { Directive, HostBinding, Input } from '@angular/core';\n\n@Directive({\n selector: 'input[ngbDatagridControl], select[ngbDatagridControl], textarea[ngbDatagridControl]',\n standalone: true,\n})\nexport class NgbDatagridControlDirective {\n @Input() ngbDatagridControlMode: 'filter' | 'edit' = 'filter';\n\n @HostBinding('class.grid-filter-control') get filterClass(): boolean {\n return this.ngbDatagridControlMode === 'filter';\n }\n\n @HostBinding('class.grid-edit-control') get editClass(): boolean {\n return this.ngbDatagridControlMode === 'edit';\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { ControlContainer, FormGroupDirective, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgbDatagridButtonDirective } from '../../foundation/datagrid-button.directive';\nimport { NgbDatagridControlDirective } from '../../foundation/datagrid-control.directive';\n\n@Component({\n selector: 'tr[ngbDatagridAddRow]',\n standalone: true,\n imports: [CommonModule, FormsModule, ReactiveFormsModule, NgbDatagridButtonDirective, NgbDatagridControlDirective],\n viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }],\n template: `\n @if (grid.showSelectionColumn()) {\n <td\n [style.width.px]=\"grid.utilityColumnWidth('selection')\"\n [class.column-pinned-start]=\"grid.shouldPinLeadingUtilityColumns()\"\n [style.left.px]=\"grid.utilityStickyOffset('selection')\"\n ></td>\n }\n @if (grid.rowDetailTpl) {\n <td\n [style.width.px]=\"grid.utilityColumnWidth('detail')\"\n [class.column-pinned-start]=\"grid.shouldPinLeadingUtilityColumns()\"\n [style.left.px]=\"grid.utilityStickyOffset('detail')\"\n ></td>\n }\n @if (grid.stickyRowsEnabled) {\n <td\n class=\"text-center\"\n [style.width.px]=\"grid.utilityColumnWidth('sticky-toggle')\"\n [class.column-pinned-start]=\"grid.shouldPinLeadingUtilityColumns()\"\n [style.left.px]=\"grid.utilityStickyOffset('sticky-toggle')\"\n ></td>\n }\n\n @for (col of grid.visibleColumns; track col.field) {\n <td\n [attr.data-title]=\"col.header\"\n [class.column-pinned-start]=\"grid.columnPinnedSide(col) === 'start'\"\n [class.column-pinned-end]=\"grid.columnPinnedSide(col) === 'end'\"\n [style.left.px]=\"grid.columnStartOffset(col)\"\n [style.right.px]=\"grid.columnEndOffset(col)\"\n >\n @switch (col.type) {\n @case ('boolean') {\n <div\n class=\"form-check m-0 grid-edit-boolean\"\n [class.is-invalid]=\"\n (grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) &&\n grid.addForm.get(col.field)?.invalid\n \"\n >\n <input\n type=\"checkbox\"\n class=\"form-check-input grid-edit-checkbox\"\n [formControlName]=\"col.field\"\n [attr.aria-label]=\"grid.inputAriaLabel(col)\"\n [attr.aria-invalid]=\"\n (grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) &&\n grid.addForm.get(col.field)?.invalid\n ? 'true'\n : null\n \"\n [attr.aria-describedby]=\"\n (grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) &&\n grid.addForm.get(col.field)?.invalid\n ? 'add-error-' + col.field\n : null\n \"\n />\n </div>\n }\n\n @case ('select') {\n <select\n ngbDatagridControl\n [ngbDatagridControlMode]=\"'edit'\"\n [class.is-invalid]=\"\n (grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) &&\n grid.addForm.get(col.field)?.invalid\n \"\n [formControlName]=\"col.field\"\n [attr.aria-label]=\"grid.inputAriaLabel(col)\"\n [attr.aria-invalid]=\"\n (grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) &&\n grid.addForm.get(col.field)?.invalid\n ? 'true'\n : null\n \"\n [attr.aria-describedby]=\"\n (grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) &&\n grid.addForm.get(col.field)?.invalid\n ? 'add-error-' + col.field\n : null\n \"\n >\n @for (option of col.options ?? []; track option.value) {\n <option [ngValue]=\"option.value\">{{ option.label }}</option>\n }\n </select>\n }\n\n @default {\n <input\n ngbDatagridControl\n [ngbDatagridControlMode]=\"'edit'\"\n [class.is-invalid]=\"\n (grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) &&\n grid.addForm.get(col.field)?.invalid\n \"\n [attr.type]=\"\n col.type === 'number'\n ? 'number'\n : col.type === 'email'\n ? 'email'\n : col.type === 'date'\n ? 'date'\n : 'text'\n \"\n [formControlName]=\"col.field\"\n [attr.aria-label]=\"grid.inputAriaLabel(col)\"\n [attr.aria-invalid]=\"\n (grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) &&\n grid.addForm.get(col.field)?.invalid\n ? 'true'\n : null\n \"\n [attr.aria-describedby]=\"\n (grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) &&\n grid.addForm.get(col.field)?.invalid\n ? 'add-error-' + col.field\n : null\n \"\n />\n }\n }\n\n @if ((grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) && grid.addForm.get(col.field)?.errors; as e) {\n <div class=\"invalid-feedback d-block\" [attr.id]=\"'add-error-' + col.field\" role=\"alert\">\n @if (e['required']) { Required }\n @if (e['email']) { Invalid email }\n @if (e['number']) { Invalid number }\n @if (e['date']) { Invalid date }\n </div>\n }\n </td>\n }\n\n @if (grid.showActionsColumn()) {\n <td class=\"text-center grid-actions-cell\" [style.width.px]=\"grid.utilityColumnWidth('actions')\">\n <div class=\"grid-actions-cell__inner\">\n <button type=\"button\" ngbDatagridButton=\"success\" (click)=\"grid.saveAdd()\" [disabled]=\"grid.addForm.invalid\">\n Save\n </button>\n <button type=\"button\" ngbDatagridButton=\"neutral\" (click)=\"grid.cancelAdd()\">\n Cancel\n </button>\n </div>\n </td>\n }\n `\n})\nexport class NgbDatagridAddRowComponent {\n @Input({ required: true }) grid!: any;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'colgroup[ngbDatagridColgroup]',\n standalone: true,\n imports: [CommonModule],\n template: `\n @if (grid.showSelectionColumn()) {\n <col [style.width.px]=\"grid.utilityColumnWidth('selection')\" />\n }\n @if (grid.rowDetailTpl) {\n <col [style.width.px]=\"grid.utilityColumnWidth('detail')\" data-fixed=\"true\" />\n }\n @if (grid.stickyRowsEnabled) {\n <col [style.width.px]=\"grid.utilityColumnWidth('sticky-toggle')\" />\n }\n @for (col of grid.visibleColumns; track col.field) {\n <col\n [style.width.px]=\"grid.columnWidth(col) || null\"\n [attr.data-fixed]=\"grid.resizable ? 'true' : null\"\n />\n }\n @if (grid.showActionsColumn()) {\n <col [style.width.px]=\"grid.utilityColumnWidth('actions')\" />\n }\n `\n})\nexport class NgbDatagridColgroupComponent {\n @Input({ required: true }) grid!: any;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { ControlContainer, FormGroupDirective, ReactiveFormsModule } from '@angular/forms';\nimport { ColumnDef } from '../../models/column-def';\nimport { NgbDatagridButtonDirective } from '../../foundation/datagrid-button.directive';\nimport { NgbDatagridControlDirective } from '../../foundation/datagrid-control.directive';\nimport type { Datagrid } from '../datagrid.component';\n\n@Component({\n selector: 'tr[ngbDatagridDataRow]',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, NgbDatagridButtonDirective, NgbDatagridControlDirective],\n viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }],\n template: `\n @if (grid.showSelectionColumn()) {\n <td\n class=\"text-center align-middle\"\n [style.width.px]=\"grid.isStackedLayout() ? null : grid.utilityColumnWidth('selection')\"\n [class.column-pinned-start]=\"grid.shouldPinLeadingUtilityColumns() && !grid.isStackedLayout()\"\n [style.left.px]=\"grid.isStackedLayout() ? null : grid.utilityStickyOffset('selection')\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"selected\"\n [disabled]=\"\n grid.selectionMode === 'none' ||\n grid.selectionBehavior === 'row' ||\n grid.isSelectionDisabled(row, index)\n \"\n (click)=\"$event.stopPropagation()\"\n (change)=\"grid.toggleSelection(index, $event)\"\n [attr.aria-label]=\"grid.rowSelectionLabel(index)\"\n />\n </td>\n }\n\n @if (grid.rowDetailTpl) {\n <td\n class=\"text-center align-middle\"\n [style.width.px]=\"grid.isStackedLayout() ? null : grid.utilityColumnWidth('detail')\"\n [class.column-pinned-start]=\"grid.shouldPinLeadingUtilityColumns() && !grid.isStackedLayout()\"\n [style.left.px]=\"grid.isStackedLayout() ? null : grid.utilityStickyOffset('detail')\"\n >\n <button\n type=\"button\"\n class=\"grid-detail-toggle\"\n (click)=\"$event.stopPropagation(); grid.toggleExpand(index)\"\n [attr.aria-expanded]=\"grid.isExpanded(index)\"\n [attr.aria-controls]=\"'dg-row-detail-' + index\"\n [attr.aria-label]=\"grid.isExpanded(index) ? grid.collapseRowAriaLabel : grid.expandRowAriaLabel\"\n >\n <span\n class=\"bi\"\n [ngClass]=\"grid.isExpanded(index) ? 'bi-chevron-down' : 'bi-chevron-right'\"\n aria-hidden=\"true\"\n ></span>\n </button>\n </td>\n }\n\n @if (grid.stickyRowsEnabled) {\n <td\n class=\"text-center align-middle\"\n data-title=\"Sticky\"\n [style.width.px]=\"grid.isStackedLayout() ? null : grid.utilityColumnWidth('sticky-toggle')\"\n [class.column-pinned-start]=\"grid.shouldPinLeadingUtilityColumns() && !grid.isStackedLayout()\"\n [style.left.px]=\"grid.isStackedLayout() ? null : grid.utilityStickyOffset('sticky-toggle')\"\n >\n <button\n type=\"button\"\n class=\"btn btn-link p-0 no-edit-trigger sticky-toggle\"\n (click)=\"$event.stopPropagation(); grid.toggleStickyRow(index)\"\n [attr.aria-pressed]=\"grid.isRowSticky(row, index)\"\n [attr.aria-label]=\"grid.stickyRowToggleAriaLabel()\"\n >\n @if (grid.stickyIcon(row, index); as icon) {\n <span class=\"bi\" [ngClass]=\"'bi-' + icon\" aria-hidden=\"true\"></span>\n }\n </button>\n </td>\n }\n\n @if (grid.isStackedCardsLayout()) {\n <td [attr.colspan]=\"grid.stackedCardColspan()\" class=\"ngb-stacked-card-cell\">\n <div class=\"ngb-stacked-card\">\n <div class=\"ngb-stacked-card__layout\">\n @for (group of grid.stackedCardGroups(); track group) {\n <div\n class=\"ngb-stacked-card__group\"\n [attr.data-stacked-group]=\"group\"\n >\n @for (col of grid.stackedColumnsInGroup(group); track col.field) {\n <div\n class=\"ngb-stacked-card__field\"\n [class.cell-highlight]=\"grid.isCellHighlighted(row, index, col, grid.visibleColumnIndex(col))\"\n [class.grid-cell--editing]=\"grid.isCellInEditMode(index, col)\"\n [class.grid-cell--incell]=\"grid.isIncellEditMode()\"\n [ngClass]=\"grid.resolveCellClass(row, index, col)\"\n [ngStyle]=\"grid.resolveCellStyle(row, index, col)\"\n (click)=\"grid.onCellClick($event, index, col)\"\n >\n <div class=\"ngb-stacked-card__label\">{{ col.header }}</div>\n <div class=\"ngb-stacked-card__value\">\n <ng-container\n *ngTemplateOutlet=\"\n dataCell;\n context: { col: col, ci: grid.visibleColumnIndex(col) }\n \"\n ></ng-container>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </td>\n } @else {\n @for (col of grid.visibleColumns; track col.field; let ci = $index) {\n <td\n role=\"gridcell\"\n [attr.data-col-index]=\"ci\"\n [attr.aria-colindex]=\"grid.ariaColIndexForDataColumn(ci)\"\n [attr.tabindex]=\"grid.cellTabIndex(index, ci)\"\n [attr.data-title]=\"grid.isStackedLayout() ? col.header : null\"\n [attr.title]=\"grid.cellTitle(row, col)\"\n [class.cell-highlight]=\"grid.isCellHighlighted(row, index, col, ci)\"\n [class.grid-cell--focused]=\"grid.isCellFocused(index, ci)\"\n [class.grid-cell--editing]=\"grid.isCellInEditMode(index, col)\"\n [class.grid-cell--incell]=\"grid.isIncellEditMode()\"\n [class.column-pinned-start]=\"grid.columnPinnedSide(col) === 'start'\"\n [class.column-pinned-end]=\"grid.columnPinnedSide(col) === 'end'\"\n [class.column-locked]=\"col.locked\"\n [ngClass]=\"grid.resolveCellClass(row, index, col)\"\n [ngStyle]=\"grid.resolveCellStyle(row, index, col)\"\n [style.width.px]=\"grid.resizable && !grid.isStackedLayout() ? grid.columnWidth(col) : null\"\n [style.min-width.px]=\"grid.resizable && !grid.isStackedLayout() ? grid.columnWidth(col) : null\"\n [style.max-width.px]=\"grid.resizable && !grid.isStackedLayout() ? grid.columnWidth(col) : null\"\n [style.left.px]=\"grid.isStackedLayout() ? null : grid.columnStartOffset(col)\"\n [style.right.px]=\"grid.isStackedLayout() ? null : grid.columnEndOffset(col)\"\n (focus)=\"grid.onDataCellFocus(index, ci)\"\n (keydown)=\"grid.onDataCellKeydown($event, index, ci, col)\"\n (click)=\"grid.onCellClick($event, index, col)\"\n >\n <ng-container *ngTemplateOutlet=\"dataCell; context: { col: col, ci: ci }\"></ng-container>\n </td>\n }\n }\n\n @if (grid.showActionsColumn()) {\n <td\n class=\"text-center grid-actions-cell\"\n [style.width.px]=\"grid.isStackedLayout() ? null : grid.utilityColumnWidth('actions')\"\n >\n <ng-container *ngTemplateOutlet=\"actionsCell\"></ng-container>\n </td>\n }\n\n <ng-template #dataCell let-col=\"col\" let-ci=\"ci\">\n @if (grid.isCellInEditMode(index, col)) {\n @if (grid.editTpls[col.field]; as et) {\n <ng-container\n [ngTemplateOutlet]=\"et.template\"\n [ngTemplateOutletContext]=\"{\n $implicit: grid.editForm.get(col.field),\n control: grid.editForm.get(col.field),\n row: row,\n col: col,\n form: grid.editForm,\n index: index,\n isNew: false,\n }\"\n >\n </ng-container>\n } @else {\n @switch (col.type) {\n @case ('boolean') {\n <div class=\"form-check m-0 grid-edit-boolean\">\n <input\n type=\"checkbox\"\n class=\"form-check-input grid-edit-checkbox\"\n [formControlName]=\"col.field\"\n [attr.aria-label]=\"grid.inputAriaLabel(col)\"\n [attr.aria-invalid]=\"\n (grid.editForm?.touched || grid.saveAttemptedEdit) &&\n grid.editForm?.get(col.field)?.invalid\n ? 'true'\n : null\n \"\n [attr.aria-describedby]=\"\n (grid.editForm?.touched || grid.saveAttemptedEdit) &&\n grid.editForm?.get(col.field)?.invalid\n ? 'edit-error-' + col.field\n : null\n \"\n />\n </div>\n }\n @case ('select') {\n <select\n ngbDatagridControl\n [ngbDatagridControlMode]=\"'edit'\"\n [formControlName]=\"col.field\"\n [attr.aria-label]=\"grid.inputAriaLabel(col)\"\n >\n @for (o of col.options ?? []; track o.value) {\n <option [ngValue]=\"o.value\">{{ o.label }}</option>\n }\n </select>\n }\n @default {\n <input\n ngbDatagridControl\n [ngbDatagridControlMode]=\"'edit'\"\n [attr.type]=\"\n col.type === 'number'\n ? 'number'\n : col.type === 'email'\n ? 'email'\n : col.type === 'date'\n ? 'date'\n : 'text'\n \"\n [formControlName]=\"col.field\"\n (keydown)=\"grid.onCellKeydown($event, index, col, ci)\"\n [attr.autofocus]=\"grid.isCellInEditMode(index, col) ? '' : null\"\n [attr.aria-label]=\"grid.inputAriaLabel(col)\"\n [attr.aria-invalid]=\"\n (grid.editForm?.touched || grid.saveAttemptedEdit) &&\n grid.editForm?.get(col.field)?.invalid\n ? 'true'\n : null\n \"\n [attr.aria-describedby]=\"\n (grid.editForm?.touched || grid.saveAttemptedEdit) &&\n grid.editForm?.get(col.field)?.invalid\n ? 'edit-error-' + col.field\n : null\n \"\n />\n }\n }\n\n @if ((grid.editForm?.touched || grid.saveAttemptedEdit) && grid.editForm?.get(col.field)?.errors; as e) {\n <div class=\"invalid-feedback d-block\" [attr.id]=\"'edit-error-' + col.field\" role=\"alert\">\n @if (e['required']) { <span>Required</span> }\n @if (e['email']) { <span>Invalid email</span> }\n @if (e['number']) { <span>Invalid number</span> }\n @if (e['date']) { <span>Invalid date</span> }\n </div>\n }\n }\n } @else {\n @if (grid.cellTpls[col.field]; as ct) {\n <ng-container\n [ngTemplateOutlet]=\"ct.template\"\n [ngTemplateOutletContext]=\"{\n $implicit: valueFor(row, col),\n row: row,\n col: col,\n index: index,\n }\"\n >\n </ng-container>\n } @else {\n <div class=\"grid-cell-content\">\n @switch (col.type) {\n @case ('boolean') {\n <span class=\"grid-boolean-pill\" [class.grid-boolean-pill--true]=\"valueFor(row, col)\">\n {{ grid.booleanDisplayLabel(!!valueFor(row, col)) }}\n </span>\n }\n @default {\n <span class=\"grid-cell-text\">\n @if (grid.isSearchHighlightEnabled() && grid.shouldHighlightSearchInColumn(col.field)) {\n @for (part of grid.getSearchHighlightSegments(valueFor(row, col), col.field); track $index) {\n @if (part.match) {\n <mark class=\"grid-search-highlight\">{{ part.text }}</mark>\n } @else {\n {{ part.text }}\n }\n }\n } @else {\n {{ grid.formatCellDisplayValue(valueFor(row, col)) }}\n }\n @if (grid.showStickyRowBadge && grid.stickyRowBadgeField === col.field && grid.isRowSticky(row, index)) {\n <span\n class=\"grid-sticky-badge\"\n >{{ grid.stickyRowBadgeLabel }}</span>\n }\n </span>\n }\n }\n </div>\n }\n }\n </ng-template>\n\n <ng-template #actionsCell>\n @if (grid.editingIndex !== index) {\n <div class=\"grid-actions-cell__inner\">\n @if (grid.showRowEditAction()) {\n <button\n type=\"button\"\n class=\"grid-row-action no-edit-trigger\"\n [class.grid-row-action--secondary]=\"grid.actionDisplay !== 'icons'\"\n [class.grid-row-action--icon]=\"grid.actionDisplay === 'icons'\"\n [class.grid-row-action--edit-icon]=\"grid.actionDisplay === 'icons'\"\n (click)=\"grid.startEdit(index)\"\n [attr.aria-label]=\"grid.editRowAriaLabel(index)\"\n >\n @if (grid.actionDisplay === 'icons') {\n <span class=\"bi bi-pencil\" aria-hidden=\"true\"></span>\n } @else {\n <span>Edit</span>\n }\n </button>\n }\n @if (grid.showRowDeleteAction()) {\n <button\n type=\"button\"\n ngbDatagridButton=\"danger\"\n class=\"no-edit-trigger\"\n [class.grid-row-action--icon]=\"grid.actionDisplay === 'icons'\"\n (click)=\"grid.deleteRow(index)\"\n [attr.aria-label]=\"grid.deleteRowAriaLabel(index)\"\n >\n @if (grid.actionDisplay === 'icons') {\n <span class=\"bi bi-trash\" aria-hidden=\"true\"></span>\n } @else {\n <span>Delete</span>\n }\n </button>\n }\n </div>\n } @else {\n <div class=\"grid-actions-cell__inner\">\n <button\n type=\"button\"\n ngbDatagridButton=\"success\"\n (click)=\"grid.saveEdit(index)\"\n [disabled]=\"grid.editForm.invalid\"\n >\n Save\n </button>\n <button\n type=\"button\"\n ngbDatagridButton=\"neutral\"\n (click)=\"grid.cancelEdit(index)\"\n >\n Cancel\n </button>\n </div>\n }\n </ng-template>\n `,\n})\nexport class NgbDatagridDataRowComponent<T = unknown> {\n @Input({ required: true }) grid!: Datagrid<T>;\n @Input({ required: true }) row!: T;\n @Input({ required: true }) index!: number;\n @Input() selected = false;\n\n valueFor(row: T, col: ColumnDef): unknown {\n return (row as Record<string, unknown>)[col.field];\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'tr[ngbDatagridDetailRow]',\n standalone: true,\n imports: [CommonModule],\n template: `\n <td [attr.colspan]=\"grid.detailColspan\" role=\"region\" class=\"grid-detail-row__cell\">\n <div class=\"grid-detail-row__content\">\n <ng-container\n [ngTemplateOutlet]=\"grid.rowDetailTpl.template\"\n [ngTemplateOutletContext]=\"{ $implicit: row, index: index }\"\n >\n </ng-container>\n </div>\n </td>\n `\n})\nexport class NgbDatagridDetailRowComponent {\n @Input({ required: true }) grid!: any;\n @Input({ required: true }) row!: any;\n @Input({ required: true }) index!: number;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { NgbPagerComponent } from '../../../../pagination';\nimport { NgbDatagridPagerPosition, ngbDatagridPagerSettings } from '../../models/datagrid-pageable';\n\n@Component({\n selector: 'ngb-datagrid-footer',\n standalone: true,\n imports: [CommonModule, NgbPagerComponent],\n template: `\n @if (grid.paginationActive && grid.pagerShowsAt(placement)) {\n @if (grid.hasCustomPagerTemplate()) {\n <div\n class=\"grid-footer grid-footer--custom\"\n [class.grid-footer--top]=\"placement === 'top'\"\n [class.grid-footer--bottom]=\"placement === 'bottom'\"\n [class.sticky-footer]=\"grid.isFooterSticky && placement === 'bottom'\"\n >\n <ng-container\n *ngTemplateOutlet=\"grid.pagerTpl!.template; context: grid.pagerContext()\"\n ></ng-container>\n </div>\n } @else {\n <div\n class=\"grid-footer\"\n [class.grid-footer--top]=\"placement === 'top'\"\n [class.grid-footer--bottom]=\"placement === 'bottom'\"\n [class.sticky-footer]=\"grid.isFooterSticky && placement === 'bottom'\"\n >\n <ngb-pager\n [page]=\"grid.page\"\n [pageSize]=\"grid.pageSize\"\n [collectionSize]=\"grid.pagerCollectionSize()\"\n [settings]=\"pagerSettings\"\n [infoLabel]=\"grid.paginationRangeLabel()\"\n [rowsPerPageLabel]=\"grid.rowsPerPageLabel()\"\n [responsive]=\"grid.pagerResponsive()\"\n (pageChange)=\"grid.onPage($event)\"\n (pageSizeChange)=\"grid.onPageSize($event)\"\n />\n </div>\n }\n }\n `,\n})\nexport class NgbDatagridFooterComponent {\n @Input({ required: true }) grid!: any;\n\n @Input() placement: NgbDatagridPagerPosition = 'bottom';\n\n get pagerSettings() {\n return ngbDatagridPagerSettings(this.grid.resolvedPageable());\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'ngb-datagrid-field-shell',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"grid-filter-field\" [class.grid-filter-field--with-icon]=\"!!icon\">\n <ng-content></ng-content>\n @if (icon) {\n <span class=\"bi grid-filter-field__icon\" [ngClass]=\"'bi-' + icon\" aria-hidden=\"true\"></span>\n }\n </div>\n `\n})\nexport class NgbDatagridFieldShellComponent {\n @Input() icon?: string;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgbDatagridButtonDirective } from '../../foundation/datagrid-button.directive';\nimport { NgbDatagridControlDirective } from '../../foundation/datagrid-control.directive';\nimport { NgbDatagridFieldShellComponent } from '../../foundation/datagrid-field-shell.component';\n\n@Component({\n selector: 'thead[ngbDatagridHeader]',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NgbDatagridButtonDirective,\n NgbDatagridControlDirective,\n NgbDatagridFieldShellComponent,\n ],\n template: `\n <tr>\n @if (grid.showSelectionColumn()) {\n <th\n class=\"text-center\"\n scope=\"col\"\n [style.width.px]=\"grid.utilityColumnWidth('selection')\"\n [class.column-pinned-start]=\"grid.shouldPinLeadingUtilityColumns()\"\n [style.left.px]=\"grid.utilityStickyOffset('selection')\"\n >\n @if (grid.selectionMode === 'multiple' && grid.selectAllEnabled) {\n <input\n type=\"checkbox\"\n [checked]=\"grid.isPageAllSelected()\"\n [indeterminate]=\"grid.isPageIndeterminate()\"\n (change)=\"grid.toggleSelectAllCurrentPage()\"\n [attr.aria-label]=\"grid.selectAllLabel()\"\n />\n }\n </th>\n }\n @if (grid.rowDetailTpl) {\n <th\n [style.width.px]=\"grid.utilityColumnWidth('detail')\"\n scope=\"col\"\n aria-hidden=\"true\"\n [class.column-pinned-start]=\"grid.shouldPinLeadingUtilityColumns()\"\n [style.left.px]=\"grid.utilityStickyOffset('detail')\"\n ></th>\n }\n @if (grid.stickyRowsEnabled) {\n <th\n [style.width.px]=\"grid.utilityColumnWidth('sticky-toggle')\"\n scope=\"col\"\n class=\"text-center\"\n data-title=\"Sticky\"\n [class.column-pinned-start]=\"grid.shouldPinLeadingUtilityColumns()\"\n [style.left.px]=\"grid.utilityStickyOffset('sticky-toggle')\"\n ></th>\n }\n @for (col of grid.visibleColumns; track col.field; let ci = $index) {\n <th\n [attr.data-title]=\"col.header\"\n [class.sortable]=\"grid.enableSorting && col.sortable\"\n [class.filter-menu-active]=\"grid.hasActiveColumnFilter(col.field)\"\n [class.filter-menu-open]=\"grid.openFilterMenuField === col.field\"\n [class.column-pinned-start]=\"grid.columnPinnedSide(col) === 'start'\"\n [class.column-pinned-end]=\"grid.columnPinnedSide(col) === 'end'\"\n [class.column-locked]=\"col.locked\"\n [class.grid-header__column--resizable]=\"grid.isColumnResizable(col)\"\n [class.grid-header__column--reorderable]=\"grid.isColumnReorderable(col)\"\n [class.grid-header__column--drag-over]=\"grid.columnDragOverIndex === ci && grid.columnDragField\"\n (dragover)=\"grid.onColumnDragOver($event, ci)\"\n (dragleave)=\"grid.onColumnDragLeave($event, ci)\"\n (drop)=\"grid.onColumnDrop($event, ci)\"\n [ngClass]=\"grid.resolveHeaderClass(col)\"\n [ngStyle]=\"grid.resolveHeaderStyle(col)\"\n [style.width.px]=\"grid.columnWidth(col) || null\"\n [style.min-width.px]=\"grid.resizable ? grid.columnWidth(col) : null\"\n [style.max-width.px]=\"grid.resizable ? grid.columnWidth(col) : null\"\n [style.left.px]=\"grid.columnStartOffset(col)\"\n [style.right.px]=\"grid.columnEndOffset(col)\"\n scope=\"col\"\n [attr.title]=\"grid.headerTitle(col)\"\n [attr.aria-sort]=\"grid.enableSorting && col.sortable ? grid.ariaSortFor(col.field) : null\"\n >\n <div class=\"grid-header__cell\">\n @if (grid.isColumnReorderable(col)) {\n <span\n class=\"grid-column-reorder-handle bi bi-grip-vertical\"\n draggable=\"true\"\n role=\"button\"\n tabindex=\"0\"\n [attr.aria-label]=\"grid.reorderColumnAriaLabel(col)\"\n (dragstart)=\"grid.onColumnDragStart($event, col, ci); $event.stopPropagation()\"\n (dragend)=\"grid.onColumnDragEnd()\"\n ></span>\n }\n @if (grid.enableSorting && col.sortable) {\n <button\n type=\"button\"\n class=\"grid-sort-button\"\n (click)=\"grid.toggleSort(col.field)\"\n [attr.aria-label]=\"grid.sortButtonAriaLabel(col)\"\n >\n <span class=\"grid-sort-button__label\">{{ col.header }}</span>\n <span\n class=\"grid-sort-button__indicator\"\n [class.grid-sort-button__indicator--active]=\"grid.sort.active === col.field\"\n aria-hidden=\"true\"\n >\n {{\n grid.sort.active === col.field\n ? grid.sort.direction === 'asc'\n ? '▲'\n : grid.sort.direction === 'desc'\n ? '▼'\n : '↕'\n : '↕'\n }}\n </span>\n </button>\n } @else {\n <span>{{ col.header }}</span>\n }\n\n @if (grid.isMenuFilterVisible(col)) {\n <div class=\"grid-filter-menu-host\">\n <button\n type=\"button\"\n ngbDatagridButton=\"icon\"\n class=\"grid-filter-menu-trigger\"\n [class.grid-filter-menu-trigger--active]=\"grid.hasActiveColumnFilter(col.field)\"\n [class.grid-filter-menu-trigger--check]=\"grid.isMultiCheckboxMode(col)\"\n (click)=\"grid.toggleFilterMenu(col.field, $any($event.currentTarget)); $event.stopPropagation()\"\n [attr.aria-expanded]=\"grid.openFilterMenuField === col.field\"\n [attr.aria-label]=\"grid.openFilterMenuAriaLabel(col)\"\n >\n <span\n class=\"bi\"\n [ngClass]=\"grid.isMultiCheckboxMode(col) ? 'bi-check2-square' : 'bi-funnel'\"\n aria-hidden=\"true\"\n ></span>\n </button>\n </div>\n }\n </div>\n @if (grid.isColumnResizable(col)) {\n <span\n class=\"grid-column-resize-handle\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n [attr.aria-label]=\"grid.resizeColumnAriaLabel(col)\"\n (mousedown)=\"grid.startColumnResize($event, col)\"\n ></span>\n }\n </th>\n }\n @if (grid.showActionsColumn()) {\n <th\n class=\"text-center\"\n scope=\"col\"\n [style.width.px]=\"grid.utilityColumnWidth('actions')\"\n >\n Actions\n </th>\n }\n </tr>\n\n @if (grid.anyFilterable) {\n <tr class=\"filter-row\" [formGroup]=\"grid.filterForm\">\n @if (grid.showSelectionColumn()) { <th></th> }\n @if (grid.rowDetailTpl) { <th></th> }\n @if (grid.stickyRowsEnabled) { <th></th> }\n @for (col of grid.visibleColumns; track col.field) {\n <th\n [attr.data-title]=\"col.header\"\n [class.column-pinned-start]=\"grid.columnPinnedSide(col) === 'start'\"\n [class.column-pinned-end]=\"grid.columnPinnedSide(col) === 'end'\"\n [style.width.px]=\"grid.columnWidth(col) || null\"\n [style.min-width.px]=\"grid.resizable ? grid.columnWidth(col) : null\"\n [style.max-width.px]=\"grid.resizable ? grid.columnWidth(col) : null\"\n [style.left.px]=\"grid.columnStartOffset(col)\"\n [style.right.px]=\"grid.columnEndOffset(col)\"\n >\n @if (grid.isRowFilterVisible(col)) {\n @if (grid.filterTpls[col.field]; as ft) {\n <ng-container\n [ngTemplateOutlet]=\"ft.template\"\n [ngTemplateOutletContext]=\"grid.filterContext(col, 'row')\"\n >\n </ng-container>\n } @else {\n <div class=\"grid-filter-inline\">\n @switch (grid.getColumnFilterType(col)) {\n @case ('date') {\n <ngb-datagrid-field-shell>\n <input\n ngbDatagridControl\n type=\"date\"\n [formControlName]=\"grid.valueControlName(col.field)\"\n (input)=\"grid.applyRowFilter(col)\"\n [attr.aria-label]=\"grid.columnFilterAriaLabel(col)\"\n />\n </ngb-datagrid-field-shell>\n }\n @case ('boolean') {\n <select\n ngbDatagridControl\n [formControlName]=\"grid.valueControlName(col.field)\"\n (change)=\"grid.applyRowFilter(col)\"\n >\n <option [ngValue]=\"''\">{{ grid.rowFilterEmptyOptionLabel(col) }}</option>\n <option [ngValue]=\"true\">{{ grid.booleanFilterOptionLabel(true) }}</option>\n <option [ngValue]=\"false\">{{ grid.booleanFilterOptionLabel(false) }}</option>\n </select>\n }\n @case ('select') {\n <select\n ngbDatagridControl\n [formControlName]=\"grid.valueControlName(col.field)\"\n (change)=\"grid.applyRowFilter(col)\"\n >\n <option [ngValue]=\"''\">{{ grid.rowFilterEmptyOptionLabel(col) }}</option>\n @for (option of col.options ?? []; track option.value) {\n <option [ngValue]=\"option.value\">{{ option.label }}</option>\n }\n </select>\n }\n @default {\n <input\n ngbDatagridControl\n [attr.type]=\"\n grid.getColumnFilterType(col) === 'numeric'\n ? 'number'\n : 'text'\n \"\n [placeholder]=\"grid.rowFilterPlaceholder(col)\"\n [formControlName]=\"grid.valueControlName(col.field)\"\n (input)=\"grid.applyRowFilter(col)\"\n [attr.aria-label]=\"grid.columnFilterAriaLabel(col)\"\n />\n }\n }\n\n @if (grid.isRowFilterOperatorVisible(col)) {\n <div class=\"grid-filter-operator\">\n <button\n type=\"button\"\n ngbDatagridButton=\"icon\"\n class=\"grid-filter-operator__button grid-filter-operator__button--compact\"\n [class.grid-filter-operator__button--active]=\"grid.hasActiveColumnFilter(col.field)\"\n (click)=\"grid.toggleRowFilterMenu(col.field, $any($event.currentTarget)); $event.stopPropagation()\"\n [attr.aria-expanded]=\"grid.isRowFilterMenuOpen(col.field)\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-label]=\"grid.filterOperatorAriaLabel(col)\"\n [attr.title]=\"grid.rowFilterMenuTitle(col)\"\n >\n <span class=\"bi bi-funnel\" aria-hidden=\"true\"></span>\n </button>\n </div>\n }\n\n @if (grid.isRowFilterOperatorVisible(col) && grid.hasActiveColumnFilter(col.field)) {\n <button\n ngbDatagridButton=\"icon\"\n class=\"grid-filter-clear\"\n type=\"button\"\n (click)=\"grid.clearColumnFilter(col.field)\"\n title=\"Clear filter\"\n [attr.aria-label]=\"grid.clearFilterAriaLabel(col)\"\n >\n <span class=\"bi bi-x-lg\" aria-hidden=\"true\"></span>\n </button>\n }\n </div>\n }\n }\n </th>\n }\n @if (grid.showActionsColumn()) { <th></th> }\n </tr>\n }\n `\n})\nexport class NgbDatagridHeaderComponent {\n @Input({ required: true }) grid!: any;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\n\n@Component({\n selector: 'ngb-datagrid-surface-card',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"grid-filter-menu-surface\">\n <ng-content></ng-content>\n </div>\n `\n})\nexport class NgbDatagridSurfaceCardComponent {}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Directive,\n ElementRef,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n Renderer2,\n SimpleChanges,\n inject,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nexport type NgbDatagridFloatingPanelPlacement = 'menu' | 'operator';\n\n/**\n * Popup-style overlay: anchors to a trigger, portals to document.body,\n * and uses viewport-fixed coordinates.\n */\n@Directive({\n selector: '[ngbDatagridFloatingPanel]',\n standalone: true,\n})\nexport class NgbDatagridFloatingPanelDirective implements OnChanges, AfterViewInit, OnDestroy {\n private readonly el = inject(ElementRef<HTMLElement>);\n private readonly renderer = inject(Renderer2);\n private readonly document = inject(DOCUMENT);\n private readonly cdr = inject(ChangeDetectorRef);\n\n @Input() ngbDatagridFloatingPanelAnchor?: HTMLElement | null;\n @Input() ngbDatagridFloatingPanelPlacement: NgbDatagridFloatingPanelPlacement = 'menu';\n\n @HostBinding('style.position') readonly hostPosition = 'fixed';\n @HostBinding('style.z-index') readonly hostZIndex = 1200;\n @HostBinding('style.margin') readonly hostMargin = '0';\n @HostBinding('style.transform') readonly hostTransform = 'none';\n @HostBinding('style.top.px') panelTop = 0;\n @HostBinding('style.left.px') panelLeft = 0;\n\n private active = false;\n private portaled = false;\n private originalParent: HTMLElement | null = null;\n private originalNextSibling: Node | null = null;\n\n private scrollListeners: Array<{ target: EventTarget; handler: () => void }> = [];\n private resizeObserver: ResizeObserver | null = null;\n private rafId: number | null = null;\n\n private readonly scheduleUpdate = () => {\n if (this.rafId != null) return;\n this.rafId = requestAnimationFrame(() => {\n this.rafId = null;\n if (this.active) this.updatePosition();\n });\n };\n\n ngOnChanges(changes: SimpleChanges): void {\n if ('ngbDatagridFloatingPanelAnchor' in changes) {\n this.tryActivate();\n }\n }\n\n ngAfterViewInit(): void {\n this.tryActivate();\n }\n\n private tryActivate(): void {\n if (!(this.ngbDatagridFloatingPanelAnchor instanceof HTMLElement)) {\n return;\n }\n if (this.active) {\n this.scheduleUpdate();\n return;\n }\n this.activate();\n }\n\n ngOnDestroy(): void {\n this.deactivate();\n }\n\n /** Called when anchor/layout may have changed after the panel opens. */\n reposition(): void {\n if (this.active) this.scheduleUpdate();\n }\n\n private activate(): void {\n if (this.active) return;\n this.active = true;\n const node = this.el.nativeElement;\n this.renderer.addClass(node, 'ngb-datagrid-floating-panel');\n this.renderer.addClass(node, 'show');\n this.syncThemeFromGrid(node);\n this.portalToBody();\n this.attachObservers();\n this.schedulePositionPasses();\n }\n\n private deactivate(): void {\n this.active = false;\n if (this.rafId != null) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n this.detachObservers();\n const node = this.el.nativeElement;\n this.renderer.removeClass(node, 'ngb-datagrid-floating-panel');\n this.renderer.removeClass(node, 'show');\n this.renderer.removeAttribute(node, 'data-theme');\n this.panelTop = 0;\n this.panelLeft = 0;\n this.clearPositionStyles(node);\n this.restoreFromBody();\n this.cdr.markForCheck();\n }\n\n private portalToBody(): void {\n if (this.portaled) return;\n const node = this.el.nativeElement;\n const body = this.document.body;\n if (!body || node.parentElement === body) {\n this.portaled = true;\n return;\n }\n this.originalParent = node.parentElement;\n this.originalNextSibling = node.nextSibling;\n this.renderer.appendChild(body, node);\n this.portaled = true;\n }\n\n private restoreFromBody(): void {\n if (!this.portaled) return;\n const node = this.el.nativeElement;\n if (this.originalParent?.isConnected) {\n if (this.originalNextSibling && this.originalNextSibling.parentNode === this.originalParent) {\n this.renderer.insertBefore(this.originalParent, node, this.originalNextSibling);\n } else {\n this.renderer.appendChild(this.originalParent, node);\n }\n } else if (node.parentElement === this.document.body) {\n this.renderer.removeChild(this.document.body, node);\n }\n this.portaled = false;\n this.originalParent = null;\n this.originalNextSibling = null;\n }\n\n private schedulePositionPasses(): void {\n this.updatePosition();\n requestAnimationFrame(() => this.updatePosition());\n requestAnimationFrame(() => {\n requestAnimationFrame(() => this.updatePosition());\n });\n }\n\n private attachObservers(): void {\n this.detachObservers();\n\n const addScroll = (target: EventTarget) => {\n target.addEventListener('scroll', this.scheduleUpdate, { passive: true, capture: true });\n this.scrollListeners.push({ target, handler: this.scheduleUpdate });\n };\n\n addScroll(window);\n addScroll(this.document);\n\n const anchor = this.resolveAnchor();\n let parent: HTMLElement | null = anchor?.parentElement ?? null;\n const seen = new Set<EventTarget>();\n while (parent) {\n const { overflow, overflowY, overflowX } = getComputedStyle(parent);\n if (/(auto|scroll|overlay)/.test(`${overflow} ${overflowY} ${overflowX}`)) {\n if (!seen.has(parent)) {\n seen.add(parent);\n addScroll(parent);\n }\n }\n parent = parent.parentElement;\n }\n\n window.addEventListener('resize', this.scheduleUpdate, { passive: true });\n window.visualViewport?.addEventListener('scroll', this.scheduleUpdate, { passive: true });\n window.visualViewport?.addEventListener('resize', this.scheduleUpdate, { passive: true });\n\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver(() => this.scheduleUpdate());\n const anchorEl = this.resolveAnchor();\n if (anchorEl) this.resizeObserver.observe(anchorEl);\n this.resizeObserver.observe(this.el.nativeElement);\n }\n }\n\n private detachObservers(): void {\n for (const { target, handler } of this.scrollListeners) {\n target.removeEventListener('scroll', handler, true);\n }\n this.scrollListeners = [];\n window.removeEventListener('resize', this.scheduleUpdate);\n window.visualViewport?.removeEventListener('scroll', this.scheduleUpdate);\n window.visualViewport?.removeEventListener('resize', this.scheduleUpdate);\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n }\n\n private resolveAnchor(): HTMLElement | null {\n if (this.ngbDatagridFloatingPanelAnchor instanceof HTMLElement) {\n return this.ngbDatagridFloatingPanelAnchor;\n }\n return null;\n }\n\n /** Portaled panels must carry the grid theme so token SCSS applies on document.body. */\n private syncThemeFromGrid(panel: HTMLElement): void {\n const anchor = this.resolveAnchor();\n const grid =\n anchor?.closest('.ngb-grid') ??\n anchor?.closest('ngb-datagrid')?.querySelector('.ngb-grid') ??\n this.document.querySelector('.ngb-grid');\n const theme = grid?.getAttribute('data-theme');\n if (theme) {\n this.renderer.setAttribute(panel, 'data-theme', theme);\n } else {\n this.renderer.removeAttribute(panel, 'data-theme');\n }\n }\n\n private anchorRect(anchor: HTMLElement): DOMRect {\n const rect = anchor.getBoundingClientRect();\n if (rect.width > 0 || rect.height > 0) return rect;\n const host = anchor.closest('.grid-filter-menu-host, th') as HTMLElement | null;\n return host?.getBoundingClientRect() ?? rect;\n }\n\n private updatePosition(): void {\n const node = this.el.nativeElement;\n const anchor = this.resolveAnchor();\n if (!anchor) return;\n\n const rect = this.anchorRect(anchor);\n if (!rect.width && !rect.height) return;\n\n const margin = 4;\n const viewportPadding = 8;\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n const panelWidth = Math.max(node.offsetWidth || 0, node.scrollWidth || 0, this.placementWidth());\n const panelHeight = Math.max(node.offsetHeight || 0, node.scrollHeight || 0);\n\n let top = rect.bottom + margin;\n let left = rect.right - panelWidth;\n\n if (left < viewportPadding) left = viewportPadding;\n if (left + panelWidth > viewportWidth - viewportPadding) {\n left = Math.max(viewportPadding, viewportWidth - panelWidth - viewportPadding);\n }\n\n if (panelHeight && top + panelHeight > viewportHeight - viewportPadding) {\n const above = rect.top - margin - panelHeight;\n if (above >= viewportPadding) top = above;\n }\n\n if (top < viewportPadding) top = viewportPadding;\n const maxTop = viewportHeight - panelHeight - viewportPadding;\n if (top > maxTop) top = Math.max(viewportPadding, maxTop);\n\n if (!Number.isFinite(top) || !Number.isFinite(left)) return;\n\n this.applyPosition(node, top, left);\n }\n\n private applyPosition(node: HTMLElement, top: number, left: number): void {\n const topPx = Math.round(top);\n const leftPx = Math.round(left);\n this.panelTop = topPx;\n this.panelLeft = leftPx;\n node.style.removeProperty('inset');\n node.style.setProperty('top', `${topPx}px`, 'important');\n node.style.setProperty('left', `${leftPx}px`, 'important');\n this.cdr.markForCheck();\n }\n\n private placementWidth(): number {\n return this.ngbDatagridFloatingPanelPlacement === 'operator' ? 220 : 288;\n }\n\n private clearPositionStyles(node: HTMLElement): void {\n for (const prop of [\n 'position',\n 'top',\n 'left',\n 'right',\n 'bottom',\n 'inset',\n 'transform',\n 'margin',\n 'z-index',\n ] as const) {\n node.style.removeProperty(prop);\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, Input, OnChanges, SimpleChanges, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ColumnDef } from '../../models/column-def';\nimport { NgbDatagridButtonDirective } from '../../foundation/datagrid-button.directive';\nimport { NgbDatagridControlDirective } from '../../foundation/datagrid-control.directive';\nimport { NgbDatagridFieldShellComponent } from '../../foundation/datagrid-field-shell.component';\nimport { NgbDatagridSurfaceCardComponent } from '../../foundation/datagrid-surface-card.component';\nimport { NgbDatagridFloatingPanelDirective } from '../../foundation/datagrid-floating-panel.directive';\nimport type { Datagrid } from '../datagrid.component';\n\n@Component({\n selector: 'ngb-datagrid-filter-menu-panel',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n NgbDatagridButtonDirective,\n NgbDatagridControlDirective,\n NgbDatagridFieldShellComponent,\n NgbDatagridSurfaceCardComponent,\n NgbDatagridFloatingPanelDirective,\n ],\n template: `\n <div\n class=\"grid-filter-menu-popover ngb-grid__filter-menu-overlay\"\n ngbDatagridFloatingPanel\n [ngbDatagridFloatingPanelAnchor]=\"anchor\"\n ngbDatagridFloatingPanelPlacement=\"menu\"\n (click)=\"$event.stopPropagation()\"\n >\n <ngb-datagrid-surface-card>\n @if (grid.isMultiCheckboxMode(col)) {\n <div class=\"grid-filter-menu-surface__header\">\n <div class=\"grid-filter-menu-surface__eyebrow\">Filter</div>\n <div class=\"grid-filter-menu-surface__title\">{{ col.header }}</div>\n </div>\n }\n\n @if (grid.filterMenuTpls[col.field]; as menuTpl) {\n <ng-container\n [ngTemplateOutlet]=\"menuTpl.template\"\n [ngTemplateOutletContext]=\"grid.filterContext(col, 'menu')\"\n >\n </ng-container>\n } @else {\n @if (grid.isMultiCheckboxMode(col)) {\n <div class=\"grid-filter-menu-surface__multi\">\n <input\n ngbDatagridControl\n class=\"grid-filter-menu-surface__search\"\n type=\"text\"\n placeholder=\"Search...\"\n [(ngModel)]=\"grid.multiCheckboxSearch[col.field]\"\n [attr.aria-label]=\"'Search values for ' + col.header\"\n />\n\n <div class=\"grid-multi-filter-list\">\n <label class=\"grid-multi-filter-option grid-multi-filter-option--summary\">\n <span class=\"grid-multi-filter-option__main\">\n <input\n type=\"checkbox\"\n [checked]=\"grid.isMultiCheckboxAllSelected(col)\"\n [indeterminate]=\"grid.isMultiCheckboxPartiallySelected(col)\"\n (change)=\"grid.toggleMultiCheckboxAll(col)\"\n />\n <span>{{ grid.multiCheckboxToggleLabel(col) }}</span>\n </span>\n <span class=\"grid-multi-filter-option__count\">\n {{ grid.multiCheckboxSelectedCount(col) }} of {{ grid.multiCheckboxTotalCount(col) }}\n </span>\n </label>\n\n @for (option of grid.multiCheckboxVisibleOptions(col); track option.value) {\n <label class=\"grid-multi-filter-option\">\n <span class=\"grid-multi-filter-option__main\">\n <input\n type=\"checkbox\"\n [checked]=\"grid.isMultiCheckboxChecked(col, option.value)\"\n (change)=\"grid.toggleMultiCheckboxValue(col, option.value)\"\n />\n <span>{{ option.label }}</span>\n </span>\n </label>\n }\n </div>\n\n <div class=\"grid-filter-menu-surface__actions grid-filter-menu-surface__actions--multi\">\n <button type=\"button\" class=\"grid-filter-apply\" (click)=\"grid.applyMultiCheckboxFilter(col)\">\n {{ grid.multiCheckboxFilterApplyLabel() }}\n </button>\n @if (grid.multiCheckboxFilterShowCancel()) {\n <button\n type=\"button\"\n class=\"grid-filter-cancel\"\n (click)=\"grid.cancelMultiCheckboxFilter(col)\"\n >\n {{ grid.multiCheckboxFilterCancelLabel() }}\n </button>\n }\n </div>\n </div>\n } @else {\n <div class=\"grid-filter-multi-panel\">\n @for (condition of grid.ensureMenuDraftConditions(col); track $index; let conditionIndex = $index) {\n @if (conditionIndex > 0) {\n <div class=\"grid-filter-join-select\">\n <select\n ngbDatagridControl\n class=\"grid-filter-join-select__control\"\n [ngModel]=\"grid.ensureMenuJoinLogic(col)\"\n (ngModelChange)=\"grid.setMenuJoinLogic(col, $event)\"\n aria-label=\"Combine conditions with\"\n >\n <option [ngValue]=\"'and'\">And</option>\n <option [ngValue]=\"'or'\">Or</option>\n </select>\n </div>\n }\n\n <select\n ngbDatagridControl\n class=\"grid-filter-operator-select\"\n [(ngModel)]=\"condition.operator\"\n [attr.aria-label]=\"'Filter operator for ' + col.header\"\n >\n @for (operator of grid.getAllowedOperators(col); track operator) {\n <option [ngValue]=\"operator\">{{ grid.rowFilterOperatorLabel(col, operator) }}</option>\n }\n </select>\n\n @switch (grid.getColumnFilterType(col)) {\n @case ('date') {\n <ngb-datagrid-field-shell>\n <input\n ngbDatagridControl\n class=\"grid-filter-value-input\"\n type=\"date\"\n [(ngModel)]=\"condition.value\"\n [disabled]=\"!grid.operatorRequiresValue(condition.operator)\"\n [attr.aria-label]=\"grid.columnFilterAriaLabel(col)\"\n />\n </ngb-datagrid-field-shell>\n }\n @case ('boolean') {\n <select\n ngbDatagridControl\n class=\"grid-filter-value-select\"\n [(ngModel)]=\"condition.value\"\n [disabled]=\"!grid.operatorRequiresValue(condition.operator)\"\n >\n <option [ngValue]=\"''\">Select</option>\n <option [ngValue]=\"true\">True</option>\n <option [ngValue]=\"false\">False</option>\n </select>\n }\n @case ('select') {\n <select\n ngbDatagridControl\n class=\"grid-filter-value-select\"\n [(ngModel)]=\"condition.value\"\n [disabled]=\"!grid.operatorRequiresValue(condition.operator)\"\n >\n <option [ngValue]=\"''\">Select</option>\n @for (option of col.options ?? []; track option.value) {\n <option [ngValue]=\"option.value\">{{ option.label }}</option>\n }\n </select>\n }\n @default {\n <input\n ngbDatagridControl\n class=\"grid-filter-value-input\"\n [attr.type]=\"grid.getColumnFilterType(col) === 'numeric' ? 'number' : 'text'\"\n [(ngModel)]=\"condition.value\"\n [disabled]=\"!grid.operatorRequiresValue(condition.operator)\"\n [attr.aria-label]=\"grid.columnFilterAriaLabel(col)\"\n [attr.placeholder]=\"col.filterPlaceholder || grid.rowFilterPlaceholder(col)\"\n />\n }\n }\n }\n\n <div class=\"grid-filter-menu-surface__actions grid-filter-menu-surface__actions--split\">\n <button\n type=\"button\"\n class=\"grid-filter-apply grid-filter-apply--secondary\"\n [disabled]=\"!grid.canApplyMenuFilter(col)\"\n (click)=\"grid.applyMenuFilter(col)\"\n >\n Filter\n </button>\n <button\n type=\"button\"\n class=\"grid-filter-cancel grid-filter-cancel--secondary\"\n [disabled]=\"!grid.canClearMenuFilter(col)\"\n (click)=\"grid.clearMenuFilter(col)\"\n >\n Clear\n </button>\n </div>\n </div>\n }\n }\n </ngb-datagrid-surface-card>\n </div>\n `,\n})\nexport class NgbDatagridFilterMenuPanelComponent<T = unknown> implements AfterViewInit, OnChanges {\n @Input({ required: true }) grid!: Datagrid<T>;\n @Input({ required: true }) col!: ColumnDef<T>;\n @Input({ required: true }) anchor!: HTMLElement;\n\n @ViewChild(NgbDatagridFloatingPanelDirective, { static: true })\n private floatingPanel?: NgbDatagridFloatingPanelDirective;\n\n ngOnChanges(changes: SimpleChanges): void {\n if ('anchor' in changes && this.floatingPanel) {\n this.scheduleReposition();\n }\n }\n\n ngAfterViewInit(): void {\n this.scheduleReposition();\n }\n\n private scheduleReposition(): void {\n requestAnimationFrame(() => {\n this.floatingPanel?.reposition();\n requestAnimationFrame(() => this.floatingPanel?.reposition());\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, Input, ViewChild } from '@angular/core';\nimport { ColumnDef } from '../../models/column-def';\nimport { NgbDatagridFloatingPanelDirective } from '../../foundation/datagrid-floating-panel.directive';\nimport type { Datagrid } from '../datagrid.component';\n\n@Component({\n selector: 'ngb-datagrid-row-filter-operator-panel',\n standalone: true,\n imports: [CommonModule, NgbDatagridFloatingPanelDirective],\n template: `\n <div\n class=\"dropdown-menu show ngb-datagrid-floating-panel grid-filter-operator-menu\"\n ngbDatagridFloatingPanel\n [ngbDatagridFloatingPanelAnchor]=\"anchor\"\n ngbDatagridFloatingPanelPlacement=\"operator\"\n role=\"listbox\"\n [attr.aria-label]=\"'Filter operators for ' + col.header\"\n (click)=\"$event.stopPropagation()\"\n >\n @for (operator of grid.getAllowedOperators(col); track operator) {\n <button\n type=\"button\"\n class=\"dropdown-item\"\n role=\"option\"\n [class.active]=\"grid.rowFilterOperator(col) === operator\"\n [attr.aria-selected]=\"grid.rowFilterOperator(col) === operator\"\n (click)=\"grid.setRowFilterOperator(col, operator)\"\n >\n {{ grid.rowFilterOperatorLabel(col, operator) }}\n </button>\n }\n </div>\n `,\n})\nexport class NgbDatagridRowFilterOperatorPanelComponent<T = unknown> implements AfterViewInit {\n @Input({ required: true }) grid!: Datagrid<T>;\n @Input({ required: true }) col!: ColumnDef<T>;\n @Input({ required: true }) anchor!: HTMLElement;\n\n @ViewChild(NgbDatagridFloatingPanelDirective, { static: true })\n private floatingPanel?: NgbDatagridFloatingPanelDirective;\n\n ngAfterViewInit(): void {\n requestAnimationFrame(() => {\n this.floatingPanel?.reposition();\n requestAnimationFrame(() => this.floatingPanel?.reposition());\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { NgbDatagridButtonDirective } from '../../foundation/datagrid-button.directive';\nimport { NgbDatagridFieldShellComponent } from '../../foundation/datagrid-field-shell.component';\n\n@Component({\n selector: 'ngb-datagrid-toolbar',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, NgbDatagridButtonDirective, NgbDatagridFieldShellComponent],\n template: `\n @if (grid.exportOptions?.enabled || (grid.enableAdd && !grid.isToolbarEditMode()) || grid.enableGlobalFilter) {\n <div\n class=\"datagrid-toolbar\"\n >\n @if (grid.enableGlobalFilter) {\n <div class=\"datagrid-toolbar__search\">\n @if (grid.globalTpl) {\n <ng-container\n [ngTemplateOutlet]=\"grid.globalTpl?.template\"\n [ngTemplateOutletContext]=\"{ $implicit: grid.globalFilterCtrl }\"\n >\n </ng-container>\n } @else {\n <div class=\"datagrid-toolbar__search-label\">Search</div>\n <ngb-datagrid-field-shell icon=\"search\">\n <div class=\"datagrid-toolbar__search-shell\">\n <span class=\"bi bi-search datagrid-toolbar__search-icon\" aria-hidden=\"true\"></span>\n <input\n type=\"search\"\n class=\"datagrid-toolbar__search-input\"\n [placeholder]=\"grid.globalFilterPlaceholder\"\n [formControl]=\"grid.globalFilterCtrl\"\n [attr.aria-label]=\"grid.globalFilterAriaLabel\"\n />\n </div>\n </ngb-datagrid-field-shell>\n }\n </div>\n }\n\n @if (grid.exportOptions?.enabled || (grid.enableAdd && !grid.isToolbarEditMode())) {\n <div class=\"datagrid-toolbar__actions\">\n @if (grid.exportOptions?.enabled && grid.exportButtonTpl) {\n <ng-container\n [ngTemplateOutlet]=\"grid.exportButtonTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: grid.triggerExport.bind(grid) }\"\n >\n </ng-container>\n } @else {\n @if (grid.exportOptions?.enabled && (grid.exportOptions.type === 'pdf' || grid.exportOptions.type === 'both')) {\n <button\n type=\"button\"\n ngbDatagridButton=\"secondary\"\n class=\"datagrid-toolbar__button\"\n [disabled]=\"grid.exporting\"\n (click)=\"grid.export('pdf')\"\n [attr.aria-label]=\"grid.exportAriaLabel('pdf')\"\n >\n <span class=\"bi bi-filetype-pdf\" aria-hidden=\"true\"></span>\n <span>PDF</span>\n </button>\n }\n @if (grid.exportOptions?.enabled && (grid.exportOptions.type === 'excel' || grid.exportOptions.type === 'both')) {\n <button\n type=\"button\"\n ngbDatagridButton=\"secondary\"\n class=\"datagrid-toolbar__button\"\n [disabled]=\"grid.exporting\"\n (click)=\"grid.export('excel')\"\n [attr.aria-label]=\"grid.exportAriaLabel('excel')\"\n >\n <span class=\"bi bi-file-earmark-spreadsheet\" aria-hidden=\"true\"></span>\n <span>Excel</span>\n </button>\n }\n }\n\n @if (grid.enableAdd) {\n <button\n type=\"button\"\n ngbDatagridButton=\"primary\"\n class=\"datagrid-toolbar__button\"\n (click)=\"grid.startAdd()\"\n [disabled]=\"grid.addingNew\"\n [attr.aria-label]=\"grid.addButtonAriaLabel || grid.addButtonText\"\n >\n <span class=\"bi bi-plus-lg\" aria-hidden=\"true\"></span>\n <span>{{ grid.addButtonText }}</span>\n </button>\n }\n </div>\n }\n </div>\n }\n `\n})\nexport class NgbDatagridToolbarComponent {\n @Input({ required: true }) grid!: any;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { NgbDatagridButtonDirective } from '../../foundation/datagrid-button.directive';\n\n@Component({\n selector: 'ngb-datagrid-editing-toolbar',\n standalone: true,\n imports: [CommonModule, NgbDatagridButtonDirective],\n template: `\n @if (grid.showEditingToolbar()) {\n <div class=\"datagrid-editing-toolbar\">\n <div class=\"datagrid-editing-toolbar__start\">\n @if (grid.enableAdd) {\n <button\n type=\"button\"\n ngbDatagridButton=\"success\"\n (click)=\"grid.startAdd()\"\n [disabled]=\"editActive\"\n [attr.aria-disabled]=\"editActive ? 'true' : null\"\n [attr.aria-label]=\"grid.addButtonAriaLabel\"\n >\n <span class=\"bi bi-plus-lg\" aria-hidden=\"true\"></span>\n <span>{{ grid.addButtonText }}</span>\n </button>\n }\n <button\n type=\"button\"\n class=\"datagrid-editing-toolbar__save\"\n ngbDatagridButton=\"primary\"\n [hidden]=\"!editActive\"\n (click)=\"grid.saveToolbarEdit()\"\n [disabled]=\"saveDisabled\"\n [attr.aria-disabled]=\"saveDisabled ? 'true' : null\"\n [attr.aria-hidden]=\"editActive ? null : 'true'\"\n >\n <span>Save</span>\n </button>\n @if (grid.enableDelete && selectedCount > 0 && !editActive) {\n <button\n type=\"button\"\n ngbDatagridButton=\"danger\"\n (click)=\"grid.deleteSelectedRows()\"\n [disabled]=\"selectedCount === 0\"\n [attr.aria-disabled]=\"selectedCount === 0 ? 'true' : null\"\n >\n <span class=\"bi bi-trash\" aria-hidden=\"true\"></span>\n <span>Delete</span>\n </button>\n }\n </div>\n\n @if (selectedCount > 0) {\n <div class=\"datagrid-editing-toolbar__hint\">\n {{ grid.toolbarEditHint }}\n </div>\n }\n\n <div class=\"datagrid-editing-toolbar__end\">\n @if (grid.enableEdit && selectedCount > 0 && !editActive) {\n <button\n type=\"button\"\n ngbDatagridButton=\"primary\"\n (click)=\"grid.editSelectedRow()\"\n [disabled]=\"selectedCount !== 1\"\n [attr.aria-disabled]=\"selectedCount !== 1 ? 'true' : null\"\n >\n <span class=\"bi bi-pencil\" aria-hidden=\"true\"></span>\n <span>Edit</span>\n </button>\n }\n <button\n type=\"button\"\n class=\"datagrid-editing-toolbar__cancel\"\n ngbDatagridButton=\"neutral\"\n [hidden]=\"!editActive\"\n (click)=\"grid.cancelToolbarEdit()\"\n [attr.aria-hidden]=\"editActive ? null : 'true'\"\n >\n <span>Cancel</span>\n </button>\n </div>\n </div>\n }\n `,\n})\nexport class NgbDatagridEditingToolbarComponent {\n @Input({ required: true }) grid!: any;\n\n @Input() selectedCount = 0;\n\n @Input() editActive = false;\n\n @Input() saveDisabled = true;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { NgbDatagridButtonDirective } from '../../foundation/datagrid-button.directive';\nimport { NgbDatagridControlDirective } from '../../foundation/datagrid-control.directive';\n\n@Component({\n selector: 'ngb-datagrid-external-editor',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, NgbDatagridButtonDirective, NgbDatagridControlDirective],\n template: `\n @if (grid.externalEditOpen) {\n <div\n class=\"grid-external-editor\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"grid.externalEditIsNew ? 'Add record' : 'Edit record'\"\n >\n <button type=\"button\" class=\"grid-external-editor__backdrop\" (click)=\"grid.cancelExternalEdit()\" aria-label=\"Close dialog\"></button>\n\n <div class=\"grid-external-editor__panel\">\n <div class=\"grid-external-editor__header\">\n <h3 class=\"grid-external-editor__title\">{{ grid.externalEditIsNew ? 'Add Record' : 'Edit Record' }}</h3>\n <button type=\"button\" class=\"grid-external-editor__close\" (click)=\"grid.cancelExternalEdit()\" aria-label=\"Close\">\n <span class=\"bi bi-x-lg\" aria-hidden=\"true\"></span>\n </button>\n </div>\n\n <form class=\"grid-external-editor__form\" [formGroup]=\"grid.externalForm\" (ngSubmit)=\"grid.saveExternalEdit()\">\n @for (col of grid.externalEditableColumns; track col.field) {\n <label class=\"grid-external-editor__field\">\n <span class=\"grid-external-editor__label\">{{ col.header }}</span>\n @switch (col.type) {\n @case ('boolean') {\n <div class=\"form-check m-0\">\n <input type=\"checkbox\" class=\"form-check-input\" [formControlName]=\"col.field\" [attr.aria-label]=\"col.header\" />\n </div>\n }\n @case ('select') {\n <select ngbDatagridControl [formControlName]=\"col.field\" [attr.aria-label]=\"col.header\">\n @for (o of col.options ?? []; track o.value) {\n <option [ngValue]=\"o.value\">{{ o.label }}</option>\n }\n </select>\n }\n @default {\n <input\n ngbDatagridControl\n [attr.type]=\"col.type === 'number' ? 'number' : col.type === 'date' ? 'date' : col.type === 'email' ? 'email' : 'text'\"\n [formControlName]=\"col.field\"\n [attr.aria-label]=\"col.header\"\n />\n }\n }\n @if (grid.externalForm.get(col.field)?.touched && grid.externalForm.get(col.field)?.invalid) {\n <span class=\"grid-external-editor__error\">Invalid value</span>\n }\n </label>\n }\n\n <div class=\"grid-external-editor__actions\">\n <button type=\"submit\" ngbDatagridButton=\"primary\" [disabled]=\"grid.externalForm.invalid\">Save</button>\n <button type=\"button\" ngbDatagridButton=\"neutral\" (click)=\"grid.cancelExternalEdit()\">Cancel</button>\n </div>\n </form>\n </div>\n </div>\n }\n `,\n})\nexport class NgbDatagridExternalEditorComponent {\n @Input({ required: true }) grid!: any;\n}\n","import { Directive, Input, OnChanges, OnInit, Optional, SimpleChanges } from '@angular/core';\nimport { Datagrid } from '../datagrid.component';\n\nexport interface HighlightItem {\n row: any;\n columnKey?: any;\n}\n\ntype RowKeyFn = (row: any, rowIndex: number) => any;\ntype ColKeyFn = (column: any, columnIndex: number) => any;\n\n@Directive({\n selector: '[ngbGridHighlight]',\n standalone: true\n})\nexport class NgbGridHighlightDirective implements OnInit, OnChanges {\n @Input('ngbGridHighlight') rowKey?: string | RowKeyFn;\n @Input() highlightColumnIndex?: string | ColKeyFn;\n @Input() highlightedIndex: HighlightItem[] = [];\n\n constructor(@Optional() private grid: Datagrid<any>) {}\n\n ngOnInit(): void {\n this.apply();\n }\n\n ngOnChanges(_ch: SimpleChanges): void {\n this.apply();\n }\n\n private apply() {\n if (!this.grid) return;\n this.grid.highlightRowKey = this.rowKey ?? null;\n this.grid.highlightColKey = this.highlightColumnIndex ?? null;\n this.grid.highlightedIndex = this.highlightedIndex ?? [];\n this.grid.updateHighlightCache();\n }\n}\n","import { Injectable, InjectionToken } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class NgbLiveAnnouncer {\n private node: HTMLElement | null = null;\n announce(message: string) {\n if (!this.node) {\n this.node = document.createElement('div');\n this.node.setAttribute('aria-live', 'polite');\n this.node.setAttribute('aria-atomic', 'true');\n this.node.style.position = 'fixed';\n this.node.style.width = '1px'; this.node.style.height = '1px';\n this.node.style.overflow = 'hidden'; this.node.style.clip = 'rect(1px,1px,1px,1px)';\n this.node.style.whiteSpace = 'nowrap';\n document.body.appendChild(this.node);\n }\n this.node.textContent = message;\n }\n}\n\nexport const DND_LIVE_ANNOUNCE = new InjectionToken<((m: string) => void) | null>(\n 'DND_LIVE_ANNOUNCE',\n { providedIn: 'root', factory: () => null }\n);","import { InjectionToken } from '@angular/core';\n\nexport type DndI18n = {\n listLabel: (name?: string) => string;\n pickedUp: () => string;\n dropped: () => string;\n moveToIndex: (pos: number, total: number) => string;\n dropHere: () => string;\n cannotDropHere: () => string;\n};\n\nexport const DND_I18N = new InjectionToken<DndI18n>('DND_I18N');\n\nexport const defaultDndI18n: DndI18n = {\n listLabel: (n) => n ?? 'List',\n pickedUp: () => 'Picked up. Use Arrow keys to move, Enter to drop, Escape to cancel.',\n dropped: () => 'Dropped.',\n moveToIndex: (i, t) => `Moved to position ${i} of ${t}.`,\n dropHere: () => 'Drop here',\n cannotDropHere: () => 'Cannot drop here'\n};\n","// drag-state.service.ts\nimport { Inject, Injectable, Optional, signal } from '@angular/core';\nimport { DND_LIVE_ANNOUNCE } from '../a11y/live-announcer.service';\nimport { DndI18n, defaultDndI18n, DND_I18N } from '../i18n/dnd-i18n';\n\nexport interface DndSession<T = unknown> {\n item: T;\n group?: string;\n fromList?: T[];\n fromIndex?: number;\n fromIsPalette?: boolean;\n fromListRef?: unknown;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class NgbDndState {\n readonly active = signal(false);\n private store = new Map<string, DndSession>();\n private currentId: string | null = null; // ✅ track current session id\n private activeDropList: unknown | null = null;\n\n\n // Public so directives can read strings and announce\n public i18n: DndI18n = defaultDndI18n;\n public announce?: (m: string) => void;\n\n constructor(\n @Optional() @Inject(DND_LIVE_ANNOUNCE) announceFn: ((m: string) => void) | null,\n @Optional() @Inject(DND_I18N) i18n: DndI18n | null\n ) {\n if (i18n) this.i18n = i18n;\n if (announceFn) this.announce = announceFn;\n }\n\n \n createSession<T>(session: DndSession<T>): string {\n const id = 'ngb-dnd-' + (crypto?.randomUUID?.() ?? Math.random().toString(36).slice(2));\n this.store.set(id, session as DndSession);\n this.currentId = id; // ✅ remember current\n this.active.set(true);\n return id;\n }\n\n get(id: string | null): DndSession | null {\n if (!id) return null;\n return this.store.get(id) ?? null;\n }\n\n getCurrent(): DndSession | null { // ✅ fallback accessor\n return this.currentId ? (this.store.get(this.currentId) ?? null) : null;\n }\n\n setActiveDropList(list: unknown): void {\n this.activeDropList = list;\n }\n\n getActiveDropList(): unknown | null {\n return this.activeDropList;\n }\n\n clearActiveDropList(list?: unknown): void {\n if (!list || this.activeDropList === list) {\n this.activeDropList = null;\n }\n }\n\n clear(id?: string | null) {\n if (id) this.store.delete(id);\n if (this.currentId === id) this.currentId = null;\n if (this.store.size === 0) {\n this.activeDropList = null;\n this.active.set(false);\n }\n }\n}\n","import { AfterViewInit, Directive, ElementRef, HostListener, Input, OnDestroy, inject } from '@angular/core';\nimport { NgbDndState } from '../../../../drag-drop/src/service/drag-state.service';\n\nconst MIN_WIDTH = 40;\nconst MAX_WIDTH = 320;\nconst MAX_SAMPLE_ROWS = 50;\nconst CHAR_WIDTH_FACTOR = 0.6;\nconst CHROME_TOLERANCE = 12; // small buffer to ignore reapplication of padding/borders\n\ntype SyncRole = 'header' | 'body';\nexport type NgbColgroupSyncMode = 'auto' | 'explicit';\n\ninterface SyncEntry {\n header?: NgbSyncColgroupDirective;\n bodies: Set<NgbSyncColgroupDirective>;\n widths?: number[];\n}\n\n@Directive({\n selector: '[ngbSyncColgroup]',\n standalone: true\n})\nexport class NgbSyncColgroupDirective implements AfterViewInit, OnDestroy {\n @Input('ngbSyncColgroup') syncId!: string;\n @Input() syncRole: SyncRole = 'header';\n /** `explicit` copies header <col> widths without remeasuring cell content (use with column resizing). */\n @Input() syncMode: NgbColgroupSyncMode = 'auto';\n\n private static registry = new Map<string, SyncEntry>();\n private mutationObserver?: MutationObserver;\n private resizeObserver?: ResizeObserver;\n private rafId: number | null = null;\n private dndState = inject(NgbDndState, { optional: true });\n\n constructor(private el: ElementRef<HTMLElement>) {}\n\n static syncExplicitWidths(syncId: string): void {\n const entry = NgbSyncColgroupDirective.registry.get(syncId);\n entry?.header?.syncExplicitWidths();\n }\n\n ngAfterViewInit(): void {\n if (!this.syncId) return;\n const entry = this.ensureEntry();\n if (this.syncMode === 'explicit') {\n if (this.syncRole === 'header') {\n entry.header = this;\n this.syncExplicitWidths();\n } else {\n entry.bodies.add(this);\n entry.header?.syncExplicitWidths();\n }\n return;\n }\n if (this.syncRole === 'header') {\n entry.header = this;\n this.measureAndDistribute();\n } else {\n entry.bodies.add(this);\n if (entry.header) entry.header.measureAndDistribute();\n if (entry.widths?.length) this.apply(entry.widths);\n this.startObservers();\n }\n }\n\n ngOnDestroy(): void {\n if (!this.syncId) return;\n if (this.rafId != null) cancelAnimationFrame(this.rafId);\n this.mutationObserver?.disconnect();\n this.resizeObserver?.disconnect();\n const entry = NgbSyncColgroupDirective.registry.get(this.syncId);\n if (!entry) return;\n if (entry.header === this) entry.header = undefined;\n entry.bodies.delete(this);\n if (!entry.header && entry.bodies.size === 0) {\n NgbSyncColgroupDirective.registry.delete(this.syncId);\n }\n }\n\n @HostListener('window:resize')\n onResize(): void {\n if (this.syncMode === 'explicit') {\n if (this.syncRole === 'header') this.syncExplicitWidths();\n return;\n }\n if (this.syncRole === 'header') this.measureAndDistribute();\n }\n\n syncExplicitWidths(): void {\n const widths = this.readExplicitWidths();\n if (!widths.length) return;\n const entry = this.ensureEntry();\n if (entry.widths && this.areWidthsEqual(entry.widths, widths)) return;\n entry.widths = widths;\n this.apply(widths);\n entry.bodies.forEach((body) => body.apply(widths));\n }\n\n private readExplicitWidths(): number[] {\n return this.colElements().map((col) => {\n const explicit = parseFloat(col.style.width || '');\n return Number.isFinite(explicit) && explicit > 0 ? explicit : MIN_WIDTH;\n });\n }\n\n measureAndDistribute(): void {\n if (this.syncMode === 'explicit') {\n this.syncExplicitWidths();\n return;\n }\n if (this.dndState?.active()) return;\n const widths = this.measure();\n if (!widths.length) return;\n const entry = this.ensureEntry();\n if (entry.widths && this.areWidthsEqual(entry.widths, widths)) return;\n entry.widths = widths;\n this.apply(widths);\n entry.bodies.forEach(b => b.apply(widths));\n }\n\n private ensureEntry(): SyncEntry {\n let entry = NgbSyncColgroupDirective.registry.get(this.syncId);\n if (!entry) {\n entry = { bodies: new Set<NgbSyncColgroupDirective>() };\n NgbSyncColgroupDirective.registry.set(this.syncId, entry);\n }\n return entry;\n }\n\n private startObservers(): void {\n const bodyTable = this.tableEl();\n const tbody = bodyTable?.querySelector('tbody');\n if (tbody && typeof MutationObserver !== 'undefined' && !tbody.classList.contains('ngb-dnd-list')) {\n this.mutationObserver = new MutationObserver(() => this.scheduleMeasure());\n this.mutationObserver.observe(tbody, { childList: true, subtree: true, characterData: true });\n }\n if (bodyTable && typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver(() => this.scheduleMeasure());\n this.resizeObserver.observe(bodyTable);\n }\n }\n\n private scheduleMeasure(): void {\n if (this.syncMode === 'explicit') return;\n if (this.rafId != null) return;\n this.rafId = requestAnimationFrame(() => {\n this.rafId = null;\n if (this.dndState?.active()) return;\n const entry = NgbSyncColgroupDirective.registry.get(this.syncId);\n entry?.header?.measureAndDistribute();\n });\n }\n\n private colElements(): HTMLTableColElement[] {\n return Array.from(this.el.nativeElement.querySelectorAll('col'));\n }\n\n private tableEl(): HTMLTableElement | null {\n return this.el.nativeElement.closest('table');\n }\n\n private firstBodyForSync(): HTMLTableElement | null {\n const entry = NgbSyncColgroupDirective.registry.get(this.syncId);\n const bodyDir = this.syncRole === 'body'\n ? this\n : entry ? Array.from(entry.bodies.values())[0] : undefined;\n return bodyDir?.tableEl() ?? null;\n }\n\n private measure(): number[] {\n const bodyTable = this.firstBodyForSync();\n const cols = this.colElements();\n const entry = NgbSyncColgroupDirective.registry.get(this.syncId);\n if (!cols.length) return [];\n\n if (!bodyTable) {\n return entry?.widths ?? [];\n }\n\n const bodyRows = Array.from(bodyTable.querySelectorAll<HTMLTableRowElement>('tbody tr'))\n .filter((row) => !Array.from(row.cells).some((cell) => cell.colSpan > 1))\n .slice(0, MAX_SAMPLE_ROWS);\n const headerTable = this.syncRole === 'header' ? this.tableEl() : null;\n const headerRows = Array.from(headerTable?.querySelectorAll('thead tr') ?? []);\n\n return cols.map((col, colIndex) => {\n const fixedWidth = (col.getAttribute('data-fixed') ?? '').toLowerCase() === 'true';\n if (fixedWidth) {\n const explicit = parseFloat(col.style.width || '') || MIN_WIDTH;\n return Math.min(Math.max(explicit, MIN_WIDTH), MAX_WIDTH);\n }\n \n // Measure header content width if available\n let headerContentWidth = 0;\n for (const headerRow of headerRows) {\n const th = headerRow.querySelectorAll('th')[colIndex] as HTMLElement | undefined;\n if (!th) continue;\n headerContentWidth = Math.max(headerContentWidth, this.measureCellContent(th));\n }\n \n // Measure body content width\n let maxContent = 0;\n for (const tr of bodyRows) {\n const td = tr.querySelectorAll('td')[colIndex] as HTMLElement | undefined;\n if (!td) continue;\n maxContent = Math.max(maxContent, this.measureCellContent(td));\n if (maxContent >= MAX_WIDTH) break;\n }\n \n // Use the maximum of header and body content widths\n let finalContent = Math.max(headerContentWidth, maxContent);\n if (finalContent === 0) finalContent = MIN_WIDTH;\n\n let width = Math.min(Math.max(finalContent, MIN_WIDTH), MAX_WIDTH);\n const prev = entry?.widths?.[colIndex];\n if (prev && width > prev) {\n // If the only change is re-adding cell chrome (common when interactive elements span the cell),\n // keep the previous stable width to avoid incremental growth.\n const delta = width - prev;\n if (delta <= CHROME_TOLERANCE) width = prev;\n }\n return width;\n });\n }\n\n private apply(widths: number[]) {\n const cols = this.colElements();\n widths.forEach((w, i) => {\n const col = cols[i];\n if (!col) return;\n col.style.width = w ? `${w}px` : '';\n });\n }\n\n private measureCellContent(cell: HTMLElement): number {\n const style = getComputedStyle(cell);\n const cellClientWidth = cell.clientWidth;\n const cellRect = cell.getBoundingClientRect();\n const chrome =\n (parseFloat(style.paddingLeft) || 0) +\n (parseFloat(style.paddingRight) || 0) +\n (parseFloat(style.borderLeftWidth) || 0) +\n (parseFloat(style.borderRightWidth) || 0);\n\n const interactiveEls = Array.from(cell.querySelectorAll<HTMLElement>('input, select, textarea, button'));\n let interactiveWidth: number | null = null;\n if (interactiveEls.length) {\n interactiveWidth = interactiveEls.reduce((total, el) => {\n const rect = el.getBoundingClientRect();\n const elStyle = getComputedStyle(el);\n const widthStr = (el.style.width || elStyle.width || '').toString().trim();\n const usesPercentWidth = widthStr.endsWith('%');\n const matchesCellWidth =\n (!!cellClientWidth && rect.width && Math.abs(rect.width - cellClientWidth) <= 1) ||\n (cellRect.width > 0 && rect.width > 0 && Math.abs(rect.width - cellRect.width) <= 1);\n const spansCell = usesPercentWidth || matchesCellWidth;\n const margin = (parseFloat(elStyle.marginLeft) || 0) + (parseFloat(elStyle.marginRight) || 0);\n if (spansCell) {\n const textWidth = this.measureTextWidth((el.textContent ?? '').trim(), elStyle);\n const paddingBorder =\n (parseFloat(elStyle.paddingLeft) || 0) +\n (parseFloat(elStyle.paddingRight) || 0) +\n (parseFloat(elStyle.borderLeftWidth) || 0) +\n (parseFloat(elStyle.borderRightWidth) || 0);\n return total + Math.ceil(textWidth + paddingBorder + margin);\n }\n const rectWidth = rect.width || parseFloat(elStyle.width) || ((el.textContent ?? '').length * ((parseFloat(elStyle.fontSize) || 14) * CHAR_WIDTH_FACTOR));\n return total + rectWidth + margin;\n }, 0);\n interactiveWidth = Math.ceil((interactiveWidth || 0) + chrome);\n }\n\n const text = (cell.textContent ?? '').trim();\n const textWidth = Math.ceil(this.measureTextWidth(text, style) + chrome);\n if (interactiveWidth != null) {\n return Math.max(textWidth, interactiveWidth);\n }\n return textWidth;\n }\n\n private areWidthsEqual(prev: number[], next: number[]): boolean {\n if (prev.length !== next.length) return false;\n return prev.every((v, i) => v === next[i]);\n }\n\n private measureTextWidth(text: string, style: CSSStyleDeclaration): number {\n const fontSize = parseFloat(style.fontSize) || 14;\n const font = style.font || `${style.fontStyle} ${style.fontVariant} ${style.fontWeight} ${style.fontSize} / ${style.lineHeight} ${style.fontFamily}`;\n\n let contentWidth = 0;\n const isJsdom = typeof navigator !== 'undefined' && /jsdom/i.test(navigator.userAgent);\n const canvas = !isJsdom && typeof document !== 'undefined' ? document.createElement('canvas') : null;\n let ctx: CanvasRenderingContext2D | null = null;\n if (canvas?.getContext) {\n try {\n ctx = canvas.getContext('2d');\n } catch {\n ctx = null;\n }\n }\n if (ctx && font) {\n ctx.font = font;\n const metrics = ctx.measureText(text);\n contentWidth = metrics?.width ?? 0;\n }\n\n if (!contentWidth) {\n contentWidth = text.length * (fontSize * CHAR_WIDTH_FACTOR);\n }\n return contentWidth;\n }\n}\n","import {\n Directive, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output, inject\n} from '@angular/core';\nimport { NgbDndState, DndSession } from '../service/drag-state.service';\n\nexport interface NgbDndDropEvent<T> {\n item: T;\n fromIndex: number;\n toIndex: number;\n fromList: T[];\n toList: T[];\n sameList: boolean;\n}\n\nexport interface DndCanDropPayload<T = any> {\n dragItem: T; // item being dragged (best-effort if unknown)\n srcList: T[]; // source array (best-effort if unknown)\n srcIndex: number; // index in source (best-effort if unknown)\n dstList: T[]; // destination array (this list’s [ngbDndList])\n dstIndex: number; // intended insertion index\n isExternal: boolean;// srcList !== dstList\n}\n\n/** Guard function; return true to allow, false to block */\nexport type DndCanDropFn<T = any> = (payload: DndCanDropPayload<T>) => boolean;\n\n@Directive({\n selector: '[ngbDndList]',\n standalone: true\n})\nexport class NgbDndListDirective<T = unknown> {\n private el = inject(ElementRef<HTMLElement>);\n private state = inject(NgbDndState);\n \n @Input() dndChildrenKey: string | null = 'children';\n\n /** Bind your array here: <div [ngbDndList]=\"items\"> */\n @Input('ngbDndList') list!: T[];\n /** Optional: group barrier across lists */\n @Input() dndGroup?: string;\n /** Disable this list */\n @Input() dndDisabled = false;\n\n /** NEW: clone if source wasn't a list (e.g. palette) */\n @Input() dndCloneOnDrop = false;\n /** NEW: custom clone function */\n @Input() dndCloneFn?: (item: T) => T;\n\n @Input() dndIsPalette = false;\n\n @Input() dndCanDrop: boolean | DndCanDropFn<any> = true;\n\n // (optional) visual feedback while hovering a denied list\n private _denied = false;\n @HostBinding('class.ngb-dnd-denied') get denied() { return this._denied; }\n\n @Input() dndAriaLabel?: string;\n @HostBinding('attr.aria-label') get ariaLabel() { return this.dndAriaLabel || null; }\n /** Fires after item is inserted */\n @Output() dndDropped = new EventEmitter<NgbDndDropEvent<T>>();\n\n @HostBinding('attr.role') role = 'list';\n\n @HostBinding('class.ngb-dnd-list') hostClass = true;\n\n // NEW: when the pointer is over this list while dragging\n private hover = false;\n @HostBinding('class.ngb-dnd-over') get isOver() { return this.hover; }\n\n // NEW: reflect whether the current drag can drop here (for CSS)\n private canDrop: boolean | null = null;\n @HostBinding('attr.data-drop-valid') get dataDropValid() {\n // values: \"true\" | \"false\" | null (attribute omitted)\n return this.canDrop === true ? 'true' : this.canDrop === false ? 'false' : null;\n }\n private placeholder?: HTMLElement;\n private lastIndex = -1;\n\n @HostListener('dragenter', ['$event'])\n onDragEnter(ev: DragEvent) {\n if (this.dndDisabled) return;\n const s = this.getSession(ev);\n // If there is an active drag and groups match, indicate hover\n if (s) {\n ev.preventDefault();\n this.hover = true;\n this.canDrop = true; // group check already done in getSession\n } else {\n // Drag exists but not compatible with this list (group mismatch)\n this.hover = true;\n this.canDrop = false;\n }\n }\n\n @HostListener('dragover', ['$event'])\n onDragOver(ev: DragEvent) {\n if (this.dndDisabled) return;\n\n const s = this.getSession(ev);\n if (!s) {\n // Not a compatible session → show invalid\n this.hover = true;\n this.canDrop = false;\n return;\n }\n\n ev.preventDefault();\n ev.stopPropagation();\n this.state.setActiveDropList(this);\n this.hover = true;\n this.canDrop = true;\n\n try { if (ev.dataTransfer) ev.dataTransfer.dropEffect = this.dndCloneOnDrop ? 'copy' : 'move'; } catch { }\n\n this.ensurePlaceholder();\n const idx = this.indexFromPointer(ev);\n if (idx !== this.lastIndex) {\n this.lastIndex = idx;\n this.positionPlaceholderAt(idx);\n }\n }\n\n @HostListener('dragleave', ['$event'])\n onDragLeave(ev: DragEvent) {\n // Only reset when actually leaving this list (not moving between children)\n if (!this.el.nativeElement.contains(ev.relatedTarget as Node)) {\n this.removePlaceholder();\n this.lastIndex = -1;\n this.hover = false;\n this.canDrop = null;\n this.state.clearActiveDropList(this);\n }\n }\n\n @HostListener('document:drop', ['$event'])\n onDocumentDrop(ev: DragEvent) {\n const activeDropList = this.state.getActiveDropList();\n const target = ev.target as Element | null;\n const host = this.el.nativeElement;\n const targetList = target?.closest?.('.ngb-dnd-list');\n const dropTargetsThisList = targetList === host;\n\n if (activeDropList && activeDropList !== this && !dropTargetsThisList) {\n this.resetVisualState();\n return;\n }\n\n if (!host.contains(ev.target as Node) && activeDropList !== this) {\n this.resetVisualState();\n return;\n }\n if (!activeDropList) {\n if (targetList && targetList !== host) {\n this.resetVisualState();\n return;\n }\n }\n\n const anyEv = ev as any;\n if (anyEv.__ngbHandled) return;\n anyEv.__ngbHandled = true;\n\n ev.preventDefault();\n this.performDrop(ev);\n\n this.resetVisualState();\n }\n\n @HostListener('drop', ['$event'])\n onDrop(ev: DragEvent) {\n if (this.dndDisabled) return;\n const activeDropList = this.state.getActiveDropList();\n const target = ev.target as Element | null;\n const targetList = target?.closest?.('.ngb-dnd-list');\n const dropTargetsThisList = targetList === this.el.nativeElement;\n if (activeDropList && activeDropList !== this && !dropTargetsThisList) {\n this.resetVisualState();\n return;\n }\n\n const anyEv = ev as any;\n if (anyEv.__ngbHandled) return;\n anyEv.__ngbHandled = true;\n\n ev.preventDefault();\n ev.stopPropagation();\n\n this.performDrop(ev);\n\n this.resetVisualState();\n }\n\n @HostListener('document:dragend')\n @HostListener('document:dragcancel')\n onDocumentDragFinished() {\n this.resetVisualState();\n }\n\n // helpers\n private getSession(ev: DragEvent): DndSession | null {\n // Chrome often returns \"\" during dragover/enter; try service fallback\n const sid = ev.dataTransfer?.getData('text/ngb-dnd') || null;\n let s = sid ? this.state.get(sid) : null;\n if (!s) s = this.state.getCurrent(); // ✅ fallback\n if (!s) return null;\n\n if (this.dndGroup && s.group && s.group !== this.dndGroup) return null;\n return s;\n }\n\n private ensurePlaceholder() {\n if (!this.placeholder) {\n const hostTag = this.el.nativeElement.tagName;\n if (hostTag === 'TBODY') {\n const row = document.createElement('tr');\n row.className = 'ngb-dnd-placeholder';\n row.setAttribute('aria-hidden', 'true');\n const cell = document.createElement('td');\n const sampleRow = this.el.nativeElement.querySelector('tr:not(.ngb-dnd-placeholder)');\n const colspan = sampleRow?.children?.length || 1;\n cell.colSpan = colspan;\n cell.style.padding = '0';\n cell.style.border = '0';\n cell.style.height = '0';\n const bar = document.createElement('div');\n bar.className = 'ngb-dnd-placeholder__bar';\n cell.appendChild(bar);\n row.appendChild(cell);\n this.placeholder = row;\n } else {\n this.placeholder = document.createElement('div');\n this.placeholder.className = 'ngb-dnd-placeholder';\n this.placeholder.setAttribute('aria-hidden', 'true');\n }\n this.el.nativeElement.appendChild(this.placeholder);\n }\n }\n private removePlaceholder() {\n if (this.placeholder?.parentElement) this.placeholder.parentElement.removeChild(this.placeholder);\n this.placeholder = undefined;\n }\n private resetVisualState() {\n this.removePlaceholder();\n this.lastIndex = -1;\n this.hover = false;\n this.canDrop = null;\n this._denied = false;\n this.state.clearActiveDropList(this);\n }\n private positionPlaceholderAt(index: number) {\n const host = this.el.nativeElement;\n const children = this.draggableChildren();\n const before = children[index];\n if (!before) host.appendChild(this.placeholder!);\n else host.insertBefore(this.placeholder!, before);\n }\n private indexFromPointer(ev: DragEvent) {\n const y = ev.clientY;\n const children = this.draggableChildren();\n for (let i = 0; i < children.length; i++) {\n const r = children[i].getBoundingClientRect();\n const mid = r.top + r.height / 2;\n if (y < mid) return i;\n }\n return children.length;\n }\n\n private draggableChildren(): HTMLElement[] {\n const host = this.el.nativeElement;\n const items = Array.from(host.children)\n .filter(c => c !== this.placeholder && (c as HTMLElement).classList.contains('ngb-dnd-item')) as HTMLElement[];\n if (items.length) return items;\n return Array.from(host.children).filter(c => c !== this.placeholder) as HTMLElement[];\n }\n\n private cloneItem(i: T): T {\n if (this.dndCloneFn) return this.dndCloneFn(i);\n // fallback shallow clone\n if (Array.isArray(i)) return (i.slice() as unknown) as T;\n if (i && typeof i === 'object') return { ...(i as Record<string, unknown>) } as T;\n return i; // primitive\n }\n\n private isDroppingIntoOwnDescendant(item: any, targetList: any[]): boolean {\n const key = this.dndChildrenKey;\n if (!key || !item) return false;\n\n const stack: any[][] = [];\n if (Array.isArray(item[key])) stack.push(item[key]);\n\n while (stack.length) {\n const arr = stack.pop()!;\n if (arr === targetList) return true;\n for (const child of arr) {\n const kids = child?.[key];\n if (Array.isArray(kids)) stack.push(kids);\n }\n }\n return false;\n }\n /**\n * Build a guard payload using whatever drag context you already store.\n * If some fields don’t exist in your code, the fallbacks keep it working.\n */\n private _buildGuardPayload(session: DndSession, dstIndex: number): DndCanDropPayload<any> {\n const srcList = (session.fromList as any[]) ?? [];\n const srcIndex = typeof session.fromIndex === 'number' ? session.fromIndex : -1;\n const dstList = this.list as any[];\n\n return {\n dragItem: session.item,\n srcList,\n srcIndex,\n dstList,\n dstIndex,\n isExternal: session.fromIsPalette === true || srcList !== dstList,\n };\n }\n\n /**\n * Compute destination index from the event position (no placeholder var needed).\n * Uses vertical list heuristics; adjust for horizontal if your list is horizontal.\n */\n private _computeDropIndex(ev: DragEvent): number {\n const host = (this as any)._host?.nativeElement\n ?? (this as any)._el?.nativeElement\n ?? (this as any).el?.nativeElement\n ?? (this as any).elementRef?.nativeElement\n ?? null;\n\n if (!host) return (this.list as any[])?.length ?? 0;\n\n const children = this.draggableChildren();\n const y = ev.clientY;\n\n for (let i = 0; i < children.length; i++) {\n const rect = children[i].getBoundingClientRect();\n const midY = rect.top + rect.height / 2;\n if (y < midY) return i;\n }\n return children.length;\n }\n // Evaluate the guard safely\n private _allowDrop<T>(payload: DndCanDropPayload<T>): boolean {\n const guard = this.dndCanDrop;\n if (typeof guard === 'boolean') return guard;\n try { return guard ? !!guard(payload) : true; } catch { return false; }\n }\n\n // Extract your existing onDrop logic into a single method:\n private performDrop(ev: DragEvent) {\n const session = this.getSession(ev);\n if (!session) return;\n\n const dstIndex = this._computeDropIndex(ev);\n\n // Guard check (block drop if not allowed)\n const payload = this._buildGuardPayload(session, dstIndex);\n if (!this._allowDrop(payload)) {\n ev.preventDefault();\n ev.stopPropagation();\n this._denied = true; // cosmetic: adds .ngb-dnd-denied for styling\n return; // ⛔ do not mutate arrays\n }\n this._denied = false;\n\n // ❗ block cycles: don't allow dropping an item into its own descendants\n if (this.isDroppingIntoOwnDescendant(session.item, this.list)) {\n // optional: visual/aural feedback\n this.state.announce?.(this.state.i18n.cannotDropHere());\n this.removePlaceholder();\n this.lastIndex = -1;\n return;\n }\n const targetIndex = this.lastIndex < 0 ? this.list.length : this.lastIndex;\n const fromList = (session.fromList as T[]) ?? undefined;\n const fromIndex = (session.fromIndex as number) ?? -1;\n const sameList = fromList === this.list;\n const isExternal = session.fromIsPalette === true || !fromList || fromIndex === -1;\n\n // ✅ External (palette): always transform/clone into canvas, and DO NOT remove from source.\n // ✅ Canvas↔Canvas: move by default; if you want to clone across canvas, set dndCloneOnDrop=true.\n const shouldCloneAcrossCanvas = this.dndCloneOnDrop && !sameList && !isExternal;\n\n const itemToInsert: T =\n isExternal\n ? this.cloneItem(session.item as T) // transform palette item to Panel\n : (shouldCloneAcrossCanvas ? this.cloneItem(session.item as T) : (session.item as T));\n\n // Remove from source ONLY for real moves within canvas\n if (!isExternal && !shouldCloneAcrossCanvas && fromIndex > -1) {\n fromList!.splice(fromIndex, 1);\n }\n\n // adjust index when reordering within same list and moving forward\n const insertAt = sameList && fromIndex > -1 && targetIndex > fromIndex\n ? targetIndex - 1\n : targetIndex;\n\n this.list.splice(insertAt, 0, itemToInsert);\n\n this.removePlaceholder();\n this.lastIndex = -1;\n\n this.dndDropped.emit({\n item: itemToInsert,\n fromIndex,\n toIndex: insertAt,\n fromList: fromList ?? [],\n toList: this.list,\n sameList\n });\n\n this.state.announce?.(this.state.i18n.dropped());\n\n }\n\n\n}\n","import {\n Directive, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output, inject, Optional\n} from '@angular/core';\nimport { NgbDndState } from '../service/drag-state.service';\nimport { NgbDndListDirective } from './dnd-list.directive';\n\n@Directive({\n selector: '[ngbDndItem]',\n standalone: true\n})\nexport class NgbDndItemDirective<T = unknown> {\n private el = inject(ElementRef<HTMLElement>);\n private state = inject(NgbDndState);\n constructor(@Optional() private parentList?: NgbDndListDirective<T>) {}\n\n /** required: the value carried by this row/panel */\n @Input('ngbDndItem') item!: T;\n /** optional: constrain cross-list drops */\n @Input() dndGroup?: string;\n /** index inside its parent list (bind to the rendered row index) */\n @Input() dndIndex?: number;\n /** Explicit source list for recursive templates where DI can be ambiguous. */\n @Input() dndSourceList?: T[];\n @Input() dndDisabled = false;\n\n @Output() dndDragStart = new EventEmitter<T>();\n @Output() dndDragEnd = new EventEmitter<void>();\n\n @HostBinding('attr.draggable') get draggable() { return !this.dndDisabled; }\n @HostBinding('class.ngb-dnd-item') hostClass = true;\n @HostBinding('class.ngb-dnd-dragging') dragging = false;\n @HostBinding('attr.aria-grabbed') get ariaGrabbed() { return this.dragging ? 'true' : 'false'; }\n @HostBinding('attr.role') role = 'listitem';\n @HostBinding('attr.tabindex') tabIndex = 0; // keyboard focusable\n\n private sessionId: string | null = null;\n\n @HostListener('dragstart', ['$event'])\n onDragStart(ev: DragEvent) {\n const eventWithFlag = ev as DragEvent & { __ngbDndItemStarted?: boolean };\n if (eventWithFlag.__ngbDndItemStarted) return;\n eventWithFlag.__ngbDndItemStarted = true;\n\n if (this.dndDisabled || this.item == null) { ev.preventDefault(); return; }\n\n this.sessionId = this.state.createSession({\n item: this.item,\n group: this.dndGroup ?? this.parentList?.dndGroup,\n fromList: this.dndSourceList ?? this.parentList?.list,\n fromIndex: this.dndIndex,\n fromListRef: this.parentList,\n fromIsPalette: this.parentList?.dndIsPalette === true\n\n });\n\n // ✅ set both a custom and a plain text payload; keep plain text non-empty\n ev.dataTransfer?.setData('text/ngb-dnd', this.sessionId);\n ev.dataTransfer?.setData('text/plain', 'ngb'); // some browsers require non-empty\n if (ev.dataTransfer) ev.dataTransfer.effectAllowed = 'copyMove';\n\n ev.dataTransfer?.setDragImage(this.el.nativeElement, 16, 16);\n\n this.dragging = true;\n this.dndDragStart.emit(this.item);\n }\n\n @HostListener('dragend')\n onDragEnd() {\n this.dragging = false;\n this.state.clear(this.sessionId);\n this.sessionId = null;\n this.dndDragEnd.emit();\n }\n\n @HostListener('keydown', ['$event'])\n onKeydown(ev: KeyboardEvent) {\n if (this.dndDisabled) return;\n\n // start dragging (keyboard mode)\n if (ev.code === 'Space' && !this.dragging) {\n ev.preventDefault();\n this.onDragStart(new DragEvent('dragstart')); // reuse logic\n return;\n }\n\n if (!this.dragging) return;\n\n // move within same list\n const parent = this.parentList;\n if (!parent || typeof this.dndIndex !== 'number') return;\n\n if (ev.code === 'ArrowUp' || ev.code === 'ArrowDown') {\n ev.preventDefault();\n const list = parent.list;\n const from = this.dndIndex!;\n let to = ev.code === 'ArrowUp' ? from - 1 : from + 1;\n to = Math.max(0, Math.min(list.length - 1, to));\n if (to !== from) {\n const [it] = list.splice(from, 1);\n list.splice(to, 0, it);\n this.dndIndex = to;\n // announce (see live region below)\n this.state.announce?.(this.state.i18n.moveToIndex(to + 1, list.length));\n }\n }\n\n if (ev.code === 'Enter') { ev.preventDefault(); this.onDragEnd(); } // drop\n if (ev.code === 'Escape') { ev.preventDefault(); this.onDragEnd(); } // cancel\n }\n\n\n}\n","import { InjectionToken } from '@angular/core';\n\n/** Injection token for the active `ngb-datagrid` instance (layout toolbar tools). */\nexport const NGB_DATAGRID_HOST = new InjectionToken('NgbDatagridHost');\n","/** Localizable strings for built-in datagrid UI (pagination, filters, actions, a11y). */\nexport interface NgbDatagridLabels {\n paginationRange?: string;\n rowsPerPage?: string;\n emptyState?: string;\n booleanYes?: string;\n booleanNo?: string;\n selectAll?: string;\n unselectAll?: string;\n selectRow?: string;\n unselectRow?: string;\n globalFilter?: string;\n expandRow?: string;\n collapseRow?: string;\n exportPdf?: string;\n exportExcel?: string;\n stickyRowToggle?: string;\n editRow?: string;\n deleteRow?: string;\n reorderColumn?: string;\n resizeColumn?: string;\n openFilterMenu?: string;\n clearFilter?: string;\n filterOperator?: string;\n columnFilter?: string;\n sortBy?: string;\n stickyBadge?: string;\n addRow?: string;\n addRowButton?: string;\n save?: string;\n cancel?: string;\n edit?: string;\n delete?: string;\n multiCheckboxApply?: string;\n multiCheckboxCancel?: string;\n combineConditions?: string;\n searchFilterValues?: string;\n}\n\nexport const NGB_DATAGRID_DEFAULT_LABELS: Required<NgbDatagridLabels> = {\n paginationRange: '{start}–{end} of {total}',\n rowsPerPage: 'Rows per page',\n emptyState: 'No records to display.',\n booleanYes: 'Yes',\n booleanNo: 'No',\n selectAll: 'Select all rows',\n unselectAll: 'Unselect all rows',\n selectRow: 'Select row {index}',\n unselectRow: 'Unselect row {index}',\n globalFilter: 'Search all columns',\n expandRow: 'Expand row',\n collapseRow: 'Collapse row',\n exportPdf: 'Export to PDF',\n exportExcel: 'Export to Excel',\n stickyRowToggle: 'Toggle sticky row',\n editRow: 'Edit row {index}',\n deleteRow: 'Delete row {index}',\n reorderColumn: 'Reorder {header}',\n resizeColumn: 'Resize {header}',\n openFilterMenu: 'Open filter menu for {header}',\n clearFilter: 'Clear filter for {header}',\n filterOperator: 'Filter operator for {header}',\n columnFilter: '{header} filter',\n sortBy: 'Sort by {header}. Current sort {state}.',\n stickyBadge: 'STICKY',\n addRow: 'Add row',\n addRowButton: '+ Add',\n save: 'Save',\n cancel: 'Cancel',\n edit: 'Edit',\n delete: 'Delete',\n multiCheckboxApply: 'OK',\n multiCheckboxCancel: 'Cancel',\n combineConditions: 'Combine conditions with',\n searchFilterValues: 'Search values for {header}',\n};\n\n/** Documented keyboard shortcuts when [keyboardNavigation] is enabled. */\nexport const NGB_DATAGRID_KEYBOARD_SHORTCUTS = {\n moveCell: 'Arrow keys — move focus between data cells',\n firstLastColumn: 'Home / End — first or last column in the row',\n firstLastRow: 'Ctrl+Home / Ctrl+End — first or last row on the page',\n sortColumn: 'Enter on focused sortable header — cycle sort',\n toggleSelection: 'Space on a focused row — toggle row selection (when enabled)',\n pagePrevNext: 'Alt+Page Up / Alt+Page Down — previous or next page (when paginated)',\n openFilter: 'F3 on a focused column — open row filter operator menu (row filter mode)',\n cancelOverlay: 'Escape — close filter menus and cancel in-cell edit',\n commitIncell: 'Enter — commit in-cell edit; Arrow keys move between editable cells while editing',\n} as const;\n\nexport type NgbDatagridTextDirection = 'ltr' | 'rtl' | 'auto';\n\nexport function ngbFormatDatagridLabel(\n template: string,\n tokens: Record<string, string | number>\n): string {\n return template.replace(/\\{(\\w+)\\}/g, (_, key: string) => {\n const value = tokens[key];\n return value === undefined || value === null ? '' : String(value);\n });\n}\n","import { Component, Input, EventEmitter, Output, inject, AfterContentInit, ContentChildren, QueryList, OnChanges, SimpleChanges, TemplateRef, ElementRef, ViewChild, ChangeDetectorRef, HostListener, ViewEncapsulation, forwardRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ColumnDef, ColumnType } from '../models/column-def';\nimport {\n NgbDatagridPageableSettings,\n NgbDatagridPagerPosition,\n NgbDatagridPagerType,\n NGB_DATAGRID_DEFAULT_PAGEABLE,\n ngbResolvePageableSettings,\n} from '../models/datagrid-pageable';\nimport { FormsModule, ReactiveFormsModule, FormBuilder, FormGroup, Validators, AbstractControl, FormControl } from '@angular/forms';\nimport {\n NgbCellTemplate,\n NgbEditorTemplate,\n NgbFilterTemplate,\n NgbFilterMenuTemplate,\n NgbGlobalFilterTemplate,\n NgbPagerTemplate,\n CellCtx,\n EditCtx,\n FilterCtx,\n PagerCtx,\n} from '../directives/datagrid-templates.directive';\nimport { ContentChild } from '@angular/core';\nimport { NgbRowDetailTemplate } from '../directives/datagrid-templates.directive';\nimport { ngbResolvePagerPageSizeOptions } from '../../../pagination';\nimport { firstValueFrom, isObservable, Observable } from 'rxjs';\nimport {\n NgbColumnReorderEvent,\n NgbColumnReorderOptions,\n NgbDataGridState,\n NgbDataGridExportOptions,\n NgbDataGridProcessOptions,\n NgbDataGridTheme,\n NgbDataGridResponsiveOptions,\n NgbEditMode\n} from '../datagrid.types';\nimport { ngbApplyDataGridOperations } from '../data-operations';\nimport { ExcelExportAdapter, NgbExportService, PdfExportAdapter } from '../services/export.services';\nimport { NgbDatagridDefaultEditService, NgbDatagridEditService, NgbDatagridTrackByFn } from '../services/editing.service';\nimport { JsPdfAdapter } from '../adapters/jsdf.adapter';\nimport { XlsxAdapter } from '../adapters/xlsx.adapter';\n\nimport { ExportButtonDirective, ExportButtonContext } from '../directives/export-button.directive';\nimport { NgbGridColumnDirective } from '../directives/grid-column.directive';\nimport { NgbDatagridAddRowComponent } from './components/datagrid-add-row.component';\nimport { NgbDatagridColgroupComponent } from './components/datagrid-colgroup.component';\nimport { NgbDatagridDataRowComponent } from './components/datagrid-data-row.component';\nimport { NgbDatagridDetailRowComponent } from './components/datagrid-detail-row.component';\nimport { NgbDatagridFooterComponent } from './components/datagrid-footer.component';\nimport { NgbDatagridHeaderComponent } from './components/datagrid-header.component';\nimport { NgbDatagridFilterMenuPanelComponent } from './components/datagrid-filter-menu-panel.component';\nimport { NgbDatagridRowFilterOperatorPanelComponent } from './components/datagrid-row-filter-operator-panel.component';\nimport { NgbDatagridToolbarComponent } from './components/datagrid-toolbar.component';\nimport { NgbDatagridEditingToolbarComponent } from './components/datagrid-editing-toolbar.component';\nimport { NgbDatagridExternalEditorComponent } from './components/datagrid-external-editor.component';\nimport { NgbGridHighlightDirective, HighlightItem } from './directives/grid-highlight.directive';\nimport { NgbSyncColgroupDirective } from './directives/colgroup-sync.directive';\nimport { NgbDndDropEvent, NgbDndListDirective } from '../../../drag-drop/src/directive/dnd-list.directive';\nimport { NgbDndItemDirective } from '../../../drag-drop/src/directive/dnd-item.directive';\nimport {\n NgbCompositeFilterDescriptor,\n NgbFilterDescriptor,\n NgbFilterable,\n NgbFilterMode,\n NgbFilterOperator,\n ngbAllowedFilterOperators,\n ngbColumnTypeToFilterType,\n ngbDefaultFilterOperator,\n ngbFilterOperatorLabel,\n ngbIsCompositeFilter,\n ngbSetFieldFilter,\n NgbMenuFilterConditionDraft\n} from '../models/filtering';\nimport { NGB_DATAGRID_HOST } from '../layout-toolbar/datagrid-host.token';\nimport { NgbMultiCheckboxFilterOptions } from '../datagrid.types';\nimport {\n NGB_DATAGRID_DEFAULT_LABELS,\n NgbDatagridLabels,\n NgbDatagridTextDirection,\n ngbFormatDatagridLabel,\n} from '../models/datagrid-labels';\n\ntype SortDir = 'asc' | 'desc' | '';\n\ntype Key<T> = Extract<keyof T, string>;\n\ntype KeyOf<T> = Extract<keyof T, string>;\n\nconst MAX_EMAIL_LENGTH = 254;\nconst SELECTION_COL_WIDTH = 48;\nconst DETAIL_COL_WIDTH = 48;\nconst STICKY_TOGGLE_COL_WIDTH = 48;\nconst ACTION_COL_WIDTH = 176;\n\ntype UtilityColumnKind = 'selection' | 'detail' | 'sticky-toggle' | 'actions';\n\nexport type NgbTableResponsive = true | false | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';\nexport interface NgbTableOptions {\n stripedRows?: boolean;\n stripedColumns?: boolean;\n hoverRows?: boolean;\n activeRows?: boolean;\n bordered?: boolean;\n borderless?: boolean;\n small?: boolean;\n groupDividers?: boolean;\n align?: 'top' | 'middle' | 'bottom';\n caption?: string;\n captionSide?: 'top' | 'bottom';\n responsive?: NgbTableResponsive;\n stickyHeader?: boolean;\n stickyFooter?: boolean;\n stickyRows?: boolean;\n density?: 'comfortable' | 'compact';\n stacked?: boolean;\n /** `list` = single-column cards; `cards` = multi-column card rows (use `stackedGroup` on columns). */\n stackedLayout?: 'list' | 'cards';\n /** Alternating row backgrounds in the table body (Figma patient grid). */\n zebraStripes?: boolean;\n}\n\n/** Tabular columns vs adaptive stacked cards (`stacked` in {@link NgbTableOptions}). */\nexport type NgbDataLayoutMode = 'tabular' | 'stacked';\n\nexport type NgbSelectionMode = 'none' | 'single' | 'multiple';\nexport type NgbSelectionBehavior = 'row' | 'checkbox' | 'both';\nexport type NgbSelectionKeyMode = 'desktop' | 'mobile';\nexport type NgbRowKey = string | ((row: any, rowIndex: number) => any);\nexport type NgbColKey = string | ((column: any, columnIndex: number) => any);\n\nexport interface NgbSelectionLabels {\n selectAll?: string;\n unselectAll?: string;\n selectRow?: string;\n unselectRow?: string;\n}\n\nconst isReasonableEmail = (value: unknown): boolean => {\n if (value == null) return false;\n const str = String(value);\n if (!str || str.length > MAX_EMAIL_LENGTH) return false;\n // Basic, linear-time check: one \"@\", non-empty local part, and a domain with at least one \".\".\n const at = str.indexOf('@');\n if (at <= 0) return false;\n if (str.indexOf('@', at + 1) !== -1) return false;\n if (at === str.length - 1) return false;\n if (/\\s/.test(str)) return false;\n const dot = str.lastIndexOf('.');\n if (dot <= at + 1) return false;\n if (dot === str.length - 1) return false;\n return true;\n};\n\n@Component({\n selector: 'ngb-datagrid',\n templateUrl: './datagrid.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NgbSyncColgroupDirective,\n NgbGridHighlightDirective,\n NgbDatagridToolbarComponent,\n NgbDatagridEditingToolbarComponent,\n NgbDatagridExternalEditorComponent,\n NgbDatagridColgroupComponent,\n NgbDatagridHeaderComponent,\n NgbDatagridFilterMenuPanelComponent,\n NgbDatagridRowFilterOperatorPanelComponent,\n NgbDatagridAddRowComponent,\n NgbDatagridDataRowComponent,\n NgbDatagridDetailRowComponent,\n NgbDatagridFooterComponent,\n NgbDndListDirective,\n NgbDndItemDirective\n ],\n styleUrls: ['./datagrid.component.scss'],\n providers: [\n { provide: PdfExportAdapter, useClass: JsPdfAdapter },\n { provide: ExcelExportAdapter, useClass: XlsxAdapter },\n { provide: NGB_DATAGRID_HOST, useExisting: forwardRef(() => Datagrid) },\n ],\n standalone:true\n})\nexport class Datagrid<T = any> implements AfterContentInit, OnChanges {\n /** Column definitions to render */\n private _columns: ColumnDef<T>[] = [];\n @Input()\n get columns(): ColumnDef<T>[] {\n return this._columns;\n }\n set columns(value: ColumnDef<T>[] | null | undefined) {\n this._columns = value ?? [];\n this.invalidateColumnCaches();\n this.syncColumnWidthOverrides(true);\n this.syncColumnOrder(true);\n }\n\n /** Row data to display */\n private _data: T[] = [];\n @Input()\n get data(): T[] {\n return this._data;\n }\n set data(value: T[] | null | undefined) {\n this._data = value ?? [];\n this.invalidateDataCaches();\n }\n /**\n * When `true`, shows a loading overlay and sets `aria-busy` on the grid root.\n * Use while fetching remote data before assigning `[data]`.\n */\n @Input() loading = false;\n /**\n * Total record count for paging and range labels when using server-side data binding.\n * When set and greater than `data.length`, the grid treats `[data]` as the current page only\n * (no client-side page slicing). Omit for local in-memory arrays.\n */\n private _total: number | null = null;\n @Input()\n get total(): number | null {\n return this._total;\n }\n set total(value: number | null | undefined) {\n this._total = value ?? null;\n this.invalidatePagedCache();\n }\n private _enableSorting = false;\n @Input()\n get enableSorting(): boolean {\n return this._enableSorting;\n }\n set enableSorting(value: boolean) {\n this._enableSorting = value;\n this.invalidateSortedCaches();\n this.markGridForCheck();\n }\n private _enableFiltering = false;\n @Input()\n get enableFiltering(): boolean {\n return this._enableFiltering;\n }\n set enableFiltering(value: boolean) {\n this._enableFiltering = value;\n this.invalidateFilteredCaches();\n this.markGridForCheck();\n }\n private _filterable: NgbFilterable = false;\n @Input()\n get filterable(): NgbFilterable {\n return this._filterable;\n }\n set filterable(value: NgbFilterable | null | undefined) {\n this._filterable = value ?? false;\n this.invalidateFilteredCaches();\n this.markGridForCheck();\n }\n private _enableGlobalFilter = false;\n @Input()\n get enableGlobalFilter(): boolean {\n return this._enableGlobalFilter;\n }\n set enableGlobalFilter(value: boolean) {\n this._enableGlobalFilter = value;\n this.invalidateFilteredCaches();\n this.markGridForCheck();\n }\n private _filterMode: NgbFilterMode = 'row';\n @Input()\n get filterMode(): NgbFilterMode {\n return this._filterMode;\n }\n set filterMode(value: NgbFilterMode | null | undefined) {\n this._filterMode = value ?? 'row';\n this.markGridForCheck();\n }\n private _filter: NgbCompositeFilterDescriptor | null = null;\n @Input()\n get filter(): NgbCompositeFilterDescriptor | null {\n return this._filter;\n }\n set filter(value: NgbCompositeFilterDescriptor | null | undefined) {\n this._filter = value ?? null;\n this.localFilter = this.cloneComposite(this._filter);\n this.syncLegacyFilters(this.localFilter);\n this.invalidateFilteredCaches();\n }\n @Input() filterOperators?: Partial<Record<ColumnType, NgbFilterOperator[]>>;\n @Input() filterManual = false;\n @Input() externalFiltering = false;\n /** Opts local arrays into the reusable DataGrid operation helper for filter/sort/page processing. */\n private _dataOperations: boolean | NgbDataGridProcessOptions<T> = false;\n @Input()\n get dataOperations(): boolean | NgbDataGridProcessOptions<T> {\n return this._dataOperations;\n }\n set dataOperations(value: boolean | NgbDataGridProcessOptions<T> | null | undefined) {\n this._dataOperations = value ?? false;\n this.invalidatePagedCache();\n }\n /**\n * Optional controlled data-operation state. When provided, the grid syncs page, pageSize,\n * sort, filter, and global filter from this object.\n */\n private _state: NgbDataGridState | null = null;\n @Input()\n get state(): NgbDataGridState | null {\n return this._state;\n }\n set state(value: NgbDataGridState | null | undefined) {\n this._state = value ?? null;\n this.syncFromDataState(this._state);\n }\n /** Footer actions for the built-in multi-checkbox filter menu. */\n @Input() multiCheckboxFilterOptions: NgbMultiCheckboxFilterOptions = {};\n private _enablePagination = false;\n @Input()\n get enablePagination(): boolean {\n return this._enablePagination;\n }\n set enablePagination(value: boolean) {\n this._enablePagination = value;\n this.invalidatePagedCache();\n }\n /**\n * Pager configuration. `true` enables the pager with defaults; pass an object to customize.\n * When set, pagination is active even if `[enablePagination]` is false.\n */\n private _pageable: boolean | NgbDatagridPageableSettings = false;\n @Input()\n get pageable(): boolean | NgbDatagridPageableSettings {\n return this._pageable;\n }\n set pageable(value: boolean | NgbDatagridPageableSettings | null | undefined) {\n this._pageable = value ?? false;\n this.invalidatePagedCache();\n }\n @Input() enableEdit = false;\n @Input() enableDelete = false;\n /** @deprecated Prefer `pageable.pageSizes`. Kept for `[enablePagination]` compatibility. */\n @Input() pageSizeOptions: number[] = [5, 10, 25, 50];\n\n private _enableAdd = false;\n @Input()\n get enableAdd(): boolean {\n return this._enableAdd;\n }\n set enableAdd(value: boolean) {\n this._enableAdd = value;\n this.markGridForCheck();\n }\n /** Accessible label (aria-label) applied to the add-row button. */\n @Input() addButtonAriaLabel: string | null = 'Add row';\n /** Visible text rendered inside the add-row button. */\n @Input() addButtonText = '+ Add';\n /** Shows sticky toggle column and keeps pinned rows at the top of the list. */\n @Input() stickyRows = false;\n /** Enables sticky column header when scrolling. */\n @Input() stickyHeader = false;\n /** Enables sticky footer when scrolling. */\n @Input() stickyFooter = false;\n /** Enables scroll table body container */\n @Input() scrollable = true;\n /** Row height used to stack multiple sticky rows without overlap (px). */\n @Input() stickyRowHeight = 40;\n /** Header height (px) used to offset sticky rows below the header. */\n @Input() stickyHeaderHeight = 40;\n /** Footer height (px) used to offset scrollable area. */\n @Input() stickyFooterHeight = 56;\n /** Bootstrap-like table styling options. */\n private _tableOptions: NgbTableOptions = {};\n @Input()\n get tableOptions(): NgbTableOptions {\n return this._tableOptions;\n }\n set tableOptions(value: NgbTableOptions | null | undefined) {\n this._tableOptions = value ?? {};\n this.invalidatePagedCache();\n }\n /**\n * When set, overrides `tableOptions.stacked` for layout mode.\n * Use `'stacked'` for card/label-value rows or `'tabular'` for the standard column grid.\n */\n @Input() dataLayoutMode: NgbDataLayoutMode | null = null;\n /** Selection mode for rows. */\n @Input() selectionMode: NgbSelectionMode = 'none';\n /** Selection activation: row click, checkbox only, or both. */\n @Input() selectionBehavior: NgbSelectionBehavior = 'row';\n /** Keyboard modifier rules for multi-select. */\n @Input() selectionKeyMode: NgbSelectionKeyMode = 'desktop';\n /** Enable header select-all checkbox for multiple mode. */\n @Input() selectAllEnabled = true;\n /** A11y labels for selection controls. */\n @Input() selectionA11yLabels: NgbSelectionLabels = {};\n /** Disable selection for specific rows. */\n @Input() selectionDisabledFn?: (row: T, index: number) => boolean;\n /** Highlight items (row/cell). */\n private _highlightedIndex: HighlightItem[] = [];\n @Input()\n get highlightedIndex(): HighlightItem[] {\n return this._highlightedIndex;\n }\n set highlightedIndex(value: HighlightItem[] | null | undefined) {\n this._highlightedIndex = value ?? [];\n this.updateHighlightCache();\n }\n /** Row key for highlighting. */\n @Input() highlightRowKey: NgbRowKey | null = null;\n /** Column key for highlighting. */\n @Input() highlightColKey: NgbColKey | null = null;\n /** Accessible label for the global filter input. */\n @Input() globalFilterAriaLabel = 'Search all columns';\n /** Placeholder for the built-in global search input. */\n @Input() globalFilterPlaceholder = 'Search all columns';\n /** When set, matching substrings in visible cells are wrapped with `.grid-search-highlight`. */\n @Input() searchHighlightTerm = '';\n /** Column fields included in search highlighting; all visible columns when empty. */\n @Input() searchHighlightFields: string[] | null = null;\n /** Accessible label announced when expanding a row. */\n @Input() expandRowAriaLabel = 'Expand row';\n /** Accessible label announced when collapsing a row. */\n @Input() collapseRowAriaLabel = 'Collapse row';\n /** Accessible label for the PDF export button. */\n @Input() exportPdfAriaLabel = 'Export to PDF';\n /** Accessible label for the Excel export button. */\n @Input() exportExcelAriaLabel = 'Export to Excel';\n /** Optional defaults for new rows */\n @Input() newRowDefaults: | Partial<Record<KeyOf<T>, any>> | (() => Partial<Record<KeyOf<T>, any>>) | null = null;\n @Input() strictEmail = false; // turn off if needed (e.g., intranet emails)\n @Input() editOnRowClick = false;\n /** Row editing interaction: inline actions, in-cell, external dialog, or toolbar selection. */\n @Input() editMode: NgbEditMode = 'inline';\n /** Hint shown in toolbar editing mode when a row is selected. */\n @Input() toolbarEditHint = 'Row selected — click Edit to modify or Delete to remove';\n @Input() singleExpand = false; // accordion mode: one row expanded at a time\n private _exportOptions: NgbDataGridExportOptions = {\n enabled: false,\n type: 'both',\n pages: 'current',\n fileName: 'export'\n };\n @Input()\n get exportOptions(): NgbDataGridExportOptions {\n return this._exportOptions;\n }\n set exportOptions(value: NgbDataGridExportOptions | null | undefined) {\n this._exportOptions = value ?? {\n enabled: false,\n type: 'both',\n pages: 'current',\n fileName: 'export'\n };\n this.markGridForCheck();\n }\n\n @Input() theme: NgbDataGridTheme = 'bootstrap';\n @Input() responsive: NgbDataGridResponsiveOptions | boolean = false;\n @Input() trackBy?: NgbDatagridTrackByFn<T>;\n @Input() rowClass?: string | string[] | Record<string, boolean> | ((row: T, rowIndex: number) => string | string[] | Record<string, boolean>);\n @Input() rowStyle?: Record<string, string | number> | ((row: T, rowIndex: number) => Record<string, string | number> | null | undefined);\n @Input() rowReorderable = false;\n private _columnReorderable = false;\n @Input()\n get columnReorderable(): boolean {\n return this._columnReorderable;\n }\n set columnReorderable(value: boolean) {\n this._columnReorderable = value;\n this.markGridForCheck();\n }\n /** Enables drag-to-resize on column headers (requires explicit column widths). */\n private _resizable = false;\n @Input()\n get resizable(): boolean {\n return this._resizable;\n }\n set resizable(value: boolean) {\n this._resizable = value;\n this.markGridForCheck();\n }\n /** Render row actions as icon-only square buttons (Figma editing screen). */\n @Input() actionDisplay: 'text' | 'icons' = 'text';\n /** Show a STICKY badge on the configured column when a row is pinned. */\n @Input() showStickyRowBadge = false;\n @Input() stickyRowBadgeField: string | null = null;\n @Input() stickyRowBadgeLabel = 'STICKY';\n /** Localized strings for built-in UI; individual aria/text inputs override matching keys. */\n @Input() labels: NgbDatagridLabels = {};\n /** BCP 47 locale for pagination range and number formatting (e.g. `en-US`, `ar-SA`). */\n @Input() locale: string | null = null;\n /** Text direction on the grid root; `auto` inherits from document or parent `dir`. */\n @Input() dir: NgbDatagridTextDirection = 'auto';\n /** Enables arrow-key cell focus, Space selection, Alt+Page paging, and F3 filter shortcuts. */\n @Input() keyboardNavigation = true;\n @Input() editService?: NgbDatagridEditService<T>;\n\n // Data hooks for export\n @Input() dataProviderAll?: () => Observable<any[]> | Promise<any[]> | any[]; // used when pages='all'\n @Input() dataProviderSelection?: () => any[]; // used when pages='selection'\n \n // Grab the directive and its TemplateRef\n @ContentChild(ExportButtonDirective) exportButtonDir?: ExportButtonDirective;\n @ViewChild('bodyScroller') bodyScroller?: ElementRef<HTMLElement>;\n @ViewChild('headerScroller') headerScroller?: ElementRef<HTMLElement>;\n private hostEl = inject(ElementRef<HTMLElement>);\n colgroupSyncId = `dg-col-${Math.random().toString(36).slice(2, 8)}`;\n private columnWidthOverrides: Record<string, number> = {};\n private resizeSession: { field: string; startX: number; startWidth: number } | null = null;\n private columnOrder: string[] = [];\n columnDragField: string | null = null;\n columnDragOverIndex: number | null = null;\n\n exporting = false;\n \n @Output() rowAdd = new EventEmitter<{ newRow: T }>();\n\n // events\n @Output() rowEdit = new EventEmitter<{ row: T; index: number }>();\n @Output() rowSave = new EventEmitter<{ original: T; updated: T; index: number }>();\n @Output() rowCancel = new EventEmitter<{ row: T; index: number }>();\n @Output() rowDelete = new EventEmitter<{ row: T; index: number }>();\n\n @Output() sortChange = new EventEmitter<{ active: string | null; direction: 'asc' | 'desc' | '' }>();\n @Output() filterChange = new EventEmitter<NgbCompositeFilterDescriptor>();\n @Output() filtersChange = new EventEmitter<{ global: string; columns: Record<string, string> }>();\n @Output() pageChange = new EventEmitter<{ page: number; pageSize: number }>();\n @Output() dataStateChange = new EventEmitter<NgbDataGridState>();\n @Output() selectionChange = new EventEmitter<{ selected: T[]; lastAction: { row: T; index: number; selected: boolean } | null }>();\n @Output() rowReorder = new EventEmitter<{ row: T; fromIndex: number; toIndex: number; data: T[] }>();\n @Output() columnReorder = new EventEmitter<NgbColumnReorderEvent<ColumnDef<T>>>();\n\n @ContentChild(NgbRowDetailTemplate) rowDetailTpl?: NgbRowDetailTemplate<T>;\n @ContentChild(NgbPagerTemplate) pagerTpl?: NgbPagerTemplate<T>;\n private exporter = inject(NgbExportService); // instead of constructor(private exporter: NgbExportService) {}\n\n expanded: Set<number> = new Set<number>();\n\n private fb = inject(FormBuilder);\n\n public filterForm: FormGroup = this.fb.group({});\n public globalFilterCtrl = new FormControl<string>('', { nonNullable: true });\n\n addingNew = false;\n draftNew: Partial<Record<KeyOf<T>, any>> | null = null;\n errorsNew: Partial<Record<KeyOf<T>, string>> = {};\n // --- sorting (from previous step)\n private _sort: { active: Extract<keyof T, string> | null; direction: SortDir } = { active: null, direction: '' };\n get sort(): { active: Extract<keyof T, string> | null; direction: SortDir } {\n return this._sort;\n }\n set sort(value: { active: Extract<keyof T, string> | null; direction: SortDir } | null | undefined) {\n this._sort = value ?? { active: null, direction: '' };\n this.invalidateSortedCaches();\n }\n stickyRowIds: Set<any> = new Set<any>();\n selectedRowIds: Set<any> = new Set<any>();\n private selectionAnchor: number | null = null;\n private highlightRowMap: Map<any, HighlightItem[]> = new Map();\n // --- filtering\n private _globalFilter = '';\n get globalFilter(): string {\n return this._globalFilter;\n }\n set globalFilter(value: string | null | undefined) {\n this._globalFilter = value ?? '';\n this.invalidateFilteredCaches();\n }\n private _filters: Record<string, string> = {};\n get filters(): Record<string, string> {\n return this._filters;\n }\n set filters(value: Record<string, string> | null | undefined) {\n this._filters = value ?? {};\n this.invalidateFilteredCaches();\n }\n private _localFilter: NgbCompositeFilterDescriptor = { logic: 'and', filters: [] };\n get localFilter(): NgbCompositeFilterDescriptor {\n return this._localFilter;\n }\n set localFilter(value: NgbCompositeFilterDescriptor | null | undefined) {\n this._localFilter = value ?? { logic: 'and', filters: [] };\n this.invalidateFilteredCaches();\n }\n openFilterMenuField: string | null = null;\n openFilterMenuAnchor: HTMLElement | null = null;\n openRowFilterField: string | null = null;\n openRowFilterOperatorAnchor: HTMLElement | null = null;\n openMenuOperatorField: string | null = null;\n menuDrafts: Record<string, NgbMenuFilterConditionDraft[]> = {};\n /** Join logic between conditions in a column filter menu (And / Or). */\n menuDraftJoinLogic: Record<string, 'and' | 'or'> = {};\n multiCheckboxDrafts: Record<string, any[]> = {};\n multiCheckboxSearch: Record<string, string> = {};\n private syncingFilterForm = false;\n private _page = 1;\n get page(): number {\n return this._page;\n }\n set page(value: number | null | undefined) {\n const next = Math.max(1, Math.trunc(Number(value) || 1));\n this._page = next;\n this.invalidatePagedCache();\n }\n private _pageSize = 10;\n @Input()\n get pageSize(): number {\n return this._pageSize;\n }\n set pageSize(value: number | null | undefined) {\n this._pageSize = Math.max(1, Math.trunc(Number(value) || 10));\n this.invalidatePagedCache();\n }\n\n /** Inline / in-cell editing state */\n editingIndex: number | null = null; // index in `paged` view\n editingCell: { rowIndex: number; field: string } | null = null;\n /** Roving keyboard focus within the current page (data cells). */\n focusedCell: { rowIndex: number; colIndex: number } | null = null;\n /** Screen-reader status updates (sort, page, selection). */\n statusMessage = '';\n editForm: FormGroup = this.fb.group({});\n saveAttemptedEdit = false;\n\n /** External dialog editing state */\n externalEditOpen = false;\n externalEditIsNew = false;\n externalEditPagedIndex: number | null = null;\n externalForm: FormGroup = this.fb.group({});\n saveAttemptedExternal = false;\n private externalDialogOpener: HTMLElement | null = null;\n private externalDialogFocusedOnce = false;\n\n addForm: FormGroup = this.fb.group({});\n saveAttemptedNew = false;\n private addDraftRowId: any = null;\n\n private readonly defaultEditService = new NgbDatagridDefaultEditService<T>();\n private cdr = inject(ChangeDetectorRef);\n private resolvedColumnsCache: ColumnDef<T>[] = [];\n private visibleColumnsCache: ColumnDef<T>[] = [];\n private filteredCache: T[] = [];\n private sortedCache: T[] = [];\n private pagedCache: T[] = [];\n private resolvedColumnsDirty = true;\n private visibleColumnsDirty = true;\n private filteredDirty = true;\n private sortedDirty = true;\n private pagedDirty = true;\n private rowIndexMap = new Map<any, number>();\n private rowIndexMapSource: T[] | null = null;\n\n private norm(v: unknown): string {\n return (v ?? '').toString().toLowerCase().trim();\n }\n\n private keyOf(col: ColumnDef<T>): KeyOf<T> {\n return col.field as KeyOf<T>;\n }\n\n private getDefaults(): Partial<Record<KeyOf<T>, any>> {\n return typeof this.newRowDefaults === 'function'\n ? (this.newRowDefaults as any)() ?? {}\n : this.newRowDefaults ?? {};\n }\n\n private defaultFor(col: ColumnDef<T>): any {\n const d = this.getDefaults();\n const key = col.field as KeyOf<T>;\n if (key in d) return d[key];\n switch (col.type) {\n case 'boolean': return false;\n case 'number': return '';\n case 'date': return '';\n default: return '';\n }\n }\n private numberValidator() {\n const rx = /^-?\\d+(\\.\\d+)?$/;\n return (c: AbstractControl) =>\n c.value === '' || c.value === null || c.value === undefined || rx.test(String(c.value))\n ? null\n : { number: true };\n }\n\n private dateValidator() {\n return (c: AbstractControl) => {\n const v = c.value;\n if (v === '' || v === null || v === undefined) return null;\n return isNaN(Date.parse(String(v))) ? { date: true } : null;\n };\n }\n\n private buildFormFromRow(row?: Partial<Record<KeyOf<T>, any>>): FormGroup {\n const group: Record<string, any> = {};\n const sampleRow = (row ?? {}) as T;\n const isNew = !row || !Object.keys(row).length;\n for (const col of this.resolvedColumns) {\n if (!this.isCellEditable(col, sampleRow, isNew)) continue;\n const key = col.field as string;\n const initial = row && key in row ? (row as any)[key] : this.defaultFor(col);\n const v: any[] = [];\n\n if (col.required && col.type !== 'boolean') v.push(Validators.required);\n if (col.type === 'email') {\n v.push(this.strictEmail ? this.strictEmailValidator() : Validators.email);\n } \n if (col.type === 'number') v.push(this.numberValidator());\n if (col.type === 'date') v.push(this.dateValidator());\n // NOTE: If you need \"boolean must be true\", add Validators.requiredTrue here.\n\n group[key] = [initial, v];\n }\n return this.fb.group(group);\n }\n\n private strictEmailValidator() {\n // simple, pragmatic: local@domain.tld (tld >= 2)\n const rx = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$/;\n return (c: AbstractControl) => {\n const v = c.value;\n if (v === null || v === undefined || v === '') return null; // let \"required\" handle empties\n if (`${v}`.length > MAX_EMAIL_LENGTH) return { email: true };\n return rx.test(String(v)) ? null : { email: true };\n };\n }\n\n //Getter for the ng-template\n get exportButtonTpl(): TemplateRef<ExportButtonContext> | null {\n return this.exportButtonDir?.templateRef ?? null;\n }\n\n get gridHost(): this {\n return this;\n }\n\n get declarativeColumns(): ColumnDef<T>[] {\n return this.gridColumnQ?.toArray().map((col) => col.toColumnDef()) ?? [];\n }\n\n get resolvedColumns(): ColumnDef<T>[] {\n if (this.resolvedColumnsDirty) {\n const declarative = this.declarativeColumns;\n if (declarative.length) {\n if (this.columns?.length && !this.warnedDeclarativeColumns) {\n console.warn('ngb-datagrid: declarative columns take precedence over the columns input.');\n this.warnedDeclarativeColumns = true;\n }\n this.resolvedColumnsCache = declarative;\n } else {\n this.resolvedColumnsCache = this.columns ?? [];\n }\n this.resolvedColumnsDirty = false;\n }\n return this.resolvedColumnsCache;\n }\n\n get visibleColumns(): ColumnDef<T>[] {\n if (this.visibleColumnsDirty) {\n const visible = this.resolvedColumns.filter((col) => !col.hidden);\n const byField = new Map(visible.map((col) => [col.field as string, col]));\n const order = this.columnOrder.length\n ? this.columnOrder.filter((field) => byField.has(field))\n : visible.map((col) => col.field as string);\n const seen = new Set(order);\n for (const col of visible) {\n const field = col.field as string;\n if (!seen.has(field)) {\n order.push(field);\n seen.add(field);\n }\n }\n this.visibleColumnsCache = order.map((field) => byField.get(field)!).filter(Boolean);\n this.visibleColumnsDirty = false;\n }\n return this.visibleColumnsCache;\n }\n\n private invalidateColumnCaches(): void {\n this.resolvedColumnsDirty = true;\n this.visibleColumnsDirty = true;\n this.invalidateFilteredCaches();\n }\n\n private invalidateFilteredCaches(): void {\n this.filteredDirty = true;\n this.invalidateSortedCaches();\n }\n\n private invalidateSortedCaches(): void {\n this.sortedDirty = true;\n this.invalidatePagedCache();\n }\n\n private invalidatePagedCache(): void {\n this.pagedDirty = true;\n }\n\n private invalidateDataCaches(): void {\n this.rowIndexMapSource = null;\n this.invalidateFilteredCaches();\n }\n\n private markGridForCheck(): void {\n this.cdr?.markForCheck();\n }\n\n private ensureRowIndexMap(): void {\n if (this.rowIndexMapSource === this.data) return;\n this.rowIndexMap.clear();\n (this.data ?? []).forEach((row, index) => this.rowIndexMap.set(row, index));\n this.rowIndexMapSource = this.data;\n }\n\n private dataIndexOf(row: T, fallback = -1): number {\n this.ensureRowIndexMap();\n return this.rowIndexMap.get(row) ?? fallback;\n }\n\n private syncColumnOrder(resetFromColumns: boolean): void {\n const visible = this.resolvedColumns.filter((col) => !col.hidden);\n const fields = new Set(visible.map((col) => col.field as string));\n if (resetFromColumns || !this.columnOrder.length) {\n this.columnOrder = visible.map((col) => col.field as string);\n return;\n }\n const next = this.columnOrder.filter((field) => fields.has(field));\n for (const col of visible) {\n const field = col.field as string;\n if (!next.includes(field)) next.push(field);\n }\n this.columnOrder = next;\n }\n\n isColumnReorderEnabled(): boolean {\n if (!this.columnReorderable || this.isStackedLayout()) return false;\n if (this.visibleColumns.some((col) => col.locked || this.isColumnPinned(col))) return false;\n return true;\n }\n\n isColumnReorderable(col: ColumnDef<T>): boolean {\n if (!this.isColumnReorderEnabled()) return false;\n if (col.reorderable === false || col.locked) return false;\n if (this.isColumnPinned(col)) return false;\n return true;\n }\n\n onColumnDragStart(event: DragEvent, col: ColumnDef<T>, fromIndex: number): void {\n if (!this.isColumnReorderable(col)) {\n event.preventDefault();\n return;\n }\n this.columnDragField = col.field as string;\n this.columnDragOverIndex = fromIndex;\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', this.columnDragField);\n }\n }\n\n onColumnDragOver(event: DragEvent, toIndex: number): void {\n if (!this.columnReorderable || !this.columnDragField) return;\n event.preventDefault();\n if (event.dataTransfer) event.dataTransfer.dropEffect = 'move';\n this.columnDragOverIndex = toIndex;\n this.cdr.markForCheck();\n }\n\n onColumnDragLeave(event: DragEvent, index: number): void {\n if (this.columnDragOverIndex === index) {\n const related = event.relatedTarget as Node | null;\n const current = event.currentTarget as HTMLElement | null;\n if (current && related && current.contains(related)) return;\n this.columnDragOverIndex = null;\n this.cdr.markForCheck();\n }\n }\n\n onColumnDrop(event: DragEvent, toIndex: number): void {\n if (!this.columnReorderable || !this.columnDragField) return;\n event.preventDefault();\n const fromIndex = this.visibleColumns.findIndex((col) => col.field === this.columnDragField);\n this.moveColumn(fromIndex, toIndex);\n this.onColumnDragEnd();\n }\n\n onColumnDragEnd(): void {\n this.columnDragField = null;\n this.columnDragOverIndex = null;\n this.cdr.markForCheck();\n }\n\n /**\n * Reorders a visible column relative to another visible column index.\n * Only columns that pass {@link isColumnReorderable} can be moved.\n */\n reorderColumn(\n column: ColumnDef<T> | Extract<keyof T, string>,\n destinationIndex: number,\n options?: NgbColumnReorderOptions,\n emit = true\n ): void {\n if (!this.isColumnReorderEnabled()) return;\n const field = typeof column === 'string' ? column : (column.field as string);\n const cols = this.visibleColumns;\n const fromIndex = cols.findIndex((col) => col.field === field);\n if (fromIndex < 0 || destinationIndex < 0 || destinationIndex >= cols.length) return;\n\n const insertAfter = options?.before === false;\n let toIndex = insertAfter ? destinationIndex + 1 : destinationIndex;\n toIndex = Math.max(0, Math.min(toIndex, cols.length - 1));\n if (fromIndex === toIndex) return;\n\n this.moveColumn(fromIndex, toIndex, emit);\n }\n\n moveColumn(fromIndex: number, toIndex: number, emit = true): void {\n if (!this.isColumnReorderEnabled()) return;\n const cols = this.visibleColumns;\n if (fromIndex < 0 || toIndex < 0 || fromIndex >= cols.length || toIndex >= cols.length) return;\n if (fromIndex === toIndex) return;\n\n const fromCol = cols[fromIndex];\n if (!fromCol || !this.isColumnReorderable(fromCol)) return;\n\n const movingField = fromCol.field as string;\n const reorderableFields = cols\n .filter((col) => this.isColumnReorderable(col))\n .map((col) => col.field as string);\n const fromReorderIndex = reorderableFields.indexOf(movingField);\n if (fromReorderIndex < 0) return;\n\n let toReorderIndex = 0;\n let reorderableSeen = 0;\n for (let i = 0; i < cols.length; i++) {\n if (i === toIndex) {\n toReorderIndex = reorderableSeen;\n break;\n }\n if (this.isColumnReorderable(cols[i])) reorderableSeen++;\n }\n\n const nextReorderable = [...reorderableFields];\n nextReorderable.splice(fromReorderIndex, 1);\n nextReorderable.splice(toReorderIndex, 0, movingField);\n\n const order: string[] = [];\n let reorderCursor = 0;\n for (const col of cols) {\n if (!this.isColumnReorderable(col)) {\n order.push(col.field as string);\n } else {\n order.push(nextReorderable[reorderCursor++]);\n }\n }\n\n this.columnOrder = order;\n this.visibleColumnsDirty = true;\n const column = this.resolvedColumns.find((col) => col.field === movingField);\n const toIndexResolved = order.indexOf(movingField);\n if (emit && column) {\n this.columnReorder.emit({\n columns: this.visibleColumns.map((col) => ({ ...col })),\n column,\n fromIndex,\n toIndex: toIndexResolved,\n fields: [...order],\n });\n }\n this.syncResizableColgroups();\n this.cdr.markForCheck();\n }\n\n private validateColumnConfig(): void {\n const columns = this.resolvedColumns;\n const seenFields = new Set<string>();\n const duplicates = new Set<string>();\n columns.forEach((col) => {\n const field = `${col.field ?? ''}`;\n if (seenFields.has(field)) duplicates.add(field);\n seenFields.add(field);\n });\n if (duplicates.size) {\n throw new Error(`ngb-datagrid: duplicate column field(s): ${Array.from(duplicates).join(', ')}`);\n }\n\n const visible = this.visibleColumns;\n const hasPinned = visible.some((col) => this.isColumnPinned(col));\n if (!hasPinned) return;\n\n if (this.rowDetailTpl) {\n throw new Error('ngb-datagrid: detail rows are not supported with sticky or locked columns.');\n }\n\n const missingWidth = visible.filter((col) => !this.columnWidth(col) || this.columnWidth(col) <= 0);\n if (missingWidth.length) {\n throw new Error(`ngb-datagrid: sticky/locked columns require explicit width for all visible columns. Missing width on: ${missingWidth.map((col) => col.field).join(', ')}`);\n }\n\n if (this.resizable && !this.isStackedLayout()) {\n const missingResizableWidth = visible.filter((col) => !this.columnWidth(col) || this.columnWidth(col) <= 0);\n if (missingResizableWidth.length) {\n throw new Error(\n `ngb-datagrid: resizable columns require explicit width for all visible columns. Missing width on: ${missingResizableWidth.map((col) => col.field).join(', ')}`\n );\n }\n }\n\n if (visible.some((col) => col.locked) && !visible.some((col) => !col.locked)) {\n throw new Error('ngb-datagrid: at least one unlocked visible column is required when locked columns are used.');\n }\n\n let phase: 'leading' | 'middle' | 'trailing' = 'leading';\n visible.forEach((col) => {\n const side = this.columnOrderGroup(col);\n if (side === 'leading') {\n if (phase !== 'leading') {\n throw new Error('ngb-datagrid: start sticky/locked columns must appear before unlocked columns.');\n }\n return;\n }\n if (side === 'trailing') {\n phase = 'trailing';\n return;\n }\n if (phase === 'trailing') {\n throw new Error('ngb-datagrid: end sticky columns must appear after unlocked columns.');\n }\n phase = 'middle';\n });\n }\n\n isFilteringEnabled(): boolean {\n return ((this.filterable !== false && this.filterable !== 'none') || this.enableFiltering);\n }\n\n resolvedFilterMode(): NgbFilterMode {\n if (this.filterable === 'row' || this.filterable === 'menu' || this.filterable === 'multi' || this.filterable === 'none') {\n return this.filterable;\n }\n if (this.filterable === true) return 'row';\n return this.filterMode;\n }\n\n get filtered(): T[] {\n if (this.filteredDirty) {\n const src = this.data ?? [];\n const global = this.currentGlobalFilter();\n const filtering = this.isFilteringEnabled();\n const globalOnly = this.enableGlobalFilter && !filtering;\n\n if (!filtering && !globalOnly) {\n this.filteredCache = src;\n } else if (this.filterManual || this.externalFiltering) {\n this.filteredCache = src;\n } else {\n const descriptor = filtering ? this.effectiveFilterDescriptor() : { logic: 'and' as const, filters: [] };\n const resolvedColumns = this.resolvedColumns;\n this.filteredCache = src.filter((row) => {\n const matchesComposite = !descriptor.filters.length || this.matchesComposite(row, descriptor);\n if (!matchesComposite) return false;\n if (!global) return true;\n return resolvedColumns.some((column) => this.norm((row as any)?.[column.field]).includes(global));\n });\n }\n this.filteredDirty = false;\n }\n return this.filteredCache;\n }\n\n private effectiveFilterDescriptor(): NgbCompositeFilterDescriptor {\n const base = this.filter ?? this.localFilter;\n if (base?.filters?.length) return base;\n return this.legacyFilterDescriptor();\n }\n\n private legacyFilterDescriptor(): NgbCompositeFilterDescriptor {\n const filters = this.resolvedColumns\n .filter((col) => col.filterable && this.norm(this.filters[col.field as string]))\n .map((col) => ({\n field: col.field as string,\n operator: 'contains' as NgbFilterOperator,\n value: this.filters[col.field as string],\n ignoreCase: true\n }));\n return { logic: 'and', filters };\n }\n\n private currentGlobalFilter(): string {\n return this.norm(this.globalFilter || this.globalFilterCtrl.value);\n }\n\n private matchesComposite(row: T, descriptor: NgbCompositeFilterDescriptor): boolean {\n if (!descriptor.filters.length) return true;\n const results = descriptor.filters.map((filter) =>\n ngbIsCompositeFilter(filter) ? this.matchesComposite(row, filter) : this.matchesDescriptor(row, filter)\n );\n return descriptor.logic === 'or' ? results.some(Boolean) : results.every(Boolean);\n }\n\n private matchesDescriptor(row: T, descriptor: NgbFilterDescriptor): boolean {\n const column = this.resolvedColumns.find((col) => col.field === descriptor.field);\n const filterType = this.getColumnFilterType(column);\n const cellValue = this.normalizeFilterValue((row as any)?.[descriptor.field], filterType);\n const compareValue = this.normalizeFilterValue(descriptor.value, filterType);\n const ignoreCase = descriptor.ignoreCase ?? (filterType === 'text' || filterType === 'select');\n\n if (descriptor.operator === 'isnull') return cellValue == null;\n if (descriptor.operator === 'isnotnull') return cellValue != null;\n if (descriptor.operator === 'isempty') return cellValue === '';\n if (descriptor.operator === 'isnotempty') return cellValue !== '' && cellValue != null;\n\n if (filterType === 'numeric' || filterType === 'date') {\n const left = cellValue as number | null;\n const right = compareValue as number | null;\n if (left == null || right == null) return false;\n switch (descriptor.operator) {\n case 'eq': return left === right;\n case 'neq': return left !== right;\n case 'gt': return left > right;\n case 'gte': return left >= right;\n case 'lt': return left < right;\n case 'lte': return left <= right;\n default: return false;\n }\n }\n\n if (filterType === 'boolean') {\n switch (descriptor.operator) {\n case 'eq': return cellValue === compareValue;\n case 'neq': return cellValue !== compareValue;\n default: return false;\n }\n }\n\n const left = cellValue == null ? '' : String(cellValue);\n const right = compareValue == null ? '' : String(compareValue);\n const normalizedLeft = ignoreCase ? left.toLowerCase() : left;\n const normalizedRight = ignoreCase ? right.toLowerCase() : right;\n\n switch (descriptor.operator) {\n case 'contains': return normalizedLeft.includes(normalizedRight);\n case 'doesnotcontain': return !normalizedLeft.includes(normalizedRight);\n case 'eq': return normalizedLeft === normalizedRight;\n case 'neq': return normalizedLeft !== normalizedRight;\n case 'startswith': return normalizedLeft.startsWith(normalizedRight);\n case 'endswith': return normalizedLeft.endsWith(normalizedRight);\n default: return false;\n }\n }\n\n private normalizeFilterValue(value: any, filterType: ReturnType<Datagrid<T>['getColumnFilterType']>): any {\n if (value === '' || value === undefined) return null;\n if (value === null) return null;\n switch (filterType) {\n case 'numeric': {\n const parsed = Number(value);\n return Number.isNaN(parsed) ? null : parsed;\n }\n case 'date': {\n const parsed = Date.parse(String(value));\n return Number.isNaN(parsed) ? null : parsed;\n }\n case 'boolean':\n if (value === 'true') return true;\n if (value === 'false') return false;\n return !!value;\n default:\n return String(value);\n }\n }\n\n getColumnFilterType(col?: ColumnDef<T>): 'text' | 'numeric' | 'boolean' | 'date' | 'select' {\n return col?.filterType ?? ngbColumnTypeToFilterType(col?.type);\n }\n\n isMultiCheckboxMode(col: ColumnDef<T>): boolean {\n return this.isFilteringEnabled() && this.resolvedFilterMode() === 'multi' && !!col.filterable;\n }\n\n getAllowedOperators(col: ColumnDef<T>): NgbFilterOperator[] {\n if (col.allowedFilterOperators?.length) return col.allowedFilterOperators;\n const typeOperators = this.filterOperators?.[col.type ?? 'text'];\n if (typeOperators?.length) return typeOperators;\n return ngbAllowedFilterOperators(this.getColumnFilterType(col));\n }\n\n defaultFilterOperator(col: ColumnDef<T>): NgbFilterOperator {\n const allowed = this.getAllowedOperators(col);\n const explicit = col.defaultFilterOperator;\n if (explicit === '') {\n return allowed[0] ?? ngbDefaultFilterOperator(this.getColumnFilterType(col));\n }\n if (explicit) return explicit;\n return ngbDefaultFilterOperator(this.getColumnFilterType(col));\n }\n\n rowFilterOperator(col: ColumnDef<T>): NgbFilterOperator {\n const field = col.field as string;\n const raw = this.filterForm?.get(this.operatorControlName(field))?.value as NgbFilterOperator | '' | null | undefined;\n if (raw === '' || raw == null) {\n return this.defaultFilterOperator(col);\n }\n return raw;\n }\n\n operatorLabel(operator: NgbFilterOperator): string {\n const labels: Record<NgbFilterOperator, string> = {\n contains: 'Contains',\n doesnotcontain: 'Does not contain',\n eq: 'Equals',\n neq: 'Does not equal',\n startswith: 'Starts with',\n endswith: 'Ends with',\n gt: 'Greater than',\n gte: 'Greater than or equal',\n lt: 'Less than',\n lte: 'Less than or equal',\n isnull: 'Is null',\n isnotnull: 'Is not null',\n isempty: 'Is empty',\n isnotempty: 'Is not empty'\n };\n return labels[operator];\n }\n\n rowFilterOperatorLabel(col: ColumnDef<T>, operator: NgbFilterOperator): string {\n return ngbFilterOperatorLabel(operator, this.getColumnFilterType(col));\n }\n\n rowFilterMenuTitle(col: ColumnDef<T>): string {\n const filterType = this.getColumnFilterType(col);\n switch (filterType) {\n case 'numeric': return 'Number filter';\n case 'date': return 'Date filter';\n case 'boolean': return 'Boolean filter';\n case 'select': return 'Select filter';\n default: return 'String filter';\n }\n }\n\n rowFilterPlaceholder(col: ColumnDef<T>): string {\n if (col.filterPlaceholder) return col.filterPlaceholder;\n const filterType = this.getColumnFilterType(col);\n const header = String(col.header ?? '').trim().toLowerCase();\n if (filterType === 'date') return 'dd/mm/yyyy';\n if (filterType === 'numeric') return `Filter by ${header}...`;\n if (filterType === 'text' || filterType === 'select') return `Filter by ${header}...`;\n return '';\n }\n\n isSearchHighlightEnabled(): boolean {\n return !!this.norm(this.searchHighlightTerm);\n }\n\n shouldHighlightSearchInColumn(field: string): boolean {\n if (!this.isSearchHighlightEnabled()) return false;\n const fields = this.searchHighlightFields;\n if (!fields?.length) return true;\n return fields.includes(field);\n }\n\n formatCellDisplayValue(value: unknown): string {\n if (value == null) return '';\n if (typeof value === 'boolean') return value ? 'Yes' : 'No';\n return String(value);\n }\n\n getSearchHighlightSegments(value: unknown, field: string): Array<{ text: string; match: boolean }> {\n const display = this.formatCellDisplayValue(value);\n if (!this.shouldHighlightSearchInColumn(field)) {\n return [{ text: display, match: false }];\n }\n\n const term = this.norm(this.searchHighlightTerm);\n if (!term || !display) return [{ text: display, match: false }];\n\n const normalizedDisplay = this.norm(display);\n const segments: Array<{ text: string; match: boolean }> = [];\n let cursor = 0;\n\n while (cursor < display.length) {\n const slice = display.slice(cursor);\n const normalizedSlice = this.norm(slice);\n const matchIndex = normalizedSlice.indexOf(term);\n if (matchIndex < 0) {\n segments.push({ text: display.slice(cursor), match: false });\n break;\n }\n\n const start = cursor + matchIndex;\n const end = start + term.length;\n if (start > cursor) {\n segments.push({ text: display.slice(cursor, start), match: false });\n }\n segments.push({ text: display.slice(start, end), match: true });\n cursor = end;\n }\n\n return segments.length ? segments : [{ text: display, match: false }];\n }\n\n rowFilterEmptyOptionLabel(col: ColumnDef<T>): string {\n return this.getColumnFilterType(col) === 'boolean' ? '(All)' : 'Select';\n }\n\n booleanFilterOptionLabel(value: boolean): string {\n return value ? 'Yes' : 'No';\n }\n\n isRowFilterMenuOpen(field: string): boolean {\n return this.openRowFilterField === field;\n }\n\n get openRowFilterColumn(): ColumnDef<T> | null {\n if (!this.openRowFilterField) return null;\n return this.resolvedColumns.find((item) => item.field === this.openRowFilterField) ?? null;\n }\n\n toggleRowFilterMenu(field: string, anchor?: HTMLElement | null): void {\n if (this.openRowFilterField === field) {\n this.openRowFilterField = null;\n this.openRowFilterOperatorAnchor = null;\n this.cdr.markForCheck();\n return;\n }\n this.closeFilterMenu();\n this.openRowFilterField = field;\n this.openRowFilterOperatorAnchor = this.resolveFilterMenuAnchor(anchor);\n this.cdr.markForCheck();\n }\n\n setRowFilterOperator(col: ColumnDef<T>, operator: NgbFilterOperator): void {\n const field = col.field as string;\n this.filterForm.get(this.operatorControlName(field))?.setValue(operator);\n const value = this.filterForm.get(this.valueControlName(field))?.value;\n if (!this.operatorRequiresValue(operator) || !(value === null || value === undefined || value === '')) {\n this.applyRowFilter(col);\n }\n this.openRowFilterField = null;\n this.openRowFilterOperatorAnchor = null;\n this.cdr.markForCheck();\n }\n\n operatorRequiresValue(operator: NgbFilterOperator): boolean {\n return !['isnull', 'isnotnull', 'isempty', 'isnotempty'].includes(operator);\n }\n\n isRowFilterVisible(col: ColumnDef<T>): boolean {\n if (!col.filterable || !this.isFilteringEnabled()) return false;\n if (col.showFilterRow != null) return col.showFilterRow;\n return this.resolvedFilterMode() === 'row';\n }\n\n isRowFilterOperatorVisible(col: ColumnDef<T>): boolean {\n if (!this.isRowFilterVisible(col)) return false;\n if (this.getColumnFilterType(col) === 'boolean') return false;\n return col.showFilterOperator !== false;\n }\n\n isMenuFilterVisible(col: ColumnDef<T>): boolean {\n if (!col.filterable || !this.isFilteringEnabled()) return false;\n if (col.showFilterMenu != null) return col.showFilterMenu;\n return this.resolvedFilterMode() === 'menu' || this.resolvedFilterMode() === 'multi';\n }\n\n getColumnFilter(field: string): NgbFilterDescriptor | null {\n const descriptor = this.effectiveFilterDescriptor().filters.find(\n (filter): filter is NgbFilterDescriptor => !ngbIsCompositeFilter(filter) && filter.field === field\n );\n return descriptor ?? null;\n }\n\n hasActiveColumnFilter(field: string): boolean {\n return !!this.findFieldFilter(field);\n }\n\n private findFieldFilter(field: string): NgbFilterDescriptor | NgbCompositeFilterDescriptor | null {\n const found = this.effectiveFilterDescriptor().filters.find((filter) => {\n if (ngbIsCompositeFilter(filter)) {\n return filter.filters.every((item) => !ngbIsCompositeFilter(item) && item.field === field);\n }\n return filter.field === field;\n });\n return found ?? null;\n }\n\n private withoutFieldFilters(filters: Array<NgbFilterDescriptor | NgbCompositeFilterDescriptor>, field: string) {\n return filters.filter((filter) => {\n if (ngbIsCompositeFilter(filter)) {\n return !filter.filters.every((item) => !ngbIsCompositeFilter(item) && item.field === field);\n }\n return filter.field !== field;\n });\n }\n\n private upsertColumnFilter(\n field: string,\n operator: NgbFilterOperator,\n value: any,\n emit = true\n ): void {\n const base = this.cloneComposite(this.filter ?? this.localFilter);\n this.commitFilter(\n ngbSetFieldFilter(base, field, operator, value, {\n requiresValue: (op) => this.operatorRequiresValue(op)\n }),\n emit\n );\n }\n\n clearColumnFilter(field: string, emit = true): void {\n const next = this.cloneComposite(this.filter ?? this.localFilter);\n next.filters = this.withoutFieldFilters(next.filters, field);\n this.commitFilter(next, emit);\n this.setFilterFormField(field, this.defaultFilterOperator(this.resolvedColumns.find((col) => col.field === field)!), '');\n delete this.multiCheckboxDrafts[field];\n delete this.multiCheckboxSearch[field];\n if (this.openRowFilterField === field) {\n this.openRowFilterField = null;\n this.openRowFilterOperatorAnchor = null;\n }\n }\n\n clearAllFilters(emit = true): void {\n this.localFilter = { logic: 'and', filters: [] };\n this.filters = {};\n this.globalFilter = '';\n this.globalFilterCtrl.setValue('', { emitEvent: false });\n this.menuDrafts = {};\n this.menuDraftJoinLogic = {};\n this.multiCheckboxDrafts = {};\n this.multiCheckboxSearch = {};\n this.closeFilterMenu();\n this.openRowFilterField = null;\n this.openRowFilterOperatorAnchor = null;\n this.syncFilterFormFromState();\n this.page = 1;\n this.invalidateFilteredCaches();\n if (emit) {\n this.filterChange.emit(this.localFilter);\n this.filtersChange.emit({ global: '', columns: {} });\n this.emitDataStateChange();\n }\n this.cdr.markForCheck();\n }\n\n private commitFilter(filter: NgbCompositeFilterDescriptor, emit = true): void {\n this.localFilter = filter;\n this.syncLegacyFilters(filter);\n this.page = 1;\n this.invalidateFilteredCaches();\n this.syncFilterFormFromState();\n if (emit) {\n this.filterChange.emit(filter);\n this.filtersChange.emit({ global: this.currentGlobalFilterValue(), columns: { ...this.filters } });\n this.emitDataStateChange();\n }\n this.cdr.markForCheck();\n }\n\n private cloneComposite(filter: NgbCompositeFilterDescriptor | null | undefined): NgbCompositeFilterDescriptor {\n if (!filter) return { logic: 'and', filters: [] };\n return {\n logic: filter.logic,\n filters: filter.filters.map((item) => (ngbIsCompositeFilter(item) ? this.cloneComposite(item) : ({ ...item })))\n };\n }\n\n private syncLegacyFilters(filter: NgbCompositeFilterDescriptor): void {\n const next: Record<string, string> = {};\n filter.filters.forEach((item) => {\n if (ngbIsCompositeFilter(item)) return;\n next[item.field] = item.value == null ? '' : String(item.value);\n });\n this.filters = next;\n }\n\n currentGlobalFilterValue(): string {\n return this.globalFilter || this.globalFilterCtrl.value || '';\n }\n\n operatorControlName(field: string): string {\n return `${field}__operator`;\n }\n\n valueControlName(field: string): string {\n return `${field}__value`;\n }\n\n getFilterControl(field: string): AbstractControl | null {\n return this.filterForm.get(this.valueControlName(field));\n }\n\n applyRowFilter(col: ColumnDef<T>): void {\n const field = col.field as string;\n const operator = this.rowFilterOperator(col);\n const value = this.filterForm.get(this.valueControlName(field))?.value;\n this.upsertColumnFilter(field, operator, value);\n }\n\n private setFilterFormField(field: string, operator: NgbFilterOperator, value: any): void {\n this.syncingFilterForm = true;\n this.filterForm.get(this.operatorControlName(field))?.setValue(operator, { emitEvent: false });\n this.filterForm.get(this.valueControlName(field))?.setValue(value, { emitEvent: false });\n this.syncingFilterForm = false;\n }\n\n private syncFilterFormFromState(): void {\n this.resolvedColumns.filter((col) => col.filterable).forEach((col) => {\n const field = col.field as string;\n const descriptor = this.getColumnFilter(col.field as string);\n const currentOperator = this.filterForm.get(this.operatorControlName(field))?.value as NgbFilterOperator | '' | null | undefined;\n const preservedOperator = currentOperator || this.defaultFilterOperator(col);\n this.setFilterFormField(\n field,\n descriptor?.operator ?? preservedOperator,\n descriptor?.value ?? ''\n );\n });\n }\n\n private static readonly MENU_FILTER_CONDITION_COUNT = 2;\n\n private defaultMenuOperator(col: ColumnDef<T>): NgbFilterOperator {\n return this.defaultFilterOperator(col);\n }\n\n private defaultMenuCondition(col: ColumnDef<T>): NgbMenuFilterConditionDraft {\n return {\n operator: this.defaultMenuOperator(col),\n value: '',\n };\n }\n\n private defaultMenuDraftPair(col: ColumnDef<T>): NgbMenuFilterConditionDraft[] {\n return [this.defaultMenuCondition(col), this.defaultMenuCondition(col)];\n }\n\n private normalizeMenuDraftConditions(\n col: ColumnDef<T>,\n conditions: NgbMenuFilterConditionDraft[]\n ): NgbMenuFilterConditionDraft[] {\n const count = Datagrid.MENU_FILTER_CONDITION_COUNT;\n if (!conditions.length) return this.defaultMenuDraftPair(col);\n const normalized = conditions.slice(0, count).map((item) => ({ ...item }));\n while (normalized.length < count) {\n normalized.push(this.defaultMenuCondition(col));\n }\n return normalized;\n }\n\n private menuConditionsFromFieldFilter(field: string, col: ColumnDef<T>): NgbMenuFilterConditionDraft[] {\n const found = this.findFieldFilter(field);\n if (!found) return this.defaultMenuDraftPair(col);\n if (!ngbIsCompositeFilter(found)) {\n return this.normalizeMenuDraftConditions(col, [\n { operator: found.operator, value: found.value ?? '' },\n ]);\n }\n const direct = found.filters.filter((item): item is NgbFilterDescriptor => !ngbIsCompositeFilter(item));\n if (\n (found.logic === 'and' || found.logic === 'or') &&\n direct.length &&\n direct.every((item) => item.field === field)\n ) {\n this.menuDraftJoinLogic[field] = found.logic;\n return this.normalizeMenuDraftConditions(\n col,\n direct.map((item) => ({ operator: item.operator, value: item.value ?? '' }))\n );\n }\n return this.defaultMenuDraftPair(col);\n }\n\n ensureMenuJoinLogic(col: ColumnDef<T>): 'and' | 'or' {\n const field = col.field as string;\n if (!this.menuDraftJoinLogic[field]) {\n this.menuDraftJoinLogic[field] = 'and';\n }\n return this.menuDraftJoinLogic[field];\n }\n\n setMenuJoinLogic(col: ColumnDef<T>, logic: 'and' | 'or'): void {\n this.menuDraftJoinLogic[col.field as string] = logic;\n this.cdr.markForCheck();\n }\n\n menuFilterConditionIsValid(col: ColumnDef<T>, draft: NgbMenuFilterConditionDraft): boolean {\n if (!this.operatorRequiresValue(draft.operator)) return true;\n const value = draft.value;\n return value !== null && value !== undefined && value !== '';\n }\n\n canApplyMenuFilter(col: ColumnDef<T>): boolean {\n return this.ensureMenuDraftConditions(col).some((draft) => this.menuFilterConditionIsValid(col, draft));\n }\n\n canClearMenuFilter(col: ColumnDef<T>): boolean {\n return this.hasActiveColumnFilter(col.field as string);\n }\n\n ensureMenuDraftConditions(col: ColumnDef<T>): NgbMenuFilterConditionDraft[] {\n const field = col.field as string;\n const existing = this.menuDrafts[field];\n if (!existing?.length || existing.length !== Datagrid.MENU_FILTER_CONDITION_COUNT) {\n this.menuDrafts[field] = this.menuConditionsFromFieldFilter(field, col);\n }\n return this.menuDrafts[field];\n }\n\n /** First menu condition (header filter menus). */\n ensureMenuDraft(col: ColumnDef<T>): NgbMenuFilterConditionDraft {\n return this.ensureMenuDraftConditions(col)[0];\n }\n\n setMenuDraftOperator(col: ColumnDef<T>, operator: NgbFilterOperator, index = 0): void {\n this.ensureMenuDraftConditions(col)[index].operator = operator;\n this.openMenuOperatorField = null;\n }\n\n menuOperatorKey(field: string, index = 0): string {\n return `${field}:${index}`;\n }\n\n isMenuOperatorOpen(field: string, index = 0): boolean {\n return this.openMenuOperatorField === this.menuOperatorKey(field, index);\n }\n\n toggleMenuOperator(field: string, index = 0): void {\n const key = this.menuOperatorKey(field, index);\n this.openMenuOperatorField = this.openMenuOperatorField === key ? null : key;\n }\n\n get openFilterMenuColumn(): ColumnDef<T> | null {\n if (!this.openFilterMenuField) return null;\n return this.resolvedColumns.find((item) => item.field === this.openFilterMenuField) ?? null;\n }\n\n private closeFilterMenu(): void {\n this.openFilterMenuField = null;\n this.openFilterMenuAnchor = null;\n this.openMenuOperatorField = null;\n }\n\n private resolveFilterMenuAnchor(anchor?: HTMLElement | null): HTMLElement | null {\n if (anchor instanceof HTMLElement) return anchor;\n const native = (anchor as { nativeElement?: unknown } | null)?.nativeElement;\n return native instanceof HTMLElement ? native : null;\n }\n\n toggleFilterMenu(field: string, anchor?: HTMLElement | null): void {\n this.openFilterMenuField = this.openFilterMenuField === field ? null : field;\n if (this.openFilterMenuField !== field) {\n this.openMenuOperatorField = null;\n this.openFilterMenuAnchor = null;\n } else {\n this.openFilterMenuAnchor = this.resolveFilterMenuAnchor(anchor);\n }\n const col = this.resolvedColumns.find((item) => item.field === field);\n if (col && this.openFilterMenuField === field) {\n if (this.isMultiCheckboxMode(col)) {\n this.ensureMultiCheckboxDraft(col);\n } else {\n if (!this.hasActiveColumnFilter(field)) {\n delete this.menuDrafts[field];\n delete this.menuDraftJoinLogic[field];\n }\n this.ensureMenuDraftConditions(col);\n }\n }\n this.cdr.markForCheck();\n }\n\n applyMenuFilter(col: ColumnDef<T>): void {\n const field = col.field as string;\n const conditions = this.ensureMenuDraftConditions(col)\n .map((draft) => ({ ...draft }))\n .filter((draft) => {\n if (!this.operatorRequiresValue(draft.operator)) return true;\n const normalized = draft.value === undefined ? null : draft.value;\n return normalized !== null && normalized !== '';\n });\n\n const next = this.cloneComposite(this.filter ?? this.localFilter);\n const filters = this.withoutFieldFilters(next.filters, field);\n\n if (!conditions.length) {\n this.commitFilter({ ...next, filters });\n } else if (conditions.length === 1) {\n const draft = conditions[0];\n if (this.operatorRequiresValue(draft.operator)) {\n filters.push({ field, operator: draft.operator, value: draft.value, ignoreCase: true });\n } else {\n filters.push({ field, operator: draft.operator, ignoreCase: true });\n }\n this.commitFilter({ ...next, filters });\n } else {\n const joinLogic = this.ensureMenuJoinLogic(col);\n filters.push({\n logic: joinLogic,\n filters: conditions.map((draft) =>\n this.operatorRequiresValue(draft.operator)\n ? { field, operator: draft.operator, value: draft.value, ignoreCase: true }\n : { field, operator: draft.operator, ignoreCase: true }\n ),\n });\n this.commitFilter({ ...next, filters });\n }\n\n this.closeFilterMenu();\n }\n\n clearMenuFilter(col: ColumnDef<T>): void {\n const field = col.field as string;\n delete this.menuDrafts[field];\n delete this.menuDraftJoinLogic[field];\n this.clearColumnFilter(col.field as string);\n this.closeFilterMenu();\n }\n\n multiCheckboxOptions(col: ColumnDef<T>): Array<{ label: string; value: any }> {\n const seen = new Map<string, { label: string; value: any }>();\n for (const row of this.data ?? []) {\n const value = (row as any)?.[col.field];\n const key = this.multiCheckboxValueKey(value);\n if (!seen.has(key)) {\n seen.set(key, { label: this.multiCheckboxValueLabel(col, value), value });\n }\n }\n return Array.from(seen.values()).sort((a, b) => a.label.localeCompare(b.label, undefined, { sensitivity: 'base', numeric: true }));\n }\n\n multiCheckboxVisibleOptions(col: ColumnDef<T>): Array<{ label: string; value: any }> {\n const query = this.norm(this.multiCheckboxSearch[col.field as string]);\n const options = this.multiCheckboxOptions(col);\n if (!query) return options;\n return options.filter((option) => this.norm(option.label).includes(query));\n }\n\n multiCheckboxValueLabel(col: ColumnDef<T>, value: any): string {\n if (this.getColumnFilterType(col) === 'boolean') return this.booleanFilterOptionLabel(!!value);\n if (value === null || value === undefined || value === '') return '(Blank)';\n const option = col.options?.find((item) => item.value === value);\n return option?.label ?? String(value);\n }\n\n private multiCheckboxValueKey(value: any): string {\n return JSON.stringify(value);\n }\n\n ensureMultiCheckboxDraft(col: ColumnDef<T>): any[] {\n const field = col.field as string;\n if (!this.multiCheckboxDrafts[field]) {\n const active = this.multiCheckboxSelectedValues(col);\n this.multiCheckboxDrafts[field] = active ?? this.multiCheckboxOptions(col).map((option) => option.value);\n }\n return this.multiCheckboxDrafts[field];\n }\n\n multiCheckboxSelectedCount(col: ColumnDef<T>): number {\n return this.ensureMultiCheckboxDraft(col).length;\n }\n\n multiCheckboxTotalCount(col: ColumnDef<T>): number {\n return this.multiCheckboxOptions(col).length;\n }\n\n isMultiCheckboxChecked(col: ColumnDef<T>, value: any): boolean {\n const key = this.multiCheckboxValueKey(value);\n return this.ensureMultiCheckboxDraft(col).some((item) => this.multiCheckboxValueKey(item) === key);\n }\n\n toggleMultiCheckboxValue(col: ColumnDef<T>, value: any): void {\n const field = col.field as string;\n const selected = this.ensureMultiCheckboxDraft(col);\n const key = this.multiCheckboxValueKey(value);\n this.multiCheckboxDrafts[field] = selected.some((item) => this.multiCheckboxValueKey(item) === key)\n ? selected.filter((item) => this.multiCheckboxValueKey(item) !== key)\n : [...selected, value];\n }\n\n isMultiCheckboxAllSelected(col: ColumnDef<T>): boolean {\n return this.multiCheckboxSelectedCount(col) === this.multiCheckboxTotalCount(col);\n }\n\n toggleMultiCheckboxAll(col: ColumnDef<T>): void {\n const field = col.field as string;\n this.multiCheckboxDrafts[field] = this.isMultiCheckboxAllSelected(col)\n ? []\n : this.multiCheckboxOptions(col).map((option) => option.value);\n }\n\n multiCheckboxToggleLabel(col: ColumnDef<T>): string {\n return this.isMultiCheckboxAllSelected(col) ? 'Deselect All' : 'Select All';\n }\n\n isMultiCheckboxPartiallySelected(col: ColumnDef<T>): boolean {\n const selected = this.multiCheckboxSelectedCount(col);\n const total = this.multiCheckboxTotalCount(col);\n return selected > 0 && selected < total;\n }\n\n private multiCheckboxSelectedValues(col: ColumnDef<T>): any[] | null {\n const filter = this.findFieldFilter(col.field as string);\n if (!filter || !ngbIsCompositeFilter(filter)) return null;\n const directFilters = filter.filters.filter((item): item is NgbFilterDescriptor => !ngbIsCompositeFilter(item));\n if (\n filter.logic === 'and' &&\n directFilters.length === 2 &&\n directFilters.every((item) => item.field === col.field) &&\n directFilters.some((item) => item.operator === 'isnull') &&\n directFilters.some((item) => item.operator === 'isnotnull')\n ) {\n return [];\n }\n if (filter.logic !== 'or' || directFilters.some((item) => item.field !== col.field || item.operator !== 'eq')) {\n return null;\n }\n return directFilters.map((item) => item.value);\n }\n\n multiCheckboxFilterApplyLabel(): string {\n return this.multiCheckboxFilterOptions.applyLabel ?? this.labelTemplate('multiCheckboxApply');\n }\n\n multiCheckboxFilterCancelLabel(): string {\n return this.multiCheckboxFilterOptions.cancelLabel ?? this.labelTemplate('multiCheckboxCancel');\n }\n\n multiCheckboxFilterShowCancel(): boolean {\n return this.multiCheckboxFilterOptions.showCancel !== false;\n }\n\n cancelMultiCheckboxFilter(col: ColumnDef<T>): void {\n const field = col.field as string;\n delete this.multiCheckboxDrafts[field];\n delete this.multiCheckboxSearch[field];\n this.closeFilterMenu();\n this.cdr.markForCheck();\n }\n\n applyMultiCheckboxFilter(col: ColumnDef<T>): void {\n const field = col.field as string;\n const selectedValues = this.ensureMultiCheckboxDraft(col);\n const options = this.multiCheckboxOptions(col);\n const next = this.cloneComposite(this.filter ?? this.localFilter);\n const filters = this.withoutFieldFilters(next.filters, field);\n\n if (selectedValues.length === options.length) {\n this.commitFilter({ ...next, filters });\n } else if (selectedValues.length === 0) {\n filters.push({\n logic: 'and',\n filters: [\n { field, operator: 'isnull' },\n { field, operator: 'isnotnull' },\n ],\n });\n this.commitFilter({ ...next, filters });\n } else {\n filters.push({\n logic: 'or',\n filters: selectedValues.map((value) => ({ field, operator: 'eq' as const, value, ignoreCase: true })),\n });\n this.commitFilter({ ...next, filters });\n }\n\n this.closeFilterMenu();\n }\n\n filterContext(col: ColumnDef<T>, source: 'row' | 'menu'): FilterCtx<T> {\n const field = col.field as string;\n const descriptor = source === 'menu'\n ? (() => {\n const draft = this.ensureMenuDraft(col);\n return { field, operator: draft.operator, value: draft.value };\n })()\n : this.getColumnFilter(field);\n const currentFilter = () => this.cloneComposite(this.effectiveFilterDescriptor());\n const commitFromTemplate = (filter: NgbCompositeFilterDescriptor) => {\n this.commitFilter(this.cloneComposite(filter));\n if (source === 'menu') this.closeFilterMenu();\n };\n return {\n $implicit: this.getFilterControl(field),\n control: this.getFilterControl(field),\n col,\n field,\n descriptor,\n filter: currentFilter(),\n operators: this.getAllowedOperators(col),\n setOperator: (operator) => {\n if (source === 'menu') this.ensureMenuDraft(col).operator = operator;\n else {\n this.filterForm.get(this.operatorControlName(field))?.setValue(operator);\n this.applyRowFilter(col);\n }\n },\n setValue: (value) => {\n if (source === 'menu') this.ensureMenuDraft(col).value = value;\n else {\n this.filterForm.get(this.valueControlName(field))?.setValue(value);\n this.applyRowFilter(col);\n }\n },\n clear: () => source === 'menu' ? this.clearMenuFilter(col) : this.clearColumnFilter(field),\n filterChange: commitFromTemplate,\n setFieldFilter: (operator, value) => {\n commitFromTemplate(\n ngbSetFieldFilter(currentFilter(), field, operator, value, {\n requiresValue: (op) => this.operatorRequiresValue(op)\n })\n );\n }\n };\n }\n\n get sorted(): T[] {\n if (this.sortedDirty) {\n if (this.sort.active && !this.visibleColumns.some((col) => col.field === this.sort.active)) {\n this.sort = { active: null, direction: '' };\n }\n const base = (!this.enableSorting || !this.sort.active || !this.sort.direction)\n ? [...this.filtered]\n : (() => {\n const copy = [...this.filtered];\n const { active, direction } = this.sort;\n copy.sort((a: any, b: any) => {\n const av = a?.[active]; const bv = b?.[active];\n const cmp = typeof av === 'string' && typeof bv === 'string'\n ? av.localeCompare(bv, undefined, { numeric: true, sensitivity: 'base' })\n : av < bv ? -1 : av > bv ? 1 : 0;\n return direction === 'asc' ? cmp : -cmp;\n });\n return copy;\n })();\n this.sortedCache = this.withStickyRowsFirst(base);\n this.sortedDirty = false;\n }\n return this.sortedCache;\n }\n // pagination (filled in next step)\n\n /** True when `[data]` is a server page and `[total]` is the full result count. */\n isServerBound(): boolean {\n const total = this.total;\n return total != null && Number.isFinite(total) && total >= 0 && total > this.sorted.length;\n }\n\n /** Row count for pager, range labels, and `aria-rowcount`. */\n recordTotal(): number {\n const total = this.total;\n if (total != null && Number.isFinite(total) && total >= 0) {\n return total;\n }\n if (this.shouldUseLocalDataOperations()) {\n return this.localDataOperationsResult(false).total;\n }\n return this.sorted.length;\n }\n\n /** Collection size passed to the built-in pager. */\n pagerCollectionSize(): number {\n return this.recordTotal();\n }\n\n get paged(): T[] {\n if (this.pagedDirty) {\n if (this.shouldUseLocalDataOperations()) {\n this.pagedCache = this.localDataOperationsResult(this.paginationActive).data;\n this.pagedDirty = false;\n return this.pagedCache;\n }\n if (!this.paginationActive || this.isServerBound()) {\n this.pagedCache = this.sorted;\n } else {\n const start = (this.page - 1) * this.pageSize;\n this.pagedCache = this.sorted.slice(start, start + this.pageSize);\n }\n this.pagedDirty = false;\n }\n return this.pagedCache;\n }\n\n private shouldUseLocalDataOperations(): boolean {\n if (!this.dataOperations) return false;\n const total = this.total;\n return !(total != null && Number.isFinite(total) && total >= 0 && total > (this.data?.length ?? 0));\n }\n\n private localDataOperationsResult(page: boolean) {\n const options = typeof this.dataOperations === 'object' ? this.dataOperations : {};\n return ngbApplyDataGridOperations(this.data, {\n ...options,\n state: this.dataState(),\n columns: options.columns ?? this.resolvedColumns,\n globalFilterFields: options.globalFilterFields ?? this.resolvedColumns.map((column) => column.field as string),\n page,\n });\n }\n\n // getters for template conditions / display\n get anyFilterable(): boolean {\n if (this.resolvedFilterMode() !== 'row') return false;\n return this.isFilteringEnabled() && !!this.visibleColumns?.some(c => c.filterable && this.isRowFilterVisible(c));\n }\n\n get startIndex(): number {\n const total = this.recordTotal();\n return total ? (this.page - 1) * this.pageSize + 1 : 0;\n }\n get endIndex(): number {\n return Math.min(this.page * this.pageSize, this.recordTotal());\n }\n\n get paginationActive(): boolean {\n return !!ngbResolvePageableSettings(this.pageable, {\n enablePagination: this.enablePagination,\n pageSizeOptions: this.pageSizeOptions,\n });\n }\n\n resolvedPageable(): NgbDatagridPageableSettings {\n return (\n ngbResolvePageableSettings(this.pageable, {\n enablePagination: this.enablePagination,\n pageSizeOptions: this.pageSizeOptions,\n }) ?? NGB_DATAGRID_DEFAULT_PAGEABLE\n );\n }\n\n pagerShowsAt(placement: NgbDatagridPagerPosition): boolean {\n if (!this.paginationActive) return false;\n const position = this.resolvedPageable().position ?? 'bottom';\n return position === placement || position === 'both';\n }\n\n showPagerInfo(): boolean {\n return this.resolvedPageable().info !== false;\n }\n\n showPagerPageSizes(): boolean {\n const pageSizes = this.resolvedPageable().pageSizes;\n return Array.isArray(pageSizes) && pageSizes.length > 0;\n }\n\n pagerButtonCount(): number {\n return this.resolvedPageable().buttonCount ?? 10;\n }\n\n pagerPreviousNext(): boolean {\n return this.resolvedPageable().previousNext !== false;\n }\n\n pagerType(): NgbDatagridPagerType {\n return this.resolvedPageable().type ?? 'numeric';\n }\n\n hasCustomPagerTemplate(): boolean {\n return !!this.pagerTpl;\n }\n\n pagerResponsive(): boolean {\n if (this.hasCustomPagerTemplate()) return false;\n return this.resolvedPageable().responsive !== false;\n }\n\n pagerContext(): PagerCtx<Datagrid<T>> & { $implicit: PagerCtx<Datagrid<T>> } {\n const total = this.recordTotal();\n const pageCount = Math.max(1, Math.ceil(total / Math.max(1, this.pageSize)));\n const ctx: PagerCtx<Datagrid<T>> = {\n grid: this,\n page: this.page,\n pageSize: this.pageSize,\n total,\n pageCount,\n };\n return { ...ctx, $implicit: ctx };\n }\n\n dataState(): NgbDataGridState {\n const sort = this.sort.active && this.sort.direction\n ? [{ field: this.sort.active, direction: this.sort.direction }]\n : [];\n return {\n page: this.page,\n pageIndex: Math.max(0, this.page - 1),\n skip: Math.max(0, (this.page - 1) * this.pageSize),\n pageSize: this.pageSize,\n sort,\n filter: this.cloneComposite(this.effectiveFilterDescriptor()),\n globalFilter: this.currentGlobalFilterValue(),\n };\n }\n\n private emitDataStateChange(): void {\n this.dataStateChange.emit(this.dataState());\n }\n\n private syncFromDataState(state: NgbDataGridState | null | undefined): void {\n if (!state) return;\n\n const pageSize = Number(state.pageSize);\n if (Number.isFinite(pageSize) && pageSize > 0) {\n this.pageSize = Math.max(1, Math.trunc(pageSize));\n }\n\n const page = Number(state.page);\n const pageIndex = Number(state.pageIndex);\n const skip = Number(state.skip);\n if (Number.isFinite(page) && page > 0) {\n this.page = Math.max(1, Math.trunc(page));\n } else if (Number.isFinite(pageIndex) && pageIndex >= 0) {\n this.page = Math.max(1, Math.trunc(pageIndex) + 1);\n } else if (Number.isFinite(skip) && skip >= 0) {\n this.page = Math.max(1, Math.floor(skip / Math.max(1, this.pageSize)) + 1);\n }\n\n const firstSort = state.sort?.[0];\n this.sort = firstSort?.field && firstSort.direction\n ? { active: firstSort.field as Extract<keyof T, string>, direction: firstSort.direction }\n : { active: null, direction: '' };\n\n if (state.filter !== undefined) {\n this.localFilter = this.cloneComposite(state.filter ?? { logic: 'and', filters: [] });\n this.syncLegacyFilters(this.localFilter);\n }\n\n if (state.globalFilter !== undefined) {\n this.globalFilter = state.globalFilter ?? '';\n this.globalFilterCtrl.setValue(this.globalFilter, { emitEvent: false });\n }\n\n this.invalidateFilteredCaches();\n this.syncFilterFormFromState();\n }\n\n /** Page-size options for the footer dropdown (includes [pageSize] when not listed in pageSizes). */\n get resolvedPageSizeOptions(): number[] {\n return ngbResolvePagerPageSizeOptions(this.resolvedPageable().pageSizes, this.pageSize);\n }\n\n get shouldEnableScroll(): boolean {\n return this.scrollable;\n }\n\n onBodyHorizontalScroll(): void {\n const left = this.bodyScroller?.nativeElement.scrollLeft ?? 0;\n if (this.headerScroller?.nativeElement) {\n this.headerScroller.nativeElement.scrollLeft = left;\n }\n }\n\n get isHeaderSticky(): boolean {\n return this.stickyHeaderEnabled && this.shouldEnableScroll;\n }\n\n get isFooterSticky(): boolean {\n return this.stickyFooterEnabled && this.shouldEnableScroll;\n }\n\n get detailColspan(): number {\n const actionCols = this.showActionsColumn() ? 1 : 0;\n const caretCol = this.rowDetailTpl ? 1 : 0;\n const stickyCol = this.stickyRowsEnabled ? 1 : 0;\n const selectionCol = this.showSelectionColumn() ? 1 : 0;\n return this.visibleColumns.length + actionCols + caretCol + stickyCol + selectionCol;\n }\n\n isColumnPinned(col: ColumnDef<T>): boolean {\n return this.columnPinnedSide(col) !== null;\n }\n\n columnPinnedSide(col: ColumnDef<T>): 'start' | 'end' | null {\n if (col.locked) return this.isRtl() ? 'end' : 'start';\n if (col.sticky === true || col.sticky === 'start') return 'start';\n if (col.sticky === 'end') return 'end';\n return null;\n }\n\n private columnOrderGroup(col: ColumnDef<T>): 'leading' | 'middle' | 'trailing' {\n if (col.locked) return 'leading';\n const side = this.columnPinnedSide(col);\n if (side === 'start') return 'leading';\n if (side === 'end') return 'trailing';\n return 'middle';\n }\n\n resolvedDir(): 'ltr' | 'rtl' | null {\n if (this.dir === 'ltr' || this.dir === 'rtl') return this.dir;\n return null;\n }\n\n isRtl(): boolean {\n const explicit = this.resolvedDir();\n if (explicit) return explicit === 'rtl';\n const host = this.hostEl?.nativeElement;\n if (!host) return false;\n const inheritedDir = host.closest('[dir]')?.getAttribute('dir') ?? host.getAttribute('dir');\n if (inheritedDir) return inheritedDir.toLowerCase() === 'rtl';\n return getComputedStyle(host).direction === 'rtl';\n }\n\n hasPinnedColumns(): boolean {\n return this.visibleColumns.some((col) => this.isColumnPinned(col));\n }\n\n shouldPinLeadingUtilityColumns(): boolean {\n return this.hasPinnedColumns();\n }\n\n utilityColumnWidth(kind: UtilityColumnKind): number {\n switch (kind) {\n case 'selection': return SELECTION_COL_WIDTH;\n case 'detail': return DETAIL_COL_WIDTH;\n case 'sticky-toggle': return STICKY_TOGGLE_COL_WIDTH;\n case 'actions': return ACTION_COL_WIDTH;\n }\n }\n\n resolvedEditMode(): NgbEditMode {\n return this.editMode;\n }\n\n isIncellEditMode(): boolean {\n return this.resolvedEditMode() === 'incell';\n }\n\n isExternalEditMode(): boolean {\n return this.resolvedEditMode() === 'external';\n }\n\n isToolbarEditMode(): boolean {\n return this.resolvedEditMode() === 'toolbar';\n }\n\n showEditingToolbar(): boolean {\n return this.isToolbarEditMode() && (this.enableAdd || this.enableEdit || this.enableDelete);\n }\n\n showRowEditAction(): boolean {\n return this.enableEdit && (this.resolvedEditMode() === 'inline' || this.isExternalEditMode());\n }\n\n showRowDeleteAction(): boolean {\n return this.enableDelete && !this.isToolbarEditMode();\n }\n\n showActionsColumn(): boolean {\n if (this.isIncellEditMode()) return false;\n return (\n (this.enableAdd && !this.isToolbarEditMode()) ||\n this.showRowEditAction() ||\n this.showRowDeleteAction()\n );\n }\n\n get externalEditableColumns(): ColumnDef<T>[] {\n const row = this.externalEditPagedIndex != null ? (this.paged[this.externalEditPagedIndex] as T) : ({} as T);\n return this.visibleColumns.filter((col) => this.isCellEditable(col, row, this.externalEditIsNew));\n }\n\n isCellInEditMode(pagedIndex: number, col: ColumnDef<T>): boolean {\n if (!this.enableEdit) return false;\n const row = this.paged[pagedIndex] as T;\n if (!this.isCellEditable(col, row, false)) return false;\n if (this.isIncellEditMode()) {\n return this.editingCell?.rowIndex === pagedIndex && this.editingCell?.field === col.field;\n }\n return this.editingIndex === pagedIndex;\n }\n\n onCellClick(ev: MouseEvent, pagedIndex: number, col: ColumnDef<T>): void {\n if (!this.isIncellEditMode() || !this.enableEdit) return;\n const row = this.paged[pagedIndex] as T;\n if (!this.isCellEditable(col, row, false)) return;\n const el = ev.target as HTMLElement;\n if (el.closest('button, a, input, select, textarea, label, .no-edit-trigger')) return;\n if (this.isCellInEditMode(pagedIndex, col)) return;\n if (this.editingCell) this.commitIncellEdit(false);\n this.startIncellEdit(pagedIndex, col.field as string);\n }\n\n onCellKeydown(ev: KeyboardEvent, pagedIndex: number, col: ColumnDef<T>, colIndex: number): void {\n if (!this.isIncellEditMode() || !this.isCellInEditMode(pagedIndex, col)) return;\n if (ev.key === 'Enter') {\n ev.preventDefault();\n this.commitIncellEdit(true);\n return;\n }\n if (ev.key === 'Escape') {\n ev.preventDefault();\n this.cancelIncellEdit();\n return;\n }\n if (!['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].includes(ev.key)) return;\n ev.preventDefault();\n const row = this.paged[pagedIndex] as T;\n const editableCols = this.visibleColumns\n .map((c, i) => ({ col: c, i }))\n .filter(({ col: c }) => this.isCellEditable(c, row, false));\n const currentIdx = editableCols.findIndex(({ col: c }) => c.field === col.field);\n if (currentIdx < 0) return;\n\n const currentColField = col.field as string;\n const currentColIndex = currentIdx;\n\n let nextPagedIndex = pagedIndex;\n let nextColField = currentColField;\n\n if (ev.key === 'ArrowLeft') {\n nextColField = editableCols[Math.max(0, currentColIndex - 1)]?.col.field as string;\n } else if (ev.key === 'ArrowRight') {\n nextColField = editableCols[Math.min(editableCols.length - 1, currentColIndex + 1)]?.col.field as string;\n } else if (ev.key === 'ArrowUp') {\n nextPagedIndex = Math.max(0, pagedIndex - 1);\n } else if (ev.key === 'ArrowDown') {\n nextPagedIndex = Math.min(this.paged.length - 1, pagedIndex + 1);\n }\n\n if (nextPagedIndex === pagedIndex && nextColField === currentColField) return;\n\n if (!this.commitIncellEdit(false)) return;\n this.startIncellEdit(nextPagedIndex, nextColField);\n }\n\n startIncellEdit(pagedIndex: number, field: string): void {\n this.addingNew = false;\n this.editingIndex = pagedIndex;\n this.editingCell = { rowIndex: pagedIndex, field };\n this.editForm = this.buildFormFromRow(this.paged[pagedIndex] as any);\n this.saveAttemptedEdit = false;\n this.cdr.markForCheck();\n queueMicrotask(() => this.focusInlineEditor(field));\n }\n\n private focusInlineEditor(preferredField?: string): void {\n const root = this.hostEl?.nativeElement;\n const body = root?.querySelector('.grid-body') as HTMLElement | null;\n if (!body) return;\n if (preferredField) {\n const control = body.querySelector<HTMLElement>(`td.grid-cell--editing [formcontrolname=\"${CSS.escape(preferredField)}\"]`);\n if (control) {\n control.focus?.();\n return;\n }\n }\n const first = body.querySelector<HTMLElement>('td.grid-cell--editing input, td.grid-cell--editing select, td.grid-cell--editing textarea');\n first?.focus?.();\n }\n\n commitIncellEdit(close = true): boolean {\n if (!this.editingCell || this.editingIndex == null || !this.editForm) return true;\n const { field } = this.editingCell;\n const control = this.editForm.get(field);\n control?.markAsTouched();\n control?.updateValueAndValidity();\n if (control?.invalid) return false;\n\n const pagedIndex = this.editingIndex;\n const di = this.dataIndexOf(this.paged[pagedIndex]);\n const original = this.data[di];\n const rowId = this.getRowId(di, original);\n const service = this.getEditService();\n const updated = service.assignValues(original, { ...(original as any), [field]: control?.value } as any);\n const next = service.update(this.data ?? [], updated, di, rowId);\n this.data = service.saveChanges(next, di, rowId, updated);\n this.invalidateDataCaches();\n this.rowSave.emit({ original, updated, index: di });\n\n if (close) {\n this.editingCell = null;\n this.editingIndex = null;\n this.editForm = this.fb.group({});\n this.saveAttemptedEdit = false;\n }\n this.cdr.markForCheck();\n return true;\n }\n\n cancelIncellEdit(): void {\n if (this.editingIndex == null) return;\n const di = this.dataIndexOf(this.paged[this.editingIndex]);\n const rowId = this.getRowId(di, this.data[di]);\n this.getEditService().cancelChanges(this.data ?? [], di, rowId);\n this.rowCancel.emit({ row: this.data[di], index: di });\n this.editingCell = null;\n this.editingIndex = null;\n this.editForm = this.fb.group({});\n this.saveAttemptedEdit = false;\n this.cdr.markForCheck();\n }\n\n getSingleSelectedPagedIndex(): number | null {\n const selected = this.paged\n .map((row, index) => ({ row, index }))\n .filter(({ row, index }) => this.isRowSelected(row, index));\n return selected.length === 1 ? selected[0].index : null;\n }\n\n editSelectedRow(): void {\n const index = this.getSingleSelectedPagedIndex();\n if (index == null) return;\n if (this.isExternalEditMode()) {\n this.openExternalEdit(index);\n return;\n }\n this.startEdit(index);\n }\n\n deleteSelectedRows(): void {\n const indices = this.paged\n .map((row, index) => (this.isRowSelected(row, index) ? index : -1))\n .filter((index) => index >= 0)\n .sort((a, b) => b - a);\n indices.forEach((index) => this.deleteRow(index));\n }\n\n openExternalEdit(pagedIndex: number): void {\n this.externalDialogOpener = (document.activeElement as HTMLElement) ?? null;\n this.externalDialogFocusedOnce = false;\n this.externalEditIsNew = false;\n this.externalEditPagedIndex = pagedIndex;\n this.externalForm = this.buildFormFromRow(this.paged[pagedIndex] as any);\n this.saveAttemptedExternal = false;\n this.externalEditOpen = true;\n this.cdr.markForCheck();\n queueMicrotask(() => this.focusExternalDialogFirstField());\n }\n\n openExternalAdd(): void {\n this.externalDialogOpener = (document.activeElement as HTMLElement) ?? null;\n this.externalDialogFocusedOnce = false;\n this.externalEditIsNew = true;\n this.externalEditPagedIndex = null;\n this.externalForm = this.buildFormFromRow();\n this.saveAttemptedExternal = false;\n this.externalEditOpen = true;\n const service = this.getEditService();\n const draft = service.assignValues({} as T, this.externalForm.value as any);\n this.addDraftRowId = Symbol('ngb-datagrid-new-row');\n service.create(this.data ?? [], draft, this.data.length, this.addDraftRowId);\n this.cdr.markForCheck();\n queueMicrotask(() => this.focusExternalDialogFirstField());\n }\n\n saveExternalEdit(): void {\n if (!this.externalEditOpen) return;\n this.saveAttemptedExternal = true;\n this.externalForm.markAllAsTouched();\n this.externalForm.updateValueAndValidity();\n if (this.externalForm.invalid) return;\n\n const service = this.getEditService();\n if (this.externalEditIsNew) {\n const newRow = service.assignValues({} as T, this.externalForm.value as any);\n const rowIndex = this.data.length;\n const rowId = this.addDraftRowId ?? this.getRowId(rowIndex, newRow);\n service.create(this.data ?? [], newRow, rowIndex, rowId);\n service.saveChanges(this.data ?? [], rowIndex, rowId, newRow);\n this.rowAdd.emit({ newRow });\n } else if (this.externalEditPagedIndex != null) {\n const pagedIndex = this.externalEditPagedIndex;\n const di = this.dataIndexOf(this.paged[pagedIndex]);\n const original = this.data[di];\n const rowId = this.getRowId(di, original);\n const updated = service.assignValues(original, this.externalForm.value as any);\n const next = service.update(this.data ?? [], updated, di, rowId);\n this.data = service.saveChanges(next, di, rowId, updated);\n this.invalidateDataCaches();\n this.rowSave.emit({ original, updated, index: di });\n }\n\n this.closeExternalEdit();\n }\n\n cancelExternalEdit(): void {\n if (!this.externalEditOpen) return;\n if (this.externalEditIsNew && this.addDraftRowId != null) {\n this.getEditService().cancelChanges(this.data ?? [], this.data.length, this.addDraftRowId);\n } else if (this.externalEditPagedIndex != null) {\n const di = this.dataIndexOf(this.paged[this.externalEditPagedIndex]);\n const rowId = this.getRowId(di, this.data[di]);\n this.getEditService().cancelChanges(this.data ?? [], di, rowId);\n this.rowCancel.emit({ row: this.data[di], index: di });\n }\n this.closeExternalEdit();\n }\n\n private closeExternalEdit(): void {\n this.externalEditOpen = false;\n this.externalEditIsNew = false;\n this.externalEditPagedIndex = null;\n this.externalForm = this.fb.group({});\n this.saveAttemptedExternal = false;\n this.cdr.markForCheck();\n const opener = this.externalDialogOpener;\n this.externalDialogOpener = null;\n this.externalDialogFocusedOnce = false;\n opener?.focus?.();\n }\n\n private focusExternalDialogFirstField(): void {\n if (!this.externalEditOpen || this.externalDialogFocusedOnce) return;\n const root = this.hostEl?.nativeElement;\n const dialog = root?.querySelector('.grid-external-editor__panel') as HTMLElement | null;\n if (!dialog) return;\n const focusable = dialog.querySelector<HTMLElement>('input, select, textarea, button:not([disabled])');\n focusable?.focus?.();\n this.externalDialogFocusedOnce = true;\n }\n\n utilityLeadingWidth(): number {\n let width = 0;\n if (!this.shouldPinLeadingUtilityColumns()) return width;\n if (this.showSelectionColumn()) width += this.utilityColumnWidth('selection');\n if (this.rowDetailTpl) width += this.utilityColumnWidth('detail');\n if (this.stickyRowsEnabled) width += this.utilityColumnWidth('sticky-toggle');\n return width;\n }\n\n columnWidth(col: ColumnDef<T>): number {\n const field = col.field as string;\n const override = this.columnWidthOverrides[field];\n if (override != null && override > 0) return override;\n return col.width ?? 0;\n }\n\n isColumnResizable(col: ColumnDef<T>): boolean {\n if (!this.resizable || this.isStackedLayout() || col.locked || col.resizable === false) return false;\n return this.columnWidth(col) > 0;\n }\n\n startColumnResize(event: MouseEvent, col: ColumnDef<T>): void {\n if (!this.isColumnResizable(col)) return;\n event.preventDefault();\n event.stopPropagation();\n this.resizeSession = {\n field: col.field as string,\n startX: event.clientX,\n startWidth: this.columnWidth(col),\n };\n document.body.classList.add('ngb-datagrid-column-resizing');\n }\n\n @HostListener('document:mousemove', ['$event'])\n onDocumentMouseMove(event: MouseEvent): void {\n if (!this.resizeSession) return;\n const col = this.resolvedColumns.find((item) => item.field === this.resizeSession!.field);\n if (!col) return;\n const rawDelta = event.clientX - this.resizeSession.startX;\n const delta = this.isRtl() ? -rawDelta : rawDelta;\n const next = this.clampColumnWidth(col, this.resizeSession.startWidth + delta);\n this.columnWidthOverrides[this.resizeSession.field] = next;\n this.syncResizableColgroups();\n this.cdr.markForCheck();\n }\n\n @HostListener('document:mouseup')\n onDocumentMouseUp(): void {\n if (!this.resizeSession) return;\n this.resizeSession = null;\n document.body.classList.remove('ngb-datagrid-column-resizing');\n this.syncResizableColgroups();\n this.cdr.markForCheck();\n }\n\n private syncResizableColgroups(): void {\n if (!this.resizable || this.isStackedLayout()) return;\n NgbSyncColgroupDirective.syncExplicitWidths(this.colgroupSyncId);\n }\n\n autoFitColumnsToGrid(): void {\n if (this.isStackedLayout()) return;\n const cols = this.visibleColumns.filter((col) => this.columnWidth(col) > 0);\n if (!cols.length) return;\n\n const available = this.gridViewportWidth() - this.nonDataColumnWidth();\n if (available <= 0) return;\n\n const currentWidths = cols.map((col) => this.columnWidth(col));\n const currentTotal = currentWidths.reduce((sum, width) => sum + width, 0);\n if (currentTotal <= 0) return;\n\n const scaled = currentWidths.map((width) => (width / currentTotal) * available);\n const next = scaled.map((width, index) => this.clampColumnWidth(cols[index], width));\n let total = next.reduce((sum, width) => sum + width, 0);\n let remainder = available - total;\n let pass = 0;\n while (remainder !== 0 && pass < cols.length * 4) {\n const index = pass % cols.length;\n const col = cols[index];\n const step = remainder > 0 ? 1 : -1;\n const updated = this.clampColumnWidth(col, next[index] + step);\n if (updated !== next[index]) {\n total += updated - next[index];\n next[index] = updated;\n remainder = available - total;\n }\n pass++;\n }\n\n cols.forEach((col, index) => {\n this.columnWidthOverrides[col.field as string] = next[index];\n });\n this.syncResizableColgroups();\n this.cdr.markForCheck();\n }\n\n private clampColumnWidth(col: ColumnDef<T>, width: number): number {\n const min = col.minResizableWidth ?? 50;\n const max = col.maxResizableWidth;\n let next = Math.round(width);\n if (next < min) next = min;\n if (max != null && next > max) next = max;\n return next;\n }\n\n private gridViewportWidth(): number {\n const el =\n this.bodyScroller?.nativeElement ??\n (this.hostEl.nativeElement.querySelector('.table-wrapper') as HTMLElement | null);\n return el?.clientWidth ?? 0;\n }\n\n private nonDataColumnWidth(): number {\n return (\n this.utilityLeadingWidth() + (this.showActionsColumn() ? this.utilityColumnWidth('actions') : 0)\n );\n }\n\n private syncColumnWidthOverrides(resetFromColumns: boolean): void {\n const next: Record<string, number> = resetFromColumns ? {} : { ...this.columnWidthOverrides };\n for (const col of this.resolvedColumns) {\n const field = col.field as string;\n if (resetFromColumns || !(field in next)) {\n if (col.width != null && col.width > 0) next[field] = col.width;\n }\n }\n const fields = new Set(this.resolvedColumns.map((col) => col.field as string));\n for (const field of Object.keys(next)) {\n if (!fields.has(field)) delete next[field];\n }\n this.columnWidthOverrides = next;\n }\n\n get tablePixelWidth(): number | null {\n if (this.isStackedLayout()) return null;\n const columnWidths = this.visibleColumns.reduce((sum, col) => sum + this.columnWidth(col), 0);\n const utilityWidths =\n this.utilityLeadingWidth() +\n (this.showActionsColumn() ? this.utilityColumnWidth('actions') : 0);\n const total = columnWidths + utilityWidths;\n return total > 0 ? total : null;\n }\n\n utilityStickyOffset(kind: Exclude<UtilityColumnKind, 'actions'>): number | null {\n if (!this.shouldPinLeadingUtilityColumns()) return null;\n if (kind === 'selection') return 0;\n if (kind === 'detail') return this.showSelectionColumn() ? this.utilityColumnWidth('selection') : 0;\n let offset = 0;\n if (this.showSelectionColumn()) offset += this.utilityColumnWidth('selection');\n if (this.rowDetailTpl) offset += this.utilityColumnWidth('detail');\n return offset;\n }\n\n columnStartOffset(col: ColumnDef<T>): number | null {\n if (this.columnPinnedSide(col) !== 'start') return null;\n const preceding = this.visibleColumns\n .slice(0, this.visibleColumns.indexOf(col))\n .filter((item) => this.columnPinnedSide(item) === 'start')\n .reduce((sum, item) => sum + this.columnWidth(item), 0);\n return this.utilityLeadingWidth() + preceding;\n }\n\n columnEndOffset(col: ColumnDef<T>): number | null {\n if (this.columnPinnedSide(col) !== 'end') return null;\n const index = this.visibleColumns.indexOf(col);\n return this.visibleColumns\n .slice(index + 1)\n .filter((item) => this.columnPinnedSide(item) === 'end')\n .reduce((sum, item) => sum + this.columnWidth(item), 0);\n }\n\n columnPinnedClass(col: ColumnDef<T>): string | null {\n const side = this.columnPinnedSide(col);\n return side ? `column-pinned-${side}${col.locked ? ' column-locked' : ' column-sticky'}` : null;\n }\n\n get tableClassList(): string[] {\n const opts = this.tableOptions || {};\n const cls: string[] = ['table'];\n if (opts.stripedRows) cls.push('table-striped');\n if (opts.stripedColumns) cls.push('table-striped-columns');\n if (opts.hoverRows) cls.push('table-hover');\n if (opts.bordered) cls.push('table-bordered');\n if (opts.borderless) cls.push('table-borderless');\n if (opts.small) cls.push('table-sm');\n if (opts.groupDividers) cls.push('table-group-divider');\n if (opts.align === 'middle') cls.push('align-middle');\n if (opts.align === 'bottom') cls.push('align-bottom');\n return cls;\n }\n\n get responsiveWrapperClasses(): string[] {\n const r = this.tableOptions?.responsive;\n if (r === false) return [];\n if (r === true || r === undefined) return ['table-responsive'];\n return [`table-responsive-${r}`];\n }\n\n get densityMode(): 'comfortable' | 'compact' {\n return this.tableOptions?.density ?? 'comfortable';\n }\n\n isStackedLayout(): boolean {\n if (this.dataLayoutMode === 'stacked') return true;\n if (this.dataLayoutMode === 'tabular') return false;\n return !!this.tableOptions?.stacked;\n }\n\n isStackedCardsLayout(): boolean {\n return this.isStackedLayout() && (this.tableOptions?.stackedLayout ?? 'list') === 'cards';\n }\n\n stackedGroupFor(col: ColumnDef<T>): 'start' | 'center' | 'end' {\n return col.stackedGroup ?? 'start';\n }\n\n stackedColumnsInGroup(group: 'start' | 'center' | 'end'): ColumnDef<T>[] {\n return this.visibleColumns.filter((col) => this.stackedGroupFor(col) === group);\n }\n\n stackedCardGroups(): Array<'start' | 'center' | 'end'> {\n const order: Array<'start' | 'center' | 'end'> = ['start', 'center', 'end'];\n return order.filter((group) => this.stackedColumnsInGroup(group).length > 0);\n }\n\n visibleColumnIndex(col: ColumnDef<T>): number {\n return this.visibleColumns.findIndex((item) => item.field === col.field);\n }\n\n stackedCardColspan(): number {\n return Math.max(1, this.visibleColumns.length);\n }\n\n clearSorting(emit = true): void {\n this.sort = { active: null, direction: '' };\n this.page = 1;\n if (emit) {\n this.sortChange.emit({ active: null, direction: '' });\n }\n this.cdr.markForCheck();\n }\n\n setColumnHidden(field: string, hidden: boolean): void {\n const col = this.resolvedColumns.find((item) => item.field === field);\n if (!col) return;\n col.hidden = hidden;\n if (!this.declarativeColumns.length) {\n this.columns = [...this.columns];\n }\n this.cdr.markForCheck();\n }\n\n applyColumnVisibility(visibility: Record<string, boolean>): void {\n for (const col of this.resolvedColumns) {\n const field = col.field as string;\n if (visibility[field] !== undefined) {\n col.hidden = !visibility[field];\n }\n }\n if (!this.declarativeColumns.length) {\n this.columns = [...this.columns];\n }\n this.cdr.markForCheck();\n }\n\n get zebraStripesEnabled(): boolean {\n return !!this.tableOptions?.zebraStripes;\n }\n\n getSelectedCount(): number {\n return this.selectedRowIds.size;\n }\n\n hasSelectedRows(): boolean {\n return this.getSelectedCount() > 0;\n }\n\n hasSingleSelectedRow(): boolean {\n return this.getSelectedCount() === 1;\n }\n\n resolveHeaderClass(col: ColumnDef<T>): string | string[] | Record<string, boolean> | null {\n return col.headerClass ?? null;\n }\n\n resolveHeaderStyle(col: ColumnDef<T>): Record<string, string | number> | null {\n return col.headerStyle ?? null;\n }\n\n resolveCellClass(row: T, rowIndex: number, col: ColumnDef<T>): string | string[] | Record<string, boolean> | null {\n const cellClass = col.cellClass;\n if (typeof cellClass === 'function') return cellClass(row, rowIndex) ?? null;\n return cellClass ?? null;\n }\n\n resolveCellStyle(row: T, rowIndex: number, col: ColumnDef<T>): Record<string, string | number> | null {\n const cellStyle = col.cellStyle;\n if (typeof cellStyle === 'function') return cellStyle(row, rowIndex) ?? null;\n return cellStyle ?? null;\n }\n\n resolveRowClass(row: T, rowIndex: number): string | string[] | Record<string, boolean> | null {\n if (typeof this.rowClass === 'function') return this.rowClass(row, rowIndex) ?? null;\n return this.rowClass ?? null;\n }\n\n resolveRowStyle(row: T, rowIndex: number): Record<string, string | number> | null {\n if (typeof this.rowStyle === 'function') return this.rowStyle(row, rowIndex) ?? null;\n return this.rowStyle ?? null;\n }\n\n updateHighlightCache(): void {\n this.highlightRowMap.clear();\n (this.highlightedIndex || []).forEach(item => {\n const rowKey = item.row;\n if (!this.highlightRowMap.has(rowKey)) this.highlightRowMap.set(rowKey, []);\n this.highlightRowMap.get(rowKey)?.push(item);\n });\n }\n\n headerText(col: ColumnDef<T>): string {\n return (col.header ?? col.field ?? '').toString();\n }\n\n headerTitle(col: ColumnDef<T>): string {\n const t = (col as any)?.title;\n return (t ?? this.headerText(col)) ?? '';\n }\n\n cellTitle(row: T, col: ColumnDef<T>): string {\n const def = (col as any)?.cellTitle;\n if (typeof def === 'function') return def(row) ?? '';\n if (typeof def === 'string') return def;\n const val = (row as any)?.[col.field];\n return val === undefined || val === null ? '' : String(val);\n }\n\n columnFilterAriaLabel(col: ColumnDef<T>): string {\n return ngbFormatDatagridLabel(this.labelTemplate('columnFilter'), {\n header: this.headerText(col),\n });\n }\n\n inputAriaLabel(col: ColumnDef<T>): string {\n return this.headerText(col);\n }\n\n reorderColumnAriaLabel(col: ColumnDef<T>): string {\n return ngbFormatDatagridLabel(this.labelTemplate('reorderColumn'), {\n header: this.headerText(col),\n });\n }\n\n resizeColumnAriaLabel(col: ColumnDef<T>): string {\n return ngbFormatDatagridLabel(this.labelTemplate('resizeColumn'), {\n header: this.headerText(col),\n });\n }\n\n openFilterMenuAriaLabel(col: ColumnDef<T>): string {\n return ngbFormatDatagridLabel(this.labelTemplate('openFilterMenu'), {\n header: this.headerText(col),\n });\n }\n\n clearFilterAriaLabel(col: ColumnDef<T>): string {\n return ngbFormatDatagridLabel(this.labelTemplate('clearFilter'), {\n header: this.headerText(col),\n });\n }\n\n filterOperatorAriaLabel(col: ColumnDef<T>): string {\n return ngbFormatDatagridLabel(this.labelTemplate('filterOperator'), {\n header: this.headerText(col),\n });\n }\n\n editRowAriaLabel(index: number): string {\n return ngbFormatDatagridLabel(this.labelTemplate('editRow'), { index: index + 1 });\n }\n\n deleteRowAriaLabel(index: number): string {\n return ngbFormatDatagridLabel(this.labelTemplate('deleteRow'), { index: index + 1 });\n }\n\n stickyRowToggleAriaLabel(): string {\n return this.labelTemplate('stickyRowToggle');\n }\n\n booleanDisplayLabel(value: boolean): string {\n return value ? this.labelTemplate('booleanYes') : this.labelTemplate('booleanNo');\n }\n\n emptyStateLabel(): string {\n return this.labelTemplate('emptyState');\n }\n\n paginationRangeLabel(): string {\n const total = this.recordTotal();\n const start = this.startIndex;\n const end = this.endIndex;\n const format = (n: number) => this.formatLocaleNumber(n);\n return ngbFormatDatagridLabel(this.labelTemplate('paginationRange'), {\n start: format(start),\n end: format(end),\n total: format(total),\n });\n }\n\n rowsPerPageLabel(): string {\n return this.labelTemplate('rowsPerPage');\n }\n\n ariaRowCount(): number {\n return this.recordTotal();\n }\n\n ariaColCount(): number {\n let count = this.visibleColumns.length;\n if (this.showSelectionColumn()) count += 1;\n if (this.rowDetailTpl) count += 1;\n if (this.stickyRowsEnabled) count += 1;\n if (this.showActionsColumn()) count += 1;\n return count;\n }\n\n isCellFocused(rowIndex: number, colIndex: number): boolean {\n return (\n this.keyboardNavigation &&\n this.focusedCell?.rowIndex === rowIndex &&\n this.focusedCell?.colIndex === colIndex\n );\n }\n\n cellTabIndex(rowIndex: number, colIndex: number): number | null {\n if (!this.keyboardNavigation || this.isStackedLayout()) return null;\n if (!this.focusedCell) {\n return rowIndex === 0 && colIndex === 0 ? 0 : -1;\n }\n return this.isCellFocused(rowIndex, colIndex) ? 0 : -1;\n }\n\n focusCell(rowIndex: number, colIndex: number): void {\n if (!this.keyboardNavigation) return;\n const maxRow = Math.max(0, this.paged.length - 1);\n const maxCol = Math.max(0, this.visibleColumns.length - 1);\n this.focusedCell = {\n rowIndex: Math.min(Math.max(0, rowIndex), maxRow),\n colIndex: Math.min(Math.max(0, colIndex), maxCol),\n };\n this.cdr.markForCheck();\n queueMicrotask(() => this.focusFocusedCellElement());\n }\n\n onDataCellFocus(rowIndex: number, colIndex: number): void {\n if (!this.keyboardNavigation) return;\n this.focusedCell = { rowIndex, colIndex };\n }\n\n onDataCellKeydown(\n ev: KeyboardEvent,\n rowIndex: number,\n colIndex: number,\n col: ColumnDef<T>\n ): void {\n if (!this.keyboardNavigation) return;\n if (this.isCellInEditMode(rowIndex, col)) {\n return;\n }\n\n const key = ev.key;\n if (key === ' ' && this.isSelectionEnabled() && !this.isCheckboxOnly()) {\n ev.preventDefault();\n this.toggleSelection(rowIndex, ev);\n return;\n }\n\n if (key === 'F3' && this.isRowFilterEnabledForColumn(col)) {\n ev.preventDefault();\n this.openRowFilterMenuForColumn(col, ev.target as HTMLElement);\n return;\n }\n\n if (key === 'F2' && this.isIncellEditMode() && this.enableEdit) {\n const row = this.paged[rowIndex] as T;\n if (this.isCellEditable(col, row, false)) {\n ev.preventDefault();\n this.startIncellEdit(rowIndex, col.field as string);\n }\n return;\n }\n\n if (key === 'Enter' && this.isIncellEditMode() && this.enableEdit) {\n const row = this.paged[rowIndex] as T;\n if (this.isCellEditable(col, row, false)) {\n ev.preventDefault();\n this.startIncellEdit(rowIndex, col.field as string);\n }\n return;\n }\n\n if (this.paginationActive && ev.altKey && (key === 'PageDown' || key === 'PageUp')) {\n ev.preventDefault();\n const totalPages = Math.max(1, Math.ceil(this.recordTotal() / this.pageSize));\n const nextPage = key === 'PageDown' ? Math.min(totalPages, this.page + 1) : Math.max(1, this.page - 1);\n if (nextPage !== this.page) {\n this.onPage(nextPage);\n this.announceStatus(this.paginationRangeLabel());\n this.focusCell(0, colIndex);\n }\n return;\n }\n\n let nextRow = rowIndex;\n let nextCol = colIndex;\n const colCount = this.visibleColumns.length;\n const rowCount = this.paged.length;\n\n if (key === 'ArrowRight') nextCol = Math.min(colCount - 1, colIndex + 1);\n else if (key === 'ArrowLeft') nextCol = Math.max(0, colIndex - 1);\n else if (key === 'ArrowDown') nextRow = Math.min(rowCount - 1, rowIndex + 1);\n else if (key === 'ArrowUp') nextRow = Math.max(0, rowIndex - 1);\n else if (key === 'Home' && ev.ctrlKey) {\n ev.preventDefault();\n nextRow = 0;\n } else if (key === 'End' && ev.ctrlKey) {\n ev.preventDefault();\n nextRow = Math.max(0, rowCount - 1);\n } else if (key === 'Home') {\n ev.preventDefault();\n nextCol = 0;\n } else if (key === 'End') {\n ev.preventDefault();\n nextCol = Math.max(0, colCount - 1);\n } else {\n return;\n }\n\n ev.preventDefault();\n this.focusCell(nextRow, nextCol);\n }\n\n private openRowFilterMenuForColumn(col: ColumnDef<T>, anchor: HTMLElement): void {\n if (!col.filterable) return;\n this.toggleRowFilterMenu(col.field as string, anchor);\n }\n\n private isRowFilterEnabledForColumn(col: ColumnDef<T>): boolean {\n return this.isFilteringEnabled() && !!col.filterable && this.filterMode === 'row';\n }\n\n private focusFocusedCellElement(): void {\n const cell = this.focusedCell;\n if (!cell) return;\n const root = this.hostEl?.nativeElement;\n const rows = root?.querySelectorAll('tbody tr.grid-data-row');\n const row = rows?.[cell.rowIndex] as HTMLElement | undefined;\n const el = row?.querySelector(`td[data-col-index=\"${cell.colIndex}\"]`) as HTMLElement | null;\n el?.focus?.();\n }\n\n announceStatus(message: string): void {\n this.statusMessage = message;\n this.cdr.markForCheck();\n }\n\n private labelTemplate(key: keyof NgbDatagridLabels): string {\n const bag = this.labels?.[key];\n if (bag != null && bag !== '') return bag;\n return NGB_DATAGRID_DEFAULT_LABELS[key];\n }\n\n private formatLocaleNumber(value: number): string {\n try {\n return new Intl.NumberFormat(this.locale ?? undefined).format(value);\n } catch {\n return String(value);\n }\n }\n\n ariaSortFor(field: Extract<keyof T, string>): 'ascending' | 'descending' | 'none' {\n if (!this.enableSorting || this.sort.active !== field || !this.sort.direction) {\n return 'none';\n }\n return this.sort.direction === 'asc' ? 'ascending' : 'descending';\n }\n\n sortButtonAriaLabel(col: ColumnDef<T>): string {\n const header = this.headerText(col);\n const state = this.sort.active === col.field\n ? (this.sort.direction === 'asc'\n ? 'ascending'\n : this.sort.direction === 'desc'\n ? 'descending'\n : 'unsorted')\n : 'unsorted';\n if (this.labels?.sortBy) {\n return ngbFormatDatagridLabel(this.labelTemplate('sortBy'), { header, state });\n }\n return `Sort by ${header}. Current sort ${state}.`;\n }\n\n exportAriaLabel(kind: 'pdf'|'excel'): string {\n if (kind === 'pdf') {\n return this.exportPdfAriaLabel || this.labelTemplate('exportPdf');\n }\n return this.exportExcelAriaLabel || this.labelTemplate('exportExcel');\n }\n private withStickyRowsFirst(rows: T[]): T[] {\n if (!this.stickyRows || this.stickyRowIds.size === 0) return rows;\n const sticky: T[] = [];\n const rest: T[] = [];\n\n rows.forEach(r => {\n const di = this.dataIndexOf(r);\n const id = this.getRowId(di >= 0 ? di : 0, r);\n (this.stickyRowIds.has(id) ? sticky : rest).push(r);\n });\n\n return [...sticky, ...rest];\n }\n\n\n // Helpers to map from paged index → original data index\n // helper used above\n private dataIndexFromPaged(i: number): number {\n const row = this.paged[i];\n return this.dataIndexOf(row);\n }\n\n private rebuildFilterForm() {\n const group: Record<string, any> = {};\n for (const c of this.resolvedColumns) {\n if (!c.filterable) continue;\n const descriptor = this.getColumnFilter(c.field as string);\n group[this.operatorControlName(c.field as string)] = [descriptor?.operator ?? this.defaultFilterOperator(c)];\n group[this.valueControlName(c.field as string)] = [descriptor?.value ?? ''];\n }\n this.filterForm = this.fb.group(group);\n\n this.filterForm.valueChanges.subscribe(() => {\n if (this.syncingFilterForm) return;\n });\n this.globalFilterCtrl.valueChanges.subscribe((value) => {\n this.globalFilter = value;\n this.page = 1;\n this.filtersChange.emit({ global: value, columns: { ...this.filters } });\n });\n }\n\n @ContentChildren(NgbCellTemplate) private cellTplQ!: QueryList<NgbCellTemplate<T>>;\n @ContentChildren(NgbEditorTemplate) private editTplQ!: QueryList<NgbEditorTemplate<T>>;\n @ContentChildren(NgbFilterTemplate) private filterTplQ!: QueryList<NgbFilterTemplate<T>>;\n @ContentChildren(NgbFilterMenuTemplate) private filterMenuTplQ!: QueryList<NgbFilterMenuTemplate<T>>;\n @ContentChildren(NgbGlobalFilterTemplate) private globalTplQ!: QueryList<NgbGlobalFilterTemplate>;\n @ContentChildren(NgbGridColumnDirective) private gridColumnQ!: QueryList<NgbGridColumnDirective<T>>;\n\n /** Internal lookup maps */\n public cellTpls: Record<string, NgbCellTemplate<T>> = {};\n public editTpls: Record<string, NgbEditorTemplate<T>> = {};\n public filterTpls: Record<string, NgbFilterTemplate<T>> = {};\n public filterMenuTpls: Record<string, NgbFilterMenuTemplate<T>> = {};\n public globalTpl: NgbGlobalFilterTemplate | null = null;\n private warnedDeclarativeColumns = false;\n\n private toRecord<T extends { field: string }>(\n items: readonly T[] | QueryList<T> | null | undefined\n ): Record<string, T> {\n const arr = Array.isArray(items)\n ? items\n : items instanceof QueryList\n ? items.toArray()\n : [];\n return arr.reduce((acc, t) => (acc[t.field] = t, acc), {} as Record<string, T>);\n }\n \n async export(kind: 'pdf'|'excel') {\n if (!this.exportOptions?.enabled) return;\n this.exporting = true;\n try {\n const data = await this.resolveDataset();\n const cols = this.visibleColumns.map(c => ({ key: c.field, title: c.header }));\n if (kind === 'pdf') {\n await this.exporter.exportPdf({\n fileName: this.exportOptions.fileName || 'export',\n columns: cols.map(c => c.key),\n rows: data,\n options: this.exportOptions.pdf\n });\n } else {\n await this.exporter.exportExcel({\n fileName: this.exportOptions.fileName || 'export',\n sheetName: this.exportOptions.excel?.sheetName || 'Sheet1',\n columns: cols,\n rows: data\n });\n }\n } finally { this.exporting = false; }\n }\n\n private async resolveDataset(): Promise<any[]> {\n const mode = this.exportOptions?.pages || 'current';\n if (mode === 'all') {\n if (!this.dataProviderAll) throw new Error('dataProviderAll required when pages=\"all\"');\n const d = this.dataProviderAll();\n return isObservable(d) ? firstValueFrom(d) : (d instanceof Promise ? d : d);\n }\n if (mode === 'selection') {\n if (!this.dataProviderSelection) throw new Error('dataProviderSelection required when pages=\"selection\"');\n return this.dataProviderSelection();\n }\n // current page == your existing `paged` array\n return this.paged;\n }\n\n ngAfterContentInit(): void {\n const rebuild = () => {\n this.invalidateColumnCaches();\n this.cellTpls = this.toRecord(this.cellTplQ);\n this.editTpls = this.toRecord(this.editTplQ);\n this.filterTpls = this.toRecord(this.filterTplQ);\n this.filterMenuTpls = this.toRecord(this.filterMenuTplQ);\n this.globalTpl = this.globalTplQ?.first ?? null;\n this.syncColumnWidthOverrides(true);\n this.syncColumnOrder(true);\n this.validateColumnConfig();\n this.rebuildFilterForm();\n if (this.sort.active && !this.visibleColumns.some((col) => col.field === this.sort.active)) {\n this.sort = { active: null, direction: '' };\n }\n };\n rebuild();\n this.cellTplQ?.changes.subscribe(rebuild);\n this.editTplQ?.changes.subscribe(rebuild);\n this.filterTplQ?.changes.subscribe(rebuild);\n this.filterMenuTplQ?.changes.subscribe(rebuild);\n this.globalTplQ?.changes.subscribe(rebuild);\n this.gridColumnQ?.changes.subscribe(rebuild);\n }\n\n ngOnChanges(ch: SimpleChanges): void {\n if (ch['state']) {\n this.syncFromDataState(this.state);\n }\n if (ch['filter']) {\n this.localFilter = this.cloneComposite(this.filter);\n this.syncLegacyFilters(this.localFilter);\n this.invalidateFilteredCaches();\n }\n if (ch['columns']) {\n this.invalidateColumnCaches();\n this.syncColumnWidthOverrides(true);\n this.syncColumnOrder(true);\n }\n if (ch['data']) {\n this.invalidateDataCaches();\n }\n if (ch['columns'] || ch['filter']) {\n this.validateColumnConfig();\n if (this.sort.active && !this.visibleColumns.some((col) => col.field === this.sort.active)) {\n this.sort = { active: null, direction: '' };\n }\n this.rebuildFilterForm();\n this.syncFilterFormFromState();\n }\n if (ch['highlightedIndex']) this.updateHighlightCache();\n if (ch['editMode']) this.resetEditingState();\n if (ch['pageSize'] || ch['pageSizeOptions'] || ch['enablePagination'] || ch['pageable'] || ch['state'] || ch['dataOperations']) {\n const size = Math.max(1, Math.trunc(Number(this.pageSize) || 10));\n this.pageSize = size;\n this.invalidatePagedCache();\n }\n if (ch['data'] || ch['columns'] || ch['labels'] || ch['locale'] || ch['dir']) {\n this.cdr.markForCheck();\n }\n }\n\n private resetEditingState(): void {\n this.editingCell = null;\n this.editingIndex = null;\n this.editForm = this.fb.group({});\n this.saveAttemptedEdit = false;\n this.closeExternalEdit();\n this.cdr.markForCheck();\n }\n\n private getRowId(rowIndex: number, row: T): any {\n return this.trackBy ? this.trackBy(rowIndex, row) : rowIndex;\n }\n\n /** Apply selection ids and refresh checkbox UI (for programmatic / OnPush sync). */\n setSelectionIds(ids: Iterable<any>, options?: { emit?: boolean }): void {\n if (!this.isSelectionEnabled()) return;\n this.selectedRowIds.clear();\n for (const id of ids) {\n this.selectedRowIds.add(id);\n }\n if (options?.emit !== false) {\n this.selectionChange.emit({\n selected: this.data.filter((row, idx) => this.selectedRowIds.has(this.getRowId(idx, row))),\n lastAction: null,\n });\n }\n this.cdr.markForCheck();\n Promise.resolve().then(() => {\n this.cdr.detectChanges();\n });\n }\n\n private getEditService(): NgbDatagridEditService<T> {\n return this.editService ?? this.defaultEditService;\n }\n\n isCellEditable(col: ColumnDef<T>, row: T, isNew: boolean): boolean {\n if (typeof col.editable === 'function') return col.editable(row, isNew);\n return col.editable ?? true;\n }\n\n isRowReorderEnabled(): boolean {\n return this.rowReorderable &&\n !this.sort.active &&\n !this.hasActiveFilters() &&\n !this.addingNew &&\n this.editingIndex == null &&\n !this.stickyRowsEnabled;\n }\n\n hasActiveFilters(): boolean {\n return !!(this.currentGlobalFilterValue() || this.localFilter.filters.length > 0);\n }\n\n startAdd() {\n if (!this.enableAdd || this.addingNew) return;\n if (this.isExternalEditMode()) {\n this.openExternalAdd();\n return;\n }\n this.page = 1;\n this.editingIndex = null;\n this.editingCell = null;\n this.addingNew = true;\n this.addForm = this.buildFormFromRow(); // defaults\n this.saveAttemptedNew = false;\n\n // Register a draft row with the edit service so implementations can track \"new\" state.\n const service = this.getEditService();\n const draft = service.assignValues({} as T, this.addForm.value as any);\n this.addDraftRowId = Symbol('ngb-datagrid-new-row');\n service.create(this.data ?? [], draft, this.data.length, this.addDraftRowId);\n this.cdr.markForCheck();\n }\n\n saveAdd() {\n if (!this.addingNew || !this.addForm) return;\n this.saveAttemptedNew = true;\n this.addForm.markAllAsTouched();\n this.addForm.updateValueAndValidity();\n\n if (this.addForm.invalid) return;\n\n const service = this.getEditService();\n const newRow = service.assignValues({} as T, this.addForm.value as any);\n const rowIndex = this.data.length;\n const rowId = this.addDraftRowId ?? this.getRowId(rowIndex, newRow);\n service.create(this.data ?? [], newRow, rowIndex, rowId);\n service.saveChanges(this.data ?? [], rowIndex, rowId, newRow);\n this.invalidateDataCaches();\n this.rowAdd.emit({ newRow });\n\n this.addingNew = false;\n this.addForm = this.fb.group({});;\n this.saveAttemptedNew = false;\n this.addDraftRowId = null;\n this.cdr.markForCheck();\n }\n\n cancelAdd() {\n if (this.addDraftRowId != null) {\n this.getEditService().cancelChanges(this.data ?? [], this.data.length, this.addDraftRowId);\n }\n this.addingNew = false;\n this.addForm = this.fb.group({});;\n this.saveAttemptedNew = false;\n this.addDraftRowId = null;\n this.cdr.markForCheck();\n }\n\n startEdit(i: number) {\n if (!this.enableEdit) return;\n if (this.isExternalEditMode()) {\n this.openExternalEdit(i);\n return;\n }\n this.addingNew = false;\n this.editingCell = null;\n this.editingIndex = i;\n const row = this.paged[i] as any;\n this.editForm = this.buildFormFromRow(this.paged[i] as any);\n this.saveAttemptedEdit = false;\n const di = this.dataIndexOf(row);\n const rowId = this.getRowId(di, this.data[di]);\n // Start tracking baseline for the row (service can snapshot original state).\n this.getEditService().update(this.data ?? [], this.data[di], di, rowId);\n this.rowEdit.emit({ row: this.data[di], index: di });\n this.cdr.markForCheck();\n queueMicrotask(() => this.focusInlineEditor());\n }\n\n saveEdit(i: number) {\n if (this.editingIndex !== i || !this.editForm) return;\n this.saveAttemptedEdit = true;\n this.editForm.markAllAsTouched();\n this.editForm.updateValueAndValidity();\n\n if (this.editForm.invalid) return;\n\n const di = this.dataIndexOf(this.paged[i]);\n const original = this.data[di];\n const rowId = this.getRowId(di, original);\n const service = this.getEditService();\n const updated = service.assignValues(original, this.editForm.value as any);\n const next = service.update(this.data ?? [], updated, di, rowId);\n this.data = service.saveChanges(next, di, rowId, updated);\n this.invalidateDataCaches();\n\n this.rowSave.emit({ original, updated, index: di });\n\n this.editingIndex = null;\n this.editForm = this.fb.group({});\n this.saveAttemptedEdit = false;\n this.cdr.markForCheck();\n }\n\n cancelEdit(i: number) {\n const di = this.dataIndexOf(this.paged[i]);\n const rowId = this.getRowId(di, this.data[di]);\n this.getEditService().cancelChanges(this.data ?? [], di, rowId);\n this.rowCancel.emit({ row: this.data[di], index: di });\n this.editingIndex = null;\n this.editForm = this.fb.group({}); // empty group\n this.saveAttemptedEdit = false;\n this.cdr.markForCheck();\n }\n\n // For the \"Add row\" draft\n onNewDraftChange(col: ColumnDef<T>) {\n if (this.draftNew) {\n const key = this.keyOf(col);\n this.draftNew = this.getEditService().assignValues(this.draftNew as any, { [key]: (this.draftNew as any)[key] } as any) as any;\n }\n this.validateInto(col, this.draftNew, this.errorsNew);\n }\n\n validateInto(col: ColumnDef<T>,\n targetDraft: Partial<Record<KeyOf<T>, any>> | null,\n targetErrors: Partial<Record<KeyOf<T>, string>>\n ) {\n if (!targetDraft) return;\n const key = this.keyOf(col);\n const val = targetDraft[key];\n let err = '';\n\n // required\n if (col.required) {\n const empty = val == null || (typeof val === 'string' && val.trim() === '');\n if (empty) err = 'Required';\n }\n // type checks\n if (!err && col.type === 'email' && val && !isReasonableEmail(val)) err = 'Invalid email';\n if (!err && col.type === 'number' && val !== '' && val != null && Number.isNaN(Number(val))) err = 'Invalid number';\n if (!err && col.type === 'date' && val && Number.isNaN(Date.parse(String(val)))) err = 'Invalid date';\n if (!err && col.type === 'boolean' && col.required && val !== true && val !== false) err = 'Required';\n\n if (err) targetErrors[key] = err; else delete targetErrors[key];\n }\n\n deleteRow(i: number) {\n if (!this.enableDelete) return;\n const di = this.dataIndexFromPaged(i);\n const row = this.data[di];\n const rowId = this.getRowId(di, row);\n this.getEditService().remove(this.data ?? [], di, rowId);\n this.rowDelete.emit({ row, index: di });\n }\n\n // Optional stable row identity for efficient rendering.\n trackRow = (index: number, row: T) => {\n const di = this.dataIndexOf(row);\n const rowIndex = di >= 0 ? di : index;\n return this.trackBy ? this.trackBy(rowIndex, row) : rowIndex;\n };\n\n private rowKeyValue(row: T, rowIndex: number): any {\n const key = this.highlightRowKey;\n if (typeof key === 'function') return (key as any)(row, rowIndex);\n if (typeof key === 'string') return (row as any)?.[key];\n return rowIndex;\n }\n\n private colKeyValue(column: ColumnDef<T>, colIndex: number): any {\n const key = this.highlightColKey;\n if (typeof key === 'function') return (key as any)(column, colIndex);\n if (typeof key === 'string') return (column as any)?.[key];\n return colIndex;\n }\n\n isRowHighlighted(row: T, rowIndex: number): boolean {\n const key = this.rowKeyValue(row, rowIndex);\n return this.highlightRowMap.has(key) && this.highlightRowMap.get(key)?.some(h => h.columnKey === undefined) === true;\n }\n\n isCellHighlighted(row: T, rowIndex: number, column: ColumnDef<T>, colIndex: number): boolean {\n const key = this.rowKeyValue(row, rowIndex);\n const colKey = this.colKeyValue(column, colIndex);\n const items = this.highlightRowMap.get(key);\n return !!items?.some(h => h.columnKey === colKey);\n }\n\n toggleSort(field: Extract<keyof T, string>) {\n if (!this.enableSorting) return;\n\n if (this.sort.active !== field) this.sort = { active: field, direction: 'asc' };\n else this.sort = {\n active: field,\n direction: this.sort.direction === 'asc' ? 'desc' : this.sort.direction === 'desc' ? '' : 'asc'\n };\n\n this.page = 1;\n this.invalidateSortedCaches();\n this.sortChange.emit({ active: this.sort.active, direction: this.sort.direction });\n this.emitDataStateChange();\n const col = this.resolvedColumns.find((item) => item.field === field);\n if (col) {\n const state = this.sort.direction === 'asc' ? 'ascending' : this.sort.direction === 'desc' ? 'descending' : 'none';\n this.announceStatus(\n ngbFormatDatagridLabel(this.labelTemplate('sortBy'), {\n header: this.headerText(col),\n state,\n })\n );\n }\n }\n\n onGlobalFilterChange() {\n if (!this.isFilteringEnabled() || !this.enableGlobalFilter) return;\n this.globalFilterCtrl.setValue(this.globalFilter, { emitEvent: false });\n this.page = 1;\n this.invalidateFilteredCaches();\n this.filtersChange.emit({ global: this.globalFilter, columns: { ...this.filters } });\n this.emitDataStateChange();\n }\n\n onColumnFilterChange() {\n if (!this.isFilteringEnabled()) return;\n this.localFilter = this.legacyFilterDescriptor();\n this.page = 1;\n this.invalidateFilteredCaches();\n this.filterChange.emit(this.localFilter);\n this.filtersChange.emit({ global: this.globalFilter, columns: { ...this.filters } });\n this.emitDataStateChange();\n this.syncFilterFormFromState();\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n const target = event.target as HTMLElement | null;\n const insideMenu = !!target?.closest(\n '.grid-filter-menu-host, .grid-filter-operator, .grid-filter-operator-menu, .ngb-datagrid-floating-panel, .ngb-grid__filter-menu-overlay'\n );\n if (insideMenu) {\n return;\n }\n this.closeFilterMenu();\n this.openRowFilterField = null;\n this.openRowFilterOperatorAnchor = null;\n\n if (this.isIncellEditMode()) {\n // Clicking outside the grid commits a valid in-cell edit and keeps invalid edits open.\n if (!target?.closest('.ngb-grid')) {\n this.commitIncellEdit(true);\n }\n }\n }\n\n canCancelToolbarEdit(): boolean {\n return this.isToolbarEditMode() && (this.editingIndex != null || this.externalEditOpen);\n }\n\n isToolbarEditActive(): boolean {\n return this.isToolbarEditMode() && (this.addingNew || this.editingIndex != null || this.externalEditOpen);\n }\n\n isToolbarSaveDisabled(): boolean {\n if (!this.isToolbarEditActive()) return true;\n // External dialog validates before save; inline toolbar add/edit validate on save click.\n if (this.externalEditOpen) return !!this.externalForm?.invalid;\n return false;\n }\n\n saveToolbarEdit(): void {\n if (!this.isToolbarEditMode()) return;\n if (this.externalEditOpen) {\n this.saveExternalEdit();\n return;\n }\n if (this.addingNew) {\n this.saveAdd();\n return;\n }\n if (this.editingIndex != null) {\n this.saveEdit(this.editingIndex);\n }\n }\n\n cancelToolbarEdit(): void {\n if (!this.isToolbarEditMode()) return;\n if (this.externalEditOpen) {\n this.cancelExternalEdit();\n return;\n }\n if (this.addingNew) {\n this.cancelAdd();\n return;\n }\n if (this.editingIndex != null) {\n this.cancelEdit(this.editingIndex);\n }\n }\n\n private ariaUtilityColumns(): Exclude<UtilityColumnKind, 'actions'>[] {\n const cols: Exclude<UtilityColumnKind, 'actions'>[] = [];\n if (this.showSelectionColumn()) cols.push('selection');\n if (this.rowDetailTpl) cols.push('detail');\n if (this.stickyRowsEnabled) cols.push('sticky-toggle');\n return cols;\n }\n\n ariaColIndexForUtility(kind: Exclude<UtilityColumnKind, 'actions'>): number | null {\n const idx = this.ariaUtilityColumns().indexOf(kind);\n return idx >= 0 ? idx + 1 : null;\n }\n\n ariaColIndexForDataColumn(visibleColumnIndex: number): number {\n return this.ariaUtilityColumns().length + visibleColumnIndex + 1;\n }\n\n ariaColIndexForActions(): number {\n return this.ariaUtilityColumns().length + this.visibleColumns.length + 1;\n }\n\n @HostListener('document:keydown.escape')\n onEscapeKey(): void {\n this.closeFilterMenu();\n this.openRowFilterField = null;\n }\n\n onPageChange(p: number) {\n this.page = p;\n this.invalidatePagedCache();\n this.pageChange.emit({ page: this.page, pageSize: this.pageSize });\n this.emitDataStateChange();\n }\n\n onPageSizeChange() {\n this.page = 1;\n this.invalidatePagedCache();\n this.pageChange.emit({ page: this.page, pageSize: this.pageSize });\n this.emitDataStateChange();\n }\n\n toggleExpand(i: number): void {\n const isOpen = this.expanded.has(i);\n\n if (this.singleExpand) {\n this.expanded.clear();\n if (!isOpen) this.expanded.add(i); // open the clicked row, or close all if it was open\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n isOpen ? this.expanded.delete(i) : this.expanded.add(i);\n }\n }\n\n isExpanded(i: number): boolean {\n return this.expanded.has(i);\n }\n\n onRowClick(ev: MouseEvent, i: number) {\n if (this.isIncellEditMode() || this.isToolbarEditMode() || this.isExternalEditMode()) return;\n if (!this.editOnRowClick) return;\n if (this.addingNew || this.editingIndex === i) return;\n const el = ev.target as HTMLElement;\n if (el.closest('button, a, input, select, textarea, label, .no-edit-trigger')) return;\n this.startEdit(i);\n }\n\n onPage(p: number): void {\n if (p < 1) return;\n this.page = p;\n this.invalidatePagedCache();\n this.pageChange.emit({ page: this.page, pageSize: this.pageSize });\n this.emitDataStateChange();\n }\n\n onPageSize(sz: number | string): void {\n const next = Math.max(1, Math.trunc(Number(sz)));\n this.pageSize = Number.isFinite(next) && next > 0 ? next : this.pageSize;\n this.page = 1; // reset to first page when size changes\n this.invalidatePagedCache();\n this.pageChange.emit({ page: this.page, pageSize: this.pageSize });\n this.emitDataStateChange();\n }\n\n onRowDrop(event: NgbDndDropEvent<T>): void {\n if (!this.isRowReorderEnabled()) return;\n if (!event.sameList || event.fromIndex === event.toIndex) return;\n\n const pageOffset = this.paginationActive ? (this.page - 1) * this.pageSize : 0;\n const fromIndex = pageOffset + event.fromIndex;\n const toIndex = pageOffset + event.toIndex;\n\n if (fromIndex < 0 || toIndex < 0 || fromIndex >= this.data.length || toIndex >= this.data.length) return;\n\n const next = this.data.slice();\n const [moved] = next.splice(fromIndex, 1);\n next.splice(toIndex, 0, moved);\n this.data = next;\n this.invalidateDataCaches();\n this.rowReorder.emit({ row: moved, fromIndex, toIndex, data: next.slice() });\n this.cdr.markForCheck();\n }\n\n asBool(v: any): boolean {\n return typeof v === 'boolean' ? v : !!v?.enabled;\n }\n\n triggerExport(kind: 'pdf'|'excel') {\n this.export(kind);\n }\n\n isResponsiveEnabled(): boolean {\n const r = this.responsive;\n return r === true || (!!r && (r as NgbDataGridResponsiveOptions).enabled === true);\n }\n\n isRowSticky(row: T, pagedIndex: number): boolean {\n if (!this.stickyRows) return false;\n const di = this.dataIndexOf(row);\n const id = this.getRowId(di >= 0 ? di : pagedIndex, row);\n return this.stickyRowIds.has(id);\n }\n\n toggleStickyRow(pagedIndex: number): void {\n if (!this.stickyRows) return;\n const row = this.paged[pagedIndex];\n if (!row) return;\n const di = this.dataIndexOf(row);\n const id = this.getRowId(di >= 0 ? di : pagedIndex, row);\n if (this.stickyRowIds.has(id)) this.stickyRowIds.delete(id);\n else this.stickyRowIds.add(id);\n this.invalidateSortedCaches();\n }\n\n stickyIcon(row: T, pagedIndex: number): string {\n return this.isRowSticky(row, pagedIndex) ? 'pin-angle-fill' : 'pin-fill';\n }\n\n stickyTop(row: T, pagedIndex: number): number | null {\n if (!this.isRowSticky(row, pagedIndex)) return null;\n let offset = 0;\n for (let idx = 0; idx < pagedIndex; idx++) {\n const candidate = this.paged[idx];\n if (!candidate || !this.isRowSticky(candidate, idx)) continue;\n offset += this.measuredStickyRowHeight(idx);\n }\n return offset;\n }\n\n private measuredStickyRowHeight(pagedIndex: number): number {\n const rows = this.bodyScroller?.nativeElement.querySelectorAll<HTMLTableRowElement>('tbody > tr.grid-data-row');\n const measured = rows?.[pagedIndex]?.offsetHeight ?? 0;\n return measured > 0 ? measured : this.stickyRowHeight;\n }\n\n // Selection helpers\n get stickyRowsEnabled(): boolean {\n return this.tableOptions?.stickyRows ?? this.stickyRows;\n }\n\n get stickyHeaderEnabled(): boolean {\n return this.tableOptions?.stickyHeader ?? this.stickyHeader;\n }\n\n get stickyFooterEnabled(): boolean {\n return this.tableOptions?.stickyFooter ?? this.stickyFooter;\n }\n\n isSelectionEnabled(): boolean {\n return this.selectionMode !== 'none';\n }\n\n showSelectionColumn(): boolean {\n return this.isSelectionEnabled() && this.selectionBehavior !== 'row';\n }\n\n isCheckboxOnly(): boolean {\n return this.selectionBehavior === 'checkbox';\n }\n\n isSelectionDisabled(row: T, pagedIndex: number): boolean {\n if (!this.selectionDisabledFn) return false;\n const di = this.dataIndexOf(this.paged[pagedIndex]);\n return this.selectionDisabledFn(row, di >= 0 ? di : pagedIndex);\n }\n\n isRowSelected(row: T, pagedIndex: number): boolean {\n const di = this.dataIndexOf(this.paged[pagedIndex]);\n const id = this.getRowId(di >= 0 ? di : pagedIndex, row);\n return this.selectedRowIds.has(id);\n }\n\n toggleSelection(pagedIndex: number, event?: Event): void {\n if (!this.isSelectionEnabled()) return;\n const row = this.paged[pagedIndex];\n if (!row || this.isSelectionDisabled(row, pagedIndex)) return;\n\n const di = this.dataIndexOf(row);\n const id = this.getRowId(di >= 0 ? di : pagedIndex, row);\n const currentlySelected = this.selectedRowIds.has(id);\n const isMulti = this.selectionMode === 'multiple';\n const desktop = this.selectionKeyMode === 'desktop';\n const shift = desktop && !!(event && 'shiftKey' in event && (event as any).shiftKey);\n const meta = desktop && !!(event && (('metaKey' in event && (event as any).metaKey) || ('ctrlKey' in event && (event as any).ctrlKey)));\n const fromCheckbox = !!(event?.target instanceof HTMLInputElement && event.target.type === 'checkbox');\n\n if (!isMulti) {\n this.selectedRowIds.clear();\n this.selectedRowIds.add(id);\n this.selectionAnchor = pagedIndex;\n this.emitSelection(row, di, true);\n this.cdr.markForCheck();\n return;\n }\n\n if (shift && this.selectionAnchor != null) {\n const start = Math.min(this.selectionAnchor, pagedIndex);\n const end = Math.max(this.selectionAnchor, pagedIndex);\n this.selectedRowIds.clear();\n for (let i = start; i <= end; i++) {\n const r = this.paged[i];\n if (!r || this.isSelectionDisabled(r, i)) continue;\n const rid = this.getRowId(this.dataIndexOf(r), r);\n this.selectedRowIds.add(rid);\n }\n this.emitSelection(row, di, true);\n this.cdr.markForCheck();\n return;\n }\n\n if (fromCheckbox || meta || !desktop) {\n if (currentlySelected) this.selectedRowIds.delete(id);\n else this.selectedRowIds.add(id);\n } else {\n this.selectedRowIds.clear();\n this.selectedRowIds.add(id);\n }\n\n this.selectionAnchor = pagedIndex;\n this.emitSelection(row, di, !currentlySelected || (!meta && desktop));\n this.cdr.markForCheck();\n }\n\n private emitSelection(row: T, dataIndex: number, selected: boolean) {\n this.selectionChange.emit({\n selected: this.data.filter((r, idx) => this.selectedRowIds.has(this.getRowId(idx, r))),\n lastAction: { row, index: dataIndex, selected }\n });\n }\n\n toggleSelectAllCurrentPage(): void {\n if (this.selectionMode !== 'multiple' || !this.selectAllEnabled) return;\n const allSelectable = this.paged.filter((r, i) => !this.isSelectionDisabled(r, i));\n const allSelected = allSelectable.every((r, i) => this.isRowSelected(r, i));\n if (allSelected) {\n allSelectable.forEach((r, i) => {\n const rid = this.getRowId(this.dataIndexOf(r), r);\n this.selectedRowIds.delete(rid);\n });\n } else {\n allSelectable.forEach((r, i) => {\n const rid = this.getRowId(this.dataIndexOf(r), r);\n this.selectedRowIds.add(rid);\n });\n }\n this.selectionChange.emit({\n selected: this.data.filter((r, idx) => this.selectedRowIds.has(this.getRowId(idx, r))),\n lastAction: null\n });\n this.cdr.markForCheck();\n }\n\n isPageAllSelected(): boolean {\n const selectable = this.paged.filter((r, i) => !this.isSelectionDisabled(r, i));\n return selectable.length > 0 && selectable.every((r, i) => this.isRowSelected(r, i));\n }\n\n isPageIndeterminate(): boolean {\n const selectable = this.paged.filter((r, i) => !this.isSelectionDisabled(r, i));\n const selectedCount = selectable.filter((r, i) => this.isRowSelected(r, i)).length;\n return selectedCount > 0 && selectedCount < selectable.length;\n }\n\n selectAllLabel(): string {\n const labels = this.selectionA11yLabels || {};\n return this.isPageAllSelected()\n ? (labels.unselectAll || this.labelTemplate('unselectAll'))\n : (labels.selectAll || this.labelTemplate('selectAll'));\n }\n\n rowSelectionLabel(index: number): string {\n const labels = this.selectionA11yLabels || {};\n const selected = this.isRowSelected(this.paged[index], index);\n if (selected) {\n return labels.unselectRow\n ? ngbFormatDatagridLabel(labels.unselectRow, { index: index + 1 })\n : ngbFormatDatagridLabel(this.labelTemplate('unselectRow'), { index: index + 1 });\n }\n return labels.selectRow\n ? ngbFormatDatagridLabel(labels.selectRow, { index: index + 1 })\n : ngbFormatDatagridLabel(this.labelTemplate('selectRow'), { index: index + 1 });\n }\n\n onRowSelect(ev: MouseEvent, pagedIndex: number) {\n if (!this.isSelectionEnabled() || this.isCheckboxOnly()) return;\n const target = ev.target as HTMLElement;\n if (target.closest('input, button, a, select, textarea,label')) return;\n this.toggleSelection(pagedIndex, ev);\n }\n\n}\n","<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->\n<!-- eslint-disable @angular-eslint/template/click-events-have-key-events -->\n<div\n class=\"ngb-grid\"\n [attr.dir]=\"resolvedDir()\"\n [attr.data-theme]=\"theme\"\n [class.ngb-grid--rtl]=\"isRtl()\"\n [class.ngb-responsive]=\"isResponsiveEnabled()\"\n [class.ngb-grid--compact]=\"densityMode === 'compact'\"\n [class.ngb-grid--stacked]=\"isStackedLayout()\"\n [class.ngb-grid--stacked-cards]=\"isStackedCardsLayout()\"\n [class.ngb-grid--menu-open]=\"!!openFilterMenuField || !!openMenuOperatorField || !!openRowFilterField\"\n [class.ngb-grid--row-operator-open]=\"!!openRowFilterField\"\n [class.ngb-grid--zebra]=\"zebraStripesEnabled\"\n [class.ngb-grid--resizable]=\"resizable && !isStackedLayout()\"\n [class.ngb-grid--column-reorderable]=\"isColumnReorderEnabled()\"\n [class.ngb-grid--loading]=\"loading\"\n [attr.aria-busy]=\"loading ? 'true' : null\"\n>\n <div class=\"ngb-grid__layout-toolbar-host\">\n <ng-content select=\"ngb-datagrid-layout-toolbar\"></ng-content>\n </div>\n <ngb-datagrid-toolbar [grid]=\"gridHost\"></ngb-datagrid-toolbar>\n <ngb-datagrid-editing-toolbar\n [grid]=\"gridHost\"\n [selectedCount]=\"getSelectedCount()\"\n [editActive]=\"isToolbarEditActive()\"\n [saveDisabled]=\"isToolbarSaveDisabled()\"\n ></ngb-datagrid-editing-toolbar>\n\n @if (paginationActive && pagerShowsAt('top')) {\n <ngb-datagrid-footer [grid]=\"gridHost\" placement=\"top\"></ngb-datagrid-footer>\n }\n\n <div\n class=\"ngb-grid__status visually-hidden-focusable\"\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >{{ statusMessage }}</div>\n\n <div class=\"table-wrapper\" [ngClass]=\"responsiveWrapperClasses\">\n @if (loading) {\n <div class=\"ngb-grid__loading-overlay\" role=\"presentation\">\n <div class=\"spinner-border spinner-border-sm text-primary\" role=\"status\">\n <span class=\"visually-hidden\">Loading</span>\n </div>\n </div>\n }\n <div class=\"grid-header-shell\" #headerScroller>\n <table class=\"grid-table grid-header mb-0\" [ngClass]=\"tableClassList\" [style.width.px]=\"tablePixelWidth\">\n @if (tableOptions?.caption) {\n <caption\n [class.caption-top]=\"(tableOptions?.captionSide ?? 'top') === 'top'\"\n >\n {{ tableOptions?.caption }}\n </caption>\n }\n\n <colgroup\n ngbDatagridColgroup\n [grid]=\"gridHost\"\n [ngbSyncColgroup]=\"colgroupSyncId\"\n syncRole=\"header\"\n [syncMode]=\"resizable ? 'explicit' : 'auto'\"\n ></colgroup>\n\n <thead\n class=\"table-light\"\n ngbDatagridHeader\n [grid]=\"gridHost\"\n ></thead>\n </table>\n </div>\n\n <div [class.table-body-scroll]=\"shouldEnableScroll\" #bodyScroller (scroll)=\"onBodyHorizontalScroll()\">\n <table\n class=\"grid-table grid-body mb-0\"\n [ngClass]=\"tableClassList\"\n [style.width.px]=\"tablePixelWidth\"\n role=\"grid\"\n [attr.aria-rowcount]=\"ariaRowCount()\"\n [attr.aria-colcount]=\"ariaColCount()\"\n [attr.aria-readonly]=\"enableEdit || enableAdd ? 'false' : 'true'\"\n [attr.aria-label]=\"tableOptions?.caption || null\"\n >\n <colgroup\n ngbDatagridColgroup\n [grid]=\"gridHost\"\n [ngbSyncColgroup]=\"colgroupSyncId\"\n syncRole=\"body\"\n [syncMode]=\"resizable ? 'explicit' : 'auto'\"\n ></colgroup>\n\n <tbody\n [ngbDndList]=\"paged\"\n [dndDisabled]=\"!isRowReorderEnabled()\"\n (dndDropped)=\"onRowDrop($event)\"\n >\n @if (!paged.length) {\n <tr class=\"ngb-grid__empty-row\">\n <td [attr.colspan]=\"ariaColCount()\" class=\"ngb-grid__empty text-center text-muted py-4\">\n {{ emptyStateLabel() }}\n </td>\n </tr>\n }\n\n @if (addingNew) {\n <tr\n ngbDatagridAddRow\n [grid]=\"gridHost\"\n [formGroup]=\"addForm\"\n ></tr>\n }\n\n @for (row of paged; track trackRow($index, row); let i = $index) {\n <tr\n class=\"grid-data-row\"\n ngbDatagridDataRow\n [grid]=\"gridHost\"\n [row]=\"row\"\n [index]=\"i\"\n [selected]=\"isRowSelected(row, i)\"\n [ngbDndItem]=\"row\"\n [dndIndex]=\"i\"\n [dndDisabled]=\"!isRowReorderEnabled()\"\n (click)=\"onRowSelect($event, i); onRowClick($event, i)\"\n [formGroup]=\"editForm\"\n [class.sticky-row]=\"isRowSticky(row, i)\"\n [class.row-selected]=\"isRowSelected(row, i)\"\n [class.row-highlight]=\"isRowHighlighted(row, i)\"\n [class.grid-row--reorderable]=\"isRowReorderEnabled()\"\n [ngClass]=\"resolveRowClass(row, i)\"\n [ngStyle]=\"resolveRowStyle(row, i)\"\n [attr.aria-selected]=\"isRowSelected(row, i) ? 'true' : null\"\n [style.top.px]=\"stickyTop(row, i)\"\n [style.z-index]=\"isRowSticky(row, i) ? 3 : null\"\n ></tr>\n\n @if (rowDetailTpl && isExpanded(i)) {\n <tr\n ngbDatagridDetailRow\n [grid]=\"gridHost\"\n [row]=\"row\"\n [index]=\"i\"\n [attr.id]=\"'dg-row-detail-' + i\"\n ></tr>\n }\n }\n </tbody>\n </table>\n </div>\n\n <table class=\"table grid-table grid-foot mb-0\" [style.width.px]=\"tablePixelWidth\">\n <colgroup>\n @for (col of visibleColumns; track col.field) {\n <col [style.width.px]=\"col?.width\" />\n }\n </colgroup>\n <tbody>\n <tr>\n <td [attr.colspan]=\"visibleColumns.length\" width=\"100%\">\n @if (paginationActive && pagerShowsAt('bottom')) {\n <ngb-datagrid-footer [grid]=\"gridHost\" placement=\"bottom\"></ngb-datagrid-footer>\n }\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n @if (externalEditOpen) {\n <ngb-datagrid-external-editor [grid]=\"gridHost\"></ngb-datagrid-external-editor>\n }\n\n @if (openFilterMenuField && openFilterMenuColumn && openFilterMenuAnchor) {\n <ngb-datagrid-filter-menu-panel\n [grid]=\"gridHost\"\n [col]=\"openFilterMenuColumn\"\n [anchor]=\"openFilterMenuAnchor\"\n />\n }\n\n @if (openRowFilterField && openRowFilterColumn && openRowFilterOperatorAnchor) {\n <ngb-datagrid-row-filter-operator-panel\n [grid]=\"gridHost\"\n [col]=\"openRowFilterColumn\"\n [anchor]=\"openRowFilterOperatorAnchor\"\n />\n }\n</div>\n","import type { Datagrid } from '../datagrid/datagrid.component';\n\n/** Layout-toolbar tools receive the grid from the toolbar host. */\nexport interface NgbDatagridToolHost {\n bindHostGrid(grid: Datagrid<any>): void;\n}\n\nexport function resolveDatagridToolGrid(\n gridInput: Datagrid<any> | undefined,\n hostGrid: Datagrid<any> | undefined,\n toolName: string\n): Datagrid<any> {\n const resolved = gridInput ?? hostGrid;\n if (!resolved) {\n throw new Error(\n `${toolName}: place inside ngb-datagrid-layout-toolbar with [grid], or pass [grid] on the tool.`\n );\n }\n return resolved;\n}\n","import { Injectable } from '@angular/core';\n\nexport type NgbDatagridLayoutToolbarPanelId = 'filter' | 'sort' | 'columns';\n\n/** Ensures only one layout-toolbar panel is open at a time. */\n@Injectable()\nexport class NgbDatagridLayoutToolbarCoordinator {\n private readonly closers = new Map<NgbDatagridLayoutToolbarPanelId, () => void>();\n\n register(id: NgbDatagridLayoutToolbarPanelId, close: () => void): void {\n this.closers.set(id, close);\n }\n\n unregister(id: NgbDatagridLayoutToolbarPanelId): void {\n this.closers.delete(id);\n }\n\n openExclusive(id: NgbDatagridLayoutToolbarPanelId): void {\n for (const [panelId, close] of this.closers) {\n if (panelId !== id) close();\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n inject,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgbDatagridButtonDirective } from '../foundation/datagrid-button.directive';\nimport { NgbDatagridControlDirective } from '../foundation/datagrid-control.directive';\nimport type { Datagrid } from '../datagrid/datagrid.component';\nimport type { NgbDatagridToolHost } from './datagrid-tool-host';\nimport { resolveDatagridToolGrid } from './datagrid-tool-host';\nimport { NgbDatagridLayoutToolbarCoordinator } from './datagrid-layout-toolbar-coordinator';\n\n@Component({\n selector: 'ngb-datagrid-column-chooser-tool',\n standalone: true,\n imports: [CommonModule, FormsModule, NgbDatagridButtonDirective, NgbDatagridControlDirective],\n template: `\n @if (chooserColumns.length) {\n <div class=\"ngb-layout-tool\">\n <button\n type=\"button\"\n class=\"ngb-layout-tool__trigger\"\n [class.ngb-layout-tool__trigger--open]=\"open\"\n (click)=\"togglePanel($event)\"\n [attr.aria-expanded]=\"open\"\n aria-haspopup=\"dialog\"\n >\n <span class=\"bi bi-layout-three-columns\" aria-hidden=\"true\"></span>\n <span>{{ label }}</span>\n </button>\n\n @if (open) {\n <div class=\"ngb-layout-tool__panel ngb-layout-tool__panel--end ngb-layout-tool__panel--wide\" (click)=\"$event.stopPropagation()\">\n <div class=\"ngb-column-chooser__search\">\n <input\n ngbDatagridControl\n type=\"search\"\n [(ngModel)]=\"searchTerm\"\n placeholder=\"Search...\"\n aria-label=\"Search columns\"\n />\n </div>\n\n <div class=\"ngb-column-chooser__list\">\n <label class=\"ngb-column-chooser__option\">\n <input type=\"checkbox\" [checked]=\"allVisible\" [indeterminate]=\"partiallyVisible\" (change)=\"toggleAll()\" />\n <span>Select all</span>\n </label>\n\n @for (col of filteredColumns; track col.field) {\n <label class=\"ngb-column-chooser__option\">\n <input type=\"checkbox\" [checked]=\"draftVisibility[col.field]\" (change)=\"toggleColumn(col.field)\" />\n <span>{{ col.header }}</span>\n </label>\n }\n </div>\n\n <div class=\"ngb-column-chooser__summary\">{{ selectedCount }} Selected items</div>\n\n <div class=\"ngb-column-chooser__actions\">\n <button type=\"button\" ngbDatagridButton=\"primary\" (click)=\"apply()\">\n <span class=\"bi bi-check-lg\" aria-hidden=\"true\"></span>\n <span>Apply</span>\n </button>\n <button type=\"button\" ngbDatagridButton=\"secondary\" (click)=\"resetDraft()\">\n <span class=\"bi bi-arrow-counterclockwise\" aria-hidden=\"true\"></span>\n <span>Reset</span>\n </button>\n </div>\n </div>\n }\n </div>\n }\n `,\n styleUrls: ['./datagrid-layout-toolbar.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class NgbDatagridColumnChooserToolComponent implements OnChanges, OnInit, OnDestroy, NgbDatagridToolHost {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly coordinator = inject(NgbDatagridLayoutToolbarCoordinator, { optional: true });\n\n @Input() grid?: Datagrid<any>;\n @Input() label = 'Columns';\n\n private toolbarGrid?: Datagrid<any>;\n\n open = false;\n searchTerm = '';\n draftVisibility: Record<string, boolean> = {};\n\n bindHostGrid(grid: Datagrid<any>): void {\n this.toolbarGrid = grid;\n this.resetDraft(false);\n this.cdr.markForCheck();\n }\n\n private resolvedGrid(): Datagrid<any> | null {\n return this.grid ?? this.toolbarGrid ?? null;\n }\n\n get activeGrid(): Datagrid<any> {\n return resolveDatagridToolGrid(this.grid, this.toolbarGrid, 'ngb-datagrid-column-chooser-tool');\n }\n\n get chooserColumns() {\n const grid = this.resolvedGrid();\n return grid?.resolvedColumns ?? [];\n }\n\n get filteredColumns() {\n const query = this.searchTerm.trim().toLowerCase();\n if (!query) return this.chooserColumns;\n return this.chooserColumns.filter((col) =>\n col.header.toLowerCase().includes(query) || (col.field as string).toLowerCase().includes(query)\n );\n }\n\n get selectedCount(): number {\n return Object.values(this.draftVisibility).filter(Boolean).length;\n }\n\n get allVisible(): boolean {\n return this.chooserColumns.every((col) => this.draftVisibility[col.field as string]);\n }\n\n get partiallyVisible(): boolean {\n const count = this.selectedCount;\n return count > 0 && count < this.chooserColumns.length;\n }\n\n ngOnInit(): void {\n this.coordinator?.register('columns', () => this.closePanel());\n if (this.resolvedGrid()) {\n this.resetDraft(false);\n }\n }\n\n ngOnDestroy(): void {\n this.coordinator?.unregister('columns');\n }\n\n ngOnChanges(): void {\n this.resetDraft(false);\n }\n\n togglePanel(event: MouseEvent): void {\n event.stopPropagation();\n const willOpen = !this.open;\n if (willOpen) this.coordinator?.openExclusive('columns');\n this.open = willOpen;\n if (this.open) this.resetDraft(false);\n this.cdr.markForCheck();\n }\n\n private closePanel(): void {\n if (!this.open) return;\n this.open = false;\n this.cdr.markForCheck();\n }\n\n toggleColumn(field: string): void {\n this.draftVisibility[field] = !this.draftVisibility[field];\n this.cdr.markForCheck();\n }\n\n toggleAll(): void {\n const next = !this.allVisible;\n for (const col of this.chooserColumns) {\n this.draftVisibility[col.field as string] = next;\n }\n this.cdr.markForCheck();\n }\n\n apply(): void {\n this.activeGrid.applyColumnVisibility(this.draftVisibility);\n this.open = false;\n this.cdr.markForCheck();\n }\n\n resetDraft(mark = true): void {\n const next: Record<string, boolean> = {};\n for (const col of this.chooserColumns) {\n next[col.field as string] = !col.hidden;\n }\n this.draftVisibility = next;\n if (mark) this.cdr.markForCheck();\n }\n\n @HostListener('document:click', ['$event'])\n closeOnOutsideClick(event: MouseEvent): void {\n if (!this.open) return;\n if ((event.target as HTMLElement | null)?.closest('ngb-datagrid-column-chooser-tool')) return;\n this.closePanel();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport type { ColumnDef } from '../models/column-def';\nimport type { NgbMenuFilterConditionDraft } from '../models/filtering';\nimport { NgbDatagridButtonDirective } from '../foundation/datagrid-button.directive';\nimport { NgbDatagridControlDirective } from '../foundation/datagrid-control.directive';\nimport type { Datagrid } from '../datagrid/datagrid.component';\nimport type { NgbFilterOperator } from '../models/filtering';\nimport type { NgbDatagridToolHost } from './datagrid-tool-host';\nimport { resolveDatagridToolGrid } from './datagrid-tool-host';\nimport { NgbDatagridLayoutToolbarCoordinator } from './datagrid-layout-toolbar-coordinator';\n\n@Component({\n selector: 'ngb-datagrid-filter-tool',\n standalone: true,\n imports: [CommonModule, FormsModule, NgbDatagridButtonDirective, NgbDatagridControlDirective],\n template: `\n @if (filterableColumns.length) {\n <div class=\"ngb-layout-tool\">\n <button\n type=\"button\"\n class=\"ngb-layout-tool__trigger\"\n [class.ngb-layout-tool__trigger--open]=\"open\"\n (click)=\"togglePanel($event)\"\n [attr.aria-expanded]=\"open\"\n aria-haspopup=\"dialog\"\n >\n <span class=\"bi bi-funnel\" aria-hidden=\"true\"></span>\n <span>{{ label }}</span>\n </button>\n\n @if (open) {\n <div class=\"ngb-layout-tool__panel ngb-layout-tool__panel--wide\" (click)=\"$event.stopPropagation()\">\n <div class=\"ngb-filter-accordion\">\n @for (col of filterableColumns; track col.field) {\n <section class=\"ngb-filter-accordion__section\">\n <button\n type=\"button\"\n class=\"ngb-filter-accordion__header\"\n (click)=\"toggleSection(col.field)\"\n [attr.aria-expanded]=\"expandedField === col.field\"\n >\n <span>{{ col.header }}</span>\n <span class=\"bi\" [ngClass]=\"expandedField === col.field ? 'bi-chevron-up' : 'bi-chevron-down'\" aria-hidden=\"true\"></span>\n </button>\n\n @if (expandedField === col.field) {\n <div class=\"ngb-filter-accordion__body grid-filter-multi-panel\">\n @for (condition of menuConditions(col); track $index; let conditionIndex = $index) {\n @if (conditionIndex > 0) {\n <div class=\"grid-filter-join-select\">\n <select\n ngbDatagridControl\n class=\"grid-filter-join-select__control\"\n [ngModel]=\"activeGrid.ensureMenuJoinLogic(col)\"\n (ngModelChange)=\"activeGrid.setMenuJoinLogic(col, $event)\"\n aria-label=\"Combine conditions with\"\n >\n <option [ngValue]=\"'and'\">And</option>\n <option [ngValue]=\"'or'\">Or</option>\n </select>\n </div>\n }\n\n <select\n ngbDatagridControl\n class=\"grid-filter-operator-select\"\n [(ngModel)]=\"condition.operator\"\n [attr.aria-label]=\"'Filter operator for ' + col.header\"\n >\n @for (op of operatorsFor(col); track op) {\n <option [ngValue]=\"op\">{{ activeGrid.rowFilterOperatorLabel(col, op) }}</option>\n }\n </select>\n\n @switch (activeGrid.getColumnFilterType(col)) {\n @case ('date') {\n <input\n ngbDatagridControl\n class=\"grid-filter-value-input\"\n type=\"date\"\n [(ngModel)]=\"condition.value\"\n [disabled]=\"!activeGrid.operatorRequiresValue(condition.operator)\"\n [attr.aria-label]=\"'Filter value for ' + col.header\"\n />\n }\n @case ('boolean') {\n <select\n ngbDatagridControl\n class=\"grid-filter-value-select\"\n [(ngModel)]=\"condition.value\"\n [disabled]=\"!activeGrid.operatorRequiresValue(condition.operator)\"\n >\n <option [ngValue]=\"''\">Select</option>\n <option [ngValue]=\"true\">True</option>\n <option [ngValue]=\"false\">False</option>\n </select>\n }\n @case ('select') {\n <select\n ngbDatagridControl\n class=\"grid-filter-value-select\"\n [(ngModel)]=\"condition.value\"\n [disabled]=\"!activeGrid.operatorRequiresValue(condition.operator)\"\n >\n <option [ngValue]=\"''\">Select</option>\n @for (option of col.options ?? []; track option.value) {\n <option [ngValue]=\"option.value\">{{ option.label }}</option>\n }\n </select>\n }\n @default {\n <input\n ngbDatagridControl\n class=\"grid-filter-value-input\"\n [type]=\"activeGrid.getColumnFilterType(col) === 'numeric' ? 'number' : 'text'\"\n [(ngModel)]=\"condition.value\"\n [disabled]=\"!activeGrid.operatorRequiresValue(condition.operator)\"\n [attr.aria-label]=\"'Filter value for ' + col.header\"\n />\n }\n }\n }\n\n <div class=\"ngb-filter-accordion__actions grid-filter-menu-surface__actions--split\">\n <button\n type=\"button\"\n class=\"grid-filter-apply grid-filter-apply--secondary\"\n ngbDatagridButton=\"secondary\"\n [disabled]=\"!activeGrid.canApplyMenuFilter(col)\"\n (click)=\"applyColumn(col)\"\n >\n Filter\n </button>\n <button\n type=\"button\"\n class=\"grid-filter-cancel grid-filter-cancel--secondary\"\n ngbDatagridButton=\"secondary\"\n [disabled]=\"!activeGrid.canClearMenuFilter(col)\"\n (click)=\"clearColumn(col)\"\n >\n Clear\n </button>\n </div>\n </div>\n }\n </section>\n }\n </div>\n\n <div class=\"ngb-layout-tool__footer\">\n <button type=\"button\" class=\"w-100\" ngbDatagridButton=\"secondary\" (click)=\"clearAll()\">\n <span class=\"bi bi-funnel-fill\" aria-hidden=\"true\"></span>\n <span>Clear all filters</span>\n </button>\n </div>\n </div>\n }\n </div>\n }\n `,\n styleUrls: ['./datagrid-layout-toolbar.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class NgbDatagridFilterToolComponent implements NgbDatagridToolHost, OnInit, OnDestroy {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly coordinator = inject(NgbDatagridLayoutToolbarCoordinator, { optional: true });\n\n /** Optional override when the tool is not inside `ngb-datagrid-layout-toolbar`. */\n @Input() grid?: Datagrid<any>;\n @Input() label = 'Filter';\n\n private toolbarGrid?: Datagrid<any>;\n\n open = false;\n expandedField: string | null = null;\n\n ngOnInit(): void {\n this.coordinator?.register('filter', () => this.closePanel());\n }\n\n ngOnDestroy(): void {\n this.coordinator?.unregister('filter');\n }\n\n bindHostGrid(grid: Datagrid<any>): void {\n this.toolbarGrid = grid;\n }\n\n private resolvedGrid(): Datagrid<any> | null {\n return this.grid ?? this.toolbarGrid ?? null;\n }\n\n get activeGrid(): Datagrid<any> {\n return resolveDatagridToolGrid(this.grid, this.toolbarGrid, 'ngb-datagrid-filter-tool');\n }\n\n get filterableColumns(): ColumnDef<any>[] {\n const grid = this.resolvedGrid();\n if (!grid) return [];\n return grid.visibleColumns.filter((col) => col.filterable && grid.isFilteringEnabled());\n }\n\n menuConditions(col: ColumnDef<any>): NgbMenuFilterConditionDraft[] {\n return this.activeGrid.ensureMenuDraftConditions(col);\n }\n\n togglePanel(event: MouseEvent): void {\n event.stopPropagation();\n const willOpen = !this.open;\n if (willOpen) this.coordinator?.openExclusive('filter');\n this.open = willOpen;\n if (this.open && !this.expandedField && this.filterableColumns.length) {\n this.expandedField = this.filterableColumns[0].field as string;\n }\n this.cdr.markForCheck();\n }\n\n private closePanel(): void {\n if (!this.open) return;\n this.open = false;\n this.cdr.markForCheck();\n }\n\n toggleSection(field: string): void {\n this.expandedField = this.expandedField === field ? null : field;\n this.cdr.markForCheck();\n }\n\n operatorsFor(col: ColumnDef<any>): NgbFilterOperator[] {\n return this.activeGrid.getAllowedOperators(col);\n }\n\n applyColumn(col: ColumnDef<any>): void {\n this.activeGrid.applyMenuFilter(col);\n this.cdr.markForCheck();\n }\n\n clearColumn(col: ColumnDef<any>): void {\n this.activeGrid.clearMenuFilter(col);\n this.cdr.markForCheck();\n }\n\n clearAll(): void {\n this.activeGrid.clearAllFilters();\n this.cdr.markForCheck();\n }\n\n @HostListener('document:click', ['$event'])\n closeOnOutsideClick(event: MouseEvent): void {\n if (!this.open) return;\n if ((event.target as HTMLElement | null)?.closest('ngb-datagrid-filter-tool')) return;\n this.closePanel();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n inject,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { ColumnDef } from '../models/column-def';\nimport type { Datagrid } from '../datagrid/datagrid.component';\nimport type { NgbDatagridToolHost } from './datagrid-tool-host';\nimport { resolveDatagridToolGrid } from './datagrid-tool-host';\nimport { NgbDatagridLayoutToolbarCoordinator } from './datagrid-layout-toolbar-coordinator';\n\n@Component({\n selector: 'ngb-datagrid-sort-tool',\n standalone: true,\n imports: [CommonModule],\n template: `\n @if (sortableColumns.length) {\n <div class=\"ngb-layout-tool\">\n <button\n type=\"button\"\n class=\"ngb-layout-tool__trigger\"\n [class.ngb-layout-tool__trigger--open]=\"open\"\n (click)=\"togglePanel($event)\"\n [attr.aria-expanded]=\"open\"\n aria-haspopup=\"menu\"\n >\n <span class=\"bi bi-arrow-down-up\" aria-hidden=\"true\"></span>\n <span>{{ label }}</span>\n </button>\n\n @if (open) {\n <div class=\"ngb-layout-tool__panel\" (click)=\"$event.stopPropagation()\">\n @for (col of sortableColumns; track col.field) {\n <button\n type=\"button\"\n class=\"ngb-sort-list__item\"\n [class.ngb-sort-list__item--active]=\"activeGrid.sort.active === col.field\"\n (click)=\"toggleSort(col)\"\n >\n <span>{{ col.header }}</span>\n @if (activeGrid.sort.active === col.field) {\n <span>\n {{ activeGrid.sort.direction === 'asc' ? '▲' : activeGrid.sort.direction === 'desc' ? '▼' : '' }}\n </span>\n }\n </button>\n }\n\n <div class=\"ngb-layout-tool__footer\">\n <button type=\"button\" class=\"w-100 btn btn-link text-decoration-none\" (click)=\"clearSorting()\">\n <span class=\"bi bi-x-lg\" aria-hidden=\"true\"></span>\n <span>Clear sorting</span>\n </button>\n </div>\n </div>\n }\n </div>\n }\n `,\n styleUrls: ['./datagrid-layout-toolbar.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class NgbDatagridSortToolComponent implements NgbDatagridToolHost, OnInit, OnDestroy {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly coordinator = inject(NgbDatagridLayoutToolbarCoordinator, { optional: true });\n\n @Input() grid?: Datagrid<any>;\n @Input() label = 'Sort';\n\n private toolbarGrid?: Datagrid<any>;\n\n open = false;\n\n ngOnInit(): void {\n this.coordinator?.register('sort', () => this.closePanel());\n }\n\n ngOnDestroy(): void {\n this.coordinator?.unregister('sort');\n }\n\n bindHostGrid(grid: Datagrid<any>): void {\n this.toolbarGrid = grid;\n }\n\n private resolvedGrid(): Datagrid<any> | null {\n return this.grid ?? this.toolbarGrid ?? null;\n }\n\n get activeGrid(): Datagrid<any> {\n return resolveDatagridToolGrid(this.grid, this.toolbarGrid, 'ngb-datagrid-sort-tool');\n }\n\n get sortableColumns(): ColumnDef<any>[] {\n const grid = this.resolvedGrid();\n if (!grid) return [];\n return grid.visibleColumns.filter((col) => grid.enableSorting && col.sortable !== false);\n }\n\n togglePanel(event: MouseEvent): void {\n event.stopPropagation();\n const willOpen = !this.open;\n if (willOpen) this.coordinator?.openExclusive('sort');\n this.open = willOpen;\n this.cdr.markForCheck();\n }\n\n private closePanel(): void {\n if (!this.open) return;\n this.open = false;\n this.cdr.markForCheck();\n }\n\n toggleSort(col: ColumnDef<any>): void {\n this.activeGrid.toggleSort(col.field as string);\n this.cdr.markForCheck();\n }\n\n clearSorting(): void {\n this.activeGrid.clearSorting();\n this.cdr.markForCheck();\n }\n\n @HostListener('document:click', ['$event'])\n closeOnOutsideClick(event: MouseEvent): void {\n if (!this.open) return;\n if ((event.target as HTMLElement | null)?.closest('ngb-datagrid-sort-tool')) return;\n this.closePanel();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterContentInit,\n Component,\n ContentChildren,\n Input,\n OnChanges,\n QueryList,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { Datagrid } from '../datagrid/datagrid.component';\nimport { NgbDatagridColumnChooserToolComponent } from './datagrid-column-chooser-tool.component';\nimport { NgbDatagridFilterToolComponent } from './datagrid-filter-tool.component';\nimport { NgbDatagridSortToolComponent } from './datagrid-sort-tool.component';\nimport type { NgbDatagridToolHost } from './datagrid-tool-host';\nimport { NgbDatagridLayoutToolbarCoordinator } from './datagrid-layout-toolbar-coordinator';\n\n@Component({\n selector: 'ngb-datagrid-layout-toolbar',\n standalone: true,\n imports: [CommonModule],\n providers: [NgbDatagridLayoutToolbarCoordinator],\n template: `\n <div class=\"ngb-layout-toolbar\" role=\"toolbar\" [attr.aria-label]=\"ariaLabel\">\n <ng-content></ng-content>\n </div>\n `,\n styleUrls: ['./datagrid-layout-toolbar.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class NgbDatagridLayoutToolbarComponent implements AfterContentInit, OnChanges {\n /**\n * Grid instance for toolbar tools. Child tools inherit this via `bindHostGrid`\n * and do not need their own `[grid]` binding.\n */\n @Input({ required: true }) grid!: Datagrid<any>;\n @Input() ariaLabel = 'Grid layout toolbar';\n\n @ContentChildren(NgbDatagridFilterToolComponent) private filterTools?: QueryList<NgbDatagridFilterToolComponent>;\n @ContentChildren(NgbDatagridSortToolComponent) private sortTools?: QueryList<NgbDatagridSortToolComponent>;\n @ContentChildren(NgbDatagridColumnChooserToolComponent) private columnTools?: QueryList<NgbDatagridColumnChooserToolComponent>;\n\n ngAfterContentInit(): void {\n this.syncToolHosts();\n this.filterTools?.changes.subscribe(() => this.syncToolHosts());\n this.sortTools?.changes.subscribe(() => this.syncToolHosts());\n this.columnTools?.changes.subscribe(() => this.syncToolHosts());\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['grid']) this.syncToolHosts();\n }\n\n private syncToolHosts(): void {\n if (!this.grid) return;\n const tools: NgbDatagridToolHost[] = [\n ...(this.filterTools ?? []),\n ...(this.sortTools ?? []),\n ...(this.columnTools ?? []),\n ];\n tools.forEach((tool) => tool.bindHostGrid(this.grid));\n }\n}\n\n@Component({\n selector: 'ngb-datagrid-layout-toolbar-spacer',\n standalone: true,\n template: `<div class=\"ngb-layout-toolbar__spacer\" aria-hidden=\"true\"></div>`,\n styleUrls: ['./datagrid-layout-toolbar.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class NgbDatagridLayoutToolbarSpacerComponent {}\n","import type { ChartConfiguration, ChartType, TooltipItem } from 'chart.js';\nimport {\n NgbColumnSelectionChartOptions,\n NgbDataAggregate,\n NgbDataChartConfig,\n NgbDataChartSeries,\n NgbDataChartType,\n NgbDataMetricDef,\n NgbFullGridChartOptions,\n NgbRowSelectionChartOptions,\n NgbSparklinePoint,\n} from './data-chart.types';\n\nconst DEFAULT_PALETTE = ['#4F7DF3', '#F1645D', '#60C56E', '#F3B13E', '#8B72E8', '#5DC4B6', '#F48F4E', '#D664A0'];\n\nconst clampNumber = (value: unknown): number => {\n const parsed = typeof value === 'number' ? value : Number(value);\n return Number.isFinite(parsed) ? parsed : 0;\n};\n\nconst defaultFormatter = new Intl.NumberFormat('en-US', { maximumFractionDigits: 2 });\n\nexport const ngbChartPalette = (index: number): string => DEFAULT_PALETTE[index % DEFAULT_PALETTE.length];\n\nconst sum = (values: number[]): number => values.reduce((acc, value) => acc + value, 0);\n\nexport const ngbAggregateValues = (values: number[], aggregate: NgbDataAggregate = 'sum'): number => {\n if (!values.length) return 0;\n switch (aggregate) {\n case 'avg':\n return sum(values) / values.length;\n case 'min':\n return Math.min(...values);\n case 'max':\n return Math.max(...values);\n case 'count':\n return values.length;\n case 'sum':\n default:\n return sum(values);\n }\n};\n\nexport const ngbBuildRowSelectionChartData = <T>(\n rows: T[],\n options: NgbRowSelectionChartOptions<T>,\n): NgbDataChartConfig => ({\n type: options.chartType ?? 'bar',\n title: options.title,\n labels: options.metrics.map((metric) => metric.label),\n valueFormatter: options.valueFormatter,\n series: rows.map((row, index) => ({\n key: `row-${index}`,\n label: options.seriesLabel?.(row, index) ?? `Row ${index + 1}`,\n color: ngbChartPalette(index),\n data: options.metrics.map((metric) => clampNumber(metric.accessor(row))),\n })),\n});\n\nexport const ngbBuildColumnSelectionChartData = <T>(\n rows: T[],\n options: NgbColumnSelectionChartOptions<T>,\n): NgbDataChartConfig => ({\n type: options.chartType ?? 'bar',\n title: options.title,\n labels: rows.map((row) => options.dimension.accessor(row)),\n valueFormatter: options.valueFormatter,\n series: options.metrics.map((metric, index) => ({\n key: metric.key,\n label: metric.label,\n color: metric.color ?? ngbChartPalette(index),\n data: rows.map((row) => clampNumber(metric.accessor(row))),\n })),\n});\n\nexport const ngbBuildFullGridChartData = <T>(\n rows: T[],\n options: NgbFullGridChartOptions<T>,\n): NgbDataChartConfig => {\n const grouped = new Map<string, number[]>();\n rows.forEach((row) => {\n const key = options.dimension.accessor(row);\n const bucket = grouped.get(key) ?? [];\n bucket.push(clampNumber(options.metric.accessor(row)));\n grouped.set(key, bucket);\n });\n\n const entries = Array.from(grouped.entries()).map(([label, values]) => ({\n label,\n value: ngbAggregateValues(values, options.aggregate ?? 'sum'),\n }));\n\n if (options.sort) {\n entries.sort((left, right) =>\n options.sort === 'asc' ? left.value - right.value : right.value - left.value,\n );\n }\n\n const limited = options.limit ? entries.slice(0, options.limit) : entries;\n\n return {\n type: options.chartType ?? 'bar',\n title: options.title,\n labels: limited.map((entry) => entry.label),\n valueFormatter: options.valueFormatter,\n series: [\n {\n key: options.metric.key,\n label: options.metric.label,\n color: options.metric.color ?? ngbChartPalette(0),\n data: limited.map((entry) => entry.value),\n },\n ],\n };\n};\n\nexport const ngbBuildSparklinePoints = (values: number[], width = 112, height = 28, padding = 2): NgbSparklinePoint[] => {\n if (!values.length) return [];\n if (values.length === 1) {\n return [{ x: width / 2, y: height / 2 }];\n }\n\n const min = Math.min(...values);\n const max = Math.max(...values);\n const xStep = (width - padding * 2) / (values.length - 1);\n const yRange = max - min || 1;\n\n return values.map((value, index) => ({\n x: padding + index * xStep,\n y: height - padding - ((value - min) / yRange) * (height - padding * 2),\n }));\n};\n\nconst tooltipFormatter = (value: number, formatter?: (value: number) => string): string =>\n formatter ? formatter(value) : defaultFormatter.format(value);\n\nconst chartLayoutOptions = (_height: number) => ({\n animation: false as const,\n responsive: true,\n maintainAspectRatio: false,\n resizeDelay: 50,\n layout: { padding: { top: 4, right: 8, bottom: 4, left: 4 } },\n});\n\nexport const ngbBuildChartJsConfig = (\n config: NgbDataChartConfig,\n height = config.height ?? 320,\n): ChartConfiguration => {\n const type = config.type === 'area' ? 'line' : (config.type as ChartType);\n const legendPosition = config.legendPosition ?? 'top';\n const showLegend = config.showLegend ?? true;\n const layout = chartLayoutOptions(height);\n\n if (config.type === 'pie' || config.type === 'doughnut') {\n if (config.series.length === 1 && config.labels.length > 1) {\n const series = config.series[0];\n const colors = config.labels.map((_, index) => ngbChartPalette(index));\n return {\n type,\n data: {\n labels: config.labels,\n datasets: [{\n label: series.label,\n data: series.data.map((value) => clampNumber(value)),\n backgroundColor: colors,\n borderColor: colors,\n borderWidth: 1,\n }],\n },\n options: {\n ...layout,\n plugins: {\n legend: { display: showLegend, position: legendPosition },\n title: { display: !!config.title, text: config.title },\n tooltip: {\n callbacks: {\n label: (ctx: TooltipItem<any>) => {\n const label = ctx.label ? `${ctx.label}: ` : '';\n return `${label}${tooltipFormatter(clampNumber(ctx.parsed), config.valueFormatter)}`;\n },\n },\n },\n },\n },\n };\n }\n\n const series = config.series.map((item, index) => ({\n label: item.label,\n value: sum(item.data),\n color: item.color ?? ngbChartPalette(index),\n }));\n return {\n type,\n data: {\n labels: series.map((item) => item.label),\n datasets: [{\n label: config.title ?? '',\n data: series.map((item) => item.value),\n backgroundColor: series.map((item) => item.color),\n borderColor: series.map((item) => item.color),\n borderWidth: 1,\n }],\n },\n options: {\n ...layout,\n plugins: {\n legend: { display: showLegend, position: legendPosition },\n title: { display: !!config.title, text: config.title },\n tooltip: {\n callbacks: {\n label: (ctx: TooltipItem<any>) => {\n const label = ctx.label ? `${ctx.label}: ` : '';\n return `${label}${tooltipFormatter(clampNumber(ctx.parsed), config.valueFormatter)}`;\n },\n },\n },\n },\n },\n };\n }\n\n const series = config.series.map((item, index) => {\n const color = item.color ?? ngbChartPalette(index);\n return {\n label: item.label,\n data: item.data.map((value) => clampNumber(value)),\n borderColor: color,\n backgroundColor: config.type === 'area' ? `${color}66` : `${color}cc`,\n fill: config.type === 'area',\n tension: config.type === 'line' || config.type === 'area' ? 0.3 : 0,\n pointRadius: config.type === 'bar' ? 0 : 3,\n borderWidth: 2,\n };\n });\n\n return {\n type,\n data: {\n labels: config.labels,\n datasets: series,\n },\n options: {\n ...layout,\n interaction: { mode: 'index', intersect: false },\n scales: {\n x: {\n stacked: !!config.stacked,\n grid: { color: '#eef2f7' },\n ticks: { color: '#5b6578' },\n },\n y: {\n stacked: !!config.stacked,\n beginAtZero: true,\n grid: { color: '#eef2f7' },\n ticks: {\n color: '#5b6578',\n callback: (value) => tooltipFormatter(clampNumber(value), config.valueFormatter),\n },\n },\n },\n plugins: {\n legend: { display: showLegend, position: legendPosition },\n title: { display: !!config.title, text: config.title },\n tooltip: {\n callbacks: {\n label: (ctx: TooltipItem<any>) => {\n const label = ctx.dataset.label ? `${ctx.dataset.label}: ` : '';\n return `${label}${tooltipFormatter(clampNumber(ctx.parsed?.y ?? ctx.parsed), config.valueFormatter)}`;\n },\n },\n },\n },\n },\n };\n};\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, Input, OnChanges, OnDestroy, SimpleChanges, ViewChild } from '@angular/core';\nimport { NgbDataChartConfig } from './data-chart.types';\nimport { ngbBuildChartJsConfig } from './data-chart.helpers';\n\ntype ChartInstance = { destroy(): void };\ntype ChartConstructor = new (context: CanvasRenderingContext2D, config: unknown) => ChartInstance;\n\n@Component({\n selector: 'ngb-data-chart',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"ngb-data-chart\" [style.height.px]=\"chartHeight\">\n @if (hasData()) {\n <canvas #canvas [attr.aria-label]=\"ariaLabel\" role=\"img\"></canvas>\n } @else {\n <div class=\"ngb-data-chart__empty\">{{ config?.emptyState || emptyState }}</div>\n }\n </div>\n `,\n styles: [`\n :host { display: block; }\n .ngb-data-chart {\n position: relative;\n width: 100%;\n height: 320px;\n overflow: hidden;\n }\n .ngb-data-chart canvas {\n display: block;\n width: 100% !important;\n height: 100% !important;\n }\n .ngb-data-chart__empty {\n min-height: inherit;\n display: grid;\n place-items: center;\n color: #6b7280;\n font-size: .95rem;\n border: 1px dashed #d7deea;\n border-radius: .75rem;\n background: #f8fafc;\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgbDataChartComponent implements AfterViewInit, OnChanges, OnDestroy {\n @Input() config: NgbDataChartConfig | null = null;\n @Input() ariaLabel = 'Data chart';\n @Input() emptyState = 'No chart data available.';\n\n @ViewChild('canvas') private canvas?: ElementRef<HTMLCanvasElement>;\n\n private chart?: ChartInstance;\n private chartConstructor?: ChartConstructor;\n private viewReady = false;\n private configSignature = '';\n private rendering = false;\n\n get chartHeight(): number {\n return this.config?.height ?? 320;\n }\n\n ngAfterViewInit(): void {\n this.viewReady = true;\n this.renderChart();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.viewReady) return;\n if (changes['config']) {\n this.renderChart();\n }\n }\n\n ngOnDestroy(): void {\n this.destroyChart();\n }\n\n hasData(): boolean {\n return !!this.config?.series?.some((series) => series.data.some((value) => Number.isFinite(value)));\n }\n\n private async renderChart(): Promise<void> {\n if (this.rendering) return;\n if (!this.canvas || typeof window === 'undefined') {\n this.destroyChart();\n return;\n }\n\n if (!this.hasData() || !this.config) {\n this.destroyChart();\n this.configSignature = '';\n return;\n }\n\n const signature = this.buildConfigSignature(this.config);\n const context = this.canvas.nativeElement.getContext('2d');\n if (!context) return;\n\n if (this.chart && signature === this.configSignature) {\n return;\n }\n\n this.rendering = true;\n try {\n const Chart = await this.loadChartConstructor();\n if (!Chart) {\n this.destroyChart();\n return;\n }\n this.destroyChart();\n this.chart = new Chart(context, ngbBuildChartJsConfig(this.config, this.chartHeight));\n this.configSignature = signature;\n } finally {\n this.rendering = false;\n }\n }\n\n private async loadChartConstructor(): Promise<ChartConstructor | null> {\n if (this.chartConstructor) return this.chartConstructor;\n try {\n const chartModule = await import('chart.js');\n chartModule.Chart.register(...chartModule.registerables);\n this.chartConstructor = chartModule.Chart as ChartConstructor;\n return this.chartConstructor;\n } catch {\n return null;\n }\n }\n\n private buildConfigSignature(config: NgbDataChartConfig): string {\n return JSON.stringify({\n type: config.type,\n title: config.title,\n labels: config.labels,\n series: config.series,\n stacked: config.stacked,\n showLegend: config.showLegend,\n legendPosition: config.legendPosition,\n });\n }\n\n private destroyChart(): void {\n this.chart?.destroy();\n this.chart = undefined;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { NgbSparklinePoint } from './data-chart.types';\nimport { ngbBuildSparklinePoints } from './data-chart.helpers';\n\n@Component({\n selector: 'ngb-data-sparkline',\n standalone: true,\n imports: [CommonModule],\n template: `\n <svg\n class=\"ngb-data-sparkline\"\n [attr.viewBox]=\"'0 0 ' + width + ' ' + height\"\n [attr.width]=\"width\"\n [attr.height]=\"height\"\n [attr.aria-label]=\"ariaLabel\"\n role=\"img\"\n preserveAspectRatio=\"none\"\n >\n @if (points.length > 1) {\n <path [attr.d]=\"path\" fill=\"none\" [attr.stroke]=\"strokeColor\" [attr.stroke-width]=\"strokeWidth\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n @if (showEndDot) {\n <circle [attr.cx]=\"points[points.length - 1].x\" [attr.cy]=\"points[points.length - 1].y\" [attr.r]=\"endDotRadius\" [attr.fill]=\"strokeColor\"></circle>\n }\n } @else if (points.length === 1) {\n <circle [attr.cx]=\"points[0].x\" [attr.cy]=\"points[0].y\" [attr.r]=\"endDotRadius\" [attr.fill]=\"strokeColor\"></circle>\n }\n </svg>\n `,\n styles: [`\n :host { display: inline-flex; align-items: center; }\n .ngb-data-sparkline { display: block; overflow: visible; }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgbDataSparklineComponent implements OnChanges {\n @Input() values: number[] = [];\n /** Cached series used by getters so template bindings stay stable between checks. */\n series: number[] = [];\n @Input() width = 112;\n @Input() height = 28;\n @Input() strokeWidth = 2;\n @Input() positiveColor = '#58c46a';\n @Input() negativeColor = '#ef5350';\n @Input() neutralColor = '#9aa5b5';\n @Input() color: string | null = null;\n @Input() showEndDot = true;\n @Input() endDotRadius = 2.5;\n @Input() ariaLabel = 'Sparkline chart';\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['values']) {\n this.series = [...(this.values ?? [])];\n }\n }\n\n get points(): NgbSparklinePoint[] {\n return ngbBuildSparklinePoints(this.series, this.width, this.height);\n }\n\n get path(): string {\n if (this.points.length < 2) return '';\n return this.points.map((point, index) => `${index === 0 ? 'M' : 'L'} ${point.x} ${point.y}`).join(' ');\n }\n\n get strokeColor(): string {\n if (this.color) return this.color;\n if (this.series.length < 2) return this.neutralColor;\n const delta = this.series[this.series.length - 1] - this.series[0];\n if (delta > 0) return this.positiveColor;\n if (delta < 0) return this.negativeColor;\n return this.neutralColor;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewChecked,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\n inject,\n} from '@angular/core';\nimport { ColumnDef } from '../models/column-def';\nimport { Datagrid } from '../datagrid/datagrid.component';\nimport { NgbCellTemplate } from '../directives/datagrid-templates.directive';\nimport { NgbDataChartComponent } from './data-chart.component';\nimport { NgbDataSparklineComponent } from './data-sparkline.component';\nimport {\n ngbBuildColumnSelectionChartData,\n ngbBuildFullGridChartData,\n ngbBuildRowSelectionChartData,\n} from './data-chart.helpers';\nimport { NgbDataChartConfig, NgbDataMetricDef } from './data-chart.types';\nimport { NgbGridChartConfig } from './grid-chart.types';\n\nexport interface NgbGridChartSelectionChange<T> {\n selected: T[];\n selectedRowIds: Array<string | number>;\n}\n\n@Component({\n selector: 'ngb-grid-chart',\n standalone: true,\n imports: [CommonModule, Datagrid, NgbCellTemplate, NgbDataChartComponent, NgbDataSparklineComponent],\n template: `\n <div class=\"ngb-grid-chart\" [class.ngb-grid-chart--full]=\"config?.mode === 'full-grid'\">\n @if (config?.mode === 'sparklines') {\n <ngb-datagrid\n [columns]=\"sparklineColumns\"\n [data]=\"config?.rows ?? []\"\n [theme]=\"'bootstrap'\"\n [enableSorting]=\"false\"\n [enableFiltering]=\"false\"\n [enableGlobalFilter]=\"false\"\n [enablePagination]=\"false\"\n [tableOptions]=\"tableOptions\"\n >\n @if (dimensionTemplate) {\n <ng-template [ngbCell]=\"config!.dimension.key\" let-row=\"row\">\n <div class=\"ngb-grid-chart__dimension\">\n <strong>{{ config!.dimension.accessor(row) }}</strong>\n @if (config?.subDimension) {\n <span class=\"ngb-grid-chart__subdimension\">{{ config!.subDimension!.accessor(row) }}</span>\n }\n </div>\n </ng-template>\n }\n @if (sparklineField) {\n <ng-template [ngbCell]=\"sparklineField\" let-row=\"row\">\n <ngb-data-sparkline\n [values]=\"sparklineValues(row)\"\n [width]=\"config?.sparkline?.width ?? 112\"\n [height]=\"config?.sparkline?.height ?? 30\"\n [color]=\"sparklineColor(row)\"\n ariaLabel=\"Trend sparkline\"\n ></ngb-data-sparkline>\n </ng-template>\n }\n <ng-template ngbCell=\"growthPct\" let-value>\n <span class=\"ngb-grid-chart__growth\" [class.ngb-grid-chart__growth--up]=\"value >= 0\" [class.ngb-grid-chart__growth--down]=\"value < 0\">\n {{ value > 0 ? '+' : '' }}{{ value | number:'1.1-1' }}%\n </span>\n </ng-template>\n </ngb-datagrid>\n } @else if (config?.mode === 'full-grid') {\n <div class=\"ngb-grid-chart__full-layout\">\n <div class=\"ngb-grid-chart__chart-pane\">\n <ngb-data-chart [config]=\"chartConfig\" [ariaLabel]=\"chartAriaLabel\"></ngb-data-chart>\n </div>\n <div class=\"ngb-grid-chart__summary-pane\">\n <ng-content select=\"[gridChartSummary]\"></ng-content>\n </div>\n </div>\n } @else {\n <div class=\"ngb-grid-chart__split-layout\">\n <div class=\"ngb-grid-chart__grid-pane\">\n <ngb-datagrid\n [columns]=\"gridColumns\"\n [data]=\"config?.rows ?? []\"\n [theme]=\"'bootstrap'\"\n [enableSorting]=\"false\"\n [enableFiltering]=\"false\"\n [enableGlobalFilter]=\"false\"\n [enablePagination]=\"false\"\n [selectionMode]=\"config?.mode === 'row-selection' ? 'multiple' : 'none'\"\n [selectionBehavior]=\"config?.mode === 'row-selection' ? 'checkbox' : 'row'\"\n [trackBy]=\"rowTrackBy\"\n [tableOptions]=\"tableOptions\"\n (selectionChange)=\"onGridSelectionChange($event)\"\n >\n @if (dimensionTemplate) {\n <ng-template [ngbCell]=\"config!.dimension.key\" let-row=\"row\">\n <div class=\"ngb-grid-chart__dimension\">\n @if (config?.mode === 'row-selection' && isRowSelected(row)) {\n <span class=\"ngb-grid-chart__series-dot\" [style.background]=\"seriesColor(row)\"></span>\n }\n <div>\n <strong>{{ config!.dimension.accessor(row) }}</strong>\n @if (config?.subDimension) {\n <div class=\"ngb-grid-chart__subdimension\">{{ config!.subDimension!.accessor(row) }}</div>\n }\n </div>\n </div>\n </ng-template>\n }\n </ngb-datagrid>\n </div>\n <div class=\"ngb-grid-chart__chart-pane\">\n <ngb-data-chart [config]=\"chartConfig\" [ariaLabel]=\"chartAriaLabel\"></ngb-data-chart>\n <ng-content select=\"[gridChartFooter]\"></ng-content>\n </div>\n </div>\n }\n </div>\n `,\n styles: [`\n :host { display: block; }\n .ngb-grid-chart__split-layout,\n .ngb-grid-chart__full-layout {\n display: grid;\n gap: 1rem;\n align-items: stretch;\n }\n .ngb-grid-chart__split-layout {\n grid-template-columns: minmax(0, 1.15fr) minmax(280px, 0.85fr);\n }\n .ngb-grid-chart--full .ngb-grid-chart__full-layout {\n grid-template-columns: minmax(0, 1.2fr) minmax(260px, 0.8fr);\n }\n .ngb-grid-chart__grid-pane,\n .ngb-grid-chart__chart-pane,\n .ngb-grid-chart__summary-pane {\n min-width: 0;\n }\n .ngb-grid-chart__chart-pane {\n display: flex;\n flex-direction: column;\n gap: .5rem;\n }\n .ngb-grid-chart__dimension {\n display: inline-flex;\n align-items: flex-start;\n gap: .55rem;\n min-width: 0;\n }\n .ngb-grid-chart__subdimension {\n display: block;\n font-size: .82rem;\n color: #6b7280;\n font-weight: 500;\n }\n .ngb-grid-chart__series-dot {\n width: .55rem;\n height: .55rem;\n border-radius: 999px;\n margin-top: .35rem;\n flex: 0 0 auto;\n }\n .ngb-grid-chart__growth {\n font-weight: 700;\n }\n .ngb-grid-chart__growth--up { color: #16a34a; }\n .ngb-grid-chart__growth--down { color: #ef4444; }\n @media (max-width: 960px) {\n .ngb-grid-chart__split-layout,\n .ngb-grid-chart--full .ngb-grid-chart__full-layout {\n grid-template-columns: 1fr;\n }\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgbGridChartComponent<T = any> implements OnChanges, AfterViewInit, AfterViewChecked {\n @Input({ required: true }) config!: NgbGridChartConfig<T>;\n @Input() ariaLabel = 'Grid chart';\n\n @Output() selectionChange = new EventEmitter<NgbGridChartSelectionChange<T>>();\n\n @ViewChild(Datagrid) private grid?: Datagrid<T>;\n\n gridColumns: ColumnDef<T>[] = [];\n chartConfig: NgbDataChartConfig | null = null;\n dimensionTemplate = true;\n sparklineField: string | null = null;\n sparklineColumns: ColumnDef<T>[] = [];\n\n readonly tableOptions = { responsive: true, hoverRows: true, zebraStripes: true };\n readonly rowTrackBy = (index: number, row: T) => this.resolveRowId(row, index);\n\n private readonly cdr = inject(ChangeDetectorRef);\n private selectedIds = new Set<string | number>();\n private activeMetricKeys = new Set<string>();\n private lastMode: NgbGridChartConfig<T>['mode'] | null = null;\n private lastMetricKeys = '';\n private lastChartType = '';\n private lastRowIds = '';\n private lastSparklineKey = '';\n private lastFullGridKey = '';\n private selectionSeedPending = false;\n private sparklineSeriesByRowId = new Map<string | number, number[]>();\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!changes['config'] || !this.config) return;\n this.syncSelectionFromConfig();\n this.applyConfigChanges();\n }\n\n ngAfterViewInit(): void {\n if (this.config?.mode === 'row-selection') {\n this.scheduleSeedSelection();\n }\n }\n\n ngAfterViewChecked(): void {\n if (this.selectionSeedPending) {\n this.seedGridSelection();\n }\n }\n\n get chartAriaLabel(): string {\n return this.config?.chartTitle ?? this.ariaLabel;\n }\n\n sparklineValues(row: T): number[] {\n const id = this.resolveRowId(row, this.config.rows.indexOf(row));\n const cached = this.sparklineSeriesByRowId.get(id);\n if (cached) return cached;\n return this.config?.sparkline?.values(row) ?? [];\n }\n\n sparklineColor(row: T): string | null {\n if (!this.config?.sparkline?.trendColor) return null;\n const values = this.sparklineValues(row);\n if (values.length < 2) return null;\n const delta = values[values.length - 1] - values[0];\n if (delta > 0) return '#58c46a';\n if (delta < 0) return '#ef5350';\n return '#9aa5b5';\n }\n\n isRowSelected(row: T): boolean {\n const id = this.resolveRowId(row, this.config.rows.indexOf(row));\n return this.selectedIds.has(id);\n }\n\n seriesColor(row: T): string {\n const selected = this.selectedRows();\n const index = selected.indexOf(row);\n const palette = ['#4F7DF3', '#F1645D', '#60C56E', '#F3B13E', '#8B72E8', '#5DC4B6', '#F48F4E', '#D664A0'];\n return palette[Math.max(0, index) % palette.length];\n }\n\n onGridSelectionChange(event: { selected: T[] }): void {\n this.selectedIds = new Set(event.selected.map((row) => this.resolveRowId(row, this.config.rows.indexOf(row))));\n this.rebuildChartOnly();\n this.selectionChange.emit({\n selected: event.selected,\n selectedRowIds: Array.from(this.selectedIds),\n });\n this.cdr.markForCheck();\n }\n\n private applyConfigChanges(): void {\n const mode = this.config.mode;\n const metricKeys = [...this.activeMetricKeys].sort().join('|');\n const rowIds = [...this.selectedIds].sort().join('|');\n const chartType = this.config.chartType ?? 'bar';\n const sparklineValuesKey = mode === 'sparklines' && this.config.sparkline?.values\n ? this.config.rows\n .map((row) => this.config.sparkline!.values(row).join(','))\n .join(';')\n : '';\n const sparklineKey = `${this.config.sparkline?.field ?? ''}:${this.config.sparkline?.trendColor ? 1 : 0}:${sparklineValuesKey}`;\n const fullGridDimension = this.config.fullGrid?.dimension ?? this.config.dimension;\n const fullGridMetricKey = this.config.fullGrid?.metric?.key ?? '';\n const fullGridKey = mode === 'full-grid'\n ? `${fullGridMetricKey}|${fullGridDimension.key}|${chartType}`\n : '';\n\n const modeChanged = mode !== this.lastMode;\n const metricsChanged = metricKeys !== this.lastMetricKeys;\n const rowIdsChanged = rowIds !== this.lastRowIds;\n const chartTypeChanged = chartType !== this.lastChartType;\n const sparklineChanged = sparklineKey !== this.lastSparklineKey;\n const fullGridChanged = fullGridKey !== this.lastFullGridKey;\n\n this.lastMode = mode;\n this.lastMetricKeys = metricKeys;\n this.lastRowIds = rowIds;\n this.lastChartType = chartType;\n this.lastSparklineKey = sparklineKey;\n this.lastFullGridKey = fullGridKey;\n\n if (mode === 'sparklines') {\n if (modeChanged || sparklineChanged || metricsChanged) {\n this.sparklineField = this.config.sparkline?.field ?? null;\n this.sparklineColumns = this.buildSparklineColumns();\n this.rebuildSparklineCache();\n }\n this.chartConfig = null;\n this.cdr.markForCheck();\n return;\n }\n\n if (mode === 'full-grid') {\n if (modeChanged || fullGridChanged || chartTypeChanged) {\n this.rebuildChartOnly();\n }\n this.cdr.markForCheck();\n return;\n }\n\n if (modeChanged || metricsChanged) {\n this.gridColumns = mode === 'column-selection'\n ? this.buildColumnSelectionColumns()\n : this.buildRowSelectionColumns();\n }\n\n if (modeChanged || metricsChanged || rowIdsChanged || chartTypeChanged) {\n this.rebuildChartOnly();\n }\n\n if (mode === 'row-selection' && (modeChanged || rowIdsChanged)) {\n this.scheduleSeedSelection();\n }\n\n this.cdr.markForCheck();\n }\n\n private rebuildSparklineCache(): void {\n this.sparklineSeriesByRowId.clear();\n if (!this.config?.sparkline?.values) return;\n this.config.rows.forEach((row, index) => {\n const id = this.resolveRowId(row, index);\n this.sparklineSeriesByRowId.set(id, this.config.sparkline!.values(row));\n });\n }\n\n private syncSelectionFromConfig(): void {\n const keys = this.config.selectedMetricKeys ?? this.config.metrics.map((metric) => metric.key);\n this.activeMetricKeys = new Set(keys);\n const rowIds = this.config.selectedRowIds ?? [];\n this.selectedIds = new Set(rowIds);\n }\n\n private rebuildChartOnly(): void {\n if (!this.config || this.config.mode === 'sparklines') return;\n\n if (this.config.mode === 'row-selection') {\n this.chartConfig = ngbBuildRowSelectionChartData(this.selectedRows(), {\n metrics: this.rowMetrics(),\n seriesLabel: (row) => this.config.dimension.accessor(row),\n chartType: this.config.chartType,\n title: this.config.chartTitle,\n valueFormatter: this.config.valueFormatter,\n });\n return;\n }\n\n if (this.config.mode === 'column-selection') {\n this.chartConfig = ngbBuildColumnSelectionChartData(this.config.rows, {\n dimension: this.config.dimension,\n metrics: this.activeMetrics(),\n chartType: this.config.chartType,\n title: this.config.chartTitle,\n valueFormatter: this.config.valueFormatter,\n });\n return;\n }\n\n if (this.config.mode === 'full-grid' && this.config.fullGrid) {\n this.chartConfig = ngbBuildFullGridChartData(this.config.rows, {\n dimension: this.config.fullGrid.dimension ?? this.config.dimension,\n metric: this.config.fullGrid.metric ?? this.config.metrics[0],\n aggregate: this.config.fullGrid.aggregate,\n chartType: this.config.chartType ?? this.config.fullGrid.chartType,\n title: this.config.chartTitle ?? this.config.fullGrid.title,\n sort: this.config.fullGrid.sort,\n limit: this.config.fullGrid.limit,\n valueFormatter: this.config.valueFormatter ?? this.config.fullGrid.valueFormatter,\n });\n }\n }\n\n private selectedRows(): T[] {\n return this.config.rows.filter((row, index) => this.selectedIds.has(this.resolveRowId(row, index)));\n }\n\n private activeMetrics(): NgbDataMetricDef<T>[] {\n return this.config.metrics.filter((metric) => this.activeMetricKeys.has(metric.key));\n }\n\n private rowMetrics(): NgbDataMetricDef<T>[] {\n return this.config.rowSelectionMetrics ?? this.config.metrics;\n }\n\n private resolveRowId(row: T, index: number): string | number {\n const candidate = (row as { id?: string | number }).id;\n return candidate ?? index;\n }\n\n private scheduleSeedSelection(): void {\n this.selectionSeedPending = true;\n Promise.resolve().then(() => this.seedGridSelection());\n setTimeout(() => this.seedGridSelection());\n requestAnimationFrame(() => this.seedGridSelection());\n }\n\n private seedGridSelection(): void {\n if (this.config?.mode !== 'row-selection' || !this.grid) return;\n const ids = this.config.rows\n .map((row, index) => this.resolveRowId(row, index))\n .filter((id) => this.selectedIds.has(id));\n this.grid.setSelectionIds(ids, { emit: false });\n this.selectionSeedPending = false;\n this.cdr.markForCheck();\n }\n\n private buildRowSelectionColumns(): ColumnDef<T>[] {\n return [\n {\n field: this.config.dimension.key as Extract<keyof T, string>,\n header: this.config.dimension.label,\n width: 280,\n },\n ...this.rowMetrics().map((metric) => ({\n field: metric.key as Extract<keyof T, string>,\n header: metric.label,\n type: 'number' as const,\n width: 140,\n })),\n ];\n }\n\n private buildColumnSelectionColumns(): ColumnDef<T>[] {\n const productCol: ColumnDef<T> = {\n field: this.config.dimension.key as Extract<keyof T, string>,\n header: this.config.dimension.label.toUpperCase(),\n width: 210,\n };\n const metricCols = this.config.metrics.map((metric) => {\n const active = this.activeMetricKeys.has(metric.key);\n const tint = metric.color ?? '#94a3b8';\n return {\n field: metric.key as Extract<keyof T, string>,\n header: metric.label.toUpperCase(),\n type: 'number' as const,\n width: 150,\n headerStyle: active\n ? { background: `${tint}18`, color: '#334155', fontWeight: 700 }\n : { color: '#94a3b8', fontWeight: 700 },\n cellStyle: active\n ? { background: `${tint}10`, color: '#111827' }\n : { color: '#cbd5e1' },\n } as ColumnDef<T>;\n });\n const trailing = (this.config.trailingColumns ?? []).map((col) => ({\n field: col.field as Extract<keyof T, string>,\n header: col.header.toUpperCase(),\n type: col.type ?? 'number',\n width: col.width ?? 130,\n })) as ColumnDef<T>[];\n return [productCol, ...metricCols, ...trailing];\n }\n\n private buildSparklineColumns(): ColumnDef<T>[] {\n const cols: ColumnDef<T>[] = [\n {\n field: this.config.dimension.key as Extract<keyof T, string>,\n header: this.config.dimension.label.toUpperCase(),\n width: 220,\n },\n ];\n if (this.config.subDimension) {\n cols.push({\n field: this.config.subDimension.key as Extract<keyof T, string>,\n header: this.config.subDimension.label.toUpperCase(),\n width: 180,\n });\n }\n const quarterMetrics = this.config.metrics.filter((metric) => metric.key.startsWith('q'));\n cols.push(\n ...quarterMetrics.map((metric) => ({\n field: metric.key as Extract<keyof T, string>,\n header: metric.label.toUpperCase(),\n type: 'number' as const,\n width: 150,\n })),\n );\n if (this.config.sparkline?.field) {\n cols.push({\n field: this.config.sparkline.field as Extract<keyof T, string>,\n header: 'Trend',\n width: 170,\n });\n }\n cols.push(\n ...(this.config.trailingColumns ?? []).map((col) => ({\n field: col.field as Extract<keyof T, string>,\n header: col.header.toUpperCase(),\n type: col.type ?? 'number',\n width: col.width ?? 130,\n })) as ColumnDef<T>[],\n );\n return cols;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgbDatagridButtonDirective } from '../foundation/datagrid-button.directive';\nimport { NgbDatagridControlDirective } from '../foundation/datagrid-control.directive';\nimport { ColumnType } from '../models/column-def';\nimport {\n NgbColumnFilterType,\n NgbCompositeFilterDescriptor,\n NgbFilterOperator,\n ngbAllowedFilterOperators,\n ngbColumnTypeToFilterType,\n ngbDefaultFilterOperator,\n ngbFilterOperatorLabel,\n ngbOperatorRequiresFilterValue,\n} from '../models/filtering';\n\nexport interface NgbAdvancedSearchField {\n field: string;\n label: string;\n type?: ColumnType;\n filterType?: NgbColumnFilterType;\n defaultFilterOperator?: NgbFilterOperator | '';\n allowedFilterOperators?: NgbFilterOperator[];\n}\n\nexport interface NgbAdvancedSearchOperator {\n value: NgbFilterOperator;\n label: string;\n}\n\nexport interface NgbAdvancedSearchRule {\n field: string;\n operator: NgbFilterOperator;\n value: any;\n}\n\n@Component({\n selector: 'ngb-advanced-search',\n standalone: true,\n imports: [CommonModule, FormsModule, NgbDatagridButtonDirective, NgbDatagridControlDirective],\n template: `\n <div class=\"ngb-advanced-search\">\n <div class=\"ngb-advanced-search__logic\">\n <span>{{ matchLabel }}</span>\n <button\n type=\"button\"\n [ngbDatagridButton]=\"logic === 'and' ? 'primary' : 'secondary'\"\n (click)=\"setLogic('and')\"\n >\n AND\n </button>\n <button\n type=\"button\"\n [ngbDatagridButton]=\"logic === 'or' ? 'primary' : 'secondary'\"\n (click)=\"setLogic('or')\"\n >\n OR\n </button>\n <span>{{ rulesLabel }}</span>\n </div>\n\n <div class=\"ngb-advanced-search__rules\">\n @for (rule of rules; track $index; let i = $index) {\n <div class=\"ngb-advanced-search__rule\">\n <span class=\"ngb-advanced-search__join\">{{ i === 0 ? whenLabel : logic.toUpperCase() }}</span>\n <select\n ngbDatagridControl\n [ngModel]=\"rule.field\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"setRuleField(rule, $event)\"\n [attr.aria-label]=\"fieldAriaLabel\"\n >\n @for (field of fields; track field.field) {\n <option [value]=\"field.field\">{{ field.label }}</option>\n }\n </select>\n <select\n ngbDatagridControl\n [ngModel]=\"rule.operator\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"setRuleOperator(rule, $event)\"\n [attr.aria-label]=\"operatorAriaLabel\"\n >\n @for (operator of operatorOptionsFor(rule); track operator.value) {\n <option [ngValue]=\"operator.value\">{{ operator.label }}</option>\n }\n </select>\n <input\n ngbDatagridControl\n [attr.type]=\"inputType(rule)\"\n [(ngModel)]=\"rule.value\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"emitRules()\"\n [placeholder]=\"valuePlaceholder\"\n [disabled]=\"!operatorRequiresValue(rule.operator)\"\n [attr.aria-label]=\"valueAriaLabel\"\n />\n <button\n type=\"button\"\n ngbDatagridButton=\"danger\"\n (click)=\"removeRule(i)\"\n [disabled]=\"rules.length <= minRules\"\n [attr.aria-label]=\"removeRuleAriaLabel\"\n >\n {{ removeRuleLabel }}\n </button>\n </div>\n }\n </div>\n\n <div class=\"ngb-advanced-search__actions\">\n <button type=\"button\" ngbDatagridButton=\"secondary\" (click)=\"addRule()\">\n {{ addRuleLabel }}\n </button>\n <button type=\"button\" ngbDatagridButton=\"success\" (click)=\"apply()\">\n {{ applyLabel }}\n </button>\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n\n .ngb-advanced-search {\n display: grid;\n gap: 1rem;\n color: var(--dg-text, #1f2937);\n }\n\n .ngb-advanced-search__logic,\n .ngb-advanced-search__actions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 0.625rem;\n }\n\n .ngb-advanced-search__logic {\n font-weight: 700;\n }\n\n .ngb-advanced-search__rules {\n display: grid;\n gap: 0.75rem;\n }\n\n .ngb-advanced-search__rule {\n display: grid;\n grid-template-columns: auto minmax(9rem, 1fr) minmax(10rem, 1fr) minmax(10rem, 1fr) auto;\n align-items: center;\n gap: 0.625rem;\n }\n\n .ngb-advanced-search__join {\n min-width: 3.5rem;\n font-size: 0.8125rem;\n font-weight: 800;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n color: var(--dg-text-muted, #64748b);\n }\n\n .ngb-advanced-search .grid-filter-control {\n min-height: var(--dg-control-height, 2.5rem);\n border: 1px solid var(--dg-border, #d5dbe5);\n border-radius: var(--dg-radius-md, 0.5rem);\n background: var(--dg-surface, #fff);\n color: var(--dg-text, #1f2937);\n padding: 0 0.75rem;\n }\n\n .ngb-advanced-search .datagrid-toolbar__button,\n .ngb-advanced-search .grid-row-action {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.45rem;\n min-height: var(--dg-control-height, 2.5rem);\n padding: 0 0.9rem;\n border: 1px solid var(--dg-border, #d5dbe5);\n border-radius: var(--dg-radius-md, 0.5rem);\n background: var(--dg-surface, #fff);\n color: var(--dg-text, #1f2937);\n font: inherit;\n font-weight: 700;\n }\n\n .ngb-advanced-search .datagrid-toolbar__button--primary {\n border-color: var(--dg-accent, #2563eb);\n background: var(--dg-accent, #2563eb);\n color: #fff;\n }\n\n .ngb-advanced-search .grid-row-action--success {\n border-color: #16a34a;\n background: #16a34a;\n color: #fff;\n }\n\n .ngb-advanced-search .grid-row-action--danger {\n border-color: #dc2626;\n background: #dc2626;\n color: #fff;\n }\n\n .ngb-advanced-search button:disabled {\n cursor: not-allowed;\n opacity: 0.55;\n }\n\n @media (max-width: 768px) {\n .ngb-advanced-search__rule {\n grid-template-columns: 1fr;\n }\n\n .ngb-advanced-search__join {\n min-width: 0;\n }\n }\n `,\n ],\n})\nexport class NgbAdvancedSearchComponent {\n private _fields: NgbAdvancedSearchField[] = [];\n private _operators: NgbAdvancedSearchOperator[] | null = null;\n private fieldConfigCache = new Map<string, NgbAdvancedSearchField>();\n private filterTypeCache = new Map<string, NgbColumnFilterType>();\n private inputTypeCache = new Map<string, string>();\n private operatorOptionsCache = new Map<string, NgbAdvancedSearchOperator[]>();\n\n @Input() set fields(value: NgbAdvancedSearchField[] | null | undefined) {\n this._fields = value ?? [];\n this.rebuildFieldCaches();\n }\n get fields(): NgbAdvancedSearchField[] {\n return this._fields;\n }\n\n @Input() set operators(value: NgbAdvancedSearchOperator[] | null | undefined) {\n this._operators = value ?? null;\n this.operatorOptionsCache.clear();\n }\n get operators(): NgbAdvancedSearchOperator[] | null {\n return this._operators;\n }\n @Input() rules: NgbAdvancedSearchRule[] = [];\n @Input() logic: 'and' | 'or' = 'and';\n @Input() minRules = 1;\n @Input() matchLabel = 'Match';\n @Input() rulesLabel = 'of the following rules';\n @Input() whenLabel = 'When';\n @Input() addRuleLabel = '+ Add Rule';\n @Input() applyLabel = 'Search';\n @Input() removeRuleLabel = 'Remove';\n @Input() removeRuleAriaLabel = 'Remove rule';\n @Input() fieldAriaLabel = 'Search field';\n @Input() operatorAriaLabel = 'Search operator';\n @Input() valueAriaLabel = 'Search value';\n @Input() valuePlaceholder = 'Value...';\n\n @Output() rulesChange = new EventEmitter<NgbAdvancedSearchRule[]>();\n @Output() logicChange = new EventEmitter<'and' | 'or'>();\n @Output() filterChange = new EventEmitter<NgbCompositeFilterDescriptor>();\n\n setLogic(logic: 'and' | 'or'): void {\n this.logic = logic;\n this.logicChange.emit(logic);\n }\n\n addRule(): void {\n const field = this.fields[0]?.field ?? '';\n this.rules = [\n ...this.rules,\n {\n field,\n operator: this.defaultOperatorForField(field),\n value: '',\n },\n ];\n this.emitRules();\n }\n\n removeRule(index: number): void {\n if (this.rules.length <= this.minRules) return;\n this.rules = this.rules.filter((_, i) => i !== index);\n this.emitRules();\n }\n\n apply(): void {\n this.filterChange.emit(this.toFilterDescriptor());\n }\n\n emitRules(): void {\n this.rulesChange.emit([...this.rules]);\n }\n\n setRuleField(rule: NgbAdvancedSearchRule, field: string): void {\n rule.field = field;\n const operators = this.operatorOptionsFor(rule).map((operator) => operator.value);\n if (!operators.includes(rule.operator)) {\n rule.operator = this.defaultOperatorForField(field);\n rule.value = '';\n }\n this.emitRules();\n }\n\n setRuleOperator(rule: NgbAdvancedSearchRule, operator: NgbFilterOperator): void {\n rule.operator = operator;\n if (!this.operatorRequiresValue(operator)) {\n rule.value = '';\n }\n this.emitRules();\n }\n\n inputType(rule: NgbAdvancedSearchRule): string {\n const cached = this.inputTypeCache.get(rule.field);\n if (cached) return cached;\n const field = this.fieldConfig(rule.field);\n if (field?.type === 'number') return 'number';\n if (field?.type === 'date') return 'date';\n return 'text';\n }\n\n operatorRequiresValue(operator: NgbFilterOperator): boolean {\n return ngbOperatorRequiresFilterValue(operator);\n }\n\n operatorOptionsFor(rule: NgbAdvancedSearchRule): NgbAdvancedSearchOperator[] {\n if (this.operators?.length) return this.operators;\n const type = this.filterTypeForField(rule.field);\n const cacheKey = `${rule.field}:${type}`;\n const cached = this.operatorOptionsCache.get(cacheKey);\n if (cached) return cached;\n const options = this.allowedOperatorsForField(rule.field).map((operator) => ({\n value: operator,\n label: ngbFilterOperatorLabel(operator, type),\n }));\n this.operatorOptionsCache.set(cacheKey, options);\n return options;\n }\n\n toFilterDescriptor(): NgbCompositeFilterDescriptor {\n const filters: NgbCompositeFilterDescriptor['filters'] = [];\n for (const rule of this.rules) {\n const requiresValue = ngbOperatorRequiresFilterValue(rule.operator);\n if (requiresValue && (rule.value === '' || rule.value == null)) continue;\n\n const inputType = this.inputTypeCache.get(rule.field) ?? this.inputType(rule);\n filters.push({\n field: rule.field,\n operator: rule.operator,\n value: requiresValue ? (inputType === 'number' ? Number(rule.value) : rule.value) : undefined,\n ignoreCase: inputType !== 'number',\n });\n }\n\n return {\n logic: this.logic,\n filters,\n };\n }\n\n private fieldConfig(field: string): NgbAdvancedSearchField | undefined {\n return this.fieldConfigCache.get(field);\n }\n\n private filterTypeForField(field: string): NgbColumnFilterType {\n const cached = this.filterTypeCache.get(field);\n if (cached) return cached;\n const config = this.fieldConfig(field);\n return config?.filterType ?? ngbColumnTypeToFilterType(config?.type);\n }\n\n private allowedOperatorsForField(field: string): NgbFilterOperator[] {\n const config = this.fieldConfig(field);\n if (config?.allowedFilterOperators?.length) return [...config.allowedFilterOperators];\n return ngbAllowedFilterOperators(this.filterTypeForField(field));\n }\n\n private defaultOperatorForField(field: string): NgbFilterOperator {\n const config = this.fieldConfig(field);\n const allowed = this.allowedOperatorsForField(field);\n if (config?.defaultFilterOperator === '') {\n return allowed[0] ?? ngbDefaultFilterOperator(this.filterTypeForField(field));\n }\n if (config?.defaultFilterOperator) return config.defaultFilterOperator;\n return ngbDefaultFilterOperator(this.filterTypeForField(field));\n }\n\n private rebuildFieldCaches(): void {\n this.fieldConfigCache = new Map(this._fields.map((field) => [field.field, field]));\n this.filterTypeCache.clear();\n this.inputTypeCache.clear();\n this.operatorOptionsCache.clear();\n\n for (const field of this._fields) {\n const filterType = field.filterType ?? ngbColumnTypeToFilterType(field.type);\n this.filterTypeCache.set(field.field, filterType);\n this.inputTypeCache.set(\n field.field,\n field.type === 'number' ? 'number' : field.type === 'date' ? 'date' : 'text',\n );\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgbDatagridButtonDirective } from '../foundation/datagrid-button.directive';\nimport { NgbDatagridControlDirective } from '../foundation/datagrid-control.directive';\n\nexport interface NgbSearchHighlightField {\n field: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface NgbSearchHighlightSelectionChange {\n term: string;\n selectedFields: string[];\n}\n\n@Component({\n selector: 'ngb-search-highlight',\n standalone: true,\n imports: [CommonModule, FormsModule, NgbDatagridButtonDirective, NgbDatagridControlDirective],\n template: `\n <div class=\"ngb-search-highlight\">\n <label class=\"ngb-search-highlight__search\">\n <span class=\"ngb-search-highlight__icon\" aria-hidden=\"true\">{{ searchIcon }}</span>\n <input\n type=\"search\"\n ngbDatagridControl\n [ngModel]=\"term\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"setTerm($event)\"\n [placeholder]=\"placeholder\"\n [attr.aria-label]=\"searchAriaLabel\"\n />\n </label>\n\n @if (fields.length) {\n <div class=\"ngb-search-highlight__fields\">\n <span class=\"ngb-search-highlight__label\">{{ fieldsLabel }}</span>\n <div class=\"ngb-search-highlight__chips\" role=\"group\" [attr.aria-label]=\"fieldsAriaLabel\">\n @for (field of fields; track field.field) {\n <button\n type=\"button\"\n [ngbDatagridButton]=\"isFieldSelected(field.field) ? 'primary' : 'secondary'\"\n [disabled]=\"field.disabled || (!allowEmptySelection && isFieldSelected(field.field) && selectedFields.length <= 1)\"\n [attr.aria-pressed]=\"isFieldSelected(field.field)\"\n (click)=\"toggleField(field.field)\"\n >\n {{ field.label }}\n </button>\n }\n </div>\n </div>\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n\n .ngb-search-highlight {\n display: grid;\n gap: 1rem;\n color: var(--dg-text, #1f2937);\n }\n\n .ngb-search-highlight__search {\n display: flex;\n align-items: center;\n gap: 0.625rem;\n min-width: min(100%, 18rem);\n }\n\n .ngb-search-highlight__search .grid-filter-control {\n width: 100%;\n min-height: var(--dg-control-height, 2.5rem);\n border: 1px solid var(--dg-border, #d5dbe5);\n border-radius: var(--dg-radius-md, 0.5rem);\n background: var(--dg-surface, #fff);\n color: var(--dg-text, #1f2937);\n padding: 0 0.75rem;\n }\n\n .ngb-search-highlight__icon {\n color: var(--dg-text-muted, #64748b);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 2rem;\n font-size: 1.9rem;\n line-height: 1;\n font-weight: 700;\n }\n\n .ngb-search-highlight__fields {\n display: grid;\n gap: 0.5rem;\n }\n\n .ngb-search-highlight__label {\n font-size: 0.875rem;\n font-weight: 700;\n color: var(--dg-text, #1f2937);\n }\n\n .ngb-search-highlight__chips {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n }\n\n .ngb-search-highlight .datagrid-toolbar__button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: var(--dg-control-height, 2.5rem);\n padding: 0 0.9rem;\n border: 1px solid var(--dg-border, #d5dbe5);\n border-radius: var(--dg-radius-md, 0.5rem);\n background: var(--dg-surface, #fff);\n color: var(--dg-text, #1f2937);\n font: inherit;\n font-weight: 700;\n }\n\n .ngb-search-highlight .datagrid-toolbar__button--primary {\n border-color: var(--dg-accent, #2563eb);\n background: var(--dg-accent, #2563eb);\n color: #fff;\n }\n\n .ngb-search-highlight button:disabled {\n cursor: not-allowed;\n opacity: 0.55;\n }\n `,\n ],\n})\nexport class NgbSearchHighlightComponent {\n @Input() fields: NgbSearchHighlightField[] = [];\n @Input() selectedFields: string[] = [];\n @Input() term = '';\n @Input() placeholder = 'Type to highlight matches...';\n @Input() searchAriaLabel = 'Type to highlight matches';\n @Input() fieldsLabel = 'Search in:';\n @Input() fieldsAriaLabel = 'Highlight fields';\n @Input() searchIcon = '🔍';\n @Input() allowEmptySelection = false;\n\n @Output() termChange = new EventEmitter<string>();\n @Output() selectedFieldsChange = new EventEmitter<string[]>();\n @Output() selectionChange = new EventEmitter<NgbSearchHighlightSelectionChange>();\n\n setTerm(term: string): void {\n this.term = term;\n this.termChange.emit(term);\n this.emitSelectionChange();\n }\n\n isFieldSelected(field: string): boolean {\n return this.selectedFields.includes(field);\n }\n\n toggleField(field: string): void {\n const selected = this.isFieldSelected(field);\n if (selected && !this.allowEmptySelection && this.selectedFields.length <= 1) return;\n this.selectedFields = selected\n ? this.selectedFields.filter((item) => item !== field)\n : [...this.selectedFields, field];\n this.selectedFieldsChange.emit([...this.selectedFields]);\n this.emitSelectionChange();\n }\n\n private emitSelectionChange(): void {\n this.selectionChange.emit({\n term: this.term,\n selectedFields: [...this.selectedFields],\n });\n }\n}\n","import type { NgbCompositeFilterDescriptor } from './models/filtering';\n\nexport type NgbDataGridSortDirection = 'asc' | 'desc';\n\nexport interface NgbDataGridSortDescriptor {\n field: string;\n direction: NgbDataGridSortDirection;\n}\n\nexport interface NgbDataGridState {\n /** 1-based page number used by the DataGrid pager. */\n page?: number;\n /** 0-based page index for API integrations that use page indexes. */\n pageIndex?: number;\n /** Number of records skipped before the current page. */\n skip?: number;\n pageSize?: number;\n sort?: NgbDataGridSortDescriptor[];\n filter?: NgbCompositeFilterDescriptor;\n globalFilter?: string;\n}\n\nexport type NgbDataGridAggregateFunction = 'count' | 'sum' | 'average' | 'min' | 'max';\n\nexport interface NgbDataGridAggregateDescriptor {\n field: string;\n aggregate: NgbDataGridAggregateFunction;\n}\n\nexport type NgbDataGridAggregateResults = Record<\n string,\n Partial<Record<NgbDataGridAggregateFunction, number | string | Date | null>>\n>;\n\nexport interface NgbDataGridProcessOptions<T = unknown> {\n state?: NgbDataGridState | null;\n aggregates?: NgbDataGridAggregateDescriptor[];\n globalFilterFields?: string[];\n columns?: Array<{ field: Extract<keyof T, string> | string; type?: string; filterType?: string }>;\n /**\n * When false, returns the filtered/sorted full result without page slicing.\n * Aggregates are always calculated before page slicing.\n */\n page?: boolean;\n}\n\nexport interface NgbDataGridDataResult<T = unknown> {\n data: T[];\n total: number;\n aggregates?: NgbDataGridAggregateResults;\n}\n\n// datagrid.types.ts\nexport type NgbDataGridExportType = 'pdf' | 'excel' | 'both';\nexport type NgbDataGridExportPages = 'all' | 'current' | 'selection';\nexport type NgbDataGridTheme =\n | 'bootstrap'\n | 'bootstrap-main'\n | 'bootstrap-main-dark'\n | 'bootstrap-nordic'\n | 'bootstrap-urban'\n | 'bootstrap-vintage'\n | 'material'\n | 'material-main'\n | 'material-indigo'\n | 'material-deep-purple'\n | 'tailwind'\n | 'tailwind-main'\n | 'tailwind-slate'\n | 'tailwind-emerald';\n\nexport interface NgbDataGridThemeOption {\n value: NgbDataGridTheme;\n label: string;\n group: 'Bootstrap' | 'Material' | 'Tailwind';\n swatches: [string, string, string];\n dark?: boolean;\n}\n\nexport const NGB_DATAGRID_THEME_OPTIONS: NgbDataGridThemeOption[] = [\n { value: 'bootstrap', label: 'Classic', group: 'Bootstrap', swatches: ['#ffffff', '#0d6efd', '#6c757d'] },\n { value: 'bootstrap-main', label: 'Ocean', group: 'Bootstrap', swatches: ['#f8fbff', '#1769e0', '#172554'] },\n { value: 'bootstrap-main-dark', label: 'Midnight', group: 'Bootstrap', swatches: ['#111827', '#38bdf8', '#e5e7eb'], dark: true },\n { value: 'bootstrap-nordic', label: 'Aqua Rose', group: 'Bootstrap', swatches: ['#f8ffff', '#0891b2', '#fb7185'] },\n { value: 'bootstrap-urban', label: 'Clay', group: 'Bootstrap', swatches: ['#fffaf7', '#c05621', '#256d85'] },\n { value: 'bootstrap-vintage', label: 'Sage', group: 'Bootstrap', swatches: ['#fffdf7', '#6b705c', '#b08968'] },\n { value: 'material-main', label: 'Orchid', group: 'Material', swatches: ['#fffbfe', '#9c27b0', '#2d1b33'] },\n { value: 'material-indigo', label: 'Indigo', group: 'Material', swatches: ['#f7f8ff', '#3f51b5', '#263238'] },\n { value: 'material-deep-purple', label: 'Plum', group: 'Material', swatches: ['#fdf8ff', '#7e57c2', '#4a148c'] },\n { value: 'tailwind-main', label: 'Sky', group: 'Tailwind', swatches: ['#ffffff', '#0284c7', '#0f172a'] },\n { value: 'tailwind-slate', label: 'Graphite', group: 'Tailwind', swatches: ['#f8fafc', '#334155', '#020617'] },\n { value: 'tailwind-emerald', label: 'Mint', group: 'Tailwind', swatches: ['#f0fdfa', '#0f766e', '#064e3b'] },\n];\n\nexport interface NgbDataGridExportOptions {\n enabled: boolean;\n type: NgbDataGridExportType;\n pages: NgbDataGridExportPages;\n fileName?: string;\n pdf?: { pageSize?: 'A4'|'Letter'|string; landscape?: boolean; margins?: [number,number,number,number] };\n excel?: { sheetName?: string };\n}\n\nexport interface NgbDataGridResponsiveOptions {\n enabled: boolean;\n breakpoints?: { mobile?: number; tablet?: number; desktop?: number };\n}\n\n/** Built-in row editing interaction mode. */\nexport type NgbEditMode = 'inline' | 'incell' | 'external' | 'toolbar';\n\n/** Labels and visibility for the built-in multi-checkbox filter menu footer. */\n/** Segment returned by {@link Datagrid.getSearchHighlightSegments} for match highlighting. */\nexport interface NgbSearchHighlightSegment {\n text: string;\n match: boolean;\n}\n\n/** Placement when calling {@link Datagrid.reorderColumn}. */\nexport interface NgbColumnReorderOptions {\n /** When true (default), inserts before the column at the destination index. When false, inserts after it. */\n before?: boolean;\n}\n\nexport interface NgbColumnReorderEvent<T = any> {\n /** Visible columns in their new order. */\n columns: Array<{ field: string; header: string } & Record<string, unknown>>;\n /** Column that was moved. */\n column: T;\n fromIndex: number;\n toIndex: number;\n /** Ordered field names after the move. */\n fields: string[];\n}\n\nexport interface NgbMultiCheckboxFilterOptions {\n /** Primary action label. Default: `OK` */\n applyLabel?: string;\n /** Secondary action label. Default: `Cancel` */\n cancelLabel?: string;\n /** Whether the secondary action is shown. Default: `true` */\n showCancel?: boolean;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, EventEmitter, HostListener, Input, Output, inject } from '@angular/core';\nimport { NgbDataGridTheme, NgbDataGridThemeOption, NGB_DATAGRID_THEME_OPTIONS } from '../datagrid.types';\n\n@Component({\n selector: 'ngb-datagrid-theme-picker',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"ngb-datagrid-theme-picker\">\n @if (label) {\n <span class=\"ngb-datagrid-theme-picker__label\">{{ label }}</span>\n }\n <div class=\"ngb-datagrid-theme-picker__control\">\n <button\n type=\"button\"\n class=\"ngb-datagrid-theme-picker__trigger\"\n [class.ngb-datagrid-theme-picker__trigger--open]=\"open\"\n [attr.aria-expanded]=\"open\"\n aria-haspopup=\"listbox\"\n (click)=\"toggle()\"\n >\n <span class=\"ngb-datagrid-theme-picker__swatches\" aria-hidden=\"true\">\n @for (color of selectedTheme.swatches; track color) {\n <span\n class=\"ngb-datagrid-theme-picker__swatch\"\n [style.background]=\"color\"\n ></span>\n }\n </span>\n <span class=\"ngb-datagrid-theme-picker__selected\">{{ selectedTheme.label }}</span>\n <span class=\"ngb-datagrid-theme-picker__chevron\" aria-hidden=\"true\"></span>\n </button>\n\n @if (open) {\n <div class=\"ngb-datagrid-theme-picker__menu\" role=\"listbox\">\n @for (group of groupedThemes; track group.label) {\n <div class=\"ngb-datagrid-theme-picker__group\">{{ group.label }}</div>\n @for (theme of group.items; track theme.value) {\n <button\n type=\"button\"\n class=\"ngb-datagrid-theme-picker__option\"\n role=\"option\"\n [attr.aria-selected]=\"theme.value === value\"\n [class.ngb-datagrid-theme-picker__option--active]=\"theme.value === value\"\n (click)=\"select(theme)\"\n >\n <span class=\"ngb-datagrid-theme-picker__swatches\" aria-hidden=\"true\">\n @for (color of theme.swatches; track color) {\n <span\n class=\"ngb-datagrid-theme-picker__swatch\"\n [style.background]=\"color\"\n ></span>\n }\n </span>\n <span class=\"ngb-datagrid-theme-picker__option-label\">{{ theme.label }}</span>\n @if (theme.dark) {\n <span class=\"ngb-datagrid-theme-picker__moon\" aria-hidden=\"true\"></span>\n }\n </button>\n }\n }\n </div>\n }\n </div>\n </div>\n `,\n styles: [`\n :host {\n display: inline-block;\n color: #344054;\n font: inherit;\n }\n\n .ngb-datagrid-theme-picker {\n display: inline-flex;\n align-items: center;\n gap: 0.6rem;\n position: relative;\n }\n\n .ngb-datagrid-theme-picker__label {\n color: #667085;\n font-size: 0.86rem;\n line-height: 1.4;\n }\n\n .ngb-datagrid-theme-picker__control {\n position: relative;\n min-width: 12.5rem;\n }\n\n .ngb-datagrid-theme-picker__trigger,\n .ngb-datagrid-theme-picker__option {\n display: flex;\n align-items: center;\n width: 100%;\n border: 1px solid #d0d5dd;\n background: #fff;\n color: #101828;\n font: inherit;\n text-align: left;\n cursor: pointer;\n }\n\n .ngb-datagrid-theme-picker__trigger {\n min-height: 2.25rem;\n gap: 0.55rem;\n padding: 0.35rem 0.65rem;\n border-radius: 0.5rem;\n box-shadow: 0 1px 2px rgba(16, 24, 40, 0.05);\n }\n\n .ngb-datagrid-theme-picker__trigger:focus-visible,\n .ngb-datagrid-theme-picker__trigger--open {\n outline: none;\n border-color: #315efb;\n box-shadow: 0 0 0 0.2rem rgba(49, 94, 251, 0.14);\n }\n\n .ngb-datagrid-theme-picker__selected {\n flex: 1 1 auto;\n min-width: 0;\n font-weight: 600;\n }\n\n .ngb-datagrid-theme-picker__chevron {\n width: 0.75rem;\n height: 0.75rem;\n border-right: 2px solid #315efb;\n border-bottom: 2px solid #315efb;\n transform: rotate(45deg);\n transition: transform 150ms ease;\n margin-top: -0.25rem;\n }\n\n .ngb-datagrid-theme-picker__trigger--open .ngb-datagrid-theme-picker__chevron {\n transform: rotate(225deg);\n margin-top: 0.25rem;\n }\n\n .ngb-datagrid-theme-picker__menu {\n position: absolute;\n z-index: 1100;\n top: calc(100% + 0.25rem);\n right: 0;\n width: min(19rem, 90vw);\n max-height: 24rem;\n overflow: auto;\n padding: 0.65rem;\n border: 1px solid #d7deea;\n border-radius: 0.5rem;\n background: #fff;\n box-shadow: 0 1rem 2.25rem rgba(16, 24, 40, 0.18);\n }\n\n .ngb-datagrid-theme-picker__group {\n padding: 0.55rem 0.65rem 0.45rem;\n color: #344054;\n font-size: 0.72rem;\n font-weight: 700;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n border-top: 1px solid #e4e7ec;\n }\n\n .ngb-datagrid-theme-picker__group:first-child {\n border-top: 0;\n padding-top: 0.35rem;\n }\n\n .ngb-datagrid-theme-picker__option {\n gap: 0.65rem;\n min-height: 2.55rem;\n padding: 0.45rem 0.65rem;\n border: 0;\n border-radius: 0.45rem;\n }\n\n .ngb-datagrid-theme-picker__option:hover,\n .ngb-datagrid-theme-picker__option--active {\n background: #f2f4f7;\n }\n\n .ngb-datagrid-theme-picker__option-label {\n flex: 1 1 auto;\n font-weight: 600;\n color: #344054;\n }\n\n .ngb-datagrid-theme-picker__swatches {\n display: inline-flex;\n align-items: center;\n min-width: 3.2rem;\n }\n\n .ngb-datagrid-theme-picker__swatch {\n width: 1.25rem;\n height: 1.25rem;\n border: 2px solid #fff;\n border-radius: 50%;\n box-shadow: 0 0 0 1px rgba(16, 24, 40, 0.08);\n }\n\n .ngb-datagrid-theme-picker__swatch + .ngb-datagrid-theme-picker__swatch {\n margin-left: -0.42rem;\n }\n\n .ngb-datagrid-theme-picker__moon {\n width: 0.95rem;\n height: 0.95rem;\n border-radius: 50%;\n box-shadow: -0.28rem 0 0 #344054;\n transform: translateX(0.28rem);\n }\n\n @media (max-width: 640px) {\n .ngb-datagrid-theme-picker {\n align-items: stretch;\n flex-direction: column;\n gap: 0.45rem;\n width: 100%;\n }\n\n .ngb-datagrid-theme-picker__control {\n min-width: 0;\n width: 100%;\n }\n\n .ngb-datagrid-theme-picker__menu {\n left: 0;\n right: auto;\n width: 100%;\n }\n }\n `],\n})\nexport class NgbDatagridThemePickerComponent {\n private readonly host = inject(ElementRef<HTMLElement>);\n private _value: NgbDataGridTheme = 'bootstrap';\n private _themes: NgbDataGridThemeOption[] = NGB_DATAGRID_THEME_OPTIONS;\n\n @Input() label = 'Change Theme';\n @Input()\n get value(): NgbDataGridTheme {\n return this._value;\n }\n set value(value: NgbDataGridTheme) {\n this._value = value;\n this.updateSelectedTheme();\n }\n\n @Input()\n get themes(): NgbDataGridThemeOption[] {\n return this._themes;\n }\n set themes(themes: NgbDataGridThemeOption[] | null | undefined) {\n this._themes = themes?.length ? themes : NGB_DATAGRID_THEME_OPTIONS;\n this.groupedThemes = this.buildGroupedThemes(this._themes);\n this.updateSelectedTheme();\n }\n\n @Output() valueChange = new EventEmitter<NgbDataGridTheme>();\n\n open = false;\n selectedTheme: NgbDataGridThemeOption = NGB_DATAGRID_THEME_OPTIONS[0];\n groupedThemes: Array<{ label: NgbDataGridThemeOption['group']; items: NgbDataGridThemeOption[] }> =\n this.buildGroupedThemes(NGB_DATAGRID_THEME_OPTIONS);\n\n toggle(): void {\n this.open = !this.open;\n }\n\n select(theme: NgbDataGridThemeOption): void {\n this._value = theme.value;\n this.selectedTheme = theme;\n this.valueChange.emit(theme.value);\n this.open = false;\n }\n\n @HostListener('document:click', ['$event'])\n closeOnOutsideClick(event: MouseEvent): void {\n if (!this.host.nativeElement.contains(event.target as Node)) {\n this.open = false;\n }\n }\n\n @HostListener('keydown.escape')\n closeOnEscape(): void {\n this.open = false;\n }\n\n private updateSelectedTheme(): void {\n this.selectedTheme =\n this._themes.find((theme) => theme.value === this._value) ?? this._themes[0] ?? NGB_DATAGRID_THEME_OPTIONS[0];\n }\n\n private buildGroupedThemes(\n themes: NgbDataGridThemeOption[],\n ): Array<{ label: NgbDataGridThemeOption['group']; items: NgbDataGridThemeOption[] }> {\n const groups: Array<NgbDataGridThemeOption['group']> = ['Bootstrap', 'Material', 'Tailwind'];\n return groups\n .map((label) => ({ label, items: themes.filter((theme) => theme.group === label) }))\n .filter((group) => group.items.length > 0);\n }\n}\n","import { Directive, HostBinding, HostListener, Optional, SkipSelf } from '@angular/core';\nimport { NgbDndItemDirective } from './dnd-item.directive';\n\n@Directive({\n selector: '[ngbDndHandle]',\n standalone: true\n})\nexport class NgbDndHandleDirective {\n constructor(@Optional() @SkipSelf() private item?: NgbDndItemDirective) {}\n\n @HostBinding('attr.draggable') draggable = 'true';\n @HostBinding('class.ngb-dnd-handle') hostClass = true;\n\n @HostListener('dragstart', ['$event'])\n onDragStart(ev: DragEvent): void {\n this.item?.onDragStart(ev);\n }\n\n @HostListener('dragend')\n onDragEnd(): void {\n this.item?.onDragEnd();\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'ngb-json-preview',\n standalone: true,\n template: `\n <pre class=\"ngb-json-preview\" [style.max-height.px]=\"maxHeight\"><code>{{ formattedJson }}</code></pre>\n `,\n styles: [`\n :host {\n display: block;\n }\n\n .ngb-json-preview {\n margin: 0;\n overflow: auto;\n padding: 0.75rem 1rem;\n border: 0;\n background: var(--bs-body-bg, #fff);\n color: var(--bs-body-color, #212529);\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", monospace;\n font-size: 0.875rem;\n line-height: 1.4;\n white-space: pre;\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgbJsonPreviewComponent {\n @Input() value: unknown = null;\n @Input() indent = 2;\n @Input() fallback = 'null';\n @Input() maxHeight = 320;\n\n get formattedJson(): string {\n if (typeof this.value === 'string') {\n return this.value;\n }\n\n try {\n return JSON.stringify(this.value, null, this.indent) ?? this.fallback;\n } catch {\n return this.fallback;\n }\n }\n}\n","import { Directive, TemplateRef, Input } from '@angular/core';\n\n@Directive({\n selector: '[ngbStepLabel]',\n standalone: true,\n})\nexport class NgbStepLabelDirective {\n @Input('ngbStepLabel') for?: string | number;\n\n constructor(public template: TemplateRef<unknown>) {}\n}\n\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ContentChildren,\n EventEmitter,\n Input,\n Output,\n QueryList,\n TemplateRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n NgbStepperContentPosition,\n NgbStepperLabelPosition,\n NgbStepperOrientation,\n NgbStepperState,\n NgbStepperStep,\n NgbStepperTheme,\n} from './stepper.types';\nimport { NgbStepLabelDirective } from './step-label.directive';\n\nexport interface NgbStepperSelectionChangeEvent {\n previousIndex: number;\n currentIndex: number;\n step: NgbStepperStep | undefined;\n}\n\n@Component({\n selector: 'ngb-stepper',\n standalone: true,\n imports: [CommonModule, NgbStepLabelDirective],\n templateUrl: './stepper.component.html',\n styleUrls: ['./stepper.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgbStepperComponent implements AfterContentInit {\n /** Steps definition */\n @Input() steps: NgbStepperStep[] = [];\n\n /** Orientation of the stepper */\n @Input() orientation: NgbStepperOrientation = 'horizontal';\n\n /** Position of labels around the indicator */\n @Input() labelPosition: NgbStepperLabelPosition = 'right';\n\n /** Position of content relative to header (horizontal only) */\n @Input() contentPosition: NgbStepperContentPosition = 'bottom';\n\n /** Allow navigating back to previous steps by clicking header */\n @Input() allowRevisit = true;\n\n /** Enable lazy loading of step content (default true) */\n @Input() lazy = true;\n\n /** Theme keyword (only CSS classes, no external deps) */\n @Input() theme: NgbStepperTheme = 'bootstrap';\n\n /** Whether to apply responsive helper class */\n @Input() responsive = true;\n\n /** Disable transition / animation helpers */\n @Input() disableAnimation = false;\n\n /** Animation duration (ms) for step transitions when enabled */\n @Input() animationDuration = 150;\n\n /** Label strings (for i18n) */\n @Input() nextLabel = 'Next';\n @Input() previousLabel = 'Previous';\n @Input() resetLabel = 'Reset';\n @Input() cancelLabel = 'Cancel';\n @Input() optionalLabel = 'Optional';\n\n /** Custom mapping from state -> icon text */\n @Input() stateIcons: Record<string, string> = {\n number: '#',\n done: '✓',\n active: '•',\n error: '!',\n disabled: '×',\n };\n\n /** Current selected index */\n @Input() selectedIndex = 0;\n\n /** Emits when selectedIndex changes (programmatically or by user) */\n @Output() selectedIndexChange = new EventEmitter<number>();\n\n /** Emits when selection changes with rich event */\n @Output() selectionChange = new EventEmitter<NgbStepperSelectionChangeEvent>();\n\n /** Navigation events */\n @Output() nextClicked = new EventEmitter<number>();\n @Output() prevClicked = new EventEmitter<number>();\n @Output() resetClicked = new EventEmitter<void>();\n @Output() cancelClicked = new EventEmitter<void>();\n\n /** Custom label template (applied for all steps) */\n @ContentChild(NgbStepLabelDirective) stepLabelTplDir?: NgbStepLabelDirective;\n\n /** Custom icon template for step indicator */\n @ContentChild('ngbStepperIcon', { read: TemplateRef }) customIconTpl?: TemplateRef<any>;\n\n /** Content template; user will typically use <ng-template #stepContent ...> */\n @ContentChild('stepContent', { read: TemplateRef }) stepContentTpl?: TemplateRef<any>;\n\n /** Track which steps have been visited */\n private visited = new Set<number>();\n\n /** Used when allowRevisit=false to block earlier steps */\n visitedFrom = 0;\n\n ngAfterContentInit(): void {\n if (this.selectedIndex < 0) this.selectedIndex = 0;\n if (this.selectedIndex > this.steps.length - 1 && this.steps.length > 0) {\n this.selectedIndex = this.steps.length - 1;\n }\n this.markVisited(this.selectedIndex);\n }\n\n get stepLabelTpl(): TemplateRef<any> | null {\n return this.stepLabelTplDir?.template ?? null;\n }\n\n get labelPositionClass(): string {\n switch (this.labelPosition) {\n case 'top':\n return 'ngb-stepper-label-top';\n case 'bottom':\n return 'ngb-stepper-label-bottom';\n case 'left':\n return 'ngb-stepper-label-left';\n default:\n return 'ngb-stepper-label-right';\n }\n }\n\n get currentErrorMessage(): string | null {\n const step = this.steps[this.selectedIndex];\n return step?.errorMessage ?? null;\n }\n\n stepId(i: number): string {\n const s = this.steps[i];\n const base = s?.id || `ngb-step-${i}`;\n return `${base}-label`;\n }\n\n contentId(i: number): string {\n const s = this.steps[i];\n const base = s?.id || `ngb-step-${i}`;\n return `${base}-content`;\n }\n\n private markVisited(i: number): void {\n this.visited.add(i);\n this.visitedFrom = Math.max(this.visitedFrom, i);\n }\n\n stepState(i: number): NgbStepperState {\n const s = this.steps[i];\n if (!s) return 'number';\n if (s.state) return s.state;\n if (this.isStepInError(i)) return 'error';\n if (i === this.selectedIndex) return 'active';\n if (i < this.selectedIndex) return 'done';\n if (s.disabled) return 'disabled';\n return 'number';\n }\n\n isStepInError(i: number): boolean {\n const s = this.steps[i];\n return !!s?.errorMessage && this.visited.has(i);\n }\n\n indicatorClass(i: number): string {\n const state = this.stepState(i);\n return state;\n }\n\n defaultIconForState(state: NgbStepperState, index: number): string {\n if (state === 'number') {\n return String(index + 1);\n }\n return this.stateIcons[state] ?? this.stateIcons['number'] ?? String(index + 1);\n }\n\n onHeaderClick(i: number): void {\n if (i === this.selectedIndex) return;\n const step = this.steps[i];\n if (!step || step.disabled) return;\n if (!this.allowRevisit && i < this.visitedFrom) return;\n this.changeIndex(i);\n }\n\n onHeaderKeydown(event: KeyboardEvent | Event, i: number): void {\n event.preventDefault();\n this.onHeaderClick(i);\n }\n\n next(): void {\n const target = Math.min(this.steps.length - 1, this.selectedIndex + 1);\n if (target === this.selectedIndex) return;\n this.nextClicked.emit(target);\n this.changeIndex(target);\n }\n\n prev(): void {\n if (!this.allowRevisit) return;\n const target = Math.max(0, this.selectedIndex - 1);\n if (target === this.selectedIndex) return;\n this.prevClicked.emit(target);\n this.changeIndex(target);\n }\n\n onReset(): void {\n this.resetClicked.emit();\n this.selectedIndex = 0;\n this.selectedIndexChange.emit(this.selectedIndex);\n this.selectionChange.emit({\n previousIndex: 0,\n currentIndex: 0,\n step: this.steps[0],\n });\n this.visited.clear();\n this.visitedFrom = 0;\n this.markVisited(0);\n }\n\n onCancel(): void {\n this.cancelClicked.emit();\n }\n\n private changeIndex(nextIndex: number): void {\n const prev = this.selectedIndex;\n this.selectedIndex = nextIndex;\n this.markVisited(nextIndex);\n this.selectedIndexChange.emit(this.selectedIndex);\n this.selectionChange.emit({\n previousIndex: prev,\n currentIndex: nextIndex,\n step: this.steps[nextIndex],\n });\n }\n}\n","<div\n class=\"ngb-stepper\"\n [class.horizontal]=\"orientation === 'horizontal'\"\n [class.vertical]=\"orientation === 'vertical'\"\n [class.ngb-responsive]=\"responsive\"\n [class.bootstrap]=\"theme === 'bootstrap'\"\n [class.material]=\"theme === 'material'\"\n [class.tailwind]=\"theme === 'tailwind'\"\n role=\"tablist\"\n [attr.aria-orientation]=\"orientation\"\n>\n <!-- HEADER / LABELS -->\n <div class=\"ngb-stepper-header\">\n <ol class=\"ngb-stepper-steps\" role=\"presentation\">\n @for (step of steps; track step; let i = $index) {\n <li\n class=\"ngb-stepper-step\"\n [class.active]=\"i === selectedIndex\"\n [class.done]=\"i < selectedIndex && !isStepInError(i)\"\n [class.error]=\"isStepInError(i)\"\n [class.disabled]=\"step.disabled\"\n role=\"tab\"\n [attr.id]=\"stepId(i)\"\n [attr.aria-controls]=\"contentId(i)\"\n [attr.aria-selected]=\"i === selectedIndex\"\n [attr.aria-disabled]=\"step.disabled || (!allowRevisit && i < visitedFrom && i !== selectedIndex)\"\n tabindex=\"{{ i === selectedIndex ? 0 : -1 }}\"\n (click)=\"onHeaderClick(i)\"\n (keydown.enter)=\"onHeaderKeydown($event, i)\"\n (keydown.space)=\"onHeaderKeydown($event, i)\"\n >\n <div\n class=\"ngb-stepper-indicator\"\n [ngClass]=\"indicatorClass(i)\"\n aria-hidden=\"true\"\n >\n @if (customIconTpl) {\n <ng-container\n [ngTemplateOutlet]=\"customIconTpl\"\n [ngTemplateOutletContext]=\"{ index: i, state: stepState(i) }\"\n ></ng-container>\n } @else {\n {{ defaultIconForState(stepState(i), i) }}\n }\n </div>\n\n <div\n class=\"ngb-stepper-label-container\"\n [ngClass]=\"labelPositionClass\"\n >\n @if (stepLabelTpl) {\n <div class=\"ngb-stepper-label\">\n <ng-container\n [ngTemplateOutlet]=\"stepLabelTpl\"\n [ngTemplateOutletContext]=\"{ index: i, step: step }\"\n ></ng-container>\n </div>\n } @else {\n <div class=\"ngb-stepper-label-text\">\n {{ step.label || ('Step ' + (i + 1)) }}\n </div>\n }\n @if (step.optional) {\n <div class=\"ngb-stepper-optional\">\n {{ optionalLabel }}\n </div>\n }\n </div>\n </li>\n }\n </ol>\n </div>\n\n <!-- CONTENT -->\n <div class=\"ngb-stepper-content\" [class.ngb-stepper-content-top]=\"contentPosition === 'top'\">\n @if (lazy) {\n <div\n class=\"fade-step\"\n [style.--ngb-stepper-animation-duration]=\"(disableAnimation ? 0 : animationDuration) + 'ms'\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"stepId(selectedIndex)\"\n [attr.id]=\"contentId(selectedIndex)\"\n >\n <ng-container *ngTemplateOutlet=\"stepContentTpl; context: { index: selectedIndex }\"></ng-container>\n @if (currentErrorMessage) {\n <div class=\"ngb-stepper-error\" role=\"alert\">\n {{ currentErrorMessage }}\n </div>\n }\n </div>\n } @else {\n <div\n class=\"fade-step\"\n [style.--ngb-stepper-animation-duration]=\"(disableAnimation ? 0 : animationDuration) + 'ms'\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"stepId(selectedIndex)\"\n [attr.id]=\"contentId(selectedIndex)\"\n >\n <ng-container *ngTemplateOutlet=\"stepContentTpl; context: { index: selectedIndex }\"></ng-container>\n @if (currentErrorMessage) {\n <div class=\"ngb-stepper-error\" role=\"alert\">\n {{ currentErrorMessage }}\n </div>\n }\n </div>\n }\n </div>\n\n <!-- ACTIONS -->\n <div class=\"ngb-stepper-buttons\">\n <button\n type=\"button\"\n class=\"btn btn-sm btn-outline-secondary\"\n (click)=\"onCancel()\"\n >\n {{ cancelLabel }}\n </button>\n\n <button\n type=\"button\"\n class=\"btn btn-sm btn-outline-secondary\"\n (click)=\"onReset()\"\n >\n {{ resetLabel }}\n </button>\n\n <button\n type=\"button\"\n class=\"btn btn-sm btn-outline-secondary\"\n (click)=\"prev()\"\n [disabled]=\"selectedIndex <= 0 || !allowRevisit\"\n >\n {{ previousLabel }}\n </button>\n\n <button\n type=\"button\"\n class=\"btn btn-sm btn-primary\"\n (click)=\"next()\"\n [disabled]=\"selectedIndex >= steps.length - 1 || steps[selectedIndex]?.disabled\"\n >\n {{ nextLabel }}\n </button>\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output, TemplateRef, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'ngb-splitter-pane',\n standalone: true,\ntemplate: `<ng-template #content>\n <div [style.overflow]=\"scrollable ? 'auto' : 'hidden'\" style=\"height: 100%; width: 100%;\">\n <ng-content></ng-content>\n </div>\n </ng-template>`,\n styles: [`:host { display: block; position: relative; }`]\n})\nexport class NgbSplitterPaneComponent {\n @Input() size: string = ''; // e.g., '30%' or '200px'\n @Input() min: string = '0px';\n @Input() max: string = '100%';\n @Input() scrollable: boolean = true;\n @Input() collapsible: boolean = false;\n @Input() collapsed: boolean = false;\n @Output() collapsedChange = new EventEmitter<boolean>();\n\n @ViewChild('content', { static: true }) template!: TemplateRef<any>;\n\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n QueryList,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgbSplitterPaneComponent } from './splitter-pane.component';\nimport { NgbSplitterOrientation } from './splitter.types';\n\ntype PaneState = {\n sizePx?: number;\n minPx?: number;\n maxPx?: number;\n id: string;\n};\n\n@Component({\n selector: 'ngb-splitter',\n standalone: true,\n imports: [CommonModule, NgbSplitterPaneComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\n `\n :host { display: block; width: 100%; }\n .splitter-container { display: flex; height: 100%; width: 100%; }\n .splitter-container.vertical { flex-direction: column; }\n .splitbar { background: #ccc; width: 5px; position: relative;\n align-items: center;\n justify-content: center; \n flex: 0 0 auto; z-index: 10;\n &.resizable {\n cursor: col-resize;\n } \n &:hover {\n filter: brightness(90%); /* Feedback when hovering bar */\n }\n }\n .handle-line {\n /* Thin white line in the middle */\n border-radius: 2px;\n opacity: 0.8;\n left: 45%;\n position: absolute;\n top: 45%;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n /* Horizontal Handle: Vertical Line */\n .splitter-container:not(.vertical) .handle-line {\n width: 2px;\n height: 10px; /* Adjust height as needed */\n }\n .pane-wrapper {\n position: relative;\n /* CRITICAL: Allow the pane to shrink beyond its content size */\n min-width: 0; \n min-height: 0;\n \n /* CRITICAL: Hide content that overflows during small sizes */\n overflow: hidden; \n \n flex-shrink: 1;\n }\n /* Vertical Handle: Horizontal Line */\n .vertical .handle-line {\n height: 2px;\n width: 10px; /* Adjust width as needed */\n }\n .vertical .splitbar.resizable {\n cursor: row-resize;\n }\n .splitter-container.vertical .splitter-container .splitbar.resizable {\n cursor: col-resize;\n }\n .vertical .splitbar { width: 100%; }\n .collapse-btn { cursor: pointer; background: #666; width: 10px; height: 10px; position: absolute; top: 50%; }\n .collapse-arrow {\n font-size: 0.95rem;\n user-select: none;\n cursor: pointer;\n line-height: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1.25rem;\n height: 1.25rem;\n position:absolute;\n top:100%;\n }\n `,\n ],\n template: `\n <div class=\"splitter-container\" [class.vertical]=\"orientation === 'vertical'\"\n [style.min-height]=\"orientation === 'vertical' ? verticalMinHeight : null\"\n [style.height]=\"orientation === 'vertical' ? verticalMinHeight : null\">\n <!-- Iterate through the QueryList of panes -->\n @for (pane of panes; track pane; let i = $index) {\n <div class=\"pane-wrapper\" [style.flex]=\"getPaneFlex(pane)\"\n [style.min-width]=\"orientation === 'horizontal' ? (pane.min || '0px') : null\"\n [style.max-width]=\"orientation === 'horizontal' ? pane.max : null\"\n [style.min-height]=\"orientation === 'vertical' ? (pane.min || '0px') : null\"\n [style.max-height]=\"orientation === 'vertical' ? pane.max : null\"\n >\n <!-- Access the 'template' property we defined in the Pane component -->\n <ng-container [ngTemplateOutlet]=\"pane.template\"></ng-container>\n </div>\n\n @if (i < panes.length - 1) {\n <div class=\"splitbar\"\n [class.resizable]=\"resizable\"\n [style.background-color]=\"barColor\"\n [style.width.px]=\"orientation === 'horizontal' ? handleThickness : '100%'\" \n [style.height.px]=\"orientation === 'vertical' ? handleThickness : '100%'\" \n role=\"separator\"\n tabindex=\"0\"\n [attr.aria-orientation]=\"getSeparatorAriaOrientation()\"\n [attr.aria-valuenow]=\"getHandleValueNow(i)\"\n [attr.aria-valuemin]=\"getHandleValueMin(i)\"\n [attr.aria-valuemax]=\"getHandleValueMax(i)\"\n (keydown)=\"onHandleKeyDown($event, i)\"\n (mousedown)=\"onMouseDown($event, i)\">\n <div class=\"handle-line\" [style.background-color]=\"lineColor\">\n @if (pane.collapsible) {\n <span\n class=\"collapse-arrow bi\"\n [ngClass]=\"getCollapseIcon(pane)\"\n [style.color]=\"handleIconColor\"\n (click)=\"onHandleToggle($event, i)\"\n aria-hidden=\"true\"\n ></span>\n }\n </div>\n </div>\n }\n }\n </div>\n `,\n})\nexport class NgbSplitterComponent {\n @ContentChildren(NgbSplitterPaneComponent) panes!: QueryList<NgbSplitterPaneComponent>;\n @Input() orientation: 'horizontal' | 'vertical' = 'horizontal';\n @Input() handleThickness:number = 12;\n @Input() handleIconColor: string = '#000';\n @Input() verticalMinHeight: string = '280px';\n\n @Input() resizable: boolean = true; // New Resize Input\n @Input() barColor: string = '#ccc'; // Custom Bar Color\n @Input() lineColor: string = '#000'; // Custom Line Color\n\n private isDragging = false;\n private currentHandleIndex = -1;\n\n constructor(private el: ElementRef){\n\n }\n\n// Listeners for global mouse movement\n @HostListener('window:mousemove', ['$event'])\n onMouseMove(event: MouseEvent) {\n if (!this.isDragging || !this.resizable) return;\n this.resize(event);\n }\n\n @HostListener('window:mouseup')\n onMouseUp() {\n this.isDragging = false;\n document.body.style.cursor = 'default';\n }\n\n onMouseDown(event: MouseEvent, index: number) {\n if (!this.resizable) return;\n event.preventDefault();\n this.isDragging = true;\n this.currentHandleIndex = index;\n document.body.style.cursor = this.orientation === 'horizontal' ? 'col-resize' : 'row-resize';\n }\n\n private resize(event: MouseEvent) {\n const container = this.el.nativeElement.querySelector('.splitter-container');\n const rect = container.getBoundingClientRect();\n const paneArr = this.panes.toArray();\n const paneWrappers = Array.from(this.el.nativeElement.querySelectorAll('.pane-wrapper')) as HTMLElement[];\n\n const targetPane = paneArr[this.currentHandleIndex];\n if (!targetPane || !paneWrappers.length) {\n return;\n }\n\n const isHorizontal = this.orientation === 'horizontal';\n const totalPixels = isHorizontal ? rect.width : rect.height;\n if (totalPixels <= 0) {\n return;\n }\n\n const mousePos = isHorizontal ? event.clientX - rect.left : event.clientY - rect.top;\n\n let consumed = 0;\n for (let i = 0; i < this.currentHandleIndex; i++) {\n const prevPaneElement = paneWrappers[i];\n if (!prevPaneElement) {\n continue;\n }\n const prevRect = prevPaneElement.getBoundingClientRect();\n consumed += isHorizontal ? prevRect.width : prevRect.height;\n consumed += this.handleThickness;\n }\n\n let newSizeValue = ((mousePos - consumed) / totalPixels) * 100;\n\n const minPercent = this.sizeToPercent(targetPane.min, totalPixels);\n const maxPercent = this.sizeToPercent(targetPane.max, totalPixels);\n\n if (minPercent !== null) {\n newSizeValue = Math.max(newSizeValue, minPercent);\n }\n if (maxPercent !== null) {\n newSizeValue = Math.min(newSizeValue, maxPercent);\n }\n\n newSizeValue = Math.max(0, Math.min(100, newSizeValue));\n targetPane.size = `${newSizeValue}%`;\n }\n\n onHandleToggle(event: Event, index: number) {\n event.stopPropagation();\n event.preventDefault();\n this.togglePane(index);\n }\n\n getCollapseIcon(pane: NgbSplitterPaneComponent): string {\n if (!pane.collapsible) {\n return '';\n }\n if (this.orientation === 'horizontal') {\n return pane.collapsed ? 'bi-caret-right-fill' : 'bi-caret-left-fill';\n }\n return pane.collapsed ? 'bi-caret-down-fill' : 'bi-caret-up-fill';\n }\n\n getPaneFlex(pane: NgbSplitterPaneComponent) {\n if (pane.collapsed) {\n return '0 0 0px';\n }\n if (pane.size) {\n return `0 0 ${pane.size}`;\n }\n return '1 1 0px';\n }\n\n private sizeToPercent(value: string | undefined, totalPixels: number): number | null {\n if (!value) {\n return null;\n }\n\n const trimmed = value.trim();\n if (!trimmed) {\n return null;\n }\n\n if (trimmed.endsWith('%')) {\n const percent = parseFloat(trimmed);\n return Number.isFinite(percent) ? percent : null;\n }\n\n const numeric = parseFloat(trimmed);\n if (!Number.isFinite(numeric)) {\n return null;\n }\n\n if (trimmed.endsWith('px')) {\n return totalPixels > 0 ? (numeric / totalPixels) * 100 : null;\n }\n\n return numeric;\n }\n\n togglePane(index: number) {\n const pane = this.panes.toArray()[index];\n pane.collapsed = !pane.collapsed;\n pane.collapsedChange.emit(pane.collapsed);\n }\n\n getSeparatorAriaOrientation(): 'horizontal' | 'vertical' {\n // For left/right panes, the separator is vertical. For top/bottom panes, it is horizontal.\n return this.orientation === 'horizontal' ? 'vertical' : 'horizontal';\n }\n\n getHandleValueNow(index: number): number | null {\n const container = this.el.nativeElement.querySelector('.splitter-container');\n const rect = container.getBoundingClientRect();\n const paneWrappers = Array.from(this.el.nativeElement.querySelectorAll('.pane-wrapper')) as HTMLElement[];\n const target = paneWrappers[index];\n\n const totalPixels = this.orientation === 'horizontal' ? rect.width : rect.height;\n if (!target || totalPixels <= 0) {\n return null;\n }\n\n const paneRect = target.getBoundingClientRect();\n const panePixels = this.orientation === 'horizontal' ? paneRect.width : paneRect.height;\n return Math.round((panePixels / totalPixels) * 100);\n }\n\n getHandleValueMin(index: number): number | null {\n const pane = this.panes?.toArray?.()[index];\n const container = this.el.nativeElement.querySelector('.splitter-container');\n const rect = container.getBoundingClientRect();\n const totalPixels = this.orientation === 'horizontal' ? rect.width : rect.height;\n if (!pane || totalPixels <= 0) {\n return null;\n }\n return this.sizeToPercent(pane.min, totalPixels);\n }\n\n getHandleValueMax(index: number): number | null {\n const pane = this.panes?.toArray?.()[index];\n const container = this.el.nativeElement.querySelector('.splitter-container');\n const rect = container.getBoundingClientRect();\n const totalPixels = this.orientation === 'horizontal' ? rect.width : rect.height;\n if (!pane || totalPixels <= 0) {\n return null;\n }\n return this.sizeToPercent(pane.max, totalPixels);\n }\n\n onHandleKeyDown(event: KeyboardEvent, index: number) {\n if (event.key === 'Enter') {\n const pane = this.panes.toArray()[index];\n if (pane?.collapsible) {\n event.preventDefault();\n this.togglePane(index);\n }\n return;\n }\n\n const isHorizontal = this.orientation === 'horizontal';\n const negativeKey = isHorizontal ? 'ArrowLeft' : 'ArrowUp';\n const positiveKey = isHorizontal ? 'ArrowRight' : 'ArrowDown';\n if (event.key !== negativeKey && event.key !== positiveKey) {\n return;\n }\n\n if (!this.resizable) {\n return;\n }\n\n event.preventDefault();\n const delta = (event.shiftKey ? 5 : 2) * (event.key === positiveKey ? 1 : -1);\n this.resizeByPercent(index, delta);\n }\n\n private resizeByPercent(index: number, deltaPercent: number) {\n const container = this.el.nativeElement.querySelector('.splitter-container');\n const rect = container.getBoundingClientRect();\n const paneArr = this.panes.toArray();\n const paneWrappers = Array.from(this.el.nativeElement.querySelectorAll('.pane-wrapper')) as HTMLElement[];\n\n const targetPane = paneArr[index];\n const targetWrapper = paneWrappers[index];\n if (!targetPane || !targetWrapper) {\n return;\n }\n\n const totalPixels = this.orientation === 'horizontal' ? rect.width : rect.height;\n if (totalPixels <= 0) {\n return;\n }\n\n const wrapperRect = targetWrapper.getBoundingClientRect();\n const currentPixels = this.orientation === 'horizontal' ? wrapperRect.width : wrapperRect.height;\n let nextPercent = (currentPixels / totalPixels) * 100 + deltaPercent;\n\n const minPercent = this.sizeToPercent(targetPane.min, totalPixels);\n const maxPercent = this.sizeToPercent(targetPane.max, totalPixels);\n if (minPercent !== null) {\n nextPercent = Math.max(nextPercent, minPercent);\n }\n if (maxPercent !== null) {\n nextPercent = Math.min(nextPercent, maxPercent);\n }\n\n nextPercent = Math.max(0, Math.min(100, nextPercent));\n targetPane.size = `${nextPercent}%`;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\nexport type NgbChip = {\n id: string | number;\n label: string;\n disabled?: boolean;\n};\n\n@Component({\n selector: 'ngb-chips',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\n `\n :host {\n display: block;\n }\n\n .ngb-chips {\n display: flex;\n flex-wrap: wrap;\n gap: 0.35rem;\n align-items: center;\n }\n\n .ngb-chip {\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n max-width: 100%;\n }\n\n .ngb-chip-label {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .ngb-chip-remove {\n border: 0;\n background: transparent;\n padding: 0;\n line-height: 1;\n cursor: pointer;\n font-size: 1rem;\n opacity: 0.85;\n }\n\n .ngb-chip-remove:disabled {\n cursor: default;\n opacity: 0.4;\n }\n `,\n ],\n template: `\n <div class=\"ngb-chips\" [attr.aria-label]=\"ariaLabel\">\n @for (item of items; track trackById($index, item)) {\n <span class=\"badge rounded-pill bg-secondary ngb-chip\" [class.opacity-50]=\"!!item.disabled\">\n <span class=\"ngb-chip-label\">{{ item.label }}</span>\n @if (removable) {\n <button\n type=\"button\"\n class=\"ngb-chip-remove\"\n [disabled]=\"!!item.disabled\"\n (click)=\"remove.emit(item)\"\n [attr.aria-label]=\"removeLabel || 'Remove'\"\n >\n ×\n </button>\n }\n </span>\n }\n </div>\n `,\n})\nexport class NgbChipsComponent {\n @Input() items: NgbChip[] = [];\n @Input() removable = true;\n @Input() ariaLabel?: string;\n @Input() removeLabel?: string;\n\n @Output() remove = new EventEmitter<NgbChip>();\n\n trackById = (_: number, item: NgbChip) => item.id;\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgbTypeaheadItem, NgbTypeaheadI18n } from './typeahead.types';\nimport { NgbChipsComponent } from '../../../chips/src/chips/chips.component';\n\n@Component({\n selector: 'ngb-typeahead',\n standalone: true,\n imports: [CommonModule, NgbChipsComponent],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbTypeaheadComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\n `\n :host {\n display: block;\n }\n\n .typeahead-root {\n position: relative;\n }\n\n .typeahead-chips-control {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 0.35rem;\n min-height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n }\n\n .typeahead-chips-control input {\n border: 0;\n outline: 0;\n flex: 1 1 9rem;\n min-width: 6rem;\n padding: 0;\n margin: 0;\n background: transparent;\n }\n\n .typeahead-chips-control input:focus {\n outline: 0;\n box-shadow: none;\n }\n\n .typeahead-panel {\n position: absolute;\n top: calc(100% + 0.25rem);\n left: 0;\n right: 0;\n z-index: 1050;\n max-height: 240px;\n overflow: auto;\n\n opacity: 0;\n transform: translateY(-0.25rem);\n pointer-events: none;\n transition:\n opacity 120ms ease,\n transform 120ms ease;\n }\n\n .typeahead-panel.show {\n opacity: 1;\n transform: translateY(0);\n pointer-events: auto;\n }\n\n .typeahead-item {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n }\n .typeahead-item-checkbox {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1.15rem;\n height: 1.15rem;\n }\n `,\n ],\n template: `\n <div class=\"typeahead-root\">\n <div class=\"input-group mb-2\">\n @if (chips && multiSelect) {\n <div class=\"form-control typeahead-chips-control\" (click)=\"disabled ? null : focusInput()\">\n <ngb-chips\n [items]=\"selected\"\n [removable]=\"true\"\n (remove)=\"removeSelected($event)\"\n ariaLabel=\"Selected items\"\n ></ngb-chips>\n <input\n #inputEl\n type=\"text\"\n [disabled]=\"disabled\"\n [attr.placeholder]=\"selected.length ? '' : (i18n?.placeholder || 'Type to search')\"\n [value]=\"query\"\n (input)=\"onNativeInput($event)\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputBlur($event)\"\n (keydown)=\"onKeydown($event)\"\n (keyup)=\"onKeyup($event)\"\n aria-autocomplete=\"list\"\n role=\"combobox\"\n [attr.aria-expanded]=\"overlayVisible\"\n [attr.aria-controls]=\"overlayId\"\n [attr.aria-activedescendant]=\"activeDescendantId\"\n />\n </div>\n } @else {\n <input\n #inputEl\n type=\"text\"\n class=\"form-control\"\n [disabled]=\"disabled\"\n [attr.placeholder]=\"i18n?.placeholder || 'Type to search'\"\n [value]=\"displayQuery\"\n (input)=\"onNativeInput($event)\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputBlur($event)\"\n (keydown)=\"onKeydown($event)\"\n (keyup)=\"onKeyup($event)\"\n aria-autocomplete=\"list\"\n role=\"combobox\"\n [attr.aria-expanded]=\"overlayVisible\"\n [attr.aria-controls]=\"overlayId\"\n [attr.aria-activedescendant]=\"activeDescendantId\"\n />\n }\n\n @if (showClearButton && (query || (!multiSelect && selected.length))) {\n <button\n type=\"button\"\n class=\"btn btn-outline-secondary\"\n (click)=\"onClearClick($event)\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"i18n?.clear || 'Clear'\"\n >\n ×\n </button>\n }\n\n @if (showDropdownButton) {\n <button\n type=\"button\"\n class=\"btn btn-outline-secondary\"\n (click)=\"onDropdownButtonClick($event)\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"i18n?.dropdownButtonLabel || 'Toggle suggestions'\"\n >\n ▾\n </button>\n }\n </div>\n\n <div\n #scroller\n class=\"dropdown-menu w-100 p-0 typeahead-panel\"\n [class.show]=\"overlayVisible\"\n [id]=\"overlayId\"\n role=\"listbox\"\n (scroll)=\"onScroll($event)\"\n >\n @if (vScroll) {\n <div [style.height.px]=\"beforePadding\"></div>\n }\n\n @for (item of visible; track trackById($index, item); let idx = $index) {\n <button\n type=\"button\"\n class=\"dropdown-item\"\n [class.active]=\"idx === activeIndex\"\n [class.fw-semibold]=\"isSelected(item)\"\n [attr.aria-selected]=\"isSelected(item)\"\n [attr.id]=\"getOptionId(idx)\"\n (click)=\"selectItem(item)\"\n [disabled]=\"item.disabled\"\n >\n <div class=\"typeahead-item\">\n @if (multiSelect) {\n <span class=\"typeahead-item-checkbox\">\n <input\n type=\"checkbox\"\n class=\"form-check-input m-0\"\n [checked]=\"isSelected(item)\"\n [disabled]=\"item.disabled\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n />\n </span>\n }\n @if (resolvedItemTemplate; as tpl) {\n <ng-container\n [ngTemplateOutlet]=\"tpl\"\n [ngTemplateOutletContext]=\"{\n $implicit: item,\n item: item,\n query: query,\n selected: isSelected(item),\n index: idx\n }\"\n ></ng-container>\n } @else {\n <span>{{ item.label }}</span>\n }\n </div>\n </button>\n }\n\n @if (vScroll) {\n <div [style.height.px]=\"afterPadding\"></div>\n }\n\n @if (showNoResults) {\n <div class=\"dropdown-item text-muted text-center\">\n {{ i18n?.noResults || 'No results' }}\n </div>\n }\n </div>\n\n @if (multiSelect && selected.length) {\n <div class=\"mt-2 small text-muted\">\n {{ selectionSummary }}\n <button type=\"button\" class=\"btn btn-link btn-sm ps-1\" (click)=\"clearSelection()\">\n {{ i18n?.clearSelection || 'Clear' }}\n </button>\n </div>\n }\n </div>\n `,\n})\nexport class NgbTypeaheadComponent implements AfterViewInit, OnChanges, OnDestroy, ControlValueAccessor {\n @Input() data: NgbTypeaheadItem[] = [];\n @Input() debounceTime = 200;\n @Input() characterTyped = 1;\n @Input() limit = 10;\n @Input() selectExact = false;\n @Input() multiSelect = false;\n @Input() matchSelection = false;\n @Input() showDropdownButton = false;\n @Input() showClearButton = false;\n @Input() updateOnBlur = false;\n @Input() updateOnTab = true;\n @Input() separator: string | string[] = ',';\n @Input() chips = false;\n @Input() vScroll = false;\n @Input() vItemSize = 40;\n // `TemplateRef` types can become non-assignable in monorepo setups with multiple Angular installations.\n // Using `any` keeps the API flexible while still supporting Angular templates at runtime.\n @Input() itemTemplate?: any;\n @Input() i18n?: NgbTypeaheadI18n;\n\n @ContentChild(TemplateRef) projectedItemTemplate?: any;\n\n @Output() completeMethod = new EventEmitter<string>();\n @Output() onSelect = new EventEmitter<NgbTypeaheadItem>();\n @Output() onUnselect = new EventEmitter<NgbTypeaheadItem>();\n @Output() onAdd = new EventEmitter<NgbTypeaheadItem>();\n @Output() onFocus = new EventEmitter<FocusEvent>();\n @Output() onBlur = new EventEmitter<FocusEvent>();\n @Output() onDropdownClick = new EventEmitter<MouseEvent>();\n @Output() onClear = new EventEmitter<Event>();\n @Output() onInputKeydown = new EventEmitter<KeyboardEvent>();\n @Output() onKeyUp = new EventEmitter<KeyboardEvent>();\n @Output() onShow = new EventEmitter<Event>();\n @Output() onHide = new EventEmitter<Event>();\n @Output() onLazyLoad = new EventEmitter<void>();\n\n @Output() selectedItems = new EventEmitter<NgbTypeaheadItem[]>();\n @Output() selectionChange = new EventEmitter<NgbTypeaheadItem[]>();\n @Output() onChange = new EventEmitter<string>();\n @Output() onScrollEvent = new EventEmitter<void>(); // legacy, kept for compatibility\n\n @ViewChild('scroller', { static: true }) scroller!: ElementRef<HTMLElement>;\n @ViewChild('inputEl') inputEl?: ElementRef<HTMLInputElement>;\n @ViewChildren('itemButton') itemButtons?: QueryList<ElementRef<HTMLButtonElement>>;\n\n disabled = false;\n query = '';\n filtered: NgbTypeaheadItem[] = [];\n visible: NgbTypeaheadItem[] = [];\n selected: NgbTypeaheadItem[] = [];\n overlayVisible = false;\n private openedByDropdown = false;\n private hasSearched = false;\n activeIndex = -1;\n private inputFocused = false;\n private pointerDownInside = false;\n private lastFilterTerm = '';\n private keepOpenOnEmpty = false;\n readonly overlayId = `ngb-typeahead-overlay-${Math.random().toString(36).slice(2)}`;\n\n viewportHeight = 240;\n itemHeight = 40;\n beforePadding = 0;\n afterPadding = 0;\n private viewportStartIndex = 0;\n private debounceId?: ReturnType<typeof setTimeout>;\n\n private onControlChange: (value: any) => void = () => {};\n private onControlTouched: () => void = () => {};\n private controlValue: any = null;\n\n ngAfterViewInit(): void {\n // do not open overlay on init; just ensure viewport state is consistent\n this.applyFilter('');\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['vScroll'] || changes['vItemSize']) {\n const nextSize = Number(this.vItemSize);\n this.itemHeight = Number.isFinite(nextSize) && nextSize > 0 ? nextSize : 40;\n this.updateViewport(this.scroller?.nativeElement.scrollTop || 0);\n }\n if (changes['data'] && !changes['data'].firstChange) {\n this.applyFilter(this.query);\n }\n if (changes['data'] && this.controlValue != null && !this.inputFocused && !this.overlayVisible) {\n this.applyControlValue(this.controlValue);\n }\n }\n\n ngOnDestroy(): void {\n if (this.debounceId) {\n clearTimeout(this.debounceId);\n }\n }\n\n constructor(\n private host: ElementRef<HTMLElement>,\n private cdr: ChangeDetectorRef,\n ) {}\n\n @HostListener('document:mousedown', ['$event'])\n onDocumentMouseDown(event: MouseEvent) {\n const target = event.target as Node | null;\n if (!target) return;\n\n const inside = this.host.nativeElement.contains(target);\n this.pointerDownInside = inside;\n if (inside) return;\n if (!this.overlayVisible) return;\n\n this.commitInputOnClose();\n this.hideOverlay(event);\n }\n\n @HostListener('document:focusin', ['$event'])\n onDocumentFocusIn(event: FocusEvent) {\n if (!this.overlayVisible) return;\n const target = event.target as Node | null;\n if (!target) return;\n if (this.host.nativeElement.contains(target)) return;\n\n this.commitInputOnClose();\n this.hideOverlay(event);\n }\n\n get activeDescendantId(): string | null {\n if (!this.overlayVisible) return null;\n if (this.activeIndex < 0 || this.activeIndex >= this.visible.length) return null;\n return this.getOptionId(this.activeIndex);\n }\n\n get showNoResults(): boolean {\n return this.overlayVisible && this.hasSearched && this.filtered.length === 0;\n }\n\n get displayQuery(): string {\n if (!this.multiSelect) {\n return this.query;\n }\n if (this.chips) {\n return this.query;\n }\n const term = (this.query || '').trim();\n const prefix = this.selected.map((s) => s.label).join(', ');\n if (!prefix) {\n return this.query;\n }\n if (term) {\n return `${prefix}, ${term}`;\n }\n return prefix;\n }\n\n get selectionSummary() {\n if (!this.selected.length) return '';\n if (this.selected.length <= 2) {\n return this.selected.map((s) => s.label).join(', ');\n }\n const firstTwo = this.selected.slice(0, 2).map((s) => s.label).join(', ');\n return `${firstTwo} (+${this.selected.length - 2})`;\n }\n\n get resolvedItemTemplate(): any {\n return this.itemTemplate ?? this.projectedItemTemplate;\n }\n\n writeValue(value: any): void {\n this.controlValue = value;\n this.applyControlValue(value);\n }\n\n private applyControlValue(value: any): void {\n if (this.multiSelect) {\n const asArray = Array.isArray(value) ? value : value == null ? [] : [value];\n const next = asArray.map((v) => this.coerceToItem(v)).filter(Boolean) as NgbTypeaheadItem[];\n const seen = new Set<string | number>();\n this.selected = next.filter((i) => (seen.has(i.id) ? false : (seen.add(i.id), true)));\n this.query = '';\n this.keepOpenOnEmpty = false;\n this.applyFilter('');\n this.cdr.markForCheck();\n return;\n }\n\n if (value == null) {\n this.selected = [];\n this.query = '';\n this.keepOpenOnEmpty = false;\n this.applyFilter('');\n this.cdr.markForCheck();\n return;\n }\n\n const item = this.coerceToItem(value);\n if (!item) return;\n this.selected = [item];\n this.query = item.label;\n if (this.inputEl?.nativeElement) {\n this.inputEl.nativeElement.value = item.label;\n }\n this.keepOpenOnEmpty = false;\n this.applyFilter(this.query);\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: any): void {\n this.onControlChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onControlTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n if (isDisabled) {\n this.hideOverlay();\n }\n this.cdr.markForCheck();\n }\n\n onInput(value: string) {\n if (this.disabled) return;\n this.keepOpenOnEmpty = false;\n const trimmed = (value ?? '').trim();\n if (!this.multiSelect && this.selected.length) {\n const selectedLabel = (this.selected[0]?.label ?? '').trim();\n if (trimmed.toLowerCase() !== selectedLabel.toLowerCase()) {\n const previous = this.selected[0];\n this.selected = [];\n this.selectedItems.emit(this.selected);\n this.selectionChange.emit(this.selected);\n if (previous) {\n this.onUnselect.emit(previous);\n }\n this.propagateControlValue();\n }\n }\n\n if (this.chips && this.multiSelect) {\n const tokens = this.splitBySeparators(value);\n if (tokens.tokensToAdd.length) {\n for (const token of tokens.tokensToAdd) {\n this.addToken(token);\n }\n }\n this.query = tokens.remaining;\n } else {\n this.query = value;\n }\n this.onChange.emit(value);\n // Input events imply the user is interacting with the field; treat as focused so the overlay can open immediately.\n this.inputFocused = true;\n if (this.debounceId) clearTimeout(this.debounceId);\n if (this.debounceTime <= 0) {\n this.applyFilter(value);\n this.completeMethod.emit(value);\n } else {\n this.debounceId = setTimeout(() => {\n this.applyFilter(value);\n this.completeMethod.emit(value);\n this.cdr.markForCheck();\n }, this.debounceTime);\n }\n }\n\n onNativeInput(event: Event) {\n const target = event.target as HTMLInputElement | null;\n const value = target?.value ?? '';\n if (this.multiSelect && !this.chips && this.selected.length) {\n const prefix = this.selected.map((s) => s.label).join(', ');\n const normalizedPrefix = prefix.trim();\n if (normalizedPrefix && value.toLowerCase().startsWith(normalizedPrefix.toLowerCase())) {\n let rest = value.slice(normalizedPrefix.length);\n rest = rest.replace(/^[\\s,]+/, '');\n this.onInput(rest);\n return;\n }\n }\n this.onInput(value);\n }\n\n onKeydown(event: KeyboardEvent) {\n if (this.disabled) return;\n this.onInputKeydown.emit(event);\n if (this.chips && this.multiSelect && event.key === 'Tab' && this.updateOnTab) {\n event.preventDefault();\n this.addToken((this.query || '').trim());\n this.focusInput();\n return;\n }\n if (event.key === 'Tab' && this.overlayVisible) {\n const active = this.visible[this.activeIndex];\n if (active) {\n this.selectItem(active);\n this.hideOverlay(event);\n }\n return;\n }\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n this.moveActive(event.key === 'ArrowDown' ? 1 : -1);\n } else if (event.key === 'Home') {\n if (this.overlayVisible) {\n event.preventDefault();\n this.setActiveGlobalIndex(0);\n }\n } else if (event.key === 'End') {\n if (this.overlayVisible) {\n event.preventDefault();\n this.setActiveGlobalIndex(this.filtered.length - 1);\n }\n } else if (event.key === 'Enter') {\n event.preventDefault();\n const active = this.visible[this.activeIndex] || this.visible[0];\n if (active) {\n this.selectItem(active);\n this.hideOverlay(event);\n }\n } else if (event.key === 'Escape') {\n if (this.overlayVisible) {\n event.preventDefault();\n this.hideOverlay(event);\n }\n }\n }\n\n onKeyup(event: KeyboardEvent) {\n this.onKeyUp.emit(event);\n }\n\n onInputFocus(event: FocusEvent) {\n if (this.disabled) return;\n this.onFocus.emit(event);\n this.inputFocused = true;\n if (this.multiSelect && !this.overlayVisible) {\n // When multi-select is displaying the selection summary, start searching with a clean query.\n this.query = '';\n // After a multi-select session, re-opening the field should show the list again even with an empty query.\n if (!this.chips && this.selected.length) {\n this.keepOpenOnEmpty = true;\n this.applyFilter('');\n this.activatePreferredOption();\n return;\n }\n }\n // Opening behavior: only show overlay when threshold met, or dropdown button explicitly used.\n if (this.query.length >= this.characterTyped) {\n this.showOverlay(event);\n }\n }\n\n onInputBlur(event: FocusEvent) {\n this.onBlur.emit(event);\n this.onControlTouched();\n this.inputFocused = false;\n // Do not close on blur directly: scrolling/clicking within the overlay can blur the input.\n // Closing/commit is handled by outside click (document:mousedown) and focus moving outside (document:focusin).\n\n if (this.chips && this.multiSelect && this.updateOnBlur) {\n this.addToken((this.query || '').trim());\n }\n }\n\n onScroll(event: Event) {\n const target = event.target as HTMLElement;\n const scrollTop = target.scrollTop;\n this.onScrollEvent.emit();\n this.updateViewport(scrollTop);\n\n const remaining = target.scrollHeight - (target.scrollTop + target.clientHeight);\n if (remaining < 48) {\n this.onLazyLoad.emit();\n }\n }\n\n selectItem(item: NgbTypeaheadItem) {\n if (this.disabled) return;\n if (!item || item.disabled) return;\n this.validateItem(item);\n if (this.multiSelect) {\n const exists = this.selected.find((s) => s.id === item.id);\n if (exists) {\n this.selected = this.selected.filter((s) => s.id !== item.id);\n this.onUnselect.emit(item);\n } else {\n this.selected = [...this.selected, item];\n this.onSelect.emit(item);\n }\n this.propagateControlValue();\n // After selecting/unselecting, show the chosen values in the input and keep the panel open.\n this.keepOpenOnEmpty = true;\n if (this.chips) {\n this.query = '';\n } else {\n this.query = '';\n }\n this.applyFilter('');\n } else {\n if (this.selected.length && this.selected[0]?.id !== item.id) {\n this.onUnselect.emit(this.selected[0]);\n }\n this.selected = [item];\n this.query = item.label;\n if (this.inputEl?.nativeElement) {\n this.inputEl.nativeElement.value = item.label;\n }\n this.onSelect.emit(item);\n this.propagateControlValue();\n this.hideOverlay();\n }\n this.selectedItems.emit(this.selected);\n this.selectionChange.emit(this.selected);\n this.cdr.markForCheck();\n }\n\n focusInput() {\n this.inputEl?.nativeElement?.focus();\n }\n\n removeSelected(item: NgbTypeaheadItem) {\n if (this.disabled) return;\n if (!item) return;\n const exists = this.selected.find((s) => s.id === item.id);\n if (!exists) return;\n this.selected = this.selected.filter((s) => s.id !== item.id);\n this.onUnselect.emit(item);\n this.propagateControlValue();\n this.selectedItems.emit(this.selected);\n this.selectionChange.emit(this.selected);\n this.cdr.markForCheck();\n }\n\n clearSelection() {\n const previous = [...this.selected];\n this.selected = [];\n this.selectedItems.emit(this.selected);\n this.selectionChange.emit(this.selected);\n if (!this.multiSelect && previous[0]) {\n this.onUnselect.emit(previous[0]);\n }\n this.propagateControlValue();\n this.cdr.markForCheck();\n }\n\n isSelected(item: NgbTypeaheadItem) {\n return this.selected.some((s) => s.id === item.id);\n }\n\n trackById = (_: number, item: NgbTypeaheadItem) => item.id;\n\n getOptionId(index: number): string {\n return `${this.overlayId}-opt-${index}`;\n }\n\n onDropdownButtonClick(event: MouseEvent) {\n if (this.disabled) return;\n this.onDropdownClick.emit(event);\n if (this.overlayVisible) {\n this.hideOverlay(event);\n this.openedByDropdown = false;\n } else {\n this.openedByDropdown = true;\n if (this.scroller?.nativeElement) {\n this.scroller.nativeElement.scrollTop = 0;\n }\n this.showOverlay(event, true);\n // Show all items when the dropdown button is used, regardless of current query.\n this.applyFilter('');\n this.activatePreferredOption();\n }\n this.inputEl?.nativeElement.focus();\n this.cdr.markForCheck();\n }\n\n onClearClick(event: Event) {\n if (this.disabled) return;\n this.onClear.emit(event);\n this.query = '';\n this.clearSelection();\n this.applyFilter('');\n this.hideOverlay(event);\n this.inputEl?.nativeElement.focus();\n this.cdr.markForCheck();\n }\n\n private applyFilter(value: string) {\n const term = (value || '').toLowerCase();\n if (term !== this.lastFilterTerm) {\n this.lastFilterTerm = term;\n if (this.scroller?.nativeElement) {\n this.scroller.nativeElement.scrollTop = 0;\n }\n }\n const meetsThreshold = term.length >= this.characterTyped || this.openedByDropdown || (this.multiSelect && this.keepOpenOnEmpty);\n this.hasSearched = term.length >= this.characterTyped || this.openedByDropdown;\n\n const base = meetsThreshold ? this.data.filter((d) => (d.label || '').toLowerCase().includes(term)) : [];\n const limited = this.limit ? base.slice(0, this.limit) : base;\n this.filtered = limited;\n if (this.selectExact && limited.length === 1) {\n this.selectItem(limited[0]);\n }\n this.updateViewport(this.scroller?.nativeElement.scrollTop || 0);\n\n if (meetsThreshold && !this.overlayVisible && (this.inputFocused || this.openedByDropdown)) {\n this.showOverlay();\n }\n if (!meetsThreshold && this.overlayVisible && !this.openedByDropdown) {\n this.hideOverlay();\n }\n this.cdr.markForCheck();\n }\n\n private updateViewport(scrollTop: number) {\n if (!this.vScroll) {\n this.beforePadding = 0;\n this.afterPadding = 0;\n this.visible = this.filtered;\n this.viewportStartIndex = 0;\n this.activeIndex = this.visible.length ? Math.min(this.activeIndex, this.visible.length - 1) : -1;\n return;\n }\n const total = this.filtered.length;\n const visibleCount = Math.ceil(this.viewportHeight / this.itemHeight) + 2;\n const start = Math.max(Math.floor(scrollTop / this.itemHeight), 0);\n const end = Math.min(start + visibleCount, total);\n this.beforePadding = start * this.itemHeight;\n this.afterPadding = Math.max(total - end, 0) * this.itemHeight;\n this.visible = this.filtered.slice(start, end);\n this.viewportStartIndex = start;\n this.activeIndex = this.visible.length ? Math.min(this.activeIndex, this.visible.length - 1) : -1;\n }\n\n private activatePreferredOption() {\n if (!this.filtered.length || !this.scroller?.nativeElement) {\n this.activeIndex = -1;\n return;\n }\n\n const trimmed = (this.query || '').trim().toLowerCase();\n let preferredIndex = -1;\n if (trimmed) {\n preferredIndex = this.filtered.findIndex((d) => (d.label || '').trim().toLowerCase() === trimmed);\n }\n if (preferredIndex === -1 && this.selected.length) {\n const firstSelected = this.selected[0];\n preferredIndex = this.filtered.findIndex((d) => d.id === firstSelected.id);\n }\n\n if (preferredIndex === -1) {\n preferredIndex = 0;\n }\n\n const scrollTop = Math.max(0, preferredIndex * this.itemHeight - this.itemHeight);\n this.scroller.nativeElement.scrollTop = scrollTop;\n this.updateViewport(scrollTop);\n\n const start = Math.max(Math.floor(scrollTop / this.itemHeight), 0);\n this.activeIndex = Math.max(0, Math.min(preferredIndex - start, this.visible.length - 1));\n }\n\n private moveActive(direction: 1 | -1) {\n if (!this.overlayVisible) {\n this.showOverlay();\n }\n if (!this.filtered.length) return;\n const currentGlobal = this.activeGlobalIndex();\n const total = this.filtered.length;\n const nextGlobal = currentGlobal < 0 ? 0 : (currentGlobal + direction + total) % total;\n this.setActiveGlobalIndex(nextGlobal);\n }\n\n private activeGlobalIndex(): number {\n if (this.activeIndex < 0) return -1;\n return this.viewportStartIndex + this.activeIndex;\n }\n\n private setActiveGlobalIndex(globalIndex: number) {\n if (!this.filtered.length) {\n this.activeIndex = -1;\n return;\n }\n const clamped = Math.max(0, Math.min(globalIndex, this.filtered.length - 1));\n const scroller = this.scroller?.nativeElement;\n if (!scroller) {\n this.activeIndex = 0;\n return;\n }\n\n const itemTop = clamped * this.itemHeight;\n const itemBottom = itemTop + this.itemHeight;\n const viewTop = scroller.scrollTop;\n const viewBottom = viewTop + (scroller.clientHeight || this.viewportHeight);\n\n let nextScrollTop = viewTop;\n if (itemTop < viewTop) {\n nextScrollTop = itemTop;\n } else if (itemBottom > viewBottom) {\n nextScrollTop = Math.max(0, itemBottom - (scroller.clientHeight || this.viewportHeight));\n }\n\n if (nextScrollTop !== viewTop) {\n scroller.scrollTop = nextScrollTop;\n }\n\n this.updateViewport(scroller.scrollTop);\n this.activeIndex = Math.max(0, Math.min(clamped - this.viewportStartIndex, this.visible.length - 1));\n this.cdr.markForCheck();\n }\n\n private validateItem(item: NgbTypeaheadItem) {\n if (item.id == null) {\n throw new Error('Typeahead items must include an id.');\n }\n }\n\n private showOverlay(event?: Event, openedByDropdown = false) {\n this.openedByDropdown = openedByDropdown;\n if (this.overlayVisible) return;\n this.overlayVisible = true;\n this.activeIndex = this.visible.length ? 0 : -1;\n this.onShow.emit(event ?? new Event('show'));\n this.cdr.markForCheck();\n }\n\n private hideOverlay(event?: Event) {\n if (!this.overlayVisible) return;\n this.overlayVisible = false;\n this.openedByDropdown = false;\n this.activeIndex = -1;\n this.onHide.emit(event ?? new Event('hide'));\n this.cdr.markForCheck();\n }\n\n private commitInputOnClose() {\n const trimmed = (this.query || '').trim();\n if (!trimmed) {\n return;\n }\n\n if (this.matchSelection) {\n const exact = this.data.find((d) => (d.label || '').toLowerCase() === trimmed.toLowerCase());\n if (!exact) {\n this.query = '';\n if (!this.multiSelect) {\n this.clearSelection();\n }\n } else if (!this.multiSelect) {\n this.selected = [exact];\n this.selectionChange.emit(this.selected);\n this.selectedItems.emit(this.selected);\n this.propagateControlValue();\n }\n return;\n }\n\n if (this.updateOnBlur && !this.multiSelect && this.selected.length === 0) {\n const added: NgbTypeaheadItem = { id: trimmed, label: trimmed, value: trimmed };\n this.selected = [added];\n this.onAdd.emit(added);\n this.selectionChange.emit(this.selected);\n this.selectedItems.emit(this.selected);\n this.propagateControlValue();\n }\n }\n\n private splitBySeparators(value: string): { tokensToAdd: string[]; remaining: string } {\n const separators = Array.isArray(this.separator) ? this.separator : [this.separator];\n const safe = separators.filter((s) => s != null && `${s}`.length > 0).map((s) => `${s}`.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'));\n if (!safe.length) {\n return { tokensToAdd: [], remaining: value };\n }\n const regex = new RegExp(`(?:${safe.join('|')})`);\n if (!regex.test(value)) {\n return { tokensToAdd: [], remaining: value };\n }\n const parts = value.split(new RegExp(`(?:${safe.join('|')})`, 'g')).map((p) => p.trim());\n const endsWithSeparator = separators.some((sep) => value.endsWith(sep));\n const tokensToAdd = (endsWithSeparator ? parts : parts.slice(0, -1)).filter(Boolean);\n const remaining = endsWithSeparator ? '' : (parts[parts.length - 1] || '');\n return { tokensToAdd, remaining };\n }\n\n private addToken(raw: string) {\n const token = (raw || '').trim();\n if (!this.chips || !this.multiSelect) return;\n if (!token) return;\n\n const match = this.data.find((d) => (d.label || '').trim().toLowerCase() === token.toLowerCase());\n const item: NgbTypeaheadItem = match ?? { id: token, label: token, value: token };\n\n if (this.matchSelection && !match) {\n this.query = '';\n return;\n }\n\n if (this.selected.some((s) => s.id === item.id)) {\n this.query = '';\n return;\n }\n\n this.selected = [...this.selected, item];\n this.onAdd.emit(item);\n this.propagateControlValue();\n this.selectedItems.emit(this.selected);\n this.selectionChange.emit(this.selected);\n this.query = '';\n this.keepOpenOnEmpty = true;\n this.applyFilter('');\n }\n\n private propagateControlValue() {\n if (this.multiSelect) {\n const next = this.selected.map((item) => (item.value !== undefined ? item.value : item));\n this.controlValue = next;\n this.onControlChange(next);\n return;\n }\n const first = this.selected[0];\n const next = first ? (first.value !== undefined ? first.value : first) : null;\n this.controlValue = next;\n this.onControlChange(next);\n }\n\n private coerceToItem(value: any): NgbTypeaheadItem | null {\n if (value == null) return null;\n if (typeof value === 'object' && (value as NgbTypeaheadItem).id != null && (value as NgbTypeaheadItem).label != null) {\n return value as NgbTypeaheadItem;\n }\n const match = this.data.find((d) => d.value === value || d.id === value || (d.label || '').toLowerCase() === `${value}`.toLowerCase());\n if (match) return match;\n return { id: `${value}`, label: `${value}`, value };\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n Output,\n EventEmitter,\n QueryList,\n ViewChildren,\n ElementRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgbTreeNode, NgbTreeType, NgbTreeI18n } from './tree.types';\n\n@Component({\n selector: 'ngb-tree',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"d-flex gap-2 mb-2\">\n <button type=\"button\" class=\"btn btn-sm btn-outline-secondary\" (click)=\"expandAllNodes()\" [attr.aria-label]=\"i18n?.expandAll || 'Expand all'\">\n {{ i18n?.expandAll || 'Expand all' }}\n </button>\n <button type=\"button\" class=\"btn btn-sm btn-outline-secondary\" (click)=\"collapseAllNodes()\" [attr.aria-label]=\"i18n?.collapseAll || 'Collapse all'\">\n {{ i18n?.collapseAll || 'Collapse all' }}\n </button>\n </div>\n\n <ul class=\"list-unstyled mb-0\" role=\"tree\" [attr.aria-label]=\"i18n?.treeLabel || 'Tree'\">\n @for (node of nodes; track trackById($index, node); let i = $index) {\n <ng-container *ngTemplateOutlet=\"renderNode; context: { $implicit: node, level: 1, index: i }\"></ng-container>\n }\n </ul>\n\n <ng-template #renderNode let-node let-level=\"level\" let-index=\"index\">\n <li\n class=\"d-flex align-items-start\"\n role=\"treeitem\"\n [attr.aria-expanded]=\"hasChildren(node) ? !!node.expanded : null\"\n [attr.aria-level]=\"level\"\n >\n @if (hasChildren(node)) {\n <button\n #nodeBtn\n type=\"button\"\n class=\"btn btn-sm px-1\"\n (click)=\"toggleNode(node)\"\n (keydown)=\"onNodeKeydown($event, node)\"\n [attr.aria-label]=\"(node.expanded ? i18n?.collapse || 'Collapse' : i18n?.expand || 'Expand') + ' ' + node.label\"\n >\n @if (type === 'json') {\n <span class=\"bi\" [ngClass]=\"node.expanded ? minusIcon : plusIcon\" aria-hidden=\"true\"></span>\n } @else {\n <span class=\"bi\" [ngClass]=\"node.expanded ? collapseIcon : expandIcon\" aria-hidden=\"true\"></span>\n }\n </button>\n } @else {\n <span class=\"d-inline-block px-1\" style=\"width: 1.5rem;\"></span>\n }\n\n <label class=\"form-check d-inline-flex align-items-center gap-2 flex-grow-1 mb-0\">\n @if (showCheckbox) {\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n [checked]=\"!!node.selected\"\n [disabled]=\"node.disabled\"\n (change)=\"toggleSelection(node, $event.target.checked)\"\n [attr.aria-label]=\"(i18n?.select || 'Select') + ' ' + node.label\"\n />\n }\n <span class=\"form-check-label\">{{ node.label }}</span>\n </label>\n </li>\n\n @if (node.expanded && hasChildren(node)) {\n <ul\n class=\"list-unstyled ms-4\"\n role=\"group\"\n >\n @for (child of node.children; track trackById($index, child); let ci = $index) {\n <ng-container *ngTemplateOutlet=\"renderNode; context: { $implicit: child, level: level + 1, index: ci }\"></ng-container>\n }\n </ul>\n }\n </ng-template>\n `,\n})\nexport class NgbTreeComponent {\n @Input() nodes: NgbTreeNode[] = [];\n @Input() type: NgbTreeType = 'text';\n @Input() showCheckbox = false;\n @Input() i18n?: NgbTreeI18n;\n @Input() expandIcon = 'bi-caret-right-fill';\n @Input() collapseIcon = 'bi-caret-down-fill';\n @Input() plusIcon = 'bi-file-plus-fill';\n @Input() minusIcon = 'bi-file-minus-fill';\n\n @Output() expand = new EventEmitter<NgbTreeNode>();\n @Output() collapse = new EventEmitter<NgbTreeNode>();\n @Output() expandAll = new EventEmitter<void>();\n @Output() collapseAll = new EventEmitter<void>();\n @Output() selectionChange = new EventEmitter<NgbTreeNode[]>();\n\n @ViewChildren('nodeBtn', { read: ElementRef }) nodeButtons!: QueryList<ElementRef<HTMLButtonElement>>;\n\n trackById = (_: number, node: NgbTreeNode) => node.id;\n\n hasChildren(node: NgbTreeNode) {\n return Array.isArray(node.children) && node.children.length > 0;\n }\n\n toggleNode(node: NgbTreeNode) {\n if (!this.hasChildren(node)) return;\n node.expanded = !node.expanded;\n node.expanded ? this.expand.emit(node) : this.collapse.emit(node);\n }\n\n toggleSelection(node: NgbTreeNode, value: boolean) {\n node.selected = value;\n this.selectionChange.emit(this.collectSelection(this.nodes));\n }\n\n expandAllNodes() {\n this.setExpanded(this.nodes, true);\n this.expandAll.emit();\n }\n\n collapseAllNodes() {\n this.setExpanded(this.nodes, false);\n this.collapseAll.emit();\n }\n\n onNodeKeydown(event: KeyboardEvent, node: NgbTreeNode) {\n const key = event.key;\n const target = event.target as HTMLElement;\n if (key === 'Enter' || key === ' ') {\n event.preventDefault();\n this.toggleNode(node);\n } else if (key === 'ArrowRight') {\n if (this.hasChildren(node) && !node.expanded) {\n event.preventDefault();\n node.expanded = true;\n this.expand.emit(node);\n }\n } else if (key === 'ArrowLeft') {\n if (this.hasChildren(node) && node.expanded) {\n event.preventDefault();\n node.expanded = false;\n this.collapse.emit(node);\n }\n } else if (key === 'ArrowDown' || key === 'ArrowUp') {\n event.preventDefault();\n this.focusSibling(target, key === 'ArrowDown' ? 1 : -1);\n }\n }\n\n private focusSibling(current: HTMLElement, direction: 1 | -1) {\n const buttons = this.nodeButtons?.toArray().map((b) => b.nativeElement) || [];\n const idx = buttons.indexOf(current as HTMLButtonElement);\n if (idx === -1) return;\n const next = buttons[idx + direction];\n next?.focus();\n }\n\n private setExpanded(nodes: NgbTreeNode[], expanded: boolean) {\n for (const n of nodes) {\n if (this.hasChildren(n)) {\n n.expanded = expanded;\n this.setExpanded(n.children || [], expanded);\n }\n }\n }\n\n private collectSelection(nodes: NgbTreeNode[], acc: NgbTreeNode[] = []): NgbTreeNode[] {\n for (const n of nodes) {\n if (n.selected) acc.push(n);\n if (this.hasChildren(n)) this.collectSelection(n.children!, acc);\n }\n return acc;\n }\n}\n","/// <reference path=\"./types/optional-peer-deps.d.ts\" />\nexport * from './datagrid';\nexport * from './drag-drop';\nexport * from './pagination';\nexport * from './stepper';\nexport * from './splitter';\nexport * from './typeahead';\nexport * from './tree';\nexport * from './chips';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i1.Datagrid","i1.NgbDndListDirective","i1.NgbDndItemDirective"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"angular-bootstrap-ngbootstrap.mjs","sources":["../../../src/pagination/src/pagination/pagination.component.ts","../../../src/pagination/src/pagination/pager-settings.ts","../../../src/pagination/src/pagination/pager.component.ts","../../../src/datagrid/src/models/datagrid-pageable.ts","../../../src/datagrid/src/directives/datagrid-templates.directive.ts","../../../src/datagrid/src/models/filtering.ts","../../../src/datagrid/src/data-operations.ts","../../../src/datagrid/src/services/export.services.ts","../../../src/datagrid/src/services/editing.service.ts","../../../src/datagrid/src/adapters/jsdf.adapter.ts","../../../src/datagrid/src/adapters/browser-excel-export.adapter.ts","../../../src/datagrid/src/directives/export-button.directive.ts","../../../src/datagrid/src/directives/grid-column.directive.ts","../../../src/datagrid/src/foundation/datagrid-button.directive.ts","../../../src/datagrid/src/foundation/datagrid-control.directive.ts","../../../src/datagrid/src/datagrid/components/datagrid-add-row.component.ts","../../../src/datagrid/src/datagrid/components/datagrid-colgroup.component.ts","../../../src/datagrid/src/datagrid/components/datagrid-data-row.component.ts","../../../src/datagrid/src/datagrid/components/datagrid-detail-row.component.ts","../../../src/datagrid/src/datagrid/components/datagrid-footer.component.ts","../../../src/datagrid/src/foundation/datagrid-field-shell.component.ts","../../../src/datagrid/src/datagrid/components/datagrid-header.component.ts","../../../src/datagrid/src/foundation/datagrid-surface-card.component.ts","../../../src/datagrid/src/foundation/datagrid-floating-panel.directive.ts","../../../src/datagrid/src/datagrid/components/datagrid-filter-menu-panel.component.ts","../../../src/datagrid/src/datagrid/components/datagrid-row-filter-operator-panel.component.ts","../../../src/datagrid/src/datagrid/components/datagrid-toolbar.component.ts","../../../src/datagrid/src/datagrid/components/datagrid-editing-toolbar.component.ts","../../../src/datagrid/src/datagrid/components/datagrid-external-editor.component.ts","../../../src/datagrid/src/datagrid/directives/grid-highlight.directive.ts","../../../src/drag-drop/src/a11y/live-announcer.service.ts","../../../src/drag-drop/src/i18n/dnd-i18n.ts","../../../src/drag-drop/src/service/drag-state.service.ts","../../../src/datagrid/src/datagrid/directives/colgroup-sync.directive.ts","../../../src/drag-drop/src/directive/dnd-list.directive.ts","../../../src/drag-drop/src/directive/dnd-item.directive.ts","../../../src/datagrid/src/layout-toolbar/datagrid-host.token.ts","../../../src/datagrid/src/models/datagrid-labels.ts","../../../src/datagrid/src/datagrid/datagrid.component.ts","../../../src/datagrid/src/datagrid/datagrid.component.html","../../../src/datagrid/src/layout-toolbar/datagrid-tool-host.ts","../../../src/datagrid/src/layout-toolbar/datagrid-layout-toolbar-coordinator.ts","../../../src/datagrid/src/layout-toolbar/datagrid-column-chooser-tool.component.ts","../../../src/datagrid/src/layout-toolbar/datagrid-filter-tool.component.ts","../../../src/datagrid/src/layout-toolbar/datagrid-sort-tool.component.ts","../../../src/datagrid/src/layout-toolbar/datagrid-layout-toolbar.component.ts","../../../src/datagrid/src/chart/data-chart.helpers.ts","../../../src/datagrid/src/chart/data-chart.component.ts","../../../src/datagrid/src/chart/data-sparkline.component.ts","../../../src/datagrid/src/chart/grid-chart.component.ts","../../../src/datagrid/src/search/advanced-search.component.ts","../../../src/datagrid/src/search/search-highlight.component.ts","../../../src/datagrid/src/datagrid.types.ts","../../../src/datagrid/src/theme/datagrid-theme-picker.component.ts","../../../src/drag-drop/src/directive/dnd-handle.directive.ts","../../../src/drag-drop/src/json-preview/json-preview.component.ts","../../../src/stepper/src/stepper/step-label.directive.ts","../../../src/stepper/src/stepper/stepper.component.ts","../../../src/stepper/src/stepper/stepper.component.html","../../../src/splitter/src/splitter/splitter-pane.component.ts","../../../src/splitter/src/splitter/splitter.component.ts","../../../src/chips/src/chips/chips.component.ts","../../../src/typeahead/src/typeahead/typeahead.component.ts","../../../src/tree/src/tree/tree.component.ts","../../../src/index.ts","../../../src/angular-bootstrap-ngbootstrap.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'ngb-pagination',\n standalone: true,\n imports: [CommonModule, FormsModule],\n template: `\n @if (totalPages >= 1) {\n <nav\n class=\"ngb-pagination\"\n [class.ngb-pagination--responsive]=\"responsive\"\n aria-label=\"Pagination\"\n >\n @if (pagerType === 'input') {\n <div class=\"ngb-pagination__input-group\">\n @if (previousNext) {\n <button\n class=\"btn btn-sm btn-outline-secondary\"\n type=\"button\"\n [disabled]=\"page === 1\"\n (click)=\"go(page - 1)\"\n aria-label=\"Previous page\"\n >\n ‹\n </button>\n }\n <label class=\"ngb-pagination__input-label\">\n <span class=\"visually-hidden\">Page</span>\n <input\n class=\"form-control form-control-sm ngb-pagination__page-input\"\n type=\"number\"\n [min]=\"1\"\n [max]=\"totalPages\"\n [ngModel]=\"page\"\n (ngModelChange)=\"go($event)\"\n aria-label=\"Current page\"\n />\n </label>\n <span class=\"ngb-pagination__input-total\" aria-hidden=\"true\">/ {{ totalPages }}</span>\n @if (previousNext) {\n <button\n class=\"btn btn-sm btn-outline-secondary\"\n type=\"button\"\n [disabled]=\"page === totalPages\"\n (click)=\"go(page + 1)\"\n aria-label=\"Next page\"\n >\n ›\n </button>\n }\n </div>\n } @else {\n <ul class=\"pagination pagination-sm justify-content-center mb-0\">\n @if (previousNext) {\n <li class=\"page-item\" [class.disabled]=\"page === 1\">\n <button\n class=\"page-link\"\n type=\"button\"\n (click)=\"go(page - 1)\"\n aria-label=\"Previous page\"\n >\n <span aria-hidden=\"true\">«</span>\n </button>\n </li>\n }\n\n @for (p of pages; track p) {\n <li\n class=\"page-item\"\n [class.active]=\"p === page\"\n [class.disabled]=\"p === '…'\"\n >\n @if (p === '…') {\n <span class=\"page-link\" aria-hidden=\"true\">…</span>\n } @else {\n <button\n class=\"page-link\"\n type=\"button\"\n (click)=\"go(p)\"\n [attr.aria-current]=\"p === page ? 'page' : null\"\n >\n {{ p }}\n </button>\n }\n </li>\n }\n\n @if (previousNext) {\n <li class=\"page-item\" [class.disabled]=\"page === totalPages\">\n <button\n class=\"page-link\"\n type=\"button\"\n (click)=\"go(page + 1)\"\n aria-label=\"Next page\"\n >\n <span aria-hidden=\"true\">»</span>\n </button>\n </li>\n }\n </ul>\n }\n </nav>\n }\n `,\n styles: [`\n .ngb-pagination--responsive .pagination {\n flex-wrap: wrap;\n justify-content: center;\n gap: 0.15rem;\n }\n\n .ngb-pagination .page-link,\n .ngb-pagination .btn {\n border-color: var(--dg-pager-control-border, var(--bs-border-color));\n background-color: var(--dg-pager-control-bg, var(--bs-body-bg));\n color: var(--dg-pager-link-text, var(--dg-primary, var(--bs-primary)));\n }\n\n .ngb-pagination .page-link:hover,\n .ngb-pagination .btn:hover {\n border-color: var(--dg-border-strong, var(--bs-border-color));\n background-color: var(--dg-pager-control-hover-bg, var(--bs-tertiary-bg));\n color: var(--dg-primary-hover, var(--bs-link-hover-color));\n }\n\n .ngb-pagination .page-item.active .page-link {\n border-color: var(--dg-pager-active-border, var(--dg-primary, var(--bs-primary)));\n background-color: var(--dg-pager-active-bg, var(--dg-primary, var(--bs-primary)));\n color: var(--dg-pager-active-text, var(--dg-on-primary, #fff));\n }\n\n .ngb-pagination .page-item.disabled .page-link,\n .ngb-pagination .btn:disabled {\n border-color: var(--dg-pager-control-border, var(--bs-border-color));\n background-color: var(--dg-pager-control-bg, var(--bs-body-bg));\n color: var(--dg-text-subtle, var(--bs-secondary-color));\n opacity: 0.55;\n }\n\n .ngb-pagination__input-group {\n display: inline-flex;\n align-items: center;\n gap: 0.35rem;\n flex-wrap: wrap;\n justify-content: center;\n }\n\n .ngb-pagination__page-input {\n width: 4.25rem;\n text-align: center;\n border-color: var(--dg-pager-control-border, var(--bs-border-color));\n background-color: var(--dg-pager-control-bg, var(--bs-body-bg));\n color: var(--dg-text, var(--bs-body-color));\n }\n\n .ngb-pagination__input-label {\n margin: 0;\n }\n\n .ngb-pagination__input-total {\n font-size: 0.875rem;\n color: var(--dg-pager-text, var(--bs-secondary-color));\n white-space: nowrap;\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgbPaginationComponent {\n @Input() page = 1;\n @Input() pageSize = 10;\n @Input() collectionSize = 0;\n /** @deprecated Use `buttonCount`. Kept for compatibility. */\n @Input() maxSize = 5;\n @Input() buttonCount?: number;\n @Input() previousNext = true;\n @Input() pagerType: 'numeric' | 'input' = 'numeric';\n @Input() responsive = true;\n @Output() pageChange = new EventEmitter<number>();\n\n get effectiveButtonCount(): number {\n const count = this.buttonCount ?? this.maxSize;\n return Math.max(3, count | 0);\n }\n\n get totalPages(): number {\n return Math.max(1, Math.ceil(this.collectionSize / Math.max(1, this.pageSize)));\n }\n\n get pages(): Array<number | '…'> {\n const total = this.totalPages;\n const max = this.effectiveButtonCount;\n if (total <= max) return Array.from({ length: total }, (_, i) => i + 1);\n\n const half = Math.floor(max / 2);\n let start = Math.max(1, this.page - half);\n let end = start + max - 1;\n if (end > total) {\n end = total;\n start = end - max + 1;\n }\n\n const nums = Array.from({ length: end - start + 1 }, (_, i) => start + i);\n const head = start > 1 ? [1, start > 2 ? ('…' as const) : 2] : [];\n const tail = end < total ? [end < total - 1 ? ('…' as const) : total - 1, total] : [];\n return [...head, ...nums, ...tail];\n }\n\n go(p: number | string): void {\n const next = typeof p === 'string' ? Number(p) : p;\n if (!Number.isFinite(next)) return;\n const page = Math.trunc(next);\n if (page < 1 || page > this.totalPages || page === this.page) return;\n this.pageChange.emit(page);\n }\n}\n","export type NgbPagerType = 'numeric' | 'input';\n\n/**\n * Responsive pager density based on container width.\n * - `full`: info, pagination, and page-size controls\n * - `compact`: hides range info\n * - `minimal`: hides range info and page-size controls (pagination remains)\n */\nexport type NgbPagerDensity = 'full' | 'compact' | 'minimal';\n\n/** Width breakpoints (px) for {@link ngbResolvePagerDensity}. */\nexport const NGB_PAGER_BREAKPOINTS = {\n fullMinWidth: 520,\n compactMinWidth: 360,\n} as const;\n\n/** Configuration for {@link NgbPagerComponent}. */\nexport interface NgbPagerSettings {\n /** Maximum numeric page buttons before ellipsis collapse. Default `10`. */\n buttonCount?: number;\n /** Shows the current range and total record count. Default `true`. */\n info?: boolean;\n /**\n * Page-size presets. `false` hides the control (set `pageSize` yourself).\n * The active `pageSize` is included when it is not already in the list.\n */\n pageSizes?: false | number[];\n /** Shows previous/next pager buttons. Default `true`. */\n previousNext?: boolean;\n /** `numeric` (page buttons) or `input` (type a page number). Default `numeric`. */\n type?: NgbPagerType;\n /**\n * When `true` (default), hides info and page-size controls as the container narrows.\n * When `false`, all controls stay visible and wrap onto new rows.\n */\n responsive?: boolean;\n}\n\nexport const NGB_PAGER_DEFAULT_SETTINGS: Required<\n Omit<NgbPagerSettings, 'pageSizes'>\n> & { pageSizes: false | number[] } = {\n buttonCount: 10,\n info: true,\n pageSizes: false,\n previousNext: true,\n type: 'numeric',\n responsive: true,\n};\n\nexport function ngbResolvePagerSettings(\n settings: boolean | NgbPagerSettings | null | undefined\n): NgbPagerSettings | null {\n if (!settings) return null;\n const overrides = typeof settings === 'object' ? settings : {};\n return { ...NGB_PAGER_DEFAULT_SETTINGS, ...overrides };\n}\n\nexport function ngbResolvePagerDensity(width: number): NgbPagerDensity {\n if (width >= NGB_PAGER_BREAKPOINTS.fullMinWidth) return 'full';\n if (width >= NGB_PAGER_BREAKPOINTS.compactMinWidth) return 'compact';\n return 'minimal';\n}\n\nexport function ngbResolvePagerPageSizeOptions(\n pageSizes: false | number[] | undefined,\n pageSize: number\n): number[] {\n const presets = Array.isArray(pageSizes) && pageSizes.length ? pageSizes : [];\n const options = presets\n .map((value) => Number(value))\n .filter((value) => Number.isFinite(value) && value > 0);\n const size = Number(pageSize);\n if (Number.isFinite(size) && size > 0 && !options.includes(size)) {\n options.push(size);\n }\n return options.sort((a, b) => a - b);\n}\n\nexport function ngbPagerButtonCountForDensity(\n base: number,\n density: NgbPagerDensity,\n responsive: boolean\n): number {\n if (!responsive) return base;\n if (density === 'minimal') return Math.min(base, 3);\n if (density === 'compact') return Math.min(base, 5);\n return base;\n}\n\nexport function ngbFormatPagerRangeLabel(\n start: number,\n end: number,\n total: number,\n template = '{start}–{end} of {total}'\n): string {\n return template\n .replace(/\\{start\\}/g, String(start))\n .replace(/\\{end\\}/g, String(end))\n .replace(/\\{total\\}/g, String(total));\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgbPaginationComponent } from './pagination.component';\nimport {\n NgbPagerDensity,\n NgbPagerSettings,\n ngbFormatPagerRangeLabel,\n ngbPagerButtonCountForDensity,\n ngbResolvePagerDensity,\n ngbResolvePagerPageSizeOptions,\n ngbResolvePagerSettings,\n} from './pager-settings';\n\n@Component({\n selector: 'ngb-pager',\n standalone: true,\n imports: [CommonModule, FormsModule, NgbPaginationComponent],\n template: `\n <div\n #pagerRoot\n class=\"ngb-pager\"\n [class.ngb-pager--wrap]=\"!responsiveEnabled\"\n [class.ngb-pager--responsive]=\"responsiveEnabled\"\n [class.ngb-pager--density-compact]=\"pagerDensity === 'compact' || pagerDensity === 'minimal'\"\n [class.ngb-pager--density-minimal]=\"pagerDensity === 'minimal'\"\n >\n @if (showInfoSetting) {\n <div\n class=\"ngb-pager__range ngb-pager__part--info small text-muted\"\n [class.ngb-pager__part--hidden]=\"!showInfo\"\n [attr.aria-hidden]=\"showInfo ? null : true\"\n >\n {{ displayInfoLabel }}\n </div>\n } @else {\n <div class=\"ngb-pager__range ngb-pager__part--info ngb-pager__part--spacer\" aria-hidden=\"true\"></div>\n }\n\n <div class=\"ngb-pager__pagination ngb-pager__part--nav\">\n <ngb-pagination\n [page]=\"page\"\n [pageSize]=\"pageSize\"\n [collectionSize]=\"collectionSize\"\n [buttonCount]=\"effectiveButtonCount\"\n [previousNext]=\"previousNextEnabled\"\n [pagerType]=\"pagerType\"\n [responsive]=\"!responsiveEnabled\"\n (pageChange)=\"onPageChange($event)\"\n >\n </ngb-pagination>\n </div>\n\n @if (showPageSizesSetting) {\n <div\n class=\"ngb-pager__page-size ngb-pager__part--sizes\"\n [class.ngb-pager__part--hidden]=\"!showPageSizes\"\n [attr.aria-hidden]=\"showPageSizes ? null : true\"\n >\n <label class=\"ngb-pager__page-size-label\" [attr.for]=\"pageSizeSelectId\">\n {{ rowsPerPageLabel }}\n </label>\n <select\n [id]=\"pageSizeSelectId\"\n class=\"form-select form-select-sm ngb-pager__page-size-select\"\n [ngModel]=\"pageSize\"\n (ngModelChange)=\"onPageSizeChange($event)\"\n [disabled]=\"!showPageSizes\"\n [attr.aria-label]=\"rowsPerPageLabel\"\n >\n @for (s of resolvedPageSizeOptions; track s) {\n <option [ngValue]=\"s\">{{ s }}</option>\n }\n </select>\n </div>\n } @else {\n <div class=\"ngb-pager__page-size ngb-pager__part--sizes ngb-pager__part--spacer\" aria-hidden=\"true\"></div>\n }\n </div>\n `,\n styles: [`\n .ngb-pager {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);\n align-items: center;\n gap: 0.5rem 0.75rem;\n width: 100%;\n color: var(--dg-pager-text, var(--bs-secondary-color));\n }\n\n .ngb-pager__range {\n justify-self: start;\n min-width: 0;\n color: var(--dg-pager-text, var(--bs-secondary-color)) !important;\n }\n\n .ngb-pager__pagination {\n display: flex;\n justify-content: center;\n justify-self: center;\n min-width: 0;\n }\n\n .ngb-pager__page-size {\n display: inline-flex;\n align-items: center;\n justify-self: end;\n gap: 0.5rem;\n min-width: 0;\n }\n\n .ngb-pager__page-size-label {\n margin: 0;\n white-space: nowrap;\n font-size: 0.875rem;\n line-height: 1.25;\n color: var(--dg-pager-text, var(--bs-secondary-color));\n }\n\n .ngb-pager__page-size-select {\n width: auto;\n min-width: 4.5rem;\n flex: 0 0 auto;\n border-color: var(--dg-pager-control-border, var(--bs-border-color));\n background-color: var(--dg-pager-control-bg, var(--bs-body-bg));\n background-image: var(--dg-pager-select-icon);\n background-position: right 0.75rem center;\n background-repeat: no-repeat;\n background-size: 16px 12px;\n color: var(--dg-text, var(--bs-body-color));\n padding-right: 2.25rem;\n appearance: none;\n }\n\n .ngb-pager--wrap {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n }\n\n .ngb-pager--wrap .ngb-pager__range {\n flex: 1 1 100%;\n justify-self: auto;\n }\n\n .ngb-pager--wrap .ngb-pager__pagination {\n flex: 1 1 100%;\n justify-content: center;\n justify-self: auto;\n }\n\n .ngb-pager--wrap .ngb-pager__page-size {\n flex: 0 0 auto;\n justify-self: auto;\n }\n\n .ngb-pager--responsive {\n flex-wrap: nowrap;\n overflow: hidden;\n }\n\n .ngb-pager__part--hidden {\n visibility: hidden;\n pointer-events: none;\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgbPagerComponent implements AfterViewInit, OnDestroy {\n private static nextId = 0;\n\n private readonly uid = NgbPagerComponent.nextId++;\n\n readonly pageSizeSelectId = `ngb-pager-page-size-${this.uid}`;\n\n pagerDensity: NgbPagerDensity = 'full';\n\n private resizeObserver?: ResizeObserver;\n\n @ViewChild('pagerRoot') pagerRoot?: ElementRef<HTMLElement>;\n\n @Input() page = 1;\n @Input() pageSize = 10;\n @Input() collectionSize = 0;\n @Input() settings: boolean | NgbPagerSettings | null = true;\n /** Overrides the default range label when `info` is enabled. */\n @Input() infoLabel?: string;\n @Input() rangeLabelTemplate = '{start}–{end} of {total}';\n @Input() rowsPerPageLabel = 'Rows per page';\n /** When set, overrides `settings.responsive`. */\n @Input() responsive?: boolean;\n\n @Output() pageChange = new EventEmitter<number>();\n @Output() pageSizeChange = new EventEmitter<number>();\n\n constructor(private readonly cdr: ChangeDetectorRef) {}\n\n get resolved(): NgbPagerSettings {\n return ngbResolvePagerSettings(this.settings) ?? ngbResolvePagerSettings(true)!;\n }\n\n get responsiveEnabled(): boolean {\n return this.responsive ?? this.resolved.responsive !== false;\n }\n\n get showInfoSetting(): boolean {\n return this.resolved.info !== false;\n }\n\n get showPageSizesSetting(): boolean {\n const pageSizes = this.resolved.pageSizes;\n return Array.isArray(pageSizes) && pageSizes.length > 0;\n }\n\n get showInfo(): boolean {\n return this.pagerDensity === 'full';\n }\n\n get showPageSizes(): boolean {\n return this.pagerDensity !== 'minimal';\n }\n\n get previousNextEnabled(): boolean {\n return this.resolved.previousNext !== false;\n }\n\n get pagerType(): 'numeric' | 'input' {\n return this.resolved.type ?? 'numeric';\n }\n\n get effectiveButtonCount(): number {\n const base = this.resolved.buttonCount ?? 10;\n return ngbPagerButtonCountForDensity(base, this.pagerDensity, this.responsiveEnabled);\n }\n\n get resolvedPageSizeOptions(): number[] {\n return ngbResolvePagerPageSizeOptions(this.resolved.pageSizes, this.pageSize);\n }\n\n get displayInfoLabel(): string {\n if (this.infoLabel != null && this.infoLabel !== '') {\n return this.infoLabel;\n }\n const total = this.collectionSize;\n const start = total ? (this.page - 1) * this.pageSize + 1 : 0;\n const end = Math.min(this.page * this.pageSize, total);\n return ngbFormatPagerRangeLabel(start, end, total, this.rangeLabelTemplate);\n }\n\n ngAfterViewInit(): void {\n this.observeWidth();\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n }\n\n onPageChange(page: number): void {\n this.pageChange.emit(page);\n }\n\n onPageSizeChange(size: number): void {\n this.pageSizeChange.emit(size);\n }\n\n private observeWidth(): void {\n if (!this.responsiveEnabled || !this.pagerRoot?.nativeElement) {\n this.pagerDensity = 'full';\n return;\n }\n\n const element = this.pagerRoot.nativeElement;\n const apply = (width: number) => {\n const next = ngbResolvePagerDensity(width);\n if (next !== this.pagerDensity) {\n this.pagerDensity = next;\n this.cdr.markForCheck();\n }\n };\n\n apply(element.getBoundingClientRect().width);\n\n if (typeof ResizeObserver === 'undefined') {\n return;\n }\n\n this.resizeObserver = new ResizeObserver((entries) => {\n const width = entries[0]?.contentRect.width ?? element.getBoundingClientRect().width;\n apply(width);\n });\n this.resizeObserver.observe(element);\n }\n}\n","import {\n NGB_PAGER_BREAKPOINTS,\n NGB_PAGER_DEFAULT_SETTINGS,\n NgbPagerDensity,\n NgbPagerSettings,\n NgbPagerType,\n ngbResolvePagerDensity,\n} from '../../../pagination';\n\nexport type NgbDatagridPagerType = NgbPagerType;\n\nexport type NgbDatagridPagerPosition = 'top' | 'bottom' | 'both';\n\nexport type NgbDatagridPagerDensity = NgbPagerDensity;\n\n/** @deprecated Use {@link NGB_PAGER_BREAKPOINTS}. */\nexport const NGB_DATAGRID_PAGER_BREAKPOINTS = NGB_PAGER_BREAKPOINTS;\n\n/** Pager configuration for {@link Datagrid} via `[pageable]`. */\nexport interface NgbDatagridPageableSettings extends NgbPagerSettings {\n /** Pager placement relative to the table. Default `bottom`. */\n position?: NgbDatagridPagerPosition;\n}\n\nexport const NGB_DATAGRID_DEFAULT_PAGEABLE: Required<\n Omit<NgbDatagridPageableSettings, 'pageSizes'>\n> & { pageSizes: false | number[] } = {\n ...NGB_PAGER_DEFAULT_SETTINGS,\n position: 'bottom',\n};\n\nexport { ngbResolvePagerDensity };\n\nexport function ngbResolvePageableSettings(\n pageable: boolean | NgbDatagridPageableSettings | null | undefined,\n legacy?: { enablePagination?: boolean; pageSizeOptions?: number[] }\n): NgbDatagridPageableSettings | null {\n if (pageable) {\n const overrides = typeof pageable === 'object' ? pageable : {};\n return { ...NGB_DATAGRID_DEFAULT_PAGEABLE, ...overrides };\n }\n if (legacy?.enablePagination) {\n return {\n ...NGB_DATAGRID_DEFAULT_PAGEABLE,\n pageSizes: legacy.pageSizeOptions?.length ? legacy.pageSizeOptions : [5, 10, 25, 50],\n };\n }\n return null;\n}\n\n/** Settings for {@link NgbPagerComponent} (excludes grid-only `position`). */\nexport function ngbDatagridPagerSettings(\n pageable: NgbDatagridPageableSettings\n): NgbPagerSettings {\n const { position: _position, ...settings } = pageable;\n return settings;\n}\n\nexport function ngbResolveDatagridPagerSettings(\n pageable: boolean | NgbDatagridPageableSettings | null | undefined,\n legacy?: { enablePagination?: boolean; pageSizeOptions?: number[] }\n): NgbPagerSettings | null {\n const resolved = ngbResolvePageableSettings(pageable, legacy);\n return resolved ? ngbDatagridPagerSettings(resolved) : null;\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\nimport { AbstractControl, FormGroup } from '@angular/forms';\nimport { ColumnDef } from '../models/column-def';\nimport { NgbCompositeFilterDescriptor, NgbFilterDescriptor, NgbFilterOperator } from '../models/filtering';\n\nexport interface CellCtx<T = any> { $implicit: any; row: T; col: ColumnDef<T>; index: number; }\nexport interface EditCtx<T = any> { $implicit: AbstractControl | null; control: AbstractControl | null; row: T; col: ColumnDef<T>; form: FormGroup; index: number; isNew: boolean; }\nexport interface FilterCtx<T = any> {\n $implicit: AbstractControl | null;\n control: AbstractControl | null;\n col: ColumnDef<T>;\n /** Column field name (same as `col.field`). */\n field: string;\n descriptor: NgbFilterDescriptor | null;\n /** Current composite filter root (clone). Use with `filterChange` for custom filter templates. */\n filter: NgbCompositeFilterDescriptor;\n operators: NgbFilterOperator[];\n setOperator: (operator: NgbFilterOperator) => void;\n setValue: (value: any) => void;\n clear: () => void;\n /** Replaces the grid filter state and emits `filterChange` when enabled. */\n filterChange: (filter: NgbCompositeFilterDescriptor) => void;\n /** Sets this column's field filter in the current descriptor and commits. */\n setFieldFilter: (operator: NgbFilterOperator, value?: any) => void;\n}\nexport interface GlobalFilterCtx { $implicit: AbstractControl; }\n\nexport interface PagerCtx<T = any> {\n grid: T;\n page: number;\n pageSize: number;\n total: number;\n pageCount: number;\n}\n\n@Directive({ selector: 'ng-template[ngbCell]', standalone: true })\nexport class NgbCellTemplate<T = any> {\n @Input('ngbCell') field!: string;\n constructor(public readonly template: TemplateRef<CellCtx<T>>) {}\n}\n\n@Directive({ selector: 'ng-template[ngbEditor]', standalone: true })\nexport class NgbEditorTemplate<T = any> {\n @Input('ngbEditor') field!: string;\n constructor(public readonly template: TemplateRef<EditCtx<T>>) {}\n}\n\n@Directive({ selector: 'ng-template[ngbFilter]', standalone: true })\nexport class NgbFilterTemplate<T = any> {\n @Input('ngbFilter') field!: string;\n constructor(public readonly template: TemplateRef<FilterCtx<T>>) {}\n}\n\n@Directive({ selector: 'ng-template[ngbFilterMenu]', standalone: true })\nexport class NgbFilterMenuTemplate<T = any> {\n @Input('ngbFilterMenu') field!: string;\n constructor(public readonly template: TemplateRef<FilterCtx<T>>) {}\n}\n\n@Directive({ selector: 'ng-template[ngbGlobalFilter]', standalone: true })\nexport class NgbGlobalFilterTemplate {\n constructor(public readonly template: TemplateRef<GlobalFilterCtx>) {}\n}\n\n\n@Directive({ selector: 'ng-template[ngbRowDetail]', standalone: true })\nexport class NgbRowDetailTemplate<T = any> {\n constructor(public readonly template: TemplateRef<{ $implicit: T; index: number }>) {}\n}\n\n@Directive({ selector: 'ng-template[ngbPager]', standalone: true })\nexport class NgbPagerTemplate<T = any> {\n constructor(public readonly template: TemplateRef<PagerCtx<T>>) {}\n}\n\n/** Handy constant to import in consumer apps */\nexport const DATAGRID_TEMPLATE_DIRECTIVES = [\n NgbCellTemplate,\n NgbEditorTemplate,\n NgbFilterTemplate,\n NgbFilterMenuTemplate,\n NgbGlobalFilterTemplate,\n NgbRowDetailTemplate,\n NgbPagerTemplate,\n];\n","import { ColumnType } from './column-def';\n\nexport type NgbFilterMode = 'row' | 'menu' | 'multi' | 'none';\nexport type NgbFilterable = boolean | 'row' | 'menu' | 'multi' | 'none';\n\nexport type NgbFilterOperator =\n | 'contains'\n | 'doesnotcontain'\n | 'eq'\n | 'neq'\n | 'startswith'\n | 'endswith'\n | 'gt'\n | 'gte'\n | 'lt'\n | 'lte'\n | 'isnull'\n | 'isnotnull'\n | 'isempty'\n | 'isnotempty';\n\nexport interface NgbFilterDescriptor {\n field: string;\n operator: NgbFilterOperator;\n value?: any;\n ignoreCase?: boolean;\n}\n\n/** Single condition in a column filter menu or layout-toolbar filter tool. */\nexport interface NgbMenuFilterConditionDraft {\n operator: NgbFilterOperator;\n value: any;\n}\n\nexport interface NgbCompositeFilterDescriptor {\n logic: 'and' | 'or';\n filters: Array<NgbFilterDescriptor | NgbCompositeFilterDescriptor>;\n}\n\nexport interface NgbFilterState {\n global?: string;\n root: NgbCompositeFilterDescriptor;\n}\n\nexport type NgbColumnFilterType = 'text' | 'numeric' | 'boolean' | 'date' | 'select';\n\nexport const NGB_TEXT_FILTER_OPERATORS: NgbFilterOperator[] = [\n 'eq',\n 'neq',\n 'contains',\n 'doesnotcontain',\n 'startswith',\n 'endswith'\n];\n\nexport const NGB_NUMERIC_FILTER_OPERATORS: NgbFilterOperator[] = [\n 'eq',\n 'neq',\n 'gte',\n 'gt',\n 'lte',\n 'lt'\n];\n\nexport const NGB_BOOLEAN_FILTER_OPERATORS: NgbFilterOperator[] = ['eq', 'neq', 'isnull', 'isnotnull'];\n\nexport const NGB_DATE_FILTER_OPERATORS: NgbFilterOperator[] = [\n 'eq',\n 'neq',\n 'gte',\n 'gt',\n 'lte',\n 'lt'\n];\n\nexport const NGB_SELECT_FILTER_OPERATORS: NgbFilterOperator[] = [\n 'contains',\n 'doesnotcontain',\n 'eq',\n 'neq',\n 'isempty',\n 'isnotempty',\n 'isnull',\n 'isnotnull'\n];\n\nexport function ngbColumnTypeToFilterType(type?: ColumnType): NgbColumnFilterType {\n switch (type) {\n case 'number':\n return 'numeric';\n case 'boolean':\n return 'boolean';\n case 'date':\n return 'date';\n case 'select':\n return 'select';\n default:\n return 'text';\n }\n}\n\nexport function ngbDefaultFilterOperator(type: NgbColumnFilterType): NgbFilterOperator {\n switch (type) {\n case 'numeric':\n case 'boolean':\n return 'eq';\n case 'date':\n return 'gte';\n default:\n return 'contains';\n }\n}\n\nexport function ngbAllowedFilterOperators(type: NgbColumnFilterType): NgbFilterOperator[] {\n switch (type) {\n case 'numeric':\n return [...NGB_NUMERIC_FILTER_OPERATORS];\n case 'boolean':\n return [...NGB_BOOLEAN_FILTER_OPERATORS];\n case 'date':\n return [...NGB_DATE_FILTER_OPERATORS];\n case 'select':\n return [...NGB_SELECT_FILTER_OPERATORS];\n default:\n return [...NGB_TEXT_FILTER_OPERATORS];\n }\n}\n\nexport function ngbFilterOperatorLabel(operator: NgbFilterOperator, type: NgbColumnFilterType = 'text'): string {\n if (type === 'date') {\n switch (operator) {\n case 'eq': return 'Is equal to';\n case 'neq': return 'Is not equal to';\n case 'gte': return 'Is after or equal to';\n case 'gt': return 'Is after';\n case 'lte': return 'Is before or equal to';\n case 'lt': return 'Is before';\n default: break;\n }\n }\n if (type === 'numeric') {\n switch (operator) {\n case 'eq': return 'Is equal to';\n case 'neq': return 'Is not equal to';\n case 'gte': return 'Is greater than or equal to';\n case 'gt': return 'Is greater than';\n case 'lte': return 'Is less than or equal to';\n case 'lt': return 'Is less than';\n default: break;\n }\n }\n if (type === 'text' || type === 'select') {\n switch (operator) {\n case 'eq': return 'Is equal to';\n case 'neq': return 'Is not equal to';\n case 'contains': return 'Contains';\n case 'doesnotcontain': return 'Does not contain';\n case 'startswith': return 'Starts with';\n case 'endswith': return 'Ends with';\n default: break;\n }\n }\n const labels: Record<NgbFilterOperator, string> = {\n contains: 'Contains',\n doesnotcontain: 'Does not contain',\n eq: 'Equals',\n neq: 'Does not equal',\n startswith: 'Starts with',\n endswith: 'Ends with',\n gt: 'Greater than',\n gte: 'Greater than or equal',\n lt: 'Less than',\n lte: 'Less than or equal',\n isnull: 'Is null',\n isnotnull: 'Is not null',\n isempty: 'Is empty',\n isnotempty: 'Is not empty'\n };\n return labels[operator];\n}\n\nexport function ngbIsCompositeFilter(\n filter: NgbFilterDescriptor | NgbCompositeFilterDescriptor\n): filter is NgbCompositeFilterDescriptor {\n return Array.isArray((filter as NgbCompositeFilterDescriptor).filters);\n}\n\n/** Recursively collects leaf filter descriptors from a composite filter tree. */\nexport function ngbFlattenFilterDescriptors(\n composite: NgbCompositeFilterDescriptor | null | undefined\n): NgbFilterDescriptor[] {\n if (!composite?.filters?.length) return [];\n const descriptors: NgbFilterDescriptor[] = [];\n for (const item of composite.filters) {\n if (ngbIsCompositeFilter(item)) {\n descriptors.push(...ngbFlattenFilterDescriptors(item));\n } else {\n descriptors.push(item);\n }\n }\n return descriptors;\n}\n\n/** Returns the first leaf descriptor for `field`, searching nested composite nodes. */\nexport function ngbFindFieldFilterDescriptor(\n composite: NgbCompositeFilterDescriptor | null | undefined,\n field: string\n): NgbFilterDescriptor | null {\n return ngbFlattenFilterDescriptors(composite).find((descriptor) => descriptor.field === field) ?? null;\n}\n\nfunction ngbWithoutFieldFilters(\n filters: Array<NgbFilterDescriptor | NgbCompositeFilterDescriptor>,\n field: string\n): Array<NgbFilterDescriptor | NgbCompositeFilterDescriptor> {\n return filters.filter((filter) => {\n if (ngbIsCompositeFilter(filter)) {\n return !filter.filters.every((item) => !ngbIsCompositeFilter(item) && item.field === field);\n }\n return filter.field !== field;\n });\n}\n\nexport function ngbOperatorRequiresFilterValue(operator: NgbFilterOperator): boolean {\n return !['isnull', 'isnotnull', 'isempty', 'isnotempty'].includes(operator);\n}\n\n/**\n * Returns a new composite filter with the field set (or removed when value is empty).\n * Supports manual `filterChange(root)` updates from custom filter templates.\n */\nexport function ngbSetFieldFilter(\n composite: NgbCompositeFilterDescriptor,\n field: string,\n operator: NgbFilterOperator,\n value?: any,\n options?: { requiresValue?: (operator: NgbFilterOperator) => boolean }\n): NgbCompositeFilterDescriptor {\n const requiresValue = options?.requiresValue ?? ngbOperatorRequiresFilterValue;\n const filters = ngbWithoutFieldFilters([...composite.filters], field);\n if (requiresValue(operator)) {\n const normalized = value === undefined ? null : value;\n if (normalized === null || normalized === '') {\n return { logic: composite.logic, filters };\n }\n filters.push({ field, operator, value: normalized, ignoreCase: true });\n } else {\n filters.push({ field, operator, ignoreCase: true });\n }\n return { logic: composite.logic, filters };\n}\n","import {\n NgbColumnFilterType,\n NgbCompositeFilterDescriptor,\n NgbFilterDescriptor,\n NgbFilterOperator,\n ngbColumnTypeToFilterType,\n ngbIsCompositeFilter,\n ngbOperatorRequiresFilterValue,\n} from './models/filtering';\nimport {\n NgbDataGridAggregateDescriptor,\n NgbDataGridAggregateResults,\n NgbDataGridDataResult,\n NgbDataGridProcessOptions,\n NgbDataGridSortDescriptor,\n NgbDataGridState,\n} from './datagrid.types';\n\ntype ColumnMeta<T> = NonNullable<NgbDataGridProcessOptions<T>['columns']>[number];\n\nconst EMPTY_FILTER: NgbCompositeFilterDescriptor = { logic: 'and', filters: [] };\n\nexport function ngbApplyDataGridOperations<T>(\n data: readonly T[] | null | undefined,\n options: NgbDataGridProcessOptions<T> = {},\n): NgbDataGridDataResult<T> {\n const state = options.state ?? {};\n const rows = [...(data ?? [])];\n const columns = options.columns ?? [];\n const filtered = applyGlobalFilter(\n applyCompositeFilter(rows, state.filter ?? EMPTY_FILTER, columns),\n state.globalFilter,\n options.globalFilterFields ?? columns.map((column) => String(column.field)),\n );\n const sorted = applySort(filtered, state.sort ?? []);\n const total = sorted.length;\n const aggregates = ngbCalculateDataGridAggregates(sorted, options.aggregates ?? []);\n const page = options.page === false ? sorted : applyPage(sorted, state);\n\n return {\n data: page,\n total,\n ...(Object.keys(aggregates).length ? { aggregates } : {}),\n };\n}\n\nexport function ngbCalculateDataGridAggregates<T>(\n data: readonly T[] | null | undefined,\n descriptors: readonly NgbDataGridAggregateDescriptor[] | null | undefined,\n): NgbDataGridAggregateResults {\n const rows = [...(data ?? [])];\n const results: NgbDataGridAggregateResults = {};\n\n for (const descriptor of descriptors ?? []) {\n const field = descriptor.field;\n const bucket = results[field] ?? {};\n const values = rows\n .map((row) => (row as Record<string, unknown>)?.[field])\n .filter((value) => value !== null && value !== undefined && value !== '');\n\n switch (descriptor.aggregate) {\n case 'count':\n bucket.count = values.length;\n break;\n case 'sum':\n bucket.sum = numericValues(values).reduce((sum, value) => sum + value, 0);\n break;\n case 'average': {\n const numbers = numericValues(values);\n bucket.average = numbers.length ? numbers.reduce((sum, value) => sum + value, 0) / numbers.length : null;\n break;\n }\n case 'min':\n bucket.min = minMax(values, 'min');\n break;\n case 'max':\n bucket.max = minMax(values, 'max');\n break;\n default:\n break;\n }\n\n results[field] = bucket;\n }\n\n return results;\n}\n\nfunction applyCompositeFilter<T>(\n rows: T[],\n filter: NgbCompositeFilterDescriptor,\n columns: readonly ColumnMeta<T>[],\n): T[] {\n if (!filter.filters.length) return rows;\n return rows.filter((row) => matchesComposite(row, filter, columns));\n}\n\nfunction matchesComposite<T>(\n row: T,\n filter: NgbCompositeFilterDescriptor,\n columns: readonly ColumnMeta<T>[],\n): boolean {\n if (!filter.filters.length) return true;\n const results = filter.filters.map((item) =>\n ngbIsCompositeFilter(item) ? matchesComposite(row, item, columns) : matchesDescriptor(row, item, columns),\n );\n return filter.logic === 'or' ? results.some(Boolean) : results.every(Boolean);\n}\n\nfunction matchesDescriptor<T>(\n row: T,\n descriptor: NgbFilterDescriptor,\n columns: readonly ColumnMeta<T>[],\n): boolean {\n const raw = (row as Record<string, unknown>)?.[descriptor.field];\n const column = columns.find((item) => String(item.field) === descriptor.field);\n const filterType = resolveFilterType(column, raw, descriptor.value);\n const cellValue = normalizeFilterValue(raw, filterType);\n const compareValue = normalizeFilterValue(descriptor.value, filterType);\n const ignoreCase = descriptor.ignoreCase ?? (filterType === 'text' || filterType === 'select');\n\n if (descriptor.operator === 'isnull') return raw == null;\n if (descriptor.operator === 'isnotnull') return raw != null;\n if (descriptor.operator === 'isempty') return raw === '';\n if (descriptor.operator === 'isnotempty') return raw !== '' && raw != null;\n if (ngbOperatorRequiresFilterValue(descriptor.operator) && (descriptor.value === '' || descriptor.value == null)) {\n return true;\n }\n\n if (filterType === 'numeric' || filterType === 'date') {\n const left = cellValue as number | null;\n const right = compareValue as number | null;\n if (left == null || right == null) return false;\n return compareByOperator(left, right, descriptor.operator);\n }\n\n if (filterType === 'boolean') {\n switch (descriptor.operator) {\n case 'eq':\n return cellValue === compareValue;\n case 'neq':\n return cellValue !== compareValue;\n default:\n return false;\n }\n }\n\n const left = String(cellValue ?? '');\n const right = String(compareValue ?? '');\n const normalizedLeft = ignoreCase ? left.toLowerCase() : left;\n const normalizedRight = ignoreCase ? right.toLowerCase() : right;\n switch (descriptor.operator) {\n case 'contains':\n return normalizedLeft.includes(normalizedRight);\n case 'doesnotcontain':\n return !normalizedLeft.includes(normalizedRight);\n case 'eq':\n return normalizedLeft === normalizedRight;\n case 'neq':\n return normalizedLeft !== normalizedRight;\n case 'startswith':\n return normalizedLeft.startsWith(normalizedRight);\n case 'endswith':\n return normalizedLeft.endsWith(normalizedRight);\n default:\n return false;\n }\n}\n\nfunction applyGlobalFilter<T>(rows: T[], rawFilter: string | null | undefined, fields: readonly string[]): T[] {\n const filter = String(rawFilter ?? '').trim().toLowerCase();\n if (!filter) return rows;\n return rows.filter((row) => {\n const source = row as Record<string, unknown>;\n const searchFields = fields.length ? fields : Object.keys(source);\n return searchFields.some((field) => String(source[field] ?? '').toLowerCase().includes(filter));\n });\n}\n\nfunction applySort<T>(rows: T[], descriptors: readonly NgbDataGridSortDescriptor[]): T[] {\n const sort = descriptors.filter((descriptor) => descriptor.field && descriptor.direction);\n if (!sort.length) return rows;\n return [...rows].sort((left, right) => {\n for (const descriptor of sort) {\n const result = compareValues(\n (left as Record<string, unknown>)?.[descriptor.field],\n (right as Record<string, unknown>)?.[descriptor.field],\n );\n if (result !== 0) return descriptor.direction === 'asc' ? result : -result;\n }\n return 0;\n });\n}\n\nfunction applyPage<T>(rows: T[], state: NgbDataGridState): T[] {\n const pageSize = Number(state.pageSize);\n if (!Number.isFinite(pageSize) || pageSize <= 0) return rows;\n const skip = Number.isFinite(Number(state.skip))\n ? Math.max(0, Math.trunc(Number(state.skip)))\n : Math.max(0, (Math.max(1, Math.trunc(Number(state.page) || 1)) - 1) * pageSize);\n return rows.slice(skip, skip + pageSize);\n}\n\nfunction resolveFilterType<T>(\n column: ColumnMeta<T> | undefined,\n raw: unknown,\n value: unknown,\n): NgbColumnFilterType {\n if (column?.filterType) return column.filterType as NgbColumnFilterType;\n if (column?.type) return ngbColumnTypeToFilterType(column.type as any);\n if (typeof raw === 'number' || typeof value === 'number') return 'numeric';\n if (typeof raw === 'boolean' || typeof value === 'boolean') return 'boolean';\n if (raw instanceof Date || value instanceof Date) return 'date';\n return 'text';\n}\n\nfunction normalizeFilterValue(value: unknown, type: NgbColumnFilterType): unknown {\n if (value === '' || value === undefined || value === null) return null;\n switch (type) {\n case 'numeric': {\n const parsed = Number(value);\n return Number.isNaN(parsed) ? null : parsed;\n }\n case 'date': {\n const parsed = value instanceof Date ? value.getTime() : Date.parse(String(value));\n return Number.isNaN(parsed) ? null : parsed;\n }\n case 'boolean':\n if (value === 'true') return true;\n if (value === 'false') return false;\n return !!value;\n default:\n return String(value);\n }\n}\n\nfunction compareByOperator(left: number, right: number, operator: NgbFilterOperator): boolean {\n switch (operator) {\n case 'eq':\n return left === right;\n case 'neq':\n return left !== right;\n case 'gt':\n return left > right;\n case 'gte':\n return left >= right;\n case 'lt':\n return left < right;\n case 'lte':\n return left <= right;\n default:\n return false;\n }\n}\n\nfunction compareValues(left: unknown, right: unknown): number {\n if (left == null && right == null) return 0;\n if (left == null) return -1;\n if (right == null) return 1;\n const leftNumber = Number(left);\n const rightNumber = Number(right);\n if (!Number.isNaN(leftNumber) && !Number.isNaN(rightNumber)) {\n return leftNumber - rightNumber;\n }\n return String(left).localeCompare(String(right), undefined, { numeric: true, sensitivity: 'base' });\n}\n\nfunction numericValues(values: unknown[]): number[] {\n return values.map((value) => Number(value)).filter((value) => Number.isFinite(value));\n}\n\nfunction minMax(values: unknown[], mode: 'min' | 'max'): number | string | Date | null {\n if (!values.length) return null;\n return values.reduce((winner, candidate) => {\n const result = compareValues(candidate, winner);\n return mode === 'min' ? (result < 0 ? candidate : winner) : (result > 0 ? candidate : winner);\n }) as number | string | Date | null;\n}\n","import { inject, Injectable } from \"@angular/core\";\n\nexport interface PdfExportPayload { fileName: string; columns: string[]; rows: any[]; options?: any; }\nexport interface ExcelExportPayload { fileName: string; sheetName: string; columns: Array<{ key: string; title: string }>; rows: any[]; }\n\nexport abstract class PdfExportAdapter { abstract export(p: PdfExportPayload): Promise<void>; }\nexport abstract class ExcelExportAdapter { abstract export(p: ExcelExportPayload): Promise<void>; }\n\n@Injectable({ providedIn: 'root' })\nexport class NgbExportService {\n // Optional injections via inject()\n private pdf = inject(PdfExportAdapter, { optional: true });\n private excel = inject(ExcelExportAdapter, { optional: true });\n\n exportPdf(p: PdfExportPayload) {\n if (!this.pdf) throw new Error('No PdfExportAdapter provided');\n return this.pdf.export(p);\n }\n\n exportExcel(p: ExcelExportPayload) {\n if (!this.excel) throw new Error('No ExcelExportAdapter provided');\n return this.excel.export(p);\n }\n}","import { signal } from '@angular/core';\n\nexport type NgbDatagridTrackByFn<T> = (index: number, row: T) => any;\n\nexport interface NgbDatagridEditService<T> {\n /**\n * Create a new row in the provided data set.\n * Implementations may mark the row as \"new\" until `saveChanges` is called.\n */\n create(data: readonly T[], newRow: T, rowIndex: number, rowId: any): T[];\n\n /**\n * Update an existing row in the provided data set.\n * Implementations may snapshot the original row to support `cancelChanges` and `hasChanges`.\n */\n update(data: readonly T[], updatedRow: T, rowIndex: number, rowId: any): T[];\n\n /**\n * Remove a row from the provided data set.\n */\n remove(data: readonly T[], rowIndex: number, rowId: any): T[];\n\n /**\n * Used by the datagrid while editing to compute a new row instance.\n * Default behavior is a shallow merge of the values into the row.\n */\n assignValues(row: T, values: Partial<T>): T;\n\n /**\n * Whether this row is considered newly created (not yet saved).\n */\n isNew(rowId: any): boolean;\n\n /**\n * Whether the row differs from its captured baseline (after `update`/`create` starts tracking).\n */\n hasChanges(rowId: any, currentRow: T): boolean;\n\n /**\n * Commit current changes (and clear tracking state) for the row.\n */\n saveChanges(data: readonly T[], rowIndex: number, rowId: any, currentRow: T): T[];\n\n /**\n * Revert tracked changes for the row (or remove it if it was new).\n */\n cancelChanges(data: readonly T[], rowIndex: number, rowId: any): T[];\n}\n\nconst clone = <T>(value: T): T => {\n try {\n // Prefer structuredClone when available.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return (globalThis as any).structuredClone ? (globalThis as any).structuredClone(value) : JSON.parse(JSON.stringify(value));\n } catch {\n return value;\n }\n};\n\nconst shallowEqual = (a: any, b: any): boolean => {\n if (a === b) return true;\n if (!a || !b) return false;\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) return false;\n for (const key of aKeys) {\n if (a[key] !== b[key]) return false;\n }\n return true;\n};\n\nexport class NgbDatagridDefaultEditService<T> implements NgbDatagridEditService<T> {\n private originals = signal<Array<{ id: any; row: T }>>([]);\n private newRows = signal<any[]>([]);\n\n create(data: readonly T[], newRow: T, _rowIndex: number, rowId: any): T[] {\n this.newRows.update((ids) => (ids.some((id) => Object.is(id, rowId)) ? ids : [...ids, rowId]));\n // Baseline for a new row is itself until saved/cancelled.\n this.originals.update((items) => {\n if (items.some((it) => Object.is(it.id, rowId))) return items;\n return [...items, { id: rowId, row: clone(newRow) }];\n });\n return [...data, newRow];\n }\n\n update(data: readonly T[], updatedRow: T, rowIndex: number, rowId: any): T[] {\n // Snapshot original the first time we see this rowId.\n const hasBaseline = this.originals().some((it) => Object.is(it.id, rowId));\n if (!hasBaseline) {\n const current = data[rowIndex];\n if (current != null) {\n this.originals.update((items) => [...items, { id: rowId, row: clone(current as any) }]);\n }\n }\n return this.replaceRow(data, updatedRow, rowIndex);\n }\n\n remove(data: readonly T[], rowIndex: number, rowId: any): T[] {\n this.newRows.update((ids) => ids.filter((id) => !Object.is(id, rowId)));\n this.originals.update((items) => items.filter((it) => !Object.is(it.id, rowId)));\n return this.removeRow(data, rowIndex);\n }\n\n assignValues(row: T, values: Partial<T>): T {\n return { ...(row as any), ...(values as any) } as T;\n }\n\n isNew(rowId: any): boolean {\n return this.newRows().some((id) => Object.is(id, rowId));\n }\n\n hasChanges(rowId: any, currentRow: T): boolean {\n const baseline = this.originals().find((it) => Object.is(it.id, rowId))?.row;\n if (!baseline) return false;\n return !shallowEqual(baseline as any, currentRow as any);\n }\n\n saveChanges(data: readonly T[], _rowIndex: number, rowId: any, currentRow: T): T[] {\n this.newRows.update((ids) => ids.filter((id) => !Object.is(id, rowId)));\n // Once saved, clear baseline tracking (no longer \"dirty\").\n this.originals.update((items) => items.filter((it) => !Object.is(it.id, rowId)));\n // Data is already updated by `create` or `update` at this point.\n return data.slice();\n }\n\n cancelChanges(data: readonly T[], rowIndex: number, rowId: any): T[] {\n if (this.newRows().some((id) => Object.is(id, rowId))) {\n this.newRows.update((ids) => ids.filter((id) => !Object.is(id, rowId)));\n this.originals.update((items) => items.filter((it) => !Object.is(it.id, rowId)));\n return this.removeRow(data, rowIndex);\n }\n const baseline = this.originals().find((it) => Object.is(it.id, rowId))?.row;\n this.originals.update((items) => items.filter((it) => !Object.is(it.id, rowId)));\n if (!baseline) return data.slice();\n return this.replaceRow(data, baseline, rowIndex);\n }\n\n private replaceRow(data: readonly T[], updatedRow: T, rowIndex: number): T[] {\n if (rowIndex < 0 || rowIndex >= data.length) return data.slice();\n const copy = data.slice();\n (copy as any)[rowIndex] = updatedRow;\n return copy;\n }\n\n private removeRow(data: readonly T[], rowIndex: number): T[] {\n if (rowIndex < 0 || rowIndex >= data.length) return data.slice();\n return data.filter((_, i) => i !== rowIndex);\n }\n}\n","import { PdfExportAdapter, PdfExportPayload } from '../services/export.services';\n\nexport class JsPdfAdapter implements PdfExportAdapter {\n async export({ fileName, columns, rows, options }: PdfExportPayload) {\n const { jsPDF } = await import('jspdf');\n const autoTable = (await import('jspdf-autotable')).default;\n const doc = new jsPDF({ orientation: options?.landscape ? 'landscape' : 'portrait' });\n autoTable(doc, { head: [columns], body: rows.map(r => columns.map(k => r[k])), margin: options?.margins });\n doc.save(`${fileName}.pdf`);\n }\n}\n","import { ExcelExportAdapter, ExcelExportPayload } from '../services/export.services';\n\nexport class BrowserExcelExportAdapter implements ExcelExportAdapter {\n async export(payload: ExcelExportPayload) {\n const workbook = this.createSpreadsheetXml(payload);\n const blob = new Blob([workbook], { type: 'application/vnd.ms-excel;charset=utf-8' });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = `${this.baseFileName(payload.fileName)}.xls`;\n anchor.style.display = 'none';\n\n document.body.appendChild(anchor);\n anchor.click();\n anchor.remove();\n URL.revokeObjectURL(url);\n }\n\n private createSpreadsheetXml({ sheetName, columns, rows }: ExcelExportPayload) {\n const header = this.createRow(columns.map(column => column.title));\n const body = rows.map(row => this.createRow(columns.map(column => row[column.key]))).join('');\n\n return `<?xml version=\"1.0\"?>\n<?mso-application progid=\"Excel.Sheet\"?>\n<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"\n xmlns:o=\"urn:schemas-microsoft-com:office:office\"\n xmlns:x=\"urn:schemas-microsoft-com:office:excel\"\n xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\">\n <Worksheet ss:Name=\"${this.escapeXml(this.safeSheetName(sheetName))}\">\n <Table>${header}${body}</Table>\n </Worksheet>\n</Workbook>`;\n }\n\n private createRow(values: unknown[]) {\n return `<Row>${values.map(value => this.createCell(value)).join('')}</Row>`;\n }\n\n private createCell(value: unknown) {\n if (value === null || value === undefined) {\n return '<Cell><Data ss:Type=\"String\"></Data></Cell>';\n }\n\n if (typeof value === 'number' && Number.isFinite(value)) {\n return `<Cell><Data ss:Type=\"Number\">${value}</Data></Cell>`;\n }\n\n if (typeof value === 'boolean') {\n return `<Cell><Data ss:Type=\"Boolean\">${value ? 1 : 0}</Data></Cell>`;\n }\n\n if (value instanceof Date) {\n return `<Cell><Data ss:Type=\"DateTime\">${value.toISOString()}</Data></Cell>`;\n }\n\n return `<Cell><Data ss:Type=\"String\">${this.escapeXml(String(value))}</Data></Cell>`;\n }\n\n private safeSheetName(sheetName: string) {\n return (sheetName || 'Sheet1').replace(/[\\\\/?*[\\]:]/g, '').slice(0, 31) || 'Sheet1';\n }\n\n private baseFileName(fileName: string) {\n return (fileName || 'export').replace(/\\.(xls)$/i, '');\n }\n\n private escapeXml(value: string) {\n return value\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\nexport interface ExportButtonContext {\n $implicit: (kind: 'pdf' | 'excel') => void; // let-trigger\n}\n\n// eslint-disable-next-line @angular-eslint/directive-selector\n@Directive({ selector: '[ngbExportButton]' })\nexport class ExportButtonDirective {\n // Expose the TemplateRef so the grid can render it with a context\n readonly templateRef = inject<TemplateRef<ExportButtonContext>>(TemplateRef as any);\n}","import { Directive, Input } from '@angular/core';\nimport { ColumnDef, ColumnType } from '../models/column-def';\nimport { NgbColumnFilterType, NgbFilterOperator } from '../models/filtering';\n\n@Directive({\n selector: 'ngb-grid-column',\n standalone: true\n})\nexport class NgbGridColumnDirective<T = any> implements ColumnDef<T> {\n @Input() field!: Extract<keyof T, string>;\n @Input() header!: string;\n @Input() title?: string;\n @Input() cellTitle?: string | ((row: T) => string);\n @Input() sortable?: boolean;\n @Input() filterable?: boolean;\n @Input() filterType?: NgbColumnFilterType;\n @Input() defaultFilterOperator?: NgbFilterOperator;\n @Input() allowedFilterOperators?: NgbFilterOperator[];\n @Input() showFilterMenu?: boolean;\n @Input() showFilterRow?: boolean;\n @Input() showFilterOperator?: boolean;\n @Input() editable?: boolean;\n @Input() type?: ColumnType;\n @Input() options?: Array<{ label: string; value: any }>;\n @Input() width?: number;\n @Input() stackedGroup?: 'start' | 'center' | 'end';\n @Input() required?: boolean;\n @Input() hidden?: boolean;\n @Input() sticky?: boolean | 'start' | 'end';\n @Input() locked?: boolean;\n @Input() reorderable?: boolean;\n @Input() resizable?: boolean;\n @Input() minResizableWidth?: number;\n @Input() maxResizableWidth?: number;\n\n toColumnDef(): ColumnDef<T> {\n return {\n field: this.field,\n header: this.header,\n title: this.title,\n cellTitle: this.cellTitle,\n sortable: this.sortable,\n filterable: this.filterable,\n filterType: this.filterType,\n defaultFilterOperator: this.defaultFilterOperator,\n allowedFilterOperators: this.allowedFilterOperators,\n showFilterMenu: this.showFilterMenu,\n showFilterRow: this.showFilterRow,\n showFilterOperator: this.showFilterOperator,\n editable: this.editable,\n type: this.type,\n options: this.options,\n width: this.width,\n stackedGroup: this.stackedGroup,\n required: this.required,\n hidden: this.hidden,\n sticky: this.sticky,\n locked: this.locked,\n reorderable: this.reorderable,\n resizable: this.resizable,\n minResizableWidth: this.minResizableWidth,\n maxResizableWidth: this.maxResizableWidth\n };\n }\n}\n\nexport const DATAGRID_COLUMN_DIRECTIVES = [NgbGridColumnDirective];\n","import { Directive, HostBinding, Input } from '@angular/core';\n\nexport type NgbDatagridButtonVariant =\n | 'primary'\n | 'secondary'\n | 'success'\n | 'danger'\n | 'neutral'\n | 'icon';\n\n@Directive({\n selector: 'button[ngbDatagridButton], a[ngbDatagridButton]',\n standalone: true,\n})\nexport class NgbDatagridButtonDirective {\n @Input('ngbDatagridButton') variant: NgbDatagridButtonVariant = 'secondary';\n\n @HostBinding('class.datagrid-toolbar__button') get toolbarButtonClass(): boolean {\n return this.variant === 'primary' || this.variant === 'secondary';\n }\n\n @HostBinding('class.datagrid-toolbar__button--primary') get toolbarPrimary(): boolean {\n return this.variant === 'primary';\n }\n\n @HostBinding('class.datagrid-toolbar__button--secondary') get toolbarSecondary(): boolean {\n return this.variant === 'secondary';\n }\n\n @HostBinding('class.grid-row-action') get rowActionClass(): boolean {\n return this.variant === 'success' || this.variant === 'danger' || this.variant === 'neutral';\n }\n\n @HostBinding('class.grid-row-action--success') get rowSuccess(): boolean {\n return this.variant === 'success';\n }\n\n @HostBinding('class.grid-row-action--danger') get rowDanger(): boolean {\n return this.variant === 'danger';\n }\n\n @HostBinding('class.grid-row-action--neutral') get rowNeutral(): boolean {\n return this.variant === 'neutral';\n }\n\n @HostBinding('class.grid-filter-menu-trigger') get iconButtonClass(): boolean {\n return this.variant === 'icon';\n }\n}\n","import { Directive, HostBinding, Input } from '@angular/core';\n\n@Directive({\n selector: 'input[ngbDatagridControl], select[ngbDatagridControl], textarea[ngbDatagridControl]',\n standalone: true,\n})\nexport class NgbDatagridControlDirective {\n @Input() ngbDatagridControlMode: 'filter' | 'edit' = 'filter';\n\n @HostBinding('class.grid-filter-control') get filterClass(): boolean {\n return this.ngbDatagridControlMode === 'filter';\n }\n\n @HostBinding('class.grid-edit-control') get editClass(): boolean {\n return this.ngbDatagridControlMode === 'edit';\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { ControlContainer, FormGroupDirective, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgbDatagridButtonDirective } from '../../foundation/datagrid-button.directive';\nimport { NgbDatagridControlDirective } from '../../foundation/datagrid-control.directive';\n\n@Component({\n selector: 'tr[ngbDatagridAddRow]',\n standalone: true,\n imports: [CommonModule, FormsModule, ReactiveFormsModule, NgbDatagridButtonDirective, NgbDatagridControlDirective],\n viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }],\n template: `\n @if (grid.showSelectionColumn()) {\n <td\n [style.width.px]=\"grid.utilityColumnWidth('selection')\"\n [class.column-pinned-start]=\"grid.shouldPinLeadingUtilityColumns()\"\n [style.left.px]=\"grid.utilityStickyOffset('selection')\"\n ></td>\n }\n @if (grid.rowDetailTpl) {\n <td\n [style.width.px]=\"grid.utilityColumnWidth('detail')\"\n [class.column-pinned-start]=\"grid.shouldPinLeadingUtilityColumns()\"\n [style.left.px]=\"grid.utilityStickyOffset('detail')\"\n ></td>\n }\n @if (grid.stickyRowsEnabled) {\n <td\n class=\"text-center\"\n [style.width.px]=\"grid.utilityColumnWidth('sticky-toggle')\"\n [class.column-pinned-start]=\"grid.shouldPinLeadingUtilityColumns()\"\n [style.left.px]=\"grid.utilityStickyOffset('sticky-toggle')\"\n ></td>\n }\n\n @for (col of grid.visibleColumns; track col.field) {\n <td\n [attr.data-title]=\"col.header\"\n [class.column-pinned-start]=\"grid.columnPinnedSide(col) === 'start'\"\n [class.column-pinned-end]=\"grid.columnPinnedSide(col) === 'end'\"\n [style.left.px]=\"grid.columnStartOffset(col)\"\n [style.right.px]=\"grid.columnEndOffset(col)\"\n >\n @switch (col.type) {\n @case ('boolean') {\n <div\n class=\"form-check m-0 grid-edit-boolean\"\n [class.is-invalid]=\"\n (grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) &&\n grid.addForm.get(col.field)?.invalid\n \"\n >\n <input\n type=\"checkbox\"\n class=\"form-check-input grid-edit-checkbox\"\n [formControlName]=\"col.field\"\n [attr.aria-label]=\"grid.inputAriaLabel(col)\"\n [attr.aria-invalid]=\"\n (grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) &&\n grid.addForm.get(col.field)?.invalid\n ? 'true'\n : null\n \"\n [attr.aria-describedby]=\"\n (grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) &&\n grid.addForm.get(col.field)?.invalid\n ? 'add-error-' + col.field\n : null\n \"\n />\n </div>\n }\n\n @case ('select') {\n <select\n ngbDatagridControl\n [ngbDatagridControlMode]=\"'edit'\"\n [class.is-invalid]=\"\n (grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) &&\n grid.addForm.get(col.field)?.invalid\n \"\n [formControlName]=\"col.field\"\n [attr.aria-label]=\"grid.inputAriaLabel(col)\"\n [attr.aria-invalid]=\"\n (grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) &&\n grid.addForm.get(col.field)?.invalid\n ? 'true'\n : null\n \"\n [attr.aria-describedby]=\"\n (grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) &&\n grid.addForm.get(col.field)?.invalid\n ? 'add-error-' + col.field\n : null\n \"\n >\n @for (option of col.options ?? []; track option.value) {\n <option [ngValue]=\"option.value\">{{ option.label }}</option>\n }\n </select>\n }\n\n @default {\n <input\n ngbDatagridControl\n [ngbDatagridControlMode]=\"'edit'\"\n [class.is-invalid]=\"\n (grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) &&\n grid.addForm.get(col.field)?.invalid\n \"\n [attr.type]=\"\n col.type === 'number'\n ? 'number'\n : col.type === 'email'\n ? 'email'\n : col.type === 'date'\n ? 'date'\n : 'text'\n \"\n [formControlName]=\"col.field\"\n [attr.aria-label]=\"grid.inputAriaLabel(col)\"\n [attr.aria-invalid]=\"\n (grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) &&\n grid.addForm.get(col.field)?.invalid\n ? 'true'\n : null\n \"\n [attr.aria-describedby]=\"\n (grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) &&\n grid.addForm.get(col.field)?.invalid\n ? 'add-error-' + col.field\n : null\n \"\n />\n }\n }\n\n @if ((grid.addForm.get(col.field)?.touched || grid.saveAttemptedNew) && grid.addForm.get(col.field)?.errors; as e) {\n <div class=\"invalid-feedback d-block\" [attr.id]=\"'add-error-' + col.field\" role=\"alert\">\n @if (e['required']) { Required }\n @if (e['email']) { Invalid email }\n @if (e['number']) { Invalid number }\n @if (e['date']) { Invalid date }\n </div>\n }\n </td>\n }\n\n @if (grid.showActionsColumn()) {\n <td class=\"text-center grid-actions-cell\" [style.width.px]=\"grid.utilityColumnWidth('actions')\">\n <div class=\"grid-actions-cell__inner\">\n <button type=\"button\" ngbDatagridButton=\"success\" (click)=\"grid.saveAdd()\" [disabled]=\"grid.addForm.invalid\">\n Save\n </button>\n <button type=\"button\" ngbDatagridButton=\"neutral\" (click)=\"grid.cancelAdd()\">\n Cancel\n </button>\n </div>\n </td>\n }\n `\n})\nexport class NgbDatagridAddRowComponent {\n @Input({ required: true }) grid!: any;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'colgroup[ngbDatagridColgroup]',\n standalone: true,\n imports: [CommonModule],\n template: `\n @if (grid.showSelectionColumn()) {\n <col [style.width.px]=\"grid.utilityColumnWidth('selection')\" />\n }\n @if (grid.rowDetailTpl) {\n <col [style.width.px]=\"grid.utilityColumnWidth('detail')\" data-fixed=\"true\" />\n }\n @if (grid.stickyRowsEnabled) {\n <col [style.width.px]=\"grid.utilityColumnWidth('sticky-toggle')\" />\n }\n @for (col of grid.visibleColumns; track col.field) {\n <col\n [style.width.px]=\"grid.columnWidth(col) || null\"\n [attr.data-fixed]=\"grid.resizable ? 'true' : null\"\n />\n }\n @if (grid.showActionsColumn()) {\n <col [style.width.px]=\"grid.utilityColumnWidth('actions')\" />\n }\n `\n})\nexport class NgbDatagridColgroupComponent {\n @Input({ required: true }) grid!: any;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { ControlContainer, FormGroupDirective, ReactiveFormsModule } from '@angular/forms';\nimport { ColumnDef } from '../../models/column-def';\nimport { NgbDatagridButtonDirective } from '../../foundation/datagrid-button.directive';\nimport { NgbDatagridControlDirective } from '../../foundation/datagrid-control.directive';\nimport type { Datagrid } from '../datagrid.component';\n\n@Component({\n selector: 'tr[ngbDatagridDataRow]',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, NgbDatagridButtonDirective, NgbDatagridControlDirective],\n viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }],\n template: `\n @if (grid.showSelectionColumn()) {\n <td\n class=\"text-center align-middle\"\n [style.width.px]=\"grid.isStackedLayout() ? null : grid.utilityColumnWidth('selection')\"\n [class.column-pinned-start]=\"grid.shouldPinLeadingUtilityColumns() && !grid.isStackedLayout()\"\n [style.left.px]=\"grid.isStackedLayout() ? null : grid.utilityStickyOffset('selection')\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"selected\"\n [disabled]=\"\n grid.selectionMode === 'none' ||\n grid.selectionBehavior === 'row' ||\n grid.isSelectionDisabled(row, index)\n \"\n (click)=\"$event.stopPropagation()\"\n (change)=\"grid.toggleSelection(index, $event)\"\n [attr.aria-label]=\"grid.rowSelectionLabel(index)\"\n />\n </td>\n }\n\n @if (grid.rowDetailTpl) {\n <td\n class=\"text-center align-middle\"\n [style.width.px]=\"grid.isStackedLayout() ? null : grid.utilityColumnWidth('detail')\"\n [class.column-pinned-start]=\"grid.shouldPinLeadingUtilityColumns() && !grid.isStackedLayout()\"\n [style.left.px]=\"grid.isStackedLayout() ? null : grid.utilityStickyOffset('detail')\"\n >\n <button\n type=\"button\"\n class=\"grid-detail-toggle\"\n (click)=\"$event.stopPropagation(); grid.toggleExpand(index)\"\n [attr.aria-expanded]=\"grid.isExpanded(index)\"\n [attr.aria-controls]=\"'dg-row-detail-' + index\"\n [attr.aria-label]=\"grid.isExpanded(index) ? grid.collapseRowAriaLabel : grid.expandRowAriaLabel\"\n >\n <span\n class=\"bi\"\n [ngClass]=\"grid.isExpanded(index) ? 'bi-chevron-down' : 'bi-chevron-right'\"\n aria-hidden=\"true\"\n ></span>\n </button>\n </td>\n }\n\n @if (grid.stickyRowsEnabled) {\n <td\n class=\"text-center align-middle\"\n data-title=\"Sticky\"\n [style.width.px]=\"grid.isStackedLayout() ? null : grid.utilityColumnWidth('sticky-toggle')\"\n [class.column-pinned-start]=\"grid.shouldPinLeadingUtilityColumns() && !grid.isStackedLayout()\"\n [style.left.px]=\"grid.isStackedLayout() ? null : grid.utilityStickyOffset('sticky-toggle')\"\n >\n <button\n type=\"button\"\n class=\"btn btn-link p-0 no-edit-trigger sticky-toggle\"\n (click)=\"$event.stopPropagation(); grid.toggleStickyRow(index)\"\n [attr.aria-pressed]=\"grid.isRowSticky(row, index)\"\n [attr.aria-label]=\"grid.stickyRowToggleAriaLabel()\"\n >\n @if (grid.stickyIcon(row, index); as icon) {\n <span class=\"bi\" [ngClass]=\"'bi-' + icon\" aria-hidden=\"true\"></span>\n }\n </button>\n </td>\n }\n\n @if (grid.isStackedCardsLayout()) {\n <td [attr.colspan]=\"grid.stackedCardColspan()\" class=\"ngb-stacked-card-cell\">\n <div class=\"ngb-stacked-card\">\n <div class=\"ngb-stacked-card__layout\">\n @for (group of grid.stackedCardGroups(); track group) {\n <div\n class=\"ngb-stacked-card__group\"\n [attr.data-stacked-group]=\"group\"\n >\n @for (col of grid.stackedColumnsInGroup(group); track col.field) {\n <div\n class=\"ngb-stacked-card__field\"\n [class.cell-highlight]=\"grid.isCellHighlighted(row, index, col, grid.visibleColumnIndex(col))\"\n [class.grid-cell--editing]=\"grid.isCellInEditMode(index, col)\"\n [class.grid-cell--incell]=\"grid.isIncellEditMode()\"\n [ngClass]=\"grid.resolveCellClass(row, index, col)\"\n [ngStyle]=\"grid.resolveCellStyle(row, index, col)\"\n (click)=\"grid.onCellClick($event, index, col)\"\n >\n <div class=\"ngb-stacked-card__label\">{{ col.header }}</div>\n <div class=\"ngb-stacked-card__value\">\n <ng-container\n *ngTemplateOutlet=\"\n dataCell;\n context: { col: col, ci: grid.visibleColumnIndex(col) }\n \"\n ></ng-container>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </td>\n } @else {\n @for (col of grid.visibleColumns; track col.field; let ci = $index) {\n <td\n role=\"gridcell\"\n [attr.data-col-index]=\"ci\"\n [attr.aria-colindex]=\"grid.ariaColIndexForDataColumn(ci)\"\n [attr.tabindex]=\"grid.cellTabIndex(index, ci)\"\n [attr.data-title]=\"grid.isStackedLayout() ? col.header : null\"\n [attr.title]=\"grid.cellTitle(row, col)\"\n [class.cell-highlight]=\"grid.isCellHighlighted(row, index, col, ci)\"\n [class.grid-cell--focused]=\"grid.isCellFocused(index, ci)\"\n [class.grid-cell--editing]=\"grid.isCellInEditMode(index, col)\"\n [class.grid-cell--incell]=\"grid.isIncellEditMode()\"\n [class.column-pinned-start]=\"grid.columnPinnedSide(col) === 'start'\"\n [class.column-pinned-end]=\"grid.columnPinnedSide(col) === 'end'\"\n [class.column-locked]=\"col.locked\"\n [ngClass]=\"grid.resolveCellClass(row, index, col)\"\n [ngStyle]=\"grid.resolveCellStyle(row, index, col)\"\n [style.width.px]=\"grid.resizable && !grid.isStackedLayout() ? grid.columnWidth(col) : null\"\n [style.min-width.px]=\"grid.resizable && !grid.isStackedLayout() ? grid.columnWidth(col) : null\"\n [style.max-width.px]=\"grid.resizable && !grid.isStackedLayout() ? grid.columnWidth(col) : null\"\n [style.left.px]=\"grid.isStackedLayout() ? null : grid.columnStartOffset(col)\"\n [style.right.px]=\"grid.isStackedLayout() ? null : grid.columnEndOffset(col)\"\n (focus)=\"grid.onDataCellFocus(index, ci)\"\n (keydown)=\"grid.onDataCellKeydown($event, index, ci, col)\"\n (click)=\"grid.onCellClick($event, index, col)\"\n >\n <ng-container *ngTemplateOutlet=\"dataCell; context: { col: col, ci: ci }\"></ng-container>\n </td>\n }\n }\n\n @if (grid.showActionsColumn()) {\n <td\n class=\"text-center grid-actions-cell\"\n [style.width.px]=\"grid.isStackedLayout() ? null : grid.utilityColumnWidth('actions')\"\n >\n <ng-container *ngTemplateOutlet=\"actionsCell\"></ng-container>\n </td>\n }\n\n <ng-template #dataCell let-col=\"col\" let-ci=\"ci\">\n @if (grid.isCellInEditMode(index, col)) {\n @if (grid.editTpls[col.field]; as et) {\n <ng-container\n [ngTemplateOutlet]=\"et.template\"\n [ngTemplateOutletContext]=\"{\n $implicit: grid.editForm.get(col.field),\n control: grid.editForm.get(col.field),\n row: row,\n col: col,\n form: grid.editForm,\n index: index,\n isNew: false,\n }\"\n >\n </ng-container>\n } @else {\n @switch (col.type) {\n @case ('boolean') {\n <div class=\"form-check m-0 grid-edit-boolean\">\n <input\n type=\"checkbox\"\n class=\"form-check-input grid-edit-checkbox\"\n [formControlName]=\"col.field\"\n [attr.aria-label]=\"grid.inputAriaLabel(col)\"\n [attr.aria-invalid]=\"\n (grid.editForm?.touched || grid.saveAttemptedEdit) &&\n grid.editForm?.get(col.field)?.invalid\n ? 'true'\n : null\n \"\n [attr.aria-describedby]=\"\n (grid.editForm?.touched || grid.saveAttemptedEdit) &&\n grid.editForm?.get(col.field)?.invalid\n ? 'edit-error-' + col.field\n : null\n \"\n />\n </div>\n }\n @case ('select') {\n <select\n ngbDatagridControl\n [ngbDatagridControlMode]=\"'edit'\"\n [formControlName]=\"col.field\"\n [attr.aria-label]=\"grid.inputAriaLabel(col)\"\n >\n @for (o of col.options ?? []; track o.value) {\n <option [ngValue]=\"o.value\">{{ o.label }}</option>\n }\n </select>\n }\n @default {\n <input\n ngbDatagridControl\n [ngbDatagridControlMode]=\"'edit'\"\n [attr.type]=\"\n col.type === 'number'\n ? 'number'\n : col.type === 'email'\n ? 'email'\n : col.type === 'date'\n ? 'date'\n : 'text'\n \"\n [formControlName]=\"col.field\"\n (keydown)=\"grid.onCellKeydown($event, index, col, ci)\"\n [attr.autofocus]=\"grid.isCellInEditMode(index, col) ? '' : null\"\n [attr.aria-label]=\"grid.inputAriaLabel(col)\"\n [attr.aria-invalid]=\"\n (grid.editForm?.touched || grid.saveAttemptedEdit) &&\n grid.editForm?.get(col.field)?.invalid\n ? 'true'\n : null\n \"\n [attr.aria-describedby]=\"\n (grid.editForm?.touched || grid.saveAttemptedEdit) &&\n grid.editForm?.get(col.field)?.invalid\n ? 'edit-error-' + col.field\n : null\n \"\n />\n }\n }\n\n @if ((grid.editForm?.touched || grid.saveAttemptedEdit) && grid.editForm?.get(col.field)?.errors; as e) {\n <div class=\"invalid-feedback d-block\" [attr.id]=\"'edit-error-' + col.field\" role=\"alert\">\n @if (e['required']) { <span>Required</span> }\n @if (e['email']) { <span>Invalid email</span> }\n @if (e['number']) { <span>Invalid number</span> }\n @if (e['date']) { <span>Invalid date</span> }\n </div>\n }\n }\n } @else {\n @if (grid.cellTpls[col.field]; as ct) {\n <ng-container\n [ngTemplateOutlet]=\"ct.template\"\n [ngTemplateOutletContext]=\"{\n $implicit: valueFor(row, col),\n row: row,\n col: col,\n index: index,\n }\"\n >\n </ng-container>\n } @else {\n <div class=\"grid-cell-content\">\n @switch (col.type) {\n @case ('boolean') {\n <span class=\"grid-boolean-pill\" [class.grid-boolean-pill--true]=\"valueFor(row, col)\">\n {{ grid.booleanDisplayLabel(!!valueFor(row, col)) }}\n </span>\n }\n @default {\n <span class=\"grid-cell-text\">\n @if (grid.isSearchHighlightEnabled() && grid.shouldHighlightSearchInColumn(col.field)) {\n @for (part of grid.getSearchHighlightSegments(valueFor(row, col), col.field); track $index) {\n @if (part.match) {\n <mark class=\"grid-search-highlight\">{{ part.text }}</mark>\n } @else {\n {{ part.text }}\n }\n }\n } @else {\n {{ grid.formatCellDisplayValue(valueFor(row, col)) }}\n }\n @if (grid.showStickyRowBadge && grid.stickyRowBadgeField === col.field && grid.isRowSticky(row, index)) {\n <span\n class=\"grid-sticky-badge\"\n >{{ grid.stickyRowBadgeLabel }}</span>\n }\n </span>\n }\n }\n </div>\n }\n }\n </ng-template>\n\n <ng-template #actionsCell>\n @if (grid.editingIndex !== index) {\n <div class=\"grid-actions-cell__inner\">\n @if (grid.showRowEditAction()) {\n <button\n type=\"button\"\n class=\"grid-row-action no-edit-trigger\"\n [class.grid-row-action--secondary]=\"grid.actionDisplay !== 'icons'\"\n [class.grid-row-action--icon]=\"grid.actionDisplay === 'icons'\"\n [class.grid-row-action--edit-icon]=\"grid.actionDisplay === 'icons'\"\n (click)=\"grid.startEdit(index)\"\n [attr.aria-label]=\"grid.editRowAriaLabel(index)\"\n >\n @if (grid.actionDisplay === 'icons') {\n <span class=\"bi bi-pencil\" aria-hidden=\"true\"></span>\n } @else {\n <span>Edit</span>\n }\n </button>\n }\n @if (grid.showRowDeleteAction()) {\n <button\n type=\"button\"\n ngbDatagridButton=\"danger\"\n class=\"no-edit-trigger\"\n [class.grid-row-action--icon]=\"grid.actionDisplay === 'icons'\"\n (click)=\"grid.deleteRow(index)\"\n [attr.aria-label]=\"grid.deleteRowAriaLabel(index)\"\n >\n @if (grid.actionDisplay === 'icons') {\n <span class=\"bi bi-trash\" aria-hidden=\"true\"></span>\n } @else {\n <span>Delete</span>\n }\n </button>\n }\n </div>\n } @else {\n <div class=\"grid-actions-cell__inner\">\n <button\n type=\"button\"\n ngbDatagridButton=\"success\"\n (click)=\"grid.saveEdit(index)\"\n [disabled]=\"grid.editForm.invalid\"\n >\n Save\n </button>\n <button\n type=\"button\"\n ngbDatagridButton=\"neutral\"\n (click)=\"grid.cancelEdit(index)\"\n >\n Cancel\n </button>\n </div>\n }\n </ng-template>\n `,\n})\nexport class NgbDatagridDataRowComponent<T = unknown> {\n @Input({ required: true }) grid!: Datagrid<T>;\n @Input({ required: true }) row!: T;\n @Input({ required: true }) index!: number;\n @Input() selected = false;\n\n valueFor(row: T, col: ColumnDef): unknown {\n return (row as Record<string, unknown>)[col.field];\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'tr[ngbDatagridDetailRow]',\n standalone: true,\n imports: [CommonModule],\n template: `\n <td [attr.colspan]=\"grid.detailColspan\" role=\"region\" class=\"grid-detail-row__cell\">\n <div class=\"grid-detail-row__content\">\n <ng-container\n [ngTemplateOutlet]=\"grid.rowDetailTpl.template\"\n [ngTemplateOutletContext]=\"{ $implicit: row, index: index }\"\n >\n </ng-container>\n </div>\n </td>\n `\n})\nexport class NgbDatagridDetailRowComponent {\n @Input({ required: true }) grid!: any;\n @Input({ required: true }) row!: any;\n @Input({ required: true }) index!: number;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { NgbPagerComponent } from '../../../../pagination';\nimport { NgbDatagridPagerPosition, ngbDatagridPagerSettings } from '../../models/datagrid-pageable';\n\n@Component({\n selector: 'ngb-datagrid-footer',\n standalone: true,\n imports: [CommonModule, NgbPagerComponent],\n template: `\n @if (grid.paginationActive && grid.pagerShowsAt(placement)) {\n @if (grid.hasCustomPagerTemplate()) {\n <div\n class=\"grid-footer grid-footer--custom\"\n [class.grid-footer--top]=\"placement === 'top'\"\n [class.grid-footer--bottom]=\"placement === 'bottom'\"\n [class.sticky-footer]=\"grid.isFooterSticky && placement === 'bottom'\"\n >\n <ng-container\n *ngTemplateOutlet=\"grid.pagerTpl!.template; context: grid.pagerContext()\"\n ></ng-container>\n </div>\n } @else {\n <div\n class=\"grid-footer\"\n [class.grid-footer--top]=\"placement === 'top'\"\n [class.grid-footer--bottom]=\"placement === 'bottom'\"\n [class.sticky-footer]=\"grid.isFooterSticky && placement === 'bottom'\"\n >\n <ngb-pager\n [page]=\"grid.page\"\n [pageSize]=\"grid.pageSize\"\n [collectionSize]=\"grid.pagerCollectionSize()\"\n [settings]=\"pagerSettings\"\n [infoLabel]=\"grid.paginationRangeLabel()\"\n [rowsPerPageLabel]=\"grid.rowsPerPageLabel()\"\n [responsive]=\"grid.pagerResponsive()\"\n (pageChange)=\"grid.onPage($event)\"\n (pageSizeChange)=\"grid.onPageSize($event)\"\n />\n </div>\n }\n }\n `,\n})\nexport class NgbDatagridFooterComponent {\n @Input({ required: true }) grid!: any;\n\n @Input() placement: NgbDatagridPagerPosition = 'bottom';\n\n get pagerSettings() {\n return ngbDatagridPagerSettings(this.grid.resolvedPageable());\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'ngb-datagrid-field-shell',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"grid-filter-field\" [class.grid-filter-field--with-icon]=\"!!icon\">\n <ng-content></ng-content>\n @if (icon) {\n <span class=\"bi grid-filter-field__icon\" [ngClass]=\"'bi-' + icon\" aria-hidden=\"true\"></span>\n }\n </div>\n `\n})\nexport class NgbDatagridFieldShellComponent {\n @Input() icon?: string;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgbDatagridButtonDirective } from '../../foundation/datagrid-button.directive';\nimport { NgbDatagridControlDirective } from '../../foundation/datagrid-control.directive';\nimport { NgbDatagridFieldShellComponent } from '../../foundation/datagrid-field-shell.component';\n\n@Component({\n selector: 'thead[ngbDatagridHeader]',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NgbDatagridButtonDirective,\n NgbDatagridControlDirective,\n NgbDatagridFieldShellComponent,\n ],\n template: `\n <tr>\n @if (grid.showSelectionColumn()) {\n <th\n class=\"text-center\"\n scope=\"col\"\n [style.width.px]=\"grid.utilityColumnWidth('selection')\"\n [class.column-pinned-start]=\"grid.shouldPinLeadingUtilityColumns()\"\n [style.left.px]=\"grid.utilityStickyOffset('selection')\"\n >\n @if (grid.selectionMode === 'multiple' && grid.selectAllEnabled) {\n <input\n type=\"checkbox\"\n [checked]=\"grid.isPageAllSelected()\"\n [indeterminate]=\"grid.isPageIndeterminate()\"\n (change)=\"grid.toggleSelectAllCurrentPage()\"\n [attr.aria-label]=\"grid.selectAllLabel()\"\n />\n }\n </th>\n }\n @if (grid.rowDetailTpl) {\n <th\n [style.width.px]=\"grid.utilityColumnWidth('detail')\"\n scope=\"col\"\n aria-hidden=\"true\"\n [class.column-pinned-start]=\"grid.shouldPinLeadingUtilityColumns()\"\n [style.left.px]=\"grid.utilityStickyOffset('detail')\"\n ></th>\n }\n @if (grid.stickyRowsEnabled) {\n <th\n [style.width.px]=\"grid.utilityColumnWidth('sticky-toggle')\"\n scope=\"col\"\n class=\"text-center\"\n data-title=\"Sticky\"\n [class.column-pinned-start]=\"grid.shouldPinLeadingUtilityColumns()\"\n [style.left.px]=\"grid.utilityStickyOffset('sticky-toggle')\"\n ></th>\n }\n @for (col of grid.visibleColumns; track col.field; let ci = $index) {\n <th\n [attr.data-title]=\"col.header\"\n [class.sortable]=\"grid.enableSorting && col.sortable\"\n [class.filter-menu-active]=\"grid.hasActiveColumnFilter(col.field)\"\n [class.filter-menu-open]=\"grid.openFilterMenuField === col.field\"\n [class.column-pinned-start]=\"grid.columnPinnedSide(col) === 'start'\"\n [class.column-pinned-end]=\"grid.columnPinnedSide(col) === 'end'\"\n [class.column-locked]=\"col.locked\"\n [class.grid-header__column--resizable]=\"grid.isColumnResizable(col)\"\n [class.grid-header__column--reorderable]=\"grid.isColumnReorderable(col)\"\n [class.grid-header__column--drag-over]=\"grid.columnDragOverIndex === ci && grid.columnDragField\"\n (dragover)=\"grid.onColumnDragOver($event, ci)\"\n (dragleave)=\"grid.onColumnDragLeave($event, ci)\"\n (drop)=\"grid.onColumnDrop($event, ci)\"\n [ngClass]=\"grid.resolveHeaderClass(col)\"\n [ngStyle]=\"grid.resolveHeaderStyle(col)\"\n [style.width.px]=\"grid.columnWidth(col) || null\"\n [style.min-width.px]=\"grid.resizable ? grid.columnWidth(col) : null\"\n [style.max-width.px]=\"grid.resizable ? grid.columnWidth(col) : null\"\n [style.left.px]=\"grid.columnStartOffset(col)\"\n [style.right.px]=\"grid.columnEndOffset(col)\"\n scope=\"col\"\n [attr.title]=\"grid.headerTitle(col)\"\n [attr.aria-sort]=\"grid.enableSorting && col.sortable ? grid.ariaSortFor(col.field) : null\"\n >\n <div class=\"grid-header__cell\">\n @if (grid.isColumnReorderable(col)) {\n <span\n class=\"grid-column-reorder-handle bi bi-grip-vertical\"\n draggable=\"true\"\n role=\"button\"\n tabindex=\"0\"\n [attr.aria-label]=\"grid.reorderColumnAriaLabel(col)\"\n (dragstart)=\"grid.onColumnDragStart($event, col, ci); $event.stopPropagation()\"\n (dragend)=\"grid.onColumnDragEnd()\"\n ></span>\n }\n @if (grid.enableSorting && col.sortable) {\n <button\n type=\"button\"\n class=\"grid-sort-button\"\n (click)=\"grid.toggleSort(col.field)\"\n [attr.aria-label]=\"grid.sortButtonAriaLabel(col)\"\n >\n <span class=\"grid-sort-button__label\">{{ col.header }}</span>\n <span\n class=\"grid-sort-button__indicator\"\n [class.grid-sort-button__indicator--active]=\"grid.sort.active === col.field\"\n aria-hidden=\"true\"\n >\n {{\n grid.sort.active === col.field\n ? grid.sort.direction === 'asc'\n ? '▲'\n : grid.sort.direction === 'desc'\n ? '▼'\n : '↕'\n : '↕'\n }}\n </span>\n </button>\n } @else {\n <span>{{ col.header }}</span>\n }\n\n @if (grid.isMenuFilterVisible(col)) {\n <div class=\"grid-filter-menu-host\">\n <button\n type=\"button\"\n ngbDatagridButton=\"icon\"\n class=\"grid-filter-menu-trigger\"\n [class.grid-filter-menu-trigger--active]=\"grid.hasActiveColumnFilter(col.field)\"\n [class.grid-filter-menu-trigger--check]=\"grid.isMultiCheckboxMode(col)\"\n (click)=\"grid.toggleFilterMenu(col.field, $any($event.currentTarget)); $event.stopPropagation()\"\n [attr.aria-expanded]=\"grid.openFilterMenuField === col.field\"\n [attr.aria-label]=\"grid.openFilterMenuAriaLabel(col)\"\n >\n <span\n class=\"bi\"\n [ngClass]=\"grid.isMultiCheckboxMode(col) ? 'bi-check2-square' : 'bi-funnel'\"\n aria-hidden=\"true\"\n ></span>\n </button>\n </div>\n }\n </div>\n @if (grid.isColumnResizable(col)) {\n <span\n class=\"grid-column-resize-handle\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n [attr.aria-label]=\"grid.resizeColumnAriaLabel(col)\"\n (mousedown)=\"grid.startColumnResize($event, col)\"\n ></span>\n }\n </th>\n }\n @if (grid.showActionsColumn()) {\n <th\n class=\"text-center\"\n scope=\"col\"\n [style.width.px]=\"grid.utilityColumnWidth('actions')\"\n >\n Actions\n </th>\n }\n </tr>\n\n @if (grid.anyFilterable) {\n <tr class=\"filter-row\" [formGroup]=\"grid.filterForm\">\n @if (grid.showSelectionColumn()) { <th></th> }\n @if (grid.rowDetailTpl) { <th></th> }\n @if (grid.stickyRowsEnabled) { <th></th> }\n @for (col of grid.visibleColumns; track col.field) {\n <th\n [attr.data-title]=\"col.header\"\n [class.column-pinned-start]=\"grid.columnPinnedSide(col) === 'start'\"\n [class.column-pinned-end]=\"grid.columnPinnedSide(col) === 'end'\"\n [style.width.px]=\"grid.columnWidth(col) || null\"\n [style.min-width.px]=\"grid.resizable ? grid.columnWidth(col) : null\"\n [style.max-width.px]=\"grid.resizable ? grid.columnWidth(col) : null\"\n [style.left.px]=\"grid.columnStartOffset(col)\"\n [style.right.px]=\"grid.columnEndOffset(col)\"\n >\n @if (grid.isRowFilterVisible(col)) {\n @if (grid.filterTpls[col.field]; as ft) {\n <ng-container\n [ngTemplateOutlet]=\"ft.template\"\n [ngTemplateOutletContext]=\"grid.filterContext(col, 'row')\"\n >\n </ng-container>\n } @else {\n <div class=\"grid-filter-inline\">\n @switch (grid.getColumnFilterType(col)) {\n @case ('date') {\n <ngb-datagrid-field-shell>\n <input\n ngbDatagridControl\n type=\"date\"\n [formControlName]=\"grid.valueControlName(col.field)\"\n (input)=\"grid.applyRowFilter(col)\"\n [attr.aria-label]=\"grid.columnFilterAriaLabel(col)\"\n />\n </ngb-datagrid-field-shell>\n }\n @case ('boolean') {\n <select\n ngbDatagridControl\n [formControlName]=\"grid.valueControlName(col.field)\"\n (change)=\"grid.applyRowFilter(col)\"\n >\n <option [ngValue]=\"''\">{{ grid.rowFilterEmptyOptionLabel(col) }}</option>\n <option [ngValue]=\"true\">{{ grid.booleanFilterOptionLabel(true) }}</option>\n <option [ngValue]=\"false\">{{ grid.booleanFilterOptionLabel(false) }}</option>\n </select>\n }\n @case ('select') {\n <select\n ngbDatagridControl\n [formControlName]=\"grid.valueControlName(col.field)\"\n (change)=\"grid.applyRowFilter(col)\"\n >\n <option [ngValue]=\"''\">{{ grid.rowFilterEmptyOptionLabel(col) }}</option>\n @for (option of col.options ?? []; track option.value) {\n <option [ngValue]=\"option.value\">{{ option.label }}</option>\n }\n </select>\n }\n @default {\n <input\n ngbDatagridControl\n [attr.type]=\"\n grid.getColumnFilterType(col) === 'numeric'\n ? 'number'\n : 'text'\n \"\n [placeholder]=\"grid.rowFilterPlaceholder(col)\"\n [formControlName]=\"grid.valueControlName(col.field)\"\n (input)=\"grid.applyRowFilter(col)\"\n [attr.aria-label]=\"grid.columnFilterAriaLabel(col)\"\n />\n }\n }\n\n @if (grid.isRowFilterOperatorVisible(col)) {\n <div class=\"grid-filter-operator\">\n <button\n type=\"button\"\n ngbDatagridButton=\"icon\"\n class=\"grid-filter-operator__button grid-filter-operator__button--compact\"\n [class.grid-filter-operator__button--active]=\"grid.hasActiveColumnFilter(col.field)\"\n (click)=\"grid.toggleRowFilterMenu(col.field, $any($event.currentTarget)); $event.stopPropagation()\"\n [attr.aria-expanded]=\"grid.isRowFilterMenuOpen(col.field)\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-label]=\"grid.filterOperatorAriaLabel(col)\"\n [attr.title]=\"grid.rowFilterMenuTitle(col)\"\n >\n <span class=\"bi bi-funnel\" aria-hidden=\"true\"></span>\n </button>\n </div>\n }\n\n @if (grid.isRowFilterOperatorVisible(col) && grid.hasActiveColumnFilter(col.field)) {\n <button\n ngbDatagridButton=\"icon\"\n class=\"grid-filter-clear\"\n type=\"button\"\n (click)=\"grid.clearColumnFilter(col.field)\"\n title=\"Clear filter\"\n [attr.aria-label]=\"grid.clearFilterAriaLabel(col)\"\n >\n <span class=\"bi bi-x-lg\" aria-hidden=\"true\"></span>\n </button>\n }\n </div>\n }\n }\n </th>\n }\n @if (grid.showActionsColumn()) { <th></th> }\n </tr>\n }\n `\n})\nexport class NgbDatagridHeaderComponent {\n @Input({ required: true }) grid!: any;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\n\n@Component({\n selector: 'ngb-datagrid-surface-card',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"grid-filter-menu-surface\">\n <ng-content></ng-content>\n </div>\n `\n})\nexport class NgbDatagridSurfaceCardComponent {}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Directive,\n ElementRef,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n Renderer2,\n SimpleChanges,\n inject,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nexport type NgbDatagridFloatingPanelPlacement = 'menu' | 'operator';\n\n/**\n * Popup-style overlay: anchors to a trigger, portals to document.body,\n * and uses viewport-fixed coordinates.\n */\n@Directive({\n selector: '[ngbDatagridFloatingPanel]',\n standalone: true,\n})\nexport class NgbDatagridFloatingPanelDirective implements OnChanges, AfterViewInit, OnDestroy {\n private readonly el = inject(ElementRef<HTMLElement>);\n private readonly renderer = inject(Renderer2);\n private readonly document = inject(DOCUMENT);\n private readonly cdr = inject(ChangeDetectorRef);\n\n @Input() ngbDatagridFloatingPanelAnchor?: HTMLElement | null;\n @Input() ngbDatagridFloatingPanelPlacement: NgbDatagridFloatingPanelPlacement = 'menu';\n\n @HostBinding('style.position') readonly hostPosition = 'fixed';\n @HostBinding('style.z-index') readonly hostZIndex = 1200;\n @HostBinding('style.margin') readonly hostMargin = '0';\n @HostBinding('style.transform') readonly hostTransform = 'none';\n @HostBinding('style.top.px') panelTop = 0;\n @HostBinding('style.left.px') panelLeft = 0;\n\n private active = false;\n private portaled = false;\n private originalParent: HTMLElement | null = null;\n private originalNextSibling: Node | null = null;\n\n private scrollListeners: Array<{ target: EventTarget; handler: () => void }> = [];\n private resizeObserver: ResizeObserver | null = null;\n private rafId: number | null = null;\n\n private readonly scheduleUpdate = () => {\n if (this.rafId != null) return;\n this.rafId = requestAnimationFrame(() => {\n this.rafId = null;\n if (this.active) this.updatePosition();\n });\n };\n\n ngOnChanges(changes: SimpleChanges): void {\n if ('ngbDatagridFloatingPanelAnchor' in changes) {\n this.tryActivate();\n }\n }\n\n ngAfterViewInit(): void {\n this.tryActivate();\n }\n\n private tryActivate(): void {\n if (!(this.ngbDatagridFloatingPanelAnchor instanceof HTMLElement)) {\n return;\n }\n if (this.active) {\n this.scheduleUpdate();\n return;\n }\n this.activate();\n }\n\n ngOnDestroy(): void {\n this.deactivate();\n }\n\n /** Called when anchor/layout may have changed after the panel opens. */\n reposition(): void {\n if (this.active) this.scheduleUpdate();\n }\n\n private activate(): void {\n if (this.active) return;\n this.active = true;\n const node = this.el.nativeElement;\n this.renderer.addClass(node, 'ngb-datagrid-floating-panel');\n this.renderer.addClass(node, 'show');\n this.syncThemeFromGrid(node);\n this.portalToBody();\n this.attachObservers();\n this.schedulePositionPasses();\n }\n\n private deactivate(): void {\n this.active = false;\n if (this.rafId != null) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n this.detachObservers();\n const node = this.el.nativeElement;\n this.renderer.removeClass(node, 'ngb-datagrid-floating-panel');\n this.renderer.removeClass(node, 'show');\n this.renderer.removeAttribute(node, 'data-theme');\n this.panelTop = 0;\n this.panelLeft = 0;\n this.clearPositionStyles(node);\n this.restoreFromBody();\n this.cdr.markForCheck();\n }\n\n private portalToBody(): void {\n if (this.portaled) return;\n const node = this.el.nativeElement;\n const body = this.document.body;\n if (!body || node.parentElement === body) {\n this.portaled = true;\n return;\n }\n this.originalParent = node.parentElement;\n this.originalNextSibling = node.nextSibling;\n this.renderer.appendChild(body, node);\n this.portaled = true;\n }\n\n private restoreFromBody(): void {\n if (!this.portaled) return;\n const node = this.el.nativeElement;\n if (this.originalParent?.isConnected) {\n if (this.originalNextSibling && this.originalNextSibling.parentNode === this.originalParent) {\n this.renderer.insertBefore(this.originalParent, node, this.originalNextSibling);\n } else {\n this.renderer.appendChild(this.originalParent, node);\n }\n } else if (node.parentElement === this.document.body) {\n this.renderer.removeChild(this.document.body, node);\n }\n this.portaled = false;\n this.originalParent = null;\n this.originalNextSibling = null;\n }\n\n private schedulePositionPasses(): void {\n this.updatePosition();\n requestAnimationFrame(() => this.updatePosition());\n requestAnimationFrame(() => {\n requestAnimationFrame(() => this.updatePosition());\n });\n }\n\n private attachObservers(): void {\n this.detachObservers();\n\n const addScroll = (target: EventTarget) => {\n target.addEventListener('scroll', this.scheduleUpdate, { passive: true, capture: true });\n this.scrollListeners.push({ target, handler: this.scheduleUpdate });\n };\n\n addScroll(window);\n addScroll(this.document);\n\n const anchor = this.resolveAnchor();\n let parent: HTMLElement | null = anchor?.parentElement ?? null;\n const seen = new Set<EventTarget>();\n while (parent) {\n const { overflow, overflowY, overflowX } = getComputedStyle(parent);\n if (/(auto|scroll|overlay)/.test(`${overflow} ${overflowY} ${overflowX}`)) {\n if (!seen.has(parent)) {\n seen.add(parent);\n addScroll(parent);\n }\n }\n parent = parent.parentElement;\n }\n\n window.addEventListener('resize', this.scheduleUpdate, { passive: true });\n window.visualViewport?.addEventListener('scroll', this.scheduleUpdate, { passive: true });\n window.visualViewport?.addEventListener('resize', this.scheduleUpdate, { passive: true });\n\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver(() => this.scheduleUpdate());\n const anchorEl = this.resolveAnchor();\n if (anchorEl) this.resizeObserver.observe(anchorEl);\n this.resizeObserver.observe(this.el.nativeElement);\n }\n }\n\n private detachObservers(): void {\n for (const { target, handler } of this.scrollListeners) {\n target.removeEventListener('scroll', handler, true);\n }\n this.scrollListeners = [];\n window.removeEventListener('resize', this.scheduleUpdate);\n window.visualViewport?.removeEventListener('scroll', this.scheduleUpdate);\n window.visualViewport?.removeEventListener('resize', this.scheduleUpdate);\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n }\n\n private resolveAnchor(): HTMLElement | null {\n if (this.ngbDatagridFloatingPanelAnchor instanceof HTMLElement) {\n return this.ngbDatagridFloatingPanelAnchor;\n }\n return null;\n }\n\n /** Portaled panels must carry the grid theme so token SCSS applies on document.body. */\n private syncThemeFromGrid(panel: HTMLElement): void {\n const anchor = this.resolveAnchor();\n const grid =\n anchor?.closest('.ngb-grid') ??\n anchor?.closest('ngb-datagrid')?.querySelector('.ngb-grid') ??\n this.document.querySelector('.ngb-grid');\n const theme = grid?.getAttribute('data-theme');\n if (theme) {\n this.renderer.setAttribute(panel, 'data-theme', theme);\n } else {\n this.renderer.removeAttribute(panel, 'data-theme');\n }\n }\n\n private anchorRect(anchor: HTMLElement): DOMRect {\n const rect = anchor.getBoundingClientRect();\n if (rect.width > 0 || rect.height > 0) return rect;\n const host = anchor.closest('.grid-filter-menu-host, th') as HTMLElement | null;\n return host?.getBoundingClientRect() ?? rect;\n }\n\n private updatePosition(): void {\n const node = this.el.nativeElement;\n const anchor = this.resolveAnchor();\n if (!anchor) return;\n\n const rect = this.anchorRect(anchor);\n if (!rect.width && !rect.height) return;\n\n const margin = 4;\n const viewportPadding = 8;\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n const panelWidth = Math.max(node.offsetWidth || 0, node.scrollWidth || 0, this.placementWidth());\n const panelHeight = Math.max(node.offsetHeight || 0, node.scrollHeight || 0);\n\n let top = rect.bottom + margin;\n let left = rect.right - panelWidth;\n\n if (left < viewportPadding) left = viewportPadding;\n if (left + panelWidth > viewportWidth - viewportPadding) {\n left = Math.max(viewportPadding, viewportWidth - panelWidth - viewportPadding);\n }\n\n if (panelHeight && top + panelHeight > viewportHeight - viewportPadding) {\n const above = rect.top - margin - panelHeight;\n if (above >= viewportPadding) top = above;\n }\n\n if (top < viewportPadding) top = viewportPadding;\n const maxTop = viewportHeight - panelHeight - viewportPadding;\n if (top > maxTop) top = Math.max(viewportPadding, maxTop);\n\n if (!Number.isFinite(top) || !Number.isFinite(left)) return;\n\n this.applyPosition(node, top, left);\n }\n\n private applyPosition(node: HTMLElement, top: number, left: number): void {\n const topPx = Math.round(top);\n const leftPx = Math.round(left);\n this.panelTop = topPx;\n this.panelLeft = leftPx;\n node.style.removeProperty('inset');\n node.style.setProperty('top', `${topPx}px`, 'important');\n node.style.setProperty('left', `${leftPx}px`, 'important');\n this.cdr.markForCheck();\n }\n\n private placementWidth(): number {\n return this.ngbDatagridFloatingPanelPlacement === 'operator' ? 220 : 288;\n }\n\n private clearPositionStyles(node: HTMLElement): void {\n for (const prop of [\n 'position',\n 'top',\n 'left',\n 'right',\n 'bottom',\n 'inset',\n 'transform',\n 'margin',\n 'z-index',\n ] as const) {\n node.style.removeProperty(prop);\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, Input, OnChanges, SimpleChanges, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ColumnDef } from '../../models/column-def';\nimport { NgbDatagridButtonDirective } from '../../foundation/datagrid-button.directive';\nimport { NgbDatagridControlDirective } from '../../foundation/datagrid-control.directive';\nimport { NgbDatagridFieldShellComponent } from '../../foundation/datagrid-field-shell.component';\nimport { NgbDatagridSurfaceCardComponent } from '../../foundation/datagrid-surface-card.component';\nimport { NgbDatagridFloatingPanelDirective } from '../../foundation/datagrid-floating-panel.directive';\nimport type { Datagrid } from '../datagrid.component';\n\n@Component({\n selector: 'ngb-datagrid-filter-menu-panel',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n NgbDatagridButtonDirective,\n NgbDatagridControlDirective,\n NgbDatagridFieldShellComponent,\n NgbDatagridSurfaceCardComponent,\n NgbDatagridFloatingPanelDirective,\n ],\n template: `\n <div\n class=\"grid-filter-menu-popover ngb-grid__filter-menu-overlay\"\n ngbDatagridFloatingPanel\n [ngbDatagridFloatingPanelAnchor]=\"anchor\"\n ngbDatagridFloatingPanelPlacement=\"menu\"\n (click)=\"$event.stopPropagation()\"\n >\n <ngb-datagrid-surface-card>\n @if (grid.isMultiCheckboxMode(col)) {\n <div class=\"grid-filter-menu-surface__header\">\n <div class=\"grid-filter-menu-surface__eyebrow\">Filter</div>\n <div class=\"grid-filter-menu-surface__title\">{{ col.header }}</div>\n </div>\n }\n\n @if (grid.filterMenuTpls[col.field]; as menuTpl) {\n <ng-container\n [ngTemplateOutlet]=\"menuTpl.template\"\n [ngTemplateOutletContext]=\"grid.filterContext(col, 'menu')\"\n >\n </ng-container>\n } @else {\n @if (grid.isMultiCheckboxMode(col)) {\n <div class=\"grid-filter-menu-surface__multi\">\n <input\n ngbDatagridControl\n class=\"grid-filter-menu-surface__search\"\n type=\"text\"\n placeholder=\"Search...\"\n [(ngModel)]=\"grid.multiCheckboxSearch[col.field]\"\n [attr.aria-label]=\"'Search values for ' + col.header\"\n />\n\n <div class=\"grid-multi-filter-list\">\n <label class=\"grid-multi-filter-option grid-multi-filter-option--summary\">\n <span class=\"grid-multi-filter-option__main\">\n <input\n type=\"checkbox\"\n [checked]=\"grid.isMultiCheckboxAllSelected(col)\"\n [indeterminate]=\"grid.isMultiCheckboxPartiallySelected(col)\"\n (change)=\"grid.toggleMultiCheckboxAll(col)\"\n />\n <span>{{ grid.multiCheckboxToggleLabel(col) }}</span>\n </span>\n <span class=\"grid-multi-filter-option__count\">\n {{ grid.multiCheckboxSelectedCount(col) }} of {{ grid.multiCheckboxTotalCount(col) }}\n </span>\n </label>\n\n @for (option of grid.multiCheckboxVisibleOptions(col); track option.value) {\n <label class=\"grid-multi-filter-option\">\n <span class=\"grid-multi-filter-option__main\">\n <input\n type=\"checkbox\"\n [checked]=\"grid.isMultiCheckboxChecked(col, option.value)\"\n (change)=\"grid.toggleMultiCheckboxValue(col, option.value)\"\n />\n <span>{{ option.label }}</span>\n </span>\n </label>\n }\n </div>\n\n <div class=\"grid-filter-menu-surface__actions grid-filter-menu-surface__actions--multi\">\n <button type=\"button\" class=\"grid-filter-apply\" (click)=\"grid.applyMultiCheckboxFilter(col)\">\n {{ grid.multiCheckboxFilterApplyLabel() }}\n </button>\n @if (grid.multiCheckboxFilterShowCancel()) {\n <button\n type=\"button\"\n class=\"grid-filter-cancel\"\n (click)=\"grid.cancelMultiCheckboxFilter(col)\"\n >\n {{ grid.multiCheckboxFilterCancelLabel() }}\n </button>\n }\n </div>\n </div>\n } @else {\n <div class=\"grid-filter-multi-panel\">\n @for (condition of grid.ensureMenuDraftConditions(col); track $index; let conditionIndex = $index) {\n @if (conditionIndex > 0) {\n <div class=\"grid-filter-join-select\">\n <select\n ngbDatagridControl\n class=\"grid-filter-join-select__control\"\n [ngModel]=\"grid.ensureMenuJoinLogic(col)\"\n (ngModelChange)=\"grid.setMenuJoinLogic(col, $event)\"\n aria-label=\"Combine conditions with\"\n >\n <option [ngValue]=\"'and'\">And</option>\n <option [ngValue]=\"'or'\">Or</option>\n </select>\n </div>\n }\n\n <select\n ngbDatagridControl\n class=\"grid-filter-operator-select\"\n [(ngModel)]=\"condition.operator\"\n [attr.aria-label]=\"'Filter operator for ' + col.header\"\n >\n @for (operator of grid.getAllowedOperators(col); track operator) {\n <option [ngValue]=\"operator\">{{ grid.rowFilterOperatorLabel(col, operator) }}</option>\n }\n </select>\n\n @switch (grid.getColumnFilterType(col)) {\n @case ('date') {\n <ngb-datagrid-field-shell>\n <input\n ngbDatagridControl\n class=\"grid-filter-value-input\"\n type=\"date\"\n [(ngModel)]=\"condition.value\"\n [disabled]=\"!grid.operatorRequiresValue(condition.operator)\"\n [attr.aria-label]=\"grid.columnFilterAriaLabel(col)\"\n />\n </ngb-datagrid-field-shell>\n }\n @case ('boolean') {\n <select\n ngbDatagridControl\n class=\"grid-filter-value-select\"\n [(ngModel)]=\"condition.value\"\n [disabled]=\"!grid.operatorRequiresValue(condition.operator)\"\n >\n <option [ngValue]=\"''\">Select</option>\n <option [ngValue]=\"true\">True</option>\n <option [ngValue]=\"false\">False</option>\n </select>\n }\n @case ('select') {\n <select\n ngbDatagridControl\n class=\"grid-filter-value-select\"\n [(ngModel)]=\"condition.value\"\n [disabled]=\"!grid.operatorRequiresValue(condition.operator)\"\n >\n <option [ngValue]=\"''\">Select</option>\n @for (option of col.options ?? []; track option.value) {\n <option [ngValue]=\"option.value\">{{ option.label }}</option>\n }\n </select>\n }\n @default {\n <input\n ngbDatagridControl\n class=\"grid-filter-value-input\"\n [attr.type]=\"grid.getColumnFilterType(col) === 'numeric' ? 'number' : 'text'\"\n [(ngModel)]=\"condition.value\"\n [disabled]=\"!grid.operatorRequiresValue(condition.operator)\"\n [attr.aria-label]=\"grid.columnFilterAriaLabel(col)\"\n [attr.placeholder]=\"col.filterPlaceholder || grid.rowFilterPlaceholder(col)\"\n />\n }\n }\n }\n\n <div class=\"grid-filter-menu-surface__actions grid-filter-menu-surface__actions--split\">\n <button\n type=\"button\"\n class=\"grid-filter-apply grid-filter-apply--secondary\"\n [disabled]=\"!grid.canApplyMenuFilter(col)\"\n (click)=\"grid.applyMenuFilter(col)\"\n >\n Filter\n </button>\n <button\n type=\"button\"\n class=\"grid-filter-cancel grid-filter-cancel--secondary\"\n [disabled]=\"!grid.canClearMenuFilter(col)\"\n (click)=\"grid.clearMenuFilter(col)\"\n >\n Clear\n </button>\n </div>\n </div>\n }\n }\n </ngb-datagrid-surface-card>\n </div>\n `,\n})\nexport class NgbDatagridFilterMenuPanelComponent<T = unknown> implements AfterViewInit, OnChanges {\n @Input({ required: true }) grid!: Datagrid<T>;\n @Input({ required: true }) col!: ColumnDef<T>;\n @Input({ required: true }) anchor!: HTMLElement;\n\n @ViewChild(NgbDatagridFloatingPanelDirective, { static: true })\n private floatingPanel?: NgbDatagridFloatingPanelDirective;\n\n ngOnChanges(changes: SimpleChanges): void {\n if ('anchor' in changes && this.floatingPanel) {\n this.scheduleReposition();\n }\n }\n\n ngAfterViewInit(): void {\n this.scheduleReposition();\n }\n\n private scheduleReposition(): void {\n requestAnimationFrame(() => {\n this.floatingPanel?.reposition();\n requestAnimationFrame(() => this.floatingPanel?.reposition());\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, Input, ViewChild } from '@angular/core';\nimport { ColumnDef } from '../../models/column-def';\nimport { NgbDatagridFloatingPanelDirective } from '../../foundation/datagrid-floating-panel.directive';\nimport type { Datagrid } from '../datagrid.component';\n\n@Component({\n selector: 'ngb-datagrid-row-filter-operator-panel',\n standalone: true,\n imports: [CommonModule, NgbDatagridFloatingPanelDirective],\n template: `\n <div\n class=\"dropdown-menu show ngb-datagrid-floating-panel grid-filter-operator-menu\"\n ngbDatagridFloatingPanel\n [ngbDatagridFloatingPanelAnchor]=\"anchor\"\n ngbDatagridFloatingPanelPlacement=\"operator\"\n role=\"listbox\"\n [attr.aria-label]=\"'Filter operators for ' + col.header\"\n (click)=\"$event.stopPropagation()\"\n >\n @for (operator of grid.getAllowedOperators(col); track operator) {\n <button\n type=\"button\"\n class=\"dropdown-item\"\n role=\"option\"\n [class.active]=\"grid.rowFilterOperator(col) === operator\"\n [attr.aria-selected]=\"grid.rowFilterOperator(col) === operator\"\n (click)=\"grid.setRowFilterOperator(col, operator)\"\n >\n {{ grid.rowFilterOperatorLabel(col, operator) }}\n </button>\n }\n </div>\n `,\n})\nexport class NgbDatagridRowFilterOperatorPanelComponent<T = unknown> implements AfterViewInit {\n @Input({ required: true }) grid!: Datagrid<T>;\n @Input({ required: true }) col!: ColumnDef<T>;\n @Input({ required: true }) anchor!: HTMLElement;\n\n @ViewChild(NgbDatagridFloatingPanelDirective, { static: true })\n private floatingPanel?: NgbDatagridFloatingPanelDirective;\n\n ngAfterViewInit(): void {\n requestAnimationFrame(() => {\n this.floatingPanel?.reposition();\n requestAnimationFrame(() => this.floatingPanel?.reposition());\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { NgbDatagridButtonDirective } from '../../foundation/datagrid-button.directive';\nimport { NgbDatagridFieldShellComponent } from '../../foundation/datagrid-field-shell.component';\n\n@Component({\n selector: 'ngb-datagrid-toolbar',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, NgbDatagridButtonDirective, NgbDatagridFieldShellComponent],\n template: `\n @if (grid.exportOptions?.enabled || (grid.enableAdd && !grid.isToolbarEditMode()) || grid.enableGlobalFilter) {\n <div\n class=\"datagrid-toolbar\"\n >\n @if (grid.enableGlobalFilter) {\n <div class=\"datagrid-toolbar__search\">\n @if (grid.globalTpl) {\n <ng-container\n [ngTemplateOutlet]=\"grid.globalTpl?.template\"\n [ngTemplateOutletContext]=\"{ $implicit: grid.globalFilterCtrl }\"\n >\n </ng-container>\n } @else {\n <div class=\"datagrid-toolbar__search-label\">Search</div>\n <ngb-datagrid-field-shell icon=\"search\">\n <div class=\"datagrid-toolbar__search-shell\">\n <span class=\"bi bi-search datagrid-toolbar__search-icon\" aria-hidden=\"true\"></span>\n <input\n type=\"search\"\n class=\"datagrid-toolbar__search-input\"\n [placeholder]=\"grid.globalFilterPlaceholder\"\n [formControl]=\"grid.globalFilterCtrl\"\n [attr.aria-label]=\"grid.globalFilterAriaLabel\"\n />\n </div>\n </ngb-datagrid-field-shell>\n }\n </div>\n }\n\n @if (grid.exportOptions?.enabled || (grid.enableAdd && !grid.isToolbarEditMode())) {\n <div class=\"datagrid-toolbar__actions\">\n @if (grid.exportOptions?.enabled && grid.exportButtonTpl) {\n <ng-container\n [ngTemplateOutlet]=\"grid.exportButtonTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: grid.triggerExport.bind(grid) }\"\n >\n </ng-container>\n } @else {\n @if (grid.exportOptions?.enabled && (grid.exportOptions.type === 'pdf' || grid.exportOptions.type === 'both')) {\n <button\n type=\"button\"\n ngbDatagridButton=\"secondary\"\n class=\"datagrid-toolbar__button\"\n [disabled]=\"grid.exporting\"\n (click)=\"grid.export('pdf')\"\n [attr.aria-label]=\"grid.exportAriaLabel('pdf')\"\n >\n <span class=\"bi bi-filetype-pdf\" aria-hidden=\"true\"></span>\n <span>PDF</span>\n </button>\n }\n @if (grid.exportOptions?.enabled && (grid.exportOptions.type === 'excel' || grid.exportOptions.type === 'both')) {\n <button\n type=\"button\"\n ngbDatagridButton=\"secondary\"\n class=\"datagrid-toolbar__button\"\n [disabled]=\"grid.exporting\"\n (click)=\"grid.export('excel')\"\n [attr.aria-label]=\"grid.exportAriaLabel('excel')\"\n >\n <span class=\"bi bi-file-earmark-spreadsheet\" aria-hidden=\"true\"></span>\n <span>Excel</span>\n </button>\n }\n }\n\n @if (grid.enableAdd) {\n <button\n type=\"button\"\n ngbDatagridButton=\"primary\"\n class=\"datagrid-toolbar__button\"\n (click)=\"grid.startAdd()\"\n [disabled]=\"grid.addingNew\"\n [attr.aria-label]=\"grid.addButtonAriaLabel || grid.addButtonText\"\n >\n <span class=\"bi bi-plus-lg\" aria-hidden=\"true\"></span>\n <span>{{ grid.addButtonText }}</span>\n </button>\n }\n </div>\n }\n </div>\n }\n `\n})\nexport class NgbDatagridToolbarComponent {\n @Input({ required: true }) grid!: any;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { NgbDatagridButtonDirective } from '../../foundation/datagrid-button.directive';\n\n@Component({\n selector: 'ngb-datagrid-editing-toolbar',\n standalone: true,\n imports: [CommonModule, NgbDatagridButtonDirective],\n template: `\n @if (grid.showEditingToolbar()) {\n <div class=\"datagrid-editing-toolbar\">\n <div class=\"datagrid-editing-toolbar__start\">\n @if (grid.enableAdd) {\n <button\n type=\"button\"\n ngbDatagridButton=\"success\"\n (click)=\"grid.startAdd()\"\n [disabled]=\"editActive\"\n [attr.aria-disabled]=\"editActive ? 'true' : null\"\n [attr.aria-label]=\"grid.addButtonAriaLabel\"\n >\n <span class=\"bi bi-plus-lg\" aria-hidden=\"true\"></span>\n <span>{{ grid.addButtonText }}</span>\n </button>\n }\n <button\n type=\"button\"\n class=\"datagrid-editing-toolbar__save\"\n ngbDatagridButton=\"primary\"\n [hidden]=\"!editActive\"\n (click)=\"grid.saveToolbarEdit()\"\n [disabled]=\"saveDisabled\"\n [attr.aria-disabled]=\"saveDisabled ? 'true' : null\"\n [attr.aria-hidden]=\"editActive ? null : 'true'\"\n >\n <span>Save</span>\n </button>\n @if (grid.enableDelete && selectedCount > 0 && !editActive) {\n <button\n type=\"button\"\n ngbDatagridButton=\"danger\"\n (click)=\"grid.deleteSelectedRows()\"\n [disabled]=\"selectedCount === 0\"\n [attr.aria-disabled]=\"selectedCount === 0 ? 'true' : null\"\n >\n <span class=\"bi bi-trash\" aria-hidden=\"true\"></span>\n <span>Delete</span>\n </button>\n }\n </div>\n\n @if (selectedCount > 0) {\n <div class=\"datagrid-editing-toolbar__hint\">\n {{ grid.toolbarEditHint }}\n </div>\n }\n\n <div class=\"datagrid-editing-toolbar__end\">\n @if (grid.enableEdit && selectedCount > 0 && !editActive) {\n <button\n type=\"button\"\n ngbDatagridButton=\"primary\"\n (click)=\"grid.editSelectedRow()\"\n [disabled]=\"selectedCount !== 1\"\n [attr.aria-disabled]=\"selectedCount !== 1 ? 'true' : null\"\n >\n <span class=\"bi bi-pencil\" aria-hidden=\"true\"></span>\n <span>Edit</span>\n </button>\n }\n <button\n type=\"button\"\n class=\"datagrid-editing-toolbar__cancel\"\n ngbDatagridButton=\"neutral\"\n [hidden]=\"!editActive\"\n (click)=\"grid.cancelToolbarEdit()\"\n [attr.aria-hidden]=\"editActive ? null : 'true'\"\n >\n <span>Cancel</span>\n </button>\n </div>\n </div>\n }\n `,\n})\nexport class NgbDatagridEditingToolbarComponent {\n @Input({ required: true }) grid!: any;\n\n @Input() selectedCount = 0;\n\n @Input() editActive = false;\n\n @Input() saveDisabled = true;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { NgbDatagridButtonDirective } from '../../foundation/datagrid-button.directive';\nimport { NgbDatagridControlDirective } from '../../foundation/datagrid-control.directive';\n\n@Component({\n selector: 'ngb-datagrid-external-editor',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, NgbDatagridButtonDirective, NgbDatagridControlDirective],\n template: `\n @if (grid.externalEditOpen) {\n <div\n class=\"grid-external-editor\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"grid.externalEditIsNew ? 'Add record' : 'Edit record'\"\n >\n <button type=\"button\" class=\"grid-external-editor__backdrop\" (click)=\"grid.cancelExternalEdit()\" aria-label=\"Close dialog\"></button>\n\n <div class=\"grid-external-editor__panel\">\n <div class=\"grid-external-editor__header\">\n <h3 class=\"grid-external-editor__title\">{{ grid.externalEditIsNew ? 'Add Record' : 'Edit Record' }}</h3>\n <button type=\"button\" class=\"grid-external-editor__close\" (click)=\"grid.cancelExternalEdit()\" aria-label=\"Close\">\n <span class=\"bi bi-x-lg\" aria-hidden=\"true\"></span>\n </button>\n </div>\n\n <form class=\"grid-external-editor__form\" [formGroup]=\"grid.externalForm\" (ngSubmit)=\"grid.saveExternalEdit()\">\n @for (col of grid.externalEditableColumns; track col.field) {\n <label class=\"grid-external-editor__field\">\n <span class=\"grid-external-editor__label\">{{ col.header }}</span>\n @switch (col.type) {\n @case ('boolean') {\n <div class=\"form-check m-0\">\n <input type=\"checkbox\" class=\"form-check-input\" [formControlName]=\"col.field\" [attr.aria-label]=\"col.header\" />\n </div>\n }\n @case ('select') {\n <select ngbDatagridControl [formControlName]=\"col.field\" [attr.aria-label]=\"col.header\">\n @for (o of col.options ?? []; track o.value) {\n <option [ngValue]=\"o.value\">{{ o.label }}</option>\n }\n </select>\n }\n @default {\n <input\n ngbDatagridControl\n [attr.type]=\"col.type === 'number' ? 'number' : col.type === 'date' ? 'date' : col.type === 'email' ? 'email' : 'text'\"\n [formControlName]=\"col.field\"\n [attr.aria-label]=\"col.header\"\n />\n }\n }\n @if (grid.externalForm.get(col.field)?.touched && grid.externalForm.get(col.field)?.invalid) {\n <span class=\"grid-external-editor__error\">Invalid value</span>\n }\n </label>\n }\n\n <div class=\"grid-external-editor__actions\">\n <button type=\"submit\" ngbDatagridButton=\"primary\" [disabled]=\"grid.externalForm.invalid\">Save</button>\n <button type=\"button\" ngbDatagridButton=\"neutral\" (click)=\"grid.cancelExternalEdit()\">Cancel</button>\n </div>\n </form>\n </div>\n </div>\n }\n `,\n})\nexport class NgbDatagridExternalEditorComponent {\n @Input({ required: true }) grid!: any;\n}\n","import { Directive, Input, OnChanges, OnInit, Optional, SimpleChanges } from '@angular/core';\nimport { Datagrid } from '../datagrid.component';\n\nexport interface HighlightItem {\n row: any;\n columnKey?: any;\n}\n\ntype RowKeyFn = (row: any, rowIndex: number) => any;\ntype ColKeyFn = (column: any, columnIndex: number) => any;\n\n@Directive({\n selector: '[ngbGridHighlight]',\n standalone: true\n})\nexport class NgbGridHighlightDirective implements OnInit, OnChanges {\n @Input('ngbGridHighlight') rowKey?: string | RowKeyFn;\n @Input() highlightColumnIndex?: string | ColKeyFn;\n @Input() highlightedIndex: HighlightItem[] = [];\n\n constructor(@Optional() private grid: Datagrid<any>) {}\n\n ngOnInit(): void {\n this.apply();\n }\n\n ngOnChanges(_ch: SimpleChanges): void {\n this.apply();\n }\n\n private apply() {\n if (!this.grid) return;\n this.grid.highlightRowKey = this.rowKey ?? null;\n this.grid.highlightColKey = this.highlightColumnIndex ?? null;\n this.grid.highlightedIndex = this.highlightedIndex ?? [];\n this.grid.updateHighlightCache();\n }\n}\n","import { Injectable, InjectionToken } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class NgbLiveAnnouncer {\n private node: HTMLElement | null = null;\n announce(message: string) {\n if (!this.node) {\n this.node = document.createElement('div');\n this.node.setAttribute('aria-live', 'polite');\n this.node.setAttribute('aria-atomic', 'true');\n this.node.style.position = 'fixed';\n this.node.style.width = '1px'; this.node.style.height = '1px';\n this.node.style.overflow = 'hidden'; this.node.style.clip = 'rect(1px,1px,1px,1px)';\n this.node.style.whiteSpace = 'nowrap';\n document.body.appendChild(this.node);\n }\n this.node.textContent = message;\n }\n}\n\nexport const DND_LIVE_ANNOUNCE = new InjectionToken<((m: string) => void) | null>(\n 'DND_LIVE_ANNOUNCE',\n { providedIn: 'root', factory: () => null }\n);","import { InjectionToken } from '@angular/core';\n\nexport type DndI18n = {\n listLabel: (name?: string) => string;\n pickedUp: () => string;\n dropped: () => string;\n moveToIndex: (pos: number, total: number) => string;\n dropHere: () => string;\n cannotDropHere: () => string;\n};\n\nexport const DND_I18N = new InjectionToken<DndI18n>('DND_I18N');\n\nexport const defaultDndI18n: DndI18n = {\n listLabel: (n) => n ?? 'List',\n pickedUp: () => 'Picked up. Use Arrow keys to move, Enter to drop, Escape to cancel.',\n dropped: () => 'Dropped.',\n moveToIndex: (i, t) => `Moved to position ${i} of ${t}.`,\n dropHere: () => 'Drop here',\n cannotDropHere: () => 'Cannot drop here'\n};\n","// drag-state.service.ts\nimport { Inject, Injectable, Optional, signal } from '@angular/core';\nimport { DND_LIVE_ANNOUNCE } from '../a11y/live-announcer.service';\nimport { DndI18n, defaultDndI18n, DND_I18N } from '../i18n/dnd-i18n';\n\nexport interface DndSession<T = unknown> {\n item: T;\n group?: string;\n fromList?: T[];\n fromIndex?: number;\n fromIsPalette?: boolean;\n fromListRef?: unknown;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class NgbDndState {\n readonly active = signal(false);\n private store = new Map<string, DndSession>();\n private currentId: string | null = null; // ✅ track current session id\n private activeDropList: unknown | null = null;\n\n\n // Public so directives can read strings and announce\n public i18n: DndI18n = defaultDndI18n;\n public announce?: (m: string) => void;\n\n constructor(\n @Optional() @Inject(DND_LIVE_ANNOUNCE) announceFn: ((m: string) => void) | null,\n @Optional() @Inject(DND_I18N) i18n: DndI18n | null\n ) {\n if (i18n) this.i18n = i18n;\n if (announceFn) this.announce = announceFn;\n }\n\n \n createSession<T>(session: DndSession<T>): string {\n const id = 'ngb-dnd-' + (crypto?.randomUUID?.() ?? Math.random().toString(36).slice(2));\n this.store.set(id, session as DndSession);\n this.currentId = id; // ✅ remember current\n this.active.set(true);\n return id;\n }\n\n get(id: string | null): DndSession | null {\n if (!id) return null;\n return this.store.get(id) ?? null;\n }\n\n getCurrent(): DndSession | null { // ✅ fallback accessor\n return this.currentId ? (this.store.get(this.currentId) ?? null) : null;\n }\n\n setActiveDropList(list: unknown): void {\n this.activeDropList = list;\n }\n\n getActiveDropList(): unknown | null {\n return this.activeDropList;\n }\n\n clearActiveDropList(list?: unknown): void {\n if (!list || this.activeDropList === list) {\n this.activeDropList = null;\n }\n }\n\n clear(id?: string | null) {\n if (id) this.store.delete(id);\n if (this.currentId === id) this.currentId = null;\n if (this.store.size === 0) {\n this.activeDropList = null;\n this.active.set(false);\n }\n }\n}\n","import { AfterViewInit, Directive, ElementRef, HostListener, Input, OnDestroy, inject } from '@angular/core';\nimport { NgbDndState } from '../../../../drag-drop/src/service/drag-state.service';\n\nconst MIN_WIDTH = 40;\nconst MAX_WIDTH = 320;\nconst MAX_SAMPLE_ROWS = 50;\nconst CHAR_WIDTH_FACTOR = 0.6;\nconst CHROME_TOLERANCE = 12; // small buffer to ignore reapplication of padding/borders\n\ntype SyncRole = 'header' | 'body';\nexport type NgbColgroupSyncMode = 'auto' | 'explicit';\n\ninterface SyncEntry {\n header?: NgbSyncColgroupDirective;\n bodies: Set<NgbSyncColgroupDirective>;\n widths?: number[];\n}\n\n@Directive({\n selector: '[ngbSyncColgroup]',\n standalone: true\n})\nexport class NgbSyncColgroupDirective implements AfterViewInit, OnDestroy {\n @Input('ngbSyncColgroup') syncId!: string;\n @Input() syncRole: SyncRole = 'header';\n /** `explicit` copies header <col> widths without remeasuring cell content (use with column resizing). */\n @Input() syncMode: NgbColgroupSyncMode = 'auto';\n\n private static registry = new Map<string, SyncEntry>();\n private mutationObserver?: MutationObserver;\n private resizeObserver?: ResizeObserver;\n private rafId: number | null = null;\n private dndState = inject(NgbDndState, { optional: true });\n\n constructor(private el: ElementRef<HTMLElement>) {}\n\n static syncExplicitWidths(syncId: string): void {\n const entry = NgbSyncColgroupDirective.registry.get(syncId);\n entry?.header?.syncExplicitWidths();\n }\n\n ngAfterViewInit(): void {\n if (!this.syncId) return;\n const entry = this.ensureEntry();\n if (this.syncMode === 'explicit') {\n if (this.syncRole === 'header') {\n entry.header = this;\n this.syncExplicitWidths();\n } else {\n entry.bodies.add(this);\n entry.header?.syncExplicitWidths();\n }\n return;\n }\n if (this.syncRole === 'header') {\n entry.header = this;\n this.measureAndDistribute();\n } else {\n entry.bodies.add(this);\n if (entry.header) entry.header.measureAndDistribute();\n if (entry.widths?.length) this.apply(entry.widths);\n this.startObservers();\n }\n }\n\n ngOnDestroy(): void {\n if (!this.syncId) return;\n if (this.rafId != null) cancelAnimationFrame(this.rafId);\n this.mutationObserver?.disconnect();\n this.resizeObserver?.disconnect();\n const entry = NgbSyncColgroupDirective.registry.get(this.syncId);\n if (!entry) return;\n if (entry.header === this) entry.header = undefined;\n entry.bodies.delete(this);\n if (!entry.header && entry.bodies.size === 0) {\n NgbSyncColgroupDirective.registry.delete(this.syncId);\n }\n }\n\n @HostListener('window:resize')\n onResize(): void {\n if (this.syncMode === 'explicit') {\n if (this.syncRole === 'header') this.syncExplicitWidths();\n return;\n }\n if (this.syncRole === 'header') this.measureAndDistribute();\n }\n\n syncExplicitWidths(): void {\n const widths = this.readExplicitWidths();\n if (!widths.length) return;\n const entry = this.ensureEntry();\n if (entry.widths && this.areWidthsEqual(entry.widths, widths)) return;\n entry.widths = widths;\n this.apply(widths);\n entry.bodies.forEach((body) => body.apply(widths));\n }\n\n private readExplicitWidths(): number[] {\n return this.colElements().map((col) => {\n const explicit = parseFloat(col.style.width || '');\n return Number.isFinite(explicit) && explicit > 0 ? explicit : MIN_WIDTH;\n });\n }\n\n measureAndDistribute(): void {\n if (this.syncMode === 'explicit') {\n this.syncExplicitWidths();\n return;\n }\n if (this.dndState?.active()) return;\n const widths = this.measure();\n if (!widths.length) return;\n const entry = this.ensureEntry();\n if (entry.widths && this.areWidthsEqual(entry.widths, widths)) return;\n entry.widths = widths;\n this.apply(widths);\n entry.bodies.forEach(b => b.apply(widths));\n }\n\n private ensureEntry(): SyncEntry {\n let entry = NgbSyncColgroupDirective.registry.get(this.syncId);\n if (!entry) {\n entry = { bodies: new Set<NgbSyncColgroupDirective>() };\n NgbSyncColgroupDirective.registry.set(this.syncId, entry);\n }\n return entry;\n }\n\n private startObservers(): void {\n const bodyTable = this.tableEl();\n const tbody = bodyTable?.querySelector('tbody');\n if (tbody && typeof MutationObserver !== 'undefined' && !tbody.classList.contains('ngb-dnd-list')) {\n this.mutationObserver = new MutationObserver(() => this.scheduleMeasure());\n this.mutationObserver.observe(tbody, { childList: true, subtree: true, characterData: true });\n }\n if (bodyTable && typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver(() => this.scheduleMeasure());\n this.resizeObserver.observe(bodyTable);\n }\n }\n\n private scheduleMeasure(): void {\n if (this.syncMode === 'explicit') return;\n if (this.rafId != null) return;\n this.rafId = requestAnimationFrame(() => {\n this.rafId = null;\n if (this.dndState?.active()) return;\n const entry = NgbSyncColgroupDirective.registry.get(this.syncId);\n entry?.header?.measureAndDistribute();\n });\n }\n\n private colElements(): HTMLTableColElement[] {\n return Array.from(this.el.nativeElement.querySelectorAll('col'));\n }\n\n private tableEl(): HTMLTableElement | null {\n return this.el.nativeElement.closest('table');\n }\n\n private firstBodyForSync(): HTMLTableElement | null {\n const entry = NgbSyncColgroupDirective.registry.get(this.syncId);\n const bodyDir = this.syncRole === 'body'\n ? this\n : entry ? Array.from(entry.bodies.values())[0] : undefined;\n return bodyDir?.tableEl() ?? null;\n }\n\n private measure(): number[] {\n const bodyTable = this.firstBodyForSync();\n const cols = this.colElements();\n const entry = NgbSyncColgroupDirective.registry.get(this.syncId);\n if (!cols.length) return [];\n\n if (!bodyTable) {\n return entry?.widths ?? [];\n }\n\n const bodyRows = Array.from(bodyTable.querySelectorAll<HTMLTableRowElement>('tbody tr'))\n .filter((row) => !Array.from(row.cells).some((cell) => cell.colSpan > 1))\n .slice(0, MAX_SAMPLE_ROWS);\n const headerTable = this.syncRole === 'header' ? this.tableEl() : null;\n const headerRows = Array.from(headerTable?.querySelectorAll('thead tr') ?? []);\n\n return cols.map((col, colIndex) => {\n const fixedWidth = (col.getAttribute('data-fixed') ?? '').toLowerCase() === 'true';\n if (fixedWidth) {\n const explicit = parseFloat(col.style.width || '') || MIN_WIDTH;\n return Math.min(Math.max(explicit, MIN_WIDTH), MAX_WIDTH);\n }\n \n // Measure header content width if available\n let headerContentWidth = 0;\n for (const headerRow of headerRows) {\n const th = headerRow.querySelectorAll('th')[colIndex] as HTMLElement | undefined;\n if (!th) continue;\n headerContentWidth = Math.max(headerContentWidth, this.measureCellContent(th));\n }\n \n // Measure body content width\n let maxContent = 0;\n for (const tr of bodyRows) {\n const td = tr.querySelectorAll('td')[colIndex] as HTMLElement | undefined;\n if (!td) continue;\n maxContent = Math.max(maxContent, this.measureCellContent(td));\n if (maxContent >= MAX_WIDTH) break;\n }\n \n // Use the maximum of header and body content widths\n let finalContent = Math.max(headerContentWidth, maxContent);\n if (finalContent === 0) finalContent = MIN_WIDTH;\n\n let width = Math.min(Math.max(finalContent, MIN_WIDTH), MAX_WIDTH);\n const prev = entry?.widths?.[colIndex];\n if (prev && width > prev) {\n // If the only change is re-adding cell chrome (common when interactive elements span the cell),\n // keep the previous stable width to avoid incremental growth.\n const delta = width - prev;\n if (delta <= CHROME_TOLERANCE) width = prev;\n }\n return width;\n });\n }\n\n private apply(widths: number[]) {\n const cols = this.colElements();\n widths.forEach((w, i) => {\n const col = cols[i];\n if (!col) return;\n col.style.width = w ? `${w}px` : '';\n });\n }\n\n private measureCellContent(cell: HTMLElement): number {\n const style = getComputedStyle(cell);\n const cellClientWidth = cell.clientWidth;\n const cellRect = cell.getBoundingClientRect();\n const chrome =\n (parseFloat(style.paddingLeft) || 0) +\n (parseFloat(style.paddingRight) || 0) +\n (parseFloat(style.borderLeftWidth) || 0) +\n (parseFloat(style.borderRightWidth) || 0);\n\n const interactiveEls = Array.from(cell.querySelectorAll<HTMLElement>('input, select, textarea, button'));\n let interactiveWidth: number | null = null;\n if (interactiveEls.length) {\n interactiveWidth = interactiveEls.reduce((total, el) => {\n const rect = el.getBoundingClientRect();\n const elStyle = getComputedStyle(el);\n const widthStr = (el.style.width || elStyle.width || '').toString().trim();\n const usesPercentWidth = widthStr.endsWith('%');\n const matchesCellWidth =\n (!!cellClientWidth && rect.width && Math.abs(rect.width - cellClientWidth) <= 1) ||\n (cellRect.width > 0 && rect.width > 0 && Math.abs(rect.width - cellRect.width) <= 1);\n const spansCell = usesPercentWidth || matchesCellWidth;\n const margin = (parseFloat(elStyle.marginLeft) || 0) + (parseFloat(elStyle.marginRight) || 0);\n if (spansCell) {\n const textWidth = this.measureTextWidth((el.textContent ?? '').trim(), elStyle);\n const paddingBorder =\n (parseFloat(elStyle.paddingLeft) || 0) +\n (parseFloat(elStyle.paddingRight) || 0) +\n (parseFloat(elStyle.borderLeftWidth) || 0) +\n (parseFloat(elStyle.borderRightWidth) || 0);\n return total + Math.ceil(textWidth + paddingBorder + margin);\n }\n const rectWidth = rect.width || parseFloat(elStyle.width) || ((el.textContent ?? '').length * ((parseFloat(elStyle.fontSize) || 14) * CHAR_WIDTH_FACTOR));\n return total + rectWidth + margin;\n }, 0);\n interactiveWidth = Math.ceil((interactiveWidth || 0) + chrome);\n }\n\n const text = (cell.textContent ?? '').trim();\n const textWidth = Math.ceil(this.measureTextWidth(text, style) + chrome);\n if (interactiveWidth != null) {\n return Math.max(textWidth, interactiveWidth);\n }\n return textWidth;\n }\n\n private areWidthsEqual(prev: number[], next: number[]): boolean {\n if (prev.length !== next.length) return false;\n return prev.every((v, i) => v === next[i]);\n }\n\n private measureTextWidth(text: string, style: CSSStyleDeclaration): number {\n const fontSize = parseFloat(style.fontSize) || 14;\n const font = style.font || `${style.fontStyle} ${style.fontVariant} ${style.fontWeight} ${style.fontSize} / ${style.lineHeight} ${style.fontFamily}`;\n\n let contentWidth = 0;\n const isJsdom = typeof navigator !== 'undefined' && /jsdom/i.test(navigator.userAgent);\n const canvas = !isJsdom && typeof document !== 'undefined' ? document.createElement('canvas') : null;\n let ctx: CanvasRenderingContext2D | null = null;\n if (canvas?.getContext) {\n try {\n ctx = canvas.getContext('2d');\n } catch {\n ctx = null;\n }\n }\n if (ctx && font) {\n ctx.font = font;\n const metrics = ctx.measureText(text);\n contentWidth = metrics?.width ?? 0;\n }\n\n if (!contentWidth) {\n contentWidth = text.length * (fontSize * CHAR_WIDTH_FACTOR);\n }\n return contentWidth;\n }\n}\n","import {\n Directive, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output, inject\n} from '@angular/core';\nimport { NgbDndState, DndSession } from '../service/drag-state.service';\n\nexport interface NgbDndDropEvent<T> {\n item: T;\n fromIndex: number;\n toIndex: number;\n fromList: T[];\n toList: T[];\n sameList: boolean;\n}\n\nexport interface DndCanDropPayload<T = any> {\n dragItem: T; // item being dragged (best-effort if unknown)\n srcList: T[]; // source array (best-effort if unknown)\n srcIndex: number; // index in source (best-effort if unknown)\n dstList: T[]; // destination array (this list’s [ngbDndList])\n dstIndex: number; // intended insertion index\n isExternal: boolean;// srcList !== dstList\n}\n\n/** Guard function; return true to allow, false to block */\nexport type DndCanDropFn<T = any> = (payload: DndCanDropPayload<T>) => boolean;\n\n@Directive({\n selector: '[ngbDndList]',\n standalone: true\n})\nexport class NgbDndListDirective<T = unknown> {\n private el = inject(ElementRef<HTMLElement>);\n private state = inject(NgbDndState);\n \n @Input() dndChildrenKey: string | null = 'children';\n\n /** Bind your array here: <div [ngbDndList]=\"items\"> */\n @Input('ngbDndList') list!: T[];\n /** Optional: group barrier across lists */\n @Input() dndGroup?: string;\n /** Disable this list */\n @Input() dndDisabled = false;\n\n /** NEW: clone if source wasn't a list (e.g. palette) */\n @Input() dndCloneOnDrop = false;\n /** NEW: custom clone function */\n @Input() dndCloneFn?: (item: T) => T;\n\n @Input() dndIsPalette = false;\n\n @Input() dndCanDrop: boolean | DndCanDropFn<any> = true;\n\n // (optional) visual feedback while hovering a denied list\n private _denied = false;\n @HostBinding('class.ngb-dnd-denied') get denied() { return this._denied; }\n\n @Input() dndAriaLabel?: string;\n @HostBinding('attr.aria-label') get ariaLabel() { return this.dndAriaLabel || null; }\n /** Fires after item is inserted */\n @Output() dndDropped = new EventEmitter<NgbDndDropEvent<T>>();\n\n @HostBinding('attr.role') role = 'list';\n\n @HostBinding('class.ngb-dnd-list') hostClass = true;\n\n // NEW: when the pointer is over this list while dragging\n private hover = false;\n @HostBinding('class.ngb-dnd-over') get isOver() { return this.hover; }\n\n // NEW: reflect whether the current drag can drop here (for CSS)\n private canDrop: boolean | null = null;\n @HostBinding('attr.data-drop-valid') get dataDropValid() {\n // values: \"true\" | \"false\" | null (attribute omitted)\n return this.canDrop === true ? 'true' : this.canDrop === false ? 'false' : null;\n }\n private placeholder?: HTMLElement;\n private lastIndex = -1;\n\n @HostListener('dragenter', ['$event'])\n onDragEnter(ev: DragEvent) {\n if (this.dndDisabled) return;\n const s = this.getSession(ev);\n // If there is an active drag and groups match, indicate hover\n if (s) {\n ev.preventDefault();\n this.hover = true;\n this.canDrop = true; // group check already done in getSession\n } else {\n // Drag exists but not compatible with this list (group mismatch)\n this.hover = true;\n this.canDrop = false;\n }\n }\n\n @HostListener('dragover', ['$event'])\n onDragOver(ev: DragEvent) {\n if (this.dndDisabled) return;\n\n const s = this.getSession(ev);\n if (!s) {\n // Not a compatible session → show invalid\n this.hover = true;\n this.canDrop = false;\n return;\n }\n\n ev.preventDefault();\n ev.stopPropagation();\n this.state.setActiveDropList(this);\n this.hover = true;\n this.canDrop = true;\n\n try { if (ev.dataTransfer) ev.dataTransfer.dropEffect = this.dndCloneOnDrop ? 'copy' : 'move'; } catch { }\n\n this.ensurePlaceholder();\n const idx = this.indexFromPointer(ev);\n if (idx !== this.lastIndex) {\n this.lastIndex = idx;\n this.positionPlaceholderAt(idx);\n }\n }\n\n @HostListener('dragleave', ['$event'])\n onDragLeave(ev: DragEvent) {\n // Only reset when actually leaving this list (not moving between children)\n if (!this.el.nativeElement.contains(ev.relatedTarget as Node)) {\n this.removePlaceholder();\n this.lastIndex = -1;\n this.hover = false;\n this.canDrop = null;\n this.state.clearActiveDropList(this);\n }\n }\n\n @HostListener('document:drop', ['$event'])\n onDocumentDrop(ev: DragEvent) {\n const activeDropList = this.state.getActiveDropList();\n const target = ev.target as Element | null;\n const host = this.el.nativeElement;\n const targetList = target?.closest?.('.ngb-dnd-list');\n const dropTargetsThisList = targetList === host;\n\n if (activeDropList && activeDropList !== this && !dropTargetsThisList) {\n this.resetVisualState();\n return;\n }\n\n if (!host.contains(ev.target as Node) && activeDropList !== this) {\n this.resetVisualState();\n return;\n }\n if (!activeDropList) {\n if (targetList && targetList !== host) {\n this.resetVisualState();\n return;\n }\n }\n\n const anyEv = ev as any;\n if (anyEv.__ngbHandled) return;\n anyEv.__ngbHandled = true;\n\n ev.preventDefault();\n this.performDrop(ev);\n\n this.resetVisualState();\n }\n\n @HostListener('drop', ['$event'])\n onDrop(ev: DragEvent) {\n if (this.dndDisabled) return;\n const activeDropList = this.state.getActiveDropList();\n const target = ev.target as Element | null;\n const targetList = target?.closest?.('.ngb-dnd-list');\n const dropTargetsThisList = targetList === this.el.nativeElement;\n if (activeDropList && activeDropList !== this && !dropTargetsThisList) {\n this.resetVisualState();\n return;\n }\n\n const anyEv = ev as any;\n if (anyEv.__ngbHandled) return;\n anyEv.__ngbHandled = true;\n\n ev.preventDefault();\n ev.stopPropagation();\n\n this.performDrop(ev);\n\n this.resetVisualState();\n }\n\n @HostListener('document:dragend')\n @HostListener('document:dragcancel')\n onDocumentDragFinished() {\n this.resetVisualState();\n }\n\n // helpers\n private getSession(ev: DragEvent): DndSession | null {\n // Chrome often returns \"\" during dragover/enter; try service fallback\n const sid = ev.dataTransfer?.getData('text/ngb-dnd') || null;\n let s = sid ? this.state.get(sid) : null;\n if (!s) s = this.state.getCurrent(); // ✅ fallback\n if (!s) return null;\n\n if (this.dndGroup && s.group && s.group !== this.dndGroup) return null;\n return s;\n }\n\n private ensurePlaceholder() {\n if (!this.placeholder) {\n const hostTag = this.el.nativeElement.tagName;\n if (hostTag === 'TBODY') {\n const row = document.createElement('tr');\n row.className = 'ngb-dnd-placeholder';\n row.setAttribute('aria-hidden', 'true');\n const cell = document.createElement('td');\n const sampleRow = this.el.nativeElement.querySelector('tr:not(.ngb-dnd-placeholder)');\n const colspan = sampleRow?.children?.length || 1;\n cell.colSpan = colspan;\n cell.style.padding = '0';\n cell.style.border = '0';\n cell.style.height = '0';\n const bar = document.createElement('div');\n bar.className = 'ngb-dnd-placeholder__bar';\n cell.appendChild(bar);\n row.appendChild(cell);\n this.placeholder = row;\n } else {\n this.placeholder = document.createElement('div');\n this.placeholder.className = 'ngb-dnd-placeholder';\n this.placeholder.setAttribute('aria-hidden', 'true');\n }\n this.el.nativeElement.appendChild(this.placeholder);\n }\n }\n private removePlaceholder() {\n if (this.placeholder?.parentElement) this.placeholder.parentElement.removeChild(this.placeholder);\n this.placeholder = undefined;\n }\n private resetVisualState() {\n this.removePlaceholder();\n this.lastIndex = -1;\n this.hover = false;\n this.canDrop = null;\n this._denied = false;\n this.state.clearActiveDropList(this);\n }\n private positionPlaceholderAt(index: number) {\n const host = this.el.nativeElement;\n const children = this.draggableChildren();\n const before = children[index];\n if (!before) host.appendChild(this.placeholder!);\n else host.insertBefore(this.placeholder!, before);\n }\n private indexFromPointer(ev: DragEvent) {\n const y = ev.clientY;\n const children = this.draggableChildren();\n for (let i = 0; i < children.length; i++) {\n const r = children[i].getBoundingClientRect();\n const mid = r.top + r.height / 2;\n if (y < mid) return i;\n }\n return children.length;\n }\n\n private draggableChildren(): HTMLElement[] {\n const host = this.el.nativeElement;\n const items = Array.from(host.children)\n .filter(c => c !== this.placeholder && (c as HTMLElement).classList.contains('ngb-dnd-item')) as HTMLElement[];\n if (items.length) return items;\n return Array.from(host.children).filter(c => c !== this.placeholder) as HTMLElement[];\n }\n\n private cloneItem(i: T): T {\n if (this.dndCloneFn) return this.dndCloneFn(i);\n // fallback shallow clone\n if (Array.isArray(i)) return (i.slice() as unknown) as T;\n if (i && typeof i === 'object') return { ...(i as Record<string, unknown>) } as T;\n return i; // primitive\n }\n\n private isDroppingIntoOwnDescendant(item: any, targetList: any[]): boolean {\n const key = this.dndChildrenKey;\n if (!key || !item) return false;\n\n const stack: any[][] = [];\n if (Array.isArray(item[key])) stack.push(item[key]);\n\n while (stack.length) {\n const arr = stack.pop()!;\n if (arr === targetList) return true;\n for (const child of arr) {\n const kids = child?.[key];\n if (Array.isArray(kids)) stack.push(kids);\n }\n }\n return false;\n }\n /**\n * Build a guard payload using whatever drag context you already store.\n * If some fields don’t exist in your code, the fallbacks keep it working.\n */\n private _buildGuardPayload(session: DndSession, dstIndex: number): DndCanDropPayload<any> {\n const srcList = (session.fromList as any[]) ?? [];\n const srcIndex = typeof session.fromIndex === 'number' ? session.fromIndex : -1;\n const dstList = this.list as any[];\n\n return {\n dragItem: session.item,\n srcList,\n srcIndex,\n dstList,\n dstIndex,\n isExternal: session.fromIsPalette === true || srcList !== dstList,\n };\n }\n\n /**\n * Compute destination index from the event position (no placeholder var needed).\n * Uses vertical list heuristics; adjust for horizontal if your list is horizontal.\n */\n private _computeDropIndex(ev: DragEvent): number {\n const host = (this as any)._host?.nativeElement\n ?? (this as any)._el?.nativeElement\n ?? (this as any).el?.nativeElement\n ?? (this as any).elementRef?.nativeElement\n ?? null;\n\n if (!host) return (this.list as any[])?.length ?? 0;\n\n const children = this.draggableChildren();\n const y = ev.clientY;\n\n for (let i = 0; i < children.length; i++) {\n const rect = children[i].getBoundingClientRect();\n const midY = rect.top + rect.height / 2;\n if (y < midY) return i;\n }\n return children.length;\n }\n // Evaluate the guard safely\n private _allowDrop<T>(payload: DndCanDropPayload<T>): boolean {\n const guard = this.dndCanDrop;\n if (typeof guard === 'boolean') return guard;\n try { return guard ? !!guard(payload) : true; } catch { return false; }\n }\n\n // Extract your existing onDrop logic into a single method:\n private performDrop(ev: DragEvent) {\n const session = this.getSession(ev);\n if (!session) return;\n\n const dstIndex = this._computeDropIndex(ev);\n\n // Guard check (block drop if not allowed)\n const payload = this._buildGuardPayload(session, dstIndex);\n if (!this._allowDrop(payload)) {\n ev.preventDefault();\n ev.stopPropagation();\n this._denied = true; // cosmetic: adds .ngb-dnd-denied for styling\n return; // ⛔ do not mutate arrays\n }\n this._denied = false;\n\n // ❗ block cycles: don't allow dropping an item into its own descendants\n if (this.isDroppingIntoOwnDescendant(session.item, this.list)) {\n // optional: visual/aural feedback\n this.state.announce?.(this.state.i18n.cannotDropHere());\n this.removePlaceholder();\n this.lastIndex = -1;\n return;\n }\n const targetIndex = this.lastIndex < 0 ? this.list.length : this.lastIndex;\n const fromList = (session.fromList as T[]) ?? undefined;\n const fromIndex = (session.fromIndex as number) ?? -1;\n const sameList = fromList === this.list;\n const isExternal = session.fromIsPalette === true || !fromList || fromIndex === -1;\n\n // ✅ External (palette): always transform/clone into canvas, and DO NOT remove from source.\n // ✅ Canvas↔Canvas: move by default; if you want to clone across canvas, set dndCloneOnDrop=true.\n const shouldCloneAcrossCanvas = this.dndCloneOnDrop && !sameList && !isExternal;\n\n const itemToInsert: T =\n isExternal\n ? this.cloneItem(session.item as T) // transform palette item to Panel\n : (shouldCloneAcrossCanvas ? this.cloneItem(session.item as T) : (session.item as T));\n\n // Remove from source ONLY for real moves within canvas\n if (!isExternal && !shouldCloneAcrossCanvas && fromIndex > -1) {\n fromList!.splice(fromIndex, 1);\n }\n\n // adjust index when reordering within same list and moving forward\n const insertAt = sameList && fromIndex > -1 && targetIndex > fromIndex\n ? targetIndex - 1\n : targetIndex;\n\n this.list.splice(insertAt, 0, itemToInsert);\n\n this.removePlaceholder();\n this.lastIndex = -1;\n\n this.dndDropped.emit({\n item: itemToInsert,\n fromIndex,\n toIndex: insertAt,\n fromList: fromList ?? [],\n toList: this.list,\n sameList\n });\n\n this.state.announce?.(this.state.i18n.dropped());\n\n }\n\n\n}\n","import {\n Directive, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output, inject, Optional\n} from '@angular/core';\nimport { NgbDndState } from '../service/drag-state.service';\nimport { NgbDndListDirective } from './dnd-list.directive';\n\n@Directive({\n selector: '[ngbDndItem]',\n standalone: true\n})\nexport class NgbDndItemDirective<T = unknown> {\n private el = inject(ElementRef<HTMLElement>);\n private state = inject(NgbDndState);\n constructor(@Optional() private parentList?: NgbDndListDirective<T>) {}\n\n /** required: the value carried by this row/panel */\n @Input('ngbDndItem') item!: T;\n /** optional: constrain cross-list drops */\n @Input() dndGroup?: string;\n /** index inside its parent list (bind to the rendered row index) */\n @Input() dndIndex?: number;\n /** Explicit source list for recursive templates where DI can be ambiguous. */\n @Input() dndSourceList?: T[];\n @Input() dndDisabled = false;\n\n @Output() dndDragStart = new EventEmitter<T>();\n @Output() dndDragEnd = new EventEmitter<void>();\n\n @HostBinding('attr.draggable') get draggable() { return !this.dndDisabled; }\n @HostBinding('class.ngb-dnd-item') hostClass = true;\n @HostBinding('class.ngb-dnd-dragging') dragging = false;\n @HostBinding('attr.aria-grabbed') get ariaGrabbed() { return this.dragging ? 'true' : 'false'; }\n @HostBinding('attr.role') role = 'listitem';\n @HostBinding('attr.tabindex') tabIndex = 0; // keyboard focusable\n\n private sessionId: string | null = null;\n\n @HostListener('dragstart', ['$event'])\n onDragStart(ev: DragEvent) {\n const eventWithFlag = ev as DragEvent & { __ngbDndItemStarted?: boolean };\n if (eventWithFlag.__ngbDndItemStarted) return;\n eventWithFlag.__ngbDndItemStarted = true;\n\n if (this.dndDisabled || this.item == null) { ev.preventDefault(); return; }\n\n this.sessionId = this.state.createSession({\n item: this.item,\n group: this.dndGroup ?? this.parentList?.dndGroup,\n fromList: this.dndSourceList ?? this.parentList?.list,\n fromIndex: this.dndIndex,\n fromListRef: this.parentList,\n fromIsPalette: this.parentList?.dndIsPalette === true\n\n });\n\n // ✅ set both a custom and a plain text payload; keep plain text non-empty\n ev.dataTransfer?.setData('text/ngb-dnd', this.sessionId);\n ev.dataTransfer?.setData('text/plain', 'ngb'); // some browsers require non-empty\n if (ev.dataTransfer) ev.dataTransfer.effectAllowed = 'copyMove';\n\n ev.dataTransfer?.setDragImage(this.el.nativeElement, 16, 16);\n\n this.dragging = true;\n this.dndDragStart.emit(this.item);\n }\n\n @HostListener('dragend')\n onDragEnd() {\n this.dragging = false;\n this.state.clear(this.sessionId);\n this.sessionId = null;\n this.dndDragEnd.emit();\n }\n\n @HostListener('keydown', ['$event'])\n onKeydown(ev: KeyboardEvent) {\n if (this.dndDisabled) return;\n\n // start dragging (keyboard mode)\n if (ev.code === 'Space' && !this.dragging) {\n ev.preventDefault();\n this.onDragStart(new DragEvent('dragstart')); // reuse logic\n return;\n }\n\n if (!this.dragging) return;\n\n // move within same list\n const parent = this.parentList;\n if (!parent || typeof this.dndIndex !== 'number') return;\n\n if (ev.code === 'ArrowUp' || ev.code === 'ArrowDown') {\n ev.preventDefault();\n const list = parent.list;\n const from = this.dndIndex!;\n let to = ev.code === 'ArrowUp' ? from - 1 : from + 1;\n to = Math.max(0, Math.min(list.length - 1, to));\n if (to !== from) {\n const [it] = list.splice(from, 1);\n list.splice(to, 0, it);\n this.dndIndex = to;\n // announce (see live region below)\n this.state.announce?.(this.state.i18n.moveToIndex(to + 1, list.length));\n }\n }\n\n if (ev.code === 'Enter') { ev.preventDefault(); this.onDragEnd(); } // drop\n if (ev.code === 'Escape') { ev.preventDefault(); this.onDragEnd(); } // cancel\n }\n\n\n}\n","import { InjectionToken } from '@angular/core';\n\n/** Injection token for the active `ngb-datagrid` instance (layout toolbar tools). */\nexport const NGB_DATAGRID_HOST = new InjectionToken('NgbDatagridHost');\n","/** Localizable strings for built-in datagrid UI (pagination, filters, actions, a11y). */\nexport interface NgbDatagridLabels {\n paginationRange?: string;\n rowsPerPage?: string;\n emptyState?: string;\n booleanYes?: string;\n booleanNo?: string;\n selectAll?: string;\n unselectAll?: string;\n selectRow?: string;\n unselectRow?: string;\n globalFilter?: string;\n expandRow?: string;\n collapseRow?: string;\n exportPdf?: string;\n exportExcel?: string;\n stickyRowToggle?: string;\n editRow?: string;\n deleteRow?: string;\n reorderColumn?: string;\n resizeColumn?: string;\n openFilterMenu?: string;\n clearFilter?: string;\n filterOperator?: string;\n columnFilter?: string;\n sortBy?: string;\n stickyBadge?: string;\n addRow?: string;\n addRowButton?: string;\n save?: string;\n cancel?: string;\n edit?: string;\n delete?: string;\n multiCheckboxApply?: string;\n multiCheckboxCancel?: string;\n combineConditions?: string;\n searchFilterValues?: string;\n}\n\nexport const NGB_DATAGRID_DEFAULT_LABELS: Required<NgbDatagridLabels> = {\n paginationRange: '{start}–{end} of {total}',\n rowsPerPage: 'Rows per page',\n emptyState: 'No records to display.',\n booleanYes: 'Yes',\n booleanNo: 'No',\n selectAll: 'Select all rows',\n unselectAll: 'Unselect all rows',\n selectRow: 'Select row {index}',\n unselectRow: 'Unselect row {index}',\n globalFilter: 'Search all columns',\n expandRow: 'Expand row',\n collapseRow: 'Collapse row',\n exportPdf: 'Export to PDF',\n exportExcel: 'Export to Excel',\n stickyRowToggle: 'Toggle sticky row',\n editRow: 'Edit row {index}',\n deleteRow: 'Delete row {index}',\n reorderColumn: 'Reorder {header}',\n resizeColumn: 'Resize {header}',\n openFilterMenu: 'Open filter menu for {header}',\n clearFilter: 'Clear filter for {header}',\n filterOperator: 'Filter operator for {header}',\n columnFilter: '{header} filter',\n sortBy: 'Sort by {header}. Current sort {state}.',\n stickyBadge: 'STICKY',\n addRow: 'Add row',\n addRowButton: '+ Add',\n save: 'Save',\n cancel: 'Cancel',\n edit: 'Edit',\n delete: 'Delete',\n multiCheckboxApply: 'OK',\n multiCheckboxCancel: 'Cancel',\n combineConditions: 'Combine conditions with',\n searchFilterValues: 'Search values for {header}',\n};\n\n/** Documented keyboard shortcuts when [keyboardNavigation] is enabled. */\nexport const NGB_DATAGRID_KEYBOARD_SHORTCUTS = {\n moveCell: 'Arrow keys — move focus between data cells',\n firstLastColumn: 'Home / End — first or last column in the row',\n firstLastRow: 'Ctrl+Home / Ctrl+End — first or last row on the page',\n sortColumn: 'Enter on focused sortable header — cycle sort',\n toggleSelection: 'Space on a focused row — toggle row selection (when enabled)',\n pagePrevNext: 'Alt+Page Up / Alt+Page Down — previous or next page (when paginated)',\n openFilter: 'F3 on a focused column — open row filter operator menu (row filter mode)',\n cancelOverlay: 'Escape — close filter menus and cancel in-cell edit',\n commitIncell: 'Enter — commit in-cell edit; Arrow keys move between editable cells while editing',\n} as const;\n\nexport type NgbDatagridTextDirection = 'ltr' | 'rtl' | 'auto';\n\nexport function ngbFormatDatagridLabel(\n template: string,\n tokens: Record<string, string | number>\n): string {\n return template.replace(/\\{(\\w+)\\}/g, (_, key: string) => {\n const value = tokens[key];\n return value === undefined || value === null ? '' : String(value);\n });\n}\n","import { Component, Input, EventEmitter, Output, inject, AfterContentInit, ContentChildren, QueryList, OnChanges, SimpleChanges, TemplateRef, ElementRef, ViewChild, ChangeDetectorRef, HostListener, ViewEncapsulation, forwardRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ColumnDef, ColumnType } from '../models/column-def';\nimport {\n NgbDatagridPageableSettings,\n NgbDatagridPagerPosition,\n NgbDatagridPagerType,\n NGB_DATAGRID_DEFAULT_PAGEABLE,\n ngbResolvePageableSettings,\n} from '../models/datagrid-pageable';\nimport { FormsModule, ReactiveFormsModule, FormBuilder, FormGroup, Validators, AbstractControl, FormControl } from '@angular/forms';\nimport {\n NgbCellTemplate,\n NgbEditorTemplate,\n NgbFilterTemplate,\n NgbFilterMenuTemplate,\n NgbGlobalFilterTemplate,\n NgbPagerTemplate,\n CellCtx,\n EditCtx,\n FilterCtx,\n PagerCtx,\n} from '../directives/datagrid-templates.directive';\nimport { ContentChild } from '@angular/core';\nimport { NgbRowDetailTemplate } from '../directives/datagrid-templates.directive';\nimport { ngbResolvePagerPageSizeOptions } from '../../../pagination';\nimport { firstValueFrom, isObservable, Observable } from 'rxjs';\nimport {\n NgbColumnReorderEvent,\n NgbColumnReorderOptions,\n NgbDataGridState,\n NgbDataGridExportOptions,\n NgbDataGridProcessOptions,\n NgbDataGridTheme,\n NgbDataGridResponsiveOptions,\n NgbEditMode\n} from '../datagrid.types';\nimport { ngbApplyDataGridOperations } from '../data-operations';\nimport { ExcelExportAdapter, NgbExportService, PdfExportAdapter } from '../services/export.services';\nimport { NgbDatagridDefaultEditService, NgbDatagridEditService, NgbDatagridTrackByFn } from '../services/editing.service';\nimport { JsPdfAdapter } from '../adapters/jsdf.adapter';\nimport { BrowserExcelExportAdapter } from '../adapters/browser-excel-export.adapter';\n\nimport { ExportButtonDirective, ExportButtonContext } from '../directives/export-button.directive';\nimport { NgbGridColumnDirective } from '../directives/grid-column.directive';\nimport { NgbDatagridAddRowComponent } from './components/datagrid-add-row.component';\nimport { NgbDatagridColgroupComponent } from './components/datagrid-colgroup.component';\nimport { NgbDatagridDataRowComponent } from './components/datagrid-data-row.component';\nimport { NgbDatagridDetailRowComponent } from './components/datagrid-detail-row.component';\nimport { NgbDatagridFooterComponent } from './components/datagrid-footer.component';\nimport { NgbDatagridHeaderComponent } from './components/datagrid-header.component';\nimport { NgbDatagridFilterMenuPanelComponent } from './components/datagrid-filter-menu-panel.component';\nimport { NgbDatagridRowFilterOperatorPanelComponent } from './components/datagrid-row-filter-operator-panel.component';\nimport { NgbDatagridToolbarComponent } from './components/datagrid-toolbar.component';\nimport { NgbDatagridEditingToolbarComponent } from './components/datagrid-editing-toolbar.component';\nimport { NgbDatagridExternalEditorComponent } from './components/datagrid-external-editor.component';\nimport { NgbGridHighlightDirective, HighlightItem } from './directives/grid-highlight.directive';\nimport { NgbSyncColgroupDirective } from './directives/colgroup-sync.directive';\nimport { NgbDndDropEvent, NgbDndListDirective } from '../../../drag-drop/src/directive/dnd-list.directive';\nimport { NgbDndItemDirective } from '../../../drag-drop/src/directive/dnd-item.directive';\nimport {\n NgbCompositeFilterDescriptor,\n NgbFilterDescriptor,\n NgbFilterable,\n NgbFilterMode,\n NgbFilterOperator,\n ngbAllowedFilterOperators,\n ngbColumnTypeToFilterType,\n ngbDefaultFilterOperator,\n ngbFilterOperatorLabel,\n ngbIsCompositeFilter,\n ngbSetFieldFilter,\n NgbMenuFilterConditionDraft\n} from '../models/filtering';\nimport { NGB_DATAGRID_HOST } from '../layout-toolbar/datagrid-host.token';\nimport { NgbMultiCheckboxFilterOptions } from '../datagrid.types';\nimport {\n NGB_DATAGRID_DEFAULT_LABELS,\n NgbDatagridLabels,\n NgbDatagridTextDirection,\n ngbFormatDatagridLabel,\n} from '../models/datagrid-labels';\n\ntype SortDir = 'asc' | 'desc' | '';\n\ntype Key<T> = Extract<keyof T, string>;\n\ntype KeyOf<T> = Extract<keyof T, string>;\n\nconst MAX_EMAIL_LENGTH = 254;\nconst SELECTION_COL_WIDTH = 48;\nconst DETAIL_COL_WIDTH = 48;\nconst STICKY_TOGGLE_COL_WIDTH = 48;\nconst ACTION_COL_WIDTH = 176;\n\ntype UtilityColumnKind = 'selection' | 'detail' | 'sticky-toggle' | 'actions';\n\nexport type NgbTableResponsive = true | false | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';\nexport interface NgbTableOptions {\n stripedRows?: boolean;\n stripedColumns?: boolean;\n hoverRows?: boolean;\n activeRows?: boolean;\n bordered?: boolean;\n borderless?: boolean;\n small?: boolean;\n groupDividers?: boolean;\n align?: 'top' | 'middle' | 'bottom';\n caption?: string;\n captionSide?: 'top' | 'bottom';\n responsive?: NgbTableResponsive;\n stickyHeader?: boolean;\n stickyFooter?: boolean;\n stickyRows?: boolean;\n density?: 'comfortable' | 'compact';\n stacked?: boolean;\n /** `list` = single-column cards; `cards` = multi-column card rows (use `stackedGroup` on columns). */\n stackedLayout?: 'list' | 'cards';\n /** Alternating row backgrounds in the table body (Figma patient grid). */\n zebraStripes?: boolean;\n}\n\n/** Tabular columns vs adaptive stacked cards (`stacked` in {@link NgbTableOptions}). */\nexport type NgbDataLayoutMode = 'tabular' | 'stacked';\n\nexport type NgbSelectionMode = 'none' | 'single' | 'multiple';\nexport type NgbSelectionBehavior = 'row' | 'checkbox' | 'both';\nexport type NgbSelectionKeyMode = 'desktop' | 'mobile';\nexport type NgbRowKey = string | ((row: any, rowIndex: number) => any);\nexport type NgbColKey = string | ((column: any, columnIndex: number) => any);\n\nexport interface NgbSelectionLabels {\n selectAll?: string;\n unselectAll?: string;\n selectRow?: string;\n unselectRow?: string;\n}\n\nconst isReasonableEmail = (value: unknown): boolean => {\n if (value == null) return false;\n const str = String(value);\n if (!str || str.length > MAX_EMAIL_LENGTH) return false;\n // Basic, linear-time check: one \"@\", non-empty local part, and a domain with at least one \".\".\n const at = str.indexOf('@');\n if (at <= 0) return false;\n if (str.indexOf('@', at + 1) !== -1) return false;\n if (at === str.length - 1) return false;\n if (/\\s/.test(str)) return false;\n const dot = str.lastIndexOf('.');\n if (dot <= at + 1) return false;\n if (dot === str.length - 1) return false;\n return true;\n};\n\n@Component({\n selector: 'ngb-datagrid',\n templateUrl: './datagrid.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NgbSyncColgroupDirective,\n NgbGridHighlightDirective,\n NgbDatagridToolbarComponent,\n NgbDatagridEditingToolbarComponent,\n NgbDatagridExternalEditorComponent,\n NgbDatagridColgroupComponent,\n NgbDatagridHeaderComponent,\n NgbDatagridFilterMenuPanelComponent,\n NgbDatagridRowFilterOperatorPanelComponent,\n NgbDatagridAddRowComponent,\n NgbDatagridDataRowComponent,\n NgbDatagridDetailRowComponent,\n NgbDatagridFooterComponent,\n NgbDndListDirective,\n NgbDndItemDirective\n ],\n styleUrls: ['./datagrid.component.scss'],\n providers: [\n { provide: PdfExportAdapter, useClass: JsPdfAdapter },\n { provide: ExcelExportAdapter, useClass: BrowserExcelExportAdapter },\n { provide: NGB_DATAGRID_HOST, useExisting: forwardRef(() => Datagrid) },\n ],\n standalone:true\n})\nexport class Datagrid<T = any> implements AfterContentInit, OnChanges {\n /** Column definitions to render */\n private _columns: ColumnDef<T>[] = [];\n @Input()\n get columns(): ColumnDef<T>[] {\n return this._columns;\n }\n set columns(value: ColumnDef<T>[] | null | undefined) {\n this._columns = value ?? [];\n this.invalidateColumnCaches();\n this.syncColumnWidthOverrides(true);\n this.syncColumnOrder(true);\n }\n\n /** Row data to display */\n private _data: T[] = [];\n @Input()\n get data(): T[] {\n return this._data;\n }\n set data(value: T[] | null | undefined) {\n this._data = value ?? [];\n this.invalidateDataCaches();\n }\n /**\n * When `true`, shows a loading overlay and sets `aria-busy` on the grid root.\n * Use while fetching remote data before assigning `[data]`.\n */\n @Input() loading = false;\n /**\n * Total record count for paging and range labels when using server-side data binding.\n * When set and greater than `data.length`, the grid treats `[data]` as the current page only\n * (no client-side page slicing). Omit for local in-memory arrays.\n */\n private _total: number | null = null;\n @Input()\n get total(): number | null {\n return this._total;\n }\n set total(value: number | null | undefined) {\n this._total = value ?? null;\n this.invalidatePagedCache();\n }\n private _enableSorting = false;\n @Input()\n get enableSorting(): boolean {\n return this._enableSorting;\n }\n set enableSorting(value: boolean) {\n this._enableSorting = value;\n this.invalidateSortedCaches();\n this.markGridForCheck();\n }\n private _enableFiltering = false;\n @Input()\n get enableFiltering(): boolean {\n return this._enableFiltering;\n }\n set enableFiltering(value: boolean) {\n this._enableFiltering = value;\n this.invalidateFilteredCaches();\n this.markGridForCheck();\n }\n private _filterable: NgbFilterable = false;\n @Input()\n get filterable(): NgbFilterable {\n return this._filterable;\n }\n set filterable(value: NgbFilterable | null | undefined) {\n this._filterable = value ?? false;\n this.invalidateFilteredCaches();\n this.markGridForCheck();\n }\n private _enableGlobalFilter = false;\n @Input()\n get enableGlobalFilter(): boolean {\n return this._enableGlobalFilter;\n }\n set enableGlobalFilter(value: boolean) {\n this._enableGlobalFilter = value;\n this.invalidateFilteredCaches();\n this.markGridForCheck();\n }\n private _filterMode: NgbFilterMode = 'row';\n @Input()\n get filterMode(): NgbFilterMode {\n return this._filterMode;\n }\n set filterMode(value: NgbFilterMode | null | undefined) {\n this._filterMode = value ?? 'row';\n this.markGridForCheck();\n }\n private _filter: NgbCompositeFilterDescriptor | null = null;\n @Input()\n get filter(): NgbCompositeFilterDescriptor | null {\n return this._filter;\n }\n set filter(value: NgbCompositeFilterDescriptor | null | undefined) {\n this._filter = value ?? null;\n this.localFilter = this.cloneComposite(this._filter);\n this.syncLegacyFilters(this.localFilter);\n this.invalidateFilteredCaches();\n }\n @Input() filterOperators?: Partial<Record<ColumnType, NgbFilterOperator[]>>;\n @Input() filterManual = false;\n @Input() externalFiltering = false;\n /** Opts local arrays into the reusable DataGrid operation helper for filter/sort/page processing. */\n private _dataOperations: boolean | NgbDataGridProcessOptions<T> = false;\n @Input()\n get dataOperations(): boolean | NgbDataGridProcessOptions<T> {\n return this._dataOperations;\n }\n set dataOperations(value: boolean | NgbDataGridProcessOptions<T> | null | undefined) {\n this._dataOperations = value ?? false;\n this.invalidatePagedCache();\n }\n /**\n * Optional controlled data-operation state. When provided, the grid syncs page, pageSize,\n * sort, filter, and global filter from this object.\n */\n private _state: NgbDataGridState | null = null;\n @Input()\n get state(): NgbDataGridState | null {\n return this._state;\n }\n set state(value: NgbDataGridState | null | undefined) {\n this._state = value ?? null;\n this.syncFromDataState(this._state);\n }\n /** Footer actions for the built-in multi-checkbox filter menu. */\n @Input() multiCheckboxFilterOptions: NgbMultiCheckboxFilterOptions = {};\n private _enablePagination = false;\n @Input()\n get enablePagination(): boolean {\n return this._enablePagination;\n }\n set enablePagination(value: boolean) {\n this._enablePagination = value;\n this.invalidatePagedCache();\n }\n /**\n * Pager configuration. `true` enables the pager with defaults; pass an object to customize.\n * When set, pagination is active even if `[enablePagination]` is false.\n */\n private _pageable: boolean | NgbDatagridPageableSettings = false;\n @Input()\n get pageable(): boolean | NgbDatagridPageableSettings {\n return this._pageable;\n }\n set pageable(value: boolean | NgbDatagridPageableSettings | null | undefined) {\n this._pageable = value ?? false;\n this.invalidatePagedCache();\n }\n @Input() enableEdit = false;\n @Input() enableDelete = false;\n /** @deprecated Prefer `pageable.pageSizes`. Kept for `[enablePagination]` compatibility. */\n @Input() pageSizeOptions: number[] = [5, 10, 25, 50];\n\n private _enableAdd = false;\n @Input()\n get enableAdd(): boolean {\n return this._enableAdd;\n }\n set enableAdd(value: boolean) {\n this._enableAdd = value;\n this.markGridForCheck();\n }\n /** Accessible label (aria-label) applied to the add-row button. */\n @Input() addButtonAriaLabel: string | null = 'Add row';\n /** Visible text rendered inside the add-row button. */\n @Input() addButtonText = '+ Add';\n /** Shows sticky toggle column and keeps pinned rows at the top of the list. */\n @Input() stickyRows = false;\n /** Enables sticky column header when scrolling. */\n @Input() stickyHeader = false;\n /** Enables sticky footer when scrolling. */\n @Input() stickyFooter = false;\n /** Enables scroll table body container */\n @Input() scrollable = true;\n /** Row height used to stack multiple sticky rows without overlap (px). */\n @Input() stickyRowHeight = 40;\n /** Header height (px) used to offset sticky rows below the header. */\n @Input() stickyHeaderHeight = 40;\n /** Footer height (px) used to offset scrollable area. */\n @Input() stickyFooterHeight = 56;\n /** Bootstrap-like table styling options. */\n private _tableOptions: NgbTableOptions = {};\n @Input()\n get tableOptions(): NgbTableOptions {\n return this._tableOptions;\n }\n set tableOptions(value: NgbTableOptions | null | undefined) {\n this._tableOptions = value ?? {};\n this.invalidatePagedCache();\n }\n /**\n * When set, overrides `tableOptions.stacked` for layout mode.\n * Use `'stacked'` for card/label-value rows or `'tabular'` for the standard column grid.\n */\n @Input() dataLayoutMode: NgbDataLayoutMode | null = null;\n /** Selection mode for rows. */\n @Input() selectionMode: NgbSelectionMode = 'none';\n /** Selection activation: row click, checkbox only, or both. */\n @Input() selectionBehavior: NgbSelectionBehavior = 'row';\n /** Keyboard modifier rules for multi-select. */\n @Input() selectionKeyMode: NgbSelectionKeyMode = 'desktop';\n /** Enable header select-all checkbox for multiple mode. */\n @Input() selectAllEnabled = true;\n /** A11y labels for selection controls. */\n @Input() selectionA11yLabels: NgbSelectionLabels = {};\n /** Disable selection for specific rows. */\n @Input() selectionDisabledFn?: (row: T, index: number) => boolean;\n /** Highlight items (row/cell). */\n private _highlightedIndex: HighlightItem[] = [];\n @Input()\n get highlightedIndex(): HighlightItem[] {\n return this._highlightedIndex;\n }\n set highlightedIndex(value: HighlightItem[] | null | undefined) {\n this._highlightedIndex = value ?? [];\n this.updateHighlightCache();\n }\n /** Row key for highlighting. */\n @Input() highlightRowKey: NgbRowKey | null = null;\n /** Column key for highlighting. */\n @Input() highlightColKey: NgbColKey | null = null;\n /** Accessible label for the global filter input. */\n @Input() globalFilterAriaLabel = 'Search all columns';\n /** Placeholder for the built-in global search input. */\n @Input() globalFilterPlaceholder = 'Search all columns';\n /** When set, matching substrings in visible cells are wrapped with `.grid-search-highlight`. */\n @Input() searchHighlightTerm = '';\n /** Column fields included in search highlighting; all visible columns when empty. */\n @Input() searchHighlightFields: string[] | null = null;\n /** Accessible label announced when expanding a row. */\n @Input() expandRowAriaLabel = 'Expand row';\n /** Accessible label announced when collapsing a row. */\n @Input() collapseRowAriaLabel = 'Collapse row';\n /** Accessible label for the PDF export button. */\n @Input() exportPdfAriaLabel = 'Export to PDF';\n /** Accessible label for the Excel export button. */\n @Input() exportExcelAriaLabel = 'Export to Excel';\n /** Optional defaults for new rows */\n @Input() newRowDefaults: | Partial<Record<KeyOf<T>, any>> | (() => Partial<Record<KeyOf<T>, any>>) | null = null;\n @Input() strictEmail = false; // turn off if needed (e.g., intranet emails)\n @Input() editOnRowClick = false;\n /** Row editing interaction: inline actions, in-cell, external dialog, or toolbar selection. */\n @Input() editMode: NgbEditMode = 'inline';\n /** Hint shown in toolbar editing mode when a row is selected. */\n @Input() toolbarEditHint = 'Row selected — click Edit to modify or Delete to remove';\n @Input() singleExpand = false; // accordion mode: one row expanded at a time\n private _exportOptions: NgbDataGridExportOptions = {\n enabled: false,\n type: 'both',\n pages: 'current',\n fileName: 'export'\n };\n @Input()\n get exportOptions(): NgbDataGridExportOptions {\n return this._exportOptions;\n }\n set exportOptions(value: NgbDataGridExportOptions | null | undefined) {\n this._exportOptions = value ?? {\n enabled: false,\n type: 'both',\n pages: 'current',\n fileName: 'export'\n };\n this.markGridForCheck();\n }\n\n @Input() theme: NgbDataGridTheme = 'bootstrap';\n @Input() responsive: NgbDataGridResponsiveOptions | boolean = false;\n @Input() trackBy?: NgbDatagridTrackByFn<T>;\n @Input() rowClass?: string | string[] | Record<string, boolean> | ((row: T, rowIndex: number) => string | string[] | Record<string, boolean>);\n @Input() rowStyle?: Record<string, string | number> | ((row: T, rowIndex: number) => Record<string, string | number> | null | undefined);\n @Input() rowReorderable = false;\n private _columnReorderable = false;\n @Input()\n get columnReorderable(): boolean {\n return this._columnReorderable;\n }\n set columnReorderable(value: boolean) {\n this._columnReorderable = value;\n this.markGridForCheck();\n }\n /** Enables drag-to-resize on column headers (requires explicit column widths). */\n private _resizable = false;\n @Input()\n get resizable(): boolean {\n return this._resizable;\n }\n set resizable(value: boolean) {\n this._resizable = value;\n this.markGridForCheck();\n }\n /** Render row actions as icon-only square buttons (Figma editing screen). */\n @Input() actionDisplay: 'text' | 'icons' = 'text';\n /** Show a STICKY badge on the configured column when a row is pinned. */\n @Input() showStickyRowBadge = false;\n @Input() stickyRowBadgeField: string | null = null;\n @Input() stickyRowBadgeLabel = 'STICKY';\n /** Localized strings for built-in UI; individual aria/text inputs override matching keys. */\n @Input() labels: NgbDatagridLabels = {};\n /** BCP 47 locale for pagination range and number formatting (e.g. `en-US`, `ar-SA`). */\n @Input() locale: string | null = null;\n /** Text direction on the grid root; `auto` inherits from document or parent `dir`. */\n @Input() dir: NgbDatagridTextDirection = 'auto';\n /** Enables arrow-key cell focus, Space selection, Alt+Page paging, and F3 filter shortcuts. */\n @Input() keyboardNavigation = true;\n @Input() editService?: NgbDatagridEditService<T>;\n\n // Data hooks for export\n @Input() dataProviderAll?: () => Observable<any[]> | Promise<any[]> | any[]; // used when pages='all'\n @Input() dataProviderSelection?: () => any[]; // used when pages='selection'\n \n // Grab the directive and its TemplateRef\n @ContentChild(ExportButtonDirective) exportButtonDir?: ExportButtonDirective;\n @ViewChild('bodyScroller') bodyScroller?: ElementRef<HTMLElement>;\n @ViewChild('headerScroller') headerScroller?: ElementRef<HTMLElement>;\n private hostEl = inject(ElementRef<HTMLElement>);\n colgroupSyncId = `dg-col-${Math.random().toString(36).slice(2, 8)}`;\n private columnWidthOverrides: Record<string, number> = {};\n private resizeSession: { field: string; startX: number; startWidth: number } | null = null;\n private columnOrder: string[] = [];\n columnDragField: string | null = null;\n columnDragOverIndex: number | null = null;\n\n exporting = false;\n \n @Output() rowAdd = new EventEmitter<{ newRow: T }>();\n\n // events\n @Output() rowEdit = new EventEmitter<{ row: T; index: number }>();\n @Output() rowSave = new EventEmitter<{ original: T; updated: T; index: number }>();\n @Output() rowCancel = new EventEmitter<{ row: T; index: number }>();\n @Output() rowDelete = new EventEmitter<{ row: T; index: number }>();\n\n @Output() sortChange = new EventEmitter<{ active: string | null; direction: 'asc' | 'desc' | '' }>();\n @Output() filterChange = new EventEmitter<NgbCompositeFilterDescriptor>();\n @Output() filtersChange = new EventEmitter<{ global: string; columns: Record<string, string> }>();\n @Output() pageChange = new EventEmitter<{ page: number; pageSize: number }>();\n @Output() dataStateChange = new EventEmitter<NgbDataGridState>();\n @Output() selectionChange = new EventEmitter<{ selected: T[]; lastAction: { row: T; index: number; selected: boolean } | null }>();\n @Output() rowReorder = new EventEmitter<{ row: T; fromIndex: number; toIndex: number; data: T[] }>();\n @Output() columnReorder = new EventEmitter<NgbColumnReorderEvent<ColumnDef<T>>>();\n\n @ContentChild(NgbRowDetailTemplate) rowDetailTpl?: NgbRowDetailTemplate<T>;\n @ContentChild(NgbPagerTemplate) pagerTpl?: NgbPagerTemplate<T>;\n private exporter = inject(NgbExportService); // instead of constructor(private exporter: NgbExportService) {}\n\n expanded: Set<number> = new Set<number>();\n\n private fb = inject(FormBuilder);\n\n public filterForm: FormGroup = this.fb.group({});\n public globalFilterCtrl = new FormControl<string>('', { nonNullable: true });\n\n addingNew = false;\n draftNew: Partial<Record<KeyOf<T>, any>> | null = null;\n errorsNew: Partial<Record<KeyOf<T>, string>> = {};\n // --- sorting (from previous step)\n private _sort: { active: Extract<keyof T, string> | null; direction: SortDir } = { active: null, direction: '' };\n get sort(): { active: Extract<keyof T, string> | null; direction: SortDir } {\n return this._sort;\n }\n set sort(value: { active: Extract<keyof T, string> | null; direction: SortDir } | null | undefined) {\n this._sort = value ?? { active: null, direction: '' };\n this.invalidateSortedCaches();\n }\n stickyRowIds: Set<any> = new Set<any>();\n selectedRowIds: Set<any> = new Set<any>();\n private selectionAnchor: number | null = null;\n private highlightRowMap: Map<any, HighlightItem[]> = new Map();\n // --- filtering\n private _globalFilter = '';\n get globalFilter(): string {\n return this._globalFilter;\n }\n set globalFilter(value: string | null | undefined) {\n this._globalFilter = value ?? '';\n this.invalidateFilteredCaches();\n }\n private _filters: Record<string, string> = {};\n get filters(): Record<string, string> {\n return this._filters;\n }\n set filters(value: Record<string, string> | null | undefined) {\n this._filters = value ?? {};\n this.invalidateFilteredCaches();\n }\n private _localFilter: NgbCompositeFilterDescriptor = { logic: 'and', filters: [] };\n get localFilter(): NgbCompositeFilterDescriptor {\n return this._localFilter;\n }\n set localFilter(value: NgbCompositeFilterDescriptor | null | undefined) {\n this._localFilter = value ?? { logic: 'and', filters: [] };\n this.invalidateFilteredCaches();\n }\n openFilterMenuField: string | null = null;\n openFilterMenuAnchor: HTMLElement | null = null;\n openRowFilterField: string | null = null;\n openRowFilterOperatorAnchor: HTMLElement | null = null;\n openMenuOperatorField: string | null = null;\n menuDrafts: Record<string, NgbMenuFilterConditionDraft[]> = {};\n /** Join logic between conditions in a column filter menu (And / Or). */\n menuDraftJoinLogic: Record<string, 'and' | 'or'> = {};\n multiCheckboxDrafts: Record<string, any[]> = {};\n multiCheckboxSearch: Record<string, string> = {};\n private syncingFilterForm = false;\n private _page = 1;\n get page(): number {\n return this._page;\n }\n set page(value: number | null | undefined) {\n const next = Math.max(1, Math.trunc(Number(value) || 1));\n this._page = next;\n this.invalidatePagedCache();\n }\n private _pageSize = 10;\n @Input()\n get pageSize(): number {\n return this._pageSize;\n }\n set pageSize(value: number | null | undefined) {\n this._pageSize = Math.max(1, Math.trunc(Number(value) || 10));\n this.invalidatePagedCache();\n }\n\n /** Inline / in-cell editing state */\n editingIndex: number | null = null; // index in `paged` view\n editingCell: { rowIndex: number; field: string } | null = null;\n /** Roving keyboard focus within the current page (data cells). */\n focusedCell: { rowIndex: number; colIndex: number } | null = null;\n /** Screen-reader status updates (sort, page, selection). */\n statusMessage = '';\n editForm: FormGroup = this.fb.group({});\n saveAttemptedEdit = false;\n\n /** External dialog editing state */\n externalEditOpen = false;\n externalEditIsNew = false;\n externalEditPagedIndex: number | null = null;\n externalForm: FormGroup = this.fb.group({});\n saveAttemptedExternal = false;\n private externalDialogOpener: HTMLElement | null = null;\n private externalDialogFocusedOnce = false;\n\n addForm: FormGroup = this.fb.group({});\n saveAttemptedNew = false;\n private addDraftRowId: any = null;\n\n private readonly defaultEditService = new NgbDatagridDefaultEditService<T>();\n private cdr = inject(ChangeDetectorRef);\n private resolvedColumnsCache: ColumnDef<T>[] = [];\n private visibleColumnsCache: ColumnDef<T>[] = [];\n private filteredCache: T[] = [];\n private sortedCache: T[] = [];\n private pagedCache: T[] = [];\n private resolvedColumnsDirty = true;\n private visibleColumnsDirty = true;\n private filteredDirty = true;\n private sortedDirty = true;\n private pagedDirty = true;\n private rowIndexMap = new Map<any, number>();\n private rowIndexMapSource: T[] | null = null;\n\n private norm(v: unknown): string {\n return (v ?? '').toString().toLowerCase().trim();\n }\n\n private keyOf(col: ColumnDef<T>): KeyOf<T> {\n return col.field as KeyOf<T>;\n }\n\n private getDefaults(): Partial<Record<KeyOf<T>, any>> {\n return typeof this.newRowDefaults === 'function'\n ? (this.newRowDefaults as any)() ?? {}\n : this.newRowDefaults ?? {};\n }\n\n private defaultFor(col: ColumnDef<T>): any {\n const d = this.getDefaults();\n const key = col.field as KeyOf<T>;\n if (key in d) return d[key];\n switch (col.type) {\n case 'boolean': return false;\n case 'number': return '';\n case 'date': return '';\n default: return '';\n }\n }\n private numberValidator() {\n const rx = /^-?\\d+(\\.\\d+)?$/;\n return (c: AbstractControl) =>\n c.value === '' || c.value === null || c.value === undefined || rx.test(String(c.value))\n ? null\n : { number: true };\n }\n\n private dateValidator() {\n return (c: AbstractControl) => {\n const v = c.value;\n if (v === '' || v === null || v === undefined) return null;\n return isNaN(Date.parse(String(v))) ? { date: true } : null;\n };\n }\n\n private buildFormFromRow(row?: Partial<Record<KeyOf<T>, any>>): FormGroup {\n const group: Record<string, any> = {};\n const sampleRow = (row ?? {}) as T;\n const isNew = !row || !Object.keys(row).length;\n for (const col of this.resolvedColumns) {\n if (!this.isCellEditable(col, sampleRow, isNew)) continue;\n const key = col.field as string;\n const initial = row && key in row ? (row as any)[key] : this.defaultFor(col);\n const v: any[] = [];\n\n if (col.required && col.type !== 'boolean') v.push(Validators.required);\n if (col.type === 'email') {\n v.push(this.strictEmail ? this.strictEmailValidator() : Validators.email);\n } \n if (col.type === 'number') v.push(this.numberValidator());\n if (col.type === 'date') v.push(this.dateValidator());\n // NOTE: If you need \"boolean must be true\", add Validators.requiredTrue here.\n\n group[key] = [initial, v];\n }\n return this.fb.group(group);\n }\n\n private strictEmailValidator() {\n // simple, pragmatic: local@domain.tld (tld >= 2)\n const rx = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$/;\n return (c: AbstractControl) => {\n const v = c.value;\n if (v === null || v === undefined || v === '') return null; // let \"required\" handle empties\n if (`${v}`.length > MAX_EMAIL_LENGTH) return { email: true };\n return rx.test(String(v)) ? null : { email: true };\n };\n }\n\n //Getter for the ng-template\n get exportButtonTpl(): TemplateRef<ExportButtonContext> | null {\n return this.exportButtonDir?.templateRef ?? null;\n }\n\n get gridHost(): this {\n return this;\n }\n\n get declarativeColumns(): ColumnDef<T>[] {\n return this.gridColumnQ?.toArray().map((col) => col.toColumnDef()) ?? [];\n }\n\n get resolvedColumns(): ColumnDef<T>[] {\n if (this.resolvedColumnsDirty) {\n const declarative = this.declarativeColumns;\n if (declarative.length) {\n if (this.columns?.length && !this.warnedDeclarativeColumns) {\n console.warn('ngb-datagrid: declarative columns take precedence over the columns input.');\n this.warnedDeclarativeColumns = true;\n }\n this.resolvedColumnsCache = declarative;\n } else {\n this.resolvedColumnsCache = this.columns ?? [];\n }\n this.resolvedColumnsDirty = false;\n }\n return this.resolvedColumnsCache;\n }\n\n get visibleColumns(): ColumnDef<T>[] {\n if (this.visibleColumnsDirty) {\n const visible = this.resolvedColumns.filter((col) => !col.hidden);\n const byField = new Map(visible.map((col) => [col.field as string, col]));\n const order = this.columnOrder.length\n ? this.columnOrder.filter((field) => byField.has(field))\n : visible.map((col) => col.field as string);\n const seen = new Set(order);\n for (const col of visible) {\n const field = col.field as string;\n if (!seen.has(field)) {\n order.push(field);\n seen.add(field);\n }\n }\n this.visibleColumnsCache = order.map((field) => byField.get(field)!).filter(Boolean);\n this.visibleColumnsDirty = false;\n }\n return this.visibleColumnsCache;\n }\n\n private invalidateColumnCaches(): void {\n this.resolvedColumnsDirty = true;\n this.visibleColumnsDirty = true;\n this.invalidateFilteredCaches();\n }\n\n private invalidateFilteredCaches(): void {\n this.filteredDirty = true;\n this.invalidateSortedCaches();\n }\n\n private invalidateSortedCaches(): void {\n this.sortedDirty = true;\n this.invalidatePagedCache();\n }\n\n private invalidatePagedCache(): void {\n this.pagedDirty = true;\n }\n\n private invalidateDataCaches(): void {\n this.rowIndexMapSource = null;\n this.invalidateFilteredCaches();\n }\n\n private markGridForCheck(): void {\n this.cdr?.markForCheck();\n }\n\n private ensureRowIndexMap(): void {\n if (this.rowIndexMapSource === this.data) return;\n this.rowIndexMap.clear();\n (this.data ?? []).forEach((row, index) => this.rowIndexMap.set(row, index));\n this.rowIndexMapSource = this.data;\n }\n\n private dataIndexOf(row: T, fallback = -1): number {\n this.ensureRowIndexMap();\n return this.rowIndexMap.get(row) ?? fallback;\n }\n\n private syncColumnOrder(resetFromColumns: boolean): void {\n const visible = this.resolvedColumns.filter((col) => !col.hidden);\n const fields = new Set(visible.map((col) => col.field as string));\n if (resetFromColumns || !this.columnOrder.length) {\n this.columnOrder = visible.map((col) => col.field as string);\n return;\n }\n const next = this.columnOrder.filter((field) => fields.has(field));\n for (const col of visible) {\n const field = col.field as string;\n if (!next.includes(field)) next.push(field);\n }\n this.columnOrder = next;\n }\n\n isColumnReorderEnabled(): boolean {\n if (!this.columnReorderable || this.isStackedLayout()) return false;\n if (this.visibleColumns.some((col) => col.locked || this.isColumnPinned(col))) return false;\n return true;\n }\n\n isColumnReorderable(col: ColumnDef<T>): boolean {\n if (!this.isColumnReorderEnabled()) return false;\n if (col.reorderable === false || col.locked) return false;\n if (this.isColumnPinned(col)) return false;\n return true;\n }\n\n onColumnDragStart(event: DragEvent, col: ColumnDef<T>, fromIndex: number): void {\n if (!this.isColumnReorderable(col)) {\n event.preventDefault();\n return;\n }\n this.columnDragField = col.field as string;\n this.columnDragOverIndex = fromIndex;\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', this.columnDragField);\n }\n }\n\n onColumnDragOver(event: DragEvent, toIndex: number): void {\n if (!this.columnReorderable || !this.columnDragField) return;\n event.preventDefault();\n if (event.dataTransfer) event.dataTransfer.dropEffect = 'move';\n this.columnDragOverIndex = toIndex;\n this.cdr.markForCheck();\n }\n\n onColumnDragLeave(event: DragEvent, index: number): void {\n if (this.columnDragOverIndex === index) {\n const related = event.relatedTarget as Node | null;\n const current = event.currentTarget as HTMLElement | null;\n if (current && related && current.contains(related)) return;\n this.columnDragOverIndex = null;\n this.cdr.markForCheck();\n }\n }\n\n onColumnDrop(event: DragEvent, toIndex: number): void {\n if (!this.columnReorderable || !this.columnDragField) return;\n event.preventDefault();\n const fromIndex = this.visibleColumns.findIndex((col) => col.field === this.columnDragField);\n this.moveColumn(fromIndex, toIndex);\n this.onColumnDragEnd();\n }\n\n onColumnDragEnd(): void {\n this.columnDragField = null;\n this.columnDragOverIndex = null;\n this.cdr.markForCheck();\n }\n\n /**\n * Reorders a visible column relative to another visible column index.\n * Only columns that pass {@link isColumnReorderable} can be moved.\n */\n reorderColumn(\n column: ColumnDef<T> | Extract<keyof T, string>,\n destinationIndex: number,\n options?: NgbColumnReorderOptions,\n emit = true\n ): void {\n if (!this.isColumnReorderEnabled()) return;\n const field = typeof column === 'string' ? column : (column.field as string);\n const cols = this.visibleColumns;\n const fromIndex = cols.findIndex((col) => col.field === field);\n if (fromIndex < 0 || destinationIndex < 0 || destinationIndex >= cols.length) return;\n\n const insertAfter = options?.before === false;\n let toIndex = insertAfter ? destinationIndex + 1 : destinationIndex;\n toIndex = Math.max(0, Math.min(toIndex, cols.length - 1));\n if (fromIndex === toIndex) return;\n\n this.moveColumn(fromIndex, toIndex, emit);\n }\n\n moveColumn(fromIndex: number, toIndex: number, emit = true): void {\n if (!this.isColumnReorderEnabled()) return;\n const cols = this.visibleColumns;\n if (fromIndex < 0 || toIndex < 0 || fromIndex >= cols.length || toIndex >= cols.length) return;\n if (fromIndex === toIndex) return;\n\n const fromCol = cols[fromIndex];\n if (!fromCol || !this.isColumnReorderable(fromCol)) return;\n\n const movingField = fromCol.field as string;\n const reorderableFields = cols\n .filter((col) => this.isColumnReorderable(col))\n .map((col) => col.field as string);\n const fromReorderIndex = reorderableFields.indexOf(movingField);\n if (fromReorderIndex < 0) return;\n\n let toReorderIndex = 0;\n let reorderableSeen = 0;\n for (let i = 0; i < cols.length; i++) {\n if (i === toIndex) {\n toReorderIndex = reorderableSeen;\n break;\n }\n if (this.isColumnReorderable(cols[i])) reorderableSeen++;\n }\n\n const nextReorderable = [...reorderableFields];\n nextReorderable.splice(fromReorderIndex, 1);\n nextReorderable.splice(toReorderIndex, 0, movingField);\n\n const order: string[] = [];\n let reorderCursor = 0;\n for (const col of cols) {\n if (!this.isColumnReorderable(col)) {\n order.push(col.field as string);\n } else {\n order.push(nextReorderable[reorderCursor++]);\n }\n }\n\n this.columnOrder = order;\n this.visibleColumnsDirty = true;\n const column = this.resolvedColumns.find((col) => col.field === movingField);\n const toIndexResolved = order.indexOf(movingField);\n if (emit && column) {\n this.columnReorder.emit({\n columns: this.visibleColumns.map((col) => ({ ...col })),\n column,\n fromIndex,\n toIndex: toIndexResolved,\n fields: [...order],\n });\n }\n this.syncResizableColgroups();\n this.cdr.markForCheck();\n }\n\n private validateColumnConfig(): void {\n const columns = this.resolvedColumns;\n const seenFields = new Set<string>();\n const duplicates = new Set<string>();\n columns.forEach((col) => {\n const field = `${col.field ?? ''}`;\n if (seenFields.has(field)) duplicates.add(field);\n seenFields.add(field);\n });\n if (duplicates.size) {\n throw new Error(`ngb-datagrid: duplicate column field(s): ${Array.from(duplicates).join(', ')}`);\n }\n\n const visible = this.visibleColumns;\n const hasPinned = visible.some((col) => this.isColumnPinned(col));\n if (!hasPinned) return;\n\n if (this.rowDetailTpl) {\n throw new Error('ngb-datagrid: detail rows are not supported with sticky or locked columns.');\n }\n\n const missingWidth = visible.filter((col) => !this.columnWidth(col) || this.columnWidth(col) <= 0);\n if (missingWidth.length) {\n throw new Error(`ngb-datagrid: sticky/locked columns require explicit width for all visible columns. Missing width on: ${missingWidth.map((col) => col.field).join(', ')}`);\n }\n\n if (this.resizable && !this.isStackedLayout()) {\n const missingResizableWidth = visible.filter((col) => !this.columnWidth(col) || this.columnWidth(col) <= 0);\n if (missingResizableWidth.length) {\n throw new Error(\n `ngb-datagrid: resizable columns require explicit width for all visible columns. Missing width on: ${missingResizableWidth.map((col) => col.field).join(', ')}`\n );\n }\n }\n\n if (visible.some((col) => col.locked) && !visible.some((col) => !col.locked)) {\n throw new Error('ngb-datagrid: at least one unlocked visible column is required when locked columns are used.');\n }\n\n let phase: 'leading' | 'middle' | 'trailing' = 'leading';\n visible.forEach((col) => {\n const side = this.columnOrderGroup(col);\n if (side === 'leading') {\n if (phase !== 'leading') {\n throw new Error('ngb-datagrid: start sticky/locked columns must appear before unlocked columns.');\n }\n return;\n }\n if (side === 'trailing') {\n phase = 'trailing';\n return;\n }\n if (phase === 'trailing') {\n throw new Error('ngb-datagrid: end sticky columns must appear after unlocked columns.');\n }\n phase = 'middle';\n });\n }\n\n isFilteringEnabled(): boolean {\n return ((this.filterable !== false && this.filterable !== 'none') || this.enableFiltering);\n }\n\n resolvedFilterMode(): NgbFilterMode {\n if (this.filterable === 'row' || this.filterable === 'menu' || this.filterable === 'multi' || this.filterable === 'none') {\n return this.filterable;\n }\n if (this.filterable === true) return 'row';\n return this.filterMode;\n }\n\n get filtered(): T[] {\n if (this.filteredDirty) {\n const src = this.data ?? [];\n const global = this.currentGlobalFilter();\n const filtering = this.isFilteringEnabled();\n const globalOnly = this.enableGlobalFilter && !filtering;\n\n if (!filtering && !globalOnly) {\n this.filteredCache = src;\n } else if (this.filterManual || this.externalFiltering) {\n this.filteredCache = src;\n } else {\n const descriptor = filtering ? this.effectiveFilterDescriptor() : { logic: 'and' as const, filters: [] };\n const resolvedColumns = this.resolvedColumns;\n this.filteredCache = src.filter((row) => {\n const matchesComposite = !descriptor.filters.length || this.matchesComposite(row, descriptor);\n if (!matchesComposite) return false;\n if (!global) return true;\n return resolvedColumns.some((column) => this.norm((row as any)?.[column.field]).includes(global));\n });\n }\n this.filteredDirty = false;\n }\n return this.filteredCache;\n }\n\n private effectiveFilterDescriptor(): NgbCompositeFilterDescriptor {\n const base = this.filter ?? this.localFilter;\n if (base?.filters?.length) return base;\n return this.legacyFilterDescriptor();\n }\n\n private legacyFilterDescriptor(): NgbCompositeFilterDescriptor {\n const filters = this.resolvedColumns\n .filter((col) => col.filterable && this.norm(this.filters[col.field as string]))\n .map((col) => ({\n field: col.field as string,\n operator: 'contains' as NgbFilterOperator,\n value: this.filters[col.field as string],\n ignoreCase: true\n }));\n return { logic: 'and', filters };\n }\n\n private currentGlobalFilter(): string {\n return this.norm(this.globalFilter || this.globalFilterCtrl.value);\n }\n\n private matchesComposite(row: T, descriptor: NgbCompositeFilterDescriptor): boolean {\n if (!descriptor.filters.length) return true;\n const results = descriptor.filters.map((filter) =>\n ngbIsCompositeFilter(filter) ? this.matchesComposite(row, filter) : this.matchesDescriptor(row, filter)\n );\n return descriptor.logic === 'or' ? results.some(Boolean) : results.every(Boolean);\n }\n\n private matchesDescriptor(row: T, descriptor: NgbFilterDescriptor): boolean {\n const column = this.resolvedColumns.find((col) => col.field === descriptor.field);\n const filterType = this.getColumnFilterType(column);\n const cellValue = this.normalizeFilterValue((row as any)?.[descriptor.field], filterType);\n const compareValue = this.normalizeFilterValue(descriptor.value, filterType);\n const ignoreCase = descriptor.ignoreCase ?? (filterType === 'text' || filterType === 'select');\n\n if (descriptor.operator === 'isnull') return cellValue == null;\n if (descriptor.operator === 'isnotnull') return cellValue != null;\n if (descriptor.operator === 'isempty') return cellValue === '';\n if (descriptor.operator === 'isnotempty') return cellValue !== '' && cellValue != null;\n\n if (filterType === 'numeric' || filterType === 'date') {\n const left = cellValue as number | null;\n const right = compareValue as number | null;\n if (left == null || right == null) return false;\n switch (descriptor.operator) {\n case 'eq': return left === right;\n case 'neq': return left !== right;\n case 'gt': return left > right;\n case 'gte': return left >= right;\n case 'lt': return left < right;\n case 'lte': return left <= right;\n default: return false;\n }\n }\n\n if (filterType === 'boolean') {\n switch (descriptor.operator) {\n case 'eq': return cellValue === compareValue;\n case 'neq': return cellValue !== compareValue;\n default: return false;\n }\n }\n\n const left = cellValue == null ? '' : String(cellValue);\n const right = compareValue == null ? '' : String(compareValue);\n const normalizedLeft = ignoreCase ? left.toLowerCase() : left;\n const normalizedRight = ignoreCase ? right.toLowerCase() : right;\n\n switch (descriptor.operator) {\n case 'contains': return normalizedLeft.includes(normalizedRight);\n case 'doesnotcontain': return !normalizedLeft.includes(normalizedRight);\n case 'eq': return normalizedLeft === normalizedRight;\n case 'neq': return normalizedLeft !== normalizedRight;\n case 'startswith': return normalizedLeft.startsWith(normalizedRight);\n case 'endswith': return normalizedLeft.endsWith(normalizedRight);\n default: return false;\n }\n }\n\n private normalizeFilterValue(value: any, filterType: ReturnType<Datagrid<T>['getColumnFilterType']>): any {\n if (value === '' || value === undefined) return null;\n if (value === null) return null;\n switch (filterType) {\n case 'numeric': {\n const parsed = Number(value);\n return Number.isNaN(parsed) ? null : parsed;\n }\n case 'date': {\n const parsed = Date.parse(String(value));\n return Number.isNaN(parsed) ? null : parsed;\n }\n case 'boolean':\n if (value === 'true') return true;\n if (value === 'false') return false;\n return !!value;\n default:\n return String(value);\n }\n }\n\n getColumnFilterType(col?: ColumnDef<T>): 'text' | 'numeric' | 'boolean' | 'date' | 'select' {\n return col?.filterType ?? ngbColumnTypeToFilterType(col?.type);\n }\n\n isMultiCheckboxMode(col: ColumnDef<T>): boolean {\n return this.isFilteringEnabled() && this.resolvedFilterMode() === 'multi' && !!col.filterable;\n }\n\n getAllowedOperators(col: ColumnDef<T>): NgbFilterOperator[] {\n if (col.allowedFilterOperators?.length) return col.allowedFilterOperators;\n const typeOperators = this.filterOperators?.[col.type ?? 'text'];\n if (typeOperators?.length) return typeOperators;\n return ngbAllowedFilterOperators(this.getColumnFilterType(col));\n }\n\n defaultFilterOperator(col: ColumnDef<T>): NgbFilterOperator {\n const allowed = this.getAllowedOperators(col);\n const explicit = col.defaultFilterOperator;\n if (explicit === '') {\n return allowed[0] ?? ngbDefaultFilterOperator(this.getColumnFilterType(col));\n }\n if (explicit) return explicit;\n return ngbDefaultFilterOperator(this.getColumnFilterType(col));\n }\n\n rowFilterOperator(col: ColumnDef<T>): NgbFilterOperator {\n const field = col.field as string;\n const raw = this.filterForm?.get(this.operatorControlName(field))?.value as NgbFilterOperator | '' | null | undefined;\n if (raw === '' || raw == null) {\n return this.defaultFilterOperator(col);\n }\n return raw;\n }\n\n operatorLabel(operator: NgbFilterOperator): string {\n const labels: Record<NgbFilterOperator, string> = {\n contains: 'Contains',\n doesnotcontain: 'Does not contain',\n eq: 'Equals',\n neq: 'Does not equal',\n startswith: 'Starts with',\n endswith: 'Ends with',\n gt: 'Greater than',\n gte: 'Greater than or equal',\n lt: 'Less than',\n lte: 'Less than or equal',\n isnull: 'Is null',\n isnotnull: 'Is not null',\n isempty: 'Is empty',\n isnotempty: 'Is not empty'\n };\n return labels[operator];\n }\n\n rowFilterOperatorLabel(col: ColumnDef<T>, operator: NgbFilterOperator): string {\n return ngbFilterOperatorLabel(operator, this.getColumnFilterType(col));\n }\n\n rowFilterMenuTitle(col: ColumnDef<T>): string {\n const filterType = this.getColumnFilterType(col);\n switch (filterType) {\n case 'numeric': return 'Number filter';\n case 'date': return 'Date filter';\n case 'boolean': return 'Boolean filter';\n case 'select': return 'Select filter';\n default: return 'String filter';\n }\n }\n\n rowFilterPlaceholder(col: ColumnDef<T>): string {\n if (col.filterPlaceholder) return col.filterPlaceholder;\n const filterType = this.getColumnFilterType(col);\n const header = String(col.header ?? '').trim().toLowerCase();\n if (filterType === 'date') return 'dd/mm/yyyy';\n if (filterType === 'numeric') return `Filter by ${header}...`;\n if (filterType === 'text' || filterType === 'select') return `Filter by ${header}...`;\n return '';\n }\n\n isSearchHighlightEnabled(): boolean {\n return !!this.norm(this.searchHighlightTerm);\n }\n\n shouldHighlightSearchInColumn(field: string): boolean {\n if (!this.isSearchHighlightEnabled()) return false;\n const fields = this.searchHighlightFields;\n if (!fields?.length) return true;\n return fields.includes(field);\n }\n\n formatCellDisplayValue(value: unknown): string {\n if (value == null) return '';\n if (typeof value === 'boolean') return value ? 'Yes' : 'No';\n return String(value);\n }\n\n getSearchHighlightSegments(value: unknown, field: string): Array<{ text: string; match: boolean }> {\n const display = this.formatCellDisplayValue(value);\n if (!this.shouldHighlightSearchInColumn(field)) {\n return [{ text: display, match: false }];\n }\n\n const term = this.norm(this.searchHighlightTerm);\n if (!term || !display) return [{ text: display, match: false }];\n\n const normalizedDisplay = this.norm(display);\n const segments: Array<{ text: string; match: boolean }> = [];\n let cursor = 0;\n\n while (cursor < display.length) {\n const slice = display.slice(cursor);\n const normalizedSlice = this.norm(slice);\n const matchIndex = normalizedSlice.indexOf(term);\n if (matchIndex < 0) {\n segments.push({ text: display.slice(cursor), match: false });\n break;\n }\n\n const start = cursor + matchIndex;\n const end = start + term.length;\n if (start > cursor) {\n segments.push({ text: display.slice(cursor, start), match: false });\n }\n segments.push({ text: display.slice(start, end), match: true });\n cursor = end;\n }\n\n return segments.length ? segments : [{ text: display, match: false }];\n }\n\n rowFilterEmptyOptionLabel(col: ColumnDef<T>): string {\n return this.getColumnFilterType(col) === 'boolean' ? '(All)' : 'Select';\n }\n\n booleanFilterOptionLabel(value: boolean): string {\n return value ? 'Yes' : 'No';\n }\n\n isRowFilterMenuOpen(field: string): boolean {\n return this.openRowFilterField === field;\n }\n\n get openRowFilterColumn(): ColumnDef<T> | null {\n if (!this.openRowFilterField) return null;\n return this.resolvedColumns.find((item) => item.field === this.openRowFilterField) ?? null;\n }\n\n toggleRowFilterMenu(field: string, anchor?: HTMLElement | null): void {\n if (this.openRowFilterField === field) {\n this.openRowFilterField = null;\n this.openRowFilterOperatorAnchor = null;\n this.cdr.markForCheck();\n return;\n }\n this.closeFilterMenu();\n this.openRowFilterField = field;\n this.openRowFilterOperatorAnchor = this.resolveFilterMenuAnchor(anchor);\n this.cdr.markForCheck();\n }\n\n setRowFilterOperator(col: ColumnDef<T>, operator: NgbFilterOperator): void {\n const field = col.field as string;\n this.filterForm.get(this.operatorControlName(field))?.setValue(operator);\n const value = this.filterForm.get(this.valueControlName(field))?.value;\n if (!this.operatorRequiresValue(operator) || !(value === null || value === undefined || value === '')) {\n this.applyRowFilter(col);\n }\n this.openRowFilterField = null;\n this.openRowFilterOperatorAnchor = null;\n this.cdr.markForCheck();\n }\n\n operatorRequiresValue(operator: NgbFilterOperator): boolean {\n return !['isnull', 'isnotnull', 'isempty', 'isnotempty'].includes(operator);\n }\n\n isRowFilterVisible(col: ColumnDef<T>): boolean {\n if (!col.filterable || !this.isFilteringEnabled()) return false;\n if (col.showFilterRow != null) return col.showFilterRow;\n return this.resolvedFilterMode() === 'row';\n }\n\n isRowFilterOperatorVisible(col: ColumnDef<T>): boolean {\n if (!this.isRowFilterVisible(col)) return false;\n if (this.getColumnFilterType(col) === 'boolean') return false;\n return col.showFilterOperator !== false;\n }\n\n isMenuFilterVisible(col: ColumnDef<T>): boolean {\n if (!col.filterable || !this.isFilteringEnabled()) return false;\n if (col.showFilterMenu != null) return col.showFilterMenu;\n return this.resolvedFilterMode() === 'menu' || this.resolvedFilterMode() === 'multi';\n }\n\n getColumnFilter(field: string): NgbFilterDescriptor | null {\n const descriptor = this.effectiveFilterDescriptor().filters.find(\n (filter): filter is NgbFilterDescriptor => !ngbIsCompositeFilter(filter) && filter.field === field\n );\n return descriptor ?? null;\n }\n\n hasActiveColumnFilter(field: string): boolean {\n return !!this.findFieldFilter(field);\n }\n\n private findFieldFilter(field: string): NgbFilterDescriptor | NgbCompositeFilterDescriptor | null {\n const found = this.effectiveFilterDescriptor().filters.find((filter) => {\n if (ngbIsCompositeFilter(filter)) {\n return filter.filters.every((item) => !ngbIsCompositeFilter(item) && item.field === field);\n }\n return filter.field === field;\n });\n return found ?? null;\n }\n\n private withoutFieldFilters(filters: Array<NgbFilterDescriptor | NgbCompositeFilterDescriptor>, field: string) {\n return filters.filter((filter) => {\n if (ngbIsCompositeFilter(filter)) {\n return !filter.filters.every((item) => !ngbIsCompositeFilter(item) && item.field === field);\n }\n return filter.field !== field;\n });\n }\n\n private upsertColumnFilter(\n field: string,\n operator: NgbFilterOperator,\n value: any,\n emit = true\n ): void {\n const base = this.cloneComposite(this.filter ?? this.localFilter);\n this.commitFilter(\n ngbSetFieldFilter(base, field, operator, value, {\n requiresValue: (op) => this.operatorRequiresValue(op)\n }),\n emit\n );\n }\n\n clearColumnFilter(field: string, emit = true): void {\n const next = this.cloneComposite(this.filter ?? this.localFilter);\n next.filters = this.withoutFieldFilters(next.filters, field);\n this.commitFilter(next, emit);\n this.setFilterFormField(field, this.defaultFilterOperator(this.resolvedColumns.find((col) => col.field === field)!), '');\n delete this.multiCheckboxDrafts[field];\n delete this.multiCheckboxSearch[field];\n if (this.openRowFilterField === field) {\n this.openRowFilterField = null;\n this.openRowFilterOperatorAnchor = null;\n }\n }\n\n clearAllFilters(emit = true): void {\n this.localFilter = { logic: 'and', filters: [] };\n this.filters = {};\n this.globalFilter = '';\n this.globalFilterCtrl.setValue('', { emitEvent: false });\n this.menuDrafts = {};\n this.menuDraftJoinLogic = {};\n this.multiCheckboxDrafts = {};\n this.multiCheckboxSearch = {};\n this.closeFilterMenu();\n this.openRowFilterField = null;\n this.openRowFilterOperatorAnchor = null;\n this.syncFilterFormFromState();\n this.page = 1;\n this.invalidateFilteredCaches();\n if (emit) {\n this.filterChange.emit(this.localFilter);\n this.filtersChange.emit({ global: '', columns: {} });\n this.emitDataStateChange();\n }\n this.cdr.markForCheck();\n }\n\n private commitFilter(filter: NgbCompositeFilterDescriptor, emit = true): void {\n this.localFilter = filter;\n this.syncLegacyFilters(filter);\n this.page = 1;\n this.invalidateFilteredCaches();\n this.syncFilterFormFromState();\n if (emit) {\n this.filterChange.emit(filter);\n this.filtersChange.emit({ global: this.currentGlobalFilterValue(), columns: { ...this.filters } });\n this.emitDataStateChange();\n }\n this.cdr.markForCheck();\n }\n\n private cloneComposite(filter: NgbCompositeFilterDescriptor | null | undefined): NgbCompositeFilterDescriptor {\n if (!filter) return { logic: 'and', filters: [] };\n return {\n logic: filter.logic,\n filters: filter.filters.map((item) => (ngbIsCompositeFilter(item) ? this.cloneComposite(item) : ({ ...item })))\n };\n }\n\n private syncLegacyFilters(filter: NgbCompositeFilterDescriptor): void {\n const next: Record<string, string> = {};\n filter.filters.forEach((item) => {\n if (ngbIsCompositeFilter(item)) return;\n next[item.field] = item.value == null ? '' : String(item.value);\n });\n this.filters = next;\n }\n\n currentGlobalFilterValue(): string {\n return this.globalFilter || this.globalFilterCtrl.value || '';\n }\n\n operatorControlName(field: string): string {\n return `${field}__operator`;\n }\n\n valueControlName(field: string): string {\n return `${field}__value`;\n }\n\n getFilterControl(field: string): AbstractControl | null {\n return this.filterForm.get(this.valueControlName(field));\n }\n\n applyRowFilter(col: ColumnDef<T>): void {\n const field = col.field as string;\n const operator = this.rowFilterOperator(col);\n const value = this.filterForm.get(this.valueControlName(field))?.value;\n this.upsertColumnFilter(field, operator, value);\n }\n\n private setFilterFormField(field: string, operator: NgbFilterOperator, value: any): void {\n this.syncingFilterForm = true;\n this.filterForm.get(this.operatorControlName(field))?.setValue(operator, { emitEvent: false });\n this.filterForm.get(this.valueControlName(field))?.setValue(value, { emitEvent: false });\n this.syncingFilterForm = false;\n }\n\n private syncFilterFormFromState(): void {\n this.resolvedColumns.filter((col) => col.filterable).forEach((col) => {\n const field = col.field as string;\n const descriptor = this.getColumnFilter(col.field as string);\n const currentOperator = this.filterForm.get(this.operatorControlName(field))?.value as NgbFilterOperator | '' | null | undefined;\n const preservedOperator = currentOperator || this.defaultFilterOperator(col);\n this.setFilterFormField(\n field,\n descriptor?.operator ?? preservedOperator,\n descriptor?.value ?? ''\n );\n });\n }\n\n private static readonly MENU_FILTER_CONDITION_COUNT = 2;\n\n private defaultMenuOperator(col: ColumnDef<T>): NgbFilterOperator {\n return this.defaultFilterOperator(col);\n }\n\n private defaultMenuCondition(col: ColumnDef<T>): NgbMenuFilterConditionDraft {\n return {\n operator: this.defaultMenuOperator(col),\n value: '',\n };\n }\n\n private defaultMenuDraftPair(col: ColumnDef<T>): NgbMenuFilterConditionDraft[] {\n return [this.defaultMenuCondition(col), this.defaultMenuCondition(col)];\n }\n\n private normalizeMenuDraftConditions(\n col: ColumnDef<T>,\n conditions: NgbMenuFilterConditionDraft[]\n ): NgbMenuFilterConditionDraft[] {\n const count = Datagrid.MENU_FILTER_CONDITION_COUNT;\n if (!conditions.length) return this.defaultMenuDraftPair(col);\n const normalized = conditions.slice(0, count).map((item) => ({ ...item }));\n while (normalized.length < count) {\n normalized.push(this.defaultMenuCondition(col));\n }\n return normalized;\n }\n\n private menuConditionsFromFieldFilter(field: string, col: ColumnDef<T>): NgbMenuFilterConditionDraft[] {\n const found = this.findFieldFilter(field);\n if (!found) return this.defaultMenuDraftPair(col);\n if (!ngbIsCompositeFilter(found)) {\n return this.normalizeMenuDraftConditions(col, [\n { operator: found.operator, value: found.value ?? '' },\n ]);\n }\n const direct = found.filters.filter((item): item is NgbFilterDescriptor => !ngbIsCompositeFilter(item));\n if (\n (found.logic === 'and' || found.logic === 'or') &&\n direct.length &&\n direct.every((item) => item.field === field)\n ) {\n this.menuDraftJoinLogic[field] = found.logic;\n return this.normalizeMenuDraftConditions(\n col,\n direct.map((item) => ({ operator: item.operator, value: item.value ?? '' }))\n );\n }\n return this.defaultMenuDraftPair(col);\n }\n\n ensureMenuJoinLogic(col: ColumnDef<T>): 'and' | 'or' {\n const field = col.field as string;\n if (!this.menuDraftJoinLogic[field]) {\n this.menuDraftJoinLogic[field] = 'and';\n }\n return this.menuDraftJoinLogic[field];\n }\n\n setMenuJoinLogic(col: ColumnDef<T>, logic: 'and' | 'or'): void {\n this.menuDraftJoinLogic[col.field as string] = logic;\n this.cdr.markForCheck();\n }\n\n menuFilterConditionIsValid(col: ColumnDef<T>, draft: NgbMenuFilterConditionDraft): boolean {\n if (!this.operatorRequiresValue(draft.operator)) return true;\n const value = draft.value;\n return value !== null && value !== undefined && value !== '';\n }\n\n canApplyMenuFilter(col: ColumnDef<T>): boolean {\n return this.ensureMenuDraftConditions(col).some((draft) => this.menuFilterConditionIsValid(col, draft));\n }\n\n canClearMenuFilter(col: ColumnDef<T>): boolean {\n return this.hasActiveColumnFilter(col.field as string);\n }\n\n ensureMenuDraftConditions(col: ColumnDef<T>): NgbMenuFilterConditionDraft[] {\n const field = col.field as string;\n const existing = this.menuDrafts[field];\n if (!existing?.length || existing.length !== Datagrid.MENU_FILTER_CONDITION_COUNT) {\n this.menuDrafts[field] = this.menuConditionsFromFieldFilter(field, col);\n }\n return this.menuDrafts[field];\n }\n\n /** First menu condition (header filter menus). */\n ensureMenuDraft(col: ColumnDef<T>): NgbMenuFilterConditionDraft {\n return this.ensureMenuDraftConditions(col)[0];\n }\n\n setMenuDraftOperator(col: ColumnDef<T>, operator: NgbFilterOperator, index = 0): void {\n this.ensureMenuDraftConditions(col)[index].operator = operator;\n this.openMenuOperatorField = null;\n }\n\n menuOperatorKey(field: string, index = 0): string {\n return `${field}:${index}`;\n }\n\n isMenuOperatorOpen(field: string, index = 0): boolean {\n return this.openMenuOperatorField === this.menuOperatorKey(field, index);\n }\n\n toggleMenuOperator(field: string, index = 0): void {\n const key = this.menuOperatorKey(field, index);\n this.openMenuOperatorField = this.openMenuOperatorField === key ? null : key;\n }\n\n get openFilterMenuColumn(): ColumnDef<T> | null {\n if (!this.openFilterMenuField) return null;\n return this.resolvedColumns.find((item) => item.field === this.openFilterMenuField) ?? null;\n }\n\n private closeFilterMenu(): void {\n this.openFilterMenuField = null;\n this.openFilterMenuAnchor = null;\n this.openMenuOperatorField = null;\n }\n\n private resolveFilterMenuAnchor(anchor?: HTMLElement | null): HTMLElement | null {\n if (anchor instanceof HTMLElement) return anchor;\n const native = (anchor as { nativeElement?: unknown } | null)?.nativeElement;\n return native instanceof HTMLElement ? native : null;\n }\n\n toggleFilterMenu(field: string, anchor?: HTMLElement | null): void {\n this.openFilterMenuField = this.openFilterMenuField === field ? null : field;\n if (this.openFilterMenuField !== field) {\n this.openMenuOperatorField = null;\n this.openFilterMenuAnchor = null;\n } else {\n this.openFilterMenuAnchor = this.resolveFilterMenuAnchor(anchor);\n }\n const col = this.resolvedColumns.find((item) => item.field === field);\n if (col && this.openFilterMenuField === field) {\n if (this.isMultiCheckboxMode(col)) {\n this.ensureMultiCheckboxDraft(col);\n } else {\n if (!this.hasActiveColumnFilter(field)) {\n delete this.menuDrafts[field];\n delete this.menuDraftJoinLogic[field];\n }\n this.ensureMenuDraftConditions(col);\n }\n }\n this.cdr.markForCheck();\n }\n\n applyMenuFilter(col: ColumnDef<T>): void {\n const field = col.field as string;\n const conditions = this.ensureMenuDraftConditions(col)\n .map((draft) => ({ ...draft }))\n .filter((draft) => {\n if (!this.operatorRequiresValue(draft.operator)) return true;\n const normalized = draft.value === undefined ? null : draft.value;\n return normalized !== null && normalized !== '';\n });\n\n const next = this.cloneComposite(this.filter ?? this.localFilter);\n const filters = this.withoutFieldFilters(next.filters, field);\n\n if (!conditions.length) {\n this.commitFilter({ ...next, filters });\n } else if (conditions.length === 1) {\n const draft = conditions[0];\n if (this.operatorRequiresValue(draft.operator)) {\n filters.push({ field, operator: draft.operator, value: draft.value, ignoreCase: true });\n } else {\n filters.push({ field, operator: draft.operator, ignoreCase: true });\n }\n this.commitFilter({ ...next, filters });\n } else {\n const joinLogic = this.ensureMenuJoinLogic(col);\n filters.push({\n logic: joinLogic,\n filters: conditions.map((draft) =>\n this.operatorRequiresValue(draft.operator)\n ? { field, operator: draft.operator, value: draft.value, ignoreCase: true }\n : { field, operator: draft.operator, ignoreCase: true }\n ),\n });\n this.commitFilter({ ...next, filters });\n }\n\n this.closeFilterMenu();\n }\n\n clearMenuFilter(col: ColumnDef<T>): void {\n const field = col.field as string;\n delete this.menuDrafts[field];\n delete this.menuDraftJoinLogic[field];\n this.clearColumnFilter(col.field as string);\n this.closeFilterMenu();\n }\n\n multiCheckboxOptions(col: ColumnDef<T>): Array<{ label: string; value: any }> {\n const seen = new Map<string, { label: string; value: any }>();\n for (const row of this.data ?? []) {\n const value = (row as any)?.[col.field];\n const key = this.multiCheckboxValueKey(value);\n if (!seen.has(key)) {\n seen.set(key, { label: this.multiCheckboxValueLabel(col, value), value });\n }\n }\n return Array.from(seen.values()).sort((a, b) => a.label.localeCompare(b.label, undefined, { sensitivity: 'base', numeric: true }));\n }\n\n multiCheckboxVisibleOptions(col: ColumnDef<T>): Array<{ label: string; value: any }> {\n const query = this.norm(this.multiCheckboxSearch[col.field as string]);\n const options = this.multiCheckboxOptions(col);\n if (!query) return options;\n return options.filter((option) => this.norm(option.label).includes(query));\n }\n\n multiCheckboxValueLabel(col: ColumnDef<T>, value: any): string {\n if (this.getColumnFilterType(col) === 'boolean') return this.booleanFilterOptionLabel(!!value);\n if (value === null || value === undefined || value === '') return '(Blank)';\n const option = col.options?.find((item) => item.value === value);\n return option?.label ?? String(value);\n }\n\n private multiCheckboxValueKey(value: any): string {\n return JSON.stringify(value);\n }\n\n ensureMultiCheckboxDraft(col: ColumnDef<T>): any[] {\n const field = col.field as string;\n if (!this.multiCheckboxDrafts[field]) {\n const active = this.multiCheckboxSelectedValues(col);\n this.multiCheckboxDrafts[field] = active ?? this.multiCheckboxOptions(col).map((option) => option.value);\n }\n return this.multiCheckboxDrafts[field];\n }\n\n multiCheckboxSelectedCount(col: ColumnDef<T>): number {\n return this.ensureMultiCheckboxDraft(col).length;\n }\n\n multiCheckboxTotalCount(col: ColumnDef<T>): number {\n return this.multiCheckboxOptions(col).length;\n }\n\n isMultiCheckboxChecked(col: ColumnDef<T>, value: any): boolean {\n const key = this.multiCheckboxValueKey(value);\n return this.ensureMultiCheckboxDraft(col).some((item) => this.multiCheckboxValueKey(item) === key);\n }\n\n toggleMultiCheckboxValue(col: ColumnDef<T>, value: any): void {\n const field = col.field as string;\n const selected = this.ensureMultiCheckboxDraft(col);\n const key = this.multiCheckboxValueKey(value);\n this.multiCheckboxDrafts[field] = selected.some((item) => this.multiCheckboxValueKey(item) === key)\n ? selected.filter((item) => this.multiCheckboxValueKey(item) !== key)\n : [...selected, value];\n }\n\n isMultiCheckboxAllSelected(col: ColumnDef<T>): boolean {\n return this.multiCheckboxSelectedCount(col) === this.multiCheckboxTotalCount(col);\n }\n\n toggleMultiCheckboxAll(col: ColumnDef<T>): void {\n const field = col.field as string;\n this.multiCheckboxDrafts[field] = this.isMultiCheckboxAllSelected(col)\n ? []\n : this.multiCheckboxOptions(col).map((option) => option.value);\n }\n\n multiCheckboxToggleLabel(col: ColumnDef<T>): string {\n return this.isMultiCheckboxAllSelected(col) ? 'Deselect All' : 'Select All';\n }\n\n isMultiCheckboxPartiallySelected(col: ColumnDef<T>): boolean {\n const selected = this.multiCheckboxSelectedCount(col);\n const total = this.multiCheckboxTotalCount(col);\n return selected > 0 && selected < total;\n }\n\n private multiCheckboxSelectedValues(col: ColumnDef<T>): any[] | null {\n const filter = this.findFieldFilter(col.field as string);\n if (!filter || !ngbIsCompositeFilter(filter)) return null;\n const directFilters = filter.filters.filter((item): item is NgbFilterDescriptor => !ngbIsCompositeFilter(item));\n if (\n filter.logic === 'and' &&\n directFilters.length === 2 &&\n directFilters.every((item) => item.field === col.field) &&\n directFilters.some((item) => item.operator === 'isnull') &&\n directFilters.some((item) => item.operator === 'isnotnull')\n ) {\n return [];\n }\n if (filter.logic !== 'or' || directFilters.some((item) => item.field !== col.field || item.operator !== 'eq')) {\n return null;\n }\n return directFilters.map((item) => item.value);\n }\n\n multiCheckboxFilterApplyLabel(): string {\n return this.multiCheckboxFilterOptions.applyLabel ?? this.labelTemplate('multiCheckboxApply');\n }\n\n multiCheckboxFilterCancelLabel(): string {\n return this.multiCheckboxFilterOptions.cancelLabel ?? this.labelTemplate('multiCheckboxCancel');\n }\n\n multiCheckboxFilterShowCancel(): boolean {\n return this.multiCheckboxFilterOptions.showCancel !== false;\n }\n\n cancelMultiCheckboxFilter(col: ColumnDef<T>): void {\n const field = col.field as string;\n delete this.multiCheckboxDrafts[field];\n delete this.multiCheckboxSearch[field];\n this.closeFilterMenu();\n this.cdr.markForCheck();\n }\n\n applyMultiCheckboxFilter(col: ColumnDef<T>): void {\n const field = col.field as string;\n const selectedValues = this.ensureMultiCheckboxDraft(col);\n const options = this.multiCheckboxOptions(col);\n const next = this.cloneComposite(this.filter ?? this.localFilter);\n const filters = this.withoutFieldFilters(next.filters, field);\n\n if (selectedValues.length === options.length) {\n this.commitFilter({ ...next, filters });\n } else if (selectedValues.length === 0) {\n filters.push({\n logic: 'and',\n filters: [\n { field, operator: 'isnull' },\n { field, operator: 'isnotnull' },\n ],\n });\n this.commitFilter({ ...next, filters });\n } else {\n filters.push({\n logic: 'or',\n filters: selectedValues.map((value) => ({ field, operator: 'eq' as const, value, ignoreCase: true })),\n });\n this.commitFilter({ ...next, filters });\n }\n\n this.closeFilterMenu();\n }\n\n filterContext(col: ColumnDef<T>, source: 'row' | 'menu'): FilterCtx<T> {\n const field = col.field as string;\n const descriptor = source === 'menu'\n ? (() => {\n const draft = this.ensureMenuDraft(col);\n return { field, operator: draft.operator, value: draft.value };\n })()\n : this.getColumnFilter(field);\n const currentFilter = () => this.cloneComposite(this.effectiveFilterDescriptor());\n const commitFromTemplate = (filter: NgbCompositeFilterDescriptor) => {\n this.commitFilter(this.cloneComposite(filter));\n if (source === 'menu') this.closeFilterMenu();\n };\n return {\n $implicit: this.getFilterControl(field),\n control: this.getFilterControl(field),\n col,\n field,\n descriptor,\n filter: currentFilter(),\n operators: this.getAllowedOperators(col),\n setOperator: (operator) => {\n if (source === 'menu') this.ensureMenuDraft(col).operator = operator;\n else {\n this.filterForm.get(this.operatorControlName(field))?.setValue(operator);\n this.applyRowFilter(col);\n }\n },\n setValue: (value) => {\n if (source === 'menu') this.ensureMenuDraft(col).value = value;\n else {\n this.filterForm.get(this.valueControlName(field))?.setValue(value);\n this.applyRowFilter(col);\n }\n },\n clear: () => source === 'menu' ? this.clearMenuFilter(col) : this.clearColumnFilter(field),\n filterChange: commitFromTemplate,\n setFieldFilter: (operator, value) => {\n commitFromTemplate(\n ngbSetFieldFilter(currentFilter(), field, operator, value, {\n requiresValue: (op) => this.operatorRequiresValue(op)\n })\n );\n }\n };\n }\n\n get sorted(): T[] {\n if (this.sortedDirty) {\n if (this.sort.active && !this.visibleColumns.some((col) => col.field === this.sort.active)) {\n this.sort = { active: null, direction: '' };\n }\n const base = (!this.enableSorting || !this.sort.active || !this.sort.direction)\n ? [...this.filtered]\n : (() => {\n const copy = [...this.filtered];\n const { active, direction } = this.sort;\n copy.sort((a: any, b: any) => {\n const av = a?.[active]; const bv = b?.[active];\n const cmp = typeof av === 'string' && typeof bv === 'string'\n ? av.localeCompare(bv, undefined, { numeric: true, sensitivity: 'base' })\n : av < bv ? -1 : av > bv ? 1 : 0;\n return direction === 'asc' ? cmp : -cmp;\n });\n return copy;\n })();\n this.sortedCache = this.withStickyRowsFirst(base);\n this.sortedDirty = false;\n }\n return this.sortedCache;\n }\n // pagination (filled in next step)\n\n /** True when `[data]` is a server page and `[total]` is the full result count. */\n isServerBound(): boolean {\n const total = this.total;\n return total != null && Number.isFinite(total) && total >= 0 && total > this.sorted.length;\n }\n\n /** Row count for pager, range labels, and `aria-rowcount`. */\n recordTotal(): number {\n const total = this.total;\n if (total != null && Number.isFinite(total) && total >= 0) {\n return total;\n }\n if (this.shouldUseLocalDataOperations()) {\n return this.localDataOperationsResult(false).total;\n }\n return this.sorted.length;\n }\n\n /** Collection size passed to the built-in pager. */\n pagerCollectionSize(): number {\n return this.recordTotal();\n }\n\n get paged(): T[] {\n if (this.pagedDirty) {\n if (this.shouldUseLocalDataOperations()) {\n this.pagedCache = this.localDataOperationsResult(this.paginationActive).data;\n this.pagedDirty = false;\n return this.pagedCache;\n }\n if (!this.paginationActive || this.isServerBound()) {\n this.pagedCache = this.sorted;\n } else {\n const start = (this.page - 1) * this.pageSize;\n this.pagedCache = this.sorted.slice(start, start + this.pageSize);\n }\n this.pagedDirty = false;\n }\n return this.pagedCache;\n }\n\n private shouldUseLocalDataOperations(): boolean {\n if (!this.dataOperations) return false;\n const total = this.total;\n return !(total != null && Number.isFinite(total) && total >= 0 && total > (this.data?.length ?? 0));\n }\n\n private localDataOperationsResult(page: boolean) {\n const options = typeof this.dataOperations === 'object' ? this.dataOperations : {};\n return ngbApplyDataGridOperations(this.data, {\n ...options,\n state: this.dataState(),\n columns: options.columns ?? this.resolvedColumns,\n globalFilterFields: options.globalFilterFields ?? this.resolvedColumns.map((column) => column.field as string),\n page,\n });\n }\n\n // getters for template conditions / display\n get anyFilterable(): boolean {\n if (this.resolvedFilterMode() !== 'row') return false;\n return this.isFilteringEnabled() && !!this.visibleColumns?.some(c => c.filterable && this.isRowFilterVisible(c));\n }\n\n get startIndex(): number {\n const total = this.recordTotal();\n return total ? (this.page - 1) * this.pageSize + 1 : 0;\n }\n get endIndex(): number {\n return Math.min(this.page * this.pageSize, this.recordTotal());\n }\n\n get paginationActive(): boolean {\n return !!ngbResolvePageableSettings(this.pageable, {\n enablePagination: this.enablePagination,\n pageSizeOptions: this.pageSizeOptions,\n });\n }\n\n resolvedPageable(): NgbDatagridPageableSettings {\n return (\n ngbResolvePageableSettings(this.pageable, {\n enablePagination: this.enablePagination,\n pageSizeOptions: this.pageSizeOptions,\n }) ?? NGB_DATAGRID_DEFAULT_PAGEABLE\n );\n }\n\n pagerShowsAt(placement: NgbDatagridPagerPosition): boolean {\n if (!this.paginationActive) return false;\n const position = this.resolvedPageable().position ?? 'bottom';\n return position === placement || position === 'both';\n }\n\n showPagerInfo(): boolean {\n return this.resolvedPageable().info !== false;\n }\n\n showPagerPageSizes(): boolean {\n const pageSizes = this.resolvedPageable().pageSizes;\n return Array.isArray(pageSizes) && pageSizes.length > 0;\n }\n\n pagerButtonCount(): number {\n return this.resolvedPageable().buttonCount ?? 10;\n }\n\n pagerPreviousNext(): boolean {\n return this.resolvedPageable().previousNext !== false;\n }\n\n pagerType(): NgbDatagridPagerType {\n return this.resolvedPageable().type ?? 'numeric';\n }\n\n hasCustomPagerTemplate(): boolean {\n return !!this.pagerTpl;\n }\n\n pagerResponsive(): boolean {\n if (this.hasCustomPagerTemplate()) return false;\n return this.resolvedPageable().responsive !== false;\n }\n\n pagerContext(): PagerCtx<Datagrid<T>> & { $implicit: PagerCtx<Datagrid<T>> } {\n const total = this.recordTotal();\n const pageCount = Math.max(1, Math.ceil(total / Math.max(1, this.pageSize)));\n const ctx: PagerCtx<Datagrid<T>> = {\n grid: this,\n page: this.page,\n pageSize: this.pageSize,\n total,\n pageCount,\n };\n return { ...ctx, $implicit: ctx };\n }\n\n dataState(): NgbDataGridState {\n const sort = this.sort.active && this.sort.direction\n ? [{ field: this.sort.active, direction: this.sort.direction }]\n : [];\n return {\n page: this.page,\n pageIndex: Math.max(0, this.page - 1),\n skip: Math.max(0, (this.page - 1) * this.pageSize),\n pageSize: this.pageSize,\n sort,\n filter: this.cloneComposite(this.effectiveFilterDescriptor()),\n globalFilter: this.currentGlobalFilterValue(),\n };\n }\n\n private emitDataStateChange(): void {\n this.dataStateChange.emit(this.dataState());\n }\n\n private syncFromDataState(state: NgbDataGridState | null | undefined): void {\n if (!state) return;\n\n const pageSize = Number(state.pageSize);\n if (Number.isFinite(pageSize) && pageSize > 0) {\n this.pageSize = Math.max(1, Math.trunc(pageSize));\n }\n\n const page = Number(state.page);\n const pageIndex = Number(state.pageIndex);\n const skip = Number(state.skip);\n if (Number.isFinite(page) && page > 0) {\n this.page = Math.max(1, Math.trunc(page));\n } else if (Number.isFinite(pageIndex) && pageIndex >= 0) {\n this.page = Math.max(1, Math.trunc(pageIndex) + 1);\n } else if (Number.isFinite(skip) && skip >= 0) {\n this.page = Math.max(1, Math.floor(skip / Math.max(1, this.pageSize)) + 1);\n }\n\n const firstSort = state.sort?.[0];\n this.sort = firstSort?.field && firstSort.direction\n ? { active: firstSort.field as Extract<keyof T, string>, direction: firstSort.direction }\n : { active: null, direction: '' };\n\n if (state.filter !== undefined) {\n this.localFilter = this.cloneComposite(state.filter ?? { logic: 'and', filters: [] });\n this.syncLegacyFilters(this.localFilter);\n }\n\n if (state.globalFilter !== undefined) {\n this.globalFilter = state.globalFilter ?? '';\n this.globalFilterCtrl.setValue(this.globalFilter, { emitEvent: false });\n }\n\n this.invalidateFilteredCaches();\n this.syncFilterFormFromState();\n }\n\n /** Page-size options for the footer dropdown (includes [pageSize] when not listed in pageSizes). */\n get resolvedPageSizeOptions(): number[] {\n return ngbResolvePagerPageSizeOptions(this.resolvedPageable().pageSizes, this.pageSize);\n }\n\n get shouldEnableScroll(): boolean {\n return this.scrollable;\n }\n\n onBodyHorizontalScroll(): void {\n const left = this.bodyScroller?.nativeElement.scrollLeft ?? 0;\n if (this.headerScroller?.nativeElement) {\n this.headerScroller.nativeElement.scrollLeft = left;\n }\n }\n\n get isHeaderSticky(): boolean {\n return this.stickyHeaderEnabled && this.shouldEnableScroll;\n }\n\n get isFooterSticky(): boolean {\n return this.stickyFooterEnabled && this.shouldEnableScroll;\n }\n\n get detailColspan(): number {\n const actionCols = this.showActionsColumn() ? 1 : 0;\n const caretCol = this.rowDetailTpl ? 1 : 0;\n const stickyCol = this.stickyRowsEnabled ? 1 : 0;\n const selectionCol = this.showSelectionColumn() ? 1 : 0;\n return this.visibleColumns.length + actionCols + caretCol + stickyCol + selectionCol;\n }\n\n isColumnPinned(col: ColumnDef<T>): boolean {\n return this.columnPinnedSide(col) !== null;\n }\n\n columnPinnedSide(col: ColumnDef<T>): 'start' | 'end' | null {\n if (col.locked) return this.isRtl() ? 'end' : 'start';\n if (col.sticky === true || col.sticky === 'start') return 'start';\n if (col.sticky === 'end') return 'end';\n return null;\n }\n\n private columnOrderGroup(col: ColumnDef<T>): 'leading' | 'middle' | 'trailing' {\n if (col.locked) return 'leading';\n const side = this.columnPinnedSide(col);\n if (side === 'start') return 'leading';\n if (side === 'end') return 'trailing';\n return 'middle';\n }\n\n resolvedDir(): 'ltr' | 'rtl' | null {\n if (this.dir === 'ltr' || this.dir === 'rtl') return this.dir;\n return null;\n }\n\n isRtl(): boolean {\n const explicit = this.resolvedDir();\n if (explicit) return explicit === 'rtl';\n const host = this.hostEl?.nativeElement;\n if (!host) return false;\n const inheritedDir = host.closest('[dir]')?.getAttribute('dir') ?? host.getAttribute('dir');\n if (inheritedDir) return inheritedDir.toLowerCase() === 'rtl';\n return getComputedStyle(host).direction === 'rtl';\n }\n\n hasPinnedColumns(): boolean {\n return this.visibleColumns.some((col) => this.isColumnPinned(col));\n }\n\n shouldPinLeadingUtilityColumns(): boolean {\n return this.hasPinnedColumns();\n }\n\n utilityColumnWidth(kind: UtilityColumnKind): number {\n switch (kind) {\n case 'selection': return SELECTION_COL_WIDTH;\n case 'detail': return DETAIL_COL_WIDTH;\n case 'sticky-toggle': return STICKY_TOGGLE_COL_WIDTH;\n case 'actions': return ACTION_COL_WIDTH;\n }\n }\n\n resolvedEditMode(): NgbEditMode {\n return this.editMode;\n }\n\n isIncellEditMode(): boolean {\n return this.resolvedEditMode() === 'incell';\n }\n\n isExternalEditMode(): boolean {\n return this.resolvedEditMode() === 'external';\n }\n\n isToolbarEditMode(): boolean {\n return this.resolvedEditMode() === 'toolbar';\n }\n\n showEditingToolbar(): boolean {\n return this.isToolbarEditMode() && (this.enableAdd || this.enableEdit || this.enableDelete);\n }\n\n showRowEditAction(): boolean {\n return this.enableEdit && (this.resolvedEditMode() === 'inline' || this.isExternalEditMode());\n }\n\n showRowDeleteAction(): boolean {\n return this.enableDelete && !this.isToolbarEditMode();\n }\n\n showActionsColumn(): boolean {\n if (this.isIncellEditMode()) return false;\n return (\n (this.enableAdd && !this.isToolbarEditMode()) ||\n this.showRowEditAction() ||\n this.showRowDeleteAction()\n );\n }\n\n get externalEditableColumns(): ColumnDef<T>[] {\n const row = this.externalEditPagedIndex != null ? (this.paged[this.externalEditPagedIndex] as T) : ({} as T);\n return this.visibleColumns.filter((col) => this.isCellEditable(col, row, this.externalEditIsNew));\n }\n\n isCellInEditMode(pagedIndex: number, col: ColumnDef<T>): boolean {\n if (!this.enableEdit) return false;\n const row = this.paged[pagedIndex] as T;\n if (!this.isCellEditable(col, row, false)) return false;\n if (this.isIncellEditMode()) {\n return this.editingCell?.rowIndex === pagedIndex && this.editingCell?.field === col.field;\n }\n return this.editingIndex === pagedIndex;\n }\n\n onCellClick(ev: MouseEvent, pagedIndex: number, col: ColumnDef<T>): void {\n if (!this.isIncellEditMode() || !this.enableEdit) return;\n const row = this.paged[pagedIndex] as T;\n if (!this.isCellEditable(col, row, false)) return;\n const el = ev.target as HTMLElement;\n if (el.closest('button, a, input, select, textarea, label, .no-edit-trigger')) return;\n if (this.isCellInEditMode(pagedIndex, col)) return;\n if (this.editingCell) this.commitIncellEdit(false);\n this.startIncellEdit(pagedIndex, col.field as string);\n }\n\n onCellKeydown(ev: KeyboardEvent, pagedIndex: number, col: ColumnDef<T>, colIndex: number): void {\n if (!this.isIncellEditMode() || !this.isCellInEditMode(pagedIndex, col)) return;\n if (ev.key === 'Enter') {\n ev.preventDefault();\n this.commitIncellEdit(true);\n return;\n }\n if (ev.key === 'Escape') {\n ev.preventDefault();\n this.cancelIncellEdit();\n return;\n }\n if (!['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].includes(ev.key)) return;\n ev.preventDefault();\n const row = this.paged[pagedIndex] as T;\n const editableCols = this.visibleColumns\n .map((c, i) => ({ col: c, i }))\n .filter(({ col: c }) => this.isCellEditable(c, row, false));\n const currentIdx = editableCols.findIndex(({ col: c }) => c.field === col.field);\n if (currentIdx < 0) return;\n\n const currentColField = col.field as string;\n const currentColIndex = currentIdx;\n\n let nextPagedIndex = pagedIndex;\n let nextColField = currentColField;\n\n if (ev.key === 'ArrowLeft') {\n nextColField = editableCols[Math.max(0, currentColIndex - 1)]?.col.field as string;\n } else if (ev.key === 'ArrowRight') {\n nextColField = editableCols[Math.min(editableCols.length - 1, currentColIndex + 1)]?.col.field as string;\n } else if (ev.key === 'ArrowUp') {\n nextPagedIndex = Math.max(0, pagedIndex - 1);\n } else if (ev.key === 'ArrowDown') {\n nextPagedIndex = Math.min(this.paged.length - 1, pagedIndex + 1);\n }\n\n if (nextPagedIndex === pagedIndex && nextColField === currentColField) return;\n\n if (!this.commitIncellEdit(false)) return;\n this.startIncellEdit(nextPagedIndex, nextColField);\n }\n\n startIncellEdit(pagedIndex: number, field: string): void {\n this.addingNew = false;\n this.editingIndex = pagedIndex;\n this.editingCell = { rowIndex: pagedIndex, field };\n this.editForm = this.buildFormFromRow(this.paged[pagedIndex] as any);\n this.saveAttemptedEdit = false;\n this.cdr.markForCheck();\n queueMicrotask(() => this.focusInlineEditor(field));\n }\n\n private focusInlineEditor(preferredField?: string): void {\n const root = this.hostEl?.nativeElement;\n const body = root?.querySelector('.grid-body') as HTMLElement | null;\n if (!body) return;\n if (preferredField) {\n const control = body.querySelector<HTMLElement>(`td.grid-cell--editing [formcontrolname=\"${CSS.escape(preferredField)}\"]`);\n if (control) {\n control.focus?.();\n return;\n }\n }\n const first = body.querySelector<HTMLElement>('td.grid-cell--editing input, td.grid-cell--editing select, td.grid-cell--editing textarea');\n first?.focus?.();\n }\n\n commitIncellEdit(close = true): boolean {\n if (!this.editingCell || this.editingIndex == null || !this.editForm) return true;\n const { field } = this.editingCell;\n const control = this.editForm.get(field);\n control?.markAsTouched();\n control?.updateValueAndValidity();\n if (control?.invalid) return false;\n\n const pagedIndex = this.editingIndex;\n const di = this.dataIndexOf(this.paged[pagedIndex]);\n const original = this.data[di];\n const rowId = this.getRowId(di, original);\n const service = this.getEditService();\n const updated = service.assignValues(original, { ...(original as any), [field]: control?.value } as any);\n const next = service.update(this.data ?? [], updated, di, rowId);\n this.data = service.saveChanges(next, di, rowId, updated);\n this.invalidateDataCaches();\n this.rowSave.emit({ original, updated, index: di });\n\n if (close) {\n this.editingCell = null;\n this.editingIndex = null;\n this.editForm = this.fb.group({});\n this.saveAttemptedEdit = false;\n }\n this.cdr.markForCheck();\n return true;\n }\n\n cancelIncellEdit(): void {\n if (this.editingIndex == null) return;\n const di = this.dataIndexOf(this.paged[this.editingIndex]);\n const rowId = this.getRowId(di, this.data[di]);\n this.getEditService().cancelChanges(this.data ?? [], di, rowId);\n this.rowCancel.emit({ row: this.data[di], index: di });\n this.editingCell = null;\n this.editingIndex = null;\n this.editForm = this.fb.group({});\n this.saveAttemptedEdit = false;\n this.cdr.markForCheck();\n }\n\n getSingleSelectedPagedIndex(): number | null {\n const selected = this.paged\n .map((row, index) => ({ row, index }))\n .filter(({ row, index }) => this.isRowSelected(row, index));\n return selected.length === 1 ? selected[0].index : null;\n }\n\n editSelectedRow(): void {\n const index = this.getSingleSelectedPagedIndex();\n if (index == null) return;\n if (this.isExternalEditMode()) {\n this.openExternalEdit(index);\n return;\n }\n this.startEdit(index);\n }\n\n deleteSelectedRows(): void {\n const indices = this.paged\n .map((row, index) => (this.isRowSelected(row, index) ? index : -1))\n .filter((index) => index >= 0)\n .sort((a, b) => b - a);\n indices.forEach((index) => this.deleteRow(index));\n }\n\n openExternalEdit(pagedIndex: number): void {\n this.externalDialogOpener = (document.activeElement as HTMLElement) ?? null;\n this.externalDialogFocusedOnce = false;\n this.externalEditIsNew = false;\n this.externalEditPagedIndex = pagedIndex;\n this.externalForm = this.buildFormFromRow(this.paged[pagedIndex] as any);\n this.saveAttemptedExternal = false;\n this.externalEditOpen = true;\n this.cdr.markForCheck();\n queueMicrotask(() => this.focusExternalDialogFirstField());\n }\n\n openExternalAdd(): void {\n this.externalDialogOpener = (document.activeElement as HTMLElement) ?? null;\n this.externalDialogFocusedOnce = false;\n this.externalEditIsNew = true;\n this.externalEditPagedIndex = null;\n this.externalForm = this.buildFormFromRow();\n this.saveAttemptedExternal = false;\n this.externalEditOpen = true;\n const service = this.getEditService();\n const draft = service.assignValues({} as T, this.externalForm.value as any);\n this.addDraftRowId = Symbol('ngb-datagrid-new-row');\n service.create(this.data ?? [], draft, this.data.length, this.addDraftRowId);\n this.cdr.markForCheck();\n queueMicrotask(() => this.focusExternalDialogFirstField());\n }\n\n saveExternalEdit(): void {\n if (!this.externalEditOpen) return;\n this.saveAttemptedExternal = true;\n this.externalForm.markAllAsTouched();\n this.externalForm.updateValueAndValidity();\n if (this.externalForm.invalid) return;\n\n const service = this.getEditService();\n if (this.externalEditIsNew) {\n const newRow = service.assignValues({} as T, this.externalForm.value as any);\n const rowIndex = this.data.length;\n const rowId = this.addDraftRowId ?? this.getRowId(rowIndex, newRow);\n service.create(this.data ?? [], newRow, rowIndex, rowId);\n service.saveChanges(this.data ?? [], rowIndex, rowId, newRow);\n this.rowAdd.emit({ newRow });\n } else if (this.externalEditPagedIndex != null) {\n const pagedIndex = this.externalEditPagedIndex;\n const di = this.dataIndexOf(this.paged[pagedIndex]);\n const original = this.data[di];\n const rowId = this.getRowId(di, original);\n const updated = service.assignValues(original, this.externalForm.value as any);\n const next = service.update(this.data ?? [], updated, di, rowId);\n this.data = service.saveChanges(next, di, rowId, updated);\n this.invalidateDataCaches();\n this.rowSave.emit({ original, updated, index: di });\n }\n\n this.closeExternalEdit();\n }\n\n cancelExternalEdit(): void {\n if (!this.externalEditOpen) return;\n if (this.externalEditIsNew && this.addDraftRowId != null) {\n this.getEditService().cancelChanges(this.data ?? [], this.data.length, this.addDraftRowId);\n } else if (this.externalEditPagedIndex != null) {\n const di = this.dataIndexOf(this.paged[this.externalEditPagedIndex]);\n const rowId = this.getRowId(di, this.data[di]);\n this.getEditService().cancelChanges(this.data ?? [], di, rowId);\n this.rowCancel.emit({ row: this.data[di], index: di });\n }\n this.closeExternalEdit();\n }\n\n private closeExternalEdit(): void {\n this.externalEditOpen = false;\n this.externalEditIsNew = false;\n this.externalEditPagedIndex = null;\n this.externalForm = this.fb.group({});\n this.saveAttemptedExternal = false;\n this.cdr.markForCheck();\n const opener = this.externalDialogOpener;\n this.externalDialogOpener = null;\n this.externalDialogFocusedOnce = false;\n opener?.focus?.();\n }\n\n private focusExternalDialogFirstField(): void {\n if (!this.externalEditOpen || this.externalDialogFocusedOnce) return;\n const root = this.hostEl?.nativeElement;\n const dialog = root?.querySelector('.grid-external-editor__panel') as HTMLElement | null;\n if (!dialog) return;\n const focusable = dialog.querySelector<HTMLElement>('input, select, textarea, button:not([disabled])');\n focusable?.focus?.();\n this.externalDialogFocusedOnce = true;\n }\n\n utilityLeadingWidth(): number {\n let width = 0;\n if (!this.shouldPinLeadingUtilityColumns()) return width;\n if (this.showSelectionColumn()) width += this.utilityColumnWidth('selection');\n if (this.rowDetailTpl) width += this.utilityColumnWidth('detail');\n if (this.stickyRowsEnabled) width += this.utilityColumnWidth('sticky-toggle');\n return width;\n }\n\n columnWidth(col: ColumnDef<T>): number {\n const field = col.field as string;\n const override = this.columnWidthOverrides[field];\n if (override != null && override > 0) return override;\n return col.width ?? 0;\n }\n\n isColumnResizable(col: ColumnDef<T>): boolean {\n if (!this.resizable || this.isStackedLayout() || col.locked || col.resizable === false) return false;\n return this.columnWidth(col) > 0;\n }\n\n startColumnResize(event: MouseEvent, col: ColumnDef<T>): void {\n if (!this.isColumnResizable(col)) return;\n event.preventDefault();\n event.stopPropagation();\n this.resizeSession = {\n field: col.field as string,\n startX: event.clientX,\n startWidth: this.columnWidth(col),\n };\n document.body.classList.add('ngb-datagrid-column-resizing');\n }\n\n @HostListener('document:mousemove', ['$event'])\n onDocumentMouseMove(event: MouseEvent): void {\n if (!this.resizeSession) return;\n const col = this.resolvedColumns.find((item) => item.field === this.resizeSession!.field);\n if (!col) return;\n const rawDelta = event.clientX - this.resizeSession.startX;\n const delta = this.isRtl() ? -rawDelta : rawDelta;\n const next = this.clampColumnWidth(col, this.resizeSession.startWidth + delta);\n this.columnWidthOverrides[this.resizeSession.field] = next;\n this.syncResizableColgroups();\n this.cdr.markForCheck();\n }\n\n @HostListener('document:mouseup')\n onDocumentMouseUp(): void {\n if (!this.resizeSession) return;\n this.resizeSession = null;\n document.body.classList.remove('ngb-datagrid-column-resizing');\n this.syncResizableColgroups();\n this.cdr.markForCheck();\n }\n\n private syncResizableColgroups(): void {\n if (!this.resizable || this.isStackedLayout()) return;\n NgbSyncColgroupDirective.syncExplicitWidths(this.colgroupSyncId);\n }\n\n autoFitColumnsToGrid(): void {\n if (this.isStackedLayout()) return;\n const cols = this.visibleColumns.filter((col) => this.columnWidth(col) > 0);\n if (!cols.length) return;\n\n const available = this.gridViewportWidth() - this.nonDataColumnWidth();\n if (available <= 0) return;\n\n const currentWidths = cols.map((col) => this.columnWidth(col));\n const currentTotal = currentWidths.reduce((sum, width) => sum + width, 0);\n if (currentTotal <= 0) return;\n\n const scaled = currentWidths.map((width) => (width / currentTotal) * available);\n const next = scaled.map((width, index) => this.clampColumnWidth(cols[index], width));\n let total = next.reduce((sum, width) => sum + width, 0);\n let remainder = available - total;\n let pass = 0;\n while (remainder !== 0 && pass < cols.length * 4) {\n const index = pass % cols.length;\n const col = cols[index];\n const step = remainder > 0 ? 1 : -1;\n const updated = this.clampColumnWidth(col, next[index] + step);\n if (updated !== next[index]) {\n total += updated - next[index];\n next[index] = updated;\n remainder = available - total;\n }\n pass++;\n }\n\n cols.forEach((col, index) => {\n this.columnWidthOverrides[col.field as string] = next[index];\n });\n this.syncResizableColgroups();\n this.cdr.markForCheck();\n }\n\n private clampColumnWidth(col: ColumnDef<T>, width: number): number {\n const min = col.minResizableWidth ?? 50;\n const max = col.maxResizableWidth;\n let next = Math.round(width);\n if (next < min) next = min;\n if (max != null && next > max) next = max;\n return next;\n }\n\n private gridViewportWidth(): number {\n const el =\n this.bodyScroller?.nativeElement ??\n (this.hostEl.nativeElement.querySelector('.table-wrapper') as HTMLElement | null);\n return el?.clientWidth ?? 0;\n }\n\n private nonDataColumnWidth(): number {\n return (\n this.utilityLeadingWidth() + (this.showActionsColumn() ? this.utilityColumnWidth('actions') : 0)\n );\n }\n\n private syncColumnWidthOverrides(resetFromColumns: boolean): void {\n const next: Record<string, number> = resetFromColumns ? {} : { ...this.columnWidthOverrides };\n for (const col of this.resolvedColumns) {\n const field = col.field as string;\n if (resetFromColumns || !(field in next)) {\n if (col.width != null && col.width > 0) next[field] = col.width;\n }\n }\n const fields = new Set(this.resolvedColumns.map((col) => col.field as string));\n for (const field of Object.keys(next)) {\n if (!fields.has(field)) delete next[field];\n }\n this.columnWidthOverrides = next;\n }\n\n get tablePixelWidth(): number | null {\n if (this.isStackedLayout()) return null;\n const columnWidths = this.visibleColumns.reduce((sum, col) => sum + this.columnWidth(col), 0);\n const utilityWidths =\n this.utilityLeadingWidth() +\n (this.showActionsColumn() ? this.utilityColumnWidth('actions') : 0);\n const total = columnWidths + utilityWidths;\n return total > 0 ? total : null;\n }\n\n utilityStickyOffset(kind: Exclude<UtilityColumnKind, 'actions'>): number | null {\n if (!this.shouldPinLeadingUtilityColumns()) return null;\n if (kind === 'selection') return 0;\n if (kind === 'detail') return this.showSelectionColumn() ? this.utilityColumnWidth('selection') : 0;\n let offset = 0;\n if (this.showSelectionColumn()) offset += this.utilityColumnWidth('selection');\n if (this.rowDetailTpl) offset += this.utilityColumnWidth('detail');\n return offset;\n }\n\n columnStartOffset(col: ColumnDef<T>): number | null {\n if (this.columnPinnedSide(col) !== 'start') return null;\n const preceding = this.visibleColumns\n .slice(0, this.visibleColumns.indexOf(col))\n .filter((item) => this.columnPinnedSide(item) === 'start')\n .reduce((sum, item) => sum + this.columnWidth(item), 0);\n return this.utilityLeadingWidth() + preceding;\n }\n\n columnEndOffset(col: ColumnDef<T>): number | null {\n if (this.columnPinnedSide(col) !== 'end') return null;\n const index = this.visibleColumns.indexOf(col);\n return this.visibleColumns\n .slice(index + 1)\n .filter((item) => this.columnPinnedSide(item) === 'end')\n .reduce((sum, item) => sum + this.columnWidth(item), 0);\n }\n\n columnPinnedClass(col: ColumnDef<T>): string | null {\n const side = this.columnPinnedSide(col);\n return side ? `column-pinned-${side}${col.locked ? ' column-locked' : ' column-sticky'}` : null;\n }\n\n get tableClassList(): string[] {\n const opts = this.tableOptions || {};\n const cls: string[] = ['table'];\n if (opts.stripedRows) cls.push('table-striped');\n if (opts.stripedColumns) cls.push('table-striped-columns');\n if (opts.hoverRows) cls.push('table-hover');\n if (opts.bordered) cls.push('table-bordered');\n if (opts.borderless) cls.push('table-borderless');\n if (opts.small) cls.push('table-sm');\n if (opts.groupDividers) cls.push('table-group-divider');\n if (opts.align === 'middle') cls.push('align-middle');\n if (opts.align === 'bottom') cls.push('align-bottom');\n return cls;\n }\n\n get responsiveWrapperClasses(): string[] {\n const r = this.tableOptions?.responsive;\n if (r === false) return [];\n if (r === true || r === undefined) return ['table-responsive'];\n return [`table-responsive-${r}`];\n }\n\n get densityMode(): 'comfortable' | 'compact' {\n return this.tableOptions?.density ?? 'comfortable';\n }\n\n isStackedLayout(): boolean {\n if (this.dataLayoutMode === 'stacked') return true;\n if (this.dataLayoutMode === 'tabular') return false;\n return !!this.tableOptions?.stacked;\n }\n\n isStackedCardsLayout(): boolean {\n return this.isStackedLayout() && (this.tableOptions?.stackedLayout ?? 'list') === 'cards';\n }\n\n stackedGroupFor(col: ColumnDef<T>): 'start' | 'center' | 'end' {\n return col.stackedGroup ?? 'start';\n }\n\n stackedColumnsInGroup(group: 'start' | 'center' | 'end'): ColumnDef<T>[] {\n return this.visibleColumns.filter((col) => this.stackedGroupFor(col) === group);\n }\n\n stackedCardGroups(): Array<'start' | 'center' | 'end'> {\n const order: Array<'start' | 'center' | 'end'> = ['start', 'center', 'end'];\n return order.filter((group) => this.stackedColumnsInGroup(group).length > 0);\n }\n\n visibleColumnIndex(col: ColumnDef<T>): number {\n return this.visibleColumns.findIndex((item) => item.field === col.field);\n }\n\n stackedCardColspan(): number {\n return Math.max(1, this.visibleColumns.length);\n }\n\n clearSorting(emit = true): void {\n this.sort = { active: null, direction: '' };\n this.page = 1;\n if (emit) {\n this.sortChange.emit({ active: null, direction: '' });\n }\n this.cdr.markForCheck();\n }\n\n setColumnHidden(field: string, hidden: boolean): void {\n const col = this.resolvedColumns.find((item) => item.field === field);\n if (!col) return;\n col.hidden = hidden;\n if (!this.declarativeColumns.length) {\n this.columns = [...this.columns];\n }\n this.cdr.markForCheck();\n }\n\n applyColumnVisibility(visibility: Record<string, boolean>): void {\n for (const col of this.resolvedColumns) {\n const field = col.field as string;\n if (visibility[field] !== undefined) {\n col.hidden = !visibility[field];\n }\n }\n if (!this.declarativeColumns.length) {\n this.columns = [...this.columns];\n }\n this.cdr.markForCheck();\n }\n\n get zebraStripesEnabled(): boolean {\n return !!this.tableOptions?.zebraStripes;\n }\n\n getSelectedCount(): number {\n return this.selectedRowIds.size;\n }\n\n hasSelectedRows(): boolean {\n return this.getSelectedCount() > 0;\n }\n\n hasSingleSelectedRow(): boolean {\n return this.getSelectedCount() === 1;\n }\n\n resolveHeaderClass(col: ColumnDef<T>): string | string[] | Record<string, boolean> | null {\n return col.headerClass ?? null;\n }\n\n resolveHeaderStyle(col: ColumnDef<T>): Record<string, string | number> | null {\n return col.headerStyle ?? null;\n }\n\n resolveCellClass(row: T, rowIndex: number, col: ColumnDef<T>): string | string[] | Record<string, boolean> | null {\n const cellClass = col.cellClass;\n if (typeof cellClass === 'function') return cellClass(row, rowIndex) ?? null;\n return cellClass ?? null;\n }\n\n resolveCellStyle(row: T, rowIndex: number, col: ColumnDef<T>): Record<string, string | number> | null {\n const cellStyle = col.cellStyle;\n if (typeof cellStyle === 'function') return cellStyle(row, rowIndex) ?? null;\n return cellStyle ?? null;\n }\n\n resolveRowClass(row: T, rowIndex: number): string | string[] | Record<string, boolean> | null {\n if (typeof this.rowClass === 'function') return this.rowClass(row, rowIndex) ?? null;\n return this.rowClass ?? null;\n }\n\n resolveRowStyle(row: T, rowIndex: number): Record<string, string | number> | null {\n if (typeof this.rowStyle === 'function') return this.rowStyle(row, rowIndex) ?? null;\n return this.rowStyle ?? null;\n }\n\n updateHighlightCache(): void {\n this.highlightRowMap.clear();\n (this.highlightedIndex || []).forEach(item => {\n const rowKey = item.row;\n if (!this.highlightRowMap.has(rowKey)) this.highlightRowMap.set(rowKey, []);\n this.highlightRowMap.get(rowKey)?.push(item);\n });\n }\n\n headerText(col: ColumnDef<T>): string {\n return (col.header ?? col.field ?? '').toString();\n }\n\n headerTitle(col: ColumnDef<T>): string {\n const t = (col as any)?.title;\n return (t ?? this.headerText(col)) ?? '';\n }\n\n cellTitle(row: T, col: ColumnDef<T>): string {\n const def = (col as any)?.cellTitle;\n if (typeof def === 'function') return def(row) ?? '';\n if (typeof def === 'string') return def;\n const val = (row as any)?.[col.field];\n return val === undefined || val === null ? '' : String(val);\n }\n\n columnFilterAriaLabel(col: ColumnDef<T>): string {\n return ngbFormatDatagridLabel(this.labelTemplate('columnFilter'), {\n header: this.headerText(col),\n });\n }\n\n inputAriaLabel(col: ColumnDef<T>): string {\n return this.headerText(col);\n }\n\n reorderColumnAriaLabel(col: ColumnDef<T>): string {\n return ngbFormatDatagridLabel(this.labelTemplate('reorderColumn'), {\n header: this.headerText(col),\n });\n }\n\n resizeColumnAriaLabel(col: ColumnDef<T>): string {\n return ngbFormatDatagridLabel(this.labelTemplate('resizeColumn'), {\n header: this.headerText(col),\n });\n }\n\n openFilterMenuAriaLabel(col: ColumnDef<T>): string {\n return ngbFormatDatagridLabel(this.labelTemplate('openFilterMenu'), {\n header: this.headerText(col),\n });\n }\n\n clearFilterAriaLabel(col: ColumnDef<T>): string {\n return ngbFormatDatagridLabel(this.labelTemplate('clearFilter'), {\n header: this.headerText(col),\n });\n }\n\n filterOperatorAriaLabel(col: ColumnDef<T>): string {\n return ngbFormatDatagridLabel(this.labelTemplate('filterOperator'), {\n header: this.headerText(col),\n });\n }\n\n editRowAriaLabel(index: number): string {\n return ngbFormatDatagridLabel(this.labelTemplate('editRow'), { index: index + 1 });\n }\n\n deleteRowAriaLabel(index: number): string {\n return ngbFormatDatagridLabel(this.labelTemplate('deleteRow'), { index: index + 1 });\n }\n\n stickyRowToggleAriaLabel(): string {\n return this.labelTemplate('stickyRowToggle');\n }\n\n booleanDisplayLabel(value: boolean): string {\n return value ? this.labelTemplate('booleanYes') : this.labelTemplate('booleanNo');\n }\n\n emptyStateLabel(): string {\n return this.labelTemplate('emptyState');\n }\n\n paginationRangeLabel(): string {\n const total = this.recordTotal();\n const start = this.startIndex;\n const end = this.endIndex;\n const format = (n: number) => this.formatLocaleNumber(n);\n return ngbFormatDatagridLabel(this.labelTemplate('paginationRange'), {\n start: format(start),\n end: format(end),\n total: format(total),\n });\n }\n\n rowsPerPageLabel(): string {\n return this.labelTemplate('rowsPerPage');\n }\n\n ariaRowCount(): number {\n return this.recordTotal();\n }\n\n ariaColCount(): number {\n let count = this.visibleColumns.length;\n if (this.showSelectionColumn()) count += 1;\n if (this.rowDetailTpl) count += 1;\n if (this.stickyRowsEnabled) count += 1;\n if (this.showActionsColumn()) count += 1;\n return count;\n }\n\n isCellFocused(rowIndex: number, colIndex: number): boolean {\n return (\n this.keyboardNavigation &&\n this.focusedCell?.rowIndex === rowIndex &&\n this.focusedCell?.colIndex === colIndex\n );\n }\n\n cellTabIndex(rowIndex: number, colIndex: number): number | null {\n if (!this.keyboardNavigation || this.isStackedLayout()) return null;\n if (!this.focusedCell) {\n return rowIndex === 0 && colIndex === 0 ? 0 : -1;\n }\n return this.isCellFocused(rowIndex, colIndex) ? 0 : -1;\n }\n\n focusCell(rowIndex: number, colIndex: number): void {\n if (!this.keyboardNavigation) return;\n const maxRow = Math.max(0, this.paged.length - 1);\n const maxCol = Math.max(0, this.visibleColumns.length - 1);\n this.focusedCell = {\n rowIndex: Math.min(Math.max(0, rowIndex), maxRow),\n colIndex: Math.min(Math.max(0, colIndex), maxCol),\n };\n this.cdr.markForCheck();\n queueMicrotask(() => this.focusFocusedCellElement());\n }\n\n onDataCellFocus(rowIndex: number, colIndex: number): void {\n if (!this.keyboardNavigation) return;\n this.focusedCell = { rowIndex, colIndex };\n }\n\n onDataCellKeydown(\n ev: KeyboardEvent,\n rowIndex: number,\n colIndex: number,\n col: ColumnDef<T>\n ): void {\n if (!this.keyboardNavigation) return;\n if (this.isCellInEditMode(rowIndex, col)) {\n return;\n }\n\n const key = ev.key;\n if (key === ' ' && this.isSelectionEnabled() && !this.isCheckboxOnly()) {\n ev.preventDefault();\n this.toggleSelection(rowIndex, ev);\n return;\n }\n\n if (key === 'F3' && this.isRowFilterEnabledForColumn(col)) {\n ev.preventDefault();\n this.openRowFilterMenuForColumn(col, ev.target as HTMLElement);\n return;\n }\n\n if (key === 'F2' && this.isIncellEditMode() && this.enableEdit) {\n const row = this.paged[rowIndex] as T;\n if (this.isCellEditable(col, row, false)) {\n ev.preventDefault();\n this.startIncellEdit(rowIndex, col.field as string);\n }\n return;\n }\n\n if (key === 'Enter' && this.isIncellEditMode() && this.enableEdit) {\n const row = this.paged[rowIndex] as T;\n if (this.isCellEditable(col, row, false)) {\n ev.preventDefault();\n this.startIncellEdit(rowIndex, col.field as string);\n }\n return;\n }\n\n if (this.paginationActive && ev.altKey && (key === 'PageDown' || key === 'PageUp')) {\n ev.preventDefault();\n const totalPages = Math.max(1, Math.ceil(this.recordTotal() / this.pageSize));\n const nextPage = key === 'PageDown' ? Math.min(totalPages, this.page + 1) : Math.max(1, this.page - 1);\n if (nextPage !== this.page) {\n this.onPage(nextPage);\n this.announceStatus(this.paginationRangeLabel());\n this.focusCell(0, colIndex);\n }\n return;\n }\n\n let nextRow = rowIndex;\n let nextCol = colIndex;\n const colCount = this.visibleColumns.length;\n const rowCount = this.paged.length;\n\n if (key === 'ArrowRight') nextCol = Math.min(colCount - 1, colIndex + 1);\n else if (key === 'ArrowLeft') nextCol = Math.max(0, colIndex - 1);\n else if (key === 'ArrowDown') nextRow = Math.min(rowCount - 1, rowIndex + 1);\n else if (key === 'ArrowUp') nextRow = Math.max(0, rowIndex - 1);\n else if (key === 'Home' && ev.ctrlKey) {\n ev.preventDefault();\n nextRow = 0;\n } else if (key === 'End' && ev.ctrlKey) {\n ev.preventDefault();\n nextRow = Math.max(0, rowCount - 1);\n } else if (key === 'Home') {\n ev.preventDefault();\n nextCol = 0;\n } else if (key === 'End') {\n ev.preventDefault();\n nextCol = Math.max(0, colCount - 1);\n } else {\n return;\n }\n\n ev.preventDefault();\n this.focusCell(nextRow, nextCol);\n }\n\n private openRowFilterMenuForColumn(col: ColumnDef<T>, anchor: HTMLElement): void {\n if (!col.filterable) return;\n this.toggleRowFilterMenu(col.field as string, anchor);\n }\n\n private isRowFilterEnabledForColumn(col: ColumnDef<T>): boolean {\n return this.isFilteringEnabled() && !!col.filterable && this.filterMode === 'row';\n }\n\n private focusFocusedCellElement(): void {\n const cell = this.focusedCell;\n if (!cell) return;\n const root = this.hostEl?.nativeElement;\n const rows = root?.querySelectorAll('tbody tr.grid-data-row');\n const row = rows?.[cell.rowIndex] as HTMLElement | undefined;\n const el = row?.querySelector(`td[data-col-index=\"${cell.colIndex}\"]`) as HTMLElement | null;\n el?.focus?.();\n }\n\n announceStatus(message: string): void {\n this.statusMessage = message;\n this.cdr.markForCheck();\n }\n\n private labelTemplate(key: keyof NgbDatagridLabels): string {\n const bag = this.labels?.[key];\n if (bag != null && bag !== '') return bag;\n return NGB_DATAGRID_DEFAULT_LABELS[key];\n }\n\n private formatLocaleNumber(value: number): string {\n try {\n return new Intl.NumberFormat(this.locale ?? undefined).format(value);\n } catch {\n return String(value);\n }\n }\n\n ariaSortFor(field: Extract<keyof T, string>): 'ascending' | 'descending' | 'none' {\n if (!this.enableSorting || this.sort.active !== field || !this.sort.direction) {\n return 'none';\n }\n return this.sort.direction === 'asc' ? 'ascending' : 'descending';\n }\n\n sortButtonAriaLabel(col: ColumnDef<T>): string {\n const header = this.headerText(col);\n const state = this.sort.active === col.field\n ? (this.sort.direction === 'asc'\n ? 'ascending'\n : this.sort.direction === 'desc'\n ? 'descending'\n : 'unsorted')\n : 'unsorted';\n if (this.labels?.sortBy) {\n return ngbFormatDatagridLabel(this.labelTemplate('sortBy'), { header, state });\n }\n return `Sort by ${header}. Current sort ${state}.`;\n }\n\n exportAriaLabel(kind: 'pdf'|'excel'): string {\n if (kind === 'pdf') {\n return this.exportPdfAriaLabel || this.labelTemplate('exportPdf');\n }\n return this.exportExcelAriaLabel || this.labelTemplate('exportExcel');\n }\n private withStickyRowsFirst(rows: T[]): T[] {\n if (!this.stickyRows || this.stickyRowIds.size === 0) return rows;\n const sticky: T[] = [];\n const rest: T[] = [];\n\n rows.forEach(r => {\n const di = this.dataIndexOf(r);\n const id = this.getRowId(di >= 0 ? di : 0, r);\n (this.stickyRowIds.has(id) ? sticky : rest).push(r);\n });\n\n return [...sticky, ...rest];\n }\n\n\n // Helpers to map from paged index → original data index\n // helper used above\n private dataIndexFromPaged(i: number): number {\n const row = this.paged[i];\n return this.dataIndexOf(row);\n }\n\n private rebuildFilterForm() {\n const group: Record<string, any> = {};\n for (const c of this.resolvedColumns) {\n if (!c.filterable) continue;\n const descriptor = this.getColumnFilter(c.field as string);\n group[this.operatorControlName(c.field as string)] = [descriptor?.operator ?? this.defaultFilterOperator(c)];\n group[this.valueControlName(c.field as string)] = [descriptor?.value ?? ''];\n }\n this.filterForm = this.fb.group(group);\n\n this.filterForm.valueChanges.subscribe(() => {\n if (this.syncingFilterForm) return;\n });\n this.globalFilterCtrl.valueChanges.subscribe((value) => {\n this.globalFilter = value;\n this.page = 1;\n this.filtersChange.emit({ global: value, columns: { ...this.filters } });\n });\n }\n\n @ContentChildren(NgbCellTemplate) private cellTplQ!: QueryList<NgbCellTemplate<T>>;\n @ContentChildren(NgbEditorTemplate) private editTplQ!: QueryList<NgbEditorTemplate<T>>;\n @ContentChildren(NgbFilterTemplate) private filterTplQ!: QueryList<NgbFilterTemplate<T>>;\n @ContentChildren(NgbFilterMenuTemplate) private filterMenuTplQ!: QueryList<NgbFilterMenuTemplate<T>>;\n @ContentChildren(NgbGlobalFilterTemplate) private globalTplQ!: QueryList<NgbGlobalFilterTemplate>;\n @ContentChildren(NgbGridColumnDirective) private gridColumnQ!: QueryList<NgbGridColumnDirective<T>>;\n\n /** Internal lookup maps */\n public cellTpls: Record<string, NgbCellTemplate<T>> = {};\n public editTpls: Record<string, NgbEditorTemplate<T>> = {};\n public filterTpls: Record<string, NgbFilterTemplate<T>> = {};\n public filterMenuTpls: Record<string, NgbFilterMenuTemplate<T>> = {};\n public globalTpl: NgbGlobalFilterTemplate | null = null;\n private warnedDeclarativeColumns = false;\n\n private toRecord<T extends { field: string }>(\n items: readonly T[] | QueryList<T> | null | undefined\n ): Record<string, T> {\n const arr = Array.isArray(items)\n ? items\n : items instanceof QueryList\n ? items.toArray()\n : [];\n return arr.reduce((acc, t) => (acc[t.field] = t, acc), {} as Record<string, T>);\n }\n \n async export(kind: 'pdf'|'excel') {\n if (!this.exportOptions?.enabled) return;\n this.exporting = true;\n try {\n const data = await this.resolveDataset();\n const cols = this.visibleColumns.map(c => ({ key: c.field, title: c.header }));\n if (kind === 'pdf') {\n await this.exporter.exportPdf({\n fileName: this.exportOptions.fileName || 'export',\n columns: cols.map(c => c.key),\n rows: data,\n options: this.exportOptions.pdf\n });\n } else {\n await this.exporter.exportExcel({\n fileName: this.exportOptions.fileName || 'export',\n sheetName: this.exportOptions.excel?.sheetName || 'Sheet1',\n columns: cols,\n rows: data\n });\n }\n } finally { this.exporting = false; }\n }\n\n private async resolveDataset(): Promise<any[]> {\n const mode = this.exportOptions?.pages || 'current';\n if (mode === 'all') {\n if (!this.dataProviderAll) throw new Error('dataProviderAll required when pages=\"all\"');\n const d = this.dataProviderAll();\n return isObservable(d) ? firstValueFrom(d) : (d instanceof Promise ? d : d);\n }\n if (mode === 'selection') {\n if (!this.dataProviderSelection) throw new Error('dataProviderSelection required when pages=\"selection\"');\n return this.dataProviderSelection();\n }\n // current page == your existing `paged` array\n return this.paged;\n }\n\n ngAfterContentInit(): void {\n const rebuild = () => {\n this.invalidateColumnCaches();\n this.cellTpls = this.toRecord(this.cellTplQ);\n this.editTpls = this.toRecord(this.editTplQ);\n this.filterTpls = this.toRecord(this.filterTplQ);\n this.filterMenuTpls = this.toRecord(this.filterMenuTplQ);\n this.globalTpl = this.globalTplQ?.first ?? null;\n this.syncColumnWidthOverrides(true);\n this.syncColumnOrder(true);\n this.validateColumnConfig();\n this.rebuildFilterForm();\n if (this.sort.active && !this.visibleColumns.some((col) => col.field === this.sort.active)) {\n this.sort = { active: null, direction: '' };\n }\n };\n rebuild();\n this.cellTplQ?.changes.subscribe(rebuild);\n this.editTplQ?.changes.subscribe(rebuild);\n this.filterTplQ?.changes.subscribe(rebuild);\n this.filterMenuTplQ?.changes.subscribe(rebuild);\n this.globalTplQ?.changes.subscribe(rebuild);\n this.gridColumnQ?.changes.subscribe(rebuild);\n }\n\n ngOnChanges(ch: SimpleChanges): void {\n if (ch['state']) {\n this.syncFromDataState(this.state);\n }\n if (ch['filter']) {\n this.localFilter = this.cloneComposite(this.filter);\n this.syncLegacyFilters(this.localFilter);\n this.invalidateFilteredCaches();\n }\n if (ch['columns']) {\n this.invalidateColumnCaches();\n this.syncColumnWidthOverrides(true);\n this.syncColumnOrder(true);\n }\n if (ch['data']) {\n this.invalidateDataCaches();\n }\n if (ch['columns'] || ch['filter']) {\n this.validateColumnConfig();\n if (this.sort.active && !this.visibleColumns.some((col) => col.field === this.sort.active)) {\n this.sort = { active: null, direction: '' };\n }\n this.rebuildFilterForm();\n this.syncFilterFormFromState();\n }\n if (ch['highlightedIndex']) this.updateHighlightCache();\n if (ch['editMode']) this.resetEditingState();\n if (ch['pageSize'] || ch['pageSizeOptions'] || ch['enablePagination'] || ch['pageable'] || ch['state'] || ch['dataOperations']) {\n const size = Math.max(1, Math.trunc(Number(this.pageSize) || 10));\n this.pageSize = size;\n this.invalidatePagedCache();\n }\n if (ch['data'] || ch['columns'] || ch['labels'] || ch['locale'] || ch['dir']) {\n this.cdr.markForCheck();\n }\n }\n\n private resetEditingState(): void {\n this.editingCell = null;\n this.editingIndex = null;\n this.editForm = this.fb.group({});\n this.saveAttemptedEdit = false;\n this.closeExternalEdit();\n this.cdr.markForCheck();\n }\n\n private getRowId(rowIndex: number, row: T): any {\n return this.trackBy ? this.trackBy(rowIndex, row) : rowIndex;\n }\n\n /** Apply selection ids and refresh checkbox UI (for programmatic / OnPush sync). */\n setSelectionIds(ids: Iterable<any>, options?: { emit?: boolean }): void {\n if (!this.isSelectionEnabled()) return;\n this.selectedRowIds.clear();\n for (const id of ids) {\n this.selectedRowIds.add(id);\n }\n if (options?.emit !== false) {\n this.selectionChange.emit({\n selected: this.data.filter((row, idx) => this.selectedRowIds.has(this.getRowId(idx, row))),\n lastAction: null,\n });\n }\n this.cdr.markForCheck();\n Promise.resolve().then(() => {\n this.cdr.detectChanges();\n });\n }\n\n private getEditService(): NgbDatagridEditService<T> {\n return this.editService ?? this.defaultEditService;\n }\n\n isCellEditable(col: ColumnDef<T>, row: T, isNew: boolean): boolean {\n if (typeof col.editable === 'function') return col.editable(row, isNew);\n return col.editable ?? true;\n }\n\n isRowReorderEnabled(): boolean {\n return this.rowReorderable &&\n !this.sort.active &&\n !this.hasActiveFilters() &&\n !this.addingNew &&\n this.editingIndex == null &&\n !this.stickyRowsEnabled;\n }\n\n hasActiveFilters(): boolean {\n return !!(this.currentGlobalFilterValue() || this.localFilter.filters.length > 0);\n }\n\n startAdd() {\n if (!this.enableAdd || this.addingNew) return;\n if (this.isExternalEditMode()) {\n this.openExternalAdd();\n return;\n }\n this.page = 1;\n this.editingIndex = null;\n this.editingCell = null;\n this.addingNew = true;\n this.addForm = this.buildFormFromRow(); // defaults\n this.saveAttemptedNew = false;\n\n // Register a draft row with the edit service so implementations can track \"new\" state.\n const service = this.getEditService();\n const draft = service.assignValues({} as T, this.addForm.value as any);\n this.addDraftRowId = Symbol('ngb-datagrid-new-row');\n service.create(this.data ?? [], draft, this.data.length, this.addDraftRowId);\n this.cdr.markForCheck();\n }\n\n saveAdd() {\n if (!this.addingNew || !this.addForm) return;\n this.saveAttemptedNew = true;\n this.addForm.markAllAsTouched();\n this.addForm.updateValueAndValidity();\n\n if (this.addForm.invalid) return;\n\n const service = this.getEditService();\n const newRow = service.assignValues({} as T, this.addForm.value as any);\n const rowIndex = this.data.length;\n const rowId = this.addDraftRowId ?? this.getRowId(rowIndex, newRow);\n service.create(this.data ?? [], newRow, rowIndex, rowId);\n service.saveChanges(this.data ?? [], rowIndex, rowId, newRow);\n this.invalidateDataCaches();\n this.rowAdd.emit({ newRow });\n\n this.addingNew = false;\n this.addForm = this.fb.group({});;\n this.saveAttemptedNew = false;\n this.addDraftRowId = null;\n this.cdr.markForCheck();\n }\n\n cancelAdd() {\n if (this.addDraftRowId != null) {\n this.getEditService().cancelChanges(this.data ?? [], this.data.length, this.addDraftRowId);\n }\n this.addingNew = false;\n this.addForm = this.fb.group({});;\n this.saveAttemptedNew = false;\n this.addDraftRowId = null;\n this.cdr.markForCheck();\n }\n\n startEdit(i: number) {\n if (!this.enableEdit) return;\n if (this.isExternalEditMode()) {\n this.openExternalEdit(i);\n return;\n }\n this.addingNew = false;\n this.editingCell = null;\n this.editingIndex = i;\n const row = this.paged[i] as any;\n this.editForm = this.buildFormFromRow(this.paged[i] as any);\n this.saveAttemptedEdit = false;\n const di = this.dataIndexOf(row);\n const rowId = this.getRowId(di, this.data[di]);\n // Start tracking baseline for the row (service can snapshot original state).\n this.getEditService().update(this.data ?? [], this.data[di], di, rowId);\n this.rowEdit.emit({ row: this.data[di], index: di });\n this.cdr.markForCheck();\n queueMicrotask(() => this.focusInlineEditor());\n }\n\n saveEdit(i: number) {\n if (this.editingIndex !== i || !this.editForm) return;\n this.saveAttemptedEdit = true;\n this.editForm.markAllAsTouched();\n this.editForm.updateValueAndValidity();\n\n if (this.editForm.invalid) return;\n\n const di = this.dataIndexOf(this.paged[i]);\n const original = this.data[di];\n const rowId = this.getRowId(di, original);\n const service = this.getEditService();\n const updated = service.assignValues(original, this.editForm.value as any);\n const next = service.update(this.data ?? [], updated, di, rowId);\n this.data = service.saveChanges(next, di, rowId, updated);\n this.invalidateDataCaches();\n\n this.rowSave.emit({ original, updated, index: di });\n\n this.editingIndex = null;\n this.editForm = this.fb.group({});\n this.saveAttemptedEdit = false;\n this.cdr.markForCheck();\n }\n\n cancelEdit(i: number) {\n const di = this.dataIndexOf(this.paged[i]);\n const rowId = this.getRowId(di, this.data[di]);\n this.getEditService().cancelChanges(this.data ?? [], di, rowId);\n this.rowCancel.emit({ row: this.data[di], index: di });\n this.editingIndex = null;\n this.editForm = this.fb.group({}); // empty group\n this.saveAttemptedEdit = false;\n this.cdr.markForCheck();\n }\n\n // For the \"Add row\" draft\n onNewDraftChange(col: ColumnDef<T>) {\n if (this.draftNew) {\n const key = this.keyOf(col);\n this.draftNew = this.getEditService().assignValues(this.draftNew as any, { [key]: (this.draftNew as any)[key] } as any) as any;\n }\n this.validateInto(col, this.draftNew, this.errorsNew);\n }\n\n validateInto(col: ColumnDef<T>,\n targetDraft: Partial<Record<KeyOf<T>, any>> | null,\n targetErrors: Partial<Record<KeyOf<T>, string>>\n ) {\n if (!targetDraft) return;\n const key = this.keyOf(col);\n const val = targetDraft[key];\n let err = '';\n\n // required\n if (col.required) {\n const empty = val == null || (typeof val === 'string' && val.trim() === '');\n if (empty) err = 'Required';\n }\n // type checks\n if (!err && col.type === 'email' && val && !isReasonableEmail(val)) err = 'Invalid email';\n if (!err && col.type === 'number' && val !== '' && val != null && Number.isNaN(Number(val))) err = 'Invalid number';\n if (!err && col.type === 'date' && val && Number.isNaN(Date.parse(String(val)))) err = 'Invalid date';\n if (!err && col.type === 'boolean' && col.required && val !== true && val !== false) err = 'Required';\n\n if (err) targetErrors[key] = err; else delete targetErrors[key];\n }\n\n deleteRow(i: number) {\n if (!this.enableDelete) return;\n const di = this.dataIndexFromPaged(i);\n const row = this.data[di];\n const rowId = this.getRowId(di, row);\n this.getEditService().remove(this.data ?? [], di, rowId);\n this.rowDelete.emit({ row, index: di });\n }\n\n // Optional stable row identity for efficient rendering.\n trackRow = (index: number, row: T) => {\n const di = this.dataIndexOf(row);\n const rowIndex = di >= 0 ? di : index;\n return this.trackBy ? this.trackBy(rowIndex, row) : rowIndex;\n };\n\n private rowKeyValue(row: T, rowIndex: number): any {\n const key = this.highlightRowKey;\n if (typeof key === 'function') return (key as any)(row, rowIndex);\n if (typeof key === 'string') return (row as any)?.[key];\n return rowIndex;\n }\n\n private colKeyValue(column: ColumnDef<T>, colIndex: number): any {\n const key = this.highlightColKey;\n if (typeof key === 'function') return (key as any)(column, colIndex);\n if (typeof key === 'string') return (column as any)?.[key];\n return colIndex;\n }\n\n isRowHighlighted(row: T, rowIndex: number): boolean {\n const key = this.rowKeyValue(row, rowIndex);\n return this.highlightRowMap.has(key) && this.highlightRowMap.get(key)?.some(h => h.columnKey === undefined) === true;\n }\n\n isCellHighlighted(row: T, rowIndex: number, column: ColumnDef<T>, colIndex: number): boolean {\n const key = this.rowKeyValue(row, rowIndex);\n const colKey = this.colKeyValue(column, colIndex);\n const items = this.highlightRowMap.get(key);\n return !!items?.some(h => h.columnKey === colKey);\n }\n\n toggleSort(field: Extract<keyof T, string>) {\n if (!this.enableSorting) return;\n\n if (this.sort.active !== field) this.sort = { active: field, direction: 'asc' };\n else this.sort = {\n active: field,\n direction: this.sort.direction === 'asc' ? 'desc' : this.sort.direction === 'desc' ? '' : 'asc'\n };\n\n this.page = 1;\n this.invalidateSortedCaches();\n this.sortChange.emit({ active: this.sort.active, direction: this.sort.direction });\n this.emitDataStateChange();\n const col = this.resolvedColumns.find((item) => item.field === field);\n if (col) {\n const state = this.sort.direction === 'asc' ? 'ascending' : this.sort.direction === 'desc' ? 'descending' : 'none';\n this.announceStatus(\n ngbFormatDatagridLabel(this.labelTemplate('sortBy'), {\n header: this.headerText(col),\n state,\n })\n );\n }\n }\n\n onGlobalFilterChange() {\n if (!this.isFilteringEnabled() || !this.enableGlobalFilter) return;\n this.globalFilterCtrl.setValue(this.globalFilter, { emitEvent: false });\n this.page = 1;\n this.invalidateFilteredCaches();\n this.filtersChange.emit({ global: this.globalFilter, columns: { ...this.filters } });\n this.emitDataStateChange();\n }\n\n onColumnFilterChange() {\n if (!this.isFilteringEnabled()) return;\n this.localFilter = this.legacyFilterDescriptor();\n this.page = 1;\n this.invalidateFilteredCaches();\n this.filterChange.emit(this.localFilter);\n this.filtersChange.emit({ global: this.globalFilter, columns: { ...this.filters } });\n this.emitDataStateChange();\n this.syncFilterFormFromState();\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n const target = event.target as HTMLElement | null;\n const insideMenu = !!target?.closest(\n '.grid-filter-menu-host, .grid-filter-operator, .grid-filter-operator-menu, .ngb-datagrid-floating-panel, .ngb-grid__filter-menu-overlay'\n );\n if (insideMenu) {\n return;\n }\n this.closeFilterMenu();\n this.openRowFilterField = null;\n this.openRowFilterOperatorAnchor = null;\n\n if (this.isIncellEditMode()) {\n // Clicking outside the grid commits a valid in-cell edit and keeps invalid edits open.\n if (!target?.closest('.ngb-grid')) {\n this.commitIncellEdit(true);\n }\n }\n }\n\n canCancelToolbarEdit(): boolean {\n return this.isToolbarEditMode() && (this.editingIndex != null || this.externalEditOpen);\n }\n\n isToolbarEditActive(): boolean {\n return this.isToolbarEditMode() && (this.addingNew || this.editingIndex != null || this.externalEditOpen);\n }\n\n isToolbarSaveDisabled(): boolean {\n if (!this.isToolbarEditActive()) return true;\n // External dialog validates before save; inline toolbar add/edit validate on save click.\n if (this.externalEditOpen) return !!this.externalForm?.invalid;\n return false;\n }\n\n saveToolbarEdit(): void {\n if (!this.isToolbarEditMode()) return;\n if (this.externalEditOpen) {\n this.saveExternalEdit();\n return;\n }\n if (this.addingNew) {\n this.saveAdd();\n return;\n }\n if (this.editingIndex != null) {\n this.saveEdit(this.editingIndex);\n }\n }\n\n cancelToolbarEdit(): void {\n if (!this.isToolbarEditMode()) return;\n if (this.externalEditOpen) {\n this.cancelExternalEdit();\n return;\n }\n if (this.addingNew) {\n this.cancelAdd();\n return;\n }\n if (this.editingIndex != null) {\n this.cancelEdit(this.editingIndex);\n }\n }\n\n private ariaUtilityColumns(): Exclude<UtilityColumnKind, 'actions'>[] {\n const cols: Exclude<UtilityColumnKind, 'actions'>[] = [];\n if (this.showSelectionColumn()) cols.push('selection');\n if (this.rowDetailTpl) cols.push('detail');\n if (this.stickyRowsEnabled) cols.push('sticky-toggle');\n return cols;\n }\n\n ariaColIndexForUtility(kind: Exclude<UtilityColumnKind, 'actions'>): number | null {\n const idx = this.ariaUtilityColumns().indexOf(kind);\n return idx >= 0 ? idx + 1 : null;\n }\n\n ariaColIndexForDataColumn(visibleColumnIndex: number): number {\n return this.ariaUtilityColumns().length + visibleColumnIndex + 1;\n }\n\n ariaColIndexForActions(): number {\n return this.ariaUtilityColumns().length + this.visibleColumns.length + 1;\n }\n\n @HostListener('document:keydown.escape')\n onEscapeKey(): void {\n this.closeFilterMenu();\n this.openRowFilterField = null;\n }\n\n onPageChange(p: number) {\n this.page = p;\n this.invalidatePagedCache();\n this.pageChange.emit({ page: this.page, pageSize: this.pageSize });\n this.emitDataStateChange();\n }\n\n onPageSizeChange() {\n this.page = 1;\n this.invalidatePagedCache();\n this.pageChange.emit({ page: this.page, pageSize: this.pageSize });\n this.emitDataStateChange();\n }\n\n toggleExpand(i: number): void {\n const isOpen = this.expanded.has(i);\n\n if (this.singleExpand) {\n this.expanded.clear();\n if (!isOpen) this.expanded.add(i); // open the clicked row, or close all if it was open\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n isOpen ? this.expanded.delete(i) : this.expanded.add(i);\n }\n }\n\n isExpanded(i: number): boolean {\n return this.expanded.has(i);\n }\n\n onRowClick(ev: MouseEvent, i: number) {\n if (this.isIncellEditMode() || this.isToolbarEditMode() || this.isExternalEditMode()) return;\n if (!this.editOnRowClick) return;\n if (this.addingNew || this.editingIndex === i) return;\n const el = ev.target as HTMLElement;\n if (el.closest('button, a, input, select, textarea, label, .no-edit-trigger')) return;\n this.startEdit(i);\n }\n\n onPage(p: number): void {\n if (p < 1) return;\n this.page = p;\n this.invalidatePagedCache();\n this.pageChange.emit({ page: this.page, pageSize: this.pageSize });\n this.emitDataStateChange();\n }\n\n onPageSize(sz: number | string): void {\n const next = Math.max(1, Math.trunc(Number(sz)));\n this.pageSize = Number.isFinite(next) && next > 0 ? next : this.pageSize;\n this.page = 1; // reset to first page when size changes\n this.invalidatePagedCache();\n this.pageChange.emit({ page: this.page, pageSize: this.pageSize });\n this.emitDataStateChange();\n }\n\n onRowDrop(event: NgbDndDropEvent<T>): void {\n if (!this.isRowReorderEnabled()) return;\n if (!event.sameList || event.fromIndex === event.toIndex) return;\n\n const pageOffset = this.paginationActive ? (this.page - 1) * this.pageSize : 0;\n const fromIndex = pageOffset + event.fromIndex;\n const toIndex = pageOffset + event.toIndex;\n\n if (fromIndex < 0 || toIndex < 0 || fromIndex >= this.data.length || toIndex >= this.data.length) return;\n\n const next = this.data.slice();\n const [moved] = next.splice(fromIndex, 1);\n next.splice(toIndex, 0, moved);\n this.data = next;\n this.invalidateDataCaches();\n this.rowReorder.emit({ row: moved, fromIndex, toIndex, data: next.slice() });\n this.cdr.markForCheck();\n }\n\n asBool(v: any): boolean {\n return typeof v === 'boolean' ? v : !!v?.enabled;\n }\n\n triggerExport(kind: 'pdf'|'excel') {\n this.export(kind);\n }\n\n isResponsiveEnabled(): boolean {\n const r = this.responsive;\n return r === true || (!!r && (r as NgbDataGridResponsiveOptions).enabled === true);\n }\n\n isRowSticky(row: T, pagedIndex: number): boolean {\n if (!this.stickyRows) return false;\n const di = this.dataIndexOf(row);\n const id = this.getRowId(di >= 0 ? di : pagedIndex, row);\n return this.stickyRowIds.has(id);\n }\n\n toggleStickyRow(pagedIndex: number): void {\n if (!this.stickyRows) return;\n const row = this.paged[pagedIndex];\n if (!row) return;\n const di = this.dataIndexOf(row);\n const id = this.getRowId(di >= 0 ? di : pagedIndex, row);\n if (this.stickyRowIds.has(id)) this.stickyRowIds.delete(id);\n else this.stickyRowIds.add(id);\n this.invalidateSortedCaches();\n }\n\n stickyIcon(row: T, pagedIndex: number): string {\n return this.isRowSticky(row, pagedIndex) ? 'pin-angle-fill' : 'pin-fill';\n }\n\n stickyTop(row: T, pagedIndex: number): number | null {\n if (!this.isRowSticky(row, pagedIndex)) return null;\n let offset = 0;\n for (let idx = 0; idx < pagedIndex; idx++) {\n const candidate = this.paged[idx];\n if (!candidate || !this.isRowSticky(candidate, idx)) continue;\n offset += this.measuredStickyRowHeight(idx);\n }\n return offset;\n }\n\n private measuredStickyRowHeight(pagedIndex: number): number {\n const rows = this.bodyScroller?.nativeElement.querySelectorAll<HTMLTableRowElement>('tbody > tr.grid-data-row');\n const measured = rows?.[pagedIndex]?.offsetHeight ?? 0;\n return measured > 0 ? measured : this.stickyRowHeight;\n }\n\n // Selection helpers\n get stickyRowsEnabled(): boolean {\n return this.tableOptions?.stickyRows ?? this.stickyRows;\n }\n\n get stickyHeaderEnabled(): boolean {\n return this.tableOptions?.stickyHeader ?? this.stickyHeader;\n }\n\n get stickyFooterEnabled(): boolean {\n return this.tableOptions?.stickyFooter ?? this.stickyFooter;\n }\n\n isSelectionEnabled(): boolean {\n return this.selectionMode !== 'none';\n }\n\n showSelectionColumn(): boolean {\n return this.isSelectionEnabled() && this.selectionBehavior !== 'row';\n }\n\n isCheckboxOnly(): boolean {\n return this.selectionBehavior === 'checkbox';\n }\n\n isSelectionDisabled(row: T, pagedIndex: number): boolean {\n if (!this.selectionDisabledFn) return false;\n const di = this.dataIndexOf(this.paged[pagedIndex]);\n return this.selectionDisabledFn(row, di >= 0 ? di : pagedIndex);\n }\n\n isRowSelected(row: T, pagedIndex: number): boolean {\n const di = this.dataIndexOf(this.paged[pagedIndex]);\n const id = this.getRowId(di >= 0 ? di : pagedIndex, row);\n return this.selectedRowIds.has(id);\n }\n\n toggleSelection(pagedIndex: number, event?: Event): void {\n if (!this.isSelectionEnabled()) return;\n const row = this.paged[pagedIndex];\n if (!row || this.isSelectionDisabled(row, pagedIndex)) return;\n\n const di = this.dataIndexOf(row);\n const id = this.getRowId(di >= 0 ? di : pagedIndex, row);\n const currentlySelected = this.selectedRowIds.has(id);\n const isMulti = this.selectionMode === 'multiple';\n const desktop = this.selectionKeyMode === 'desktop';\n const shift = desktop && !!(event && 'shiftKey' in event && (event as any).shiftKey);\n const meta = desktop && !!(event && (('metaKey' in event && (event as any).metaKey) || ('ctrlKey' in event && (event as any).ctrlKey)));\n const fromCheckbox = !!(event?.target instanceof HTMLInputElement && event.target.type === 'checkbox');\n\n if (!isMulti) {\n this.selectedRowIds.clear();\n this.selectedRowIds.add(id);\n this.selectionAnchor = pagedIndex;\n this.emitSelection(row, di, true);\n this.cdr.markForCheck();\n return;\n }\n\n if (shift && this.selectionAnchor != null) {\n const start = Math.min(this.selectionAnchor, pagedIndex);\n const end = Math.max(this.selectionAnchor, pagedIndex);\n this.selectedRowIds.clear();\n for (let i = start; i <= end; i++) {\n const r = this.paged[i];\n if (!r || this.isSelectionDisabled(r, i)) continue;\n const rid = this.getRowId(this.dataIndexOf(r), r);\n this.selectedRowIds.add(rid);\n }\n this.emitSelection(row, di, true);\n this.cdr.markForCheck();\n return;\n }\n\n if (fromCheckbox || meta || !desktop) {\n if (currentlySelected) this.selectedRowIds.delete(id);\n else this.selectedRowIds.add(id);\n } else {\n this.selectedRowIds.clear();\n this.selectedRowIds.add(id);\n }\n\n this.selectionAnchor = pagedIndex;\n this.emitSelection(row, di, !currentlySelected || (!meta && desktop));\n this.cdr.markForCheck();\n }\n\n private emitSelection(row: T, dataIndex: number, selected: boolean) {\n this.selectionChange.emit({\n selected: this.data.filter((r, idx) => this.selectedRowIds.has(this.getRowId(idx, r))),\n lastAction: { row, index: dataIndex, selected }\n });\n }\n\n toggleSelectAllCurrentPage(): void {\n if (this.selectionMode !== 'multiple' || !this.selectAllEnabled) return;\n const allSelectable = this.paged.filter((r, i) => !this.isSelectionDisabled(r, i));\n const allSelected = allSelectable.every((r, i) => this.isRowSelected(r, i));\n if (allSelected) {\n allSelectable.forEach((r, i) => {\n const rid = this.getRowId(this.dataIndexOf(r), r);\n this.selectedRowIds.delete(rid);\n });\n } else {\n allSelectable.forEach((r, i) => {\n const rid = this.getRowId(this.dataIndexOf(r), r);\n this.selectedRowIds.add(rid);\n });\n }\n this.selectionChange.emit({\n selected: this.data.filter((r, idx) => this.selectedRowIds.has(this.getRowId(idx, r))),\n lastAction: null\n });\n this.cdr.markForCheck();\n }\n\n isPageAllSelected(): boolean {\n const selectable = this.paged.filter((r, i) => !this.isSelectionDisabled(r, i));\n return selectable.length > 0 && selectable.every((r, i) => this.isRowSelected(r, i));\n }\n\n isPageIndeterminate(): boolean {\n const selectable = this.paged.filter((r, i) => !this.isSelectionDisabled(r, i));\n const selectedCount = selectable.filter((r, i) => this.isRowSelected(r, i)).length;\n return selectedCount > 0 && selectedCount < selectable.length;\n }\n\n selectAllLabel(): string {\n const labels = this.selectionA11yLabels || {};\n return this.isPageAllSelected()\n ? (labels.unselectAll || this.labelTemplate('unselectAll'))\n : (labels.selectAll || this.labelTemplate('selectAll'));\n }\n\n rowSelectionLabel(index: number): string {\n const labels = this.selectionA11yLabels || {};\n const selected = this.isRowSelected(this.paged[index], index);\n if (selected) {\n return labels.unselectRow\n ? ngbFormatDatagridLabel(labels.unselectRow, { index: index + 1 })\n : ngbFormatDatagridLabel(this.labelTemplate('unselectRow'), { index: index + 1 });\n }\n return labels.selectRow\n ? ngbFormatDatagridLabel(labels.selectRow, { index: index + 1 })\n : ngbFormatDatagridLabel(this.labelTemplate('selectRow'), { index: index + 1 });\n }\n\n onRowSelect(ev: MouseEvent, pagedIndex: number) {\n if (!this.isSelectionEnabled() || this.isCheckboxOnly()) return;\n const target = ev.target as HTMLElement;\n if (target.closest('input, button, a, select, textarea,label')) return;\n this.toggleSelection(pagedIndex, ev);\n }\n\n}\n","<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->\n<!-- eslint-disable @angular-eslint/template/click-events-have-key-events -->\n<div\n class=\"ngb-grid\"\n [attr.dir]=\"resolvedDir()\"\n [attr.data-theme]=\"theme\"\n [class.ngb-grid--rtl]=\"isRtl()\"\n [class.ngb-responsive]=\"isResponsiveEnabled()\"\n [class.ngb-grid--compact]=\"densityMode === 'compact'\"\n [class.ngb-grid--stacked]=\"isStackedLayout()\"\n [class.ngb-grid--stacked-cards]=\"isStackedCardsLayout()\"\n [class.ngb-grid--menu-open]=\"!!openFilterMenuField || !!openMenuOperatorField || !!openRowFilterField\"\n [class.ngb-grid--row-operator-open]=\"!!openRowFilterField\"\n [class.ngb-grid--zebra]=\"zebraStripesEnabled\"\n [class.ngb-grid--resizable]=\"resizable && !isStackedLayout()\"\n [class.ngb-grid--column-reorderable]=\"isColumnReorderEnabled()\"\n [class.ngb-grid--loading]=\"loading\"\n [attr.aria-busy]=\"loading ? 'true' : null\"\n>\n <div class=\"ngb-grid__layout-toolbar-host\">\n <ng-content select=\"ngb-datagrid-layout-toolbar\"></ng-content>\n </div>\n <ngb-datagrid-toolbar [grid]=\"gridHost\"></ngb-datagrid-toolbar>\n <ngb-datagrid-editing-toolbar\n [grid]=\"gridHost\"\n [selectedCount]=\"getSelectedCount()\"\n [editActive]=\"isToolbarEditActive()\"\n [saveDisabled]=\"isToolbarSaveDisabled()\"\n ></ngb-datagrid-editing-toolbar>\n\n @if (paginationActive && pagerShowsAt('top')) {\n <ngb-datagrid-footer [grid]=\"gridHost\" placement=\"top\"></ngb-datagrid-footer>\n }\n\n <div\n class=\"ngb-grid__status visually-hidden-focusable\"\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >{{ statusMessage }}</div>\n\n <div class=\"table-wrapper\" [ngClass]=\"responsiveWrapperClasses\">\n @if (loading) {\n <div class=\"ngb-grid__loading-overlay\" role=\"presentation\">\n <div class=\"spinner-border spinner-border-sm text-primary\" role=\"status\">\n <span class=\"visually-hidden\">Loading</span>\n </div>\n </div>\n }\n <div class=\"grid-header-shell\" #headerScroller>\n <table class=\"grid-table grid-header mb-0\" [ngClass]=\"tableClassList\" [style.width.px]=\"tablePixelWidth\">\n @if (tableOptions?.caption) {\n <caption\n [class.caption-top]=\"(tableOptions?.captionSide ?? 'top') === 'top'\"\n >\n {{ tableOptions?.caption }}\n </caption>\n }\n\n <colgroup\n ngbDatagridColgroup\n [grid]=\"gridHost\"\n [ngbSyncColgroup]=\"colgroupSyncId\"\n syncRole=\"header\"\n [syncMode]=\"resizable ? 'explicit' : 'auto'\"\n ></colgroup>\n\n <thead\n class=\"table-light\"\n ngbDatagridHeader\n [grid]=\"gridHost\"\n ></thead>\n </table>\n </div>\n\n <div [class.table-body-scroll]=\"shouldEnableScroll\" #bodyScroller (scroll)=\"onBodyHorizontalScroll()\">\n <table\n class=\"grid-table grid-body mb-0\"\n [ngClass]=\"tableClassList\"\n [style.width.px]=\"tablePixelWidth\"\n role=\"grid\"\n [attr.aria-rowcount]=\"ariaRowCount()\"\n [attr.aria-colcount]=\"ariaColCount()\"\n [attr.aria-readonly]=\"enableEdit || enableAdd ? 'false' : 'true'\"\n [attr.aria-label]=\"tableOptions?.caption || null\"\n >\n <colgroup\n ngbDatagridColgroup\n [grid]=\"gridHost\"\n [ngbSyncColgroup]=\"colgroupSyncId\"\n syncRole=\"body\"\n [syncMode]=\"resizable ? 'explicit' : 'auto'\"\n ></colgroup>\n\n <tbody\n [ngbDndList]=\"paged\"\n [dndDisabled]=\"!isRowReorderEnabled()\"\n (dndDropped)=\"onRowDrop($event)\"\n >\n @if (!paged.length) {\n <tr class=\"ngb-grid__empty-row\">\n <td [attr.colspan]=\"ariaColCount()\" class=\"ngb-grid__empty text-center text-muted py-4\">\n {{ emptyStateLabel() }}\n </td>\n </tr>\n }\n\n @if (addingNew) {\n <tr\n ngbDatagridAddRow\n [grid]=\"gridHost\"\n [formGroup]=\"addForm\"\n ></tr>\n }\n\n @for (row of paged; track trackRow($index, row); let i = $index) {\n <tr\n class=\"grid-data-row\"\n ngbDatagridDataRow\n [grid]=\"gridHost\"\n [row]=\"row\"\n [index]=\"i\"\n [selected]=\"isRowSelected(row, i)\"\n [ngbDndItem]=\"row\"\n [dndIndex]=\"i\"\n [dndDisabled]=\"!isRowReorderEnabled()\"\n (click)=\"onRowSelect($event, i); onRowClick($event, i)\"\n [formGroup]=\"editForm\"\n [class.sticky-row]=\"isRowSticky(row, i)\"\n [class.row-selected]=\"isRowSelected(row, i)\"\n [class.row-highlight]=\"isRowHighlighted(row, i)\"\n [class.grid-row--reorderable]=\"isRowReorderEnabled()\"\n [ngClass]=\"resolveRowClass(row, i)\"\n [ngStyle]=\"resolveRowStyle(row, i)\"\n [attr.aria-selected]=\"isRowSelected(row, i) ? 'true' : null\"\n [style.top.px]=\"stickyTop(row, i)\"\n [style.z-index]=\"isRowSticky(row, i) ? 3 : null\"\n ></tr>\n\n @if (rowDetailTpl && isExpanded(i)) {\n <tr\n ngbDatagridDetailRow\n [grid]=\"gridHost\"\n [row]=\"row\"\n [index]=\"i\"\n [attr.id]=\"'dg-row-detail-' + i\"\n ></tr>\n }\n }\n </tbody>\n </table>\n </div>\n\n <table class=\"table grid-table grid-foot mb-0\" [style.width.px]=\"tablePixelWidth\">\n <colgroup>\n @for (col of visibleColumns; track col.field) {\n <col [style.width.px]=\"col?.width\" />\n }\n </colgroup>\n <tbody>\n <tr>\n <td [attr.colspan]=\"visibleColumns.length\" width=\"100%\">\n @if (paginationActive && pagerShowsAt('bottom')) {\n <ngb-datagrid-footer [grid]=\"gridHost\" placement=\"bottom\"></ngb-datagrid-footer>\n }\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n @if (externalEditOpen) {\n <ngb-datagrid-external-editor [grid]=\"gridHost\"></ngb-datagrid-external-editor>\n }\n\n @if (openFilterMenuField && openFilterMenuColumn && openFilterMenuAnchor) {\n <ngb-datagrid-filter-menu-panel\n [grid]=\"gridHost\"\n [col]=\"openFilterMenuColumn\"\n [anchor]=\"openFilterMenuAnchor\"\n />\n }\n\n @if (openRowFilterField && openRowFilterColumn && openRowFilterOperatorAnchor) {\n <ngb-datagrid-row-filter-operator-panel\n [grid]=\"gridHost\"\n [col]=\"openRowFilterColumn\"\n [anchor]=\"openRowFilterOperatorAnchor\"\n />\n }\n</div>\n","import type { Datagrid } from '../datagrid/datagrid.component';\n\n/** Layout-toolbar tools receive the grid from the toolbar host. */\nexport interface NgbDatagridToolHost {\n bindHostGrid(grid: Datagrid<any>): void;\n}\n\nexport function resolveDatagridToolGrid(\n gridInput: Datagrid<any> | undefined,\n hostGrid: Datagrid<any> | undefined,\n toolName: string\n): Datagrid<any> {\n const resolved = gridInput ?? hostGrid;\n if (!resolved) {\n throw new Error(\n `${toolName}: place inside ngb-datagrid-layout-toolbar with [grid], or pass [grid] on the tool.`\n );\n }\n return resolved;\n}\n","import { Injectable } from '@angular/core';\n\nexport type NgbDatagridLayoutToolbarPanelId = 'filter' | 'sort' | 'columns';\n\n/** Ensures only one layout-toolbar panel is open at a time. */\n@Injectable()\nexport class NgbDatagridLayoutToolbarCoordinator {\n private readonly closers = new Map<NgbDatagridLayoutToolbarPanelId, () => void>();\n\n register(id: NgbDatagridLayoutToolbarPanelId, close: () => void): void {\n this.closers.set(id, close);\n }\n\n unregister(id: NgbDatagridLayoutToolbarPanelId): void {\n this.closers.delete(id);\n }\n\n openExclusive(id: NgbDatagridLayoutToolbarPanelId): void {\n for (const [panelId, close] of this.closers) {\n if (panelId !== id) close();\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n inject,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgbDatagridButtonDirective } from '../foundation/datagrid-button.directive';\nimport { NgbDatagridControlDirective } from '../foundation/datagrid-control.directive';\nimport type { Datagrid } from '../datagrid/datagrid.component';\nimport type { NgbDatagridToolHost } from './datagrid-tool-host';\nimport { resolveDatagridToolGrid } from './datagrid-tool-host';\nimport { NgbDatagridLayoutToolbarCoordinator } from './datagrid-layout-toolbar-coordinator';\n\n@Component({\n selector: 'ngb-datagrid-column-chooser-tool',\n standalone: true,\n imports: [CommonModule, FormsModule, NgbDatagridButtonDirective, NgbDatagridControlDirective],\n template: `\n @if (chooserColumns.length) {\n <div class=\"ngb-layout-tool\">\n <button\n type=\"button\"\n class=\"ngb-layout-tool__trigger\"\n [class.ngb-layout-tool__trigger--open]=\"open\"\n (click)=\"togglePanel($event)\"\n [attr.aria-expanded]=\"open\"\n aria-haspopup=\"dialog\"\n >\n <span class=\"bi bi-layout-three-columns\" aria-hidden=\"true\"></span>\n <span>{{ label }}</span>\n </button>\n\n @if (open) {\n <div class=\"ngb-layout-tool__panel ngb-layout-tool__panel--end ngb-layout-tool__panel--wide\" (click)=\"$event.stopPropagation()\">\n <div class=\"ngb-column-chooser__search\">\n <input\n ngbDatagridControl\n type=\"search\"\n [(ngModel)]=\"searchTerm\"\n placeholder=\"Search...\"\n aria-label=\"Search columns\"\n />\n </div>\n\n <div class=\"ngb-column-chooser__list\">\n <label class=\"ngb-column-chooser__option\">\n <input type=\"checkbox\" [checked]=\"allVisible\" [indeterminate]=\"partiallyVisible\" (change)=\"toggleAll()\" />\n <span>Select all</span>\n </label>\n\n @for (col of filteredColumns; track col.field) {\n <label class=\"ngb-column-chooser__option\">\n <input type=\"checkbox\" [checked]=\"draftVisibility[col.field]\" (change)=\"toggleColumn(col.field)\" />\n <span>{{ col.header }}</span>\n </label>\n }\n </div>\n\n <div class=\"ngb-column-chooser__summary\">{{ selectedCount }} Selected items</div>\n\n <div class=\"ngb-column-chooser__actions\">\n <button type=\"button\" ngbDatagridButton=\"primary\" (click)=\"apply()\">\n <span class=\"bi bi-check-lg\" aria-hidden=\"true\"></span>\n <span>Apply</span>\n </button>\n <button type=\"button\" ngbDatagridButton=\"secondary\" (click)=\"resetDraft()\">\n <span class=\"bi bi-arrow-counterclockwise\" aria-hidden=\"true\"></span>\n <span>Reset</span>\n </button>\n </div>\n </div>\n }\n </div>\n }\n `,\n styleUrls: ['./datagrid-layout-toolbar.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class NgbDatagridColumnChooserToolComponent implements OnChanges, OnInit, OnDestroy, NgbDatagridToolHost {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly coordinator = inject(NgbDatagridLayoutToolbarCoordinator, { optional: true });\n\n @Input() grid?: Datagrid<any>;\n @Input() label = 'Columns';\n\n private toolbarGrid?: Datagrid<any>;\n\n open = false;\n searchTerm = '';\n draftVisibility: Record<string, boolean> = {};\n\n bindHostGrid(grid: Datagrid<any>): void {\n this.toolbarGrid = grid;\n this.resetDraft(false);\n this.cdr.markForCheck();\n }\n\n private resolvedGrid(): Datagrid<any> | null {\n return this.grid ?? this.toolbarGrid ?? null;\n }\n\n get activeGrid(): Datagrid<any> {\n return resolveDatagridToolGrid(this.grid, this.toolbarGrid, 'ngb-datagrid-column-chooser-tool');\n }\n\n get chooserColumns() {\n const grid = this.resolvedGrid();\n return grid?.resolvedColumns ?? [];\n }\n\n get filteredColumns() {\n const query = this.searchTerm.trim().toLowerCase();\n if (!query) return this.chooserColumns;\n return this.chooserColumns.filter((col) =>\n col.header.toLowerCase().includes(query) || (col.field as string).toLowerCase().includes(query)\n );\n }\n\n get selectedCount(): number {\n return Object.values(this.draftVisibility).filter(Boolean).length;\n }\n\n get allVisible(): boolean {\n return this.chooserColumns.every((col) => this.draftVisibility[col.field as string]);\n }\n\n get partiallyVisible(): boolean {\n const count = this.selectedCount;\n return count > 0 && count < this.chooserColumns.length;\n }\n\n ngOnInit(): void {\n this.coordinator?.register('columns', () => this.closePanel());\n if (this.resolvedGrid()) {\n this.resetDraft(false);\n }\n }\n\n ngOnDestroy(): void {\n this.coordinator?.unregister('columns');\n }\n\n ngOnChanges(): void {\n this.resetDraft(false);\n }\n\n togglePanel(event: MouseEvent): void {\n event.stopPropagation();\n const willOpen = !this.open;\n if (willOpen) this.coordinator?.openExclusive('columns');\n this.open = willOpen;\n if (this.open) this.resetDraft(false);\n this.cdr.markForCheck();\n }\n\n private closePanel(): void {\n if (!this.open) return;\n this.open = false;\n this.cdr.markForCheck();\n }\n\n toggleColumn(field: string): void {\n this.draftVisibility[field] = !this.draftVisibility[field];\n this.cdr.markForCheck();\n }\n\n toggleAll(): void {\n const next = !this.allVisible;\n for (const col of this.chooserColumns) {\n this.draftVisibility[col.field as string] = next;\n }\n this.cdr.markForCheck();\n }\n\n apply(): void {\n this.activeGrid.applyColumnVisibility(this.draftVisibility);\n this.open = false;\n this.cdr.markForCheck();\n }\n\n resetDraft(mark = true): void {\n const next: Record<string, boolean> = {};\n for (const col of this.chooserColumns) {\n next[col.field as string] = !col.hidden;\n }\n this.draftVisibility = next;\n if (mark) this.cdr.markForCheck();\n }\n\n @HostListener('document:click', ['$event'])\n closeOnOutsideClick(event: MouseEvent): void {\n if (!this.open) return;\n if ((event.target as HTMLElement | null)?.closest('ngb-datagrid-column-chooser-tool')) return;\n this.closePanel();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport type { ColumnDef } from '../models/column-def';\nimport type { NgbMenuFilterConditionDraft } from '../models/filtering';\nimport { NgbDatagridButtonDirective } from '../foundation/datagrid-button.directive';\nimport { NgbDatagridControlDirective } from '../foundation/datagrid-control.directive';\nimport type { Datagrid } from '../datagrid/datagrid.component';\nimport type { NgbFilterOperator } from '../models/filtering';\nimport type { NgbDatagridToolHost } from './datagrid-tool-host';\nimport { resolveDatagridToolGrid } from './datagrid-tool-host';\nimport { NgbDatagridLayoutToolbarCoordinator } from './datagrid-layout-toolbar-coordinator';\n\n@Component({\n selector: 'ngb-datagrid-filter-tool',\n standalone: true,\n imports: [CommonModule, FormsModule, NgbDatagridButtonDirective, NgbDatagridControlDirective],\n template: `\n @if (filterableColumns.length) {\n <div class=\"ngb-layout-tool\">\n <button\n type=\"button\"\n class=\"ngb-layout-tool__trigger\"\n [class.ngb-layout-tool__trigger--open]=\"open\"\n (click)=\"togglePanel($event)\"\n [attr.aria-expanded]=\"open\"\n aria-haspopup=\"dialog\"\n >\n <span class=\"bi bi-funnel\" aria-hidden=\"true\"></span>\n <span>{{ label }}</span>\n </button>\n\n @if (open) {\n <div class=\"ngb-layout-tool__panel ngb-layout-tool__panel--wide\" (click)=\"$event.stopPropagation()\">\n <div class=\"ngb-filter-accordion\">\n @for (col of filterableColumns; track col.field) {\n <section class=\"ngb-filter-accordion__section\">\n <button\n type=\"button\"\n class=\"ngb-filter-accordion__header\"\n (click)=\"toggleSection(col.field)\"\n [attr.aria-expanded]=\"expandedField === col.field\"\n >\n <span>{{ col.header }}</span>\n <span class=\"bi\" [ngClass]=\"expandedField === col.field ? 'bi-chevron-up' : 'bi-chevron-down'\" aria-hidden=\"true\"></span>\n </button>\n\n @if (expandedField === col.field) {\n <div class=\"ngb-filter-accordion__body grid-filter-multi-panel\">\n @for (condition of menuConditions(col); track $index; let conditionIndex = $index) {\n @if (conditionIndex > 0) {\n <div class=\"grid-filter-join-select\">\n <select\n ngbDatagridControl\n class=\"grid-filter-join-select__control\"\n [ngModel]=\"activeGrid.ensureMenuJoinLogic(col)\"\n (ngModelChange)=\"activeGrid.setMenuJoinLogic(col, $event)\"\n aria-label=\"Combine conditions with\"\n >\n <option [ngValue]=\"'and'\">And</option>\n <option [ngValue]=\"'or'\">Or</option>\n </select>\n </div>\n }\n\n <select\n ngbDatagridControl\n class=\"grid-filter-operator-select\"\n [(ngModel)]=\"condition.operator\"\n [attr.aria-label]=\"'Filter operator for ' + col.header\"\n >\n @for (op of operatorsFor(col); track op) {\n <option [ngValue]=\"op\">{{ activeGrid.rowFilterOperatorLabel(col, op) }}</option>\n }\n </select>\n\n @switch (activeGrid.getColumnFilterType(col)) {\n @case ('date') {\n <input\n ngbDatagridControl\n class=\"grid-filter-value-input\"\n type=\"date\"\n [(ngModel)]=\"condition.value\"\n [disabled]=\"!activeGrid.operatorRequiresValue(condition.operator)\"\n [attr.aria-label]=\"'Filter value for ' + col.header\"\n />\n }\n @case ('boolean') {\n <select\n ngbDatagridControl\n class=\"grid-filter-value-select\"\n [(ngModel)]=\"condition.value\"\n [disabled]=\"!activeGrid.operatorRequiresValue(condition.operator)\"\n >\n <option [ngValue]=\"''\">Select</option>\n <option [ngValue]=\"true\">True</option>\n <option [ngValue]=\"false\">False</option>\n </select>\n }\n @case ('select') {\n <select\n ngbDatagridControl\n class=\"grid-filter-value-select\"\n [(ngModel)]=\"condition.value\"\n [disabled]=\"!activeGrid.operatorRequiresValue(condition.operator)\"\n >\n <option [ngValue]=\"''\">Select</option>\n @for (option of col.options ?? []; track option.value) {\n <option [ngValue]=\"option.value\">{{ option.label }}</option>\n }\n </select>\n }\n @default {\n <input\n ngbDatagridControl\n class=\"grid-filter-value-input\"\n [type]=\"activeGrid.getColumnFilterType(col) === 'numeric' ? 'number' : 'text'\"\n [(ngModel)]=\"condition.value\"\n [disabled]=\"!activeGrid.operatorRequiresValue(condition.operator)\"\n [attr.aria-label]=\"'Filter value for ' + col.header\"\n />\n }\n }\n }\n\n <div class=\"ngb-filter-accordion__actions grid-filter-menu-surface__actions--split\">\n <button\n type=\"button\"\n class=\"grid-filter-apply grid-filter-apply--secondary\"\n ngbDatagridButton=\"secondary\"\n [disabled]=\"!activeGrid.canApplyMenuFilter(col)\"\n (click)=\"applyColumn(col)\"\n >\n Filter\n </button>\n <button\n type=\"button\"\n class=\"grid-filter-cancel grid-filter-cancel--secondary\"\n ngbDatagridButton=\"secondary\"\n [disabled]=\"!activeGrid.canClearMenuFilter(col)\"\n (click)=\"clearColumn(col)\"\n >\n Clear\n </button>\n </div>\n </div>\n }\n </section>\n }\n </div>\n\n <div class=\"ngb-layout-tool__footer\">\n <button type=\"button\" class=\"w-100\" ngbDatagridButton=\"secondary\" (click)=\"clearAll()\">\n <span class=\"bi bi-funnel-fill\" aria-hidden=\"true\"></span>\n <span>Clear all filters</span>\n </button>\n </div>\n </div>\n }\n </div>\n }\n `,\n styleUrls: ['./datagrid-layout-toolbar.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class NgbDatagridFilterToolComponent implements NgbDatagridToolHost, OnInit, OnDestroy {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly coordinator = inject(NgbDatagridLayoutToolbarCoordinator, { optional: true });\n\n /** Optional override when the tool is not inside `ngb-datagrid-layout-toolbar`. */\n @Input() grid?: Datagrid<any>;\n @Input() label = 'Filter';\n\n private toolbarGrid?: Datagrid<any>;\n\n open = false;\n expandedField: string | null = null;\n\n ngOnInit(): void {\n this.coordinator?.register('filter', () => this.closePanel());\n }\n\n ngOnDestroy(): void {\n this.coordinator?.unregister('filter');\n }\n\n bindHostGrid(grid: Datagrid<any>): void {\n this.toolbarGrid = grid;\n }\n\n private resolvedGrid(): Datagrid<any> | null {\n return this.grid ?? this.toolbarGrid ?? null;\n }\n\n get activeGrid(): Datagrid<any> {\n return resolveDatagridToolGrid(this.grid, this.toolbarGrid, 'ngb-datagrid-filter-tool');\n }\n\n get filterableColumns(): ColumnDef<any>[] {\n const grid = this.resolvedGrid();\n if (!grid) return [];\n return grid.visibleColumns.filter((col) => col.filterable && grid.isFilteringEnabled());\n }\n\n menuConditions(col: ColumnDef<any>): NgbMenuFilterConditionDraft[] {\n return this.activeGrid.ensureMenuDraftConditions(col);\n }\n\n togglePanel(event: MouseEvent): void {\n event.stopPropagation();\n const willOpen = !this.open;\n if (willOpen) this.coordinator?.openExclusive('filter');\n this.open = willOpen;\n if (this.open && !this.expandedField && this.filterableColumns.length) {\n this.expandedField = this.filterableColumns[0].field as string;\n }\n this.cdr.markForCheck();\n }\n\n private closePanel(): void {\n if (!this.open) return;\n this.open = false;\n this.cdr.markForCheck();\n }\n\n toggleSection(field: string): void {\n this.expandedField = this.expandedField === field ? null : field;\n this.cdr.markForCheck();\n }\n\n operatorsFor(col: ColumnDef<any>): NgbFilterOperator[] {\n return this.activeGrid.getAllowedOperators(col);\n }\n\n applyColumn(col: ColumnDef<any>): void {\n this.activeGrid.applyMenuFilter(col);\n this.cdr.markForCheck();\n }\n\n clearColumn(col: ColumnDef<any>): void {\n this.activeGrid.clearMenuFilter(col);\n this.cdr.markForCheck();\n }\n\n clearAll(): void {\n this.activeGrid.clearAllFilters();\n this.cdr.markForCheck();\n }\n\n @HostListener('document:click', ['$event'])\n closeOnOutsideClick(event: MouseEvent): void {\n if (!this.open) return;\n if ((event.target as HTMLElement | null)?.closest('ngb-datagrid-filter-tool')) return;\n this.closePanel();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n inject,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { ColumnDef } from '../models/column-def';\nimport type { Datagrid } from '../datagrid/datagrid.component';\nimport type { NgbDatagridToolHost } from './datagrid-tool-host';\nimport { resolveDatagridToolGrid } from './datagrid-tool-host';\nimport { NgbDatagridLayoutToolbarCoordinator } from './datagrid-layout-toolbar-coordinator';\n\n@Component({\n selector: 'ngb-datagrid-sort-tool',\n standalone: true,\n imports: [CommonModule],\n template: `\n @if (sortableColumns.length) {\n <div class=\"ngb-layout-tool\">\n <button\n type=\"button\"\n class=\"ngb-layout-tool__trigger\"\n [class.ngb-layout-tool__trigger--open]=\"open\"\n (click)=\"togglePanel($event)\"\n [attr.aria-expanded]=\"open\"\n aria-haspopup=\"menu\"\n >\n <span class=\"bi bi-arrow-down-up\" aria-hidden=\"true\"></span>\n <span>{{ label }}</span>\n </button>\n\n @if (open) {\n <div class=\"ngb-layout-tool__panel\" (click)=\"$event.stopPropagation()\">\n @for (col of sortableColumns; track col.field) {\n <button\n type=\"button\"\n class=\"ngb-sort-list__item\"\n [class.ngb-sort-list__item--active]=\"activeGrid.sort.active === col.field\"\n (click)=\"toggleSort(col)\"\n >\n <span>{{ col.header }}</span>\n @if (activeGrid.sort.active === col.field) {\n <span>\n {{ activeGrid.sort.direction === 'asc' ? '▲' : activeGrid.sort.direction === 'desc' ? '▼' : '' }}\n </span>\n }\n </button>\n }\n\n <div class=\"ngb-layout-tool__footer\">\n <button type=\"button\" class=\"w-100 btn btn-link text-decoration-none\" (click)=\"clearSorting()\">\n <span class=\"bi bi-x-lg\" aria-hidden=\"true\"></span>\n <span>Clear sorting</span>\n </button>\n </div>\n </div>\n }\n </div>\n }\n `,\n styleUrls: ['./datagrid-layout-toolbar.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class NgbDatagridSortToolComponent implements NgbDatagridToolHost, OnInit, OnDestroy {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly coordinator = inject(NgbDatagridLayoutToolbarCoordinator, { optional: true });\n\n @Input() grid?: Datagrid<any>;\n @Input() label = 'Sort';\n\n private toolbarGrid?: Datagrid<any>;\n\n open = false;\n\n ngOnInit(): void {\n this.coordinator?.register('sort', () => this.closePanel());\n }\n\n ngOnDestroy(): void {\n this.coordinator?.unregister('sort');\n }\n\n bindHostGrid(grid: Datagrid<any>): void {\n this.toolbarGrid = grid;\n }\n\n private resolvedGrid(): Datagrid<any> | null {\n return this.grid ?? this.toolbarGrid ?? null;\n }\n\n get activeGrid(): Datagrid<any> {\n return resolveDatagridToolGrid(this.grid, this.toolbarGrid, 'ngb-datagrid-sort-tool');\n }\n\n get sortableColumns(): ColumnDef<any>[] {\n const grid = this.resolvedGrid();\n if (!grid) return [];\n return grid.visibleColumns.filter((col) => grid.enableSorting && col.sortable !== false);\n }\n\n togglePanel(event: MouseEvent): void {\n event.stopPropagation();\n const willOpen = !this.open;\n if (willOpen) this.coordinator?.openExclusive('sort');\n this.open = willOpen;\n this.cdr.markForCheck();\n }\n\n private closePanel(): void {\n if (!this.open) return;\n this.open = false;\n this.cdr.markForCheck();\n }\n\n toggleSort(col: ColumnDef<any>): void {\n this.activeGrid.toggleSort(col.field as string);\n this.cdr.markForCheck();\n }\n\n clearSorting(): void {\n this.activeGrid.clearSorting();\n this.cdr.markForCheck();\n }\n\n @HostListener('document:click', ['$event'])\n closeOnOutsideClick(event: MouseEvent): void {\n if (!this.open) return;\n if ((event.target as HTMLElement | null)?.closest('ngb-datagrid-sort-tool')) return;\n this.closePanel();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterContentInit,\n Component,\n ContentChildren,\n Input,\n OnChanges,\n QueryList,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { Datagrid } from '../datagrid/datagrid.component';\nimport { NgbDatagridColumnChooserToolComponent } from './datagrid-column-chooser-tool.component';\nimport { NgbDatagridFilterToolComponent } from './datagrid-filter-tool.component';\nimport { NgbDatagridSortToolComponent } from './datagrid-sort-tool.component';\nimport type { NgbDatagridToolHost } from './datagrid-tool-host';\nimport { NgbDatagridLayoutToolbarCoordinator } from './datagrid-layout-toolbar-coordinator';\n\n@Component({\n selector: 'ngb-datagrid-layout-toolbar',\n standalone: true,\n imports: [CommonModule],\n providers: [NgbDatagridLayoutToolbarCoordinator],\n template: `\n <div class=\"ngb-layout-toolbar\" role=\"toolbar\" [attr.aria-label]=\"ariaLabel\">\n <ng-content></ng-content>\n </div>\n `,\n styleUrls: ['./datagrid-layout-toolbar.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class NgbDatagridLayoutToolbarComponent implements AfterContentInit, OnChanges {\n /**\n * Grid instance for toolbar tools. Child tools inherit this via `bindHostGrid`\n * and do not need their own `[grid]` binding.\n */\n @Input({ required: true }) grid!: Datagrid<any>;\n @Input() ariaLabel = 'Grid layout toolbar';\n\n @ContentChildren(NgbDatagridFilterToolComponent) private filterTools?: QueryList<NgbDatagridFilterToolComponent>;\n @ContentChildren(NgbDatagridSortToolComponent) private sortTools?: QueryList<NgbDatagridSortToolComponent>;\n @ContentChildren(NgbDatagridColumnChooserToolComponent) private columnTools?: QueryList<NgbDatagridColumnChooserToolComponent>;\n\n ngAfterContentInit(): void {\n this.syncToolHosts();\n this.filterTools?.changes.subscribe(() => this.syncToolHosts());\n this.sortTools?.changes.subscribe(() => this.syncToolHosts());\n this.columnTools?.changes.subscribe(() => this.syncToolHosts());\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['grid']) this.syncToolHosts();\n }\n\n private syncToolHosts(): void {\n if (!this.grid) return;\n const tools: NgbDatagridToolHost[] = [\n ...(this.filterTools ?? []),\n ...(this.sortTools ?? []),\n ...(this.columnTools ?? []),\n ];\n tools.forEach((tool) => tool.bindHostGrid(this.grid));\n }\n}\n\n@Component({\n selector: 'ngb-datagrid-layout-toolbar-spacer',\n standalone: true,\n template: `<div class=\"ngb-layout-toolbar__spacer\" aria-hidden=\"true\"></div>`,\n styleUrls: ['./datagrid-layout-toolbar.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class NgbDatagridLayoutToolbarSpacerComponent {}\n","import type { ChartConfiguration, ChartType, TooltipItem } from 'chart.js';\nimport {\n NgbColumnSelectionChartOptions,\n NgbDataAggregate,\n NgbDataChartConfig,\n NgbDataChartSeries,\n NgbDataChartType,\n NgbDataMetricDef,\n NgbFullGridChartOptions,\n NgbRowSelectionChartOptions,\n NgbSparklinePoint,\n} from './data-chart.types';\n\nconst DEFAULT_PALETTE = ['#4F7DF3', '#F1645D', '#60C56E', '#F3B13E', '#8B72E8', '#5DC4B6', '#F48F4E', '#D664A0'];\n\nconst clampNumber = (value: unknown): number => {\n const parsed = typeof value === 'number' ? value : Number(value);\n return Number.isFinite(parsed) ? parsed : 0;\n};\n\nconst defaultFormatter = new Intl.NumberFormat('en-US', { maximumFractionDigits: 2 });\n\nexport const ngbChartPalette = (index: number): string => DEFAULT_PALETTE[index % DEFAULT_PALETTE.length];\n\nconst sum = (values: number[]): number => values.reduce((acc, value) => acc + value, 0);\n\nexport const ngbAggregateValues = (values: number[], aggregate: NgbDataAggregate = 'sum'): number => {\n if (!values.length) return 0;\n switch (aggregate) {\n case 'avg':\n return sum(values) / values.length;\n case 'min':\n return Math.min(...values);\n case 'max':\n return Math.max(...values);\n case 'count':\n return values.length;\n case 'sum':\n default:\n return sum(values);\n }\n};\n\nexport const ngbBuildRowSelectionChartData = <T>(\n rows: T[],\n options: NgbRowSelectionChartOptions<T>,\n): NgbDataChartConfig => ({\n type: options.chartType ?? 'bar',\n title: options.title,\n labels: options.metrics.map((metric) => metric.label),\n valueFormatter: options.valueFormatter,\n series: rows.map((row, index) => ({\n key: `row-${index}`,\n label: options.seriesLabel?.(row, index) ?? `Row ${index + 1}`,\n color: ngbChartPalette(index),\n data: options.metrics.map((metric) => clampNumber(metric.accessor(row))),\n })),\n});\n\nexport const ngbBuildColumnSelectionChartData = <T>(\n rows: T[],\n options: NgbColumnSelectionChartOptions<T>,\n): NgbDataChartConfig => ({\n type: options.chartType ?? 'bar',\n title: options.title,\n labels: rows.map((row) => options.dimension.accessor(row)),\n valueFormatter: options.valueFormatter,\n series: options.metrics.map((metric, index) => ({\n key: metric.key,\n label: metric.label,\n color: metric.color ?? ngbChartPalette(index),\n data: rows.map((row) => clampNumber(metric.accessor(row))),\n })),\n});\n\nexport const ngbBuildFullGridChartData = <T>(\n rows: T[],\n options: NgbFullGridChartOptions<T>,\n): NgbDataChartConfig => {\n const grouped = new Map<string, number[]>();\n rows.forEach((row) => {\n const key = options.dimension.accessor(row);\n const bucket = grouped.get(key) ?? [];\n bucket.push(clampNumber(options.metric.accessor(row)));\n grouped.set(key, bucket);\n });\n\n const entries = Array.from(grouped.entries()).map(([label, values]) => ({\n label,\n value: ngbAggregateValues(values, options.aggregate ?? 'sum'),\n }));\n\n if (options.sort) {\n entries.sort((left, right) =>\n options.sort === 'asc' ? left.value - right.value : right.value - left.value,\n );\n }\n\n const limited = options.limit ? entries.slice(0, options.limit) : entries;\n\n return {\n type: options.chartType ?? 'bar',\n title: options.title,\n labels: limited.map((entry) => entry.label),\n valueFormatter: options.valueFormatter,\n series: [\n {\n key: options.metric.key,\n label: options.metric.label,\n color: options.metric.color ?? ngbChartPalette(0),\n data: limited.map((entry) => entry.value),\n },\n ],\n };\n};\n\nexport const ngbBuildSparklinePoints = (values: number[], width = 112, height = 28, padding = 2): NgbSparklinePoint[] => {\n if (!values.length) return [];\n if (values.length === 1) {\n return [{ x: width / 2, y: height / 2 }];\n }\n\n const min = Math.min(...values);\n const max = Math.max(...values);\n const xStep = (width - padding * 2) / (values.length - 1);\n const yRange = max - min || 1;\n\n return values.map((value, index) => ({\n x: padding + index * xStep,\n y: height - padding - ((value - min) / yRange) * (height - padding * 2),\n }));\n};\n\nconst tooltipFormatter = (value: number, formatter?: (value: number) => string): string =>\n formatter ? formatter(value) : defaultFormatter.format(value);\n\nconst chartLayoutOptions = (_height: number) => ({\n animation: false as const,\n responsive: true,\n maintainAspectRatio: false,\n resizeDelay: 50,\n layout: { padding: { top: 4, right: 8, bottom: 4, left: 4 } },\n});\n\nexport const ngbBuildChartJsConfig = (\n config: NgbDataChartConfig,\n height = config.height ?? 320,\n): ChartConfiguration => {\n const type = config.type === 'area' ? 'line' : (config.type as ChartType);\n const legendPosition = config.legendPosition ?? 'top';\n const showLegend = config.showLegend ?? true;\n const layout = chartLayoutOptions(height);\n\n if (config.type === 'pie' || config.type === 'doughnut') {\n if (config.series.length === 1 && config.labels.length > 1) {\n const series = config.series[0];\n const colors = config.labels.map((_, index) => ngbChartPalette(index));\n return {\n type,\n data: {\n labels: config.labels,\n datasets: [{\n label: series.label,\n data: series.data.map((value) => clampNumber(value)),\n backgroundColor: colors,\n borderColor: colors,\n borderWidth: 1,\n }],\n },\n options: {\n ...layout,\n plugins: {\n legend: { display: showLegend, position: legendPosition },\n title: { display: !!config.title, text: config.title },\n tooltip: {\n callbacks: {\n label: (ctx: TooltipItem<any>) => {\n const label = ctx.label ? `${ctx.label}: ` : '';\n return `${label}${tooltipFormatter(clampNumber(ctx.parsed), config.valueFormatter)}`;\n },\n },\n },\n },\n },\n };\n }\n\n const series = config.series.map((item, index) => ({\n label: item.label,\n value: sum(item.data),\n color: item.color ?? ngbChartPalette(index),\n }));\n return {\n type,\n data: {\n labels: series.map((item) => item.label),\n datasets: [{\n label: config.title ?? '',\n data: series.map((item) => item.value),\n backgroundColor: series.map((item) => item.color),\n borderColor: series.map((item) => item.color),\n borderWidth: 1,\n }],\n },\n options: {\n ...layout,\n plugins: {\n legend: { display: showLegend, position: legendPosition },\n title: { display: !!config.title, text: config.title },\n tooltip: {\n callbacks: {\n label: (ctx: TooltipItem<any>) => {\n const label = ctx.label ? `${ctx.label}: ` : '';\n return `${label}${tooltipFormatter(clampNumber(ctx.parsed), config.valueFormatter)}`;\n },\n },\n },\n },\n },\n };\n }\n\n const series = config.series.map((item, index) => {\n const color = item.color ?? ngbChartPalette(index);\n return {\n label: item.label,\n data: item.data.map((value) => clampNumber(value)),\n borderColor: color,\n backgroundColor: config.type === 'area' ? `${color}66` : `${color}cc`,\n fill: config.type === 'area',\n tension: config.type === 'line' || config.type === 'area' ? 0.3 : 0,\n pointRadius: config.type === 'bar' ? 0 : 3,\n borderWidth: 2,\n };\n });\n\n return {\n type,\n data: {\n labels: config.labels,\n datasets: series,\n },\n options: {\n ...layout,\n interaction: { mode: 'index', intersect: false },\n scales: {\n x: {\n stacked: !!config.stacked,\n grid: { color: '#eef2f7' },\n ticks: { color: '#5b6578' },\n },\n y: {\n stacked: !!config.stacked,\n beginAtZero: true,\n grid: { color: '#eef2f7' },\n ticks: {\n color: '#5b6578',\n callback: (value) => tooltipFormatter(clampNumber(value), config.valueFormatter),\n },\n },\n },\n plugins: {\n legend: { display: showLegend, position: legendPosition },\n title: { display: !!config.title, text: config.title },\n tooltip: {\n callbacks: {\n label: (ctx: TooltipItem<any>) => {\n const label = ctx.dataset.label ? `${ctx.dataset.label}: ` : '';\n return `${label}${tooltipFormatter(clampNumber(ctx.parsed?.y ?? ctx.parsed), config.valueFormatter)}`;\n },\n },\n },\n },\n },\n };\n};\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, Input, OnChanges, OnDestroy, SimpleChanges, ViewChild } from '@angular/core';\nimport { NgbDataChartConfig } from './data-chart.types';\nimport { ngbBuildChartJsConfig } from './data-chart.helpers';\n\ntype ChartInstance = { destroy(): void };\ntype ChartConstructor = new (context: CanvasRenderingContext2D, config: unknown) => ChartInstance;\n\n@Component({\n selector: 'ngb-data-chart',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"ngb-data-chart\" [style.height.px]=\"chartHeight\">\n @if (hasData()) {\n <canvas #canvas [attr.aria-label]=\"ariaLabel\" role=\"img\"></canvas>\n } @else {\n <div class=\"ngb-data-chart__empty\">{{ config?.emptyState || emptyState }}</div>\n }\n </div>\n `,\n styles: [`\n :host { display: block; }\n .ngb-data-chart {\n position: relative;\n width: 100%;\n height: 320px;\n overflow: hidden;\n }\n .ngb-data-chart canvas {\n display: block;\n width: 100% !important;\n height: 100% !important;\n }\n .ngb-data-chart__empty {\n min-height: inherit;\n display: grid;\n place-items: center;\n color: #6b7280;\n font-size: .95rem;\n border: 1px dashed #d7deea;\n border-radius: .75rem;\n background: #f8fafc;\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgbDataChartComponent implements AfterViewInit, OnChanges, OnDestroy {\n @Input() config: NgbDataChartConfig | null = null;\n @Input() ariaLabel = 'Data chart';\n @Input() emptyState = 'No chart data available.';\n\n @ViewChild('canvas') private canvas?: ElementRef<HTMLCanvasElement>;\n\n private chart?: ChartInstance;\n private chartConstructor?: ChartConstructor;\n private viewReady = false;\n private configSignature = '';\n private rendering = false;\n\n get chartHeight(): number {\n return this.config?.height ?? 320;\n }\n\n ngAfterViewInit(): void {\n this.viewReady = true;\n this.renderChart();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.viewReady) return;\n if (changes['config']) {\n this.renderChart();\n }\n }\n\n ngOnDestroy(): void {\n this.destroyChart();\n }\n\n hasData(): boolean {\n return !!this.config?.series?.some((series) => series.data.some((value) => Number.isFinite(value)));\n }\n\n private async renderChart(): Promise<void> {\n if (this.rendering) return;\n if (!this.canvas || typeof window === 'undefined') {\n this.destroyChart();\n return;\n }\n\n if (!this.hasData() || !this.config) {\n this.destroyChart();\n this.configSignature = '';\n return;\n }\n\n const signature = this.buildConfigSignature(this.config);\n const context = this.canvas.nativeElement.getContext('2d');\n if (!context) return;\n\n if (this.chart && signature === this.configSignature) {\n return;\n }\n\n this.rendering = true;\n try {\n const Chart = await this.loadChartConstructor();\n if (!Chart) {\n this.destroyChart();\n return;\n }\n this.destroyChart();\n this.chart = new Chart(context, ngbBuildChartJsConfig(this.config, this.chartHeight));\n this.configSignature = signature;\n } finally {\n this.rendering = false;\n }\n }\n\n private async loadChartConstructor(): Promise<ChartConstructor | null> {\n if (this.chartConstructor) return this.chartConstructor;\n try {\n const chartModule = await import('chart.js');\n chartModule.Chart.register(...chartModule.registerables);\n this.chartConstructor = chartModule.Chart as ChartConstructor;\n return this.chartConstructor;\n } catch {\n return null;\n }\n }\n\n private buildConfigSignature(config: NgbDataChartConfig): string {\n return JSON.stringify({\n type: config.type,\n title: config.title,\n labels: config.labels,\n series: config.series,\n stacked: config.stacked,\n showLegend: config.showLegend,\n legendPosition: config.legendPosition,\n });\n }\n\n private destroyChart(): void {\n this.chart?.destroy();\n this.chart = undefined;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { NgbSparklinePoint } from './data-chart.types';\nimport { ngbBuildSparklinePoints } from './data-chart.helpers';\n\n@Component({\n selector: 'ngb-data-sparkline',\n standalone: true,\n imports: [CommonModule],\n template: `\n <svg\n class=\"ngb-data-sparkline\"\n [attr.viewBox]=\"'0 0 ' + width + ' ' + height\"\n [attr.width]=\"width\"\n [attr.height]=\"height\"\n [attr.aria-label]=\"ariaLabel\"\n role=\"img\"\n preserveAspectRatio=\"none\"\n >\n @if (points.length > 1) {\n <path [attr.d]=\"path\" fill=\"none\" [attr.stroke]=\"strokeColor\" [attr.stroke-width]=\"strokeWidth\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n @if (showEndDot) {\n <circle [attr.cx]=\"points[points.length - 1].x\" [attr.cy]=\"points[points.length - 1].y\" [attr.r]=\"endDotRadius\" [attr.fill]=\"strokeColor\"></circle>\n }\n } @else if (points.length === 1) {\n <circle [attr.cx]=\"points[0].x\" [attr.cy]=\"points[0].y\" [attr.r]=\"endDotRadius\" [attr.fill]=\"strokeColor\"></circle>\n }\n </svg>\n `,\n styles: [`\n :host { display: inline-flex; align-items: center; }\n .ngb-data-sparkline { display: block; overflow: visible; }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgbDataSparklineComponent implements OnChanges {\n @Input() values: number[] = [];\n /** Cached series used by getters so template bindings stay stable between checks. */\n series: number[] = [];\n @Input() width = 112;\n @Input() height = 28;\n @Input() strokeWidth = 2;\n @Input() positiveColor = '#58c46a';\n @Input() negativeColor = '#ef5350';\n @Input() neutralColor = '#9aa5b5';\n @Input() color: string | null = null;\n @Input() showEndDot = true;\n @Input() endDotRadius = 2.5;\n @Input() ariaLabel = 'Sparkline chart';\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['values']) {\n this.series = [...(this.values ?? [])];\n }\n }\n\n get points(): NgbSparklinePoint[] {\n return ngbBuildSparklinePoints(this.series, this.width, this.height);\n }\n\n get path(): string {\n if (this.points.length < 2) return '';\n return this.points.map((point, index) => `${index === 0 ? 'M' : 'L'} ${point.x} ${point.y}`).join(' ');\n }\n\n get strokeColor(): string {\n if (this.color) return this.color;\n if (this.series.length < 2) return this.neutralColor;\n const delta = this.series[this.series.length - 1] - this.series[0];\n if (delta > 0) return this.positiveColor;\n if (delta < 0) return this.negativeColor;\n return this.neutralColor;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewChecked,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\n inject,\n} from '@angular/core';\nimport { ColumnDef } from '../models/column-def';\nimport { Datagrid } from '../datagrid/datagrid.component';\nimport { NgbCellTemplate } from '../directives/datagrid-templates.directive';\nimport { NgbDataChartComponent } from './data-chart.component';\nimport { NgbDataSparklineComponent } from './data-sparkline.component';\nimport {\n ngbBuildColumnSelectionChartData,\n ngbBuildFullGridChartData,\n ngbBuildRowSelectionChartData,\n} from './data-chart.helpers';\nimport { NgbDataChartConfig, NgbDataMetricDef } from './data-chart.types';\nimport { NgbGridChartConfig } from './grid-chart.types';\n\nexport interface NgbGridChartSelectionChange<T> {\n selected: T[];\n selectedRowIds: Array<string | number>;\n}\n\n@Component({\n selector: 'ngb-grid-chart',\n standalone: true,\n imports: [CommonModule, Datagrid, NgbCellTemplate, NgbDataChartComponent, NgbDataSparklineComponent],\n template: `\n <div class=\"ngb-grid-chart\" [class.ngb-grid-chart--full]=\"config?.mode === 'full-grid'\">\n @if (config?.mode === 'sparklines') {\n <ngb-datagrid\n [columns]=\"sparklineColumns\"\n [data]=\"config?.rows ?? []\"\n [theme]=\"'bootstrap'\"\n [enableSorting]=\"false\"\n [enableFiltering]=\"false\"\n [enableGlobalFilter]=\"false\"\n [enablePagination]=\"false\"\n [tableOptions]=\"tableOptions\"\n >\n @if (dimensionTemplate) {\n <ng-template [ngbCell]=\"config!.dimension.key\" let-row=\"row\">\n <div class=\"ngb-grid-chart__dimension\">\n <strong>{{ config!.dimension.accessor(row) }}</strong>\n @if (config?.subDimension) {\n <span class=\"ngb-grid-chart__subdimension\">{{ config!.subDimension!.accessor(row) }}</span>\n }\n </div>\n </ng-template>\n }\n @if (sparklineField) {\n <ng-template [ngbCell]=\"sparklineField\" let-row=\"row\">\n <ngb-data-sparkline\n [values]=\"sparklineValues(row)\"\n [width]=\"config?.sparkline?.width ?? 112\"\n [height]=\"config?.sparkline?.height ?? 30\"\n [color]=\"sparklineColor(row)\"\n ariaLabel=\"Trend sparkline\"\n ></ngb-data-sparkline>\n </ng-template>\n }\n <ng-template ngbCell=\"growthPct\" let-value>\n <span class=\"ngb-grid-chart__growth\" [class.ngb-grid-chart__growth--up]=\"value >= 0\" [class.ngb-grid-chart__growth--down]=\"value < 0\">\n {{ value > 0 ? '+' : '' }}{{ value | number:'1.1-1' }}%\n </span>\n </ng-template>\n </ngb-datagrid>\n } @else if (config?.mode === 'full-grid') {\n <div class=\"ngb-grid-chart__full-layout\">\n <div class=\"ngb-grid-chart__chart-pane\">\n <ngb-data-chart [config]=\"chartConfig\" [ariaLabel]=\"chartAriaLabel\"></ngb-data-chart>\n </div>\n <div class=\"ngb-grid-chart__summary-pane\">\n <ng-content select=\"[gridChartSummary]\"></ng-content>\n </div>\n </div>\n } @else {\n <div class=\"ngb-grid-chart__split-layout\">\n <div class=\"ngb-grid-chart__grid-pane\">\n <ngb-datagrid\n [columns]=\"gridColumns\"\n [data]=\"config?.rows ?? []\"\n [theme]=\"'bootstrap'\"\n [enableSorting]=\"false\"\n [enableFiltering]=\"false\"\n [enableGlobalFilter]=\"false\"\n [enablePagination]=\"false\"\n [selectionMode]=\"config?.mode === 'row-selection' ? 'multiple' : 'none'\"\n [selectionBehavior]=\"config?.mode === 'row-selection' ? 'checkbox' : 'row'\"\n [trackBy]=\"rowTrackBy\"\n [tableOptions]=\"tableOptions\"\n (selectionChange)=\"onGridSelectionChange($event)\"\n >\n @if (dimensionTemplate) {\n <ng-template [ngbCell]=\"config!.dimension.key\" let-row=\"row\">\n <div class=\"ngb-grid-chart__dimension\">\n @if (config?.mode === 'row-selection' && isRowSelected(row)) {\n <span class=\"ngb-grid-chart__series-dot\" [style.background]=\"seriesColor(row)\"></span>\n }\n <div>\n <strong>{{ config!.dimension.accessor(row) }}</strong>\n @if (config?.subDimension) {\n <div class=\"ngb-grid-chart__subdimension\">{{ config!.subDimension!.accessor(row) }}</div>\n }\n </div>\n </div>\n </ng-template>\n }\n </ngb-datagrid>\n </div>\n <div class=\"ngb-grid-chart__chart-pane\">\n <ngb-data-chart [config]=\"chartConfig\" [ariaLabel]=\"chartAriaLabel\"></ngb-data-chart>\n <ng-content select=\"[gridChartFooter]\"></ng-content>\n </div>\n </div>\n }\n </div>\n `,\n styles: [`\n :host { display: block; }\n .ngb-grid-chart__split-layout,\n .ngb-grid-chart__full-layout {\n display: grid;\n gap: 1rem;\n align-items: stretch;\n }\n .ngb-grid-chart__split-layout {\n grid-template-columns: minmax(0, 1.15fr) minmax(280px, 0.85fr);\n }\n .ngb-grid-chart--full .ngb-grid-chart__full-layout {\n grid-template-columns: minmax(0, 1.2fr) minmax(260px, 0.8fr);\n }\n .ngb-grid-chart__grid-pane,\n .ngb-grid-chart__chart-pane,\n .ngb-grid-chart__summary-pane {\n min-width: 0;\n }\n .ngb-grid-chart__chart-pane {\n display: flex;\n flex-direction: column;\n gap: .5rem;\n }\n .ngb-grid-chart__dimension {\n display: inline-flex;\n align-items: flex-start;\n gap: .55rem;\n min-width: 0;\n }\n .ngb-grid-chart__subdimension {\n display: block;\n font-size: .82rem;\n color: #6b7280;\n font-weight: 500;\n }\n .ngb-grid-chart__series-dot {\n width: .55rem;\n height: .55rem;\n border-radius: 999px;\n margin-top: .35rem;\n flex: 0 0 auto;\n }\n .ngb-grid-chart__growth {\n font-weight: 700;\n }\n .ngb-grid-chart__growth--up { color: #16a34a; }\n .ngb-grid-chart__growth--down { color: #ef4444; }\n @media (max-width: 960px) {\n .ngb-grid-chart__split-layout,\n .ngb-grid-chart--full .ngb-grid-chart__full-layout {\n grid-template-columns: 1fr;\n }\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgbGridChartComponent<T = any> implements OnChanges, AfterViewInit, AfterViewChecked {\n @Input({ required: true }) config!: NgbGridChartConfig<T>;\n @Input() ariaLabel = 'Grid chart';\n\n @Output() selectionChange = new EventEmitter<NgbGridChartSelectionChange<T>>();\n\n @ViewChild(Datagrid) private grid?: Datagrid<T>;\n\n gridColumns: ColumnDef<T>[] = [];\n chartConfig: NgbDataChartConfig | null = null;\n dimensionTemplate = true;\n sparklineField: string | null = null;\n sparklineColumns: ColumnDef<T>[] = [];\n\n readonly tableOptions = { responsive: true, hoverRows: true, zebraStripes: true };\n readonly rowTrackBy = (index: number, row: T) => this.resolveRowId(row, index);\n\n private readonly cdr = inject(ChangeDetectorRef);\n private selectedIds = new Set<string | number>();\n private activeMetricKeys = new Set<string>();\n private lastMode: NgbGridChartConfig<T>['mode'] | null = null;\n private lastMetricKeys = '';\n private lastChartType = '';\n private lastRowIds = '';\n private lastSparklineKey = '';\n private lastFullGridKey = '';\n private selectionSeedPending = false;\n private sparklineSeriesByRowId = new Map<string | number, number[]>();\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!changes['config'] || !this.config) return;\n this.syncSelectionFromConfig();\n this.applyConfigChanges();\n }\n\n ngAfterViewInit(): void {\n if (this.config?.mode === 'row-selection') {\n this.scheduleSeedSelection();\n }\n }\n\n ngAfterViewChecked(): void {\n if (this.selectionSeedPending) {\n this.seedGridSelection();\n }\n }\n\n get chartAriaLabel(): string {\n return this.config?.chartTitle ?? this.ariaLabel;\n }\n\n sparklineValues(row: T): number[] {\n const id = this.resolveRowId(row, this.config.rows.indexOf(row));\n const cached = this.sparklineSeriesByRowId.get(id);\n if (cached) return cached;\n return this.config?.sparkline?.values(row) ?? [];\n }\n\n sparklineColor(row: T): string | null {\n if (!this.config?.sparkline?.trendColor) return null;\n const values = this.sparklineValues(row);\n if (values.length < 2) return null;\n const delta = values[values.length - 1] - values[0];\n if (delta > 0) return '#58c46a';\n if (delta < 0) return '#ef5350';\n return '#9aa5b5';\n }\n\n isRowSelected(row: T): boolean {\n const id = this.resolveRowId(row, this.config.rows.indexOf(row));\n return this.selectedIds.has(id);\n }\n\n seriesColor(row: T): string {\n const selected = this.selectedRows();\n const index = selected.indexOf(row);\n const palette = ['#4F7DF3', '#F1645D', '#60C56E', '#F3B13E', '#8B72E8', '#5DC4B6', '#F48F4E', '#D664A0'];\n return palette[Math.max(0, index) % palette.length];\n }\n\n onGridSelectionChange(event: { selected: T[] }): void {\n this.selectedIds = new Set(event.selected.map((row) => this.resolveRowId(row, this.config.rows.indexOf(row))));\n this.rebuildChartOnly();\n this.selectionChange.emit({\n selected: event.selected,\n selectedRowIds: Array.from(this.selectedIds),\n });\n this.cdr.markForCheck();\n }\n\n private applyConfigChanges(): void {\n const mode = this.config.mode;\n const metricKeys = [...this.activeMetricKeys].sort().join('|');\n const rowIds = [...this.selectedIds].sort().join('|');\n const chartType = this.config.chartType ?? 'bar';\n const sparklineValuesKey = mode === 'sparklines' && this.config.sparkline?.values\n ? this.config.rows\n .map((row) => this.config.sparkline!.values(row).join(','))\n .join(';')\n : '';\n const sparklineKey = `${this.config.sparkline?.field ?? ''}:${this.config.sparkline?.trendColor ? 1 : 0}:${sparklineValuesKey}`;\n const fullGridDimension = this.config.fullGrid?.dimension ?? this.config.dimension;\n const fullGridMetricKey = this.config.fullGrid?.metric?.key ?? '';\n const fullGridKey = mode === 'full-grid'\n ? `${fullGridMetricKey}|${fullGridDimension.key}|${chartType}`\n : '';\n\n const modeChanged = mode !== this.lastMode;\n const metricsChanged = metricKeys !== this.lastMetricKeys;\n const rowIdsChanged = rowIds !== this.lastRowIds;\n const chartTypeChanged = chartType !== this.lastChartType;\n const sparklineChanged = sparklineKey !== this.lastSparklineKey;\n const fullGridChanged = fullGridKey !== this.lastFullGridKey;\n\n this.lastMode = mode;\n this.lastMetricKeys = metricKeys;\n this.lastRowIds = rowIds;\n this.lastChartType = chartType;\n this.lastSparklineKey = sparklineKey;\n this.lastFullGridKey = fullGridKey;\n\n if (mode === 'sparklines') {\n if (modeChanged || sparklineChanged || metricsChanged) {\n this.sparklineField = this.config.sparkline?.field ?? null;\n this.sparklineColumns = this.buildSparklineColumns();\n this.rebuildSparklineCache();\n }\n this.chartConfig = null;\n this.cdr.markForCheck();\n return;\n }\n\n if (mode === 'full-grid') {\n if (modeChanged || fullGridChanged || chartTypeChanged) {\n this.rebuildChartOnly();\n }\n this.cdr.markForCheck();\n return;\n }\n\n if (modeChanged || metricsChanged) {\n this.gridColumns = mode === 'column-selection'\n ? this.buildColumnSelectionColumns()\n : this.buildRowSelectionColumns();\n }\n\n if (modeChanged || metricsChanged || rowIdsChanged || chartTypeChanged) {\n this.rebuildChartOnly();\n }\n\n if (mode === 'row-selection' && (modeChanged || rowIdsChanged)) {\n this.scheduleSeedSelection();\n }\n\n this.cdr.markForCheck();\n }\n\n private rebuildSparklineCache(): void {\n this.sparklineSeriesByRowId.clear();\n if (!this.config?.sparkline?.values) return;\n this.config.rows.forEach((row, index) => {\n const id = this.resolveRowId(row, index);\n this.sparklineSeriesByRowId.set(id, this.config.sparkline!.values(row));\n });\n }\n\n private syncSelectionFromConfig(): void {\n const keys = this.config.selectedMetricKeys ?? this.config.metrics.map((metric) => metric.key);\n this.activeMetricKeys = new Set(keys);\n const rowIds = this.config.selectedRowIds ?? [];\n this.selectedIds = new Set(rowIds);\n }\n\n private rebuildChartOnly(): void {\n if (!this.config || this.config.mode === 'sparklines') return;\n\n if (this.config.mode === 'row-selection') {\n this.chartConfig = ngbBuildRowSelectionChartData(this.selectedRows(), {\n metrics: this.rowMetrics(),\n seriesLabel: (row) => this.config.dimension.accessor(row),\n chartType: this.config.chartType,\n title: this.config.chartTitle,\n valueFormatter: this.config.valueFormatter,\n });\n return;\n }\n\n if (this.config.mode === 'column-selection') {\n this.chartConfig = ngbBuildColumnSelectionChartData(this.config.rows, {\n dimension: this.config.dimension,\n metrics: this.activeMetrics(),\n chartType: this.config.chartType,\n title: this.config.chartTitle,\n valueFormatter: this.config.valueFormatter,\n });\n return;\n }\n\n if (this.config.mode === 'full-grid' && this.config.fullGrid) {\n this.chartConfig = ngbBuildFullGridChartData(this.config.rows, {\n dimension: this.config.fullGrid.dimension ?? this.config.dimension,\n metric: this.config.fullGrid.metric ?? this.config.metrics[0],\n aggregate: this.config.fullGrid.aggregate,\n chartType: this.config.chartType ?? this.config.fullGrid.chartType,\n title: this.config.chartTitle ?? this.config.fullGrid.title,\n sort: this.config.fullGrid.sort,\n limit: this.config.fullGrid.limit,\n valueFormatter: this.config.valueFormatter ?? this.config.fullGrid.valueFormatter,\n });\n }\n }\n\n private selectedRows(): T[] {\n return this.config.rows.filter((row, index) => this.selectedIds.has(this.resolveRowId(row, index)));\n }\n\n private activeMetrics(): NgbDataMetricDef<T>[] {\n return this.config.metrics.filter((metric) => this.activeMetricKeys.has(metric.key));\n }\n\n private rowMetrics(): NgbDataMetricDef<T>[] {\n return this.config.rowSelectionMetrics ?? this.config.metrics;\n }\n\n private resolveRowId(row: T, index: number): string | number {\n const candidate = (row as { id?: string | number }).id;\n return candidate ?? index;\n }\n\n private scheduleSeedSelection(): void {\n this.selectionSeedPending = true;\n Promise.resolve().then(() => this.seedGridSelection());\n setTimeout(() => this.seedGridSelection());\n requestAnimationFrame(() => this.seedGridSelection());\n }\n\n private seedGridSelection(): void {\n if (this.config?.mode !== 'row-selection' || !this.grid) return;\n const ids = this.config.rows\n .map((row, index) => this.resolveRowId(row, index))\n .filter((id) => this.selectedIds.has(id));\n this.grid.setSelectionIds(ids, { emit: false });\n this.selectionSeedPending = false;\n this.cdr.markForCheck();\n }\n\n private buildRowSelectionColumns(): ColumnDef<T>[] {\n return [\n {\n field: this.config.dimension.key as Extract<keyof T, string>,\n header: this.config.dimension.label,\n width: 280,\n },\n ...this.rowMetrics().map((metric) => ({\n field: metric.key as Extract<keyof T, string>,\n header: metric.label,\n type: 'number' as const,\n width: 140,\n })),\n ];\n }\n\n private buildColumnSelectionColumns(): ColumnDef<T>[] {\n const productCol: ColumnDef<T> = {\n field: this.config.dimension.key as Extract<keyof T, string>,\n header: this.config.dimension.label.toUpperCase(),\n width: 210,\n };\n const metricCols = this.config.metrics.map((metric) => {\n const active = this.activeMetricKeys.has(metric.key);\n const tint = metric.color ?? '#94a3b8';\n return {\n field: metric.key as Extract<keyof T, string>,\n header: metric.label.toUpperCase(),\n type: 'number' as const,\n width: 150,\n headerStyle: active\n ? { background: `${tint}18`, color: '#334155', fontWeight: 700 }\n : { color: '#94a3b8', fontWeight: 700 },\n cellStyle: active\n ? { background: `${tint}10`, color: '#111827' }\n : { color: '#cbd5e1' },\n } as ColumnDef<T>;\n });\n const trailing = (this.config.trailingColumns ?? []).map((col) => ({\n field: col.field as Extract<keyof T, string>,\n header: col.header.toUpperCase(),\n type: col.type ?? 'number',\n width: col.width ?? 130,\n })) as ColumnDef<T>[];\n return [productCol, ...metricCols, ...trailing];\n }\n\n private buildSparklineColumns(): ColumnDef<T>[] {\n const cols: ColumnDef<T>[] = [\n {\n field: this.config.dimension.key as Extract<keyof T, string>,\n header: this.config.dimension.label.toUpperCase(),\n width: 220,\n },\n ];\n if (this.config.subDimension) {\n cols.push({\n field: this.config.subDimension.key as Extract<keyof T, string>,\n header: this.config.subDimension.label.toUpperCase(),\n width: 180,\n });\n }\n const quarterMetrics = this.config.metrics.filter((metric) => metric.key.startsWith('q'));\n cols.push(\n ...quarterMetrics.map((metric) => ({\n field: metric.key as Extract<keyof T, string>,\n header: metric.label.toUpperCase(),\n type: 'number' as const,\n width: 150,\n })),\n );\n if (this.config.sparkline?.field) {\n cols.push({\n field: this.config.sparkline.field as Extract<keyof T, string>,\n header: 'Trend',\n width: 170,\n });\n }\n cols.push(\n ...(this.config.trailingColumns ?? []).map((col) => ({\n field: col.field as Extract<keyof T, string>,\n header: col.header.toUpperCase(),\n type: col.type ?? 'number',\n width: col.width ?? 130,\n })) as ColumnDef<T>[],\n );\n return cols;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgbDatagridButtonDirective } from '../foundation/datagrid-button.directive';\nimport { NgbDatagridControlDirective } from '../foundation/datagrid-control.directive';\nimport { ColumnType } from '../models/column-def';\nimport {\n NgbColumnFilterType,\n NgbCompositeFilterDescriptor,\n NgbFilterOperator,\n ngbAllowedFilterOperators,\n ngbColumnTypeToFilterType,\n ngbDefaultFilterOperator,\n ngbFilterOperatorLabel,\n ngbOperatorRequiresFilterValue,\n} from '../models/filtering';\n\nexport interface NgbAdvancedSearchField {\n field: string;\n label: string;\n type?: ColumnType;\n filterType?: NgbColumnFilterType;\n defaultFilterOperator?: NgbFilterOperator | '';\n allowedFilterOperators?: NgbFilterOperator[];\n}\n\nexport interface NgbAdvancedSearchOperator {\n value: NgbFilterOperator;\n label: string;\n}\n\nexport interface NgbAdvancedSearchRule {\n field: string;\n operator: NgbFilterOperator;\n value: any;\n}\n\n@Component({\n selector: 'ngb-advanced-search',\n standalone: true,\n imports: [CommonModule, FormsModule, NgbDatagridButtonDirective, NgbDatagridControlDirective],\n template: `\n <div class=\"ngb-advanced-search\">\n <div class=\"ngb-advanced-search__logic\">\n <span>{{ matchLabel }}</span>\n <button\n type=\"button\"\n [ngbDatagridButton]=\"logic === 'and' ? 'primary' : 'secondary'\"\n (click)=\"setLogic('and')\"\n >\n AND\n </button>\n <button\n type=\"button\"\n [ngbDatagridButton]=\"logic === 'or' ? 'primary' : 'secondary'\"\n (click)=\"setLogic('or')\"\n >\n OR\n </button>\n <span>{{ rulesLabel }}</span>\n </div>\n\n <div class=\"ngb-advanced-search__rules\">\n @for (rule of rules; track $index; let i = $index) {\n <div class=\"ngb-advanced-search__rule\">\n <span class=\"ngb-advanced-search__join\">{{ i === 0 ? whenLabel : logic.toUpperCase() }}</span>\n <select\n ngbDatagridControl\n [ngModel]=\"rule.field\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"setRuleField(rule, $event)\"\n [attr.aria-label]=\"fieldAriaLabel\"\n >\n @for (field of fields; track field.field) {\n <option [value]=\"field.field\">{{ field.label }}</option>\n }\n </select>\n <select\n ngbDatagridControl\n [ngModel]=\"rule.operator\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"setRuleOperator(rule, $event)\"\n [attr.aria-label]=\"operatorAriaLabel\"\n >\n @for (operator of operatorOptionsFor(rule); track operator.value) {\n <option [ngValue]=\"operator.value\">{{ operator.label }}</option>\n }\n </select>\n <input\n ngbDatagridControl\n [attr.type]=\"inputType(rule)\"\n [(ngModel)]=\"rule.value\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"emitRules()\"\n [placeholder]=\"valuePlaceholder\"\n [disabled]=\"!operatorRequiresValue(rule.operator)\"\n [attr.aria-label]=\"valueAriaLabel\"\n />\n <button\n type=\"button\"\n ngbDatagridButton=\"danger\"\n (click)=\"removeRule(i)\"\n [disabled]=\"rules.length <= minRules\"\n [attr.aria-label]=\"removeRuleAriaLabel\"\n >\n {{ removeRuleLabel }}\n </button>\n </div>\n }\n </div>\n\n <div class=\"ngb-advanced-search__actions\">\n <button type=\"button\" ngbDatagridButton=\"secondary\" (click)=\"addRule()\">\n {{ addRuleLabel }}\n </button>\n <button type=\"button\" ngbDatagridButton=\"success\" (click)=\"apply()\">\n {{ applyLabel }}\n </button>\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n\n .ngb-advanced-search {\n display: grid;\n gap: 1rem;\n color: var(--dg-text, #1f2937);\n }\n\n .ngb-advanced-search__logic,\n .ngb-advanced-search__actions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 0.625rem;\n }\n\n .ngb-advanced-search__logic {\n font-weight: 700;\n }\n\n .ngb-advanced-search__rules {\n display: grid;\n gap: 0.75rem;\n }\n\n .ngb-advanced-search__rule {\n display: grid;\n grid-template-columns: auto minmax(9rem, 1fr) minmax(10rem, 1fr) minmax(10rem, 1fr) auto;\n align-items: center;\n gap: 0.625rem;\n }\n\n .ngb-advanced-search__join {\n min-width: 3.5rem;\n font-size: 0.8125rem;\n font-weight: 800;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n color: var(--dg-text-muted, #64748b);\n }\n\n .ngb-advanced-search .grid-filter-control {\n min-height: var(--dg-control-height, 2.5rem);\n border: 1px solid var(--dg-border, #d5dbe5);\n border-radius: var(--dg-radius-md, 0.5rem);\n background: var(--dg-surface, #fff);\n color: var(--dg-text, #1f2937);\n padding: 0 0.75rem;\n }\n\n .ngb-advanced-search .datagrid-toolbar__button,\n .ngb-advanced-search .grid-row-action {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.45rem;\n min-height: var(--dg-control-height, 2.5rem);\n padding: 0 0.9rem;\n border: 1px solid var(--dg-border, #d5dbe5);\n border-radius: var(--dg-radius-md, 0.5rem);\n background: var(--dg-surface, #fff);\n color: var(--dg-text, #1f2937);\n font: inherit;\n font-weight: 700;\n }\n\n .ngb-advanced-search .datagrid-toolbar__button--primary {\n border-color: var(--dg-accent, #2563eb);\n background: var(--dg-accent, #2563eb);\n color: #fff;\n }\n\n .ngb-advanced-search .grid-row-action--success {\n border-color: #16a34a;\n background: #16a34a;\n color: #fff;\n }\n\n .ngb-advanced-search .grid-row-action--danger {\n border-color: #dc2626;\n background: #dc2626;\n color: #fff;\n }\n\n .ngb-advanced-search button:disabled {\n cursor: not-allowed;\n opacity: 0.55;\n }\n\n @media (max-width: 768px) {\n .ngb-advanced-search__rule {\n grid-template-columns: 1fr;\n }\n\n .ngb-advanced-search__join {\n min-width: 0;\n }\n }\n `,\n ],\n})\nexport class NgbAdvancedSearchComponent {\n private _fields: NgbAdvancedSearchField[] = [];\n private _operators: NgbAdvancedSearchOperator[] | null = null;\n private fieldConfigCache = new Map<string, NgbAdvancedSearchField>();\n private filterTypeCache = new Map<string, NgbColumnFilterType>();\n private inputTypeCache = new Map<string, string>();\n private operatorOptionsCache = new Map<string, NgbAdvancedSearchOperator[]>();\n\n @Input() set fields(value: NgbAdvancedSearchField[] | null | undefined) {\n this._fields = value ?? [];\n this.rebuildFieldCaches();\n }\n get fields(): NgbAdvancedSearchField[] {\n return this._fields;\n }\n\n @Input() set operators(value: NgbAdvancedSearchOperator[] | null | undefined) {\n this._operators = value ?? null;\n this.operatorOptionsCache.clear();\n }\n get operators(): NgbAdvancedSearchOperator[] | null {\n return this._operators;\n }\n @Input() rules: NgbAdvancedSearchRule[] = [];\n @Input() logic: 'and' | 'or' = 'and';\n @Input() minRules = 1;\n @Input() matchLabel = 'Match';\n @Input() rulesLabel = 'of the following rules';\n @Input() whenLabel = 'When';\n @Input() addRuleLabel = '+ Add Rule';\n @Input() applyLabel = 'Search';\n @Input() removeRuleLabel = 'Remove';\n @Input() removeRuleAriaLabel = 'Remove rule';\n @Input() fieldAriaLabel = 'Search field';\n @Input() operatorAriaLabel = 'Search operator';\n @Input() valueAriaLabel = 'Search value';\n @Input() valuePlaceholder = 'Value...';\n\n @Output() rulesChange = new EventEmitter<NgbAdvancedSearchRule[]>();\n @Output() logicChange = new EventEmitter<'and' | 'or'>();\n @Output() filterChange = new EventEmitter<NgbCompositeFilterDescriptor>();\n\n setLogic(logic: 'and' | 'or'): void {\n this.logic = logic;\n this.logicChange.emit(logic);\n }\n\n addRule(): void {\n const field = this.fields[0]?.field ?? '';\n this.rules = [\n ...this.rules,\n {\n field,\n operator: this.defaultOperatorForField(field),\n value: '',\n },\n ];\n this.emitRules();\n }\n\n removeRule(index: number): void {\n if (this.rules.length <= this.minRules) return;\n this.rules = this.rules.filter((_, i) => i !== index);\n this.emitRules();\n }\n\n apply(): void {\n this.filterChange.emit(this.toFilterDescriptor());\n }\n\n emitRules(): void {\n this.rulesChange.emit([...this.rules]);\n }\n\n setRuleField(rule: NgbAdvancedSearchRule, field: string): void {\n rule.field = field;\n const operators = this.operatorOptionsFor(rule).map((operator) => operator.value);\n if (!operators.includes(rule.operator)) {\n rule.operator = this.defaultOperatorForField(field);\n rule.value = '';\n }\n this.emitRules();\n }\n\n setRuleOperator(rule: NgbAdvancedSearchRule, operator: NgbFilterOperator): void {\n rule.operator = operator;\n if (!this.operatorRequiresValue(operator)) {\n rule.value = '';\n }\n this.emitRules();\n }\n\n inputType(rule: NgbAdvancedSearchRule): string {\n const cached = this.inputTypeCache.get(rule.field);\n if (cached) return cached;\n const field = this.fieldConfig(rule.field);\n if (field?.type === 'number') return 'number';\n if (field?.type === 'date') return 'date';\n return 'text';\n }\n\n operatorRequiresValue(operator: NgbFilterOperator): boolean {\n return ngbOperatorRequiresFilterValue(operator);\n }\n\n operatorOptionsFor(rule: NgbAdvancedSearchRule): NgbAdvancedSearchOperator[] {\n if (this.operators?.length) return this.operators;\n const type = this.filterTypeForField(rule.field);\n const cacheKey = `${rule.field}:${type}`;\n const cached = this.operatorOptionsCache.get(cacheKey);\n if (cached) return cached;\n const options = this.allowedOperatorsForField(rule.field).map((operator) => ({\n value: operator,\n label: ngbFilterOperatorLabel(operator, type),\n }));\n this.operatorOptionsCache.set(cacheKey, options);\n return options;\n }\n\n toFilterDescriptor(): NgbCompositeFilterDescriptor {\n const filters: NgbCompositeFilterDescriptor['filters'] = [];\n for (const rule of this.rules) {\n const requiresValue = ngbOperatorRequiresFilterValue(rule.operator);\n if (requiresValue && (rule.value === '' || rule.value == null)) continue;\n\n const inputType = this.inputTypeCache.get(rule.field) ?? this.inputType(rule);\n filters.push({\n field: rule.field,\n operator: rule.operator,\n value: requiresValue ? (inputType === 'number' ? Number(rule.value) : rule.value) : undefined,\n ignoreCase: inputType !== 'number',\n });\n }\n\n return {\n logic: this.logic,\n filters,\n };\n }\n\n private fieldConfig(field: string): NgbAdvancedSearchField | undefined {\n return this.fieldConfigCache.get(field);\n }\n\n private filterTypeForField(field: string): NgbColumnFilterType {\n const cached = this.filterTypeCache.get(field);\n if (cached) return cached;\n const config = this.fieldConfig(field);\n return config?.filterType ?? ngbColumnTypeToFilterType(config?.type);\n }\n\n private allowedOperatorsForField(field: string): NgbFilterOperator[] {\n const config = this.fieldConfig(field);\n if (config?.allowedFilterOperators?.length) return [...config.allowedFilterOperators];\n return ngbAllowedFilterOperators(this.filterTypeForField(field));\n }\n\n private defaultOperatorForField(field: string): NgbFilterOperator {\n const config = this.fieldConfig(field);\n const allowed = this.allowedOperatorsForField(field);\n if (config?.defaultFilterOperator === '') {\n return allowed[0] ?? ngbDefaultFilterOperator(this.filterTypeForField(field));\n }\n if (config?.defaultFilterOperator) return config.defaultFilterOperator;\n return ngbDefaultFilterOperator(this.filterTypeForField(field));\n }\n\n private rebuildFieldCaches(): void {\n this.fieldConfigCache = new Map(this._fields.map((field) => [field.field, field]));\n this.filterTypeCache.clear();\n this.inputTypeCache.clear();\n this.operatorOptionsCache.clear();\n\n for (const field of this._fields) {\n const filterType = field.filterType ?? ngbColumnTypeToFilterType(field.type);\n this.filterTypeCache.set(field.field, filterType);\n this.inputTypeCache.set(\n field.field,\n field.type === 'number' ? 'number' : field.type === 'date' ? 'date' : 'text',\n );\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgbDatagridButtonDirective } from '../foundation/datagrid-button.directive';\nimport { NgbDatagridControlDirective } from '../foundation/datagrid-control.directive';\n\nexport interface NgbSearchHighlightField {\n field: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface NgbSearchHighlightSelectionChange {\n term: string;\n selectedFields: string[];\n}\n\n@Component({\n selector: 'ngb-search-highlight',\n standalone: true,\n imports: [CommonModule, FormsModule, NgbDatagridButtonDirective, NgbDatagridControlDirective],\n template: `\n <div class=\"ngb-search-highlight\">\n <label class=\"ngb-search-highlight__search\">\n <span class=\"ngb-search-highlight__icon\" aria-hidden=\"true\">{{ searchIcon }}</span>\n <input\n type=\"search\"\n ngbDatagridControl\n [ngModel]=\"term\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"setTerm($event)\"\n [placeholder]=\"placeholder\"\n [attr.aria-label]=\"searchAriaLabel\"\n />\n </label>\n\n @if (fields.length) {\n <div class=\"ngb-search-highlight__fields\">\n <span class=\"ngb-search-highlight__label\">{{ fieldsLabel }}</span>\n <div class=\"ngb-search-highlight__chips\" role=\"group\" [attr.aria-label]=\"fieldsAriaLabel\">\n @for (field of fields; track field.field) {\n <button\n type=\"button\"\n [ngbDatagridButton]=\"isFieldSelected(field.field) ? 'primary' : 'secondary'\"\n [disabled]=\"field.disabled || (!allowEmptySelection && isFieldSelected(field.field) && selectedFields.length <= 1)\"\n [attr.aria-pressed]=\"isFieldSelected(field.field)\"\n (click)=\"toggleField(field.field)\"\n >\n {{ field.label }}\n </button>\n }\n </div>\n </div>\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n\n .ngb-search-highlight {\n display: grid;\n gap: 1rem;\n color: var(--dg-text, #1f2937);\n }\n\n .ngb-search-highlight__search {\n display: flex;\n align-items: center;\n gap: 0.625rem;\n min-width: min(100%, 18rem);\n }\n\n .ngb-search-highlight__search .grid-filter-control {\n width: 100%;\n min-height: var(--dg-control-height, 2.5rem);\n border: 1px solid var(--dg-border, #d5dbe5);\n border-radius: var(--dg-radius-md, 0.5rem);\n background: var(--dg-surface, #fff);\n color: var(--dg-text, #1f2937);\n padding: 0 0.75rem;\n }\n\n .ngb-search-highlight__icon {\n color: var(--dg-text-muted, #64748b);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 2rem;\n font-size: 1.9rem;\n line-height: 1;\n font-weight: 700;\n }\n\n .ngb-search-highlight__fields {\n display: grid;\n gap: 0.5rem;\n }\n\n .ngb-search-highlight__label {\n font-size: 0.875rem;\n font-weight: 700;\n color: var(--dg-text, #1f2937);\n }\n\n .ngb-search-highlight__chips {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n }\n\n .ngb-search-highlight .datagrid-toolbar__button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: var(--dg-control-height, 2.5rem);\n padding: 0 0.9rem;\n border: 1px solid var(--dg-border, #d5dbe5);\n border-radius: var(--dg-radius-md, 0.5rem);\n background: var(--dg-surface, #fff);\n color: var(--dg-text, #1f2937);\n font: inherit;\n font-weight: 700;\n }\n\n .ngb-search-highlight .datagrid-toolbar__button--primary {\n border-color: var(--dg-accent, #2563eb);\n background: var(--dg-accent, #2563eb);\n color: #fff;\n }\n\n .ngb-search-highlight button:disabled {\n cursor: not-allowed;\n opacity: 0.55;\n }\n `,\n ],\n})\nexport class NgbSearchHighlightComponent {\n @Input() fields: NgbSearchHighlightField[] = [];\n @Input() selectedFields: string[] = [];\n @Input() term = '';\n @Input() placeholder = 'Type to highlight matches...';\n @Input() searchAriaLabel = 'Type to highlight matches';\n @Input() fieldsLabel = 'Search in:';\n @Input() fieldsAriaLabel = 'Highlight fields';\n @Input() searchIcon = '🔍';\n @Input() allowEmptySelection = false;\n\n @Output() termChange = new EventEmitter<string>();\n @Output() selectedFieldsChange = new EventEmitter<string[]>();\n @Output() selectionChange = new EventEmitter<NgbSearchHighlightSelectionChange>();\n\n setTerm(term: string): void {\n this.term = term;\n this.termChange.emit(term);\n this.emitSelectionChange();\n }\n\n isFieldSelected(field: string): boolean {\n return this.selectedFields.includes(field);\n }\n\n toggleField(field: string): void {\n const selected = this.isFieldSelected(field);\n if (selected && !this.allowEmptySelection && this.selectedFields.length <= 1) return;\n this.selectedFields = selected\n ? this.selectedFields.filter((item) => item !== field)\n : [...this.selectedFields, field];\n this.selectedFieldsChange.emit([...this.selectedFields]);\n this.emitSelectionChange();\n }\n\n private emitSelectionChange(): void {\n this.selectionChange.emit({\n term: this.term,\n selectedFields: [...this.selectedFields],\n });\n }\n}\n","import type { NgbCompositeFilterDescriptor } from './models/filtering';\n\nexport type NgbDataGridSortDirection = 'asc' | 'desc';\n\nexport interface NgbDataGridSortDescriptor {\n field: string;\n direction: NgbDataGridSortDirection;\n}\n\nexport interface NgbDataGridState {\n /** 1-based page number used by the DataGrid pager. */\n page?: number;\n /** 0-based page index for API integrations that use page indexes. */\n pageIndex?: number;\n /** Number of records skipped before the current page. */\n skip?: number;\n pageSize?: number;\n sort?: NgbDataGridSortDescriptor[];\n filter?: NgbCompositeFilterDescriptor;\n globalFilter?: string;\n}\n\nexport type NgbDataGridAggregateFunction = 'count' | 'sum' | 'average' | 'min' | 'max';\n\nexport interface NgbDataGridAggregateDescriptor {\n field: string;\n aggregate: NgbDataGridAggregateFunction;\n}\n\nexport type NgbDataGridAggregateResults = Record<\n string,\n Partial<Record<NgbDataGridAggregateFunction, number | string | Date | null>>\n>;\n\nexport interface NgbDataGridProcessOptions<T = unknown> {\n state?: NgbDataGridState | null;\n aggregates?: NgbDataGridAggregateDescriptor[];\n globalFilterFields?: string[];\n columns?: Array<{ field: Extract<keyof T, string> | string; type?: string; filterType?: string }>;\n /**\n * When false, returns the filtered/sorted full result without page slicing.\n * Aggregates are always calculated before page slicing.\n */\n page?: boolean;\n}\n\nexport interface NgbDataGridDataResult<T = unknown> {\n data: T[];\n total: number;\n aggregates?: NgbDataGridAggregateResults;\n}\n\n// datagrid.types.ts\nexport type NgbDataGridExportType = 'pdf' | 'excel' | 'both';\nexport type NgbDataGridExportPages = 'all' | 'current' | 'selection';\nexport type NgbDataGridTheme =\n | 'bootstrap'\n | 'bootstrap-main'\n | 'bootstrap-main-dark'\n | 'bootstrap-nordic'\n | 'bootstrap-urban'\n | 'bootstrap-vintage'\n | 'material'\n | 'material-main'\n | 'material-indigo'\n | 'material-deep-purple'\n | 'tailwind'\n | 'tailwind-main'\n | 'tailwind-slate'\n | 'tailwind-emerald';\n\nexport interface NgbDataGridThemeOption {\n value: NgbDataGridTheme;\n label: string;\n group: 'Bootstrap' | 'Material' | 'Tailwind';\n swatches: [string, string, string];\n dark?: boolean;\n}\n\nexport const NGB_DATAGRID_THEME_OPTIONS: NgbDataGridThemeOption[] = [\n { value: 'bootstrap', label: 'Classic', group: 'Bootstrap', swatches: ['#ffffff', '#0d6efd', '#6c757d'] },\n { value: 'bootstrap-main', label: 'Ocean', group: 'Bootstrap', swatches: ['#f8fbff', '#1769e0', '#172554'] },\n { value: 'bootstrap-main-dark', label: 'Midnight', group: 'Bootstrap', swatches: ['#111827', '#38bdf8', '#e5e7eb'], dark: true },\n { value: 'bootstrap-nordic', label: 'Aqua Rose', group: 'Bootstrap', swatches: ['#f8ffff', '#0891b2', '#fb7185'] },\n { value: 'bootstrap-urban', label: 'Clay', group: 'Bootstrap', swatches: ['#fffaf7', '#c05621', '#256d85'] },\n { value: 'bootstrap-vintage', label: 'Sage', group: 'Bootstrap', swatches: ['#fffdf7', '#6b705c', '#b08968'] },\n { value: 'material-main', label: 'Orchid', group: 'Material', swatches: ['#fffbfe', '#9c27b0', '#2d1b33'] },\n { value: 'material-indigo', label: 'Indigo', group: 'Material', swatches: ['#f7f8ff', '#3f51b5', '#263238'] },\n { value: 'material-deep-purple', label: 'Plum', group: 'Material', swatches: ['#fdf8ff', '#7e57c2', '#4a148c'] },\n { value: 'tailwind-main', label: 'Sky', group: 'Tailwind', swatches: ['#ffffff', '#0284c7', '#0f172a'] },\n { value: 'tailwind-slate', label: 'Graphite', group: 'Tailwind', swatches: ['#f8fafc', '#334155', '#020617'] },\n { value: 'tailwind-emerald', label: 'Mint', group: 'Tailwind', swatches: ['#f0fdfa', '#0f766e', '#064e3b'] },\n];\n\nexport interface NgbDataGridExportOptions {\n enabled: boolean;\n type: NgbDataGridExportType;\n pages: NgbDataGridExportPages;\n fileName?: string;\n pdf?: { pageSize?: 'A4'|'Letter'|string; landscape?: boolean; margins?: [number,number,number,number] };\n excel?: { sheetName?: string };\n}\n\nexport interface NgbDataGridResponsiveOptions {\n enabled: boolean;\n breakpoints?: { mobile?: number; tablet?: number; desktop?: number };\n}\n\n/** Built-in row editing interaction mode. */\nexport type NgbEditMode = 'inline' | 'incell' | 'external' | 'toolbar';\n\n/** Labels and visibility for the built-in multi-checkbox filter menu footer. */\n/** Segment returned by {@link Datagrid.getSearchHighlightSegments} for match highlighting. */\nexport interface NgbSearchHighlightSegment {\n text: string;\n match: boolean;\n}\n\n/** Placement when calling {@link Datagrid.reorderColumn}. */\nexport interface NgbColumnReorderOptions {\n /** When true (default), inserts before the column at the destination index. When false, inserts after it. */\n before?: boolean;\n}\n\nexport interface NgbColumnReorderEvent<T = any> {\n /** Visible columns in their new order. */\n columns: Array<{ field: string; header: string } & Record<string, unknown>>;\n /** Column that was moved. */\n column: T;\n fromIndex: number;\n toIndex: number;\n /** Ordered field names after the move. */\n fields: string[];\n}\n\nexport interface NgbMultiCheckboxFilterOptions {\n /** Primary action label. Default: `OK` */\n applyLabel?: string;\n /** Secondary action label. Default: `Cancel` */\n cancelLabel?: string;\n /** Whether the secondary action is shown. Default: `true` */\n showCancel?: boolean;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, EventEmitter, HostListener, Input, Output, inject } from '@angular/core';\nimport { NgbDataGridTheme, NgbDataGridThemeOption, NGB_DATAGRID_THEME_OPTIONS } from '../datagrid.types';\n\n@Component({\n selector: 'ngb-datagrid-theme-picker',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"ngb-datagrid-theme-picker\">\n @if (label) {\n <span class=\"ngb-datagrid-theme-picker__label\">{{ label }}</span>\n }\n <div class=\"ngb-datagrid-theme-picker__control\">\n <button\n type=\"button\"\n class=\"ngb-datagrid-theme-picker__trigger\"\n [class.ngb-datagrid-theme-picker__trigger--open]=\"open\"\n [attr.aria-expanded]=\"open\"\n aria-haspopup=\"listbox\"\n (click)=\"toggle()\"\n >\n <span class=\"ngb-datagrid-theme-picker__swatches\" aria-hidden=\"true\">\n @for (color of selectedTheme.swatches; track color) {\n <span\n class=\"ngb-datagrid-theme-picker__swatch\"\n [style.background]=\"color\"\n ></span>\n }\n </span>\n <span class=\"ngb-datagrid-theme-picker__selected\">{{ selectedTheme.label }}</span>\n <span class=\"ngb-datagrid-theme-picker__chevron\" aria-hidden=\"true\"></span>\n </button>\n\n @if (open) {\n <div class=\"ngb-datagrid-theme-picker__menu\" role=\"listbox\">\n @for (group of groupedThemes; track group.label) {\n <div class=\"ngb-datagrid-theme-picker__group\">{{ group.label }}</div>\n @for (theme of group.items; track theme.value) {\n <button\n type=\"button\"\n class=\"ngb-datagrid-theme-picker__option\"\n role=\"option\"\n [attr.aria-selected]=\"theme.value === value\"\n [class.ngb-datagrid-theme-picker__option--active]=\"theme.value === value\"\n (click)=\"select(theme)\"\n >\n <span class=\"ngb-datagrid-theme-picker__swatches\" aria-hidden=\"true\">\n @for (color of theme.swatches; track color) {\n <span\n class=\"ngb-datagrid-theme-picker__swatch\"\n [style.background]=\"color\"\n ></span>\n }\n </span>\n <span class=\"ngb-datagrid-theme-picker__option-label\">{{ theme.label }}</span>\n @if (theme.dark) {\n <span class=\"ngb-datagrid-theme-picker__moon\" aria-hidden=\"true\"></span>\n }\n </button>\n }\n }\n </div>\n }\n </div>\n </div>\n `,\n styles: [`\n :host {\n display: inline-block;\n color: #344054;\n font: inherit;\n }\n\n .ngb-datagrid-theme-picker {\n display: inline-flex;\n align-items: center;\n gap: 0.6rem;\n position: relative;\n }\n\n .ngb-datagrid-theme-picker__label {\n color: #667085;\n font-size: 0.86rem;\n line-height: 1.4;\n }\n\n .ngb-datagrid-theme-picker__control {\n position: relative;\n min-width: 12.5rem;\n }\n\n .ngb-datagrid-theme-picker__trigger,\n .ngb-datagrid-theme-picker__option {\n display: flex;\n align-items: center;\n width: 100%;\n border: 1px solid #d0d5dd;\n background: #fff;\n color: #101828;\n font: inherit;\n text-align: left;\n cursor: pointer;\n }\n\n .ngb-datagrid-theme-picker__trigger {\n min-height: 2.25rem;\n gap: 0.55rem;\n padding: 0.35rem 0.65rem;\n border-radius: 0.5rem;\n box-shadow: 0 1px 2px rgba(16, 24, 40, 0.05);\n }\n\n .ngb-datagrid-theme-picker__trigger:focus-visible,\n .ngb-datagrid-theme-picker__trigger--open {\n outline: none;\n border-color: #315efb;\n box-shadow: 0 0 0 0.2rem rgba(49, 94, 251, 0.14);\n }\n\n .ngb-datagrid-theme-picker__selected {\n flex: 1 1 auto;\n min-width: 0;\n font-weight: 600;\n }\n\n .ngb-datagrid-theme-picker__chevron {\n width: 0.75rem;\n height: 0.75rem;\n border-right: 2px solid #315efb;\n border-bottom: 2px solid #315efb;\n transform: rotate(45deg);\n transition: transform 150ms ease;\n margin-top: -0.25rem;\n }\n\n .ngb-datagrid-theme-picker__trigger--open .ngb-datagrid-theme-picker__chevron {\n transform: rotate(225deg);\n margin-top: 0.25rem;\n }\n\n .ngb-datagrid-theme-picker__menu {\n position: absolute;\n z-index: 1100;\n top: calc(100% + 0.25rem);\n right: 0;\n width: min(19rem, 90vw);\n max-height: 24rem;\n overflow: auto;\n padding: 0.65rem;\n border: 1px solid #d7deea;\n border-radius: 0.5rem;\n background: #fff;\n box-shadow: 0 1rem 2.25rem rgba(16, 24, 40, 0.18);\n }\n\n .ngb-datagrid-theme-picker__group {\n padding: 0.55rem 0.65rem 0.45rem;\n color: #344054;\n font-size: 0.72rem;\n font-weight: 700;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n border-top: 1px solid #e4e7ec;\n }\n\n .ngb-datagrid-theme-picker__group:first-child {\n border-top: 0;\n padding-top: 0.35rem;\n }\n\n .ngb-datagrid-theme-picker__option {\n gap: 0.65rem;\n min-height: 2.55rem;\n padding: 0.45rem 0.65rem;\n border: 0;\n border-radius: 0.45rem;\n }\n\n .ngb-datagrid-theme-picker__option:hover,\n .ngb-datagrid-theme-picker__option--active {\n background: #f2f4f7;\n }\n\n .ngb-datagrid-theme-picker__option-label {\n flex: 1 1 auto;\n font-weight: 600;\n color: #344054;\n }\n\n .ngb-datagrid-theme-picker__swatches {\n display: inline-flex;\n align-items: center;\n min-width: 3.2rem;\n }\n\n .ngb-datagrid-theme-picker__swatch {\n width: 1.25rem;\n height: 1.25rem;\n border: 2px solid #fff;\n border-radius: 50%;\n box-shadow: 0 0 0 1px rgba(16, 24, 40, 0.08);\n }\n\n .ngb-datagrid-theme-picker__swatch + .ngb-datagrid-theme-picker__swatch {\n margin-left: -0.42rem;\n }\n\n .ngb-datagrid-theme-picker__moon {\n width: 0.95rem;\n height: 0.95rem;\n border-radius: 50%;\n box-shadow: -0.28rem 0 0 #344054;\n transform: translateX(0.28rem);\n }\n\n @media (max-width: 640px) {\n .ngb-datagrid-theme-picker {\n align-items: stretch;\n flex-direction: column;\n gap: 0.45rem;\n width: 100%;\n }\n\n .ngb-datagrid-theme-picker__control {\n min-width: 0;\n width: 100%;\n }\n\n .ngb-datagrid-theme-picker__menu {\n left: 0;\n right: auto;\n width: 100%;\n }\n }\n `],\n})\nexport class NgbDatagridThemePickerComponent {\n private readonly host = inject(ElementRef<HTMLElement>);\n private _value: NgbDataGridTheme = 'bootstrap';\n private _themes: NgbDataGridThemeOption[] = NGB_DATAGRID_THEME_OPTIONS;\n\n @Input() label = 'Change Theme';\n @Input()\n get value(): NgbDataGridTheme {\n return this._value;\n }\n set value(value: NgbDataGridTheme) {\n this._value = value;\n this.updateSelectedTheme();\n }\n\n @Input()\n get themes(): NgbDataGridThemeOption[] {\n return this._themes;\n }\n set themes(themes: NgbDataGridThemeOption[] | null | undefined) {\n this._themes = themes?.length ? themes : NGB_DATAGRID_THEME_OPTIONS;\n this.groupedThemes = this.buildGroupedThemes(this._themes);\n this.updateSelectedTheme();\n }\n\n @Output() valueChange = new EventEmitter<NgbDataGridTheme>();\n\n open = false;\n selectedTheme: NgbDataGridThemeOption = NGB_DATAGRID_THEME_OPTIONS[0];\n groupedThemes: Array<{ label: NgbDataGridThemeOption['group']; items: NgbDataGridThemeOption[] }> =\n this.buildGroupedThemes(NGB_DATAGRID_THEME_OPTIONS);\n\n toggle(): void {\n this.open = !this.open;\n }\n\n select(theme: NgbDataGridThemeOption): void {\n this._value = theme.value;\n this.selectedTheme = theme;\n this.valueChange.emit(theme.value);\n this.open = false;\n }\n\n @HostListener('document:click', ['$event'])\n closeOnOutsideClick(event: MouseEvent): void {\n if (!this.host.nativeElement.contains(event.target as Node)) {\n this.open = false;\n }\n }\n\n @HostListener('keydown.escape')\n closeOnEscape(): void {\n this.open = false;\n }\n\n private updateSelectedTheme(): void {\n this.selectedTheme =\n this._themes.find((theme) => theme.value === this._value) ?? this._themes[0] ?? NGB_DATAGRID_THEME_OPTIONS[0];\n }\n\n private buildGroupedThemes(\n themes: NgbDataGridThemeOption[],\n ): Array<{ label: NgbDataGridThemeOption['group']; items: NgbDataGridThemeOption[] }> {\n const groups: Array<NgbDataGridThemeOption['group']> = ['Bootstrap', 'Material', 'Tailwind'];\n return groups\n .map((label) => ({ label, items: themes.filter((theme) => theme.group === label) }))\n .filter((group) => group.items.length > 0);\n }\n}\n","import { Directive, HostBinding, HostListener, Optional, SkipSelf } from '@angular/core';\nimport { NgbDndItemDirective } from './dnd-item.directive';\n\n@Directive({\n selector: '[ngbDndHandle]',\n standalone: true\n})\nexport class NgbDndHandleDirective {\n constructor(@Optional() @SkipSelf() private item?: NgbDndItemDirective) {}\n\n @HostBinding('attr.draggable') draggable = 'true';\n @HostBinding('class.ngb-dnd-handle') hostClass = true;\n\n @HostListener('dragstart', ['$event'])\n onDragStart(ev: DragEvent): void {\n this.item?.onDragStart(ev);\n }\n\n @HostListener('dragend')\n onDragEnd(): void {\n this.item?.onDragEnd();\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'ngb-json-preview',\n standalone: true,\n template: `\n <pre class=\"ngb-json-preview\" [style.max-height.px]=\"maxHeight\"><code>{{ formattedJson }}</code></pre>\n `,\n styles: [`\n :host {\n display: block;\n }\n\n .ngb-json-preview {\n margin: 0;\n overflow: auto;\n padding: 0.75rem 1rem;\n border: 0;\n background: var(--bs-body-bg, #fff);\n color: var(--bs-body-color, #212529);\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", monospace;\n font-size: 0.875rem;\n line-height: 1.4;\n white-space: pre;\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgbJsonPreviewComponent {\n @Input() value: unknown = null;\n @Input() indent = 2;\n @Input() fallback = 'null';\n @Input() maxHeight = 320;\n\n get formattedJson(): string {\n if (typeof this.value === 'string') {\n return this.value;\n }\n\n try {\n return JSON.stringify(this.value, null, this.indent) ?? this.fallback;\n } catch {\n return this.fallback;\n }\n }\n}\n","import { Directive, TemplateRef, Input } from '@angular/core';\n\n@Directive({\n selector: '[ngbStepLabel]',\n standalone: true,\n})\nexport class NgbStepLabelDirective {\n @Input('ngbStepLabel') for?: string | number;\n\n constructor(public template: TemplateRef<unknown>) {}\n}\n\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ContentChildren,\n EventEmitter,\n Input,\n Output,\n QueryList,\n TemplateRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n NgbStepperContentPosition,\n NgbStepperLabelPosition,\n NgbStepperOrientation,\n NgbStepperState,\n NgbStepperStep,\n NgbStepperTheme,\n} from './stepper.types';\nimport { NgbStepLabelDirective } from './step-label.directive';\n\nexport interface NgbStepperSelectionChangeEvent {\n previousIndex: number;\n currentIndex: number;\n step: NgbStepperStep | undefined;\n}\n\n@Component({\n selector: 'ngb-stepper',\n standalone: true,\n imports: [CommonModule, NgbStepLabelDirective],\n templateUrl: './stepper.component.html',\n styleUrls: ['./stepper.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgbStepperComponent implements AfterContentInit {\n /** Steps definition */\n @Input() steps: NgbStepperStep[] = [];\n\n /** Orientation of the stepper */\n @Input() orientation: NgbStepperOrientation = 'horizontal';\n\n /** Position of labels around the indicator */\n @Input() labelPosition: NgbStepperLabelPosition = 'right';\n\n /** Position of content relative to header (horizontal only) */\n @Input() contentPosition: NgbStepperContentPosition = 'bottom';\n\n /** Allow navigating back to previous steps by clicking header */\n @Input() allowRevisit = true;\n\n /** Enable lazy loading of step content (default true) */\n @Input() lazy = true;\n\n /** Theme keyword (only CSS classes, no external deps) */\n @Input() theme: NgbStepperTheme = 'bootstrap';\n\n /** Whether to apply responsive helper class */\n @Input() responsive = true;\n\n /** Disable transition / animation helpers */\n @Input() disableAnimation = false;\n\n /** Animation duration (ms) for step transitions when enabled */\n @Input() animationDuration = 150;\n\n /** Label strings (for i18n) */\n @Input() nextLabel = 'Next';\n @Input() previousLabel = 'Previous';\n @Input() resetLabel = 'Reset';\n @Input() cancelLabel = 'Cancel';\n @Input() optionalLabel = 'Optional';\n\n /** Custom mapping from state -> icon text */\n @Input() stateIcons: Record<string, string> = {\n number: '#',\n done: '✓',\n active: '•',\n error: '!',\n disabled: '×',\n };\n\n /** Current selected index */\n @Input() selectedIndex = 0;\n\n /** Emits when selectedIndex changes (programmatically or by user) */\n @Output() selectedIndexChange = new EventEmitter<number>();\n\n /** Emits when selection changes with rich event */\n @Output() selectionChange = new EventEmitter<NgbStepperSelectionChangeEvent>();\n\n /** Navigation events */\n @Output() nextClicked = new EventEmitter<number>();\n @Output() prevClicked = new EventEmitter<number>();\n @Output() resetClicked = new EventEmitter<void>();\n @Output() cancelClicked = new EventEmitter<void>();\n\n /** Custom label template (applied for all steps) */\n @ContentChild(NgbStepLabelDirective) stepLabelTplDir?: NgbStepLabelDirective;\n\n /** Custom icon template for step indicator */\n @ContentChild('ngbStepperIcon', { read: TemplateRef }) customIconTpl?: TemplateRef<any>;\n\n /** Content template; user will typically use <ng-template #stepContent ...> */\n @ContentChild('stepContent', { read: TemplateRef }) stepContentTpl?: TemplateRef<any>;\n\n /** Track which steps have been visited */\n private visited = new Set<number>();\n\n /** Used when allowRevisit=false to block earlier steps */\n visitedFrom = 0;\n\n ngAfterContentInit(): void {\n if (this.selectedIndex < 0) this.selectedIndex = 0;\n if (this.selectedIndex > this.steps.length - 1 && this.steps.length > 0) {\n this.selectedIndex = this.steps.length - 1;\n }\n this.markVisited(this.selectedIndex);\n }\n\n get stepLabelTpl(): TemplateRef<any> | null {\n return this.stepLabelTplDir?.template ?? null;\n }\n\n get labelPositionClass(): string {\n switch (this.labelPosition) {\n case 'top':\n return 'ngb-stepper-label-top';\n case 'bottom':\n return 'ngb-stepper-label-bottom';\n case 'left':\n return 'ngb-stepper-label-left';\n default:\n return 'ngb-stepper-label-right';\n }\n }\n\n get currentErrorMessage(): string | null {\n const step = this.steps[this.selectedIndex];\n return step?.errorMessage ?? null;\n }\n\n stepId(i: number): string {\n const s = this.steps[i];\n const base = s?.id || `ngb-step-${i}`;\n return `${base}-label`;\n }\n\n contentId(i: number): string {\n const s = this.steps[i];\n const base = s?.id || `ngb-step-${i}`;\n return `${base}-content`;\n }\n\n private markVisited(i: number): void {\n this.visited.add(i);\n this.visitedFrom = Math.max(this.visitedFrom, i);\n }\n\n stepState(i: number): NgbStepperState {\n const s = this.steps[i];\n if (!s) return 'number';\n if (s.state) return s.state;\n if (this.isStepInError(i)) return 'error';\n if (i === this.selectedIndex) return 'active';\n if (i < this.selectedIndex) return 'done';\n if (s.disabled) return 'disabled';\n return 'number';\n }\n\n isStepInError(i: number): boolean {\n const s = this.steps[i];\n return !!s?.errorMessage && this.visited.has(i);\n }\n\n indicatorClass(i: number): string {\n const state = this.stepState(i);\n return state;\n }\n\n defaultIconForState(state: NgbStepperState, index: number): string {\n if (state === 'number') {\n return String(index + 1);\n }\n return this.stateIcons[state] ?? this.stateIcons['number'] ?? String(index + 1);\n }\n\n onHeaderClick(i: number): void {\n if (i === this.selectedIndex) return;\n const step = this.steps[i];\n if (!step || step.disabled) return;\n if (!this.allowRevisit && i < this.visitedFrom) return;\n this.changeIndex(i);\n }\n\n onHeaderKeydown(event: KeyboardEvent | Event, i: number): void {\n event.preventDefault();\n this.onHeaderClick(i);\n }\n\n next(): void {\n const target = Math.min(this.steps.length - 1, this.selectedIndex + 1);\n if (target === this.selectedIndex) return;\n this.nextClicked.emit(target);\n this.changeIndex(target);\n }\n\n prev(): void {\n if (!this.allowRevisit) return;\n const target = Math.max(0, this.selectedIndex - 1);\n if (target === this.selectedIndex) return;\n this.prevClicked.emit(target);\n this.changeIndex(target);\n }\n\n onReset(): void {\n this.resetClicked.emit();\n this.selectedIndex = 0;\n this.selectedIndexChange.emit(this.selectedIndex);\n this.selectionChange.emit({\n previousIndex: 0,\n currentIndex: 0,\n step: this.steps[0],\n });\n this.visited.clear();\n this.visitedFrom = 0;\n this.markVisited(0);\n }\n\n onCancel(): void {\n this.cancelClicked.emit();\n }\n\n private changeIndex(nextIndex: number): void {\n const prev = this.selectedIndex;\n this.selectedIndex = nextIndex;\n this.markVisited(nextIndex);\n this.selectedIndexChange.emit(this.selectedIndex);\n this.selectionChange.emit({\n previousIndex: prev,\n currentIndex: nextIndex,\n step: this.steps[nextIndex],\n });\n }\n}\n","<div\n class=\"ngb-stepper\"\n [class.horizontal]=\"orientation === 'horizontal'\"\n [class.vertical]=\"orientation === 'vertical'\"\n [class.ngb-responsive]=\"responsive\"\n [class.bootstrap]=\"theme === 'bootstrap'\"\n [class.material]=\"theme === 'material'\"\n [class.tailwind]=\"theme === 'tailwind'\"\n role=\"tablist\"\n [attr.aria-orientation]=\"orientation\"\n>\n <!-- HEADER / LABELS -->\n <div class=\"ngb-stepper-header\">\n <ol class=\"ngb-stepper-steps\" role=\"presentation\">\n @for (step of steps; track step; let i = $index) {\n <li\n class=\"ngb-stepper-step\"\n [class.active]=\"i === selectedIndex\"\n [class.done]=\"i < selectedIndex && !isStepInError(i)\"\n [class.error]=\"isStepInError(i)\"\n [class.disabled]=\"step.disabled\"\n role=\"tab\"\n [attr.id]=\"stepId(i)\"\n [attr.aria-controls]=\"contentId(i)\"\n [attr.aria-selected]=\"i === selectedIndex\"\n [attr.aria-disabled]=\"step.disabled || (!allowRevisit && i < visitedFrom && i !== selectedIndex)\"\n tabindex=\"{{ i === selectedIndex ? 0 : -1 }}\"\n (click)=\"onHeaderClick(i)\"\n (keydown.enter)=\"onHeaderKeydown($event, i)\"\n (keydown.space)=\"onHeaderKeydown($event, i)\"\n >\n <div\n class=\"ngb-stepper-indicator\"\n [ngClass]=\"indicatorClass(i)\"\n aria-hidden=\"true\"\n >\n @if (customIconTpl) {\n <ng-container\n [ngTemplateOutlet]=\"customIconTpl\"\n [ngTemplateOutletContext]=\"{ index: i, state: stepState(i) }\"\n ></ng-container>\n } @else {\n {{ defaultIconForState(stepState(i), i) }}\n }\n </div>\n\n <div\n class=\"ngb-stepper-label-container\"\n [ngClass]=\"labelPositionClass\"\n >\n @if (stepLabelTpl) {\n <div class=\"ngb-stepper-label\">\n <ng-container\n [ngTemplateOutlet]=\"stepLabelTpl\"\n [ngTemplateOutletContext]=\"{ index: i, step: step }\"\n ></ng-container>\n </div>\n } @else {\n <div class=\"ngb-stepper-label-text\">\n {{ step.label || ('Step ' + (i + 1)) }}\n </div>\n }\n @if (step.optional) {\n <div class=\"ngb-stepper-optional\">\n {{ optionalLabel }}\n </div>\n }\n </div>\n </li>\n }\n </ol>\n </div>\n\n <!-- CONTENT -->\n <div class=\"ngb-stepper-content\" [class.ngb-stepper-content-top]=\"contentPosition === 'top'\">\n @if (lazy) {\n <div\n class=\"fade-step\"\n [style.--ngb-stepper-animation-duration]=\"(disableAnimation ? 0 : animationDuration) + 'ms'\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"stepId(selectedIndex)\"\n [attr.id]=\"contentId(selectedIndex)\"\n >\n <ng-container *ngTemplateOutlet=\"stepContentTpl; context: { index: selectedIndex }\"></ng-container>\n @if (currentErrorMessage) {\n <div class=\"ngb-stepper-error\" role=\"alert\">\n {{ currentErrorMessage }}\n </div>\n }\n </div>\n } @else {\n <div\n class=\"fade-step\"\n [style.--ngb-stepper-animation-duration]=\"(disableAnimation ? 0 : animationDuration) + 'ms'\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"stepId(selectedIndex)\"\n [attr.id]=\"contentId(selectedIndex)\"\n >\n <ng-container *ngTemplateOutlet=\"stepContentTpl; context: { index: selectedIndex }\"></ng-container>\n @if (currentErrorMessage) {\n <div class=\"ngb-stepper-error\" role=\"alert\">\n {{ currentErrorMessage }}\n </div>\n }\n </div>\n }\n </div>\n\n <!-- ACTIONS -->\n <div class=\"ngb-stepper-buttons\">\n <button\n type=\"button\"\n class=\"btn btn-sm btn-outline-secondary\"\n (click)=\"onCancel()\"\n >\n {{ cancelLabel }}\n </button>\n\n <button\n type=\"button\"\n class=\"btn btn-sm btn-outline-secondary\"\n (click)=\"onReset()\"\n >\n {{ resetLabel }}\n </button>\n\n <button\n type=\"button\"\n class=\"btn btn-sm btn-outline-secondary\"\n (click)=\"prev()\"\n [disabled]=\"selectedIndex <= 0 || !allowRevisit\"\n >\n {{ previousLabel }}\n </button>\n\n <button\n type=\"button\"\n class=\"btn btn-sm btn-primary\"\n (click)=\"next()\"\n [disabled]=\"selectedIndex >= steps.length - 1 || steps[selectedIndex]?.disabled\"\n >\n {{ nextLabel }}\n </button>\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output, TemplateRef, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'ngb-splitter-pane',\n standalone: true,\ntemplate: `<ng-template #content>\n <div [style.overflow]=\"scrollable ? 'auto' : 'hidden'\" style=\"height: 100%; width: 100%;\">\n <ng-content></ng-content>\n </div>\n </ng-template>`,\n styles: [`:host { display: block; position: relative; }`]\n})\nexport class NgbSplitterPaneComponent {\n @Input() size: string = ''; // e.g., '30%' or '200px'\n @Input() min: string = '0px';\n @Input() max: string = '100%';\n @Input() scrollable: boolean = true;\n @Input() collapsible: boolean = false;\n @Input() collapsed: boolean = false;\n @Output() collapsedChange = new EventEmitter<boolean>();\n\n @ViewChild('content', { static: true }) template!: TemplateRef<any>;\n\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n QueryList,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgbSplitterPaneComponent } from './splitter-pane.component';\nimport { NgbSplitterOrientation } from './splitter.types';\n\ntype PaneState = {\n sizePx?: number;\n minPx?: number;\n maxPx?: number;\n id: string;\n};\n\n@Component({\n selector: 'ngb-splitter',\n standalone: true,\n imports: [CommonModule, NgbSplitterPaneComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\n `\n :host { display: block; width: 100%; }\n .splitter-container { display: flex; height: 100%; width: 100%; }\n .splitter-container.vertical { flex-direction: column; }\n .splitbar { background: #ccc; width: 5px; position: relative;\n align-items: center;\n justify-content: center; \n flex: 0 0 auto; z-index: 10;\n &.resizable {\n cursor: col-resize;\n } \n &:hover {\n filter: brightness(90%); /* Feedback when hovering bar */\n }\n }\n .handle-line {\n /* Thin white line in the middle */\n border-radius: 2px;\n opacity: 0.8;\n left: 45%;\n position: absolute;\n top: 45%;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n /* Horizontal Handle: Vertical Line */\n .splitter-container:not(.vertical) .handle-line {\n width: 2px;\n height: 10px; /* Adjust height as needed */\n }\n .pane-wrapper {\n position: relative;\n /* CRITICAL: Allow the pane to shrink beyond its content size */\n min-width: 0; \n min-height: 0;\n \n /* CRITICAL: Hide content that overflows during small sizes */\n overflow: hidden; \n \n flex-shrink: 1;\n }\n /* Vertical Handle: Horizontal Line */\n .vertical .handle-line {\n height: 2px;\n width: 10px; /* Adjust width as needed */\n }\n .vertical .splitbar.resizable {\n cursor: row-resize;\n }\n .splitter-container.vertical .splitter-container .splitbar.resizable {\n cursor: col-resize;\n }\n .vertical .splitbar { width: 100%; }\n .collapse-btn { cursor: pointer; background: #666; width: 10px; height: 10px; position: absolute; top: 50%; }\n .collapse-arrow {\n font-size: 0.95rem;\n user-select: none;\n cursor: pointer;\n line-height: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1.25rem;\n height: 1.25rem;\n position:absolute;\n top:100%;\n }\n `,\n ],\n template: `\n <div class=\"splitter-container\" [class.vertical]=\"orientation === 'vertical'\"\n [style.min-height]=\"orientation === 'vertical' ? verticalMinHeight : null\"\n [style.height]=\"orientation === 'vertical' ? verticalMinHeight : null\">\n <!-- Iterate through the QueryList of panes -->\n @for (pane of panes; track pane; let i = $index) {\n <div class=\"pane-wrapper\" [style.flex]=\"getPaneFlex(pane)\"\n [style.min-width]=\"orientation === 'horizontal' ? (pane.min || '0px') : null\"\n [style.max-width]=\"orientation === 'horizontal' ? pane.max : null\"\n [style.min-height]=\"orientation === 'vertical' ? (pane.min || '0px') : null\"\n [style.max-height]=\"orientation === 'vertical' ? pane.max : null\"\n >\n <!-- Access the 'template' property we defined in the Pane component -->\n <ng-container [ngTemplateOutlet]=\"pane.template\"></ng-container>\n </div>\n\n @if (i < panes.length - 1) {\n <div class=\"splitbar\"\n [class.resizable]=\"resizable\"\n [style.background-color]=\"barColor\"\n [style.width.px]=\"orientation === 'horizontal' ? handleThickness : '100%'\" \n [style.height.px]=\"orientation === 'vertical' ? handleThickness : '100%'\" \n role=\"separator\"\n tabindex=\"0\"\n [attr.aria-orientation]=\"getSeparatorAriaOrientation()\"\n [attr.aria-valuenow]=\"getHandleValueNow(i)\"\n [attr.aria-valuemin]=\"getHandleValueMin(i)\"\n [attr.aria-valuemax]=\"getHandleValueMax(i)\"\n (keydown)=\"onHandleKeyDown($event, i)\"\n (mousedown)=\"onMouseDown($event, i)\">\n <div class=\"handle-line\" [style.background-color]=\"lineColor\">\n @if (pane.collapsible) {\n <span\n class=\"collapse-arrow bi\"\n [ngClass]=\"getCollapseIcon(pane)\"\n [style.color]=\"handleIconColor\"\n (click)=\"onHandleToggle($event, i)\"\n aria-hidden=\"true\"\n ></span>\n }\n </div>\n </div>\n }\n }\n </div>\n `,\n})\nexport class NgbSplitterComponent {\n @ContentChildren(NgbSplitterPaneComponent) panes!: QueryList<NgbSplitterPaneComponent>;\n @Input() orientation: 'horizontal' | 'vertical' = 'horizontal';\n @Input() handleThickness:number = 12;\n @Input() handleIconColor: string = '#000';\n @Input() verticalMinHeight: string = '280px';\n\n @Input() resizable: boolean = true; // New Resize Input\n @Input() barColor: string = '#ccc'; // Custom Bar Color\n @Input() lineColor: string = '#000'; // Custom Line Color\n\n private isDragging = false;\n private currentHandleIndex = -1;\n\n constructor(private el: ElementRef){\n\n }\n\n// Listeners for global mouse movement\n @HostListener('window:mousemove', ['$event'])\n onMouseMove(event: MouseEvent) {\n if (!this.isDragging || !this.resizable) return;\n this.resize(event);\n }\n\n @HostListener('window:mouseup')\n onMouseUp() {\n this.isDragging = false;\n document.body.style.cursor = 'default';\n }\n\n onMouseDown(event: MouseEvent, index: number) {\n if (!this.resizable) return;\n event.preventDefault();\n this.isDragging = true;\n this.currentHandleIndex = index;\n document.body.style.cursor = this.orientation === 'horizontal' ? 'col-resize' : 'row-resize';\n }\n\n private resize(event: MouseEvent) {\n const container = this.el.nativeElement.querySelector('.splitter-container');\n const rect = container.getBoundingClientRect();\n const paneArr = this.panes.toArray();\n const paneWrappers = Array.from(this.el.nativeElement.querySelectorAll('.pane-wrapper')) as HTMLElement[];\n\n const targetPane = paneArr[this.currentHandleIndex];\n if (!targetPane || !paneWrappers.length) {\n return;\n }\n\n const isHorizontal = this.orientation === 'horizontal';\n const totalPixels = isHorizontal ? rect.width : rect.height;\n if (totalPixels <= 0) {\n return;\n }\n\n const mousePos = isHorizontal ? event.clientX - rect.left : event.clientY - rect.top;\n\n let consumed = 0;\n for (let i = 0; i < this.currentHandleIndex; i++) {\n const prevPaneElement = paneWrappers[i];\n if (!prevPaneElement) {\n continue;\n }\n const prevRect = prevPaneElement.getBoundingClientRect();\n consumed += isHorizontal ? prevRect.width : prevRect.height;\n consumed += this.handleThickness;\n }\n\n let newSizeValue = ((mousePos - consumed) / totalPixels) * 100;\n\n const minPercent = this.sizeToPercent(targetPane.min, totalPixels);\n const maxPercent = this.sizeToPercent(targetPane.max, totalPixels);\n\n if (minPercent !== null) {\n newSizeValue = Math.max(newSizeValue, minPercent);\n }\n if (maxPercent !== null) {\n newSizeValue = Math.min(newSizeValue, maxPercent);\n }\n\n newSizeValue = Math.max(0, Math.min(100, newSizeValue));\n targetPane.size = `${newSizeValue}%`;\n }\n\n onHandleToggle(event: Event, index: number) {\n event.stopPropagation();\n event.preventDefault();\n this.togglePane(index);\n }\n\n getCollapseIcon(pane: NgbSplitterPaneComponent): string {\n if (!pane.collapsible) {\n return '';\n }\n if (this.orientation === 'horizontal') {\n return pane.collapsed ? 'bi-caret-right-fill' : 'bi-caret-left-fill';\n }\n return pane.collapsed ? 'bi-caret-down-fill' : 'bi-caret-up-fill';\n }\n\n getPaneFlex(pane: NgbSplitterPaneComponent) {\n if (pane.collapsed) {\n return '0 0 0px';\n }\n if (pane.size) {\n return `0 0 ${pane.size}`;\n }\n return '1 1 0px';\n }\n\n private sizeToPercent(value: string | undefined, totalPixels: number): number | null {\n if (!value) {\n return null;\n }\n\n const trimmed = value.trim();\n if (!trimmed) {\n return null;\n }\n\n if (trimmed.endsWith('%')) {\n const percent = parseFloat(trimmed);\n return Number.isFinite(percent) ? percent : null;\n }\n\n const numeric = parseFloat(trimmed);\n if (!Number.isFinite(numeric)) {\n return null;\n }\n\n if (trimmed.endsWith('px')) {\n return totalPixels > 0 ? (numeric / totalPixels) * 100 : null;\n }\n\n return numeric;\n }\n\n togglePane(index: number) {\n const pane = this.panes.toArray()[index];\n pane.collapsed = !pane.collapsed;\n pane.collapsedChange.emit(pane.collapsed);\n }\n\n getSeparatorAriaOrientation(): 'horizontal' | 'vertical' {\n // For left/right panes, the separator is vertical. For top/bottom panes, it is horizontal.\n return this.orientation === 'horizontal' ? 'vertical' : 'horizontal';\n }\n\n getHandleValueNow(index: number): number | null {\n const container = this.el.nativeElement.querySelector('.splitter-container');\n const rect = container.getBoundingClientRect();\n const paneWrappers = Array.from(this.el.nativeElement.querySelectorAll('.pane-wrapper')) as HTMLElement[];\n const target = paneWrappers[index];\n\n const totalPixels = this.orientation === 'horizontal' ? rect.width : rect.height;\n if (!target || totalPixels <= 0) {\n return null;\n }\n\n const paneRect = target.getBoundingClientRect();\n const panePixels = this.orientation === 'horizontal' ? paneRect.width : paneRect.height;\n return Math.round((panePixels / totalPixels) * 100);\n }\n\n getHandleValueMin(index: number): number | null {\n const pane = this.panes?.toArray?.()[index];\n const container = this.el.nativeElement.querySelector('.splitter-container');\n const rect = container.getBoundingClientRect();\n const totalPixels = this.orientation === 'horizontal' ? rect.width : rect.height;\n if (!pane || totalPixels <= 0) {\n return null;\n }\n return this.sizeToPercent(pane.min, totalPixels);\n }\n\n getHandleValueMax(index: number): number | null {\n const pane = this.panes?.toArray?.()[index];\n const container = this.el.nativeElement.querySelector('.splitter-container');\n const rect = container.getBoundingClientRect();\n const totalPixels = this.orientation === 'horizontal' ? rect.width : rect.height;\n if (!pane || totalPixels <= 0) {\n return null;\n }\n return this.sizeToPercent(pane.max, totalPixels);\n }\n\n onHandleKeyDown(event: KeyboardEvent, index: number) {\n if (event.key === 'Enter') {\n const pane = this.panes.toArray()[index];\n if (pane?.collapsible) {\n event.preventDefault();\n this.togglePane(index);\n }\n return;\n }\n\n const isHorizontal = this.orientation === 'horizontal';\n const negativeKey = isHorizontal ? 'ArrowLeft' : 'ArrowUp';\n const positiveKey = isHorizontal ? 'ArrowRight' : 'ArrowDown';\n if (event.key !== negativeKey && event.key !== positiveKey) {\n return;\n }\n\n if (!this.resizable) {\n return;\n }\n\n event.preventDefault();\n const delta = (event.shiftKey ? 5 : 2) * (event.key === positiveKey ? 1 : -1);\n this.resizeByPercent(index, delta);\n }\n\n private resizeByPercent(index: number, deltaPercent: number) {\n const container = this.el.nativeElement.querySelector('.splitter-container');\n const rect = container.getBoundingClientRect();\n const paneArr = this.panes.toArray();\n const paneWrappers = Array.from(this.el.nativeElement.querySelectorAll('.pane-wrapper')) as HTMLElement[];\n\n const targetPane = paneArr[index];\n const targetWrapper = paneWrappers[index];\n if (!targetPane || !targetWrapper) {\n return;\n }\n\n const totalPixels = this.orientation === 'horizontal' ? rect.width : rect.height;\n if (totalPixels <= 0) {\n return;\n }\n\n const wrapperRect = targetWrapper.getBoundingClientRect();\n const currentPixels = this.orientation === 'horizontal' ? wrapperRect.width : wrapperRect.height;\n let nextPercent = (currentPixels / totalPixels) * 100 + deltaPercent;\n\n const minPercent = this.sizeToPercent(targetPane.min, totalPixels);\n const maxPercent = this.sizeToPercent(targetPane.max, totalPixels);\n if (minPercent !== null) {\n nextPercent = Math.max(nextPercent, minPercent);\n }\n if (maxPercent !== null) {\n nextPercent = Math.min(nextPercent, maxPercent);\n }\n\n nextPercent = Math.max(0, Math.min(100, nextPercent));\n targetPane.size = `${nextPercent}%`;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\nexport type NgbChip = {\n id: string | number;\n label: string;\n disabled?: boolean;\n};\n\n@Component({\n selector: 'ngb-chips',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\n `\n :host {\n display: block;\n }\n\n .ngb-chips {\n display: flex;\n flex-wrap: wrap;\n gap: 0.35rem;\n align-items: center;\n }\n\n .ngb-chip {\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n max-width: 100%;\n }\n\n .ngb-chip-label {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .ngb-chip-remove {\n border: 0;\n background: transparent;\n padding: 0;\n line-height: 1;\n cursor: pointer;\n font-size: 1rem;\n opacity: 0.85;\n }\n\n .ngb-chip-remove:disabled {\n cursor: default;\n opacity: 0.4;\n }\n `,\n ],\n template: `\n <div class=\"ngb-chips\" [attr.aria-label]=\"ariaLabel\">\n @for (item of items; track trackById($index, item)) {\n <span class=\"badge rounded-pill bg-secondary ngb-chip\" [class.opacity-50]=\"!!item.disabled\">\n <span class=\"ngb-chip-label\">{{ item.label }}</span>\n @if (removable) {\n <button\n type=\"button\"\n class=\"ngb-chip-remove\"\n [disabled]=\"!!item.disabled\"\n (click)=\"remove.emit(item)\"\n [attr.aria-label]=\"removeLabel || 'Remove'\"\n >\n ×\n </button>\n }\n </span>\n }\n </div>\n `,\n})\nexport class NgbChipsComponent {\n @Input() items: NgbChip[] = [];\n @Input() removable = true;\n @Input() ariaLabel?: string;\n @Input() removeLabel?: string;\n\n @Output() remove = new EventEmitter<NgbChip>();\n\n trackById = (_: number, item: NgbChip) => item.id;\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgbTypeaheadItem, NgbTypeaheadI18n } from './typeahead.types';\nimport { NgbChipsComponent } from '../../../chips/src/chips/chips.component';\n\n@Component({\n selector: 'ngb-typeahead',\n standalone: true,\n imports: [CommonModule, NgbChipsComponent],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbTypeaheadComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\n `\n :host {\n display: block;\n }\n\n .typeahead-root {\n position: relative;\n }\n\n .typeahead-chips-control {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 0.35rem;\n min-height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n }\n\n .typeahead-chips-control input {\n border: 0;\n outline: 0;\n flex: 1 1 9rem;\n min-width: 6rem;\n padding: 0;\n margin: 0;\n background: transparent;\n }\n\n .typeahead-chips-control input:focus {\n outline: 0;\n box-shadow: none;\n }\n\n .typeahead-panel {\n position: absolute;\n top: calc(100% + 0.25rem);\n left: 0;\n right: 0;\n z-index: 1050;\n max-height: 240px;\n overflow: auto;\n\n opacity: 0;\n transform: translateY(-0.25rem);\n pointer-events: none;\n transition:\n opacity 120ms ease,\n transform 120ms ease;\n }\n\n .typeahead-panel.show {\n opacity: 1;\n transform: translateY(0);\n pointer-events: auto;\n }\n\n .typeahead-item {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n }\n .typeahead-item-checkbox {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1.15rem;\n height: 1.15rem;\n }\n `,\n ],\n template: `\n <div class=\"typeahead-root\">\n <div class=\"input-group mb-2\">\n @if (chips && multiSelect) {\n <div class=\"form-control typeahead-chips-control\" (click)=\"disabled ? null : focusInput()\">\n <ngb-chips\n [items]=\"selected\"\n [removable]=\"true\"\n (remove)=\"removeSelected($event)\"\n ariaLabel=\"Selected items\"\n ></ngb-chips>\n <input\n #inputEl\n type=\"text\"\n [disabled]=\"disabled\"\n [attr.placeholder]=\"selected.length ? '' : (i18n?.placeholder || 'Type to search')\"\n [value]=\"query\"\n (input)=\"onNativeInput($event)\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputBlur($event)\"\n (keydown)=\"onKeydown($event)\"\n (keyup)=\"onKeyup($event)\"\n aria-autocomplete=\"list\"\n role=\"combobox\"\n [attr.aria-expanded]=\"overlayVisible\"\n [attr.aria-controls]=\"overlayId\"\n [attr.aria-activedescendant]=\"activeDescendantId\"\n />\n </div>\n } @else {\n <input\n #inputEl\n type=\"text\"\n class=\"form-control\"\n [disabled]=\"disabled\"\n [attr.placeholder]=\"i18n?.placeholder || 'Type to search'\"\n [value]=\"displayQuery\"\n (input)=\"onNativeInput($event)\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputBlur($event)\"\n (keydown)=\"onKeydown($event)\"\n (keyup)=\"onKeyup($event)\"\n aria-autocomplete=\"list\"\n role=\"combobox\"\n [attr.aria-expanded]=\"overlayVisible\"\n [attr.aria-controls]=\"overlayId\"\n [attr.aria-activedescendant]=\"activeDescendantId\"\n />\n }\n\n @if (showClearButton && (query || (!multiSelect && selected.length))) {\n <button\n type=\"button\"\n class=\"btn btn-outline-secondary\"\n (click)=\"onClearClick($event)\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"i18n?.clear || 'Clear'\"\n >\n ×\n </button>\n }\n\n @if (showDropdownButton) {\n <button\n type=\"button\"\n class=\"btn btn-outline-secondary\"\n (click)=\"onDropdownButtonClick($event)\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"i18n?.dropdownButtonLabel || 'Toggle suggestions'\"\n >\n ▾\n </button>\n }\n </div>\n\n <div\n #scroller\n class=\"dropdown-menu w-100 p-0 typeahead-panel\"\n [class.show]=\"overlayVisible\"\n [id]=\"overlayId\"\n role=\"listbox\"\n (scroll)=\"onScroll($event)\"\n >\n @if (vScroll) {\n <div [style.height.px]=\"beforePadding\"></div>\n }\n\n @for (item of visible; track trackById($index, item); let idx = $index) {\n <button\n type=\"button\"\n class=\"dropdown-item\"\n [class.active]=\"idx === activeIndex\"\n [class.fw-semibold]=\"isSelected(item)\"\n [attr.aria-selected]=\"isSelected(item)\"\n [attr.id]=\"getOptionId(idx)\"\n (click)=\"selectItem(item)\"\n [disabled]=\"item.disabled\"\n >\n <div class=\"typeahead-item\">\n @if (multiSelect) {\n <span class=\"typeahead-item-checkbox\">\n <input\n type=\"checkbox\"\n class=\"form-check-input m-0\"\n [checked]=\"isSelected(item)\"\n [disabled]=\"item.disabled\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n />\n </span>\n }\n @if (resolvedItemTemplate; as tpl) {\n <ng-container\n [ngTemplateOutlet]=\"tpl\"\n [ngTemplateOutletContext]=\"{\n $implicit: item,\n item: item,\n query: query,\n selected: isSelected(item),\n index: idx\n }\"\n ></ng-container>\n } @else {\n <span>{{ item.label }}</span>\n }\n </div>\n </button>\n }\n\n @if (vScroll) {\n <div [style.height.px]=\"afterPadding\"></div>\n }\n\n @if (showNoResults) {\n <div class=\"dropdown-item text-muted text-center\">\n {{ i18n?.noResults || 'No results' }}\n </div>\n }\n </div>\n\n @if (multiSelect && selected.length) {\n <div class=\"mt-2 small text-muted\">\n {{ selectionSummary }}\n <button type=\"button\" class=\"btn btn-link btn-sm ps-1\" (click)=\"clearSelection()\">\n {{ i18n?.clearSelection || 'Clear' }}\n </button>\n </div>\n }\n </div>\n `,\n})\nexport class NgbTypeaheadComponent implements AfterViewInit, OnChanges, OnDestroy, ControlValueAccessor {\n @Input() data: NgbTypeaheadItem[] = [];\n @Input() debounceTime = 200;\n @Input() characterTyped = 1;\n @Input() limit = 10;\n @Input() selectExact = false;\n @Input() multiSelect = false;\n @Input() matchSelection = false;\n @Input() showDropdownButton = false;\n @Input() showClearButton = false;\n @Input() updateOnBlur = false;\n @Input() updateOnTab = true;\n @Input() separator: string | string[] = ',';\n @Input() chips = false;\n @Input() vScroll = false;\n @Input() vItemSize = 40;\n // `TemplateRef` types can become non-assignable in monorepo setups with multiple Angular installations.\n // Using `any` keeps the API flexible while still supporting Angular templates at runtime.\n @Input() itemTemplate?: any;\n @Input() i18n?: NgbTypeaheadI18n;\n\n @ContentChild(TemplateRef) projectedItemTemplate?: any;\n\n @Output() completeMethod = new EventEmitter<string>();\n @Output() onSelect = new EventEmitter<NgbTypeaheadItem>();\n @Output() onUnselect = new EventEmitter<NgbTypeaheadItem>();\n @Output() onAdd = new EventEmitter<NgbTypeaheadItem>();\n @Output() onFocus = new EventEmitter<FocusEvent>();\n @Output() onBlur = new EventEmitter<FocusEvent>();\n @Output() onDropdownClick = new EventEmitter<MouseEvent>();\n @Output() onClear = new EventEmitter<Event>();\n @Output() onInputKeydown = new EventEmitter<KeyboardEvent>();\n @Output() onKeyUp = new EventEmitter<KeyboardEvent>();\n @Output() onShow = new EventEmitter<Event>();\n @Output() onHide = new EventEmitter<Event>();\n @Output() onLazyLoad = new EventEmitter<void>();\n\n @Output() selectedItems = new EventEmitter<NgbTypeaheadItem[]>();\n @Output() selectionChange = new EventEmitter<NgbTypeaheadItem[]>();\n @Output() onChange = new EventEmitter<string>();\n @Output() onScrollEvent = new EventEmitter<void>(); // legacy, kept for compatibility\n\n @ViewChild('scroller', { static: true }) scroller!: ElementRef<HTMLElement>;\n @ViewChild('inputEl') inputEl?: ElementRef<HTMLInputElement>;\n @ViewChildren('itemButton') itemButtons?: QueryList<ElementRef<HTMLButtonElement>>;\n\n disabled = false;\n query = '';\n filtered: NgbTypeaheadItem[] = [];\n visible: NgbTypeaheadItem[] = [];\n selected: NgbTypeaheadItem[] = [];\n overlayVisible = false;\n private openedByDropdown = false;\n private hasSearched = false;\n activeIndex = -1;\n private inputFocused = false;\n private pointerDownInside = false;\n private lastFilterTerm = '';\n private keepOpenOnEmpty = false;\n readonly overlayId = `ngb-typeahead-overlay-${Math.random().toString(36).slice(2)}`;\n\n viewportHeight = 240;\n itemHeight = 40;\n beforePadding = 0;\n afterPadding = 0;\n private viewportStartIndex = 0;\n private debounceId?: ReturnType<typeof setTimeout>;\n\n private onControlChange: (value: any) => void = () => {};\n private onControlTouched: () => void = () => {};\n private controlValue: any = null;\n\n ngAfterViewInit(): void {\n // do not open overlay on init; just ensure viewport state is consistent\n this.applyFilter('');\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['vScroll'] || changes['vItemSize']) {\n const nextSize = Number(this.vItemSize);\n this.itemHeight = Number.isFinite(nextSize) && nextSize > 0 ? nextSize : 40;\n this.updateViewport(this.scroller?.nativeElement.scrollTop || 0);\n }\n if (changes['data'] && !changes['data'].firstChange) {\n this.applyFilter(this.query);\n }\n if (changes['data'] && this.controlValue != null && !this.inputFocused && !this.overlayVisible) {\n this.applyControlValue(this.controlValue);\n }\n }\n\n ngOnDestroy(): void {\n if (this.debounceId) {\n clearTimeout(this.debounceId);\n }\n }\n\n constructor(\n private host: ElementRef<HTMLElement>,\n private cdr: ChangeDetectorRef,\n ) {}\n\n @HostListener('document:mousedown', ['$event'])\n onDocumentMouseDown(event: MouseEvent) {\n const target = event.target as Node | null;\n if (!target) return;\n\n const inside = this.host.nativeElement.contains(target);\n this.pointerDownInside = inside;\n if (inside) return;\n if (!this.overlayVisible) return;\n\n this.commitInputOnClose();\n this.hideOverlay(event);\n }\n\n @HostListener('document:focusin', ['$event'])\n onDocumentFocusIn(event: FocusEvent) {\n if (!this.overlayVisible) return;\n const target = event.target as Node | null;\n if (!target) return;\n if (this.host.nativeElement.contains(target)) return;\n\n this.commitInputOnClose();\n this.hideOverlay(event);\n }\n\n get activeDescendantId(): string | null {\n if (!this.overlayVisible) return null;\n if (this.activeIndex < 0 || this.activeIndex >= this.visible.length) return null;\n return this.getOptionId(this.activeIndex);\n }\n\n get showNoResults(): boolean {\n return this.overlayVisible && this.hasSearched && this.filtered.length === 0;\n }\n\n get displayQuery(): string {\n if (!this.multiSelect) {\n return this.query;\n }\n if (this.chips) {\n return this.query;\n }\n const term = (this.query || '').trim();\n const prefix = this.selected.map((s) => s.label).join(', ');\n if (!prefix) {\n return this.query;\n }\n if (term) {\n return `${prefix}, ${term}`;\n }\n return prefix;\n }\n\n get selectionSummary() {\n if (!this.selected.length) return '';\n if (this.selected.length <= 2) {\n return this.selected.map((s) => s.label).join(', ');\n }\n const firstTwo = this.selected.slice(0, 2).map((s) => s.label).join(', ');\n return `${firstTwo} (+${this.selected.length - 2})`;\n }\n\n get resolvedItemTemplate(): any {\n return this.itemTemplate ?? this.projectedItemTemplate;\n }\n\n writeValue(value: any): void {\n this.controlValue = value;\n this.applyControlValue(value);\n }\n\n private applyControlValue(value: any): void {\n if (this.multiSelect) {\n const asArray = Array.isArray(value) ? value : value == null ? [] : [value];\n const next = asArray.map((v) => this.coerceToItem(v)).filter(Boolean) as NgbTypeaheadItem[];\n const seen = new Set<string | number>();\n this.selected = next.filter((i) => (seen.has(i.id) ? false : (seen.add(i.id), true)));\n this.query = '';\n this.keepOpenOnEmpty = false;\n this.applyFilter('');\n this.cdr.markForCheck();\n return;\n }\n\n if (value == null) {\n this.selected = [];\n this.query = '';\n this.keepOpenOnEmpty = false;\n this.applyFilter('');\n this.cdr.markForCheck();\n return;\n }\n\n const item = this.coerceToItem(value);\n if (!item) return;\n this.selected = [item];\n this.query = item.label;\n if (this.inputEl?.nativeElement) {\n this.inputEl.nativeElement.value = item.label;\n }\n this.keepOpenOnEmpty = false;\n this.applyFilter(this.query);\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: any): void {\n this.onControlChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onControlTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n if (isDisabled) {\n this.hideOverlay();\n }\n this.cdr.markForCheck();\n }\n\n onInput(value: string) {\n if (this.disabled) return;\n this.keepOpenOnEmpty = false;\n const trimmed = (value ?? '').trim();\n if (!this.multiSelect && this.selected.length) {\n const selectedLabel = (this.selected[0]?.label ?? '').trim();\n if (trimmed.toLowerCase() !== selectedLabel.toLowerCase()) {\n const previous = this.selected[0];\n this.selected = [];\n this.selectedItems.emit(this.selected);\n this.selectionChange.emit(this.selected);\n if (previous) {\n this.onUnselect.emit(previous);\n }\n this.propagateControlValue();\n }\n }\n\n if (this.chips && this.multiSelect) {\n const tokens = this.splitBySeparators(value);\n if (tokens.tokensToAdd.length) {\n for (const token of tokens.tokensToAdd) {\n this.addToken(token);\n }\n }\n this.query = tokens.remaining;\n } else {\n this.query = value;\n }\n this.onChange.emit(value);\n // Input events imply the user is interacting with the field; treat as focused so the overlay can open immediately.\n this.inputFocused = true;\n if (this.debounceId) clearTimeout(this.debounceId);\n if (this.debounceTime <= 0) {\n this.applyFilter(value);\n this.completeMethod.emit(value);\n } else {\n this.debounceId = setTimeout(() => {\n this.applyFilter(value);\n this.completeMethod.emit(value);\n this.cdr.markForCheck();\n }, this.debounceTime);\n }\n }\n\n onNativeInput(event: Event) {\n const target = event.target as HTMLInputElement | null;\n const value = target?.value ?? '';\n if (this.multiSelect && !this.chips && this.selected.length) {\n const prefix = this.selected.map((s) => s.label).join(', ');\n const normalizedPrefix = prefix.trim();\n if (normalizedPrefix && value.toLowerCase().startsWith(normalizedPrefix.toLowerCase())) {\n let rest = value.slice(normalizedPrefix.length);\n rest = rest.replace(/^[\\s,]+/, '');\n this.onInput(rest);\n return;\n }\n }\n this.onInput(value);\n }\n\n onKeydown(event: KeyboardEvent) {\n if (this.disabled) return;\n this.onInputKeydown.emit(event);\n if (this.chips && this.multiSelect && event.key === 'Tab' && this.updateOnTab) {\n event.preventDefault();\n this.addToken((this.query || '').trim());\n this.focusInput();\n return;\n }\n if (event.key === 'Tab' && this.overlayVisible) {\n const active = this.visible[this.activeIndex];\n if (active) {\n this.selectItem(active);\n this.hideOverlay(event);\n }\n return;\n }\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n this.moveActive(event.key === 'ArrowDown' ? 1 : -1);\n } else if (event.key === 'Home') {\n if (this.overlayVisible) {\n event.preventDefault();\n this.setActiveGlobalIndex(0);\n }\n } else if (event.key === 'End') {\n if (this.overlayVisible) {\n event.preventDefault();\n this.setActiveGlobalIndex(this.filtered.length - 1);\n }\n } else if (event.key === 'Enter') {\n event.preventDefault();\n const active = this.visible[this.activeIndex] || this.visible[0];\n if (active) {\n this.selectItem(active);\n this.hideOverlay(event);\n }\n } else if (event.key === 'Escape') {\n if (this.overlayVisible) {\n event.preventDefault();\n this.hideOverlay(event);\n }\n }\n }\n\n onKeyup(event: KeyboardEvent) {\n this.onKeyUp.emit(event);\n }\n\n onInputFocus(event: FocusEvent) {\n if (this.disabled) return;\n this.onFocus.emit(event);\n this.inputFocused = true;\n if (this.multiSelect && !this.overlayVisible) {\n // When multi-select is displaying the selection summary, start searching with a clean query.\n this.query = '';\n // After a multi-select session, re-opening the field should show the list again even with an empty query.\n if (!this.chips && this.selected.length) {\n this.keepOpenOnEmpty = true;\n this.applyFilter('');\n this.activatePreferredOption();\n return;\n }\n }\n // Opening behavior: only show overlay when threshold met, or dropdown button explicitly used.\n if (this.query.length >= this.characterTyped) {\n this.showOverlay(event);\n }\n }\n\n onInputBlur(event: FocusEvent) {\n this.onBlur.emit(event);\n this.onControlTouched();\n this.inputFocused = false;\n // Do not close on blur directly: scrolling/clicking within the overlay can blur the input.\n // Closing/commit is handled by outside click (document:mousedown) and focus moving outside (document:focusin).\n\n if (this.chips && this.multiSelect && this.updateOnBlur) {\n this.addToken((this.query || '').trim());\n }\n }\n\n onScroll(event: Event) {\n const target = event.target as HTMLElement;\n const scrollTop = target.scrollTop;\n this.onScrollEvent.emit();\n this.updateViewport(scrollTop);\n\n const remaining = target.scrollHeight - (target.scrollTop + target.clientHeight);\n if (remaining < 48) {\n this.onLazyLoad.emit();\n }\n }\n\n selectItem(item: NgbTypeaheadItem) {\n if (this.disabled) return;\n if (!item || item.disabled) return;\n this.validateItem(item);\n if (this.multiSelect) {\n const exists = this.selected.find((s) => s.id === item.id);\n if (exists) {\n this.selected = this.selected.filter((s) => s.id !== item.id);\n this.onUnselect.emit(item);\n } else {\n this.selected = [...this.selected, item];\n this.onSelect.emit(item);\n }\n this.propagateControlValue();\n // After selecting/unselecting, show the chosen values in the input and keep the panel open.\n this.keepOpenOnEmpty = true;\n if (this.chips) {\n this.query = '';\n } else {\n this.query = '';\n }\n this.applyFilter('');\n } else {\n if (this.selected.length && this.selected[0]?.id !== item.id) {\n this.onUnselect.emit(this.selected[0]);\n }\n this.selected = [item];\n this.query = item.label;\n if (this.inputEl?.nativeElement) {\n this.inputEl.nativeElement.value = item.label;\n }\n this.onSelect.emit(item);\n this.propagateControlValue();\n this.hideOverlay();\n }\n this.selectedItems.emit(this.selected);\n this.selectionChange.emit(this.selected);\n this.cdr.markForCheck();\n }\n\n focusInput() {\n this.inputEl?.nativeElement?.focus();\n }\n\n removeSelected(item: NgbTypeaheadItem) {\n if (this.disabled) return;\n if (!item) return;\n const exists = this.selected.find((s) => s.id === item.id);\n if (!exists) return;\n this.selected = this.selected.filter((s) => s.id !== item.id);\n this.onUnselect.emit(item);\n this.propagateControlValue();\n this.selectedItems.emit(this.selected);\n this.selectionChange.emit(this.selected);\n this.cdr.markForCheck();\n }\n\n clearSelection() {\n const previous = [...this.selected];\n this.selected = [];\n this.selectedItems.emit(this.selected);\n this.selectionChange.emit(this.selected);\n if (!this.multiSelect && previous[0]) {\n this.onUnselect.emit(previous[0]);\n }\n this.propagateControlValue();\n this.cdr.markForCheck();\n }\n\n isSelected(item: NgbTypeaheadItem) {\n return this.selected.some((s) => s.id === item.id);\n }\n\n trackById = (_: number, item: NgbTypeaheadItem) => item.id;\n\n getOptionId(index: number): string {\n return `${this.overlayId}-opt-${index}`;\n }\n\n onDropdownButtonClick(event: MouseEvent) {\n if (this.disabled) return;\n this.onDropdownClick.emit(event);\n if (this.overlayVisible) {\n this.hideOverlay(event);\n this.openedByDropdown = false;\n } else {\n this.openedByDropdown = true;\n if (this.scroller?.nativeElement) {\n this.scroller.nativeElement.scrollTop = 0;\n }\n this.showOverlay(event, true);\n // Show all items when the dropdown button is used, regardless of current query.\n this.applyFilter('');\n this.activatePreferredOption();\n }\n this.inputEl?.nativeElement.focus();\n this.cdr.markForCheck();\n }\n\n onClearClick(event: Event) {\n if (this.disabled) return;\n this.onClear.emit(event);\n this.query = '';\n this.clearSelection();\n this.applyFilter('');\n this.hideOverlay(event);\n this.inputEl?.nativeElement.focus();\n this.cdr.markForCheck();\n }\n\n private applyFilter(value: string) {\n const term = (value || '').toLowerCase();\n if (term !== this.lastFilterTerm) {\n this.lastFilterTerm = term;\n if (this.scroller?.nativeElement) {\n this.scroller.nativeElement.scrollTop = 0;\n }\n }\n const meetsThreshold = term.length >= this.characterTyped || this.openedByDropdown || (this.multiSelect && this.keepOpenOnEmpty);\n this.hasSearched = term.length >= this.characterTyped || this.openedByDropdown;\n\n const base = meetsThreshold ? this.data.filter((d) => (d.label || '').toLowerCase().includes(term)) : [];\n const limited = this.limit ? base.slice(0, this.limit) : base;\n this.filtered = limited;\n if (this.selectExact && limited.length === 1) {\n this.selectItem(limited[0]);\n }\n this.updateViewport(this.scroller?.nativeElement.scrollTop || 0);\n\n if (meetsThreshold && !this.overlayVisible && (this.inputFocused || this.openedByDropdown)) {\n this.showOverlay();\n }\n if (!meetsThreshold && this.overlayVisible && !this.openedByDropdown) {\n this.hideOverlay();\n }\n this.cdr.markForCheck();\n }\n\n private updateViewport(scrollTop: number) {\n if (!this.vScroll) {\n this.beforePadding = 0;\n this.afterPadding = 0;\n this.visible = this.filtered;\n this.viewportStartIndex = 0;\n this.activeIndex = this.visible.length ? Math.min(this.activeIndex, this.visible.length - 1) : -1;\n return;\n }\n const total = this.filtered.length;\n const visibleCount = Math.ceil(this.viewportHeight / this.itemHeight) + 2;\n const start = Math.max(Math.floor(scrollTop / this.itemHeight), 0);\n const end = Math.min(start + visibleCount, total);\n this.beforePadding = start * this.itemHeight;\n this.afterPadding = Math.max(total - end, 0) * this.itemHeight;\n this.visible = this.filtered.slice(start, end);\n this.viewportStartIndex = start;\n this.activeIndex = this.visible.length ? Math.min(this.activeIndex, this.visible.length - 1) : -1;\n }\n\n private activatePreferredOption() {\n if (!this.filtered.length || !this.scroller?.nativeElement) {\n this.activeIndex = -1;\n return;\n }\n\n const trimmed = (this.query || '').trim().toLowerCase();\n let preferredIndex = -1;\n if (trimmed) {\n preferredIndex = this.filtered.findIndex((d) => (d.label || '').trim().toLowerCase() === trimmed);\n }\n if (preferredIndex === -1 && this.selected.length) {\n const firstSelected = this.selected[0];\n preferredIndex = this.filtered.findIndex((d) => d.id === firstSelected.id);\n }\n\n if (preferredIndex === -1) {\n preferredIndex = 0;\n }\n\n const scrollTop = Math.max(0, preferredIndex * this.itemHeight - this.itemHeight);\n this.scroller.nativeElement.scrollTop = scrollTop;\n this.updateViewport(scrollTop);\n\n const start = Math.max(Math.floor(scrollTop / this.itemHeight), 0);\n this.activeIndex = Math.max(0, Math.min(preferredIndex - start, this.visible.length - 1));\n }\n\n private moveActive(direction: 1 | -1) {\n if (!this.overlayVisible) {\n this.showOverlay();\n }\n if (!this.filtered.length) return;\n const currentGlobal = this.activeGlobalIndex();\n const total = this.filtered.length;\n const nextGlobal = currentGlobal < 0 ? 0 : (currentGlobal + direction + total) % total;\n this.setActiveGlobalIndex(nextGlobal);\n }\n\n private activeGlobalIndex(): number {\n if (this.activeIndex < 0) return -1;\n return this.viewportStartIndex + this.activeIndex;\n }\n\n private setActiveGlobalIndex(globalIndex: number) {\n if (!this.filtered.length) {\n this.activeIndex = -1;\n return;\n }\n const clamped = Math.max(0, Math.min(globalIndex, this.filtered.length - 1));\n const scroller = this.scroller?.nativeElement;\n if (!scroller) {\n this.activeIndex = 0;\n return;\n }\n\n const itemTop = clamped * this.itemHeight;\n const itemBottom = itemTop + this.itemHeight;\n const viewTop = scroller.scrollTop;\n const viewBottom = viewTop + (scroller.clientHeight || this.viewportHeight);\n\n let nextScrollTop = viewTop;\n if (itemTop < viewTop) {\n nextScrollTop = itemTop;\n } else if (itemBottom > viewBottom) {\n nextScrollTop = Math.max(0, itemBottom - (scroller.clientHeight || this.viewportHeight));\n }\n\n if (nextScrollTop !== viewTop) {\n scroller.scrollTop = nextScrollTop;\n }\n\n this.updateViewport(scroller.scrollTop);\n this.activeIndex = Math.max(0, Math.min(clamped - this.viewportStartIndex, this.visible.length - 1));\n this.cdr.markForCheck();\n }\n\n private validateItem(item: NgbTypeaheadItem) {\n if (item.id == null) {\n throw new Error('Typeahead items must include an id.');\n }\n }\n\n private showOverlay(event?: Event, openedByDropdown = false) {\n this.openedByDropdown = openedByDropdown;\n if (this.overlayVisible) return;\n this.overlayVisible = true;\n this.activeIndex = this.visible.length ? 0 : -1;\n this.onShow.emit(event ?? new Event('show'));\n this.cdr.markForCheck();\n }\n\n private hideOverlay(event?: Event) {\n if (!this.overlayVisible) return;\n this.overlayVisible = false;\n this.openedByDropdown = false;\n this.activeIndex = -1;\n this.onHide.emit(event ?? new Event('hide'));\n this.cdr.markForCheck();\n }\n\n private commitInputOnClose() {\n const trimmed = (this.query || '').trim();\n if (!trimmed) {\n return;\n }\n\n if (this.matchSelection) {\n const exact = this.data.find((d) => (d.label || '').toLowerCase() === trimmed.toLowerCase());\n if (!exact) {\n this.query = '';\n if (!this.multiSelect) {\n this.clearSelection();\n }\n } else if (!this.multiSelect) {\n this.selected = [exact];\n this.selectionChange.emit(this.selected);\n this.selectedItems.emit(this.selected);\n this.propagateControlValue();\n }\n return;\n }\n\n if (this.updateOnBlur && !this.multiSelect && this.selected.length === 0) {\n const added: NgbTypeaheadItem = { id: trimmed, label: trimmed, value: trimmed };\n this.selected = [added];\n this.onAdd.emit(added);\n this.selectionChange.emit(this.selected);\n this.selectedItems.emit(this.selected);\n this.propagateControlValue();\n }\n }\n\n private splitBySeparators(value: string): { tokensToAdd: string[]; remaining: string } {\n const separators = Array.isArray(this.separator) ? this.separator : [this.separator];\n const safe = separators.filter((s) => s != null && `${s}`.length > 0).map((s) => `${s}`.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'));\n if (!safe.length) {\n return { tokensToAdd: [], remaining: value };\n }\n const regex = new RegExp(`(?:${safe.join('|')})`);\n if (!regex.test(value)) {\n return { tokensToAdd: [], remaining: value };\n }\n const parts = value.split(new RegExp(`(?:${safe.join('|')})`, 'g')).map((p) => p.trim());\n const endsWithSeparator = separators.some((sep) => value.endsWith(sep));\n const tokensToAdd = (endsWithSeparator ? parts : parts.slice(0, -1)).filter(Boolean);\n const remaining = endsWithSeparator ? '' : (parts[parts.length - 1] || '');\n return { tokensToAdd, remaining };\n }\n\n private addToken(raw: string) {\n const token = (raw || '').trim();\n if (!this.chips || !this.multiSelect) return;\n if (!token) return;\n\n const match = this.data.find((d) => (d.label || '').trim().toLowerCase() === token.toLowerCase());\n const item: NgbTypeaheadItem = match ?? { id: token, label: token, value: token };\n\n if (this.matchSelection && !match) {\n this.query = '';\n return;\n }\n\n if (this.selected.some((s) => s.id === item.id)) {\n this.query = '';\n return;\n }\n\n this.selected = [...this.selected, item];\n this.onAdd.emit(item);\n this.propagateControlValue();\n this.selectedItems.emit(this.selected);\n this.selectionChange.emit(this.selected);\n this.query = '';\n this.keepOpenOnEmpty = true;\n this.applyFilter('');\n }\n\n private propagateControlValue() {\n if (this.multiSelect) {\n const next = this.selected.map((item) => (item.value !== undefined ? item.value : item));\n this.controlValue = next;\n this.onControlChange(next);\n return;\n }\n const first = this.selected[0];\n const next = first ? (first.value !== undefined ? first.value : first) : null;\n this.controlValue = next;\n this.onControlChange(next);\n }\n\n private coerceToItem(value: any): NgbTypeaheadItem | null {\n if (value == null) return null;\n if (typeof value === 'object' && (value as NgbTypeaheadItem).id != null && (value as NgbTypeaheadItem).label != null) {\n return value as NgbTypeaheadItem;\n }\n const match = this.data.find((d) => d.value === value || d.id === value || (d.label || '').toLowerCase() === `${value}`.toLowerCase());\n if (match) return match;\n return { id: `${value}`, label: `${value}`, value };\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n Output,\n EventEmitter,\n QueryList,\n ViewChildren,\n ElementRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgbTreeNode, NgbTreeType, NgbTreeI18n } from './tree.types';\n\n@Component({\n selector: 'ngb-tree',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"d-flex gap-2 mb-2\">\n <button type=\"button\" class=\"btn btn-sm btn-outline-secondary\" (click)=\"expandAllNodes()\" [attr.aria-label]=\"i18n?.expandAll || 'Expand all'\">\n {{ i18n?.expandAll || 'Expand all' }}\n </button>\n <button type=\"button\" class=\"btn btn-sm btn-outline-secondary\" (click)=\"collapseAllNodes()\" [attr.aria-label]=\"i18n?.collapseAll || 'Collapse all'\">\n {{ i18n?.collapseAll || 'Collapse all' }}\n </button>\n </div>\n\n <ul class=\"list-unstyled mb-0\" role=\"tree\" [attr.aria-label]=\"i18n?.treeLabel || 'Tree'\">\n @for (node of nodes; track trackById($index, node); let i = $index) {\n <ng-container *ngTemplateOutlet=\"renderNode; context: { $implicit: node, level: 1, index: i }\"></ng-container>\n }\n </ul>\n\n <ng-template #renderNode let-node let-level=\"level\" let-index=\"index\">\n <li\n class=\"d-flex align-items-start\"\n role=\"treeitem\"\n [attr.aria-expanded]=\"hasChildren(node) ? !!node.expanded : null\"\n [attr.aria-level]=\"level\"\n >\n @if (hasChildren(node)) {\n <button\n #nodeBtn\n type=\"button\"\n class=\"btn btn-sm px-1\"\n (click)=\"toggleNode(node)\"\n (keydown)=\"onNodeKeydown($event, node)\"\n [attr.aria-label]=\"(node.expanded ? i18n?.collapse || 'Collapse' : i18n?.expand || 'Expand') + ' ' + node.label\"\n >\n @if (type === 'json') {\n <span class=\"bi\" [ngClass]=\"node.expanded ? minusIcon : plusIcon\" aria-hidden=\"true\"></span>\n } @else {\n <span class=\"bi\" [ngClass]=\"node.expanded ? collapseIcon : expandIcon\" aria-hidden=\"true\"></span>\n }\n </button>\n } @else {\n <span class=\"d-inline-block px-1\" style=\"width: 1.5rem;\"></span>\n }\n\n <label class=\"form-check d-inline-flex align-items-center gap-2 flex-grow-1 mb-0\">\n @if (showCheckbox) {\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n [checked]=\"!!node.selected\"\n [disabled]=\"node.disabled\"\n (change)=\"toggleSelection(node, $event.target.checked)\"\n [attr.aria-label]=\"(i18n?.select || 'Select') + ' ' + node.label\"\n />\n }\n <span class=\"form-check-label\">{{ node.label }}</span>\n </label>\n </li>\n\n @if (node.expanded && hasChildren(node)) {\n <ul\n class=\"list-unstyled ms-4\"\n role=\"group\"\n >\n @for (child of node.children; track trackById($index, child); let ci = $index) {\n <ng-container *ngTemplateOutlet=\"renderNode; context: { $implicit: child, level: level + 1, index: ci }\"></ng-container>\n }\n </ul>\n }\n </ng-template>\n `,\n})\nexport class NgbTreeComponent {\n @Input() nodes: NgbTreeNode[] = [];\n @Input() type: NgbTreeType = 'text';\n @Input() showCheckbox = false;\n @Input() i18n?: NgbTreeI18n;\n @Input() expandIcon = 'bi-caret-right-fill';\n @Input() collapseIcon = 'bi-caret-down-fill';\n @Input() plusIcon = 'bi-file-plus-fill';\n @Input() minusIcon = 'bi-file-minus-fill';\n\n @Output() expand = new EventEmitter<NgbTreeNode>();\n @Output() collapse = new EventEmitter<NgbTreeNode>();\n @Output() expandAll = new EventEmitter<void>();\n @Output() collapseAll = new EventEmitter<void>();\n @Output() selectionChange = new EventEmitter<NgbTreeNode[]>();\n\n @ViewChildren('nodeBtn', { read: ElementRef }) nodeButtons!: QueryList<ElementRef<HTMLButtonElement>>;\n\n trackById = (_: number, node: NgbTreeNode) => node.id;\n\n hasChildren(node: NgbTreeNode) {\n return Array.isArray(node.children) && node.children.length > 0;\n }\n\n toggleNode(node: NgbTreeNode) {\n if (!this.hasChildren(node)) return;\n node.expanded = !node.expanded;\n node.expanded ? this.expand.emit(node) : this.collapse.emit(node);\n }\n\n toggleSelection(node: NgbTreeNode, value: boolean) {\n node.selected = value;\n this.selectionChange.emit(this.collectSelection(this.nodes));\n }\n\n expandAllNodes() {\n this.setExpanded(this.nodes, true);\n this.expandAll.emit();\n }\n\n collapseAllNodes() {\n this.setExpanded(this.nodes, false);\n this.collapseAll.emit();\n }\n\n onNodeKeydown(event: KeyboardEvent, node: NgbTreeNode) {\n const key = event.key;\n const target = event.target as HTMLElement;\n if (key === 'Enter' || key === ' ') {\n event.preventDefault();\n this.toggleNode(node);\n } else if (key === 'ArrowRight') {\n if (this.hasChildren(node) && !node.expanded) {\n event.preventDefault();\n node.expanded = true;\n this.expand.emit(node);\n }\n } else if (key === 'ArrowLeft') {\n if (this.hasChildren(node) && node.expanded) {\n event.preventDefault();\n node.expanded = false;\n this.collapse.emit(node);\n }\n } else if (key === 'ArrowDown' || key === 'ArrowUp') {\n event.preventDefault();\n this.focusSibling(target, key === 'ArrowDown' ? 1 : -1);\n }\n }\n\n private focusSibling(current: HTMLElement, direction: 1 | -1) {\n const buttons = this.nodeButtons?.toArray().map((b) => b.nativeElement) || [];\n const idx = buttons.indexOf(current as HTMLButtonElement);\n if (idx === -1) return;\n const next = buttons[idx + direction];\n next?.focus();\n }\n\n private setExpanded(nodes: NgbTreeNode[], expanded: boolean) {\n for (const n of nodes) {\n if (this.hasChildren(n)) {\n n.expanded = expanded;\n this.setExpanded(n.children || [], expanded);\n }\n }\n }\n\n private collectSelection(nodes: NgbTreeNode[], acc: NgbTreeNode[] = []): NgbTreeNode[] {\n for (const n of nodes) {\n if (n.selected) acc.push(n);\n if (this.hasChildren(n)) this.collectSelection(n.children!, acc);\n }\n return acc;\n }\n}\n","/// <reference path=\"./types/optional-peer-deps.d.ts\" />\nexport * from './datagrid';\nexport * from './drag-drop';\nexport * from './pagination';\nexport * from './stepper';\nexport * from './splitter';\nexport * from './typeahead';\nexport * from './tree';\nexport * from './chips';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i1.Datagrid","i1.NgbDndListDirective","i1.NgbDndItemDirective"],"mappings":"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"}
|