@angular-bootstrap/ngbootstrap 0.0.8 → 0.0.9

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/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 { 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 { 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\nconst EMAIL_RX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\ntype Key<T> = Extract<keyof T, string>;\n\ntype KeyOf<T> = Extract<keyof T, string>;\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\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\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 passesRowFilters(row: T): boolean {\n // per-column\n for (const col of this.columns) {\n if (!col.filterable) continue;\n const key = col.field as string;\n const q = this.norm(this.filters[key]);\n if (!q) continue;\n const cell = this.norm((row as any)[col.field]);\n if (!cell.includes(q)) return false;\n }\n // global\n const g = this.norm(this.globalFilter);\n if (!g) return true;\n return this.columns.some(c => this.norm((row as any)[c.field]).includes(g));\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 rowIsValidAgainst(targetErrors: Partial<Record<KeyOf<T>, string>>): boolean {\n for (const col of this.columns) {\n if (col.editable === false) continue;\n const key = this.keyOf(col);\n if (targetErrors[key]) return false;\n }\n return true;\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 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 private compare(a: any, b: any): number {\n if (a == null && b == null) return 0;\n if (a == null) return -1;\n if (b == null) return 1;\n if (typeof a === 'string' && typeof b === 'string') {\n return a.localeCompare(b, undefined, { numeric: true, sensitivity: 'base' });\n }\n return a < b ? -1 : a > b ? 1 : 0;\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 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\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 newRow = { ...(this.addForm.value as any) } as T;\n this.rowAdd.emit({ newRow });\n\n this.addingNew = false;\n this.addForm = this.fb.group({});;\n this.saveAttemptedNew = false;\n }\n\n cancelAdd() {\n this.addingNew = false;\n this.addForm = this.fb.group({});;\n this.saveAttemptedNew = false;\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 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 updated = { ...(original as any), ...(this.editForm.value as any) } as T;\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 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 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 const EMAIL_RX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!err && col.type === 'email' && val && !EMAIL_RX.test(String(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 this.rowDelete.emit({ row: this.data[di], index: di });\n }\n\n // (optional) better *ngFor performance\n trackRow = (_: number, row: T) => row;\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 &times;\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\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 &times;\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 &#9662;\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 [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 [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 // `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 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['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 === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n this.moveActive(event.key === 'ArrowDown' ? 1 : -1);\n } else if (event.key === 'Enter') {\n event.preventDefault();\n const active = this.visible[this.activeIndex] || this.visible[0];\n if (active) this.selectItem(active);\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 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.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.visible.length) return;\n\n const nextIndex = this.activeIndex < 0 ? 0 : (this.activeIndex + direction + this.visible.length) % this.visible.length;\n this.activeIndex = nextIndex;\n\n const buttons = this.scroller?.nativeElement.querySelectorAll<HTMLButtonElement>('button.dropdown-item');\n buttons?.[this.activeIndex]?.focus();\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":";;;;;;;;MAUa,eAAe,CAAA;AAEE,IAAA,QAAA;AADV,IAAA,KAAK;AACvB,IAAA,WAAA,CAA4B,QAAiC,EAAA;QAAjC,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAA4B;uGAFrD,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,SAAS;mBAAC,EAAE,QAAQ,EAAE,sBAAsB,EAAE;;sBAE5C,KAAK;uBAAC,SAAS;;MAKL,iBAAiB,CAAA;AAEA,IAAA,QAAA;AADR,IAAA,KAAK;AACzB,IAAA,WAAA,CAA4B,QAAiC,EAAA;QAAjC,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAA4B;uGAFrD,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,CAAA,WAAA,EAAA,OAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,SAAS;mBAAC,EAAE,QAAQ,EAAE,wBAAwB,EAAE;;sBAE9C,KAAK;uBAAC,WAAW;;MAKP,iBAAiB,CAAA;AAEA,IAAA,QAAA;AADR,IAAA,KAAK;AACzB,IAAA,WAAA,CAA4B,QAAmC,EAAA;QAAnC,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAA8B;uGAFvD,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,CAAA,WAAA,EAAA,OAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,SAAS;mBAAC,EAAE,QAAQ,EAAE,wBAAwB,EAAE;;sBAE9C,KAAK;uBAAC,WAAW;;MAKP,uBAAuB,CAAA;AACN,IAAA,QAAA;AAA5B,IAAA,WAAA,CAA4B,QAAsC,EAAA;QAAtC,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAAiC;uGAD1D,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,SAAS;mBAAC,EAAE,QAAQ,EAAE,8BAA8B,EAAE;;MAO1C,oBAAoB,CAAA;AACH,IAAA,QAAA;AAA5B,IAAA,WAAA,CAA4B,QAAsD,EAAA;QAAtD,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAAiD;uGAD1E,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,SAAS;mBAAC,EAAE,QAAQ,EAAE,2BAA2B,EAAE;;AAMpD;AACO,MAAM,4BAA4B,GAAG;AAC1C,IAAA,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE;;;MCdrE,sBAAsB,CAAA;IACxB,IAAI,GAAG,CAAC;IACR,QAAQ,GAAG,EAAE;IACb,cAAc,GAAG,CAAC;IAClB,OAAO,GAAG,CAAC;AACV,IAAA,UAAU,GAAG,IAAI,YAAY,EAAU;AAEjD,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjF;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU;AAC7B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACzC,IAAI,KAAK,IAAI,GAAG;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEvE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;AAChC,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzC,QAAA,IAAI,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC;AACzB,QAAA,IAAI,GAAG,GAAG,KAAK,EAAE;YAAE,GAAG,GAAG,KAAK;AAAE,YAAA,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QAAE;QAEvD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC;QACzE,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,GAAY,GAAG,CAAC,CAAC,GAAG,EAAE;AAC/D,QAAA,MAAM,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,GAAG,GAAY,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE;QACnF,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IACpC;AAEA,IAAA,EAAE,CAAC,CAAS,EAAA;AACV,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI;YAAE;AACrD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACzB;uGA9BW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApBvB;;;;;;;;;;;;;;;;;AAiBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAlBS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAqBX,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAxBlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;AAiBT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;sBAEE;;sBACA;;sBACA;;sBACA;;sBACA;;;MC3BmB,gBAAgB,CAAA;AAAyD;MACzE,kBAAkB,CAAA;AAA2D;MAGtF,gBAAgB,CAAA;;IAEnB,GAAG,GAAG,MAAM,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAClD,KAAK,GAAG,MAAM,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAE9D,IAAA,SAAS,CAAC,CAAmB,EAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,GAAG;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;QAC9D,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3B;AAEA,IAAA,WAAW,CAAC,CAAqB,EAAA;QAC/B,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC;QAClE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7B;uGAbW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cADH,MAAM,EAAA,CAAA;;2FACnB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCNrB,YAAY,CAAA;IACvB,MAAM,MAAM,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAoB,EAAA;QACjE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,OAAO,CAAC;QACvC,MAAM,SAAS,GAAG,CAAC,MAAM,OAAO,iBAAiB,CAAC,EAAE,OAAO;QAC3D,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,EAAE,CAAC;AACrF,QAAA,SAAS,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC1G,QAAA,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAA,IAAA,CAAM,CAAC;IAC7B;AACD;;MCRY,WAAW,CAAA;IACtB,MAAM,MAAM,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAsB,EAAA;AACrE,QAAA,MAAM,IAAI,GAAG,MAAM,OAAO,MAAM,CAAC;AACjC,QAAA,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACtD,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;QACxD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;QAChC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC;QAC/C,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAA,EAAG,QAAQ,CAAA,KAAA,CAAO,CAAC;IACxC;AACD;;ACND;MAEa,qBAAqB,CAAA;;AAEvB,IAAA,WAAW,GAAG,MAAM,CAAmC,WAAkB,CAAC;uGAFxE,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,SAAS;mBAAC,EAAE,QAAQ,EAAE,mBAAmB,EAAE;;;ACc5C,MAAM,QAAQ,GAAG,4BAA4B;MAkBhC,QAAQ,CAAA;;IAEV,OAAO,GAAmB,EAAE;;IAG5B,IAAI,GAAQ,EAAE;IACd,aAAa,GAAG,KAAK;AACrB,IAAA,eAAe,GAAG,KAAK,CAAC;AACxB,IAAA,kBAAkB,GAAG,KAAK,CAAC;IAC3B,gBAAgB,GAAG,KAAK;IACxB,UAAU,GAAG,KAAK;IAClB,YAAY,GAAG,KAAK;IACpB,eAAe,GAAa,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAE3C,SAAS,GAAG,KAAK;;IAEjB,kBAAkB,GAAkB,SAAS;;IAE7C,aAAa,GAAG,OAAO;;IAEvB,qBAAqB,GAAG,oBAAoB;;IAE5C,kBAAkB,GAAG,YAAY;;IAEjC,oBAAoB,GAAG,cAAc;;IAErC,kBAAkB,GAAG,eAAe;;IAEpC,oBAAoB,GAAG,iBAAiB;;IAExC,cAAc,GAAqF,IAAI;AACvG,IAAA,WAAW,GAAG,KAAK,CAAC;IACpB,cAAc,GAAG,KAAK;AACtB,IAAA,YAAY,GAAG,KAAK,CAAC;AACrB,IAAA,aAAa,GAA6B;AACjD,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,QAAQ,EAAE;KACX;IAEQ,KAAK,GAAqB,WAAW;IACrC,UAAU,GAA2C,KAAK;;IAG1D,eAAe,CAAoD;IACnE,qBAAqB,CAAe;;AAGR,IAAA,eAAe;IAEpD,SAAS,GAAG,KAAK;AAEP,IAAA,MAAM,GAAG,IAAI,YAAY,EAAiB;;AAG1C,IAAA,OAAO,GAAG,IAAI,YAAY,EAA6B;AACvD,IAAA,OAAO,GAAG,IAAI,YAAY,EAA8C;AACxE,IAAA,SAAS,GAAG,IAAI,YAAY,EAA6B;AACzD,IAAA,SAAS,GAAG,IAAI,YAAY,EAA6B;AAEzD,IAAA,UAAU,GAAG,IAAI,YAAY,EAA6D;AAC1F,IAAA,aAAa,GAAG,IAAI,YAAY,EAAuD;AACvF,IAAA,UAAU,GAAG,IAAI,YAAY,EAAsC;AAEzC,IAAA,YAAY;AACxC,IAAA,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAE5C,IAAA,QAAQ,GAAgB,IAAI,GAAG,EAAU;AAEjC,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;IAEzB,UAAU,GAAc,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AACzC,IAAA,gBAAgB,GAAG,IAAI,WAAW,CAAS,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAE5E,SAAS,GAAG,KAAK;IACjB,QAAQ,GAA0C,IAAI;IACtD,SAAS,GAAsC,EAAE;;IAEjD,IAAI,GAAoE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;;IAEvG,YAAY,GAAG,EAAE;AACjB,IAAA,OAAO,GAA2B,EAAE,CAAC;IACrC,IAAI,GAAG,CAAC;IACC,QAAQ,GAAG,EAAE;;AAGtB,IAAA,YAAY,GAAkB,IAAI,CAAC;IACnC,QAAQ,GAAc,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;IACvC,iBAAiB,GAAG,KAAK;IAEzB,OAAO,GAAe,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;IACvC,gBAAgB,GAAG,KAAK;AAEhB,IAAA,IAAI,CAAC,CAAU,EAAA;AACrB,QAAA,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;IAClD;AAEQ,IAAA,KAAK,CAAC,GAAiB,EAAA;QAC7B,OAAO,GAAG,CAAC,KAAiB;IAC9B;AAEQ,IAAA,gBAAgB,CAAC,GAAM,EAAA;;AAE7B,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE;YAC9B,IAAI,CAAC,GAAG,CAAC,UAAU;gBAAE;AACrB,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,KAAe;AAC/B,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACtC,YAAA,IAAI,CAAC,CAAC;gBAAE;AACR,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAE,GAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/C,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAE,gBAAA,OAAO,KAAK;QACrC;;QAEA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AACtC,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAE,GAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC7E;IAEQ,WAAW,GAAA;AACjB,QAAA,OAAO,OAAO,IAAI,CAAC,cAAc,KAAK;AACpC,cAAG,IAAI,CAAC,cAAsB,EAAE,IAAI;AACpC,cAAE,IAAI,CAAC,cAAc,IAAI,EAAE;IAC/B;AAEQ,IAAA,UAAU,CAAC,GAAiB,EAAA;AAClC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE;AAC5B,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,KAAiB;QACjC,IAAI,GAAG,IAAI,CAAC;AAAE,YAAA,OAAO,CAAC,CAAC,GAAG,CAAC;AAC3B,QAAA,QAAQ,GAAG,CAAC,IAAI;AACd,YAAA,KAAK,SAAS,EAAE,OAAO,KAAK;AAC5B,YAAA,KAAK,QAAQ,EAAE,OAAO,EAAE;AACxB,YAAA,KAAK,MAAM,EAAE,OAAO,EAAE;AACtB,YAAA,SAAS,OAAO,EAAE;;IAEtB;IACQ,eAAe,GAAA;QACrB,MAAM,EAAE,GAAG,iBAAiB;AAC5B,QAAA,OAAO,CAAC,CAAkB,KACxB,CAAC,CAAC,KAAK,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AACpF,cAAE;AACF,cAAE,EAAE,MAAM,EAAE,IAAI,EAAE;IACxB;IAEQ,aAAa,GAAA;QACnB,OAAO,CAAC,CAAkB,KAAI;AAC5B,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK;YACjB,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;AAAE,gBAAA,OAAO,IAAI;YAC1D,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI;AAC7D,QAAA,CAAC;IACH;AAEQ,IAAA,gBAAgB,CAAC,GAAoC,EAAA;QAC3D,MAAM,KAAK,GAAwB,EAAE;AACrC,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE;AAC9B,YAAA,IAAI,GAAG,CAAC,QAAQ,KAAK,KAAK;AAAE,gBAAA,SAAS;AACrC,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,KAAe;YAC/B,MAAM,OAAO,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAI,GAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAC5E,MAAM,CAAC,GAAU,EAAE;YAEnB,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;AAAE,gBAAA,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;AACvE,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE;gBACxB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,oBAAoB,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC;YAC3E;AACA,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;gBAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;AACzD,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;gBAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;;YAGrD,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3B;QACA,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;IAC7B;AAEQ,IAAA,iBAAiB,CAAC,YAA+C,EAAA;AACvE,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE;AAC9B,YAAA,IAAI,GAAG,CAAC,QAAQ,KAAK,KAAK;gBAAE;YAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAC3B,IAAI,YAAY,CAAC,GAAG,CAAC;AAAE,gBAAA,OAAO,KAAK;QACrC;AACA,QAAA,OAAO,IAAI;IACb;IACQ,oBAAoB,GAAA;;QAE1B,MAAM,EAAE,GAAG,kDAAkD;QAC7D,OAAO,CAAC,CAAkB,KAAI;AAC5B,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK;YACjB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE;gBAAE,OAAO,IAAI,CAAC;YAC3D,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;AACpD,QAAA,CAAC;IACH;;AAGA,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,WAAW,IAAI,IAAI;IAClD;;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,IAAI,CAAC,IAAI,CAAC,eAAe;AAAE,YAAA,OAAO,IAAI,CAAC,IAAI,IAAI,EAAE;AACjD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE;AAC3B,QAAA,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,IAAG;;AAEpB,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE;gBAC9B,IAAI,CAAC,GAAG,CAAC,UAAU;oBAAE;gBACrB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAe,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;AACnF,gBAAA,IAAI,CAAC,CAAC;oBAAE;gBACR,MAAM,IAAI,GAAG,CAAE,CAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;AAC1E,gBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAE,oBAAA,OAAO,KAAK;YACrC;;AAEA,YAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,gBAAA,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;AACnE,gBAAA,IAAI,CAAC;AAAE,oBAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAE,CAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACxG;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;IAEQ,OAAO,CAAC,CAAM,EAAE,CAAM,EAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI;AAAE,YAAA,OAAO,CAAC;QACpC,IAAI,CAAC,IAAI,IAAI;YAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,IAAI;AAAE,YAAA,OAAO,CAAC;QACvB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AAClD,YAAA,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;QAC9E;QACA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;IACnC;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC,QAAQ;QAC1F,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,IAAI;QACvC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,KAAI;AAC3B,YAAA,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;AAAE,YAAA,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;YAC9C,MAAM,GAAG,GAAG,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,EAAE,KAAK;AAClD,kBAAE,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE;kBACtE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;AAClC,YAAA,OAAO,SAAS,KAAK,KAAK,GAAG,GAAG,GAAG,CAAC,GAAG;AACzC,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,IAAI;IACb;;AAGA,IAAA,IAAI,KAAK,GAAA;QACP,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE,OAAO,IAAI,CAAC,MAAM;AAC9C,QAAA,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ;AAC7C,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;IACxD;;AAGA,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;IACxE;AAEA,IAAA,IAAI,UAAU,GAAA,EAAa,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACrH,IAAI,QAAQ,KAAa,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AAEzF,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,GAAG,CAAC;AACjE,QAAA,MAAM,QAAQ,GAAK,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC;QAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,UAAU,GAAG,QAAQ;IACpD;AAEA,IAAA,UAAU,CAAC,GAAiB,EAAA;AAC1B,QAAA,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE;IACnD;AAEA,IAAA,qBAAqB,CAAC,GAAiB,EAAA;QACrC,OAAO,CAAA,EAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS;IACzC;AAEA,IAAA,cAAc,CAAC,GAAiB,EAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;IAC7B;AAEA,IAAA,WAAW,CAAC,KAA+B,EAAA;QACzC,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAC7E,YAAA,OAAO,MAAM;QACf;AACA,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,KAAK,GAAG,WAAW,GAAG,YAAY;IACnE;AAEA,IAAA,mBAAmB,CAAC,GAAiB,EAAA;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC;eAClC,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK;AACzB,kBAAE;AACF,kBAAE,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK;AACxB,sBAAE;sBACA,UAAU;cACd,UAAU;AACd,QAAA,OAAO,CAAA,QAAA,EAAW,MAAM,CAAA,eAAA,EAAkB,KAAK,GAAG;IACpD;AAEA,IAAA,eAAe,CAAC,IAAmB,EAAA;AACjC,QAAA,OAAO,IAAI,KAAK,KAAK,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,oBAAoB;IAC7E;;;AAKQ,IAAA,kBAAkB,CAAC,CAAS,EAAA;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;IAC/B;IAEQ,iBAAiB,GAAA;QACvB,MAAM,KAAK,GAAwB,EAAE;AACrC,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,CAAC,UAAU;gBAAE,KAAK,CAAC,CAAC,CAAC,KAAe,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/E,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;QAEtC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,IAAG;AACzC,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAQ,EAAE,CAAC;AACrF,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;AAChD,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC;YACb,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,KAAY,EAAE,CAAC;AACzG,QAAA,CAAC,CAAC;IACJ;AAE4C,IAAA,QAAQ;AACR,IAAA,QAAQ;AACR,IAAA,UAAU;AACJ,IAAA,UAAU;;IAGrD,QAAQ,GAAyC,EAAE;IACnD,QAAQ,GAA2C,EAAE;IACrD,UAAU,GAAyC,EAAE;IACrD,SAAS,GAAoC,IAAI;AAEhD,IAAA,QAAQ,CACd,KAAqD,EAAA;AAErD,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK;AAC7B,cAAE;cACA,KAAK,YAAY;AACjB,kBAAE,KAAK,CAAC,OAAO;kBACb,EAAE;QACR,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAuB,CAAC;IACjF;IAEA,MAAM,MAAM,CAAC,IAAmB,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO;YAAE;AAClC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE;AACxC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AACvE,YAAA,IAAI,IAAI,KAAK,KAAK,EAAE;AAClB,gBAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC5B,oBAAA,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,QAAQ;AACjD,oBAAA,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;AAC7B,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC;AAC7B,iBAAA,CAAC;YACJ;iBAAO;AACL,gBAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;AAC9B,oBAAA,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,QAAQ;oBACjD,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,IAAI,QAAQ;AAC1D,oBAAA,OAAO,EAAE,IAAI;AACb,oBAAA,IAAI,EAAE;AACP,iBAAA,CAAC;YACJ;QACF;gBAAU;AAAE,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QAAE;IACtC;AAEQ,IAAA,MAAM,cAAc,GAAA;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,KAAK,IAAI,SAAS;AACnD,QAAA,IAAI,IAAI,KAAK,KAAK,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,eAAe;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC;AACvF,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE;YAChC,OAAO,YAAY,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7E;AACA,QAAA,IAAI,IAAI,KAAK,WAAW,EAAE;YACxB,IAAI,CAAC,IAAI,CAAC,qBAAqB;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC;AACzG,YAAA,OAAO,IAAI,CAAC,qBAAqB,EAAE;QACrC;;QAEA,OAAO,IAAI,CAAC,KAAK;IACnB;IAEA,kBAAkB,GAAA;QAChB,MAAM,OAAO,GAAG,MAAK;YACnB,IAAI,CAAC,QAAQ,GAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC9C,IAAI,CAAC,QAAQ,GAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC9C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YAChD,IAAI,CAAC,SAAS,GAAI,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,IAAI;AAClD,QAAA,CAAC;AACD,QAAA,OAAO,EAAE;QACT,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;QACzC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;QACzC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;QAC3C,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;IAC7C;AAEA,IAAA,WAAW,CAAC,EAAiB,EAAA;QAC3B,IAAI,EAAE,CAAC,SAAS,CAAC;YAAE,IAAI,CAAC,iBAAiB,EAAE;IAC7C;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS;YAAE;AACvC,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACvC,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;IAC/B;IAEA,OAAO,GAAA;QACL,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;AACtC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE;AAErC,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE;QAE1B,MAAM,MAAM,GAAG,EAAE,GAAI,IAAI,CAAC,OAAO,CAAC,KAAa,EAAO;QACtD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;AAE5B,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QAAC;AACjC,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;IAC/B;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QAAC;AACjC,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;IAC/B;AAEA,IAAA,SAAS,CAAC,CAAS,EAAA;QACjB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAQ;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAQ,CAAC;AAC3D,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;QAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;QACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACtD;AAEA,IAAA,QAAQ,CAAC,CAAS,EAAA;QAChB,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AAC/C,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE;AAChC,QAAA,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE;AAEtC,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO;YAAE;AAE3B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC9B,QAAA,MAAM,OAAO,GAAG,EAAE,GAAI,QAAgB,EAAE,GAAI,IAAI,CAAC,QAAQ,CAAC,KAAa,EAAO;AAE9E,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAEnD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;IAChC;AAEA,IAAA,UAAU,CAAC,CAAS,EAAA;AAClB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACtD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;IAChC;;AAGA,IAAA,gBAAgB,CAAC,GAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;IACvD;AAEA,IAAA,YAAY,CAAC,GAAiB,EAC5B,WAAkD,EAClD,YAA+C,EAAA;AAE/C,QAAA,IAAI,CAAC,WAAW;YAAE;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAC3B,QAAA,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC;QAC5B,IAAI,GAAG,GAAG,EAAE;;AAGZ,QAAA,IAAI,GAAG,CAAC,QAAQ,EAAE;AAChB,YAAA,MAAM,KAAK,GAAG,GAAG,IAAI,IAAI,KAAK,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AAC3E,YAAA,IAAI,KAAK;gBAAE,GAAG,GAAG,UAAU;QAC7B;;QAEA,MAAM,QAAQ,GAAG,4BAA4B;QAC7C,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAAE,GAAG,GAAG,eAAe;QAC7F,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,IAAI,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAAE,GAAG,GAAG,gBAAgB;QACnH,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,GAAG,GAAG,cAAc;AACrG,QAAA,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,KAAK;YAAE,GAAG,GAAG,UAAU;AAErG,QAAA,IAAI,GAAG;AAAE,YAAA,YAAY,CAAC,GAAG,CAAC,GAAG,GAAG;;AAAO,YAAA,OAAO,YAAY,CAAC,GAAG,CAAC;IACjE;AAEA,IAAA,SAAS,CAAC,CAAS,EAAA;QACjB,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE;QACxB,MAAM,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACxD;;IAGA,QAAQ,GAAG,CAAC,CAAS,EAAE,GAAM,KAAK,GAAG;AAErC,IAAA,UAAU,CAAC,KAA+B,EAAA;QACxC,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE;AAEzB,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE;;YAC1E,IAAI,CAAC,IAAI,GAAG;AACf,gBAAA,MAAM,EAAE,KAAK;AACb,gBAAA,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,MAAM,GAAG,EAAE,GAAG;aAC3F;AAED,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;QACb,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IACpF;IAEA,oBAAoB,GAAA;QAClB,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAAE;AACvD,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;QACb,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;IACtF;IAEA,oBAAoB,GAAA;QAClB,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE;AAC3B,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;QACb,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;IACtF;AAEA,IAAA,YAAY,CAAC,CAAS,EAAA;AACpB,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpE;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpE;AAEA,IAAA,YAAY,CAAC,CAAS,EAAA;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAEnC,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACrB,YAAA,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpC;aAAO;;YAEL,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QACzD;IACF;AAEA,IAAA,UAAU,CAAC,CAAS,EAAA;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B;IAEA,UAAU,CAAC,EAAc,EAAE,CAAS,EAAA;QAClC,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE;QAC1B,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC;YAAE;AAC/C,QAAA,MAAM,EAAE,GAAG,EAAE,CAAC,MAAqB;AACnC,QAAA,IAAI,EAAE,CAAC,OAAO,CAAC,6DAA6D,CAAC;YAAE;AAC/E,QAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACnB;AAEA,IAAA,MAAM,CAAC,CAAS,EAAA;QACd,IAAI,CAAC,GAAG,CAAC;YAAE;AACX,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpE;AAEA,IAAA,UAAU,CAAC,EAAU,EAAA;QACnB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ;AAC3C,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpE;AAEA,IAAA,MAAM,CAAC,CAAM,EAAA;AACX,QAAA,OAAO,OAAO,CAAC,KAAK,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO;IAClD;AAEA,IAAA,aAAa,CAAC,IAAmB,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IACnB;IAEA,mBAAmB,GAAA;AACjB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU;AACzB,QAAA,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,IAAK,CAAkC,CAAC,OAAO,KAAK,IAAI,CAAC;IACpF;uGA3kBW,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAR,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,KAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,SAAA,EAPR;AACT,YAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,YAAY,EAAE;AACrD,YAAA,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,WAAW;SACrD,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAqDa,qBAAqB,+EAgBrB,oBAAoB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EA8PjB,eAAe,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EACf,iBAAiB,6CACjB,iBAAiB,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EACjB,uBAAuB,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzW1C,iueAsVA,yvCDxTY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,sBAAsB,8IAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FASrE,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAZpB,SAAS;+BACE,cAAc,EAAA,OAAA,EAEf,CAAC,YAAY,EAAE,WAAW,EAAE,sBAAsB,EAAE,mBAAmB,CAAC,EAAA,SAAA,EAEtE;AACT,wBAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,YAAY,EAAE;AACrD,wBAAA,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,WAAW;AACrD,qBAAA,EAAA,UAAA,EACU,IAAI,EAAA,eAAA,EACE,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,iueAAA,EAAA,MAAA,EAAA,CAAA,ksCAAA,CAAA,EAAA;;sBAI9C;;sBAGA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAOA;;sBACA;;sBAGA;;sBACA;;sBAGA,YAAY;uBAAC,qBAAqB;;sBAIlC;;sBAGA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBAEA,YAAY;uBAAC,oBAAoB;;sBAmBjC;;sBA2OA,eAAe;uBAAC,eAAe;;sBAC/B,eAAe;uBAAC,iBAAiB;;sBACjC,eAAe;uBAAC,iBAAiB;;sBACjC,eAAe;uBAAC,uBAAuB;;;MEtW7B,gBAAgB,CAAA;IACnB,IAAI,GAAuB,IAAI;AACvC,IAAA,QAAQ,CAAC,OAAe,EAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO;YAClC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK;YAC7D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,uBAAuB;YACnF,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ;YACrC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QACtC;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,OAAO;IACjC;uGAdW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cADH,MAAM,EAAA,CAAA;;2FACnB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;MAkBrB,iBAAiB,GAAG,IAAI,cAAc,CACjD,mBAAmB,EACnB,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,EAAE;;MCXhC,QAAQ,GAAG,IAAI,cAAc,CAAU,UAAU;AAEvD,MAAM,cAAc,GAAY;IACrC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM;AAC7B,IAAA,QAAQ,EAAE,MAAM,qEAAqE;AACrF,IAAA,OAAO,EAAE,MAAM,UAAU;AACzB,IAAA,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAA,kBAAA,EAAqB,CAAC,CAAA,IAAA,EAAO,CAAC,CAAA,CAAA,CAAG;AACxD,IAAA,QAAQ,EAAE,MAAM,WAAW;AAC3B,IAAA,cAAc,EAAE,MAAM;;;ACnBxB;MAca,WAAW,CAAA;AACb,IAAA,MAAM,GAAG,MAAM,CAAC,KAAK,kDAAC;AACvB,IAAA,KAAK,GAAG,IAAI,GAAG,EAAsB;AACrC,IAAA,SAAS,GAAkB,IAAI,CAAC;;IAIjC,IAAI,GAAY,cAAc;AAC9B,IAAA,QAAQ;IAEf,WAAA,CACyC,UAAwC,EACjD,IAAoB,EAAA;AAElD,QAAA,IAAI,IAAI;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAC1B,QAAA,IAAI,UAAU;AAAE,YAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;IAC5C;AAGA,IAAA,aAAa,CAAI,OAAsB,EAAA;QACrC,MAAM,EAAE,GAAG,UAAU,IAAI,MAAM,EAAE,UAAU,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,OAAqB,CAAC;AACzC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,GAAG,CAAC,EAAiB,EAAA;AACnB,QAAA,IAAI,CAAC,EAAE;AAAE,YAAA,OAAO,IAAI;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI;IACnC;IAEA,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,IAAI;IACzE;AAEA,IAAA,KAAK,CAAC,EAAkB,EAAA;AACtB,QAAA,IAAI,EAAE;AAAE,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;AAC7B,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,EAAE;AAAE,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AAChD,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;IACnD;uGAxCW,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAWA,iBAAiB,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EACjB,QAAQ,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAZnB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cADE,MAAM,EAAA,CAAA;;2FACnB,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;0BAY7B;;0BAAY,MAAM;2BAAC,iBAAiB;;0BACpC;;0BAAY,MAAM;2BAAC,QAAQ;;;MCInB,mBAAmB,CAAA;AACpB,IAAA,EAAE,GAAG,MAAM,EAAC,UAAuB,EAAC;AACpC,IAAA,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC;IAE1B,cAAc,GAAkB,UAAU;;AAG9B,IAAA,IAAI;;AAEhB,IAAA,QAAQ;;IAER,WAAW,GAAG,KAAK;;IAGnB,cAAc,GAAG,KAAK;;AAEtB,IAAA,UAAU;IAEV,YAAY,GAAG,KAAK;IAEpB,UAAU,GAAgC,IAAI;;IAG/C,OAAO,GAAG,KAAK;IACvB,IAAyC,MAAM,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;AAEhE,IAAA,YAAY;IACrB,IAAoC,SAAS,GAAA,EAAK,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC;;AAE1E,IAAA,UAAU,GAAG,IAAI,YAAY,EAAsB;IAEnC,IAAI,GAAG,MAAM;IAEJ,SAAS,GAAG,IAAI;;IAG3C,KAAK,GAAG,KAAK;IACrB,IAAuC,MAAM,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;;IAG7D,OAAO,GAAmB,IAAI;AACtC,IAAA,IAAyC,aAAa,GAAA;;QAElD,OAAO,IAAI,CAAC,OAAO,KAAK,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO,GAAG,IAAI;IACnF;AACQ,IAAA,WAAW;IACX,SAAS,GAAG,CAAC,CAAC;AAGtB,IAAA,WAAW,CAAC,EAAa,EAAA;QACrB,IAAI,IAAI,CAAC,WAAW;YAAE;QACtB,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;;QAE7B,IAAI,CAAC,EAAE;YACH,EAAE,CAAC,cAAc,EAAE;AACnB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACxB;aAAO;;AAEH,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QACxB;IACJ;AAGA,IAAA,UAAU,CAAC,EAAa,EAAA;QACpB,IAAI,IAAI,CAAC,WAAW;YAAE;QAEtB,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,EAAE;;AAEJ,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;YACpB;QACJ;QAEA,EAAE,CAAC,cAAc,EAAE;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AAEnB,QAAA,IAAI;YAAE,IAAI,EAAE,CAAC,YAAY;AAAE,gBAAA,EAAE,CAAC,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,GAAG,MAAM,GAAG,MAAM;QAAE;QAAE,MAAM,EAAE;QAEzG,IAAI,CAAC,iBAAiB,EAAE;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;AACrC,QAAA,IAAI,GAAG,KAAK,IAAI,CAAC,SAAS,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,GAAG,GAAG;AACpB,YAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC;QACnC;IACJ;AAGA,IAAA,WAAW,CAAC,EAAa,EAAA;;AAErB,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAqB,CAAC,EAAE;YAC3D,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;AACnB,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACvB;IACJ;AAGA,IAAA,cAAc,CAAC,EAAa,EAAA;AACxB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa;QAClC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAc,CAAC;YAAE;QAEvC,MAAM,KAAK,GAAG,EAAS;QACvB,IAAI,KAAK,CAAC,YAAY;YAAE;AACxB,QAAA,KAAK,CAAC,YAAY,GAAG,IAAI;QAEzB,EAAE,CAAC,cAAc,EAAE;AACnB,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;;AAGpB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;IACvB;AAGA,IAAA,MAAM,CAAC,EAAa,EAAA;QAChB,IAAI,IAAI,CAAC,WAAW;YAAE;QAEtB,MAAM,KAAK,GAAG,EAAS;QACvB,IAAI,KAAK,CAAC,YAAY;YAAE;AACxB,QAAA,KAAK,CAAC,YAAY,GAAG,IAAI;QAEzB,EAAE,CAAC,cAAc,EAAE;QACnB,EAAE,CAAC,eAAe,EAAE;AAEpB,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;;AAGpB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;IACvB;;AAGQ,IAAA,UAAU,CAAC,EAAa,EAAA;;AAE5B,QAAA,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,cAAc,CAAC,IAAI,IAAI;AAC5D,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI;AACxC,QAAA,IAAI,CAAC,CAAC;YAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI;AAEnB,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI;AACtE,QAAA,OAAO,CAAC;IACZ;IAEQ,iBAAiB,GAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAChD,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,qBAAqB;YAClD,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;YACpD,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;QACvD;IACJ;IACQ,iBAAiB,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,aAAa;YAAE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;AACjG,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS;IAChC;AACQ,IAAA,qBAAqB,CAAC,KAAa,EAAA;AACvC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa;QAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,CAAkB;AAC/F,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC9B,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAY,CAAC;;YAC3C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAY,EAAE,MAAM,CAAC;IACrD;AACQ,IAAA,gBAAgB,CAAC,EAAa,EAAA;AAClC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa;AAClC,QAAA,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO;QACpB,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,CAAkB;AAC/F,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE;YAC7C,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;YAChC,IAAI,CAAC,GAAG,GAAG;AAAE,gBAAA,OAAO,CAAC;QACzB;QACA,OAAO,QAAQ,CAAC,MAAM;IAC1B;AAEQ,IAAA,SAAS,CAAC,CAAI,EAAA;QAClB,IAAI,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;;AAE9C,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAAE,YAAA,OAAQ,CAAC,CAAC,KAAK,EAAmB;AACxD,QAAA,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;AAAE,YAAA,OAAO,EAAE,GAAI,CAA6B,EAAO;QACjF,OAAO,CAAC,CAAC;IACb;IAEQ,2BAA2B,CAAC,IAAS,EAAE,UAAiB,EAAA;AAC5D,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc;AAC/B,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,KAAK;QAE/B,MAAM,KAAK,GAAY,EAAE;QACzB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEnD,QAAA,OAAO,KAAK,CAAC,MAAM,EAAE;AACjB,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAG;YACxB,IAAI,GAAG,KAAK,UAAU;AAAE,gBAAA,OAAO,IAAI;AACnC,YAAA,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE;AACzB,gBAAA,MAAM,IAAI,GAAG,KAAK,GAAG,GAAG,CAAC;AACzB,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AAAE,oBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YACzC;QACJ;AACA,QAAA,OAAO,KAAK;IACZ;AACJ;;;AAGG;AACK,IAAA,kBAAkB,CAAC,QAAgB,EAAA;QAC3C,MAAM,OAAO,GAAG,IAAW;;AAG3B,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,IAAI,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI;QAC1F,MAAM,OAAO,GAAI,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE;QAC/F,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK,EAAE,QAAQ,IAAI,CAAC,CAAC;AAElG,QAAA,MAAM,OAAO,GAAI,IAAI,CAAC,IAAa;QAEnC,OAAO;YACH,QAAQ;YACR,OAAO;YACP,QAAQ;YACR,OAAO;YACP,QAAQ;YACR,UAAU,EAAE,OAAO,KAAK,OAAO;SAClC;IACD;AAEA;;;AAGG;AACK,IAAA,iBAAiB,CAAC,EAAa,EAAA;AACvC,QAAA,MAAM,IAAI,GAAI,IAAY,CAAC,KAAK,EAAE;eAClB,IAAY,CAAC,GAAG,EAAE;eAClB,IAAY,CAAC,EAAE,EAAE;eACjB,IAAY,CAAC,UAAU,EAAE;AAC1B,eAAA,IAAI;AAEnB,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAQ,IAAI,CAAC,IAAc,EAAE,MAAM,IAAI,CAAC;QAEnD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAkB;AAC3D,QAAA,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO;AAEpB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE;YAChD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;YACvC,IAAI,CAAC,GAAG,IAAI;AAAE,gBAAA,OAAO,CAAC;QAC1B;QACA,OAAO,QAAQ,CAAC,MAAM;IACtB;;AAEQ,IAAA,UAAU,CAAI,OAA6B,EAAA;AAC/C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU;QAC7B,IAAI,OAAO,KAAK,KAAK,SAAS;AAAE,YAAA,OAAO,KAAK;AAC5C,QAAA,IAAI;AAAE,YAAA,OAAO,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI;QAAE;AAAE,QAAA,MAAM;AAAE,YAAA,OAAO,KAAK;QAAE;IAC1E;;AAGQ,IAAA,WAAW,CAAC,EAAa,EAAA;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;AACnC,QAAA,IAAI,CAAC,OAAO;YAAE;QAEd,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;;QAG3C,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YAC3B,EAAE,CAAC,cAAc,EAAE;YACnB,EAAE,CAAC,eAAe,EAAE;AACpB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACpB,YAAA,OAAO;QACX;AACA,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;;AAGpB,QAAA,IAAI,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;;AAE3D,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACvD,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YACnB;QACJ;QACA,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS;AAC1E,QAAA,MAAM,QAAQ,GAAI,OAAO,CAAC,QAAgB,IAAI,SAAS;QACvD,MAAM,SAAS,GAAI,OAAO,CAAC,SAAoB,IAAI,CAAC,CAAC;AAErD,QAAA,MAAM,QAAQ,GAAG,QAAQ,KAAK,IAAI,CAAC,IAAI;AACvC,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,SAAS,KAAK,CAAC,CAAC;;;QAIlF,MAAM,uBAAuB,GAAG,IAAI,CAAC,cAAc,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU;QAE/E,MAAM,YAAY,GACd;cACM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAS,CAAC;eAChC,uBAAuB,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAS,CAAC,GAAI,OAAO,CAAC,IAAU,CAAC;;QAG7F,IAAI,CAAC,UAAU,IAAI,CAAC,uBAAuB,IAAI,SAAS,GAAG,CAAC,CAAC,EAAE;AAC3D,YAAA,QAAS,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QAClC;;QAGA,MAAM,QAAQ,GAAG,QAAQ,IAAI,SAAS,GAAG,CAAC,CAAC,IAAI,WAAW,GAAG;cACvD,WAAW,GAAG;cACd,WAAW;QAEjB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,YAAY,CAAC;QAE3C,IAAI,CAAC,iBAAiB,EAAE;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;AAEnB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACjB,YAAA,IAAI,EAAE,YAAY;YAClB,SAAS;AACT,YAAA,OAAO,EAAE,QAAQ;YACjB,QAAQ,EAAE,QAAQ,IAAI,EAAE;YACxB,MAAM,EAAE,IAAI,CAAC,IAAI;YACjB;AACH,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IAEpD;uGArUS,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,CAAA,YAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,sBAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE;AACf,iBAAA;;sBAKI;;sBAGA,KAAK;uBAAC,YAAY;;sBAElB;;sBAEA;;sBAGA;;sBAEA;;sBAEA;;sBAEA;;sBAIA,WAAW;uBAAC,sBAAsB;;sBAElC;;sBACA,WAAW;uBAAC,iBAAiB;;sBAE7B;;sBAEA,WAAW;uBAAC,WAAW;;sBAEvB,WAAW;uBAAC,oBAAoB;;sBAIhC,WAAW;uBAAC,oBAAoB;;sBAIhC,WAAW;uBAAC,sBAAsB;;sBAOlC,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;;sBAgBpC,YAAY;uBAAC,UAAU,EAAE,CAAC,QAAQ,CAAC;;sBA0BnC,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;;sBAWpC,YAAY;uBAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;;sBAiBxC,YAAY;uBAAC,MAAM,EAAE,CAAC,QAAQ,CAAC;;;MC1IvB,mBAAmB,CAAA;AAGE,IAAA,UAAA;AAFxB,IAAA,EAAE,GAAG,MAAM,EAAC,UAAuB,EAAC;AACpC,IAAA,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC;AACnC,IAAA,WAAA,CAAgC,UAAmC,EAAA;QAAnC,IAAA,CAAA,UAAU,GAAV,UAAU;IAA4B;;AAGjD,IAAA,IAAI;;AAEhB,IAAA,QAAQ;;AAER,IAAA,QAAQ;IACR,WAAW,GAAG,KAAK;AAElB,IAAA,YAAY,GAAG,IAAI,YAAY,EAAK;AACpC,IAAA,UAAU,GAAG,IAAI,YAAY,EAAQ;IAE/C,IAAmC,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACpC,QAAQ,GAAG,KAAK;AACvD,IAAA,IAAsC,WAAW,GAAA,EAAK,OAAO,IAAI,CAAC,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACrE,IAAI,GAAG,UAAU;AACb,IAAA,QAAQ,GAAG,CAAC,CAAC;IAEnC,SAAS,GAAkB,IAAI;AAGrC,IAAA,WAAW,CAAC,EAAa,EAAA;QACzB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;YAAE,EAAE,CAAC,cAAc,EAAE;YAAE;QAAQ;QAE1E,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;YACtC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,QAAQ;AACjD,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI;YAC/B,SAAS,EAAE,IAAI,CAAC,QAAQ;AACxB,YAAA,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,YAAY,KAAK;AAEpD,SAAA,CAAC;;QAGF,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC;QACxD,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAC9C,IAAI,EAAE,CAAC,YAAY;AAAE,YAAA,EAAE,CAAC,YAAY,CAAC,aAAa,GAAG,UAAU;AAE/D,QAAA,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,CAAC;AAE5D,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACpB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACjC;IAGF,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QACrB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;AAChC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;IACxB;AAGA,IAAA,SAAS,CAAC,EAAiB,EAAA;QACzB,IAAI,IAAI,CAAC,WAAW;YAAE;;QAGtB,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACzC,EAAE,CAAC,cAAc,EAAE;YACnB,IAAI,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;YAC7C;QACF;QAEA,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;;AAGpB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU;QAC9B,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ;YAAE;AAElD,QAAA,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,CAAC,IAAI,KAAK,WAAW,EAAE;YACpD,EAAE,CAAC,cAAc,EAAE;AACnB,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI;AACxB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAS;AAC3B,YAAA,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,KAAK,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC;YACpD,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/C,YAAA,IAAI,EAAE,KAAK,IAAI,EAAE;AACf,gBAAA,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;AACtB,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;gBAElB,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACzE;QACF;AAEA,QAAA,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE;YAAE,EAAE,CAAC,cAAc,EAAE;YAAE,IAAI,CAAC,SAAS,EAAE;AAAE,QAAA,CAAC;AACnE,QAAA,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE;YAAE,EAAE,CAAC,cAAc,EAAE;YAAE,IAAI,CAAC,SAAS,EAAE;AAAE,QAAA,CAAC;IACtE;uGA1FW,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,CAAA,YAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,eAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE;AACb,iBAAA;;0BAIc;;sBAGZ,KAAK;uBAAC,YAAY;;sBAElB;;sBAEA;;sBACA;;sBAEA;;sBACA;;sBAEA,WAAW;uBAAC,gBAAgB;;sBAC5B,WAAW;uBAAC,wBAAwB;;sBACpC,WAAW;uBAAC,mBAAmB;;sBAC/B,WAAW;uBAAC,WAAW;;sBACvB,WAAW;uBAAC,eAAe;;sBAI3B,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;;sBAwBpC,YAAY;uBAAC,SAAS;;sBAQtB,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;;MC5DxB,qBAAqB,CAAA;AAGb,IAAA,QAAA;AAFI,IAAA,GAAG;AAE1B,IAAA,WAAA,CAAmB,QAA8B,EAAA;QAA9B,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAAyB;uGAHzC,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,CAAA,cAAA,EAAA,KAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;sBAEE,KAAK;uBAAC,cAAc;;;MC8BV,mBAAmB,CAAA;;IAErB,KAAK,GAAqB,EAAE;;IAG5B,WAAW,GAA0B,YAAY;;IAGjD,aAAa,GAA4B,OAAO;;IAGhD,eAAe,GAA8B,QAAQ;;IAGrD,YAAY,GAAG,IAAI;;IAGnB,IAAI,GAAG,IAAI;;IAGX,KAAK,GAAoB,WAAW;;IAGpC,UAAU,GAAG,IAAI;;IAGjB,gBAAgB,GAAG,KAAK;;IAGxB,iBAAiB,GAAG,GAAG;;IAGvB,SAAS,GAAG,MAAM;IAClB,aAAa,GAAG,UAAU;IAC1B,UAAU,GAAG,OAAO;IACpB,WAAW,GAAG,QAAQ;IACtB,aAAa,GAAG,UAAU;;AAG1B,IAAA,UAAU,GAA2B;AAC5C,QAAA,MAAM,EAAE,GAAG;AACX,QAAA,IAAI,EAAE,GAAG;AACT,QAAA,MAAM,EAAE,GAAG;AACX,QAAA,KAAK,EAAE,GAAG;AACV,QAAA,QAAQ,EAAE,GAAG;KACd;;IAGQ,aAAa,GAAG,CAAC;;AAGhB,IAAA,mBAAmB,GAAG,IAAI,YAAY,EAAU;;AAGhD,IAAA,eAAe,GAAG,IAAI,YAAY,EAAkC;;AAGpE,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AACxC,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AACxC,IAAA,YAAY,GAAG,IAAI,YAAY,EAAQ;AACvC,IAAA,aAAa,GAAG,IAAI,YAAY,EAAQ;;AAGb,IAAA,eAAe;;AAGG,IAAA,aAAa;;AAGhB,IAAA,cAAc;;AAG1D,IAAA,OAAO,GAAG,IAAI,GAAG,EAAU;;IAGnC,WAAW,GAAG,CAAC;IAEf,kBAAkB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC;AAAE,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;QAClD,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACvE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QAC5C;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC;IACtC;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,QAAQ,IAAI,IAAI;IAC/C;AAEA,IAAA,IAAI,kBAAkB,GAAA;AACpB,QAAA,QAAQ,IAAI,CAAC,aAAa;AACxB,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,uBAAuB;AAChC,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,0BAA0B;AACnC,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,wBAAwB;AACjC,YAAA;AACE,gBAAA,OAAO,yBAAyB;;IAEtC;AAEA,IAAA,IAAI,mBAAmB,GAAA;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;AAC3C,QAAA,OAAO,IAAI,EAAE,YAAY,IAAI,IAAI;IACnC;AAEA,IAAA,MAAM,CAAC,CAAS,EAAA;QACd,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,IAAI,CAAA,SAAA,EAAY,CAAC,CAAA,CAAE;QACrC,OAAO,CAAA,EAAG,IAAI,CAAA,MAAA,CAAQ;IACxB;AAEA,IAAA,SAAS,CAAC,CAAS,EAAA;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,IAAI,CAAA,SAAA,EAAY,CAAC,CAAA,CAAE;QACrC,OAAO,CAAA,EAAG,IAAI,CAAA,QAAA,CAAU;IAC1B;AAEQ,IAAA,WAAW,CAAC,CAAS,EAAA;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AACnB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAClD;AAEA,IAAA,SAAS,CAAC,CAAS,EAAA;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,QAAQ;QACvB,IAAI,CAAC,CAAC,KAAK;YAAE,OAAO,CAAC,CAAC,KAAK;AAC3B,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,OAAO;AACzC,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa;AAAE,YAAA,OAAO,QAAQ;AAC7C,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa;AAAE,YAAA,OAAO,MAAM;QACzC,IAAI,CAAC,CAAC,QAAQ;AAAE,YAAA,OAAO,UAAU;AACjC,QAAA,OAAO,QAAQ;IACjB;AAEA,IAAA,aAAa,CAAC,CAAS,EAAA;QACrB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACvB,QAAA,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD;AAEA,IAAA,cAAc,CAAC,CAAS,EAAA;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC/B,QAAA,OAAO,KAAK;IACd;IAEA,mBAAmB,CAAC,KAAsB,EAAE,KAAa,EAAA;AACvD,QAAA,IAAI,KAAK,KAAK,QAAQ,EAAE;AACtB,YAAA,OAAO,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;QAC1B;QACA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;IACjF;AAEA,IAAA,aAAa,CAAC,CAAS,EAAA;AACrB,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa;YAAE;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ;YAAE;QAC5B,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW;YAAE;AAChD,QAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACrB;IAEA,eAAe,CAAC,KAA4B,EAAE,CAAS,EAAA;QACrD,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IACvB;IAEA,IAAI,GAAA;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;AACtE,QAAA,IAAI,MAAM,KAAK,IAAI,CAAC,aAAa;YAAE;AACnC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;AAC7B,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IAC1B;IAEA,IAAI,GAAA;QACF,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE;AACxB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;AAClD,QAAA,IAAI,MAAM,KAAK,IAAI,CAAC,aAAa;YAAE;AACnC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;AAC7B,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IAC1B;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AACxB,QAAA,IAAI,CAAC,aAAa,GAAG,CAAC;QACtB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;AACjD,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,YAAA,aAAa,EAAE,CAAC;AAChB,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACpB,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACpB,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACrB;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC3B;AAEQ,IAAA,WAAW,CAAC,SAAiB,EAAA;AACnC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa;AAC/B,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS;AAC9B,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;QAC3B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;AACjD,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,SAAS;AACvB,YAAA,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;AAC5B,SAAA,CAAC;IACJ;uGAhNW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA+DhB,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAGK,WAAW,wGAGd,WAAW,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1GlD,g6JAsJA,EAAA,MAAA,EAAA,CAAA,siEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtHY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKX,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAR/B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,qBAAqB,CAAC,EAAA,eAAA,EAG7B,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,g6JAAA,EAAA,MAAA,EAAA,CAAA,siEAAA,CAAA,EAAA;;sBAI9C;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAGA;;sBASA;;sBAGA;;sBAGA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBAGA,YAAY;uBAAC,qBAAqB;;sBAGlC,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;;sBAGpD,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,aAAa,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;;;ME9FvC,wBAAwB,CAAA;AAC1B,IAAA,IAAI,GAAW,EAAE,CAAC;IAClB,GAAG,GAAW,KAAK;IACnB,GAAG,GAAW,MAAM;IACpB,UAAU,GAAY,IAAI;IAC1B,WAAW,GAAY,KAAK;IAC5B,SAAS,GAAY,KAAK;AACzB,IAAA,eAAe,GAAG,IAAI,YAAY,EAAW;AAEf,IAAA,QAAQ;uGATrC,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,GAAA,EAAA,KAAA,EAAA,GAAA,EAAA,KAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAP3B,CAAA;;;;AAIS,kBAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0CAAA,CAAA,EAAA,CAAA;;2FAGN,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAVpC,SAAS;+BACE,mBAAmB,EAAA,UAAA,EACjB,IAAI,EAAA,QAAA,EACR,CAAA;;;;AAIS,kBAAA,CAAA,EAAA,MAAA,EAAA,CAAA,0CAAA,CAAA,EAAA;;sBAIhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;MC8H3B,oBAAoB,CAAA;AAcX,IAAA,EAAA;AAbuB,IAAA,KAAK;IACvC,WAAW,GAA8B,YAAY;IACrD,eAAe,GAAU,EAAE;IAC3B,eAAe,GAAW,MAAM;IAChC,iBAAiB,GAAW,OAAO;AAEnC,IAAA,SAAS,GAAY,IAAI,CAAC;AAC1B,IAAA,QAAQ,GAAW,MAAM,CAAC;AAC1B,IAAA,SAAS,GAAW,MAAM,CAAC;IAE5B,UAAU,GAAG,KAAK;IAClB,kBAAkB,GAAG,CAAC,CAAC;AAE/B,IAAA,WAAA,CAAoB,EAAc,EAAA;QAAd,IAAA,CAAA,EAAE,GAAF,EAAE;IAEtB;;AAIA,IAAA,WAAW,CAAC,KAAiB,EAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;AACzC,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IACpB;IAGA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QACvB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS;IACxC;IAEA,WAAW,CAAC,KAAiB,EAAE,KAAa,EAAA;QAC1C,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;QACrB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;QAC/B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,KAAK,YAAY,GAAG,YAAY,GAAG,YAAY;IAC9F;AAEQ,IAAA,MAAM,CAAC,KAAiB,EAAA;AAC9B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,qBAAqB,CAAC;AAC5E,QAAA,MAAM,IAAI,GAAG,SAAS,CAAC,qBAAqB,EAAE;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AACpC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAkB;QAEzG,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC;QACnD,IAAI,CAAC,UAAU,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YACvC;QACF;AAEA,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,KAAK,YAAY;AACtD,QAAA,MAAM,WAAW,GAAG,YAAY,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;AAC3D,QAAA,IAAI,WAAW,IAAI,CAAC,EAAE;YACpB;QACF;QAEA,MAAM,QAAQ,GAAG,YAAY,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;QAEpF,IAAI,QAAQ,GAAG,CAAC;AAChB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,EAAE,EAAE;AAChD,YAAA,MAAM,eAAe,GAAG,YAAY,CAAC,CAAC,CAAC;YACvC,IAAI,CAAC,eAAe,EAAE;gBACpB;YACF;AACA,YAAA,MAAM,QAAQ,GAAG,eAAe,CAAC,qBAAqB,EAAE;AACxD,YAAA,QAAQ,IAAI,YAAY,GAAG,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM;AAC3D,YAAA,QAAQ,IAAI,IAAI,CAAC,eAAe;QAClC;AAEA,QAAA,IAAI,YAAY,GAAG,CAAC,CAAC,QAAQ,GAAG,QAAQ,IAAI,WAAW,IAAI,GAAG;AAE9D,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC;AAClE,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC;AAElE,QAAA,IAAI,UAAU,KAAK,IAAI,EAAE;YACvB,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC;QACnD;AACA,QAAA,IAAI,UAAU,KAAK,IAAI,EAAE;YACvB,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC;QACnD;AAEA,QAAA,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;AACvD,QAAA,UAAU,CAAC,IAAI,GAAG,CAAA,EAAG,YAAY,GAAG;IACtC;IAEA,cAAc,CAAC,KAAY,EAAE,KAAa,EAAA;QACxC,KAAK,CAAC,eAAe,EAAE;QACvB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IACxB;AAEA,IAAA,eAAe,CAAC,IAA8B,EAAA;AAC5C,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,OAAO,EAAE;QACX;AACA,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,YAAY,EAAE;YACrC,OAAO,IAAI,CAAC,SAAS,GAAG,qBAAqB,GAAG,oBAAoB;QACtE;QACA,OAAO,IAAI,CAAC,SAAS,GAAG,oBAAoB,GAAG,kBAAkB;IACnE;AAEA,IAAA,WAAW,CAAC,IAA8B,EAAA;AACxC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,OAAO,SAAS;QAClB;AACA,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,OAAO,CAAA,IAAA,EAAO,IAAI,CAAC,IAAI,EAAE;QAC3B;AACA,QAAA,OAAO,SAAS;IAClB;IAEQ,aAAa,CAAC,KAAyB,EAAE,WAAmB,EAAA;QAClE,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE;QAC5B,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACzB,YAAA,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;AACnC,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,IAAI;QAClD;AAEA,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC7B,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC1B,YAAA,OAAO,WAAW,GAAG,CAAC,GAAG,CAAC,OAAO,GAAG,WAAW,IAAI,GAAG,GAAG,IAAI;QAC/D;AAEA,QAAA,OAAO,OAAO;IAChB;AAEA,IAAA,UAAU,CAAC,KAAa,EAAA;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;AACxC,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS;QAChC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;IAC3C;IAEA,2BAA2B,GAAA;;AAEzB,QAAA,OAAO,IAAI,CAAC,WAAW,KAAK,YAAY,GAAG,UAAU,GAAG,YAAY;IACtE;AAEA,IAAA,iBAAiB,CAAC,KAAa,EAAA;AAC7B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,qBAAqB,CAAC;AAC5E,QAAA,MAAM,IAAI,GAAG,SAAS,CAAC,qBAAqB,EAAE;AAC9C,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAkB;AACzG,QAAA,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC;AAElC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,KAAK,YAAY,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;AAChF,QAAA,IAAI,CAAC,MAAM,IAAI,WAAW,IAAI,CAAC,EAAE;AAC/B,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,qBAAqB,EAAE;AAC/C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,KAAK,YAAY,GAAG,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM;AACvF,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,WAAW,IAAI,GAAG,CAAC;IACrD;AAEA,IAAA,iBAAiB,CAAC,KAAa,EAAA;AAC7B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC;AAC3C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,qBAAqB,CAAC;AAC5E,QAAA,MAAM,IAAI,GAAG,SAAS,CAAC,qBAAqB,EAAE;AAC9C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,KAAK,YAAY,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;AAChF,QAAA,IAAI,CAAC,IAAI,IAAI,WAAW,IAAI,CAAC,EAAE;AAC7B,YAAA,OAAO,IAAI;QACb;QACA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC;IAClD;AAEA,IAAA,iBAAiB,CAAC,KAAa,EAAA;AAC7B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC;AAC3C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,qBAAqB,CAAC;AAC5E,QAAA,MAAM,IAAI,GAAG,SAAS,CAAC,qBAAqB,EAAE;AAC9C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,KAAK,YAAY,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;AAChF,QAAA,IAAI,CAAC,IAAI,IAAI,WAAW,IAAI,CAAC,EAAE;AAC7B,YAAA,OAAO,IAAI;QACb;QACA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC;IAClD;IAEA,eAAe,CAAC,KAAoB,EAAE,KAAa,EAAA;AACjD,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;AACxC,YAAA,IAAI,IAAI,EAAE,WAAW,EAAE;gBACrB,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YACxB;YACA;QACF;AAEA,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,KAAK,YAAY;QACtD,MAAM,WAAW,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS;QAC1D,MAAM,WAAW,GAAG,YAAY,GAAG,YAAY,GAAG,WAAW;AAC7D,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;YAC1D;QACF;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB;QACF;QAEA,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,KAAK,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7E,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC;IACpC;IAEQ,eAAe,CAAC,KAAa,EAAE,YAAoB,EAAA;AACzD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,qBAAqB,CAAC;AAC5E,QAAA,MAAM,IAAI,GAAG,SAAS,CAAC,qBAAqB,EAAE;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AACpC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAkB;AAEzG,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC;AACjC,QAAA,MAAM,aAAa,GAAG,YAAY,CAAC,KAAK,CAAC;AACzC,QAAA,IAAI,CAAC,UAAU,IAAI,CAAC,aAAa,EAAE;YACjC;QACF;AAEA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,KAAK,YAAY,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;AAChF,QAAA,IAAI,WAAW,IAAI,CAAC,EAAE;YACpB;QACF;AAEA,QAAA,MAAM,WAAW,GAAG,aAAa,CAAC,qBAAqB,EAAE;AACzD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,KAAK,YAAY,GAAG,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,MAAM;QAChG,IAAI,WAAW,GAAG,CAAC,aAAa,GAAG,WAAW,IAAI,GAAG,GAAG,YAAY;AAEpE,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC;AAClE,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC;AAClE,QAAA,IAAI,UAAU,KAAK,IAAI,EAAE;YACvB,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC;QACjD;AACA,QAAA,IAAI,UAAU,KAAK,IAAI,EAAE;YACvB,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC;QACjD;AAEA,QAAA,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;AACrD,QAAA,UAAU,CAAC,IAAI,GAAG,CAAA,EAAG,WAAW,GAAG;IACrC;uGArPW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EACd,wBAAwB,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7C/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ooCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAnHS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAqHX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAxHhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,UAAA,EACZ,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,wBAAwB,CAAC,EAAA,eAAA,EAChC,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAwErC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,ooCAAA,CAAA,EAAA;;sBAGA,eAAe;uBAAC,wBAAwB;;sBACxC;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBAUA,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC;;sBAM3C,YAAY;uBAAC,gBAAgB;;;MC9FnB,iBAAiB,CAAA;IACnB,KAAK,GAAc,EAAE;IACrB,SAAS,GAAG,IAAI;AAChB,IAAA,SAAS;AACT,IAAA,WAAW;AAEV,IAAA,MAAM,GAAG,IAAI,YAAY,EAAW;IAE9C,SAAS,GAAG,CAAC,CAAS,EAAE,IAAa,KAAK,IAAI,CAAC,EAAE;uGARtC,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAtBlB;;;;;;;;;;;;;;;;;;;;AAoBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,yZAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAhES,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAkEX,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBArE7B,SAAS;+BACE,WAAW,EAAA,UAAA,EACT,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,eAAA,EACN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EA2CrC;;;;;;;;;;;;;;;;;;;;AAoBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,yZAAA,CAAA,EAAA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBAEA;;;MCqKU,qBAAqB,CAAA;AA0FtB,IAAA,IAAA;AACA,IAAA,GAAA;IA1FD,IAAI,GAAuB,EAAE;IAC7B,YAAY,GAAG,GAAG;IAClB,cAAc,GAAG,CAAC;IAClB,KAAK,GAAG,EAAE;IACV,WAAW,GAAG,KAAK;IACnB,WAAW,GAAG,KAAK;IACnB,cAAc,GAAG,KAAK;IACtB,kBAAkB,GAAG,KAAK;IAC1B,eAAe,GAAG,KAAK;IACvB,YAAY,GAAG,KAAK;IACpB,WAAW,GAAG,IAAI;IAClB,SAAS,GAAsB,GAAG;IAClC,KAAK,GAAG,KAAK;;;AAGb,IAAA,YAAY;AACZ,IAAA,IAAI;AAEc,IAAA,qBAAqB;AAEtC,IAAA,cAAc,GAAG,IAAI,YAAY,EAAU;AAC3C,IAAA,QAAQ,GAAG,IAAI,YAAY,EAAoB;AAC/C,IAAA,UAAU,GAAG,IAAI,YAAY,EAAoB;AACjD,IAAA,KAAK,GAAG,IAAI,YAAY,EAAoB;AAC5C,IAAA,OAAO,GAAG,IAAI,YAAY,EAAc;AACxC,IAAA,MAAM,GAAG,IAAI,YAAY,EAAc;AACvC,IAAA,eAAe,GAAG,IAAI,YAAY,EAAc;AAChD,IAAA,OAAO,GAAG,IAAI,YAAY,EAAS;AACnC,IAAA,cAAc,GAAG,IAAI,YAAY,EAAiB;AAClD,IAAA,OAAO,GAAG,IAAI,YAAY,EAAiB;AAC3C,IAAA,MAAM,GAAG,IAAI,YAAY,EAAS;AAClC,IAAA,MAAM,GAAG,IAAI,YAAY,EAAS;AAClC,IAAA,UAAU,GAAG,IAAI,YAAY,EAAQ;AAErC,IAAA,aAAa,GAAG,IAAI,YAAY,EAAsB;AACtD,IAAA,eAAe,GAAG,IAAI,YAAY,EAAsB;AACxD,IAAA,QAAQ,GAAG,IAAI,YAAY,EAAU;AACrC,IAAA,aAAa,GAAG,IAAI,YAAY,EAAQ,CAAC;AAEV,IAAA,QAAQ;AAC3B,IAAA,OAAO;AACD,IAAA,WAAW;IAEvC,QAAQ,GAAG,KAAK;IAChB,KAAK,GAAG,EAAE;IACV,QAAQ,GAAuB,EAAE;IACjC,OAAO,GAAuB,EAAE;IAChC,QAAQ,GAAuB,EAAE;IACjC,cAAc,GAAG,KAAK;IACd,gBAAgB,GAAG,KAAK;IACxB,WAAW,GAAG,KAAK;IAC3B,WAAW,GAAG,CAAC,CAAC;IACR,YAAY,GAAG,KAAK;IACpB,iBAAiB,GAAG,KAAK;IACzB,cAAc,GAAG,EAAE;IACnB,eAAe,GAAG,KAAK;AACtB,IAAA,SAAS,GAAG,CAAA,sBAAA,EAAyB,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IAEnF,cAAc,GAAG,GAAG;IACpB,UAAU,GAAG,EAAE;IACf,aAAa,GAAG,CAAC;IACjB,YAAY,GAAG,CAAC;AACR,IAAA,UAAU;AAEV,IAAA,eAAe,GAAyB,MAAK,EAAE,CAAC;AAChD,IAAA,gBAAgB,GAAe,MAAK,EAAE,CAAC;IACvC,YAAY,GAAQ,IAAI;IAEhC,eAAe,GAAA;;AAEb,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;IACtB;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;AACnD,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B;QACA,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC9F,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC;QAC3C;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;QAC/B;IACF;IAEA,WAAA,CACU,IAA6B,EAC7B,GAAsB,EAAA;QADtB,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,GAAG,GAAH,GAAG;IACV;AAGH,IAAA,mBAAmB,CAAC,KAAiB,EAAA;AACnC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAC1C,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;AACvD,QAAA,IAAI,CAAC,iBAAiB,GAAG,MAAM;AAC/B,QAAA,IAAI,MAAM;YAAE;QACZ,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE;QAE1B,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;IACzB;AAGA,IAAA,iBAAiB,CAAC,KAAiB,EAAA;QACjC,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE;AAC1B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAC1C,QAAA,IAAI,CAAC,MAAM;YAAE;QACb,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE;QAE9C,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;IACzB;AAEA,IAAA,IAAI,kBAAkB,GAAA;QACpB,IAAI,CAAC,IAAI,CAAC,cAAc;AAAE,YAAA,OAAO,IAAI;AACrC,QAAA,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;QAChF,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;IAC3C;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;IAC9E;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrB,OAAO,IAAI,CAAC,KAAK;QACnB;AACA,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,OAAO,IAAI,CAAC,KAAK;QACnB;AACA,QAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3D,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,IAAI,CAAC,KAAK;QACnB;QACA,IAAI,IAAI,EAAE;AACR,YAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,IAAI,EAAE;QAC7B;AACA,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;QACpC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;YAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACrD;AACA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACzE,OAAO,CAAA,EAAG,QAAQ,CAAA,GAAA,EAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA,CAAA,CAAG;IACrD;AAEA,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,qBAAqB;IACxD;AAEA,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;IAC/B;AAEQ,IAAA,iBAAiB,CAAC,KAAU,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,KAAK,IAAI,IAAI,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;YAC3E,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAuB;AAC3F,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAmB;AACvC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACrF,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;AACpB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;AAEA,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;AACpB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;QAEA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,CAAC,IAAI;YAAE;AACX,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AACvB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE;YAC/B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;QAC/C;AACA,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;IAC3B;AAEA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;IAC5B;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;QAC1B,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,WAAW,EAAE;QACpB;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,OAAO,CAAC,KAAa,EAAA;QACnB,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAC5B,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE;QACpC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AAC7C,YAAA,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE;YAC5D,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,aAAa,CAAC,WAAW,EAAE,EAAE;gBACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjC,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;gBAClB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACtC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACxC,IAAI,QAAQ,EAAE;AACZ,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAChC;gBACA,IAAI,CAAC,qBAAqB,EAAE;YAC9B;QACF;QAEA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAC5C,YAAA,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE;AAC7B,gBAAA,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,WAAW,EAAE;AACtC,oBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACtB;YACF;AACA,YAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,SAAS;QAC/B;aAAO;AACL,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;QACpB;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;;AAEzB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,IAAI,IAAI,CAAC,UAAU;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AAClD,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;QACjC;aAAO;AACL,YAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,MAAK;AAChC,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/B,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACzB,YAAA,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC;QACvB;IACF;AAEA,IAAA,aAAa,CAAC,KAAY,EAAA;AACxB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAiC;AACtD,QAAA,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,EAAE;AACjC,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3D,YAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,EAAE;AACtC,YAAA,IAAI,gBAAgB,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,EAAE;gBACtF,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC;gBAC/C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;AAClC,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAClB;YACF;QACF;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IACrB;AAEA,IAAA,SAAS,CAAC,KAAoB,EAAA;QAC5B,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/B,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE;YAC7E,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,UAAU,EAAE;YACjB;QACF;AACA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;YACxD,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACrD;AAAO,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YAChC,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAChE,YAAA,IAAI,MAAM;AAAE,gBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QACrC;AAAO,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;AACjC,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACzB;QACF;IACF;AAEA,IAAA,OAAO,CAAC,KAAoB,EAAA;AAC1B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1B;AAEA,IAAA,YAAY,CAAC,KAAiB,EAAA;QAC5B,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;;AAE5C,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;;YAEf,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACvC,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,gBAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBACpB,IAAI,CAAC,uBAAuB,EAAE;gBAC9B;YACF;QACF;;QAEA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE;AAC5C,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QACzB;IACF;AAEA,IAAA,WAAW,CAAC,KAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;;;AAIzB,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE;AACvD,YAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC;QAC1C;IACF;AAEA,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAC1C,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS;AAClC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;AACzB,QAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;AAE9B,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;AAChF,QAAA,IAAI,SAAS,GAAG,EAAE,EAAE;AAClB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;QACxB;IACF;AAEA,IAAA,UAAU,CAAC,IAAsB,EAAA;QAC/B,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ;YAAE;AAC5B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACvB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC1D,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;AAC7D,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;YAC5B;iBAAO;gBACL,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;AACxC,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1B;YACA,IAAI,CAAC,qBAAqB,EAAE;;AAE5B,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,gBAAA,IAAI,CAAC,KAAK,GAAG,EAAE;YACjB;iBAAO;AACL,gBAAA,IAAI,CAAC,KAAK,GAAG,EAAE;YACjB;AACA,YAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACtB;aAAO;AACL,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE;AAC5D,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACxC;AACA,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC;AACtB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AACvB,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE;gBAC/B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;YAC/C;AACA,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YACxB,IAAI,CAAC,qBAAqB,EAAE;YAC5B,IAAI,CAAC,WAAW,EAAE;QACpB;QACA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE;IACtC;AAEA,IAAA,cAAc,CAAC,IAAsB,EAAA;QACnC,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,IAAI;YAAE;QACX,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;AAC1D,QAAA,IAAI,CAAC,MAAM;YAAE;QACb,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;AAC7D,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEA,cAAc,GAAA;QACZ,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;AACnC,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;QAClB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;YACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACnC;QACA,IAAI,CAAC,qBAAqB,EAAE;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,UAAU,CAAC,IAAsB,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;IACpD;IAEA,SAAS,GAAG,CAAC,CAAS,EAAE,IAAsB,KAAK,IAAI,CAAC,EAAE;AAE1D,IAAA,WAAW,CAAC,KAAa,EAAA;AACvB,QAAA,OAAO,GAAG,IAAI,CAAC,SAAS,CAAA,KAAA,EAAQ,KAAK,EAAE;IACzC;AAEA,IAAA,qBAAqB,CAAC,KAAiB,EAAA;QACrC,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;AAChC,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;QAC/B;aAAO;AACL,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE;gBAChC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,GAAG,CAAC;YAC3C;AACA,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC;;AAE7B,YAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,uBAAuB,EAAE;QAChC;AACA,QAAA,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,EAAE;AACnC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,YAAY,CAAC,KAAY,EAAA;QACvB,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;QACf,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,EAAE;AACnC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEQ,IAAA,WAAW,CAAC,KAAa,EAAA;QAC/B,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,WAAW,EAAE;AACxC,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,cAAc,EAAE;AAChC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE;gBAChC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,GAAG,CAAC;YAC3C;QACF;QACA,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,eAAe,CAAC;AAChI,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,gBAAgB;AAE9E,QAAA,MAAM,IAAI,GAAG,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE;QACxG,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;AAC7D,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;QACvB,IAAI,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC7B;AACA,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,SAAS,IAAI,CAAC,CAAC;AAEhE,QAAA,IAAI,cAAc,IAAI,CAAC,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,gBAAgB,CAAC,EAAE;YAC1F,IAAI,CAAC,WAAW,EAAE;QACpB;AACA,QAAA,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACpE,IAAI,CAAC,WAAW,EAAE;QACpB;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEQ,IAAA,cAAc,CAAC,SAAiB,EAAA;AACtC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM;AAClC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;AACzE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AAClE,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,YAAY,EAAE,KAAK,CAAC;QACjD,IAAI,CAAC,aAAa,GAAG,KAAK,GAAG,IAAI,CAAC,UAAU;AAC5C,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU;AAC9D,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;AAC9C,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACnG;IAEQ,uBAAuB,GAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE;AAC1D,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YACrB;QACF;AAEA,QAAA,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE;AACvD,QAAA,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,OAAO,EAAE;AACX,YAAA,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC;QACnG;QACA,IAAI,cAAc,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YACjD,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,aAAa,CAAC,EAAE,CAAC;QAC5E;AAEA,QAAA,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE;YACzB,cAAc,GAAG,CAAC;QACpB;AAEA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACjF,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,GAAG,SAAS;AACjD,QAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;AAE9B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3F;AAEQ,IAAA,UAAU,CAAC,SAAiB,EAAA;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,IAAI,CAAC,WAAW,EAAE;QACpB;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE;AAE1B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM;AACvH,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS;AAE5B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,gBAAgB,CAAoB,sBAAsB,CAAC;QACxG,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE;IACtC;AAEQ,IAAA,YAAY,CAAC,IAAsB,EAAA;AACzC,QAAA,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE;AACnB,YAAA,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC;QACxD;IACF;AAEQ,IAAA,WAAW,CAAC,KAAa,EAAE,gBAAgB,GAAG,KAAK,EAAA;AACzD,QAAA,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;QACxC,IAAI,IAAI,CAAC,cAAc;YAAE;AACzB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEQ,IAAA,WAAW,CAAC,KAAa,EAAA;QAC/B,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE;AAC1B,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEQ,kBAAkB,GAAA;AACxB,QAAA,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE;QACzC,IAAI,CAAC,OAAO,EAAE;YACZ;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC;YAC5F,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,gBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;oBACrB,IAAI,CAAC,cAAc,EAAE;gBACvB;YACF;AAAO,iBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAC5B,gBAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC;gBACvB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACxC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACtC,IAAI,CAAC,qBAAqB,EAAE;YAC9B;YACA;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACxE,YAAA,MAAM,KAAK,GAAqB,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;AAC/E,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;YACtB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YACxC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YACtC,IAAI,CAAC,qBAAqB,EAAE;QAC9B;IACF;AAEQ,IAAA,iBAAiB,CAAC,KAAa,EAAA;QACrC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;AACpF,QAAA,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAA,CAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAA,EAAG,CAAC,CAAA,CAAE,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAC/H,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;QAC9C;AACA,QAAA,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,CAAA,GAAA,EAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACtB,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;QAC9C;AACA,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AACxF,QAAA,MAAM,iBAAiB,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvE,MAAM,WAAW,GAAG,CAAC,iBAAiB,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC;QACpF,MAAM,SAAS,GAAG,iBAAiB,GAAG,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1E,QAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE;IACnC;AAEQ,IAAA,QAAQ,CAAC,GAAW,EAAA;QAC1B,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE;QAChC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE;AACtC,QAAA,IAAI,CAAC,KAAK;YAAE;AAEZ,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC;AACjG,QAAA,MAAM,IAAI,GAAqB,KAAK,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AAEjF,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,KAAK,EAAE;AACjC,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;YACf;QACF;QAEA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,EAAE;AAC/C,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;YACf;QACF;QAEA,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;AACxC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QACrB,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxC,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;IACtB;IAEQ,qBAAqB,GAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,KAAK,KAAK,SAAS,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;AACxF,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YAC1B;QACF;QACA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,IAAI,IAAI;AAC7E,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;IAC5B;AAEQ,IAAA,YAAY,CAAC,KAAU,EAAA;QAC7B,IAAI,KAAK,IAAI,IAAI;AAAE,YAAA,OAAO,IAAI;AAC9B,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAK,KAA0B,CAAC,EAAE,IAAI,IAAI,IAAK,KAA0B,CAAC,KAAK,IAAI,IAAI,EAAE;AACpH,YAAA,OAAO,KAAyB;QAClC;AACA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,WAAW,EAAE,KAAK,GAAG,KAAK,CAAA,CAAE,CAAC,WAAW,EAAE,CAAC;AACtI,QAAA,IAAI,KAAK;AAAE,YAAA,OAAO,KAAK;AACvB,QAAA,OAAO,EAAE,EAAE,EAAE,CAAA,EAAG,KAAK,CAAA,CAAE,EAAE,KAAK,EAAE,GAAG,KAAK,CAAA,CAAE,EAAE,KAAK,EAAE;IACrD;uGArpBW,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,oBAAA,EAAA,6BAAA,EAAA,kBAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,SAAA,EA5NrB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACpD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAyOa,WAAW,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA/Jf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0IT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+1BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA3NS,YAAY,uaAAE,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FA6N9B,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAhOjC,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,iBAAiB,CAAC,EAAA,SAAA,EAC/B;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,2BAA2B,CAAC;AACpD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAyErC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0IT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,+1BAAA,CAAA,EAAA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAGA;;sBACA;;sBAEA,YAAY;uBAAC,WAAW;;sBAExB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBAEA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;sBACtC,SAAS;uBAAC,SAAS;;sBACnB,YAAY;uBAAC,YAAY;;sBAoDzB,YAAY;uBAAC,oBAAoB,EAAE,CAAC,QAAQ,CAAC;;sBAc7C,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC;;;MCjRjC,gBAAgB,CAAA;IAClB,KAAK,GAAkB,EAAE;IACzB,IAAI,GAAgB,MAAM;IAC1B,YAAY,GAAG,KAAK;AACpB,IAAA,IAAI;IACJ,UAAU,GAAG,qBAAqB;IAClC,YAAY,GAAG,oBAAoB;IACnC,QAAQ,GAAG,mBAAmB;IAC9B,SAAS,GAAG,oBAAoB;AAE/B,IAAA,MAAM,GAAG,IAAI,YAAY,EAAe;AACxC,IAAA,QAAQ,GAAG,IAAI,YAAY,EAAe;AAC1C,IAAA,SAAS,GAAG,IAAI,YAAY,EAAQ;AACpC,IAAA,WAAW,GAAG,IAAI,YAAY,EAAQ;AACtC,IAAA,eAAe,GAAG,IAAI,YAAY,EAAiB;AAEd,IAAA,WAAW;IAE1D,SAAS,GAAG,CAAC,CAAS,EAAE,IAAiB,KAAK,IAAI,CAAC,EAAE;AAErD,IAAA,WAAW,CAAC,IAAiB,EAAA;AAC3B,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;IACjE;AAEA,IAAA,UAAU,CAAC,IAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAAE;AAC7B,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IACnE;IAEA,eAAe,CAAC,IAAiB,EAAE,KAAc,EAAA;AAC/C,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9D;IAEA,cAAc,GAAA;QACZ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AAClC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;IACvB;IAEA,gBAAgB,GAAA;QACd,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;AACnC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;IACzB;IAEA,aAAa,CAAC,KAAoB,EAAE,IAAiB,EAAA;AACnD,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG;AACrB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;QAC1C,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,GAAG,EAAE;YAClC,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACvB;AAAO,aAAA,IAAI,GAAG,KAAK,YAAY,EAAE;AAC/B,YAAA,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAC5C,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACxB;QACF;AAAO,aAAA,IAAI,GAAG,KAAK,WAAW,EAAE;YAC9B,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAC3C,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1B;QACF;aAAO,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,SAAS,EAAE;YACnD,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzD;IACF;IAEQ,YAAY,CAAC,OAAoB,EAAE,SAAiB,EAAA;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE;QAC7E,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,OAA4B,CAAC;QACzD,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE;QAChB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;QACrC,IAAI,EAAE,KAAK,EAAE;IACf;IAEQ,WAAW,CAAC,KAAoB,EAAE,QAAiB,EAAA;AACzD,QAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;AACrB,YAAA,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;AACvB,gBAAA,CAAC,CAAC,QAAQ,GAAG,QAAQ;gBACrB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,EAAE,QAAQ,CAAC;YAC9C;QACF;IACF;AAEQ,IAAA,gBAAgB,CAAC,KAAoB,EAAE,GAAA,GAAqB,EAAE,EAAA;AACpE,QAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;YACrB,IAAI,CAAC,CAAC,QAAQ;AAAE,gBAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3B,YAAA,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;gBAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAS,EAAE,GAAG,CAAC;QAClE;AACA,QAAA,OAAO,GAAG;IACZ;uGA5FW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAgBM,UAAU,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlFjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAlES,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAoEX,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAvE5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgET,EAAA,CAAA;AACF,iBAAA;;sBAEE;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,SAAS,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;;;ACpG/C;;ACAA;;AAEG;;;;"}
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/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 { 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 { 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\nconst EMAIL_RX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\ntype Key<T> = Extract<keyof T, string>;\n\ntype KeyOf<T> = Extract<keyof T, string>;\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\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\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 passesRowFilters(row: T): boolean {\n // per-column\n for (const col of this.columns) {\n if (!col.filterable) continue;\n const key = col.field as string;\n const q = this.norm(this.filters[key]);\n if (!q) continue;\n const cell = this.norm((row as any)[col.field]);\n if (!cell.includes(q)) return false;\n }\n // global\n const g = this.norm(this.globalFilter);\n if (!g) return true;\n return this.columns.some(c => this.norm((row as any)[c.field]).includes(g));\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 rowIsValidAgainst(targetErrors: Partial<Record<KeyOf<T>, string>>): boolean {\n for (const col of this.columns) {\n if (col.editable === false) continue;\n const key = this.keyOf(col);\n if (targetErrors[key]) return false;\n }\n return true;\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 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 private compare(a: any, b: any): number {\n if (a == null && b == null) return 0;\n if (a == null) return -1;\n if (b == null) return 1;\n if (typeof a === 'string' && typeof b === 'string') {\n return a.localeCompare(b, undefined, { numeric: true, sensitivity: 'base' });\n }\n return a < b ? -1 : a > b ? 1 : 0;\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 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\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 newRow = { ...(this.addForm.value as any) } as T;\n this.rowAdd.emit({ newRow });\n\n this.addingNew = false;\n this.addForm = this.fb.group({});;\n this.saveAttemptedNew = false;\n }\n\n cancelAdd() {\n this.addingNew = false;\n this.addForm = this.fb.group({});;\n this.saveAttemptedNew = false;\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 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 updated = { ...(original as any), ...(this.editForm.value as any) } as T;\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 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 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 const EMAIL_RX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!err && col.type === 'email' && val && !EMAIL_RX.test(String(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 this.rowDelete.emit({ row: this.data[di], index: di });\n }\n\n // (optional) better *ngFor performance\n trackRow = (_: number, row: T) => row;\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 &times;\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 &times;\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 &#9662;\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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"}