@angular-bootstrap/ngbootstrap 0.0.11 → 0.0.12
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/datagrid/src/directives/datagrid-templates.directive.ts","../../../src/pagination/src/pagination/pagination.component.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/datagrid/datagrid.component.ts","../../../src/datagrid/src/datagrid/datagrid.component.html","../../../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/drag-drop/src/directive/dnd-list.directive.ts","../../../src/drag-drop/src/directive/dnd-item.directive.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 { Directive, Input, TemplateRef } from '@angular/core';\nimport { AbstractControl, FormGroup } from '@angular/forms';\nimport { ColumnDef } from '../models/column-def';\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> { $implicit: AbstractControl | null; control: AbstractControl | null; col: ColumnDef<T>; }\nexport interface GlobalFilterCtx { $implicit: AbstractControl; }\n\n@Directive({ selector: 'ng-template[ngbCell]' })\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]' })\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]' })\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[ngbGlobalFilter]' })\nexport class NgbGlobalFilterTemplate {\n constructor(public readonly template: TemplateRef<GlobalFilterCtx>) {}\n}\n\n\n@Directive({ selector: 'ng-template[ngbRowDetail]' })\nexport class NgbRowDetailTemplate<T = any> {\n constructor(public readonly template: TemplateRef<{ $implicit: T; index: number }>) {}\n}\n\n\n/** Handy constant to import in consumer apps */\nexport const DATAGRID_TEMPLATE_DIRECTIVES = [\n NgbCellTemplate, NgbEditorTemplate, NgbFilterTemplate, NgbGlobalFilterTemplate, NgbRowDetailTemplate\n];\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'ngb-pagination',\n standalone: true,\n imports: [CommonModule],\n template: `\n <nav *ngIf=\"totalPages >= 1\" aria-label=\"Pagination\">\n <ul class=\"pagination pagination-sm justify-content-center mb-0\">\n <li class=\"page-item\" [class.disabled]=\"page === 1\">\n <button class=\"page-link\" type=\"button\" (click)=\"go(page - 1)\" aria-label=\"Previous\"> <span aria-hidden=\"true\">«</span> </button>\n </li>\n\n <li class=\"page-item\" *ngFor=\"let p of pages\" [class.active]=\"p === page\" [class.disabled]=\"p === '…'\">\n <span *ngIf=\"p === '…'\" class=\"page-link\">…</span>\n <button *ngIf=\"p !== '…'\" class=\"page-link\" type=\"button\" (click)=\"go(p)\">{{ p }}</button>\n </li>\n\n <li class=\"page-item\" [class.disabled]=\"page === totalPages\">\n <button class=\"page-link\" type=\"button\" (click)=\"go(page + 1)\" aria-label=\"Next\"> <span aria-hidden=\"true\">»</span> </button>\n </li>\n </ul>\n </nav>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgbPaginationComponent {\n @Input() page = 1;\n @Input() pageSize = 10;\n @Input() collectionSize = 0;\n @Input() maxSize = 5;\n @Output() pageChange = new EventEmitter<number>();\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 = Math.max(3, this.maxSize | 0);\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) { end = total; start = end - max + 1; }\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) {\n if (p < 1 || p > this.totalPages || p === this.page) return;\n this.pageChange.emit(p);\n }\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}","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('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}","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 { Component, Input, ChangeDetectionStrategy, EventEmitter, Output, inject, AfterContentInit, ContentChildren, QueryList, OnChanges, SimpleChanges, TemplateRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ColumnDef } from '../models/column-def';\nimport { FormsModule, ReactiveFormsModule, FormBuilder, FormGroup, Validators, AbstractControl, FormControl } from '@angular/forms';\nimport {\n NgbCellTemplate, NgbEditorTemplate, NgbFilterTemplate, NgbGlobalFilterTemplate,\n CellCtx, EditCtx, FilterCtx\n} from '../directives/datagrid-templates.directive';\nimport { ContentChild } from '@angular/core';\nimport { NgbRowDetailTemplate } from '../directives/datagrid-templates.directive';\nimport { NgbPaginationComponent } from '../../../pagination';\nimport { firstValueFrom, isObservable, Observable } from 'rxjs';\nimport { NgbDataGridExportOptions, NgbDataGridTheme, NgbDataGridResponsiveOptions } from '../datagrid.types';\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';\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;\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 imports: [CommonModule, FormsModule, NgbPaginationComponent, ReactiveFormsModule],\n styleUrls: ['./datagrid.component.scss'],\n providers: [\n { provide: PdfExportAdapter, useClass: JsPdfAdapter },\n { provide: ExcelExportAdapter, useClass: XlsxAdapter }\n ],\n standalone:true,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class Datagrid<T = any> implements AfterContentInit, OnChanges {\n /** Column definitions to render */\n @Input() columns: ColumnDef<T>[] = [];\n\n /** Row data to display */\n @Input() data: T[] = [];\n @Input() enableSorting = false;\n @Input() enableFiltering = false; // per-column + global\n @Input() enableGlobalFilter = false; // global search bar\n @Input() enablePagination = false;\n @Input() enableEdit = false;\n @Input() enableDelete = false;\n @Input() pageSizeOptions: number[] = [5, 10, 25, 50];\n\n @Input() enableAdd = false;\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 /** Accessible label for the global filter input. */\n @Input() globalFilterAriaLabel = 'Search all columns';\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 @Input() singleExpand = false; // accordion mode: one row expanded at a time\n @Input() exportOptions: NgbDataGridExportOptions = {\n enabled: false,\n type: 'both',\n pages: 'current',\n fileName: 'export'\n };\n\n @Input() theme: NgbDataGridTheme = 'bootstrap';\n @Input() responsive: NgbDataGridResponsiveOptions | boolean = false;\n @Input() trackBy?: NgbDatagridTrackByFn<T>;\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\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() filtersChange = new EventEmitter<{ global: string; columns: Record<string, string> }>();\n @Output() pageChange = new EventEmitter<{ page: number; pageSize: number }>();\n\n @ContentChild(NgbRowDetailTemplate) rowDetailTpl?: NgbRowDetailTemplate<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 sort: { active: Extract<keyof T, string> | null; direction: SortDir } = { active: null, direction: '' };\n // --- filtering\n globalFilter = '';\n filters: Record<string, string> = {}; // per-column text\n page = 1;\n @Input() pageSize = 10;\n\n /** Inline editing state */\n editingIndex: number | null = null; // index in `paged` view\n editForm: FormGroup = this.fb.group({});\n saveAttemptedEdit = 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\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 for (const col of this.columns) {\n if (col.editable === false) continue; // read-only columns not in form\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 // pipeline respects toggles\n get filtered(): T[] {\n if (!this.enableFiltering) return this.data ?? [];\n const src = this.data ?? [];\n return src.filter(r => {\n // per-column\n for (const col of this.columns) {\n if (!col.filterable) continue;\n const q = (this.filters[col.field as string] ?? '').toString().toLowerCase().trim();\n if (!q) continue;\n const cell = ((r as any)[col.field] ?? '').toString().toLowerCase().trim();\n if (!cell.includes(q)) return false;\n }\n // global\n if (this.enableGlobalFilter) {\n const g = (this.globalFilter ?? '').toString().toLowerCase().trim();\n if (g) return this.columns.some(c => ((r as any)[c.field] ?? '').toString().toLowerCase().includes(g));\n }\n return true;\n });\n }\n\n get sorted(): T[] {\n if (!this.enableSorting || !this.sort.active || !this.sort.direction) return this.filtered;\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 // pagination (filled in next step)\n\n get paged(): T[] {\n if (!this.enablePagination) return this.sorted;\n const start = (this.page - 1) * this.pageSize;\n return this.sorted.slice(start, start + this.pageSize);\n }\n\n // getters for template conditions / display\n get anyFilterable(): boolean {\n return this.enableFiltering && !!this.columns?.some(c => c.filterable);\n }\n\n get startIndex(): number { const total = this.sorted.length; return total ? (this.page - 1) * this.pageSize + 1 : 0; }\n get endIndex(): number { return Math.min(this.page * this.pageSize, this.sorted.length); }\n\n get detailColspan(): number {\n const actionCols = (this.enableEdit || this.enableDelete) ? 1 : 0;\n const caretCol = this.rowDetailTpl ? 1 : 0;\n return this.columns.length + actionCols + caretCol;\n }\n\n headerText(col: ColumnDef<T>): string {\n return (col.header ?? col.field ?? '').toString();\n }\n\n columnFilterAriaLabel(col: ColumnDef<T>): string {\n return `${this.headerText(col)} filter`;\n }\n\n inputAriaLabel(col: ColumnDef<T>): string {\n return this.headerText(col);\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 return `Sort by ${header}. Current sort ${state}.`;\n }\n\n exportAriaLabel(kind: 'pdf'|'excel'): string {\n return kind === 'pdf' ? this.exportPdfAriaLabel : this.exportExcelAriaLabel;\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.data.indexOf(row);\n }\n\n private rebuildFilterForm() {\n const group: Record<string, any> = {};\n for (const c of this.columns) if (c.filterable) group[c.field as string] = [''];\n this.filterForm = this.fb.group(group);\n\n this.filterForm.valueChanges.subscribe(v => {\n this.page = 1;\n this.filtersChange.emit({ global: this.globalFilterCtrl.value, columns: v as any });\n });\n this.globalFilterCtrl.valueChanges.subscribe(() => {\n this.page = 1;\n this.filtersChange.emit({ global: this.globalFilterCtrl.value, columns: this.filterForm.value as any });\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(NgbGlobalFilterTemplate) private globalTplQ!: QueryList<NgbGlobalFilterTemplate>;\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 globalTpl: NgbGlobalFilterTemplate | null = null;\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.columns.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.cellTpls = this.toRecord(this.cellTplQ);\n this.editTpls = this.toRecord(this.editTplQ);\n this.filterTpls = this.toRecord(this.filterTplQ);\n this.globalTpl = this.globalTplQ?.first ?? null;\n };\n rebuild();\n this.cellTplQ?.changes.subscribe(rebuild);\n this.editTplQ?.changes.subscribe(rebuild);\n this.filterTplQ?.changes.subscribe(rebuild);\n this.globalTplQ?.changes.subscribe(rebuild);\n }\n\n ngOnChanges(ch: SimpleChanges): void {\n if (ch['columns']) this.rebuildFilterForm();\n }\n\n private getRowId(rowIndex: number, row: T): any {\n return this.trackBy ? this.trackBy(rowIndex, row) : rowIndex;\n }\n\n private getEditService(): NgbDatagridEditService<T> {\n return this.editService ?? this.defaultEditService;\n }\n\n startAdd() {\n if (!this.enableAdd || this.addingNew) return;\n this.page = 1;\n this.editingIndex = 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 }\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.rowAdd.emit({ newRow });\n\n this.addingNew = false;\n this.addForm = this.fb.group({});;\n this.saveAttemptedNew = false;\n this.addDraftRowId = null;\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 }\n\n startEdit(i: number) {\n if (!this.enableEdit) return;\n this.addingNew = false;\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.data.indexOf(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 }\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.data.indexOf(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 service.update(this.data ?? [], updated, di, rowId);\n service.saveChanges(this.data ?? [], di, rowId, updated);\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 }\n\n cancelEdit(i: number) {\n const di = this.data.indexOf(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 }\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) better *ngFor performance\n trackRow = (index: number, row: T) => {\n const di = this.data.indexOf(row);\n const rowIndex = di >= 0 ? di : index;\n return this.trackBy ? this.trackBy(rowIndex, row) : rowIndex;\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.sortChange.emit({ active: this.sort.active, direction: this.sort.direction });\n }\n\n onGlobalFilterChange() {\n if (!this.enableFiltering || !this.enableGlobalFilter) return;\n this.page = 1;\n this.filtersChange.emit({ global: this.globalFilter, columns: { ...this.filters } });\n }\n\n onColumnFilterChange() {\n if (!this.enableFiltering) return;\n this.page = 1;\n this.filtersChange.emit({ global: this.globalFilter, columns: { ...this.filters } });\n }\n\n onPageChange(p: number) {\n this.page = p;\n this.pageChange.emit({ page: this.page, pageSize: this.pageSize });\n }\n\n onPageSizeChange() {\n this.page = 1;\n this.pageChange.emit({ page: this.page, pageSize: this.pageSize });\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.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.pageChange.emit({ page: this.page, pageSize: this.pageSize });\n }\n\n onPageSize(sz: number): void {\n this.pageSize = Number(sz) || this.pageSize;\n this.page = 1; // reset to first page when size changes\n this.pageChange.emit({ page: this.page, pageSize: this.pageSize });\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}\n","<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->\n<!-- eslint-disable @angular-eslint/template/click-events-have-key-events -->\n<div class=\"ngb-grid\" [attr.data-theme]=\"theme\" [class.ngb-responsive]=\"isResponsiveEnabled()\">\n <!-- Export toolbar -->\n <div class=\"d-flex justify-content-end mb-2\" *ngIf=\"exportOptions?.enabled\">\n <ng-container *ngIf=\"exportButtonTpl; else defaultExportBtns\"\n [ngTemplateOutlet]=\"exportButtonTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: triggerExport }\">\n </ng-container>\n\n <ng-template #defaultExportBtns>\n <button type=\"button\"\n class=\"btn btn-sm btn-outline-secondary me-2\"\n *ngIf=\"exportOptions.type === 'pdf' || exportOptions.type === 'both'\"\n [disabled]=\"exporting\"\n (click)=\"export('pdf')\"\n [attr.aria-label]=\"exportAriaLabel('pdf')\">\n Export to PDF\n </button>\n <button type=\"button\"\n class=\"btn btn-sm btn-outline-secondary\"\n *ngIf=\"exportOptions.type === 'excel' || exportOptions.type === 'both'\"\n [disabled]=\"exporting\"\n (click)=\"export('excel')\"\n [attr.aria-label]=\"exportAriaLabel('excel')\">\n Export to Excel\n </button>\n </ng-template>\n </div>\n <div class=\"d-flex justify-content-end mb-2\" *ngIf=\"enableAdd\">\n <button\n type=\"button\"\n class=\"btn btn-sm btn-primary\"\n (click)=\"startAdd()\"\n [disabled]=\"addingNew\"\n [attr.aria-label]=\"addButtonAriaLabel || addButtonText\"\n >\n {{ addButtonText }}\n </button>\n </div>\n <!-- Global filter -->\n <div class=\"mb-2\" *ngIf=\"enableFiltering && enableGlobalFilter\">\n <ng-container\n *ngIf=\"globalTpl; else defaultGlobalFilter\"\n [ngTemplateOutlet]=\"globalTpl?.template\"\n [ngTemplateOutletContext]=\"{ $implicit: globalFilterCtrl }\"\n >\n </ng-container>\n\n <ng-template #defaultGlobalFilter>\n <input\n type=\"search\"\n class=\"form-control form-control-sm\"\n placeholder=\"Search all columns...\"\n [formControl]=\"globalFilterCtrl\"\n [attr.aria-label]=\"globalFilterAriaLabel\"\n />\n </ng-template>\n </div>\n\n <table class=\"table table-bordered\"\n role=\"grid\"\n [attr.aria-readonly]=\"(enableEdit || enableAdd) ? 'false' : 'true'\">\n <thead class=\"thead-light\">\n <tr>\n <th *ngIf=\"rowDetailTpl\" style=\"width:1%\" scope=\"col\" aria-hidden=\"true\"></th>\n <th\n *ngFor=\"let col of columns\"\n [attr.data-title]=\"col.header\"\n [class.sortable]=\"enableSorting && col.sortable\"\n scope=\"col\"\n [attr.aria-sort]=\"enableSorting && col.sortable ? ariaSortFor(col.field) : null\"\n >\n <ng-container *ngIf=\"enableSorting && col.sortable; else plainHeader\">\n <button\n type=\"button\"\n class=\"btn btn-link p-0 text-start w-100\"\n (click)=\"toggleSort(col.field)\"\n [attr.aria-label]=\"sortButtonAriaLabel(col)\"\n >\n <span>{{ col.header }}</span>\n <span\n class=\"sort-indicator\"\n *ngIf=\"enableSorting && sort.active === col.field\"\n aria-hidden=\"true\"\n >\n {{\n sort.direction === 'asc'\n ? '▲'\n : sort.direction === 'desc'\n ? '▼'\n : ''\n }}\n </span>\n </button>\n </ng-container>\n <ng-template #plainHeader>\n <span>{{ col.header }}</span>\n </ng-template>\n </th>\n <th\n *ngIf=\"enableEdit || enableDelete\"\n class=\"text-center\"\n scope=\"col\"\n style=\"width: 1%\"\n >\n Actions\n </th>\n </tr>\n\n <!-- Per-column filters -->\n <tr *ngIf=\"anyFilterable\" [formGroup]=\"filterForm\">\n <th *ngFor=\"let col of columns\" [attr.data-title]=\"col.header\">\n <ng-container *ngIf=\"col.filterable\">\n <ng-container *ngIf=\"filterTpls[col.field] as ft; else defaultFilter\">\n <ng-container\n [ngTemplateOutlet]=\"ft.template\"\n [ngTemplateOutletContext]=\"{\n $implicit: filterForm.get(col.field),\n control: filterForm.get(col.field),\n col: col\n }\"\n >\n </ng-container>\n </ng-container>\n <ng-template #defaultFilter>\n <input\n type=\"text\"\n class=\"form-control form-control-sm\"\n [formControlName]=\"col.field\"\n [attr.aria-label]=\"columnFilterAriaLabel(col)\"\n />\n </ng-template>\n </ng-container>\n </th>\n <th *ngIf=\"enableEdit || enableDelete\"></th>\n </tr>\n </thead>\n\n <tbody>\n <!-- ADD NEW ROW -->\n <tr *ngIf=\"addingNew\" [formGroup]=\"addForm\">\n <!-- blank caret cell to keep alignment when detail column is present -->\n <td *ngIf=\"rowDetailTpl\"></td>\n\n <td *ngFor=\"let col of columns\" [attr.data-title]=\"col.header\">\n <ng-container [ngSwitch]=\"col.type\">\n <!-- boolean -->\n <div\n *ngSwitchCase=\"'boolean'\"\n class=\"form-check m-0\"\n [class.is-invalid]=\"(addForm.get(col.field)?.touched || saveAttemptedNew) && addForm.get(col.field)?.invalid\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n [formControlName]=\"col.field\"\n [attr.aria-label]=\"inputAriaLabel(col)\"\n [attr.aria-invalid]=\"(addForm.get(col.field)?.touched || saveAttemptedNew) && addForm.get(col.field)?.invalid ? 'true' : null\"\n [attr.aria-describedby]=\"(addForm.get(col.field)?.touched || saveAttemptedNew) && addForm.get(col.field)?.invalid ? 'add-error-' + col.field : null\"\n />\n </div>\n\n <!-- number/email/date/text -->\n <input\n *ngSwitchDefault\n class=\"form-control form-control-sm\"\n [class.is-invalid]=\"(addForm.get(col.field)?.touched || saveAttemptedNew) && addForm.get(col.field)?.invalid\"\n [attr.type]=\"col.type === 'number' ? 'number' :\n col.type === 'email' ? 'email' :\n col.type === 'date' ? 'date' : 'text'\"\n [formControlName]=\"col.field\"\n [attr.aria-label]=\"inputAriaLabel(col)\"\n [attr.aria-invalid]=\"(addForm.get(col.field)?.touched || saveAttemptedNew) && addForm.get(col.field)?.invalid ? 'true' : null\"\n [attr.aria-describedby]=\"(addForm.get(col.field)?.touched || saveAttemptedNew) && addForm.get(col.field)?.invalid ? 'add-error-' + col.field : null\"\n />\n </ng-container>\n\n <div class=\"invalid-feedback d-block\"\n *ngIf=\"(addForm.get(col.field)?.touched || saveAttemptedNew) && addForm.get(col.field)?.errors as e\"\n [attr.id]=\"'add-error-' + col.field\"\n role=\"alert\">\n <ng-container *ngIf=\"e['required']\">Required</ng-container>\n <ng-container *ngIf=\"e['email']\">Invalid email</ng-container>\n <ng-container *ngIf=\"e['number']\">Invalid number</ng-container>\n <ng-container *ngIf=\"e['date']\">Invalid date</ng-container>\n </div>\n </td>\n\n <td *ngIf=\"enableEdit || enableDelete\" class=\"text-nowrap text-center\">\n <button type=\"button\" class=\"btn btn-sm btn-success me-1\" (click)=\"saveAdd()\" [disabled]=\"addForm.invalid\">Save</button>\n <button type=\"button\" class=\"btn btn-sm btn-secondary\" (click)=\"cancelAdd()\">Cancel</button>\n </td>\n </tr>\n\n <!-- DATA ROWS + DETAIL ROWS -->\n <ng-container *ngFor=\"let row of paged; let i = index; trackBy: trackRow\">\n\n <!-- DATA ROW (click-to-edit supported) -->\n <tr (click)=\"onRowClick($event, i)\" [formGroup]=\"editForm\">\n\n <!-- caret/expander cell (left-most) -->\n <td *ngIf=\"rowDetailTpl\" class=\"text-center align-middle\">\n <button\n type=\"button\"\n class=\"expand btn btn-link p-0\"\n (click)=\"$event.stopPropagation(); toggleExpand(i)\"\n [attr.aria-expanded]=\"isExpanded(i)\"\n [attr.aria-controls]=\"'dg-row-detail-' + i\"\n [attr.aria-label]=\"isExpanded(i) ? collapseRowAriaLabel : expandRowAriaLabel\">\n {{ isExpanded(i) ? '-' : '+' }}\n </button>\n </td>\n\n <!-- DATA CELLS -->\n <td *ngFor=\"let col of columns\" [attr.data-title]=\"col.header\">\n <!-- EDIT MODE -->\n <ng-container *ngIf=\"editingIndex === i && (col.editable ?? true); else readCell\">\n <!-- editor template override -->\n <ng-container *ngIf=\"editTpls[col.field] as et; else defaultEditor\"\n [ngTemplateOutlet]=\"et.template\"\n [ngTemplateOutletContext]=\"{\n $implicit: editForm.get(col.field),\n control: editForm.get(col.field),\n row: row, col: col, form: editForm, index: i, isNew: false\n }\">\n </ng-container>\n\n <!-- default editors -->\n <ng-template #defaultEditor>\n <ng-container [ngSwitch]=\"col.type\">\n <div *ngSwitchCase=\"'boolean'\" class=\"form-check m-0\">\n <input type=\"checkbox\"\n class=\"form-check-input\"\n [formControlName]=\"col.field\"\n [attr.aria-label]=\"inputAriaLabel(col)\"\n [attr.aria-invalid]=\"(editForm?.touched || saveAttemptedEdit) && editForm?.get(col.field)?.invalid ? 'true' : null\"\n [attr.aria-describedby]=\"(editForm?.touched || saveAttemptedEdit) && editForm?.get(col.field)?.invalid ? 'edit-error-' + col.field : null\" />\n </div>\n <select *ngSwitchCase=\"'select'\"\n class=\"form-select form-select-sm\"\n [formControlName]=\"col.field\"\n [attr.aria-label]=\"inputAriaLabel(col)\">\n <option *ngFor=\"let o of col.options ?? []\" [ngValue]=\"o.value\">{{ o.label }}</option>\n </select>\n <input *ngSwitchDefault\n class=\"form-control form-control-sm\"\n [attr.type]=\"col.type === 'number' ? 'number' :\n col.type === 'email' ? 'email' :\n col.type === 'date' ? 'date' : 'text'\"\n [formControlName]=\"col.field\"\n [attr.aria-label]=\"inputAriaLabel(col)\"\n [attr.aria-invalid]=\"(editForm?.touched || saveAttemptedEdit) && editForm?.get(col.field)?.invalid ? 'true' : null\"\n [attr.aria-describedby]=\"(editForm?.touched || saveAttemptedEdit) && editForm?.get(col.field)?.invalid ? 'edit-error-' + col.field : null\" />\n </ng-container>\n\n <div class=\"invalid-feedback d-block\"\n *ngIf=\"(editForm?.touched || saveAttemptedEdit) && editForm?.get(col.field)?.errors as e\"\n [attr.id]=\"'edit-error-' + col.field\"\n role=\"alert\">\n <span *ngIf=\"e['required']\">Required</span>\n <span *ngIf=\"e['email']\">Invalid email</span>\n <span *ngIf=\"e['number']\">Invalid number</span>\n <span *ngIf=\"e['date']\">Invalid date</span>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- READ MODE (with optional cell template) -->\n <ng-template #readCell>\n <ng-container *ngIf=\"cellTpls[col.field] as ct; else defaultCell\"\n [ngTemplateOutlet]=\"ct.template\"\n [ngTemplateOutletContext]=\"{ $implicit: row[col.field], row: row, col: col, index: i }\">\n </ng-container>\n <ng-template #defaultCell>\n <ng-container [ngSwitch]=\"col.type\">\n <span *ngSwitchCase=\"'boolean'\">{{ row[col.field] ? 'Yes' : 'No' }}</span>\n <span *ngSwitchDefault>{{ row[col.field] }}</span>\n </ng-container>\n </ng-template>\n </ng-template>\n </td>\n\n <!-- ACTIONS -->\n <td *ngIf=\"enableEdit || enableDelete\" class=\"text-nowrap text-center\">\n <ng-container *ngIf=\"editingIndex !== i; else editBtns\">\n <button type=\"button\" *ngIf=\"enableEdit\" class=\"btn btn-sm btn-outline-primary me-1 no-edit-trigger\" (click)=\"startEdit(i)\">Edit</button>\n <button type=\"button\" *ngIf=\"enableDelete\" class=\"btn btn-sm btn-outline-danger no-edit-trigger\" (click)=\"deleteRow(i)\">Delete</button>\n </ng-container>\n <ng-template #editBtns>\n <button type=\"button\" class=\"btn btn-sm btn-success me-1\" (click)=\"saveEdit(i)\" [disabled]=\"editForm.invalid\">Save</button>\n <button type=\"button\" class=\"btn btn-sm btn-secondary\" (click)=\"cancelEdit(i)\">Cancel</button>\n </ng-template>\n </td>\n </tr>\n\n <!-- DETAIL ROW (spans all columns) -->\n <tr *ngIf=\"rowDetailTpl && isExpanded(i)\" [attr.id]=\"'dg-row-detail-' + i\">\n <td [attr.colspan]=\"detailColspan\" role=\"region\">\n <ng-container [ngTemplateOutlet]=\"rowDetailTpl.template\"\n [ngTemplateOutletContext]=\"{ $implicit: row, index: i }\">\n </ng-container>\n </td>\n </tr>\n\n </ng-container>\n </tbody>\n\n </table>\n\n <!-- Footer (left = count, center = pagination, right = page size) -->\n <div *ngIf=\"enablePagination\" class=\"d-flex align-items-center justify-content-between mt-2\">\n <!-- left: count -->\n <div class=\"small text-muted\" aria-live=\"polite\">\n {{ startIndex }} - {{ endIndex }} of {{ sorted.length }}\n\n </div>\n\n <!-- center: pager -->\n <div class=\"flex-grow-1 d-flex justify-content-center\">\n <ngb-pagination\n [page]=\"page\"\n [pageSize]=\"pageSize\"\n [collectionSize]=\"sorted.length\"\n [maxSize]=\"5\"\n (pageChange)=\"onPage($event)\">\n </ngb-pagination>\n </div>\n\n <!-- right: rows per page -->\n <div class=\"d-flex align-items-center gap-2\">\n <label class=\"form-label form-label-sm mb-0\" for=\"pageSize\">Rows:</label>\n <select\n id=\"pageSize\"\n class=\"form-select form-select-sm\"\n [(ngModel)]=\"pageSize\"\n (ngModelChange)=\"onPageSize($event)\"\n aria-label=\"Rows per page\">\n <option *ngFor=\"let s of pageSizeOptions\" [value]=\"s\">{{ s }}</option>\n </select>\n </div>\n </div>\n</div>\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}\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\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 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) this.active.set(false);\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 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 }\n }\n\n @HostListener('document:drop', ['$event'])\n onDocumentDrop(ev: DragEvent) {\n const host = this.el.nativeElement;\n if (!host.contains(ev.target as Node)) return;\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 // reset visual state\n this.hover = false;\n this.canDrop = null;\n }\n\n @HostListener('drop', ['$event'])\n onDrop(ev: DragEvent) {\n if (this.dndDisabled) return;\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 // reset visual state\n this.hover = false;\n this.canDrop = null;\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 this.placeholder = document.createElement('div');\n this.placeholder.className = 'ngb-dnd-placeholder';\n this.placeholder.setAttribute('aria-hidden', 'true');\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 positionPlaceholderAt(index: number) {\n const host = this.el.nativeElement;\n const children = Array.from(host.children).filter(c => c !== this.placeholder) as HTMLElement[];\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 host = this.el.nativeElement;\n const y = ev.clientY;\n const children = Array.from(host.children).filter(c => c !== this.placeholder) as HTMLElement[];\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 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(dstIndex: number): DndCanDropPayload<any> {\n const anyThis = this as any;\n\n // Try your known drag context fields; fall back harmlessly if absent\n const dragItem = anyThis._dragCtx?.item ?? anyThis.dragItem ?? anyThis._drag?.item ?? null;\n const srcList = anyThis._dragCtx?.src?.list ?? anyThis.srcList ?? anyThis._drag?.srcList ?? [];\n const srcIndex = anyThis._dragCtx?.src?.index ?? anyThis.srcIndex ?? anyThis._drag?.srcIndex ?? -1;\n\n const dstList = this.list as any[];\n\n return {\n dragItem,\n srcList,\n srcIndex,\n dstList,\n dstIndex,\n isExternal: 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 = Array.from(host.children) as HTMLElement[];\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(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\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 *ngFor index) */\n @Input() dndIndex?: number;\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-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 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.parentList?.list,\n fromIndex: this.dndIndex,\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 { 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 <li\n *ngFor=\"let step of steps; let i = index\"\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 <ng-container *ngIf=\"customIconTpl; else defaultIcon\">\n <ng-container\n [ngTemplateOutlet]=\"customIconTpl\"\n [ngTemplateOutletContext]=\"{ index: i, state: stepState(i) }\"\n ></ng-container>\n </ng-container>\n <ng-template #defaultIcon>\n {{ defaultIconForState(stepState(i), i) }}\n </ng-template>\n </div>\n\n <div\n class=\"ngb-stepper-label-container\"\n [ngClass]=\"labelPositionClass\"\n >\n <div class=\"ngb-stepper-label\" *ngIf=\"stepLabelTpl; else textLabel\">\n <ng-container\n [ngTemplateOutlet]=\"stepLabelTpl\"\n [ngTemplateOutletContext]=\"{ index: i, step: step }\"\n ></ng-container>\n </div>\n <ng-template #textLabel>\n <div class=\"ngb-stepper-label-text\">\n {{ step.label || ('Step ' + (i + 1)) }}\n </div>\n </ng-template>\n <div class=\"ngb-stepper-optional\" *ngIf=\"step.optional\">\n {{ optionalLabel }}\n </div>\n </div>\n </li>\n </ol>\n </div>\n\n <!-- CONTENT -->\n <div class=\"ngb-stepper-content\" [class.ngb-stepper-content-top]=\"contentPosition === 'top'\">\n <ng-container *ngIf=\"lazy; else allContent\">\n <ng-container *ngFor=\"let index of [selectedIndex]\">\n <div\n class=\"fade-step\"\n [style.--ngb-stepper-animation-duration]=\"(disableAnimation ? 0 : animationDuration) + 'ms'\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"stepId(index)\"\n [attr.id]=\"contentId(index)\"\n >\n <ng-container *ngTemplateOutlet=\"stepContentTpl; context: { index: index }\"></ng-container>\n <div\n *ngIf=\"currentErrorMessage\"\n class=\"ngb-stepper-error\"\n role=\"alert\"\n >\n {{ currentErrorMessage }}\n </div>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-template #allContent>\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 <div\n *ngIf=\"currentErrorMessage\"\n class=\"ngb-stepper-error\"\n role=\"alert\"\n >\n {{ currentErrorMessage }}\n </div>\n </div>\n </ng-template>\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 <ng-container *ngFor=\"let pane of panes; 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 <div *ngIf=\"i < panes.length - 1\" 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 <span\n *ngIf=\"pane.collapsible\"\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 </div>\n </div>\n </ng-container>\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 <span\n *ngFor=\"let item of items; trackBy: trackById\"\n class=\"badge rounded-pill bg-secondary ngb-chip\"\n [class.opacity-50]=\"!!item.disabled\"\n >\n <span class=\"ngb-chip-label\">{{ item.label }}</span>\n <button\n *ngIf=\"removable\"\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 </span>\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\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 <ng-container *ngIf=\"chips && multiSelect; else plainInput\">\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 </ng-container>\n <ng-template #plainInput>\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 </ng-template>\n\n <button\n *ngIf=\"showClearButton && (query || (!multiSelect && selected.length))\"\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 <button\n *ngIf=\"showDropdownButton\"\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 </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 <div *ngIf=\"vScroll\" [style.height.px]=\"beforePadding\"></div>\n\n <button\n *ngFor=\"let item of visible; trackBy: trackById; let idx = index\"\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 <span *ngIf=\"multiSelect\" 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 <ng-container *ngIf=\"resolvedItemTemplate as tpl; else defaultTpl\">\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 </ng-container>\n <ng-template #defaultTpl>\n <span>{{ item.label }}</span>\n </ng-template>\n </div>\n </button>\n\n <div *ngIf=\"vScroll\" [style.height.px]=\"afterPadding\"></div>\n\n <div *ngIf=\"showNoResults\" class=\"dropdown-item text-muted text-center\">\n {{ i18n?.noResults || 'No results' }}\n </div>\n </div>\n\n <div *ngIf=\"multiSelect && selected.length\" 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 </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 <ng-container *ngFor=\"let node of nodes; let i = index; trackBy: trackById\">\n <ng-container *ngTemplateOutlet=\"renderNode; context: { $implicit: node, level: 1, index: i }\"></ng-container>\n </ng-container>\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 <ng-container *ngIf=\"hasChildren(node); else leafSpacer\">\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 <span *ngIf=\"type === 'json'\" class=\"bi\" [ngClass]=\"node.expanded ? minusIcon : plusIcon\" aria-hidden=\"true\"></span>\n <span *ngIf=\"type !== 'json'\" class=\"bi\" [ngClass]=\"node.expanded ? collapseIcon : expandIcon\" aria-hidden=\"true\"></span>\n </button>\n </ng-container>\n <ng-template #leafSpacer>\n <span class=\"d-inline-block px-1\" style=\"width: 1.5rem;\"></span>\n </ng-template>\n\n <label class=\"form-check d-inline-flex align-items-center gap-2 flex-grow-1 mb-0\">\n <input\n *ngIf=\"showCheckbox\"\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 <span class=\"form-check-label\">{{ node.label }}</span>\n </label>\n </li>\n\n <ul\n *ngIf=\"node.expanded && hasChildren(node)\"\n class=\"list-unstyled ms-4\"\n role=\"group\"\n >\n <ng-container *ngFor=\"let child of node.children; let ci = index; trackBy: trackById\">\n <ng-container *ngTemplateOutlet=\"renderNode; context: { $implicit: child, level: level + 1, index: ci }\"></ng-container>\n </ng-container>\n </ul>\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.NgbDndListDirective"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"angular-bootstrap-ngbootstrap.mjs","sources":["../../../src/datagrid/src/directives/datagrid-templates.directive.ts","../../../src/pagination/src/pagination/pagination.component.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/datagrid/directives/grid-highlight.directive.ts","../../../src/datagrid/src/datagrid/directives/colgroup-sync.directive.ts","../../../src/datagrid/src/datagrid/datagrid.component.ts","../../../src/datagrid/src/datagrid/datagrid.component.html","../../../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/drag-drop/src/directive/dnd-list.directive.ts","../../../src/drag-drop/src/directive/dnd-item.directive.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 { Directive, Input, TemplateRef } from '@angular/core';\nimport { AbstractControl, FormGroup } from '@angular/forms';\nimport { ColumnDef } from '../models/column-def';\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> { $implicit: AbstractControl | null; control: AbstractControl | null; col: ColumnDef<T>; }\nexport interface GlobalFilterCtx { $implicit: AbstractControl; }\n\n@Directive({ selector: 'ng-template[ngbCell]' })\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]' })\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]' })\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[ngbGlobalFilter]' })\nexport class NgbGlobalFilterTemplate {\n constructor(public readonly template: TemplateRef<GlobalFilterCtx>) {}\n}\n\n\n@Directive({ selector: 'ng-template[ngbRowDetail]' })\nexport class NgbRowDetailTemplate<T = any> {\n constructor(public readonly template: TemplateRef<{ $implicit: T; index: number }>) {}\n}\n\n\n/** Handy constant to import in consumer apps */\nexport const DATAGRID_TEMPLATE_DIRECTIVES = [\n NgbCellTemplate, NgbEditorTemplate, NgbFilterTemplate, NgbGlobalFilterTemplate, NgbRowDetailTemplate\n];\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'ngb-pagination',\n standalone: true,\n imports: [CommonModule],\n template: `\n <nav *ngIf=\"totalPages >= 1\" aria-label=\"Pagination\">\n <ul class=\"pagination pagination-sm justify-content-center mb-0\">\n <li class=\"page-item\" [class.disabled]=\"page === 1\">\n <button class=\"page-link\" type=\"button\" (click)=\"go(page - 1)\" aria-label=\"Previous\"> <span aria-hidden=\"true\">«</span> </button>\n </li>\n\n <li class=\"page-item\" *ngFor=\"let p of pages\" [class.active]=\"p === page\" [class.disabled]=\"p === '…'\">\n <span *ngIf=\"p === '…'\" class=\"page-link\">…</span>\n <button *ngIf=\"p !== '…'\" class=\"page-link\" type=\"button\" (click)=\"go(p)\">{{ p }}</button>\n </li>\n\n <li class=\"page-item\" [class.disabled]=\"page === totalPages\">\n <button class=\"page-link\" type=\"button\" (click)=\"go(page + 1)\" aria-label=\"Next\"> <span aria-hidden=\"true\">»</span> </button>\n </li>\n </ul>\n </nav>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgbPaginationComponent {\n @Input() page = 1;\n @Input() pageSize = 10;\n @Input() collectionSize = 0;\n @Input() maxSize = 5;\n @Output() pageChange = new EventEmitter<number>();\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 = Math.max(3, this.maxSize | 0);\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) { end = total; start = end - max + 1; }\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) {\n if (p < 1 || p > this.totalPages || p === this.page) return;\n this.pageChange.emit(p);\n }\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}","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('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}","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, 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;\n this.grid.highlightColKey = this.highlightColumnIndex;\n this.grid.highlightedIndex = this.highlightedIndex ?? [];\n this.grid.updateHighlightCache();\n }\n}\n","import { AfterViewInit, Directive, ElementRef, HostListener, Input, OnDestroy } from '@angular/core';\n\nconst MIN_WIDTH = 40;\nconst MAX_WIDTH = 320;\nconst MAX_SAMPLE_ROWS = 50;\nconst CHAR_WIDTH_FACTOR = 0.6;\n\ntype SyncRole = 'header' | 'body';\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\n private static registry = new Map<string, SyncEntry>();\n private mutationObserver?: MutationObserver;\n private resizeObserver?: ResizeObserver;\n private rafId: number | null = null;\n\n constructor(private el: ElementRef<HTMLElement>) {}\n\n ngAfterViewInit(): void {\n if (!this.syncId) return;\n const entry = this.ensureEntry();\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.syncRole === 'header') this.measureAndDistribute();\n }\n\n measureAndDistribute(): void {\n const widths = this.measure();\n if (!widths.length) return;\n const entry = this.ensureEntry();\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') {\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.rafId != null) return;\n this.rafId = requestAnimationFrame(() => {\n this.rafId = null;\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 if (!cols.length) return [];\n\n if (!bodyTable) {\n const entry = NgbSyncColgroupDirective.registry.get(this.syncId);\n return entry?.widths ?? [];\n }\n\n const bodyRows = Array.from(bodyTable.querySelectorAll('tbody tr')).slice(0, MAX_SAMPLE_ROWS);\n\n return cols.map((_col, colIndex) => {\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 if (maxContent === 0) maxContent = MIN_WIDTH;\n\n return Math.min(Math.max(maxContent, MIN_WIDTH), MAX_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 chrome =\n (parseFloat(style.paddingLeft) || 0) +\n (parseFloat(style.paddingRight) || 0) +\n (parseFloat(style.borderLeftWidth) || 0) +\n (parseFloat(style.borderRightWidth) || 0);\n\n const interactive = cell.querySelector('input, select, textarea, button') as HTMLElement | null;\n if (interactive) return (interactive.getBoundingClientRect().width || 0) + chrome;\n\n const text = (cell.textContent ?? '').trim();\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\n return Math.ceil(contentWidth + chrome);\n }\n}\n","import { Component, Input, ChangeDetectionStrategy, EventEmitter, Output, inject, AfterContentInit, ContentChildren, QueryList, OnChanges, SimpleChanges, TemplateRef, ElementRef, ViewChild, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ColumnDef } from '../models/column-def';\nimport { FormsModule, ReactiveFormsModule, FormBuilder, FormGroup, Validators, AbstractControl, FormControl } from '@angular/forms';\nimport {\n NgbCellTemplate, NgbEditorTemplate, NgbFilterTemplate, NgbGlobalFilterTemplate,\n CellCtx, EditCtx, FilterCtx\n} from '../directives/datagrid-templates.directive';\nimport { ContentChild } from '@angular/core';\nimport { NgbRowDetailTemplate } from '../directives/datagrid-templates.directive';\nimport { NgbPaginationComponent } from '../../../pagination';\nimport { firstValueFrom, isObservable, Observable } from 'rxjs';\nimport { NgbDataGridExportOptions, NgbDataGridTheme, NgbDataGridResponsiveOptions } from '../datagrid.types';\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 { NgbGridHighlightDirective, HighlightItem } from './directives/grid-highlight.directive';\nimport { NgbSyncColgroupDirective } from './directives/colgroup-sync.directive';\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;\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}\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 imports: [CommonModule, FormsModule, NgbPaginationComponent, ReactiveFormsModule, NgbSyncColgroupDirective, NgbGridHighlightDirective],\n styleUrls: ['./datagrid.component.scss'],\n providers: [\n { provide: PdfExportAdapter, useClass: JsPdfAdapter },\n { provide: ExcelExportAdapter, useClass: XlsxAdapter }\n ],\n standalone:true,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class Datagrid<T = any> implements AfterContentInit, AfterViewInit, OnChanges {\n /** Column definitions to render */\n @Input() columns: ColumnDef<T>[] = [];\n\n /** Row data to display */\n @Input() data: T[] = [];\n @Input() enableSorting = false;\n @Input() enableFiltering = false; // per-column + global\n @Input() enableGlobalFilter = false; // global search bar\n @Input() enablePagination = false;\n @Input() enableEdit = false;\n @Input() enableDelete = false;\n @Input() pageSizeOptions: number[] = [5, 10, 25, 50];\n\n @Input() enableAdd = false;\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 container (used when pagination is off). */\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 @Input() tableOptions: NgbTableOptions = {};\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 @Input() highlightedIndex: HighlightItem[] = [];\n /** Row key for highlighting. */\n @Input() highlightRowKey: NgbRowKey | null = null;\n /** Column key for highlighting. */\n @Input() highlightColKey: NgbColKey | null = null;\n scrollbarWidth = 0;\n /** Accessible label for the global filter input. */\n @Input() globalFilterAriaLabel = 'Search all columns';\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 @Input() singleExpand = false; // accordion mode: one row expanded at a time\n @Input() exportOptions: NgbDataGridExportOptions = {\n enabled: false,\n type: 'both',\n pages: 'current',\n fileName: 'export'\n };\n\n @Input() theme: NgbDataGridTheme = 'bootstrap';\n @Input() responsive: NgbDataGridResponsiveOptions | boolean = false;\n @Input() trackBy?: NgbDatagridTrackByFn<T>;\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 colgroupSyncId = `dg-col-${Math.random().toString(36).slice(2, 8)}`;\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() filtersChange = new EventEmitter<{ global: string; columns: Record<string, string> }>();\n @Output() pageChange = new EventEmitter<{ page: number; pageSize: number }>();\n @Output() selectionChange = new EventEmitter<{ selected: T[]; lastAction: { row: T; index: number; selected: boolean } | null }>();\n\n @ContentChild(NgbRowDetailTemplate) rowDetailTpl?: NgbRowDetailTemplate<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 sort: { active: Extract<keyof T, string> | null; direction: SortDir } = { active: null, direction: '' };\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 globalFilter = '';\n filters: Record<string, string> = {}; // per-column text\n page = 1;\n @Input() pageSize = 10;\n\n /** Inline editing state */\n editingIndex: number | null = null; // index in `paged` view\n editForm: FormGroup = this.fb.group({});\n saveAttemptedEdit = 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\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 for (const col of this.columns) {\n if (col.editable === false) continue; // read-only columns not in form\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 // pipeline respects toggles\n get filtered(): T[] {\n if (!this.enableFiltering) return this.data ?? [];\n const src = this.data ?? [];\n return src.filter(r => {\n // per-column\n for (const col of this.columns) {\n if (!col.filterable) continue;\n const q = (this.filters[col.field as string] ?? '').toString().toLowerCase().trim();\n if (!q) continue;\n const cell = ((r as any)[col.field] ?? '').toString().toLowerCase().trim();\n if (!cell.includes(q)) return false;\n }\n // global\n if (this.enableGlobalFilter) {\n const g = (this.globalFilter ?? '').toString().toLowerCase().trim();\n if (g) return this.columns.some(c => ((r as any)[c.field] ?? '').toString().toLowerCase().includes(g));\n }\n return true;\n });\n }\n\n get sorted(): T[] {\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 return this.withStickyRowsFirst(base);\n }\n // pagination (filled in next step)\n\n get paged(): T[] {\n if (!this.enablePagination) return this.sorted;\n const start = (this.page - 1) * this.pageSize;\n return this.sorted.slice(start, start + this.pageSize);\n }\n\n // getters for template conditions / display\n get anyFilterable(): boolean {\n return this.enableFiltering && !!this.columns?.some(c => c.filterable);\n }\n\n get startIndex(): number { const total = this.sorted.length; return total ? (this.page - 1) * this.pageSize + 1 : 0; }\n get endIndex(): number { return Math.min(this.page * this.pageSize, this.sorted.length); }\n\n get shouldEnableScroll(): boolean {\n return this.scrollable;\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.enableEdit || this.enableDelete) ? 1 : 0;\n const caretCol = this.rowDetailTpl ? 1 : 0;\n const stickyCol = this.stickyRowsEnabled ? 1 : 0;\n const selectionCol = this.isSelectionEnabled() ? 1 : 0;\n return this.columns.length + actionCols + caretCol + stickyCol + selectionCol;\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 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 columnFilterAriaLabel(col: ColumnDef<T>): string {\n return `${this.headerText(col)} filter`;\n }\n\n inputAriaLabel(col: ColumnDef<T>): string {\n return this.headerText(col);\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 return `Sort by ${header}. Current sort ${state}.`;\n }\n\n exportAriaLabel(kind: 'pdf'|'excel'): string {\n return kind === 'pdf' ? this.exportPdfAriaLabel : this.exportExcelAriaLabel;\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.data.indexOf(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.data.indexOf(row);\n }\n\n private rebuildFilterForm() {\n const group: Record<string, any> = {};\n for (const c of this.columns) if (c.filterable) group[c.field as string] = [''];\n this.filterForm = this.fb.group(group);\n\n this.filterForm.valueChanges.subscribe(v => {\n this.page = 1;\n this.filtersChange.emit({ global: this.globalFilterCtrl.value, columns: v as any });\n });\n this.globalFilterCtrl.valueChanges.subscribe(() => {\n this.page = 1;\n this.filtersChange.emit({ global: this.globalFilterCtrl.value, columns: this.filterForm.value as any });\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(NgbGlobalFilterTemplate) private globalTplQ!: QueryList<NgbGlobalFilterTemplate>;\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 globalTpl: NgbGlobalFilterTemplate | null = null;\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.columns.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.cellTpls = this.toRecord(this.cellTplQ);\n this.editTpls = this.toRecord(this.editTplQ);\n this.filterTpls = this.toRecord(this.filterTplQ);\n this.globalTpl = this.globalTplQ?.first ?? null;\n };\n rebuild();\n this.cellTplQ?.changes.subscribe(rebuild);\n this.editTplQ?.changes.subscribe(rebuild);\n this.filterTplQ?.changes.subscribe(rebuild);\n this.globalTplQ?.changes.subscribe(rebuild);\n }\n ngAfterViewInit(): void {\n queueMicrotask(() => this.syncScrollbarWidth());\n }\n\n ngOnChanges(ch: SimpleChanges): void {\n if (ch['columns']) this.rebuildFilterForm();\n if (ch['highlightedIndex']) this.updateHighlightCache();\n }\n\n private getRowId(rowIndex: number, row: T): any {\n return this.trackBy ? this.trackBy(rowIndex, row) : rowIndex;\n }\n\n private getEditService(): NgbDatagridEditService<T> {\n return this.editService ?? this.defaultEditService;\n }\n\n startAdd() {\n if (!this.enableAdd || this.addingNew) return;\n this.page = 1;\n this.editingIndex = 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 }\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.rowAdd.emit({ newRow });\n\n this.addingNew = false;\n this.addForm = this.fb.group({});;\n this.saveAttemptedNew = false;\n this.addDraftRowId = null;\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 }\n\n startEdit(i: number) {\n if (!this.enableEdit) return;\n this.addingNew = false;\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.data.indexOf(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 }\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.data.indexOf(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 service.update(this.data ?? [], updated, di, rowId);\n service.saveChanges(this.data ?? [], di, rowId, updated);\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 }\n\n cancelEdit(i: number) {\n const di = this.data.indexOf(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 }\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) better *ngFor performance\n trackRow = (index: number, row: T) => {\n const di = this.data.indexOf(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.sortChange.emit({ active: this.sort.active, direction: this.sort.direction });\n }\n\n onGlobalFilterChange() {\n if (!this.enableFiltering || !this.enableGlobalFilter) return;\n this.page = 1;\n this.filtersChange.emit({ global: this.globalFilter, columns: { ...this.filters } });\n }\n\n onColumnFilterChange() {\n if (!this.enableFiltering) return;\n this.page = 1;\n this.filtersChange.emit({ global: this.globalFilter, columns: { ...this.filters } });\n }\n\n onPageChange(p: number) {\n this.page = p;\n this.pageChange.emit({ page: this.page, pageSize: this.pageSize });\n }\n\n onPageSizeChange() {\n this.page = 1;\n this.pageChange.emit({ page: this.page, pageSize: this.pageSize });\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.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.pageChange.emit({ page: this.page, pageSize: this.pageSize });\n }\n\n onPageSize(sz: number): void {\n this.pageSize = Number(sz) || this.pageSize;\n this.page = 1; // reset to first page when size changes\n this.pageChange.emit({ page: this.page, pageSize: this.pageSize });\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.data.indexOf(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.data.indexOf(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 }\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 const stickyBefore = this.paged\n .slice(0, pagedIndex)\n .filter((r, idx) => this.isRowSticky(r, idx)).length;\n return stickyBefore * 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 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.data.indexOf(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.data.indexOf(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.data.indexOf(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\n if (!isMulti) {\n this.selectedRowIds.clear();\n this.selectedRowIds.add(id);\n this.selectionAnchor = pagedIndex;\n this.emitSelection(row, di, true);\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.data.indexOf(r), r);\n this.selectedRowIds.add(rid);\n }\n this.emitSelection(row, di, true);\n return;\n }\n\n if (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 }\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.data.indexOf(r), r);\n this.selectedRowIds.delete(rid);\n });\n } else {\n allSelectable.forEach((r, i) => {\n const rid = this.getRowId(this.data.indexOf(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 }\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 || 'Unselect all rows')\n : (labels.selectAll || 'Select all rows');\n }\n\n rowSelectionLabel(index: number): string {\n const labels = this.selectionA11yLabels || {};\n const selected = this.isRowSelected(this.paged[index], index);\n return selected\n ? (labels.unselectRow || `Unselect row ${index + 1}`)\n : (labels.selectRow || `Select row ${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 onHeaderScroll(): void {\n const body = this.bodyScroller?.nativeElement;\n const head = this.headerScroller?.nativeElement;\n if (body && head && body.scrollLeft !== head.scrollLeft) {\n body.scrollLeft = head.scrollLeft;\n }\n }\n\n private syncScrollbarWidth(): void {\n const el = this.bodyScroller?.nativeElement;\n if (!el) return;\n const width = el.offsetWidth - el.clientWidth;\n if (width !== this.scrollbarWidth) {\n this.scrollbarWidth = width;\n this.cdr.markForCheck();\n }\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 class=\"ngb-grid\" [attr.data-theme]=\"theme\" [class.ngb-responsive]=\"isResponsiveEnabled()\">\n <!-- Export toolbar -->\n <div class=\"d-flex justify-content-end mb-2\" *ngIf=\"exportOptions?.enabled\">\n <ng-container *ngIf=\"exportButtonTpl; else defaultExportBtns\"\n [ngTemplateOutlet]=\"exportButtonTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: triggerExport }\">\n </ng-container>\n\n <ng-template #defaultExportBtns>\n <button type=\"button\"\n class=\"btn btn-sm btn-outline-secondary me-2\"\n *ngIf=\"exportOptions.type === 'pdf' || exportOptions.type === 'both'\"\n [disabled]=\"exporting\"\n (click)=\"export('pdf')\"\n [attr.aria-label]=\"exportAriaLabel('pdf')\">\n Export to PDF\n </button>\n <button type=\"button\"\n class=\"btn btn-sm btn-outline-secondary\"\n *ngIf=\"exportOptions.type === 'excel' || exportOptions.type === 'both'\"\n [disabled]=\"exporting\"\n (click)=\"export('excel')\"\n [attr.aria-label]=\"exportAriaLabel('excel')\">\n Export to Excel\n </button>\n </ng-template>\n </div>\n <div class=\"d-flex justify-content-end mb-2\" *ngIf=\"enableAdd\">\n <button\n type=\"button\"\n class=\"btn btn-sm btn-primary\"\n (click)=\"startAdd()\"\n [disabled]=\"addingNew\"\n [attr.aria-label]=\"addButtonAriaLabel || addButtonText\"\n >\n {{ addButtonText }}\n </button>\n </div>\n <!-- Global filter -->\n <div class=\"mb-2\" *ngIf=\"enableFiltering && enableGlobalFilter\">\n <ng-container\n *ngIf=\"globalTpl; else defaultGlobalFilter\"\n [ngTemplateOutlet]=\"globalTpl?.template\"\n [ngTemplateOutletContext]=\"{ $implicit: globalFilterCtrl }\"\n >\n </ng-container>\n\n <ng-template #defaultGlobalFilter>\n <input\n type=\"search\"\n class=\"form-control form-control-sm\"\n placeholder=\"Search all columns...\"\n [formControl]=\"globalFilterCtrl\"\n [attr.aria-label]=\"globalFilterAriaLabel\"\n />\n </ng-template>\n </div>\n\n <div class=\"table-wrapper\"\n [class.scrollable]=\"shouldEnableScroll\"\n [ngClass]=\"responsiveWrapperClasses\">\n <div class=\"table-header\" [style.paddingRight.px]=\"scrollbarWidth\" #headerScroller (scroll)=\"onHeaderScroll()\">\n <table [ngClass]=\"tableClassList\">\n <caption *ngIf=\"tableOptions?.caption\"\n [class.caption-top]=\"(tableOptions?.captionSide ?? 'top') === 'top'\">\n {{ tableOptions?.caption }}\n </caption>\n <colgroup [ngbSyncColgroup]=\"colgroupSyncId\" syncRole=\"header\">\n <col *ngIf=\"isSelectionEnabled()\" style=\"width:1%\">\n <col *ngIf=\"rowDetailTpl\" style=\"width:1%\">\n <col *ngIf=\"stickyRowsEnabled\" style=\"width:1%\">\n <col *ngFor=\"let col of columns\">\n <col *ngIf=\"enableEdit || enableDelete\" style=\"width:1%\">\n </colgroup>\n <thead class=\"thead-light\">\n <tr>\n <th *ngIf=\"isSelectionEnabled()\" class=\"text-center\" scope=\"col\" style=\"width:1%\">\n <ng-container *ngIf=\"selectionMode === 'multiple' && selectAllEnabled\">\n <input type=\"checkbox\"\n [checked]=\"isPageAllSelected()\"\n [indeterminate]=\"isPageIndeterminate()\"\n (change)=\"toggleSelectAllCurrentPage()\"\n [attr.aria-label]=\"selectAllLabel()\">\n </ng-container>\n </th>\n <th *ngIf=\"rowDetailTpl\" style=\"width:1%\" scope=\"col\" aria-hidden=\"true\"></th>\n <th *ngIf=\"stickyRowsEnabled\" style=\"width:1%\" scope=\"col\" class=\"text-center\" data-title=\"Sticky\"></th>\n <th\n *ngFor=\"let col of columns\"\n [attr.data-title]=\"col.header\"\n [class.sortable]=\"enableSorting && col.sortable\"\n scope=\"col\"\n [attr.aria-sort]=\"enableSorting && col.sortable ? ariaSortFor(col.field) : null\"\n >\n <ng-container *ngIf=\"enableSorting && col.sortable; else plainHeader\">\n <button\n type=\"button\"\n class=\"btn btn-link p-0 text-start w-100\"\n (click)=\"toggleSort(col.field)\"\n [attr.aria-label]=\"sortButtonAriaLabel(col)\"\n >\n <span>{{ col.header }}</span>\n <span\n class=\"sort-indicator\"\n *ngIf=\"enableSorting && sort.active === col.field\"\n aria-hidden=\"true\"\n >\n {{\n sort.direction === 'asc'\n ? '▲'\n : sort.direction === 'desc'\n ? '▼'\n : ''\n }}\n </span>\n </button>\n </ng-container>\n <ng-template #plainHeader>\n <span>{{ col.header }}</span>\n </ng-template>\n </th>\n <th\n *ngIf=\"enableEdit || enableDelete\"\n class=\"text-center\"\n scope=\"col\"\n style=\"width: 1%\"\n >\n Actions\n </th>\n </tr>\n\n <!-- Per-column filters -->\n <tr *ngIf=\"anyFilterable\" [formGroup]=\"filterForm\">\n <th *ngIf=\"isSelectionEnabled()\"></th>\n <th *ngIf=\"stickyRowsEnabled\"></th>\n <th *ngFor=\"let col of columns\" [attr.data-title]=\"col.header\">\n <ng-container *ngIf=\"col.filterable\">\n <ng-container *ngIf=\"filterTpls[col.field] as ft; else defaultFilter\">\n <ng-container\n [ngTemplateOutlet]=\"ft.template\"\n [ngTemplateOutletContext]=\"{\n $implicit: filterForm.get(col.field),\n control: filterForm.get(col.field),\n col: col\n }\"\n >\n </ng-container>\n </ng-container>\n <ng-template #defaultFilter>\n <input\n type=\"text\"\n class=\"form-control form-control-sm\"\n [formControlName]=\"col.field\"\n [attr.aria-label]=\"columnFilterAriaLabel(col)\"\n />\n </ng-template>\n </ng-container>\n </th>\n <th *ngIf=\"enableEdit || enableDelete\"></th>\n </tr>\n </thead>\n </table>\n </div>\n\n <div class=\"table-body\" #bodyScroller>\n <table [ngClass]=\"tableClassList\"\n role=\"grid\"\n [attr.aria-readonly]=\"(enableEdit || enableAdd) ? 'false' : 'true'\">\n <colgroup [ngbSyncColgroup]=\"colgroupSyncId\" syncRole=\"body\">\n <col *ngIf=\"isSelectionEnabled()\" style=\"width:1%\">\n <col *ngIf=\"rowDetailTpl\" style=\"width:1%\">\n <col *ngIf=\"stickyRowsEnabled\" style=\"width:1%\">\n <col *ngFor=\"let col of columns\">\n <col *ngIf=\"enableEdit || enableDelete\" style=\"width:1%\">\n </colgroup>\n <tbody>\n <!-- ADD NEW ROW -->\n <tr *ngIf=\"addingNew\" [formGroup]=\"addForm\">\n <!-- blank caret cell to keep alignment when detail column is present -->\n <td *ngIf=\"isSelectionEnabled()\"></td>\n <td *ngIf=\"rowDetailTpl\"></td>\n <td *ngIf=\"stickyRowsEnabled\" class=\"text-center\"></td>\n\n <td *ngFor=\"let col of columns\" [attr.data-title]=\"col.header\">\n <ng-container [ngSwitch]=\"col.type\">\n <!-- boolean -->\n <div\n *ngSwitchCase=\"'boolean'\"\n class=\"form-check m-0\"\n [class.is-invalid]=\"(addForm.get(col.field)?.touched || saveAttemptedNew) && addForm.get(col.field)?.invalid\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n [formControlName]=\"col.field\"\n [attr.aria-label]=\"inputAriaLabel(col)\"\n [attr.aria-invalid]=\"(addForm.get(col.field)?.touched || saveAttemptedNew) && addForm.get(col.field)?.invalid ? 'true' : null\"\n [attr.aria-describedby]=\"(addForm.get(col.field)?.touched || saveAttemptedNew) && addForm.get(col.field)?.invalid ? 'add-error-' + col.field : null\"\n />\n </div>\n\n <!-- number/email/date/text -->\n <input\n *ngSwitchDefault\n class=\"form-control form-control-sm\"\n [class.is-invalid]=\"(addForm.get(col.field)?.touched || saveAttemptedNew) && addForm.get(col.field)?.invalid\"\n [attr.type]=\"col.type === 'number' ? 'number' :\n col.type === 'email' ? 'email' :\n col.type === 'date' ? 'date' : 'text'\"\n [formControlName]=\"col.field\"\n [attr.aria-label]=\"inputAriaLabel(col)\"\n [attr.aria-invalid]=\"(addForm.get(col.field)?.touched || saveAttemptedNew) && addForm.get(col.field)?.invalid ? 'true' : null\"\n [attr.aria-describedby]=\"(addForm.get(col.field)?.touched || saveAttemptedNew) && addForm.get(col.field)?.invalid ? 'add-error-' + col.field : null\"\n />\n </ng-container>\n\n <div class=\"invalid-feedback d-block\"\n *ngIf=\"(addForm.get(col.field)?.touched || saveAttemptedNew) && addForm.get(col.field)?.errors as e\"\n [attr.id]=\"'add-error-' + col.field\"\n role=\"alert\">\n <ng-container *ngIf=\"e['required']\">Required</ng-container>\n <ng-container *ngIf=\"e['email']\">Invalid email</ng-container>\n <ng-container *ngIf=\"e['number']\">Invalid number</ng-container>\n <ng-container *ngIf=\"e['date']\">Invalid date</ng-container>\n </div>\n </td>\n\n <td *ngIf=\"enableEdit || enableDelete\" class=\"text-nowrap text-center\">\n <button type=\"button\" class=\"btn btn-sm btn-success me-1\" (click)=\"saveAdd()\" [disabled]=\"addForm.invalid\">Save</button>\n <button type=\"button\" class=\"btn btn-sm btn-secondary\" (click)=\"cancelAdd()\">Cancel</button>\n </td>\n </tr>\n\n <!-- DATA ROWS + DETAIL ROWS -->\n <ng-container *ngFor=\"let row of paged; let i = index; trackBy: trackRow\">\n\n <!-- DATA ROW (click-to-edit supported) -->\n <tr (click)=\"onRowSelect($event, i); onRowClick($event, i)\" [formGroup]=\"editForm\"\n [class.sticky-row]=\"isRowSticky(row, i)\"\n [class.row-selected]=\"isRowSelected(row, i)\"\n [class.row-highlight]=\"isRowHighlighted(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\n <td *ngIf=\"isSelectionEnabled()\" class=\"text-center align-middle\">\n <input type=\"checkbox\"\n [checked]=\"isRowSelected(row, i)\"\n [disabled]=\"selectionMode === 'none' || selectionBehavior === 'row' || isSelectionDisabled(row, i)\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleSelection(i, $event)\"\n [attr.aria-label]=\"rowSelectionLabel(i)\">\n </td>\n\n <!-- caret/expander cell (left-most) -->\n <td *ngIf=\"rowDetailTpl\" class=\"text-center align-middle\">\n <button\n type=\"button\"\n class=\"expand btn btn-link p-0\"\n (click)=\"$event.stopPropagation(); toggleExpand(i)\"\n [attr.aria-expanded]=\"isExpanded(i)\"\n [attr.aria-controls]=\"'dg-row-detail-' + i\"\n [attr.aria-label]=\"isExpanded(i) ? collapseRowAriaLabel : expandRowAriaLabel\">\n {{ isExpanded(i) ? '-' : '+' }}\n </button>\n </td>\n\n <td *ngIf=\"stickyRowsEnabled\" class=\"text-center align-middle\" data-title=\"Sticky\">\n <button\n type=\"button\"\n class=\"btn btn-link p-0 no-edit-trigger sticky-toggle\"\n (click)=\"$event.stopPropagation(); toggleStickyRow(i)\"\n [attr.aria-pressed]=\"isRowSticky(row, i)\"\n aria-label=\"Toggle sticky row\">\n <ng-container *ngIf=\"stickyIcon(row, i) as icon\">\n <span class=\"bi\" [ngClass]=\"'bi-' + icon\" aria-hidden=\"true\"></span>\n </ng-container>\n </button>\n </td>\n\n <!-- DATA CELLS -->\n <td *ngFor=\"let col of columns; let ci = index\"\n [attr.data-title]=\"col.header\"\n [class.cell-highlight]=\"isCellHighlighted(row, i, col, ci)\">\n <!-- EDIT MODE -->\n <ng-container *ngIf=\"editingIndex === i && (col.editable ?? true); else readCell\">\n <!-- editor template override -->\n <ng-container *ngIf=\"editTpls[col.field] as et; else defaultEditor\"\n [ngTemplateOutlet]=\"et.template\"\n [ngTemplateOutletContext]=\"{\n $implicit: editForm.get(col.field),\n control: editForm.get(col.field),\n row: row, col: col, form: editForm, index: i, isNew: false\n }\">\n </ng-container>\n\n <!-- default editors -->\n <ng-template #defaultEditor>\n <ng-container [ngSwitch]=\"col.type\">\n <div *ngSwitchCase=\"'boolean'\" class=\"form-check m-0\">\n <input type=\"checkbox\"\n class=\"form-check-input\"\n [formControlName]=\"col.field\"\n [attr.aria-label]=\"inputAriaLabel(col)\"\n [attr.aria-invalid]=\"(editForm?.touched || saveAttemptedEdit) && editForm?.get(col.field)?.invalid ? 'true' : null\"\n [attr.aria-describedby]=\"(editForm?.touched || saveAttemptedEdit) && editForm?.get(col.field)?.invalid ? 'edit-error-' + col.field : null\" />\n </div>\n <select *ngSwitchCase=\"'select'\"\n class=\"form-select form-select-sm\"\n [formControlName]=\"col.field\"\n [attr.aria-label]=\"inputAriaLabel(col)\">\n <option *ngFor=\"let o of col.options ?? []\" [ngValue]=\"o.value\">{{ o.label }}</option>\n </select>\n <input *ngSwitchDefault\n class=\"form-control form-control-sm\"\n [attr.type]=\"col.type === 'number' ? 'number' :\n col.type === 'email' ? 'email' :\n col.type === 'date' ? 'date' : 'text'\"\n [formControlName]=\"col.field\"\n [attr.aria-label]=\"inputAriaLabel(col)\"\n [attr.aria-invalid]=\"(editForm?.touched || saveAttemptedEdit) && editForm?.get(col.field)?.invalid ? 'true' : null\"\n [attr.aria-describedby]=\"(editForm?.touched || saveAttemptedEdit) && editForm?.get(col.field)?.invalid ? 'edit-error-' + col.field : null\" />\n </ng-container>\n\n <div class=\"invalid-feedback d-block\"\n *ngIf=\"(editForm?.touched || saveAttemptedEdit) && editForm?.get(col.field)?.errors as e\"\n [attr.id]=\"'edit-error-' + col.field\"\n role=\"alert\">\n <span *ngIf=\"e['required']\">Required</span>\n <span *ngIf=\"e['email']\">Invalid email</span>\n <span *ngIf=\"e['number']\">Invalid number</span>\n <span *ngIf=\"e['date']\">Invalid date</span>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- READ MODE (with optional cell template) -->\n <ng-template #readCell>\n <ng-container *ngIf=\"cellTpls[col.field] as ct; else defaultCell\"\n [ngTemplateOutlet]=\"ct.template\"\n [ngTemplateOutletContext]=\"{ $implicit: row[col.field], row: row, col: col, index: i }\">\n </ng-container>\n <ng-template #defaultCell>\n <ng-container [ngSwitch]=\"col.type\">\n <span *ngSwitchCase=\"'boolean'\">{{ row[col.field] ? 'Yes' : 'No' }}</span>\n <span *ngSwitchDefault>{{ row[col.field] }}</span>\n </ng-container>\n </ng-template>\n </ng-template>\n </td>\n\n <!-- ACTIONS -->\n <td *ngIf=\"enableEdit || enableDelete\" class=\"text-nowrap text-center\">\n <ng-container *ngIf=\"editingIndex !== i; else editBtns\">\n <button type=\"button\" *ngIf=\"enableEdit\" class=\"btn btn-sm btn-outline-primary me-1 no-edit-trigger\" (click)=\"startEdit(i)\">Edit</button>\n <button type=\"button\" *ngIf=\"enableDelete\" class=\"btn btn-sm btn-outline-danger no-edit-trigger\" (click)=\"deleteRow(i)\">Delete</button>\n </ng-container>\n <ng-template #editBtns>\n <button type=\"button\" class=\"btn btn-sm btn-success me-1\" (click)=\"saveEdit(i)\" [disabled]=\"editForm.invalid\">Save</button>\n <button type=\"button\" class=\"btn btn-sm btn-secondary\" (click)=\"cancelEdit(i)\">Cancel</button>\n </ng-template>\n </td>\n </tr>\n\n <!-- DETAIL ROW (spans all columns) -->\n <tr *ngIf=\"rowDetailTpl && isExpanded(i)\" [attr.id]=\"'dg-row-detail-' + i\">\n <td [attr.colspan]=\"detailColspan\" role=\"region\">\n <ng-container [ngTemplateOutlet]=\"rowDetailTpl.template\"\n [ngTemplateOutletContext]=\"{ $implicit: row, index: i }\">\n </ng-container>\n </td>\n </tr>\n\n </ng-container>\n </tbody>\n\n </table>\n </div>\n </div>\n</div>\n\n<!-- Footer (left = count, center = pagination, right = page size) -->\n<div *ngIf=\"enablePagination\"\n class=\"d-flex align-items-center justify-content-between mt-2 grid-footer\"\n [class.sticky-footer]=\"isFooterSticky\">\n <!-- left: count -->\n <div class=\"small text-muted\" aria-live=\"polite\">\n {{ startIndex }} - {{ endIndex }} of {{ sorted.length }}\n\n </div>\n\n <!-- center: pager -->\n <div class=\"flex-grow-1 d-flex justify-content-center\">\n <ngb-pagination\n [page]=\"page\"\n [pageSize]=\"pageSize\"\n [collectionSize]=\"sorted.length\"\n [maxSize]=\"5\"\n (pageChange)=\"onPage($event)\">\n </ngb-pagination>\n </div>\n\n <!-- right: rows per page -->\n <div class=\"d-flex align-items-center gap-2\">\n <label class=\"form-label form-label-sm mb-0\" for=\"pageSize\">Rows:</label>\n <select\n id=\"pageSize\"\n class=\"form-select form-select-sm\"\n [(ngModel)]=\"pageSize\"\n (ngModelChange)=\"onPageSize($event)\"\n aria-label=\"Rows per page\">\n <option *ngFor=\"let s of pageSizeOptions\" [value]=\"s\">{{ s }}</option>\n </select>\n </div>\n</div>\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}\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\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 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) this.active.set(false);\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 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 }\n }\n\n @HostListener('document:drop', ['$event'])\n onDocumentDrop(ev: DragEvent) {\n const host = this.el.nativeElement;\n if (!host.contains(ev.target as Node)) return;\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 // reset visual state\n this.hover = false;\n this.canDrop = null;\n }\n\n @HostListener('drop', ['$event'])\n onDrop(ev: DragEvent) {\n if (this.dndDisabled) return;\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 // reset visual state\n this.hover = false;\n this.canDrop = null;\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 this.placeholder = document.createElement('div');\n this.placeholder.className = 'ngb-dnd-placeholder';\n this.placeholder.setAttribute('aria-hidden', 'true');\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 positionPlaceholderAt(index: number) {\n const host = this.el.nativeElement;\n const children = Array.from(host.children).filter(c => c !== this.placeholder) as HTMLElement[];\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 host = this.el.nativeElement;\n const y = ev.clientY;\n const children = Array.from(host.children).filter(c => c !== this.placeholder) as HTMLElement[];\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 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(dstIndex: number): DndCanDropPayload<any> {\n const anyThis = this as any;\n\n // Try your known drag context fields; fall back harmlessly if absent\n const dragItem = anyThis._dragCtx?.item ?? anyThis.dragItem ?? anyThis._drag?.item ?? null;\n const srcList = anyThis._dragCtx?.src?.list ?? anyThis.srcList ?? anyThis._drag?.srcList ?? [];\n const srcIndex = anyThis._dragCtx?.src?.index ?? anyThis.srcIndex ?? anyThis._drag?.srcIndex ?? -1;\n\n const dstList = this.list as any[];\n\n return {\n dragItem,\n srcList,\n srcIndex,\n dstList,\n dstIndex,\n isExternal: 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 = Array.from(host.children) as HTMLElement[];\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(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\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 *ngFor index) */\n @Input() dndIndex?: number;\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-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 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.parentList?.list,\n fromIndex: this.dndIndex,\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 { 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 <li\n *ngFor=\"let step of steps; let i = index\"\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 <ng-container *ngIf=\"customIconTpl; else defaultIcon\">\n <ng-container\n [ngTemplateOutlet]=\"customIconTpl\"\n [ngTemplateOutletContext]=\"{ index: i, state: stepState(i) }\"\n ></ng-container>\n </ng-container>\n <ng-template #defaultIcon>\n {{ defaultIconForState(stepState(i), i) }}\n </ng-template>\n </div>\n\n <div\n class=\"ngb-stepper-label-container\"\n [ngClass]=\"labelPositionClass\"\n >\n <div class=\"ngb-stepper-label\" *ngIf=\"stepLabelTpl; else textLabel\">\n <ng-container\n [ngTemplateOutlet]=\"stepLabelTpl\"\n [ngTemplateOutletContext]=\"{ index: i, step: step }\"\n ></ng-container>\n </div>\n <ng-template #textLabel>\n <div class=\"ngb-stepper-label-text\">\n {{ step.label || ('Step ' + (i + 1)) }}\n </div>\n </ng-template>\n <div class=\"ngb-stepper-optional\" *ngIf=\"step.optional\">\n {{ optionalLabel }}\n </div>\n </div>\n </li>\n </ol>\n </div>\n\n <!-- CONTENT -->\n <div class=\"ngb-stepper-content\" [class.ngb-stepper-content-top]=\"contentPosition === 'top'\">\n <ng-container *ngIf=\"lazy; else allContent\">\n <ng-container *ngFor=\"let index of [selectedIndex]\">\n <div\n class=\"fade-step\"\n [style.--ngb-stepper-animation-duration]=\"(disableAnimation ? 0 : animationDuration) + 'ms'\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"stepId(index)\"\n [attr.id]=\"contentId(index)\"\n >\n <ng-container *ngTemplateOutlet=\"stepContentTpl; context: { index: index }\"></ng-container>\n <div\n *ngIf=\"currentErrorMessage\"\n class=\"ngb-stepper-error\"\n role=\"alert\"\n >\n {{ currentErrorMessage }}\n </div>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-template #allContent>\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 <div\n *ngIf=\"currentErrorMessage\"\n class=\"ngb-stepper-error\"\n role=\"alert\"\n >\n {{ currentErrorMessage }}\n </div>\n </div>\n </ng-template>\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 <ng-container *ngFor=\"let pane of panes; 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 <div *ngIf=\"i < panes.length - 1\" 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 <span\n *ngIf=\"pane.collapsible\"\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 </div>\n </div>\n </ng-container>\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 <span\n *ngFor=\"let item of items; trackBy: trackById\"\n class=\"badge rounded-pill bg-secondary ngb-chip\"\n [class.opacity-50]=\"!!item.disabled\"\n >\n <span class=\"ngb-chip-label\">{{ item.label }}</span>\n <button\n *ngIf=\"removable\"\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 </span>\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\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 <ng-container *ngIf=\"chips && multiSelect; else plainInput\">\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 </ng-container>\n <ng-template #plainInput>\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 </ng-template>\n\n <button\n *ngIf=\"showClearButton && (query || (!multiSelect && selected.length))\"\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 <button\n *ngIf=\"showDropdownButton\"\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 </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 <div *ngIf=\"vScroll\" [style.height.px]=\"beforePadding\"></div>\n\n <button\n *ngFor=\"let item of visible; trackBy: trackById; let idx = index\"\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 <span *ngIf=\"multiSelect\" 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 <ng-container *ngIf=\"resolvedItemTemplate as tpl; else defaultTpl\">\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 </ng-container>\n <ng-template #defaultTpl>\n <span>{{ item.label }}</span>\n </ng-template>\n </div>\n </button>\n\n <div *ngIf=\"vScroll\" [style.height.px]=\"afterPadding\"></div>\n\n <div *ngIf=\"showNoResults\" class=\"dropdown-item text-muted text-center\">\n {{ i18n?.noResults || 'No results' }}\n </div>\n </div>\n\n <div *ngIf=\"multiSelect && selected.length\" 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 </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 <ng-container *ngFor=\"let node of nodes; let i = index; trackBy: trackById\">\n <ng-container *ngTemplateOutlet=\"renderNode; context: { $implicit: node, level: 1, index: i }\"></ng-container>\n </ng-container>\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 <ng-container *ngIf=\"hasChildren(node); else leafSpacer\">\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 <span *ngIf=\"type === 'json'\" class=\"bi\" [ngClass]=\"node.expanded ? minusIcon : plusIcon\" aria-hidden=\"true\"></span>\n <span *ngIf=\"type !== 'json'\" class=\"bi\" [ngClass]=\"node.expanded ? collapseIcon : expandIcon\" aria-hidden=\"true\"></span>\n </button>\n </ng-container>\n <ng-template #leafSpacer>\n <span class=\"d-inline-block px-1\" style=\"width: 1.5rem;\"></span>\n </ng-template>\n\n <label class=\"form-check d-inline-flex align-items-center gap-2 flex-grow-1 mb-0\">\n <input\n *ngIf=\"showCheckbox\"\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 <span class=\"form-check-label\">{{ node.label }}</span>\n </label>\n </li>\n\n <ul\n *ngIf=\"node.expanded && hasChildren(node)\"\n class=\"list-unstyled ms-4\"\n role=\"group\"\n >\n <ng-container *ngFor=\"let child of node.children; let ci = index; trackBy: trackById\">\n <ng-container *ngTemplateOutlet=\"renderNode; context: { $implicit: child, level: level + 1, index: ci }\"></ng-container>\n </ng-container>\n </ul>\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.Datagrid","i1.NgbDndListDirective"],"mappings":"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"}
|