{"version":3,"file":"brios-sorzu-angular.mjs","sources":["../../../packages/angular/src/lib/brios-grid-cell-template.directive.ts","../../../packages/angular/src/lib/brios-grid-detail-template.directive.ts","../../../packages/angular/src/lib/brios-grid-header-template.directive.ts","../../../packages/angular/src/lib/brios-grid-footer-template.directive.ts","../../../packages/angular/src/lib/brios-grid-state-template.directive.ts","../../../packages/angular/src/lib/filter-values.ts","../../../packages/angular/src/lib/brios-grid-editor-template.directive.ts","../../../packages/angular/src/lib/brios-grid-group-template.directive.ts","../../../packages/angular/src/lib/brios-grid-validation-template.directive.ts","../../../packages/angular/src/lib/detail-cache.ts","../../../packages/angular/src/lib/locale.ts","../../../packages/angular/src/lib/brios-grid.component.ts","../../../packages/angular/src/brios-sorzu-angular.ts"],"sourcesContent":["import { Directive, Input, TemplateRef } from '@angular/core';\nimport { GridCellContext } from '@brios-sorzu/core';\n\nexport interface BriosGridCellTemplateContext<T extends object = Record<string, unknown>> extends GridCellContext<T> {\n  $implicit: T;\n}\n\n@Directive({\n  selector: 'ng-template[briosGridCellTemplate]',\n  standalone: true\n})\nexport class BriosGridCellTemplateDirective<T extends object = Record<string, unknown>> {\n  @Input('briosGridCellTemplate') columnKey = '';\n\n  constructor(public readonly template: TemplateRef<BriosGridCellTemplateContext<T>>) {}\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\n\nexport type BriosGridDetailLoader<T extends object, D = unknown> = (row: T, signal: AbortSignal) => Promise<readonly D[]>;\n\nexport interface BriosGridDetailTemplateContext<T extends object = Record<string, unknown>, D = unknown> {\n  $implicit: T;\n  row: T;\n  rowIndex: number;\n  detailRows?: readonly D[];\n  loading?: boolean;\n  error?: unknown;\n}\n\n@Directive({\n  selector: 'ng-template[briosGridDetailTemplate]',\n  standalone: true\n})\nexport class BriosGridDetailTemplateDirective<T extends object = Record<string, unknown>, D = unknown> {\n  @Input('briosGridDetailTemplate') enabled: boolean | string = true;\n\n  constructor(public readonly template: TemplateRef<BriosGridDetailTemplateContext<T, D>>) {}\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\nimport { GridColumn } from '@brios-sorzu/core';\n\nexport interface BriosGridHeaderTemplateContext<T extends object = Record<string, unknown>> {\n  $implicit: GridColumn<T>;\n  column: GridColumn<T>;\n}\n\n@Directive({\n  selector: 'ng-template[briosGridHeaderTemplate]',\n  standalone: true\n})\nexport class BriosGridHeaderTemplateDirective<T extends object = Record<string, unknown>> {\n  @Input('briosGridHeaderTemplate') columnKey = '';\n\n  constructor(public readonly template: TemplateRef<BriosGridHeaderTemplateContext<T>>) {}\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\nimport { GridColumn } from '@brios-sorzu/core';\n\nexport interface BriosGridFooterTemplateContext<T extends object = Record<string, unknown>> {\n  $implicit: GridColumn<T>;\n  column: GridColumn<T>;\n  value: unknown;\n  rows: readonly T[];\n}\n\n@Directive({\n  selector: 'ng-template[briosGridFooterTemplate]',\n  standalone: true\n})\nexport class BriosGridFooterTemplateDirective<T extends object = Record<string, unknown>> {\n  @Input('briosGridFooterTemplate') columnKey = '';\n\n  constructor(public readonly template: TemplateRef<BriosGridFooterTemplateContext<T>>) {}\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\n\nexport type BriosGridState = 'loading' | 'empty' | 'error';\n\nexport interface BriosGridStateTemplateContext {\n  $implicit: BriosGridState;\n  state: BriosGridState;\n  error?: unknown;\n  retry: () => Promise<void>;\n}\n\n@Directive({\n  selector: 'ng-template[briosGridStateTemplate]',\n  standalone: true\n})\nexport class BriosGridStateTemplateDirective {\n  @Input('briosGridStateTemplate') state: BriosGridState = 'empty';\n\n  constructor(public readonly template: TemplateRef<BriosGridStateTemplateContext>) {}\n}\n","export interface BriosFilterValueOption {\n  value: string;\n  label: string;\n}\n\nexport function createFilterValueOptions<T>(\n  rows: readonly T[],\n  getValue: (row: T) => unknown,\n  getLabel: (row: T) => string,\n  limit = 100\n): readonly BriosFilterValueOption[] {\n  const safeLimit = Math.max(1, Math.floor(Number(limit)) || 100);\n  const values = new Map<string, string>();\n  for (const row of rows) {\n    const raw = getValue(row);\n    const value = raw == null ? '' : String(raw);\n    if (!values.has(value)) values.set(value, value === '' ? '(vacío)' : getLabel(row));\n    if (values.size >= safeLimit) break;\n  }\n  const collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });\n  return [...values.entries()]\n    .sort((left, right) => collator.compare(left[1], right[1]))\n    .map(([value, label]) => ({ value, label }));\n}\n\n/** Builds values in chunks so opening a filter never monopolizes the UI thread. */\nexport async function createFilterValueOptionsAsync<T>(\n  rows: readonly T[],\n  getValue: (row: T) => unknown,\n  getLabel: (row: T) => string,\n  limit = 100,\n  chunkSize = 2_000\n): Promise<readonly BriosFilterValueOption[]> {\n  const safeLimit = Math.max(1, Math.floor(Number(limit)) || 100);\n  const safeChunkSize = Math.max(100, Math.floor(Number(chunkSize)) || 2_000);\n  const values = new Map<string, string>();\n  for (let index = 0; index < rows.length; index += 1) {\n    const row = rows[index];\n    const raw = getValue(row);\n    const value = raw == null ? '' : String(raw);\n    if (!values.has(value)) values.set(value, value === '' ? '(vacío)' : getLabel(row));\n    if (values.size >= safeLimit) break;\n    if ((index + 1) % safeChunkSize === 0) await new Promise<void>((resolve) => setTimeout(resolve, 0));\n  }\n  const collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });\n  return [...values.entries()]\n    .sort((left, right) => collator.compare(left[1], right[1]))\n    .map(([value, label]) => ({ value, label }));\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\nimport { GridCellContext } from '@brios-sorzu/core';\n\nexport type BriosGridEditorMode = 'cell' | 'row';\n\nexport interface BriosGridEditorTemplateContext<T extends object = Record<string, unknown>> extends GridCellContext<T> {\n  $implicit: unknown;\n  value: unknown;\n  initialValue: unknown;\n  mode: BriosGridEditorMode;\n  pending: boolean;\n  validationError: string;\n  setValue: (value: unknown) => void;\n  commit: () => void | Promise<void>;\n  cancel: () => void;\n}\n\n@Directive({\n  selector: 'ng-template[briosGridEditorTemplate]',\n  standalone: true\n})\nexport class BriosGridEditorTemplateDirective<T extends object = Record<string, unknown>> {\n  @Input('briosGridEditorTemplate') columnKey = '';\n\n  constructor(public readonly template: TemplateRef<BriosGridEditorTemplateContext<T>>) {}\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\nimport { GridGroupDisplayRow } from '@brios-sorzu/core';\n\nexport interface BriosGridGroupTemplateContext<T extends object = Record<string, unknown>> {\n  $implicit: GridGroupDisplayRow<T>;\n  group: GridGroupDisplayRow<T>;\n  value: unknown;\n  level: number;\n  count: number;\n  aggregates: Readonly<Record<string, unknown>>;\n  toggle: () => void;\n}\n\n@Directive({\n  selector: 'ng-template[briosGridGroupTemplate]',\n  standalone: true\n})\nexport class BriosGridGroupTemplateDirective<T extends object = Record<string, unknown>> {\n  @Input('briosGridGroupTemplate') enabled: boolean | string = true;\n\n  constructor(public readonly template: TemplateRef<BriosGridGroupTemplateContext<T>>) {}\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\n\nexport interface BriosGridValidationTemplateContext<T extends object = Record<string, unknown>> {\n  $implicit: string;\n  message: string;\n  row: T;\n  rowIndex: number;\n  column: unknown;\n  pending: boolean;\n}\n\n@Directive({\n  selector: 'ng-template[briosGridValidationTemplate]',\n  standalone: true\n})\nexport class BriosGridValidationTemplateDirective<T extends object = Record<string, unknown>> {\n  @Input('briosGridValidationTemplate') enabled: boolean | string = true;\n\n  constructor(public readonly template: TemplateRef<BriosGridValidationTemplateContext<T>>) {}\n}\n","import { GridKey } from '@brios-sorzu/core';\n\n/**\n * Small LRU cache used by master-detail loaders. Expanded rows are pinned by\n * the component and are therefore never evicted while their detail is visible.\n */\nexport class BriosDetailCache<T> {\n  private readonly values = new Map<GridKey, T>();\n  private limit = 50;\n\n  constructor(limit = 50) {\n    this.setLimit(limit);\n  }\n\n  get size(): number { return this.values.size; }\n\n  entries(): readonly (readonly [GridKey, T])[] { return [...this.values.entries()]; }\n\n  setLimit(value: number): void {\n    this.limit = Math.max(1, Math.floor(Number(value)) || 50);\n  }\n\n  has(key: GridKey): boolean { return this.values.has(key); }\n\n  get(key: GridKey): T | undefined {\n    const value = this.values.get(key);\n    if (value === undefined) return undefined;\n    this.touch(key, value);\n    return value;\n  }\n\n  set(key: GridKey, value: T): void {\n    this.touch(key, value);\n  }\n\n  delete(key: GridKey): boolean { return this.values.delete(key); }\n\n  clear(): void { this.values.clear(); }\n\n  /** Evicts the least recently used unpinned entries until the limit holds. */\n  trim(pinned: ReadonlySet<GridKey> = new Set()): void {\n    if (this.values.size <= this.limit) return;\n    for (const key of this.values.keys()) {\n      if (pinned.has(key)) continue;\n      this.values.delete(key);\n      if (this.values.size <= this.limit) break;\n    }\n  }\n\n  private touch(key: GridKey, value: T): void {\n    this.values.delete(key);\n    this.values.set(key, value);\n  }\n}\n","import { Injectable, signal } from '@angular/core';\n\nexport type BriosLocaleTextKey =\n  | 'close'\n  | 'expand'\n  | 'collapse'\n  | 'loading'\n  | 'apply'\n  | 'clear'\n  | 'confirm'\n  | 'cancel'\n  | 'page'\n  | 'previous'\n  | 'next'\n  | 'calendar'\n  | 'previousMonth'\n  | 'nextMonth'\n  | 'time'\n  | 'start'\n  | 'end'\n  | 'noSelection'\n  | 'toolbar'\n  | 'tabs'\n  | 'menu'\n  | 'options'\n  | 'pagination'\n  | 'tree'\n  | 'filters'\n  | 'fileUpload'\n  | 'contextMenu'\n  | 'commands'\n  | 'dialog'\n  | 'confirmMessage'\n  | 'search'\n  | 'noResults'\n  | 'error'\n  | 'retry'\n  | 'select'\n  | 'all'\n  | 'selected'\n  | 'selectedMany'\n  | 'remove'\n  | 'requiredError'\n  | 'minLengthError'\n  | 'maxLengthError'\n  | 'minError'\n  | 'maxError'\n  | 'patternError'\n  | 'invalidError'\n  | 'fileTooLarge';\n\nexport type BriosLocaleTexts = Partial<Record<BriosLocaleTextKey, string>>;\n\nexport interface BriosNumberSeparators {\n  group: string;\n  decimal: string;\n}\n\nexport interface BriosGridLocaleTexts {\n  labels?: Readonly<Record<string, string>>;\n  operatorLabels?: Readonly<Record<string, string>>;\n}\n\nconst gridTextsEs: Readonly<Record<string, string>> = {\n  search: 'Buscar', searchAria: 'Buscar en la grilla', group: 'Agrupar', noGroup: 'Sin grupo', columns: 'Columnas', newRow: 'Nueva fila',\n  clearFilters: 'Limpiar filtros', copy: 'Copiar', excel: 'Excel', print: 'PDF / imprimir', autoSize: 'Auto-size',\n  selectAll: 'Seleccionar todo', actions: 'Acciones', loading: 'Cargando…', validating: 'Validando…', empty: 'Sin registros', invalid: 'Valor inválido', previous: 'Anterior', next: 'Siguiente',\n  row: 'registro', rows: 'registros', page: 'Página', error: 'No se pudieron cargar los datos', retry: 'Reintentar', filterValues: 'Valores',\n  filterValuesSearch: 'Buscar valores', selectFilterValues: 'Seleccionar todo', clearFilterValues: 'Limpiar filtros', filterMenu: 'Filtro', openFilter: 'Abrir filtro',\n  exporting: 'Exportando', cancelExport: 'Cancelar', exportError: 'No se pudo exportar', filter: 'Filtrar', operator: 'Operador',\n  filterFrom: 'Desde', filterTo: 'Hasta', apply: 'Aplicar', rowsPerPage: 'Filas', groupBy: 'Agrupar por', subtotal: 'Subtotal',\n  summary: 'Resumen de la grilla', contextMenu: 'Menú contextual', treeTotal: 'Total general del árbol',\n  addGroup: 'Agregar columna', removeGroup: 'Quitar agrupación', dropToGroup: 'Arrastra una columna aquí', expand: 'Expandir',\n  collapse: 'Colapsar', detail: 'Mostrar detalle', detailRow: 'Detalle', selectRow: 'Seleccionar fila', selected: 'seleccionada', selectedMany: 'seleccionadas', editRow: 'Editar fila', removeRow: 'Eliminar fila',\n  saveRow: 'Guardar fila', cancelRow: 'Cancelar edición', conflict: 'El servidor rechazó este cambio', conflictBulk: 'El servidor rechazó estos cambios ({count} registros)', retryConflict: 'Reintentar edición',\n  dismissConflict: 'Descartar', previousMatch: 'Coincidencia anterior', nextMatch: 'Coincidencia siguiente', searchResult: 'Resultado de búsqueda',\n  pending: 'Guardando…', serverError: 'Error del servidor'\n};\n\nconst gridTextsEn: Readonly<Record<string, string>> = {\n  search: 'Search', searchAria: 'Search grid', group: 'Group', noGroup: 'No group', columns: 'Columns', newRow: 'New row',\n  clearFilters: 'Clear filters', copy: 'Copy', excel: 'Excel', print: 'PDF / print', autoSize: 'Auto-size',\n  selectAll: 'Select all', actions: 'Actions', loading: 'Loading…', validating: 'Validating…', empty: 'No records', invalid: 'Invalid value', previous: 'Previous', next: 'Next',\n  row: 'row', rows: 'rows', page: 'Page', error: 'Could not load data', retry: 'Retry', filterValues: 'Values',\n  filterValuesSearch: 'Search values', selectFilterValues: 'Select all', clearFilterValues: 'Clear filters', filterMenu: 'Filter', openFilter: 'Open filter',\n  exporting: 'Exporting', cancelExport: 'Cancel', exportError: 'Export failed', filter: 'Filter', operator: 'Operator',\n  filterFrom: 'From', filterTo: 'To', apply: 'Apply', rowsPerPage: 'Rows', groupBy: 'Group by', subtotal: 'Subtotal',\n  summary: 'Grid summary', contextMenu: 'Context menu', treeTotal: 'Grand total for tree',\n  addGroup: 'Add column', removeGroup: 'Remove grouping', dropToGroup: 'Drop a column here', expand: 'Expand',\n  collapse: 'Collapse', detail: 'Show detail', detailRow: 'Detail', selectRow: 'Select row', selected: 'selected', selectedMany: 'selected', editRow: 'Edit row', removeRow: 'Delete row',\n  saveRow: 'Save row', cancelRow: 'Cancel edit', conflict: 'The server rejected this change', conflictBulk: 'The server rejected these changes ({count} rows)', retryConflict: 'Retry edit',\n  dismissConflict: 'Dismiss', previousMatch: 'Previous match', nextMatch: 'Next match', searchResult: 'Search result',\n  pending: 'Saving…', serverError: 'Server error'\n};\n\nconst gridOperatorsEs: Readonly<Record<string, string>> = {\n  contains: 'contiene', equals: 'igual a', notEquals: 'distinto de', startsWith: 'empieza con', endsWith: 'termina con',\n  greaterThan: 'mayor que', greaterThanOrEqual: 'mayor o igual que', lessThan: 'menor que', lessThanOrEqual: 'menor o igual que',\n  between: 'entre', in: 'en lista', isEmpty: 'vacío', isNotEmpty: 'no vacío'\n};\n\nconst gridOperatorsEn: Readonly<Record<string, string>> = {\n  contains: 'contains', equals: 'equals', notEquals: 'not equals', startsWith: 'starts with', endsWith: 'ends with',\n  greaterThan: 'greater than', greaterThanOrEqual: 'greater than or equal to', lessThan: 'less than', lessThanOrEqual: 'less than or equal to',\n  between: 'between', in: 'in list', isEmpty: 'is empty', isNotEmpty: 'is not empty'\n};\n\nconst defaultTexts: Readonly<Record<BriosLocaleTextKey, string>> = {\n  close: 'Cerrar',\n  expand: 'Expandir',\n  collapse: 'Colapsar',\n  loading: 'Cargando…',\n  apply: 'Aplicar',\n  clear: 'Limpiar',\n  confirm: 'Confirmar',\n  cancel: 'Cancelar',\n  page: 'Página',\n  previous: 'Anterior',\n  next: 'Siguiente',\n  calendar: 'Calendario',\n  previousMonth: 'Mes anterior',\n  nextMonth: 'Mes siguiente',\n  time: 'Hora',\n  start: 'Desde',\n  end: 'Hasta',\n  noSelection: 'Sin selección',\n  toolbar: 'Barra de herramientas',\n  tabs: 'Pestañas',\n  menu: 'Menú',\n  options: 'Opciones',\n  pagination: 'Paginación',\n  tree: 'Árbol',\n  filters: 'Filtros',\n  fileUpload: 'Seleccionar archivos',\n  contextMenu: 'Menú contextual',\n  commands: 'Comandos',\n  dialog: 'Diálogo',\n  confirmMessage: '¿Deseas continuar?',\n  noResults: 'Sin resultados',\n  error: 'No se pudo cargar',\n  retry: 'Reintentar',\n  search: 'Buscar…',\n  select: 'Seleccionar…',\n  all: 'Todos',\n  selected: 'seleccionado',\n  selectedMany: 'seleccionados',\n  remove: 'Eliminar',\n  requiredError: 'Este campo es obligatorio',\n  minLengthError: 'Mínimo {value} caracteres',\n  maxLengthError: 'Máximo {value} caracteres',\n  minError: 'El valor debe ser mayor o igual a {value}',\n  maxError: 'El valor debe ser menor o igual a {value}',\n  patternError: 'El formato no es válido',\n  invalidError: 'Valor inválido',\n  fileTooLarge: 'El archivo {name} supera el tamaño permitido'\n};\n\nconst englishTexts: Readonly<Record<BriosLocaleTextKey, string>> = {\n  close: 'Close',\n  expand: 'Expand',\n  collapse: 'Collapse',\n  loading: 'Loading…',\n  apply: 'Apply',\n  clear: 'Clear',\n  confirm: 'Confirm',\n  cancel: 'Cancel',\n  page: 'Page',\n  previous: 'Previous',\n  next: 'Next',\n  calendar: 'Calendar',\n  previousMonth: 'Previous month',\n  nextMonth: 'Next month',\n  time: 'Time',\n  start: 'Start',\n  end: 'End',\n  noSelection: 'No selection',\n  toolbar: 'Toolbar',\n  tabs: 'Tabs',\n  menu: 'Menu',\n  options: 'Options',\n  pagination: 'Pagination',\n  tree: 'Tree',\n  filters: 'Filters',\n  fileUpload: 'Select files',\n  contextMenu: 'Context menu',\n  commands: 'Commands',\n  dialog: 'Dialog',\n  confirmMessage: 'Do you want to continue?',\n  noResults: 'No results',\n  error: 'Could not load',\n  retry: 'Retry',\n  search: 'Search…',\n  select: 'Select…',\n  all: 'All',\n  selected: 'selected',\n  selectedMany: 'selected',\n  remove: 'Remove',\n  requiredError: 'This field is required',\n  minLengthError: 'Minimum {value} characters',\n  maxLengthError: 'Maximum {value} characters',\n  minError: 'Value must be greater than or equal to {value}',\n  maxError: 'Value must be less than or equal to {value}',\n  patternError: 'The format is invalid',\n  invalidError: 'Invalid value',\n  fileTooLarge: 'File {name} exceeds the allowed size'\n};\n\n@Injectable({ providedIn: 'root' })\nexport class BriosLocaleService {\n  private readonly localeSignal = signal('es-MX');\n  private readonly textsSignal = signal<BriosLocaleTexts>({});\n  private readonly gridTextsSignal = signal<BriosGridLocaleTexts>({});\n\n  get locale(): string { return this.localeSignal(); }\n\n  setLocale(locale: string, texts: BriosLocaleTexts = {}, gridTexts: BriosGridLocaleTexts = {}): void {\n    this.localeSignal.set(this.normalizeLocale(locale));\n    this.textsSignal.set({ ...texts });\n    this.gridTextsSignal.set({ labels: { ...(gridTexts.labels ?? {}) }, operatorLabels: { ...(gridTexts.operatorLabels ?? {}) } });\n  }\n\n  setTexts(texts: BriosLocaleTexts): void { this.textsSignal.set({ ...texts }); }\n\n  setGridTexts(texts: BriosGridLocaleTexts): void {\n    this.gridTextsSignal.set({ labels: { ...(texts.labels ?? {}) }, operatorLabels: { ...(texts.operatorLabels ?? {}) } });\n  }\n\n  text(key: BriosLocaleTextKey, fallback = defaultTexts[key]): string {\n    const language = this.localeSignal().toLocaleLowerCase();\n    const localized = language.startsWith('en') ? englishTexts[key] : defaultTexts[key];\n    return this.textsSignal()[key] ?? localized ?? fallback;\n  }\n\n  message(key: BriosLocaleTextKey, values: Readonly<Record<string, unknown>> = {}): string {\n    return this.text(key).replace(/\\{([^}]+)\\}/g, (_, name: string) => String(values[name] ?? `{${name}}`));\n  }\n\n  gridText(key: string, fallback = key, locale = this.locale): string {\n    const language = locale.toLocaleLowerCase();\n    const localized = language.startsWith('en') ? gridTextsEn[key] : gridTextsEs[key];\n    return this.gridTextsSignal().labels?.[key] ?? localized ?? fallback;\n  }\n\n  gridOperator(operator: string, fallback = operator, locale = this.locale): string {\n    const language = locale.toLocaleLowerCase();\n    const localized = language.startsWith('en') ? gridOperatorsEn[operator] : gridOperatorsEs[operator];\n    return this.gridTextsSignal().operatorLabels?.[operator] ?? localized ?? fallback;\n  }\n\n  formatNumber(value: number | null | undefined, options: Intl.NumberFormatOptions = {}, locale = this.locale): string {\n    if (value == null || !Number.isFinite(value)) return '';\n    if (typeof Intl === 'undefined') return String(value);\n    try { return new Intl.NumberFormat(this.normalizeLocale(locale), options).format(value); }\n    catch { return String(value); }\n  }\n\n  formatCurrency(value: number | null | undefined, currency = 'MXN', options: Intl.NumberFormatOptions = {}, locale = this.locale): string {\n    return this.formatNumber(value, { ...options, style: 'currency', currency }, locale);\n  }\n\n  numberSeparators(locale = this.locale): BriosNumberSeparators {\n    if (typeof Intl === 'undefined') return { group: ',', decimal: '.' };\n    try {\n      const parts = new Intl.NumberFormat(this.normalizeLocale(locale)).formatToParts(12345.6);\n      return {\n        group: parts.find((part) => part.type === 'group')?.value ?? ',',\n        decimal: parts.find((part) => part.type === 'decimal')?.value ?? '.'\n      };\n    } catch { return { group: ',', decimal: '.' }; }\n  }\n\n  formatDate(value: Date | string | number | null | undefined, options: Intl.DateTimeFormatOptions = { dateStyle: 'medium' }, locale = this.locale): string {\n    return this.formatTemporal(value, options, locale);\n  }\n\n  formatTime(value: Date | string | number | null | undefined, options: Intl.DateTimeFormatOptions = { timeStyle: 'short' }, locale = this.locale): string {\n    return this.formatTemporal(value, options, locale);\n  }\n\n  formatDateTime(value: Date | string | number | null | undefined, options: Intl.DateTimeFormatOptions = { dateStyle: 'medium', timeStyle: 'short' }, locale = this.locale): string {\n    return this.formatTemporal(value, options, locale);\n  }\n\n  private formatTemporal(value: Date | string | number | null | undefined, options: Intl.DateTimeFormatOptions, locale: string): string {\n    if (value == null || typeof Intl === 'undefined') return value == null ? '' : String(value);\n    const date = value instanceof Date ? value : new Date(value);\n    if (Number.isNaN(date.getTime())) return String(value);\n    try { return new Intl.DateTimeFormat(this.normalizeLocale(locale), options).format(date); }\n    catch { return date.toISOString(); }\n  }\n\n  private normalizeLocale(locale: string | undefined): string {\n    const candidate = locale?.trim() || 'es-MX';\n    if (typeof Intl === 'undefined' || typeof Intl.getCanonicalLocales !== 'function') return candidate;\n    try { Intl.getCanonicalLocales(candidate); return candidate; }\n    catch { return 'es-MX'; }\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  AfterContentInit,\n  AfterViewChecked,\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChildren,\n  ContentChild,\n  EffectRef,\n  EventEmitter,\n  forwardRef,\n  HostListener,\n  Injector,\n  Input,\n  OnDestroy,\n  Output,\n  QueryList,\n  Signal,\n  TemplateRef,\n  ElementRef,\n  ViewChild,\n  ViewChildren,\n  effect\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Observable, Subscription } from 'rxjs';\nimport { FunnelPlus, Proportions, SlidersHorizontal } from 'lucide';\nimport {\n  GridCellChange,\n  GridBeforeCommitEvent,\n  GridBeforeEditEvent,\n  GridBatchUpdate,\n  GridColumn,\n  GridContextMenuItem,\n  GridController,\n  GridDataSource,\n  GridDataDisplayRow,\n  GridDisplayRow,\n  GridRemoteState,\n  GridRealtimeSource,\n  GridRetryOptions,\n  GridResult,\n  GridFilter,\n  GridGroupDisplayRow,\n  GridGroup,\n  GridKey,\n  GridOperator,\n  GridSelectionMode,\n  GridSelectionSnapshot,\n  GridRowChange,\n  GridRowEvent,\n  GridSort,\n  parseGridQueryState,\n  serializeGridQueryState,\n  GridStateStorage,\n  GridValidationResult,\n  GridPasteChange,\n  GridPasteResult,\n  isGridRemotePartialConflictError\n} from '@brios-sorzu/core';\nimport { GridLayoutEngine } from '@brios-sorzu/engine';\nimport { ExportColumn, ExportDisplayRow, ExportOptions, ExportProgress, toCsvAsync, toPdf, toPrintHtml, toXlsxAsync } from '@brios-sorzu/export';\nimport {\n  BriosGridCellTemplateContext,\n  BriosGridCellTemplateDirective\n} from './brios-grid-cell-template.directive';\nimport {\n  BriosGridDetailLoader,\n  BriosGridDetailTemplateContext,\n  BriosGridDetailTemplateDirective\n} from './brios-grid-detail-template.directive';\nimport {\n  BriosGridHeaderTemplateContext,\n  BriosGridHeaderTemplateDirective\n} from './brios-grid-header-template.directive';\nimport {\n  BriosGridFooterTemplateContext,\n  BriosGridFooterTemplateDirective\n} from './brios-grid-footer-template.directive';\nimport {\n  BriosGridState,\n  BriosGridStateTemplateContext,\n  BriosGridStateTemplateDirective\n} from './brios-grid-state-template.directive';\nimport { createFilterValueOptionsAsync } from './filter-values';\nimport {\n  BriosGridEditorTemplateContext,\n  BriosGridEditorTemplateDirective,\n  BriosGridEditorMode\n} from './brios-grid-editor-template.directive';\nimport {\n  BriosGridGroupTemplateContext,\n  BriosGridGroupTemplateDirective\n} from './brios-grid-group-template.directive';\nimport {\n  BriosGridValidationTemplateContext,\n  BriosGridValidationTemplateDirective\n} from './brios-grid-validation-template.directive';\nimport { BriosDetailCache } from './detail-cache';\nimport { BriosLocaleService } from './locale';\n\n@Component({\n  selector: 'svg[briosGridIcon]',\n  standalone: true,\n  imports: [CommonModule],\n  host: {\n    class: 'brios-grid__column-chooser-icon',\n    width: '16',\n    height: '16',\n    viewBox: '0 0 24 24',\n    fill: 'none',\n    stroke: 'currentColor',\n    'stroke-width': '2',\n    'stroke-linecap': 'round',\n    'stroke-linejoin': 'round',\n    'aria-hidden': 'true'\n  },\n  template: `\n    <ng-container *ngFor=\"let node of iconNodes\">\n      <svg:rect\n        *ngIf=\"node[0] === 'rect'\"\n        [attr.x]=\"node[1].x\"\n        [attr.y]=\"node[1].y\"\n        [attr.width]=\"node[1].width\"\n        [attr.height]=\"node[1].height\"\n        [attr.rx]=\"node[1].rx\"\n        [attr.ry]=\"node[1].ry\">\n      </svg:rect>\n      <svg:path *ngIf=\"node[0] === 'path'\" [attr.d]=\"node[1].d\"></svg:path>\n      <svg:circle\n        *ngIf=\"node[0] === 'circle'\"\n        [attr.cx]=\"node[1].cx\"\n        [attr.cy]=\"node[1].cy\"\n        [attr.r]=\"node[1].r\">\n      </svg:circle>\n    </ng-container>\n  `\n})\nclass BriosGridIconComponent {\n  @Input() iconNodes: Array<[string, Record<string, string>]> = [];\n}\n\ninterface ActiveEdit<T extends object> {\n  row: T;\n  rowIndex: number;\n  column: GridColumn<T>;\n}\n\ninterface ActiveRowEdit<T extends object> {\n  row: T;\n  rowIndex: number;\n  original: T;\n  isNew: boolean;\n}\n\nexport interface BriosGridLabels {\n  search: string;\n  searchAria: string;\n  group: string;\n  noGroup: string;\n  columns: string;\n  columnChooser?: string;\n  newRow: string;\n  clearFilters: string;\n  copy: string;\n  excel: string;\n  print: string;\n  autoSize: string;\n  autoSizeTooltip?: string;\n  selectAll: string;\n  actions: string;\n  loading: string;\n  validating: string;\n  empty: string;\n  invalid?: string;\n  previous: string;\n  next: string;\n  row?: string;\n  rows: string;\n  page: string;\n  error: string;\n  retry: string;\n  filterValues: string;\n  filterValuesSearch?: string;\n  selectFilterValues?: string;\n  clearFilterValues?: string;\n  exporting?: string;\n  cancelExport?: string;\n  exportError?: string;\n  operatorLabels?: Partial<Record<GridOperator, string>>;\n  filter?: string;\n  filterMenu?: string;\n  openFilter?: string;\n  operator?: string;\n  filterFrom?: string;\n  filterTo?: string;\n  apply?: string;\n  rowsPerPage?: string;\n  groupBy?: string;\n  subtotal?: string;\n  summary?: string;\n  contextMenu?: string;\n  treeTotal?: string;\n  addGroup?: string;\n  removeGroup?: string;\n  dropToGroup?: string;\n  expand?: string;\n  collapse?: string;\n  detail?: string;\n  detailRow?: string;\n  selectRow?: string;\n  selected?: string;\n  selectedMany?: string;\n  editRow?: string;\n  removeRow?: string;\n  saveRow?: string;\n  cancelRow?: string;\n  conflict?: string;\n  conflictBulk?: string;\n  retryConflict?: string;\n  dismissConflict?: string;\n  previousMatch?: string;\n  nextMatch?: string;\n  searchResult?: string;\n  pending?: string;\n  serverError?: string;\n}\n\nconst GRID_LABELS_ES: BriosGridLabels = {\n  search: 'Buscar', searchAria: 'Buscar en la grilla', group: 'Agrupar', noGroup: 'Sin grupo', columns: 'Columnas', columnChooser: 'Mostrar/Ocultar Columnas', newRow: 'Nueva fila',\n  clearFilters: 'Limpiar filtros', copy: 'Copiar', excel: 'Excel', print: 'PDF / imprimir', autoSize: 'Auto-size', autoSizeTooltip: 'Redimensionar columnas',\n  selectAll: 'Seleccionar todo', actions: 'Acciones', loading: 'Cargando…', validating: 'Validando…', empty: 'Sin registros', invalid: 'Valor inválido', previous: 'Anterior', next: 'Siguiente',\n  row: 'registro', rows: 'registros', page: 'Página', error: 'No se pudieron cargar los datos', retry: 'Reintentar', filterValues: 'Valores',\n  filterValuesSearch: 'Buscar valores', selectFilterValues: 'Seleccionar todo', clearFilterValues: 'Limpiar filtros', filterMenu: 'Filtro', openFilter: 'Abrir filtro',\n  exporting: 'Exportando', cancelExport: 'Cancelar', exportError: 'No se pudo exportar', filter: 'Filtrar', operator: 'Operador',\n  filterFrom: 'Desde', filterTo: 'Hasta', apply: 'Aplicar', rowsPerPage: 'Filas', groupBy: 'Agrupar por', subtotal: 'Subtotal', summary: 'Resumen de la grilla', contextMenu: 'Menú contextual', treeTotal: 'Total general del árbol',\n  addGroup: 'Agregar columna', removeGroup: 'Quitar agrupación', dropToGroup: 'Arrastra una columna aquí', expand: 'Expandir',\n  collapse: 'Colapsar', detail: 'Mostrar detalle', detailRow: 'Detalle', selectRow: 'Seleccionar fila', selected: 'seleccionada', selectedMany: 'seleccionadas', editRow: 'Editar fila', removeRow: 'Eliminar fila',\n  saveRow: 'Guardar fila', cancelRow: 'Cancelar edición', conflict: 'El servidor rechazó este cambio', conflictBulk: 'El servidor rechazó estos cambios ({count} registros)',\n  retryConflict: 'Reintentar edición', dismissConflict: 'Descartar', previousMatch: 'Coincidencia anterior',\n  nextMatch: 'Coincidencia siguiente', searchResult: 'Resultado de búsqueda', pending: 'Guardando…', serverError: 'Error del servidor',\n  operatorLabels: { contains: 'contiene', equals: 'igual a', notEquals: 'distinto de', startsWith: 'empieza con', endsWith: 'termina con', greaterThan: 'mayor que', greaterThanOrEqual: 'mayor o igual que', lessThan: 'menor que', lessThanOrEqual: 'menor o igual que', between: 'entre', in: 'en lista', isEmpty: 'vacío', isNotEmpty: 'no vacío' }\n};\n\nconst GRID_LABELS_EN: BriosGridLabels = {\n  search: 'Search', searchAria: 'Search grid', group: 'Group', noGroup: 'No group', columns: 'Columns', columnChooser: 'Show/Hide Columns', newRow: 'New row',\n  clearFilters: 'Clear filters', copy: 'Copy', excel: 'Excel', print: 'PDF / print', autoSize: 'Auto-size', autoSizeTooltip: 'Resize columns',\n  selectAll: 'Select all', actions: 'Actions', loading: 'Loading…', validating: 'Validating…', empty: 'No records', invalid: 'Invalid value', previous: 'Previous', next: 'Next',\n  row: 'row', rows: 'rows', page: 'Page', error: 'Could not load data', retry: 'Retry', filterValues: 'Values',\n  filterValuesSearch: 'Search values', selectFilterValues: 'Select all', clearFilterValues: 'Clear filters', filterMenu: 'Filter', openFilter: 'Open filter',\n  exporting: 'Exporting', cancelExport: 'Cancel', exportError: 'Export failed', filter: 'Filter', operator: 'Operator',\n  filterFrom: 'From', filterTo: 'To', apply: 'Apply', rowsPerPage: 'Rows', groupBy: 'Group by', subtotal: 'Subtotal', summary: 'Grid summary', contextMenu: 'Context menu', treeTotal: 'Grand total for tree',\n  addGroup: 'Add column', removeGroup: 'Remove grouping', dropToGroup: 'Drop a column here', expand: 'Expand',\n  collapse: 'Collapse', detail: 'Show detail', detailRow: 'Detail', selectRow: 'Select row', selected: 'selected', selectedMany: 'selected', editRow: 'Edit row', removeRow: 'Delete row',\n  saveRow: 'Save row', cancelRow: 'Cancel edit', conflict: 'The server rejected this change', conflictBulk: 'The server rejected these changes ({count} rows)',\n  retryConflict: 'Retry edit', dismissConflict: 'Dismiss', previousMatch: 'Previous match',\n  nextMatch: 'Next match', searchResult: 'Search result', pending: 'Saving…', serverError: 'Server error',\n  operatorLabels: { contains: 'contains', equals: 'equals', notEquals: 'not equals', startsWith: 'starts with', endsWith: 'ends with', greaterThan: 'greater than', greaterThanOrEqual: 'greater than or equal to', lessThan: 'less than', lessThanOrEqual: 'less than or equal to', between: 'between', in: 'in list', isEmpty: 'is empty', isNotEmpty: 'is not empty' }\n};\n\nexport interface BriosGridColumnResizeEvent<T extends object = Record<string, unknown>> {\n  column: GridColumn<T>;\n  previousWidth: number;\n  width: number;\n}\n\nexport interface BriosGridExportState {\n  status: 'idle' | 'running' | 'completed' | 'cancelled' | 'error';\n  progress: ExportProgress;\n  error: unknown | null;\n}\n\nexport interface BriosGridRemoteConflict<T extends object = Record<string, unknown>> {\n  key: GridKey;\n  row: T;\n  rowIndex: number;\n  changes: Readonly<Partial<T>>;\n  error: unknown;\n}\n\nexport interface BriosGridBulkRemoteConflict<T extends object = Record<string, unknown>> {\n  conflicts: readonly BriosGridRemoteConflict<T>[];\n  changes: Readonly<Partial<T>>;\n  error: unknown;\n}\n\nexport type BriosGridCopyMode = 'activeCell' | 'row' | 'column' | 'range' | 'selection';\n\nexport type BriosGridKeyboardCommand = 'cancelEdit' | 'undo' | 'redo' | 'copy' | 'selectAll' | 'beginEdit';\n\n/**\n * Keyboard shortcuts use `mod` for Ctrl on Windows/Linux and Cmd on macOS.\n * Set a command to `false` to disable it, or provide a value such as `mod+shift+z`.\n */\nexport type BriosGridKeyboardShortcuts = Partial<Record<BriosGridKeyboardCommand, string | false>>;\n\nexport type BriosGridStateMigration<T extends object = Record<string, unknown>> = (\n  state: ReturnType<GridController<T>['snapshot']>,\n  fromVersion: number\n) => ReturnType<GridController<T>['snapshot']> | null;\n\nexport type BriosItemsSource<T extends object> = Observable<readonly T[]> | Signal<readonly T[]> | AsyncIterable<T | readonly T[]>;\n\n@Component({\n  selector: 'brios-grid',\n  standalone: true,\n  imports: [CommonModule, FormsModule, BriosGridIconComponent, BriosGridCellTemplateDirective, BriosGridDetailTemplateDirective, BriosGridHeaderTemplateDirective, BriosGridFooterTemplateDirective, BriosGridStateTemplateDirective, BriosGridEditorTemplateDirective, BriosGridGroupTemplateDirective, BriosGridValidationTemplateDirective],\n  providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BriosGridComponent), multi: true }],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <section\n      class=\"brios-grid\"\n      [class.brios-grid--loading]=\"loading\"\n      [style.--brios-grid-row-height.px]=\"rowHeight\"\n      role=\"region\"\n      [attr.aria-label]=\"ariaLabel\">\n      <div *ngIf=\"showToolbar\" class=\"brios-grid__toolbar\">\n        <div class=\"brios-grid__toolbar-group\">\n          <label *ngIf=\"searchable\" class=\"brios-grid__search\">\n              <span class=\"brios-grid__sr-only\">{{ labels.search }}</span>\n            <input\n              type=\"search\"\n              [ngModel]=\"searchText\"\n              (ngModelChange)=\"onSearch($event)\"\n              [placeholder]=\"labels.search + '…'\"\n              [attr.aria-label]=\"labels.searchAria\" />\n          </label>\n          <label *ngIf=\"groupable\" class=\"brios-grid__group-selector\">\n            {{ labels.group }}\n            <select [ngModel]=\"groupBy ?? ''\" (ngModelChange)=\"setGroupByFromToolbar($event)\" [attr.aria-label]=\"labels.groupBy || labels.group\">\n              <option value=\"\">{{ labels.noGroup }}</option>\n              <option *ngFor=\"let column of visibleColumns\" [ngValue]=\"column.key\">{{ column.header }}</option>\n            </select>\n          </label>\n          <div\n            *ngIf=\"showColumnChooser\"\n            #columnChooser\n            class=\"brios-grid__column-chooser\"\n            [class.brios-grid__column-chooser--open]=\"columnChooserOpen\">\n            <button\n              type=\"button\"\n              class=\"brios-grid__column-chooser-trigger\"\n              [attr.aria-expanded]=\"columnChooserOpen\"\n              [attr.aria-label]=\"labels.columnChooser || 'Mostrar/Ocultar Columnas'\"\n              [attr.title]=\"labels.columnChooser || 'Mostrar/Ocultar Columnas'\"\n              (click)=\"toggleColumnChooser()\">\n              <svg briosGridIcon [iconNodes]=\"slidersHorizontalIconNodes\"></svg>\n              <span class=\"brios-grid__sr-only\">{{ labels.columnChooser || labels.columns }}</span>\n            </button>\n            <div *ngIf=\"columnChooserOpen\" class=\"brios-grid__column-chooser-panel\">\n              <ng-container *ngFor=\"let column of columns\">\n                <label *ngIf=\"column.showInColumnChooser !== false\"><input type=\"checkbox\" [checked]=\"column.visible !== false\" (change)=\"toggleColumn(column)\" /> {{ column.header }}</label>\n              </ng-container>\n            </div>\n          </div>\n          <button *ngIf=\"allowRowAdding\" type=\"button\" class=\"brios-grid__button\" (click)=\"addRow()\">{{ labels.newRow }}</button>\n          <ng-container *ngIf=\"searchText\">\n            <button type=\"button\" class=\"brios-grid__button\" [disabled]=\"searchMatchCount < 2\" (click)=\"navigateSearchMatch(-1)\" [attr.aria-label]=\"labels.previousMatch || 'Coincidencia anterior'\">←</button>\n            <button type=\"button\" class=\"brios-grid__button\" [disabled]=\"searchMatchCount < 2\" (click)=\"navigateSearchMatch(1)\" [attr.aria-label]=\"labels.nextMatch || 'Coincidencia siguiente'\">→</button>\n            <span class=\"brios-grid__search-results\" role=\"status\" aria-live=\"polite\" [attr.aria-label]=\"labels.searchResult || 'Resultado de búsqueda'\">\n              {{ searchMatchPosition }} / {{ searchMatchCount }}\n            </span>\n          </ng-container>\n          <button *ngIf=\"searchText || activeFilters.length\" type=\"button\" class=\"brios-grid__button\" (click)=\"clearFilters()\">{{ labels.clearFilters }}</button>\n          <span *ngIf=\"selectedCount\" class=\"brios-grid__selection-count\">{{ selectedCount }} {{ selectedCount === 1 ? labels.selected : labels.selectedMany }}</span>\n        </div>\n        <div class=\"brios-grid__toolbar-group\">\n          <button type=\"button\" class=\"brios-grid__button\" (click)=\"copySelection()\" [disabled]=\"!selectedCount\">{{ labels.copy }}</button>\n          <button type=\"button\" class=\"brios-grid__button\" (click)=\"downloadCsv()\">CSV</button>\n          <button type=\"button\" class=\"brios-grid__button\" (click)=\"downloadExcel()\" [disabled]=\"exporting\" [attr.aria-busy]=\"exporting\">{{ exporting ? (labels.exporting || 'Exportando') + ' ' + (exportProgress.ratio * 100 | number:'1.0-0') + '%' : labels.excel }}</button>\n          <button type=\"button\" class=\"brios-grid__button\" (click)=\"downloadPdf()\">{{ labels.print }}</button>\n          <button *ngIf=\"exporting\" type=\"button\" class=\"brios-grid__button\" (click)=\"cancelExport()\">{{ labels.cancelExport || 'Cancelar' }}</button>\n          <button\n            type=\"button\"\n            class=\"brios-grid__button brios-grid__auto-size-button\"\n            [attr.aria-label]=\"labels.autoSizeTooltip || 'Redimensionar columnas'\"\n            [attr.title]=\"labels.autoSizeTooltip || 'Redimensionar columnas'\"\n            (click)=\"autoSizeColumns()\">\n            <svg briosGridIcon [iconNodes]=\"proportionsIconNodes\"></svg>\n          </button>\n          <span *ngIf=\"exportError\" class=\"brios-grid__export-error\" role=\"alert\">{{ labels.exportError || 'No se pudo exportar' }}</span>\n        </div>\n      </div>\n\n      <div *ngIf=\"remoteConflictState\" class=\"brios-grid__remote-conflict\" role=\"alert\" aria-live=\"assertive\">\n        <span>{{ labels.conflict || 'El servidor rechazó este cambio' }}</span>\n        <button type=\"button\" class=\"brios-grid__button\" (click)=\"retryRemoteConflict()\">{{ labels.retryConflict || labels.retry }}</button>\n        <button type=\"button\" class=\"brios-grid__button\" (click)=\"dismissRemoteConflict()\">{{ labels.dismissConflict || labels.cancelRow }}</button>\n      </div>\n      <div *ngIf=\"remoteConflictBulkState\" class=\"brios-grid__remote-conflict\" role=\"alert\" aria-live=\"assertive\">\n        <span>{{ bulkConflictMessage(remoteConflictBulkState.conflicts.length) }}</span>\n        <button type=\"button\" class=\"brios-grid__button\" (click)=\"retryRemoteConflictBulk()\">{{ labels.retryConflict || labels.retry }}</button>\n        <button type=\"button\" class=\"brios-grid__button\" (click)=\"dismissRemoteConflictBulk()\">{{ labels.dismissConflict || labels.cancelRow }}</button>\n      </div>\n\n      <div\n        *ngIf=\"groupable && showGroupDropZone\"\n        class=\"brios-grid__group-dropzone\"\n        role=\"group\"\n        [attr.aria-label]=\"labels.dropToGroup || 'Agrupar columnas'\"\n        (dragover)=\"$event.preventDefault()\"\n        (drop)=\"dropColumnToGroup($event)\">\n        <span class=\"brios-grid__group-dropzone-label\">{{ labels.group }}</span>\n        <button\n          *ngFor=\"let group of groups\"\n          type=\"button\"\n          class=\"brios-grid__group-chip\"\n          [attr.aria-label]=\"(labels.removeGroup || 'Quitar agrupación') + ' ' + groupColumnHeader(group.key)\"\n          (click)=\"removeGroup(group.key)\">{{ groupColumnHeader(group.key) }} ×</button>\n        <select\n          [ngModel]=\"groupDropSelection\"\n          (ngModelChange)=\"addGroupFromSelector($event)\"\n          [attr.aria-label]=\"labels.addGroup || 'Agregar agrupación'\">\n          <option value=\"\">{{ labels.addGroup || 'Agregar columna' }}</option>\n          <option *ngFor=\"let column of visibleColumns\" [value]=\"column.key\" [disabled]=\"isGrouped(column.key)\">{{ column.header }}</option>\n        </select>\n        <span *ngIf=\"!groups.length\" class=\"brios-grid__group-dropzone-hint\">{{ labels.dropToGroup || 'Arrastra una columna aquí' }}</span>\n      </div>\n\n      <div\n        #viewport\n        class=\"brios-grid__viewport\"\n        [style.height.px]=\"height\"\n        (scroll)=\"onScroll(viewport.scrollTop, viewport.scrollLeft, viewport.clientWidth)\">\n        <table\n          class=\"brios-grid__table\"\n          [class.brios-grid__table--horizontal]=\"horizontalVirtualizationEnabled\"\n          [attr.role]=\"childrenField ? 'treegrid' : 'grid'\"\n          [attr.aria-label]=\"ariaLabel\"\n          tabindex=\"0\"\n          [attr.aria-rowcount]=\"totalAriaRowCount\"\n          [attr.aria-colcount]=\"visibleColumns.length + selectionColumnCount + rowActionColumnCount\"\n          [attr.aria-activedescendant]=\"activeDescendantId()\"\n          [attr.aria-busy]=\"loading\"\n          [attr.aria-multiselectable]=\"currentSelectionMode === 'multiple' || currentSelectionMode === 'range'\"\n          (pointerdown)=\"suppressFocusActivation()\"\n          (focus)=\"ensureActiveCell($event)\"\n          (paste)=\"onPaste($event)\"\n          (keydown)=\"handleKeydown($event)\">\n          <colgroup>\n            <col *ngIf=\"currentSelectionMode !== 'none'\" class=\"brios-grid__selection-column\" />\n            <col *ngIf=\"horizontalVirtualizationEnabled && horizontalLeftOffset\" class=\"brios-grid__horizontal-spacer\" [style.width.px]=\"horizontalLeftOffset\" />\n            <col *ngFor=\"let column of renderedColumns; trackBy: columnTrackBy\" [style.width]=\"columnWidth(column)\" />\n            <col *ngIf=\"rowActionColumnCount\" class=\"brios-grid__row-actions\" />\n            <col *ngIf=\"horizontalVirtualizationEnabled && horizontalRightOffset\" class=\"brios-grid__horizontal-spacer\" [style.width.px]=\"horizontalRightOffset\" />\n          </colgroup>\n          <thead>\n            <tr *ngIf=\"hasColumnGroups\" class=\"brios-grid__column-group-row\">\n              <th *ngIf=\"currentSelectionMode !== 'none'\" class=\"brios-grid__selection-column brios-grid__frozen-start\"></th>\n              <th *ngFor=\"let group of columnGroupHeaders; trackBy: columnGroupTrackBy\" [attr.colspan]=\"group.span\">{{ group.header }}</th>\n              <th *ngIf=\"rowActionColumnCount\" class=\"brios-grid__row-actions\" [attr.aria-label]=\"labels.actions\"></th>\n            </tr>\n            <tr>\n              <th *ngIf=\"currentSelectionMode !== 'none'\" role=\"columnheader\" class=\"brios-grid__selection-column brios-grid__frozen-start\" aria-colindex=\"1\" [style.top.px]=\"hasColumnGroups ? rowHeight : 0\">\n                <input type=\"checkbox\" [checked]=\"allVisibleSelected\" (click)=\"$event.stopPropagation()\" (change)=\"toggleAll()\" [attr.aria-label]=\"labels.selectAll\" />\n              </th>\n              <th *ngIf=\"horizontalVirtualizationEnabled && horizontalLeftOffset\" class=\"brios-grid__horizontal-spacer\" [style.width.px]=\"horizontalLeftOffset\" [style.top.px]=\"hasColumnGroups ? rowHeight : 0\"></th>\n              <th\n                *ngFor=\"let column of renderedColumns; trackBy: columnTrackBy\"\n                role=\"columnheader\"\n                [attr.aria-colindex]=\"globalColumnIndex(column) + selectionColumnCount + 1\"\n                [attr.aria-sort]=\"sortAriaValue(column)\"\n                [style.width]=\"columnWidth(column)\"\n                [class.brios-grid__frozen-start]=\"isFrozenStart(column)\"\n                [class.brios-grid__frozen-end]=\"isFrozenEnd(column)\"\n                [class.brios-grid__column--filtered]=\"isColumnFiltered(column)\"\n                [class.brios-grid__column--sorted]=\"isColumnSorted(column)\"\n                [class.brios-grid__header-cell--filter-open]=\"isFilterMenuOpen(column)\"\n                [style.left.px]=\"isFrozenStart(column) ? frozenStartOffset(column) : null\"\n                [style.right.px]=\"isFrozenEnd(column) ? frozenEndOffset(column) : null\"\n                [attr.draggable]=\"allowDragging\"\n                [attr.tabindex]=\"allowDragging ? 0 : null\"\n                (dragstart)=\"startColumnDrag(column)\"\n                (dragover)=\"$event.preventDefault()\"\n                (drop)=\"dropColumn(column)\"\n                    (keydown)=\"onHeaderKeydown($event, column)\"\n                    (mousedown)=\"onHeaderMouseDown($event, column)\"\n                [class.brios-grid__column--selected]=\"isColumnSelected(column)\"\n                [attr.aria-selected]=\"isColumnSelected(column)\"\n                (click)=\"selectColumn(column, $event)\"\n                [class.brios-grid__cell--center]=\"column.align === 'center'\"\n                [class.brios-grid__cell--right]=\"column.align === 'right'\">\n                <div class=\"brios-grid__header-content\">\n                  <ng-container *ngIf=\"headerTemplate(column); else defaultHeader\">\n                    <ng-container *ngTemplateOutlet=\"headerTemplate(column); context: headerContext(column)\"></ng-container>\n                  </ng-container>\n                  <ng-template #defaultHeader>\n                    <button\n                      [attr.aria-label]=\"column.header\"\n                      *ngIf=\"column.sortable !== false; else plainHeader\"\n                      class=\"brios-grid__sort-button\"\n                      type=\"button\"\n                      (click)=\"sort(column, $event)\">\n                      <span class=\"brios-grid__sort-indicator\" aria-hidden=\"true\">{{ sortIndicator(column) }}</span>\n                      <span *ngIf=\"column.showHeaderTitle !== false\">{{ column.header }}</span>\n                    </button>\n                    <ng-template #plainHeader>\n                      <span *ngIf=\"column.showHeaderTitle !== false\">{{ column.header }}</span>\n                    </ng-template>\n                  </ng-template>\n                  <button\n                    *ngIf=\"filterable && showFilterMenuFor(column)\"\n                    type=\"button\"\n                    class=\"brios-grid__filter-menu-trigger\"\n                    [attr.aria-label]=\"(labels.openFilter || 'Abrir filtro') + ' ' + column.header\"\n                    [attr.aria-expanded]=\"isFilterMenuOpen(column)\"\n                    [attr.data-filter-key]=\"column.key\"\n                    (click)=\"toggleFilterMenu(column, $event)\">\n                    <svg briosGridIcon [iconNodes]=\"funnelPlusIconNodes\"></svg>\n                  </button>\n                </div>\n                <div\n                  *ngIf=\"isFilterMenuOpen(column)\"\n                  class=\"brios-grid__filter-menu\"\n                  [style.max-height.px]=\"filterMenuMaxHeight()\"\n                  role=\"dialog\"\n                  [attr.aria-label]=\"(labels.filterMenu || 'Filtro') + ' ' + column.header\"\n                  (click)=\"$event.stopPropagation()\">\n                  <strong>{{ column.header }}</strong>\n                  <select class=\"brios-grid__filter-menu-operator\" [value]=\"filterOperator(column)\" (change)=\"onColumnFilterOperator(column, $any($event.target).value)\">\n                    <option *ngFor=\"let option of filterOperatorOptions; trackBy: filterOperatorTrackBy\" [value]=\"option.value\">{{ option.label }}</option>\n                  </select>\n                  <ng-container *ngIf=\"filterOperator(column) === 'between'; else menuSingleValue\">\n                    <input class=\"brios-grid__column-filter\" [type]=\"filterInputType(column)\" [value]=\"filterBetweenPart(column, 0)\" (input)=\"onColumnFilterRange(column, 0, $any($event.target).value)\" [placeholder]=\"labels.filterFrom || 'Desde'\" />\n                    <input class=\"brios-grid__column-filter\" [type]=\"filterInputType(column)\" [value]=\"filterBetweenPart(column, 1)\" (input)=\"onColumnFilterRange(column, 1, $any($event.target).value)\" [placeholder]=\"labels.filterTo || 'Hasta'\" />\n                  </ng-container>\n                  <ng-template #menuSingleValue><input class=\"brios-grid__column-filter\" [type]=\"filterInputType(column)\" [value]=\"filterValue(column)\" (input)=\"onColumnFilter(column, $any($event.target).value)\" [placeholder]=\"(labels.filter || 'Filtrar') + ' ' + column.header\" /></ng-template>\n                  <input class=\"brios-grid__filter-values-search\" type=\"search\" [value]=\"filterValueSearch(column)\" (input)=\"onFilterValueSearch(column, $any($event.target).value)\" [placeholder]=\"(labels.filterValuesSearch || 'Buscar valores') + '…'\" />\n                  <div *ngIf=\"filterValuesLoading(column)\" class=\"brios-grid__filter-values-loading\" role=\"status\" aria-live=\"polite\">{{ labels.loading || 'Cargando…' }}</div>\n                  <div class=\"brios-grid__filter-value-actions\">\n                    <button type=\"button\" class=\"brios-grid__filter-value-action\" [disabled]=\"filterValuesLoading(column)\" (click)=\"selectAllFilterValues(column)\">{{ labels.selectFilterValues || labels.selectAll }}</button>\n                    <button type=\"button\" class=\"brios-grid__filter-value-action\" (click)=\"clearFilterValues(column)\">{{ labels.clearFilterValues || labels.clearFilters }}</button>\n                  </div>\n                  <div class=\"brios-grid__filter-menu-options\">\n                    <label *ngFor=\"let option of filteredFilterValues(column); trackBy: filterValueTrackBy\">\n                      <input type=\"checkbox\" [checked]=\"isFilterValueSelected(column, option.value)\" (change)=\"toggleFilterValue(column, option.value, $any($event.target).checked)\" />\n                      <span>{{ option.label }}</span>\n                    </label>\n                  </div>\n                  <button type=\"button\" class=\"brios-grid__filter-menu-close\" (click)=\"closeFilterMenu()\">{{ labels.apply || 'Aplicar' }}</button>\n                </div>\n                <span *ngIf=\"allowResizing\" class=\"brios-grid__resize-handle\" aria-hidden=\"true\"></span>\n              </th>\n              <th *ngIf=\"rowActionColumnCount\" class=\"brios-grid__row-actions\" [attr.aria-label]=\"labels.actions\"></th>\n              <th *ngIf=\"horizontalVirtualizationEnabled && horizontalRightOffset\" class=\"brios-grid__horizontal-spacer\" [style.width.px]=\"horizontalRightOffset\"></th>\n            </tr>\n            <tr *ngIf=\"filterable\" class=\"brios-grid__filter-row\" [class.brios-grid__filter-row--values-open]=\"filterValuesOverlayOpen\">\n              <th *ngIf=\"currentSelectionMode !== 'none'\" class=\"brios-grid__selection-column brios-grid__frozen-start\" [style.top.px]=\"(hasColumnGroups ? rowHeight : 0) + rowHeight\"></th>\n              <th *ngIf=\"horizontalVirtualizationEnabled && horizontalLeftOffset\" class=\"brios-grid__horizontal-spacer\" [style.width.px]=\"horizontalLeftOffset\" [style.top.px]=\"(hasColumnGroups ? rowHeight : 0) + rowHeight\"></th>\n              <th *ngFor=\"let column of renderedColumns; trackBy: columnTrackBy\" [class.brios-grid__frozen-start]=\"isFrozenStart(column)\" [class.brios-grid__frozen-end]=\"isFrozenEnd(column)\" [class.brios-grid__filter-value-header--open]=\"isFilterValuesOpen(column)\" [style.left.px]=\"isFrozenStart(column) ? frozenStartOffset(column) : null\" [style.right.px]=\"isFrozenEnd(column) ? frozenEndOffset(column) : null\">\n                <select class=\"brios-grid__filter-operator\" [value]=\"filterOperator(column)\" (change)=\"onColumnFilterOperator(column, $any($event.target).value)\" [attr.aria-label]=\"(labels.operator || 'Operador') + ' ' + column.header\">\n                  <option *ngFor=\"let option of filterOperatorOptions; trackBy: filterOperatorTrackBy\" [value]=\"option.value\">{{ option.label }}</option>\n                </select>\n                <ng-container *ngIf=\"filterOperator(column) === 'between'; else singleColumnFilter\">\n                  <div class=\"brios-grid__range-filter\">\n                    <input class=\"brios-grid__column-filter\" [type]=\"filterInputType(column)\" [value]=\"filterBetweenPart(column, 0)\" (input)=\"onColumnFilterRange(column, 0, $any($event.target).value)\" [placeholder]=\"(labels.filterFrom || labels.filter || 'Filtrar') + ' desde'\" [attr.aria-label]=\"(labels.filterFrom || labels.filter || 'Filtrar') + ' ' + column.header\" />\n                    <input class=\"brios-grid__column-filter\" [type]=\"filterInputType(column)\" [value]=\"filterBetweenPart(column, 1)\" (input)=\"onColumnFilterRange(column, 1, $any($event.target).value)\" [placeholder]=\"(labels.filterTo || labels.filter || 'Filtrar') + ' hasta'\" [attr.aria-label]=\"(labels.filterTo || labels.filter || 'Filtrar') + ' ' + column.header\" />\n                  </div>\n                </ng-container>\n                <ng-template #singleColumnFilter><input class=\"brios-grid__column-filter\" [type]=\"filterInputType(column)\" [value]=\"filterValue(column)\" (input)=\"onColumnFilter(column, $any($event.target).value)\" [placeholder]=\"(labels.filter || 'Filtrar') + ' ' + column.header\" [attr.aria-label]=\"(labels.filter || 'Filtrar') + ' ' + column.header\" /></ng-template>\n                <details *ngIf=\"hasFilterValues && !showFilterMenu\" class=\"brios-grid__filter-values\" [open]=\"isFilterValuesOpen(column)\">\n                  <summary [attr.data-filter-values-key]=\"column.key\" (click)=\"toggleFilterValues(column, $event)\">{{ labels.filterValues }}</summary>\n                  <div *ngIf=\"isFilterValuesOpen(column)\" class=\"brios-grid__filter-value-options\">\n                    <input class=\"brios-grid__filter-values-search\" type=\"search\" [value]=\"filterValueSearch(column)\" (input)=\"onFilterValueSearch(column, $any($event.target).value)\" [placeholder]=\"(labels.filterValuesSearch || 'Buscar valores') + '…'\" [attr.aria-label]=\"(labels.filterValuesSearch || 'Buscar valores') + ' de ' + column.header\" />\n                    <div *ngIf=\"filterValuesLoading(column)\" class=\"brios-grid__filter-values-loading\" role=\"status\" aria-live=\"polite\">{{ labels.loading || 'Cargando…' }}</div>\n                    <div class=\"brios-grid__filter-value-actions\">\n                      <button type=\"button\" class=\"brios-grid__filter-value-action\" [disabled]=\"filterValuesLoading(column)\" (click)=\"selectAllFilterValues(column)\">{{ labels.selectFilterValues || labels.selectAll }}</button>\n                      <button type=\"button\" class=\"brios-grid__filter-value-action\" (click)=\"clearFilterValues(column)\">{{ labels.clearFilterValues || labels.clearFilters }}</button>\n                    </div>\n                    <label *ngFor=\"let option of filteredFilterValues(column); trackBy: filterValueTrackBy\">\n                      <input type=\"checkbox\" [checked]=\"isFilterValueSelected(column, option.value)\" (change)=\"toggleFilterValue(column, option.value, $any($event.target).checked)\" />\n                      <span>{{ option.label }}</span>\n                    </label>\n                  </div>\n                </details>\n              </th>\n              <th *ngIf=\"rowActionColumnCount\" class=\"brios-grid__row-actions\" [attr.aria-label]=\"labels.actions\"></th>\n              <th *ngIf=\"horizontalVirtualizationEnabled && horizontalRightOffset\" class=\"brios-grid__horizontal-spacer\" [style.width.px]=\"horizontalRightOffset\"></th>\n            </tr>\n          </thead>\n          <tbody>\n            <ng-container *ngFor=\"let item of renderedItems; let renderedIndex = index; trackBy: rowTrackBy\">\n              <tr *ngIf=\"isVirtualSpacerBefore(renderedIndex)\" class=\"brios-grid__spacer-row\" aria-hidden=\"true\">\n                <td [attr.colspan]=\"renderedColumns.length + selectionColumnCount + rowActionColumnCount + horizontalSpacerColumnCount\" [style.height.px]=\"topOffset\"></td>\n              </tr>\n              <tr *ngIf=\"isGroupRow(item); else dataRow\" role=\"row\" class=\"brios-grid__group-row\" [class.brios-grid__group-summary-row]=\"item.summary\" [class.brios-grid__frozen-row]=\"isFrozenRow(absoluteIndex(renderedIndex))\" [style.top.px]=\"isFrozenRow(absoluteIndex(renderedIndex)) ? frozenRowTop(absoluteIndex(renderedIndex)) : null\" [attr.aria-rowindex]=\"ariaRowIndex(absoluteIndex(renderedIndex))\" (click)=\"toggleGroup(item)\">\n                <td role=\"gridcell\" [attr.colspan]=\"renderedColumns.length + selectionColumnCount + rowActionColumnCount + horizontalSpacerColumnCount\" [attr.aria-colspan]=\"renderedColumns.length + selectionColumnCount + rowActionColumnCount + horizontalSpacerColumnCount\" [style.padding-left.px]=\"14 + item.level * 18\">\n                  <ng-container *ngIf=\"groupTemplate; else defaultGroupTemplate\">\n                    <ng-container *ngTemplateOutlet=\"groupTemplate; context: groupContext(item)\"></ng-container>\n                  </ng-container>\n                  <ng-template #defaultGroupTemplate>\n                    <button type=\"button\" class=\"brios-grid__group-button\" [disabled]=\"item.summary\" [attr.aria-expanded]=\"item.summary ? null : !item.collapsed\" (click)=\"$event.stopPropagation(); toggleGroup(item)\">\n                      <span class=\"brios-grid__group-chevron\">{{ item.summary ? '∑' : item.collapsed ? '▸' : '▾' }}</span>\n                      <strong>{{ item.summary ? labels.subtotal : item.field }}{{ item.summary ? '' : ': ' + item.value }}</strong>\n                      <span *ngIf=\"item.summary\">{{ item.field }}: {{ item.value }}</span>\n                      <span>{{ item.count }} {{ item.count === 1 ? labels.row : labels.rows }}</span>\n                      <small *ngIf=\"groupAggregateLabel(item)\">{{ groupAggregateLabel(item) }}</small>\n                    </button>\n                  </ng-template>\n                </td>\n              </tr>\n              <ng-template #dataRow>\n                <tr\n                  role=\"row\"\n                  [class.brios-grid__frozen-row]=\"isFrozenRow(absoluteIndex(renderedIndex))\"\n                  [style.top.px]=\"isFrozenRow(absoluteIndex(renderedIndex)) ? frozenRowTop(absoluteIndex(renderedIndex)) : null\"\n                  [class.brios-grid__row--selected]=\"isSelected(rowOf(item), dataIndexOf(item))\"\n                  [class.brios-grid__row--pending]=\"rowEditState(rowOf(item)) === 'pending'\"\n                  [class.brios-grid__row--server-error]=\"rowEditState(rowOf(item)) === 'server-error'\"\n                  [style.height.px]=\"rowHeightFor ? rowHeightFor(item, absoluteIndex(renderedIndex)) : null\"\n                  [attr.aria-rowindex]=\"ariaRowIndex(absoluteIndex(renderedIndex))\"\n                  [attr.aria-level]=\"childrenField ? item.level + 1 : null\"\n                  [attr.aria-expanded]=\"hasChildren(rowOf(item)) ? !isNodeCollapsed(item) : null\"\n                  [attr.aria-selected]=\"isSelected(rowOf(item), dataIndexOf(item))\"\n                  [attr.aria-busy]=\"rowEditState(rowOf(item)) === 'pending' ? 'true' : null\"\n                  [attr.data-brios-edit-state]=\"rowEditState(rowOf(item))\"\n                  (click)=\"selectRow(rowOf(item), dataIndexOf(item), $event)\"\n                  (contextmenu)=\"onContextMenu($event, rowOf(item), dataIndexOf(item))\">\n                  <td *ngIf=\"currentSelectionMode !== 'none'\" role=\"gridcell\" class=\"brios-grid__selection-column brios-grid__frozen-start\" aria-colindex=\"1\" (click)=\"$event.stopPropagation()\">\n                    <input type=\"checkbox\" [checked]=\"isSelected(rowOf(item), dataIndexOf(item))\" [attr.aria-checked]=\"treeSelectionState(rowOf(item), dataIndexOf(item)) === 'mixed' ? 'mixed' : isSelected(rowOf(item), dataIndexOf(item)) ? 'true' : 'false'\" (change)=\"selectRow(rowOf(item), dataIndexOf(item))\" [attr.aria-label]=\"labels.selectRow + ' ' + (absoluteIndex(renderedIndex) + 1)\" />\n                  </td>\n                  <td *ngIf=\"horizontalVirtualizationEnabled && horizontalLeftOffset\" class=\"brios-grid__horizontal-spacer\" [style.width.px]=\"horizontalLeftOffset\"></td>\n                  <td\n                    *ngFor=\"let column of renderedColumns; let columnIndex = index; trackBy: columnTrackBy\"\n                    role=\"gridcell\"\n                    [attr.id]=\"cellId(absoluteIndex(renderedIndex), globalColumnIndex(column))\"\n                    [attr.aria-colindex]=\"globalColumnIndex(column) + selectionColumnCount + 1\"\n                    [class.brios-grid__cell--center]=\"column.align === 'center'\"\n                    [class.brios-grid__cell--right]=\"column.align === 'right'\"\n                    [class.brios-grid__cell--wrap]=\"column.wrap\"\n                    [class.brios-grid__cell--editable]=\"column.editable\"\n                    [class.brios-grid__cell--editing]=\"isEditing(rowOf(item), dataIndexOf(item), column)\"\n                    [class.brios-grid__cell--active]=\"isActiveCell(absoluteIndex(renderedIndex), globalColumnIndex(column))\"\n                    [ngClass]=\"cellClass(rowOf(item), column)\"\n                    [class.brios-grid__frozen-start]=\"isFrozenStart(column)\"\n                    [class.brios-grid__frozen-end]=\"isFrozenEnd(column)\"\n                    [style.left.px]=\"isFrozenStart(column) ? frozenStartOffset(column) : null\"\n                    [style.right.px]=\"isFrozenEnd(column) ? frozenEndOffset(column) : null\"\n                    [attr.title]=\"cellTooltip(rowOf(item), column)\"\n                    [attr.aria-label]=\"cellAriaLabel(rowOf(item), column)\"\n                    [attr.data-brios-tooltip]=\"cellTooltip(rowOf(item), column)\"\n                    [attr.aria-readonly]=\"column.readonly === true || column.editable !== true\"\n                    (click)=\"activateCell(dataIndexOf(item), globalColumnIndex(column), $event)\"\n                    (dblclick)=\"beginEdit(rowOf(item), dataIndexOf(item), column)\">\n                    <ng-container *ngIf=\"columnIndex === 0\">\n                      <span class=\"brios-grid__tree-indent\" [style.width.px]=\"levelOf(item) * 18\"></span>\n                      <button *ngIf=\"hasChildren(rowOf(item))\" type=\"button\" class=\"brios-grid__tree-toggle\" (click)=\"$event.stopPropagation(); toggleNode(item)\" [attr.aria-label]=\"((isNodeCollapsed(item) ? labels.expand : labels.collapse) + ' ' + displayValue(rowOf(item), column))\">{{ isNodeLoading(item) ? '…' : isNodeCollapsed(item) ? '▸' : '▾' }}</button>\n                      <button *ngIf=\"detailTemplate\" type=\"button\" class=\"brios-grid__tree-toggle\" (click)=\"$event.stopPropagation(); toggleDetail(item)\" [attr.aria-label]=\"labels.detail + ' ' + displayValue(rowOf(item), column)\">{{ isDetailExpanded(item) ? '−' : '+' }}</button>\n                    </ng-container>\n                    <ng-container *ngIf=\"isEditing(rowOf(item), dataIndexOf(item), column); else rowEditCell\">\n                      <ng-container *ngIf=\"editorTemplate(column); else builtinCellEditor\">\n                        <ng-container *ngTemplateOutlet=\"editorTemplate(column); context: editorContext(rowOf(item), dataIndexOf(item), column)\"></ng-container>\n                      </ng-container>\n                      <ng-template #builtinCellEditor><ng-container [ngSwitch]=\"editorType(column)\">\n                        <select *ngSwitchCase=\"'select'\" class=\"brios-grid__editor\" [attr.aria-label]=\"editorAriaLabel(column)\" [attr.aria-invalid]=\"cellValidationError(rowOf(item), dataIndexOf(item), column) ? 'true' : null\" [ngModel]=\"editValue\" (ngModelChange)=\"editValue = $event\" (keydown.enter)=\"commitEdit()\" (keydown.escape)=\"cancelEdit()\" (blur)=\"handleEditBlur()\">\n                          <option *ngFor=\"let option of editorOptions(column); trackBy: editorOptionTrackBy\" [ngValue]=\"option.value\">{{ option.label }}</option>\n                        </select>\n                        <input *ngSwitchCase=\"'boolean'\" class=\"brios-grid__editor brios-grid__editor--checkbox\" type=\"checkbox\" [attr.aria-label]=\"editorAriaLabel(column)\" [attr.aria-invalid]=\"cellValidationError(rowOf(item), dataIndexOf(item), column) ? 'true' : null\" [ngModel]=\"editValue\" (ngModelChange)=\"editValue = $event\" (change)=\"commitEdit()\" />\n                        <textarea *ngSwitchCase=\"'textarea'\" class=\"brios-grid__editor brios-grid__editor--multiline\" [attr.aria-label]=\"editorAriaLabel(column)\" [attr.aria-invalid]=\"cellValidationError(rowOf(item), dataIndexOf(item), column) ? 'true' : null\" [placeholder]=\"column.placeholder || ''\" [ngModel]=\"editValue\" (ngModelChange)=\"editValue = $event\" (keydown.control.enter)=\"commitEdit(); $event.preventDefault()\" (keydown.meta.enter)=\"commitEdit(); $event.preventDefault()\" (keydown.escape)=\"cancelEdit()\" (blur)=\"handleEditBlur()\"></textarea>\n                        <input *ngSwitchDefault class=\"brios-grid__editor\" [attr.aria-label]=\"editorAriaLabel(column)\" [attr.aria-invalid]=\"cellValidationError(rowOf(item), dataIndexOf(item), column) ? 'true' : null\" [type]=\"editorInputType(column)\" [attr.inputmode]=\"editorType(column) === 'currency' ? 'decimal' : null\" [placeholder]=\"column.placeholder || (editorType(column) === 'currency' ? currencyPlaceholder(column) : '')\" [ngModel]=\"editorInputValue(editValue, column)\" (ngModelChange)=\"editValue = coerceEditorValue(column, $event)\" (keydown.enter)=\"commitEdit()\" (keydown.escape)=\"cancelEdit()\" (blur)=\"handleEditBlur()\" />\n                      </ng-container></ng-template>\n                    <span *ngIf=\"validationPending\" class=\"brios-grid__validation-pending\" role=\"status\">{{ labels.validating }}</span>\n                      <span *ngIf=\"!validationPending && validationError && !cellValidationError(rowOf(item), dataIndexOf(item), column)\" class=\"brios-grid__validation-error\" role=\"alert\">{{ validationError }}</span>\n                      <ng-container *ngIf=\"cellValidationError(rowOf(item), dataIndexOf(item), column) as cellError\">\n                        <ng-container *ngIf=\"validationTemplate; else defaultCellValidation\">\n                          <ng-container *ngTemplateOutlet=\"validationTemplate; context: validationContext(rowOf(item), dataIndexOf(item), column, cellError, validationPending)\"></ng-container>\n                        </ng-container>\n                        <ng-template #defaultCellValidation><span class=\"brios-grid__validation-error\" role=\"alert\">{{ cellError }}</span></ng-template>\n                      </ng-container>\n                    </ng-container>\n                    <ng-template #rowEditCell>\n                      <ng-container *ngIf=\"isRowEditing(rowOf(item)) && column.editable && column.readonly !== true; else displayCell\">\n                        <ng-container *ngIf=\"editorTemplate(column); else builtinRowEditor\">\n                          <ng-container *ngTemplateOutlet=\"editorTemplate(column); context: editorContext(rowOf(item), dataIndexOf(item), column)\"></ng-container>\n                        </ng-container>\n                        <ng-template #builtinRowEditor><ng-container [ngSwitch]=\"editorType(column)\">\n                          <select *ngSwitchCase=\"'select'\" class=\"brios-grid__editor\" [attr.aria-label]=\"editorAriaLabel(column)\" [attr.aria-invalid]=\"cellValidationError(rowOf(item), dataIndexOf(item), column) ? 'true' : null\" [ngModel]=\"rowEditValue(rowOf(item), column)\" (ngModelChange)=\"setRowEditValue(rowOf(item), column, $event)\">\n                            <option *ngFor=\"let option of editorOptions(column); trackBy: editorOptionTrackBy\" [ngValue]=\"option.value\">{{ option.label }}</option>\n                          </select>\n                          <input *ngSwitchCase=\"'boolean'\" class=\"brios-grid__editor brios-grid__editor--checkbox\" type=\"checkbox\" [attr.aria-label]=\"editorAriaLabel(column)\" [attr.aria-invalid]=\"cellValidationError(rowOf(item), dataIndexOf(item), column) ? 'true' : null\" [ngModel]=\"rowEditValue(rowOf(item), column)\" (ngModelChange)=\"setRowEditValue(rowOf(item), column, $event)\" />\n                          <textarea *ngSwitchCase=\"'textarea'\" class=\"brios-grid__editor brios-grid__editor--multiline\" [attr.aria-label]=\"editorAriaLabel(column)\" [attr.aria-invalid]=\"cellValidationError(rowOf(item), dataIndexOf(item), column) ? 'true' : null\" [placeholder]=\"column.placeholder || ''\" [ngModel]=\"rowEditValue(rowOf(item), column)\" (ngModelChange)=\"setRowEditValue(rowOf(item), column, $event)\"></textarea>\n                          <input *ngSwitchDefault class=\"brios-grid__editor\" [attr.aria-label]=\"editorAriaLabel(column)\" [attr.aria-invalid]=\"cellValidationError(rowOf(item), dataIndexOf(item), column) ? 'true' : null\" [type]=\"editorInputType(column)\" [attr.inputmode]=\"editorType(column) === 'currency' ? 'decimal' : null\" [placeholder]=\"column.placeholder || (editorType(column) === 'currency' ? currencyPlaceholder(column) : '')\" [ngModel]=\"editorInputValue(rowEditValue(rowOf(item), column), column)\" (ngModelChange)=\"setRowEditValue(rowOf(item), column, coerceEditorValue(column, $event))\" />\n                        </ng-container></ng-template>\n                        <span *ngIf=\"cellValidationError(rowOf(item), dataIndexOf(item), column)\" class=\"brios-grid__validation-error\" role=\"alert\">{{ cellValidationError(rowOf(item), dataIndexOf(item), column) }}</span>\n                      </ng-container>\n                    </ng-template>\n                    <ng-template #displayCell>\n                      <ng-container *ngIf=\"cellTemplate(column); else defaultValue\">\n                        <ng-container *ngTemplateOutlet=\"cellTemplate(column); context: cellContext(rowOf(item), dataIndexOf(item), column)\"></ng-container>\n                      </ng-container>\n                      <ng-template #defaultValue>\n                        <span *ngIf=\"searchText; else plainCellValue\" [innerHTML]=\"highlightedValue(rowOf(item), column)\"></span>\n                        <ng-template #plainCellValue>{{ displayValue(rowOf(item), column) }}</ng-template>\n                        <span *ngIf=\"cellValidationError(rowOf(item), dataIndexOf(item), column)\" class=\"brios-grid__validation-error\" role=\"alert\">{{ cellValidationError(rowOf(item), dataIndexOf(item), column) }}</span>\n                      </ng-template>\n                    </ng-template>\n                  </td>\n                  <td *ngIf=\"allowRowEditing || allowRowRemoving\" role=\"gridcell\" class=\"brios-grid__row-actions\" [attr.aria-colindex]=\"visibleColumns.length + selectionColumnCount + 1\">\n                    <span *ngIf=\"rowEditState(rowOf(item)) === 'pending'\" class=\"brios-grid__row-state brios-grid__row-state--pending\" role=\"status\">{{ labels.pending || 'Guardando…' }}</span>\n                    <span *ngIf=\"rowEditState(rowOf(item)) === 'server-error'\" class=\"brios-grid__row-state brios-grid__row-state--error\" role=\"alert\">{{ labels.serverError || 'Error del servidor' }}</span>\n                    <ng-container *ngIf=\"isRowEditing(rowOf(item)); else rowActions\">\n                      <span *ngIf=\"rowValidationError(rowOf(item), dataIndexOf(item))\" class=\"brios-grid__validation-error brios-grid__validation-error--row\" role=\"alert\">{{ rowValidationError(rowOf(item), dataIndexOf(item)) }}</span>\n                      <button type=\"button\" class=\"brios-grid__icon-button\" [disabled]=\"rowEditState(rowOf(item)) === 'pending'\" (click)=\"$event.stopPropagation(); commitRowEdit()\" [attr.aria-label]=\"labels.saveRow || 'Guardar fila'\">✓</button>\n                      <button type=\"button\" class=\"brios-grid__icon-button\" [disabled]=\"rowEditState(rowOf(item)) === 'pending'\" (click)=\"$event.stopPropagation(); cancelRowEdit()\" [attr.aria-label]=\"labels.cancelRow || 'Cancelar edición'\">×</button>\n                    </ng-container>\n                    <ng-template #rowActions>\n                      <button *ngIf=\"allowRowEditing\" type=\"button\" class=\"brios-grid__icon-button\" (click)=\"$event.stopPropagation(); beginRowEdit(rowOf(item), dataIndexOf(item))\" [attr.aria-label]=\"labels.editRow || 'Editar fila'\">{{ labels.editRow }}</button>\n                      <button *ngIf=\"allowRowRemoving\" type=\"button\" class=\"brios-grid__icon-button brios-grid__icon-button--danger\" (click)=\"$event.stopPropagation(); removeRow(rowOf(item), dataIndexOf(item))\" [attr.aria-label]=\"labels.removeRow || 'Eliminar fila'\">{{ labels.removeRow }}</button>\n                    </ng-template>\n                  </td>\n                  <td *ngIf=\"horizontalVirtualizationEnabled && horizontalRightOffset\" class=\"brios-grid__horizontal-spacer\" [style.width.px]=\"horizontalRightOffset\"></td>\n                </tr>\n                  <tr *ngIf=\"isDetailExpanded(item)\" #detailRow role=\"row\" class=\"brios-grid__detail-row\" [attr.data-detail-key]=\"item.key\" [attr.aria-level]=\"childrenField ? item.level + 2 : null\" [attr.aria-rowindex]=\"detailAriaRowIndex(item)\">\n                  <td role=\"gridcell\" [attr.colspan]=\"renderedColumns.length + selectionColumnCount + rowActionColumnCount + horizontalSpacerColumnCount\" [attr.aria-colspan]=\"renderedColumns.length + selectionColumnCount + rowActionColumnCount + horizontalSpacerColumnCount\">\n                    <ng-container *ngTemplateOutlet=\"detailTemplate; context: detailContext(item)\"></ng-container>\n                  </td>\n                </tr>\n              </ng-template>\n            </ng-container>\n            <tr *ngIf=\"virtualizationEnabled && bottomOffset\" class=\"brios-grid__spacer-row\" aria-hidden=\"true\">\n              <td [attr.colspan]=\"renderedColumns.length + selectionColumnCount + rowActionColumnCount + horizontalSpacerColumnCount\" [style.height.px]=\"bottomOffset\"></td>\n            </tr>\n            <tr *ngIf=\"loading\"><td class=\"brios-grid__message\" [attr.colspan]=\"renderedColumns.length + selectionColumnCount + rowActionColumnCount + horizontalSpacerColumnCount\"><ng-container *ngIf=\"stateTemplate('loading'); else defaultLoading\"><ng-container *ngTemplateOutlet=\"stateTemplate('loading'); context: stateTemplateContext('loading')\"></ng-container></ng-container><ng-template #defaultLoading>{{ labels.loading }}</ng-template></td></tr>\n            <tr *ngIf=\"!loading && remoteError\"><td class=\"brios-grid__message\" [attr.colspan]=\"renderedColumns.length + selectionColumnCount + rowActionColumnCount + horizontalSpacerColumnCount\"><ng-container *ngIf=\"stateTemplate('error'); else defaultError\"><ng-container *ngTemplateOutlet=\"stateTemplate('error'); context: stateTemplateContext('error')\"></ng-container></ng-container><ng-template #defaultError><span>{{ labels.error }}</span> <button type=\"button\" class=\"brios-grid__button\" (click)=\"retry()\">{{ labels.retry }}</button></ng-template></td></tr>\n            <tr *ngIf=\"!loading && !remoteError && !renderedItems.length\"><td class=\"brios-grid__message\" [attr.colspan]=\"renderedColumns.length + selectionColumnCount + rowActionColumnCount + horizontalSpacerColumnCount\"><ng-container *ngIf=\"stateTemplate('empty'); else defaultEmpty\"><ng-container *ngTemplateOutlet=\"stateTemplate('empty'); context: stateTemplateContext('empty')\"></ng-container></ng-container><ng-template #defaultEmpty>{{ emptyText || labels.empty }}</ng-template></td></tr>\n          </tbody>\n        </table>\n      </div>\n\n      <footer *ngIf=\"showPagination && !virtualizationEnabled\" class=\"brios-grid__footer\">\n        <span>{{ totalItems }} {{ totalItems === 1 ? labels.row : labels.rows }}</span>\n        <label>{{ labels.rowsPerPage || 'Filas' }} <select [ngModel]=\"pageSize\" (ngModelChange)=\"setPageSize($event)\"><option [ngValue]=\"10\">10</option><option [ngValue]=\"25\">25</option><option [ngValue]=\"50\">50</option><option [ngValue]=\"100\">100</option></select></label>\n        <div class=\"brios-grid__pager\">\n          <button type=\"button\" class=\"brios-grid__button\" (click)=\"goToPage(page - 1)\" [disabled]=\"page <= 1\">{{ labels.previous }}</button>\n          <span>{{ labels.page }} {{ page }} / {{ pageCount }}</span>\n          <button type=\"button\" class=\"brios-grid__button\" (click)=\"goToPage(page + 1)\" [disabled]=\"page >= pageCount\">{{ labels.next }}</button>\n        </div>\n      </footer>\n      <div *ngIf=\"showFooter\" #footerViewport class=\"brios-grid__summary-footer-viewport\" role=\"region\" [attr.aria-label]=\"labels.summary\" tabindex=\"0\" (scroll)=\"onFooterScroll(footerViewport.scrollLeft)\">\n        <div class=\"brios-grid__summary-footer\" [style.grid-template-columns]=\"summaryFooterColumns()\" [style.width.px]=\"summaryFooterWidth()\">\n          <span *ngFor=\"let column of visibleColumns\" [class.brios-grid__cell--right]=\"column.align === 'right'\">\n            <ng-container *ngIf=\"footerTemplate(column); else defaultFooter\">\n              <ng-container *ngTemplateOutlet=\"footerTemplate(column); context: footerContext(column)\"></ng-container>\n            </ng-container>\n            <ng-template #defaultFooter>{{ footerValue(column) }}</ng-template>\n          </span>\n        </div>\n      </div>\n      <div *ngIf=\"contextMenuState && contextMenuItems.length\" class=\"brios-grid__context-menu\" [style.left.px]=\"contextMenuState.event.clientX\" [style.top.px]=\"contextMenuState.event.clientY\" role=\"menu\" [attr.aria-label]=\"labels.contextMenu\">\n        <button *ngFor=\"let item of contextMenuItems; let index = index\" type=\"button\" role=\"menuitem\" [id]=\"contextMenuItemId(item)\" [attr.tabindex]=\"isFirstContextMenuItem(index) ? 0 : -1\" [disabled]=\"isContextMenuItemDisabled(item)\" (click)=\"runContextMenuItem(item)\" (keydown)=\"onContextMenuKeydown($event, item)\">{{ item.label }}</button>\n      </div>\n    </section>\n  `,\n  styles: [`\n    :host { display: block; font-family: Inter, ui-sans-serif, system-ui, sans-serif; color: var(--brios-grid-text, #172033); }\n    .brios-grid { border: 1px solid var(--brios-grid-border, #dbe1ea); border-radius: 10px; background: var(--brios-grid-background, #fff); overflow: hidden; outline: none; }\n    .brios-grid:focus-visible { box-shadow: 0 0 0 3px var(--brios-grid-focus, #bfdbfe); }\n    .brios-grid__toolbar, .brios-grid__footer { display: flex; justify-content: space-between; gap: 12px; align-items: center; padding: 10px 12px; background: var(--brios-grid-toolbar, #f7f9fc); color: var(--brios-grid-muted, #566176); font-size: 13px; }\n    .brios-grid__toolbar { position: relative; z-index: 40; }\n    .brios-grid__toolbar-group, .brios-grid__pager { display: flex; align-items: center; gap: 8px; }\n    .brios-grid__search-results { color: var(--brios-grid-muted, #566176); font-size: 12px; min-width: 58px; text-align: center; }\n    .brios-grid__remote-conflict { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; padding: 8px 12px; border-bottom: 1px solid var(--brios-grid-conflict-border, #f1b4ad); background: var(--brios-grid-conflict-background, #fff4f2); color: var(--brios-grid-danger, #b42318); font-size: 13px; }\n    .brios-grid__group-dropzone { display: flex; align-items: center; flex-wrap: wrap; gap: 7px; min-height: 38px; padding: 7px 12px; border-bottom: 1px solid var(--brios-grid-border, #dbe1ea); background: var(--brios-grid-toolbar, #f7f9fc); color: var(--brios-grid-muted, #566176); font-size: 12px; }\n    .brios-grid__group-dropzone-label { font-weight: 700; }\n    .brios-grid__group-dropzone-hint { opacity: .8; }\n    .brios-grid__group-dropzone select { border: 1px solid var(--brios-grid-border, #dbe1ea); border-radius: 5px; padding: 4px 6px; background: var(--brios-grid-background, #fff); color: inherit; }\n    .brios-grid__group-chip { border: 1px solid var(--brios-grid-primary, #2563eb); border-radius: 999px; padding: 4px 8px; background: var(--brios-grid-selected, #eef4ff); color: var(--brios-grid-primary, #2563eb); cursor: pointer; font: inherit; }\n    .brios-grid__group-selector { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }\n    .brios-grid__group-selector select { border: 1px solid var(--brios-grid-border, #dbe1ea); border-radius: 6px; background: var(--brios-grid-background, #fff); padding: 7px 9px; color: inherit; }\n    .brios-grid__search input, .brios-grid__footer select { border: 1px solid var(--brios-grid-border, #dbe1ea); border-radius: 6px; background: var(--brios-grid-background, #fff); padding: 7px 9px; color: inherit; }\n    .brios-grid__button { border: 1px solid var(--brios-grid-border, #dbe1ea); border-radius: 6px; background: var(--brios-grid-background, #fff); padding: 7px 10px; color: inherit; cursor: pointer; }\n    .brios-grid__button:hover:not(:disabled) { border-color: var(--brios-grid-primary, #2563eb); color: var(--brios-grid-primary, #2563eb); }\n    .brios-grid__button:disabled { cursor: not-allowed; opacity: .5; }\n    .brios-grid__auto-size-button { display: inline-flex; width: 30px; height: 30px; align-items: center; justify-content: center; padding: 6px; }\n    .brios-grid__export-error { color: var(--brios-grid-danger, #b42318); font-size: 12px; }\n    .brios-grid__viewport { overflow: auto; max-width: 100%; position: relative; }\n    .brios-grid__table { width: 100%; min-width: 620px; border-collapse: collapse; table-layout: fixed; }\n    .brios-grid__table--horizontal { width: max-content; min-width: 100%; }\n    th, td { box-sizing: border-box; padding: 10px 12px; height: var(--brios-grid-row-height, 42px); border-bottom: 1px solid var(--brios-grid-border-light, #edf0f5); text-align: left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n    th { position: sticky; top: 0; z-index: 2; background: var(--brios-grid-header, #f7f9fc); color: var(--brios-grid-muted, #566176); font-size: 12px; font-weight: 700; letter-spacing: .02em; text-transform: uppercase; vertical-align: middle; }\n    th.brios-grid__header-cell--filter-open { z-index: 21; overflow: visible; }\n    td { font-size: 14px; }\n    tbody tr:not(.brios-grid__spacer-row) { cursor: pointer; transition: background-color var(--brios-grid-motion-duration, var(--brios-motion-duration-fast, .12s)) var(--brios-grid-motion-easing, ease); }\n    tbody tr:not(.brios-grid__spacer-row):hover { background: var(--brios-grid-hover, #f8faff); }\n    tbody tr:last-child td { border-bottom: 0; }\n    .brios-grid__row--selected { background: var(--brios-grid-selected, #eef4ff); }\n    .brios-grid__column--selected { background: var(--brios-grid-selected, #eef4ff) !important; }\n    .brios-grid__column--filtered { box-shadow: inset 0 3px 0 var(--brios-grid-primary, #2563eb); }\n    .brios-grid__column--sorted .brios-grid__sort-indicator { font-weight: 800; }\n    .brios-grid__frozen-row { position: sticky; z-index: 3; background: var(--brios-grid-background, #fff); box-shadow: 0 2px 5px -5px rgba(20, 30, 50, .8); }\n    .brios-grid__frozen-row td { position: sticky; top: inherit; z-index: 3; background: var(--brios-grid-background, #fff); }\n    .brios-grid__group-row { background: var(--brios-grid-group, #f0f4fb); color: var(--brios-grid-muted, #566176); cursor: pointer; }\n    .brios-grid__group-summary-row { background: color-mix(in srgb, var(--brios-grid-group, #f0f4fb) 65%, var(--brios-grid-background, #fff)); cursor: default; font-size: 12px; }\n    .brios-grid__group-button { display: flex; align-items: center; gap: 9px; width: 100%; border: 0; padding: 0; background: transparent; color: inherit; text-align: left; font: inherit; cursor: pointer; }\n    .brios-grid__group-button small { margin-left: auto; opacity: .8; }\n    .brios-grid__group-chevron { color: var(--brios-grid-primary, #2563eb); font-size: 16px; }\n    .brios-grid__tree-indent { display: inline-block; vertical-align: middle; }\n    .brios-grid__tree-toggle { width: 20px; border: 0; padding: 0; background: transparent; color: var(--brios-grid-primary, #2563eb); cursor: pointer; }\n    .brios-grid__detail-row td { padding: 0; background: var(--brios-grid-detail, #fafbfe); white-space: normal; }\n    .brios-grid__filter-row { position: relative; z-index: 2; }\n    .brios-grid__filter-row--values-open { z-index: 30; }\n    .brios-grid__filter-row th { position: sticky; top: 40px; z-index: 2; padding: 6px 8px; background: var(--brios-grid-background, #fff); }\n    .brios-grid__column-group-row th { top: 0; background: var(--brios-grid-group, #eef2f8); color: var(--brios-grid-muted, #566176); }\n    .brios-grid__column-filter { box-sizing: border-box; width: 100%; border: 1px solid var(--brios-grid-border, #dbe1ea); border-radius: 4px; padding: 5px 7px; background: var(--brios-grid-background, #fff); color: inherit; font-size: 12px; }\n    .brios-grid__range-filter { display: grid; gap: 3px; }\n    .brios-grid__filter-operator { box-sizing: border-box; width: 100%; margin-bottom: 4px; border: 0; background: transparent; color: var(--brios-grid-muted, #566176); font-size: 10px; }\n    .brios-grid__filter-values { position: relative; margin-top: 4px; font-size: 11px; font-weight: 400; text-transform: none; }\n    .brios-grid__filter-values summary { cursor: pointer; color: var(--brios-grid-primary, #2563eb); }\n    th.brios-grid__filter-value-header--open { z-index: 60; overflow: visible; }\n    .brios-grid__filter-value-options { position: absolute; z-index: 61; top: calc(100% + 4px); left: 0; display: grid; width: min(240px, 28vw); gap: 4px; max-height: 260px; overflow: auto; padding: 7px; border: 1px solid var(--brios-grid-border, #dbe1ea); border-radius: 6px; background: var(--brios-grid-background, #fff); box-shadow: 0 8px 20px rgba(20, 30, 50, .12); }\n    .brios-grid__filter-values-search { width: 100%; box-sizing: border-box; border: 1px solid var(--brios-grid-border, #dbe1ea); border-radius: 4px; background: var(--brios-grid-background, #fff); color: inherit; padding: 6px 7px; }\n    .brios-grid__filter-values-loading { color: var(--brios-grid-muted, #667085); font-size: 11px; }\n    .brios-grid__filter-value-actions { display: flex; justify-content: space-between; gap: 6px; padding: 2px 0 4px; border-bottom: 1px solid var(--brios-grid-border, #dbe1ea); }\n    .brios-grid__filter-value-action { border: 0; padding: 3px 0; color: var(--brios-grid-primary, #2563eb); background: transparent; cursor: pointer; font: inherit; font-size: 11px; }\n    .brios-grid__filter-values label { display: flex; gap: 5px; align-items: center; padding: 3px 0; white-space: normal; }\n    .brios-grid__filter-values label span { overflow: hidden; text-overflow: ellipsis; }\n    .brios-grid__filter-menu-trigger { position: relative; z-index: 10; display: inline-flex; align-items: center; justify-content: center; vertical-align: middle; min-width: 20px; height: 18px; margin-left: 4px; border: 0; padding: 0 4px; border-radius: 4px; background: transparent; color: var(--brios-grid-muted, #566176); cursor: pointer; font: inherit; line-height: 1; }\n    .brios-grid__filter-menu-trigger > svg { display: block; width: 14px; height: 14px; }\n    .brios-grid__filter-menu-trigger:hover, .brios-grid__filter-menu-trigger[aria-expanded=\"true\"] { background: var(--brios-grid-hover, #eef4ff); color: var(--brios-grid-primary, #2563eb); }\n    .brios-grid__filter-menu { position: absolute; z-index: 20; top: calc(100% + 4px); left: 8px; display: grid; gap: 7px; width: min(260px, 34vw); min-width: 210px; overflow: auto; padding: 10px; border: 1px solid var(--brios-grid-border, #dbe1ea); border-radius: 8px; background: var(--brios-grid-background, #fff); box-shadow: 0 12px 28px rgba(20, 30, 50, .2); color: var(--brios-grid-text, inherit); font-size: 12px; font-weight: 400; text-transform: none; }\n    .brios-grid__filter-menu-operator { width: 100%; box-sizing: border-box; border: 1px solid var(--brios-grid-border, #dbe1ea); border-radius: 4px; padding: 5px; background: var(--brios-grid-background, #fff); color: inherit; }\n    .brios-grid__filter-menu-options { display: grid; max-height: 190px; gap: 3px; overflow: auto; padding: 4px 2px; }\n    .brios-grid__filter-menu-options label { display: flex; gap: 5px; align-items: center; min-width: 0; padding: 3px; }\n    .brios-grid__filter-menu-options label span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n    .brios-grid__filter-menu-close { position: sticky; bottom: 0; z-index: 1; justify-self: end; border: 0; border-radius: 4px; padding: 5px 10px; background: var(--brios-grid-primary, #2563eb); color: #fff; cursor: pointer; }\n    .brios-grid__footer, .brios-grid__summary-footer-viewport { position: relative; z-index: 11; }\n    .brios-grid__header-content { display: flex; height: calc(var(--brios-grid-row-height, 42px) - 20px); align-items: center; min-width: 0; }\n    .brios-grid__sort-button { display: inline-flex; height: 18px; gap: 7px; align-items: center; border: 0; padding: 0; color: inherit; background: transparent; font: inherit; line-height: 18px; cursor: pointer; }\n    .brios-grid__sort-indicator { color: var(--brios-grid-primary, #2563eb); font-size: 13px; }\n    mark { border-radius: 2px; padding: 0 1px; background: var(--brios-grid-highlight, #fff1a8); color: inherit; }\n    th { position: relative; }\n    .brios-grid__frozen-start, .brios-grid__frozen-end { position: sticky; z-index: 1; background: var(--brios-grid-background, #fff); }\n    th.brios-grid__frozen-start, th.brios-grid__frozen-end { z-index: 4; background: var(--brios-grid-header, #f7f9fc); }\n    .brios-grid__selection-column.brios-grid__frozen-start { left: 0; }\n    .brios-grid__frozen-start { box-shadow: 4px 0 7px -7px rgba(20, 30, 50, .7); }\n    .brios-grid__frozen-end { box-shadow: -4px 0 7px -7px rgba(20, 30, 50, .7); }\n    .brios-grid__table > thead { position: sticky; top: 0; z-index: 10; }\n    .brios-grid__table > thead th { position: relative; top: auto !important; }\n    .brios-grid__table > thead th.brios-grid__frozen-start, .brios-grid__table > thead th.brios-grid__frozen-end { position: sticky; }\n    .brios-grid__resize-handle { position: absolute; z-index: 1; top: 0; right: 0; bottom: 0; width: 5px; cursor: col-resize; pointer-events: none; }\n    .brios-grid__resize-handle:hover { background: var(--brios-grid-primary, #2563eb); opacity: .35; }\n    .brios-grid__cell--center { text-align: center; }\n    .brios-grid__cell--right { text-align: right; }\n    .brios-grid__cell--wrap { white-space: normal; overflow-wrap: anywhere; }\n    .brios-grid__cell--editable { cursor: text; }\n    .brios-grid__cell--active { box-shadow: inset 0 0 0 2px var(--brios-grid-primary, #2563eb); }\n    td[data-brios-tooltip] { position: relative; }\n    td[data-brios-tooltip]::after { content: attr(data-brios-tooltip); position: absolute; z-index: 30; left: 8px; top: calc(100% + 5px); display: none; max-width: min(360px, 45vw); padding: 7px 9px; border: 1px solid var(--brios-grid-border, #dbe1ea); border-radius: 6px; background: var(--brios-grid-tooltip, #172033); color: var(--brios-grid-tooltip-text, #fff); box-shadow: 0 8px 18px rgba(20, 30, 50, .2); white-space: normal; overflow-wrap: anywhere; font-size: 12px; font-weight: 400; line-height: 1.35; pointer-events: none; }\n    td[data-brios-tooltip]:hover::after, td[data-brios-tooltip].brios-grid__cell--active::after { display: block; }\n    .brios-grid__selection-column { width: 42px; min-width: 42px; text-align: center; }\n    .brios-grid__editor { box-sizing: border-box; width: 100%; min-width: 80px; border: 1px solid var(--brios-grid-primary, #2563eb); border-radius: 4px; outline: 2px solid var(--brios-grid-focus, #bfdbfe); padding: 5px 7px; font: inherit; }\n    .brios-grid__editor--multiline { min-height: 76px; resize: vertical; white-space: pre-wrap; }\n    .brios-grid__editor--checkbox { width: auto; min-width: auto; }\n    .brios-grid__validation-error { display: block; color: #b42318; font-size: 11px; white-space: normal; }\n    .brios-grid__validation-error--row { margin-bottom: 4px; text-align: left; }\n    .brios-grid__validation-pending { display: block; color: var(--brios-grid-primary, #2563eb); font-size: 11px; white-space: normal; }\n    .brios-grid__row--pending { opacity: .78; }\n    .brios-grid__row--server-error { box-shadow: inset 3px 0 var(--brios-grid-danger, #b42318); }\n    .brios-grid__row-state { display: block; margin-bottom: 4px; font-size: 11px; white-space: nowrap; }\n    .brios-grid__row-state--pending { color: var(--brios-grid-primary, #2563eb); }\n    .brios-grid__row-state--error { color: var(--brios-grid-danger, #b42318); }\n    .brios-grid__message { padding: 28px; color: var(--brios-grid-muted, #7b8495); text-align: center; cursor: default; }\n    .brios-grid__spacer-row td, .brios-grid__horizontal-spacer { padding: 0; border: 0; pointer-events: none; }\n    .brios-grid__selection-count { color: var(--brios-grid-primary, #2563eb); font-weight: 600; }\n    .brios-grid__column-chooser { position: relative; z-index: 41; white-space: nowrap; }\n    .brios-grid__column-chooser-trigger { display: inline-flex; width: 28px; height: 28px; align-items: center; justify-content: center; border: 1px solid var(--brios-grid-border, #dbe1ea); border-radius: 5px; padding: 0; background: var(--brios-grid-background, #fff); color: inherit; cursor: pointer; font: inherit; font-size: 16px; line-height: 1; }\n    .brios-grid__column-chooser-trigger:hover { background: var(--brios-grid-hover, #f8faff); }\n    .brios-grid__column-chooser-icon { display: block; }\n    .brios-grid__column-chooser-panel { position: absolute; z-index: 42; top: calc(100% + 4px); left: 0; display: grid; gap: 7px; min-width: 180px; padding: 10px; border: 1px solid var(--brios-grid-border, #dbe1ea); border-radius: 7px; background: var(--brios-grid-background, #fff); box-shadow: 0 10px 24px rgba(20, 30, 50, .14); }\n    .brios-grid__row-actions { width: 150px; min-width: 150px; text-align: center; }\n    .brios-grid__icon-button { margin: 0 2px; border: 1px solid var(--brios-grid-border, #dbe1ea); border-radius: 5px; padding: 4px 6px; background: var(--brios-grid-background, #fff); color: inherit; cursor: pointer; font-size: 11px; }\n    .brios-grid__icon-button--danger { color: #b42318; }\n    .brios-grid__summary-footer-viewport { overflow-x: auto; border-top: 1px solid var(--brios-grid-border, #dbe1ea); background: var(--brios-grid-toolbar, #f7f9fc); }\n    .brios-grid__summary-footer { display: grid; min-width: 100%; gap: 0; color: var(--brios-grid-muted, #566176); font-size: 12px; font-weight: 650; }\n    .brios-grid__summary-footer span { padding: 9px 12px; }\n    .brios-grid__context-menu { position: fixed; z-index: 50; display: grid; min-width: 160px; padding: 5px; border: 1px solid var(--brios-grid-border, #dbe1ea); border-radius: 7px; background: var(--brios-grid-background, #fff); box-shadow: 0 10px 24px rgba(20, 30, 50, .18); }\n    .brios-grid__context-menu button { border: 0; padding: 8px 10px; background: transparent; color: inherit; text-align: left; cursor: pointer; }\n    .brios-grid__context-menu button:hover:not(:disabled) { background: var(--brios-grid-hover, #f8faff); }\n    .brios-grid__context-menu button:disabled { opacity: .5; cursor: not-allowed; }\n    .brios-grid__sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }\n    @media (max-width: 700px) { .brios-grid__toolbar, .brios-grid__footer { align-items: stretch; flex-direction: column; } .brios-grid__toolbar-group { justify-content: space-between; } }\n  `]\n})\nexport class BriosGridComponent<T extends object = Record<string, unknown>, D = unknown> implements AfterContentInit, AfterViewChecked, AfterViewInit, OnDestroy, ControlValueAccessor {\n  readonly slidersHorizontalIconNodes = SlidersHorizontal as Array<[string, Record<string, string>]>;\n  readonly funnelPlusIconNodes = FunnelPlus as Array<[string, Record<string, string>]>;\n  readonly proportionsIconNodes = Proportions as Array<[string, Record<string, string>]>;\n\n  private readonly controller = new GridController<T>();\n  private readonly layout = new GridLayoutEngine();\n  private _items: readonly T[] = [];\n  private _columns: readonly GridColumn<T>[] = [];\n  protected columnChooserOpen = false;\n  private _dataSource?: GridDataSource<T>;\n  private activeEdit: ActiveEdit<T> | null = null;\n  private requestId = 0;\n  private renderedStart = 0;\n  private renderedDisplayIndices: readonly number[] = [];\n  private frozenRenderedCount = 0;\n  private renderedColumnStart = 0;\n  private verticalScrollTop = 0;\n  private horizontalScrollLeft = 0;\n  private scrollViewportWidth = 0;\n  private scrollFrame: number | null = null;\n  private scrollFrameUsesTimeout = false;\n  private pointerFocusTimer?: ReturnType<typeof setTimeout>;\n  private _pageSize = 25;\n  private templateMap = new Map<string, TemplateRef<BriosGridCellTemplateContext<T>>>();\n  private editorTemplateMap = new Map<string, TemplateRef<BriosGridEditorTemplateContext<T>>>();\n  private headerTemplateMap = new Map<string, TemplateRef<BriosGridHeaderTemplateContext<T>>>();\n  private footerTemplateMap = new Map<string, TemplateRef<BriosGridFooterTemplateContext<T>>>();\n  private stateTemplateMap = new Map<BriosGridState, TemplateRef<BriosGridStateTemplateContext>>();\n  groupTemplate: TemplateRef<BriosGridGroupTemplateContext<T>> | null = null;\n  validationTemplate: TemplateRef<BriosGridValidationTemplateContext<T>> | null = null;\n  private expandedDetailKeys = new Set<GridKey>();\n  private detailLoadControllers = new Map<GridKey, AbortController>();\n  private detailExportPromises = new Map<GridKey, Promise<readonly D[]>>();\n  private readonly detailCache = new BriosDetailCache<readonly D[]>();\n  private measuredDetailHeights = new Map<string, { index: number; height: number }>();\n  private detailErrors = new Map<GridKey, unknown>();\n  private detailLoadingKeys = new Set<GridKey>();\n  private remoteReloadTimer?: ReturnType<typeof setTimeout>;\n  private activeRowEdit: ActiveRowEdit<T> | null = null;\n  private rowEditValues = new Map<GridKey, Partial<T>>();\n  private _itemsSource?: BriosItemsSource<T>;\n  private _realtimeSource?: GridRealtimeSource<T>;\n  private itemsSourceSubscription?: Subscription;\n  private itemsSourceEffect?: EffectRef;\n  private itemsSourceAbort?: AbortController;\n  private childLoadControllers = new Map<GridKey, AbortController>();\n  private childLoadingKeys = new Set<GridKey>();\n  private exportAbort?: AbortController;\n  contextMenuState: { event: MouseEvent; row: T; rowIndex: number } | null = null;\n  private contextMenuFocusOrigin: HTMLElement | null = null;\n  detailTemplate: TemplateRef<BriosGridDetailTemplateContext<T, D>> | null = null;\n  @ViewChild('viewport') viewport?: ElementRef<HTMLElement>;\n  @ViewChild('footerViewport') footerViewport?: ElementRef<HTMLElement>;\n  @ViewChild('columnChooser') columnChooser?: ElementRef<HTMLElement>;\n  @ViewChildren('detailRow', { read: ElementRef }) detailRowViews!: QueryList<ElementRef<HTMLTableRowElement>>;\n\n  visibleItems: readonly T[] = [];\n  displayItems: readonly GridDisplayRow<T>[] = [];\n  renderedItems: readonly GridDisplayRow<T>[] = [];\n  searchText = '';\n  private searchMatchCursor = -1;\n  private columnFilterValues = new Map<string, string>();\n  private columnFilterOperators = new Map<string, GridOperator>();\n  private uniqueFilterValues = new Map<string, Set<string>>();\n  private filterValueOptionsCache = new Map<string, { rows: readonly T[]; limit: number; options: readonly { value: string; label: string }[] }>();\n  private filterValueBuilds = new Map<string, { rows: readonly T[]; limit: number; token: symbol }>();\n  private filterValueLoadingKeys = new Set<string>();\n  private filteredFilterValueOptionsCache = new Map<string, { source: readonly { value: string; label: string }[]; query: string; options: readonly { value: string; label: string }[] }>();\n  private numberFormatterCache = new Map<string, Intl.NumberFormat>();\n  private dateFormatterCache = new Map<string, Intl.DateTimeFormat>();\n  private filterValueSearches = new Map<string, string>();\n  private openFilterValueKey: string | null = null;\n  private openFilterMenuKey: string | null = null;\n  private filterMenuFocusOrigin: HTMLElement | null = null;\n  private filterValuesFocusOrigin: HTMLElement | null = null;\n  private filterMenuFocusKey: string | null = null;\n  private filterValuesFocusKey: string | null = null;\n  private readonly defaultFilterOperatorOptions: readonly { value: GridOperator; label: string }[] = [\n    { value: 'contains', label: 'contiene' },\n    { value: 'equals', label: '=' },\n    { value: 'notEquals', label: '≠' },\n    { value: 'startsWith', label: 'empieza' },\n    { value: 'endsWith', label: 'termina' },\n    { value: 'greaterThan', label: '>' },\n    { value: 'greaterThanOrEqual', label: '≥' },\n    { value: 'lessThan', label: '<' },\n    { value: 'lessThanOrEqual', label: '≤' },\n    { value: 'between', label: 'entre' },\n    { value: 'in', label: 'lista' },\n    { value: 'isEmpty', label: 'vacío' },\n    { value: 'isNotEmpty', label: 'no vacío' }\n  ];\n  get filterOperatorOptions(): readonly { value: GridOperator; label: string }[] {\n    return this.defaultFilterOperatorOptions.map((option) => ({ value: option.value, label: this.labels.operatorLabels?.[option.value] ?? option.label }));\n  }\n  editValue: unknown = '';\n  validationError = '';\n  validationPending = false;\n  private readonly validationMessages = new Map<string, string>();\n  topOffset = 0;\n  bottomOffset = 0;\n  loading = false;\n  exporting = false;\n  exportProgress: ExportProgress = { processed: 0, total: 0, ratio: 0 };\n  exportError: unknown | null = null;\n  itemsSourceError: unknown | null = null;\n  remoteConflictState: BriosGridRemoteConflict<T> | null = null;\n  remoteConflictBulkState: BriosGridBulkRemoteConflict<T> | null = null;\n  private readonly remoteEditPendingKeys = new Set<GridKey>();\n  private readonly remoteEditErrors = new Map<GridKey, unknown>();\n  totalItems = 0;\n  @Input() disabled = false;\n  private valueChange: (value: readonly T[]) => void = () => undefined;\n  private touched: () => void = () => undefined;\n\n  /** Optional override for the localized empty-state message. */\n  @Input() emptyText = '';\n  @Input() ariaLabel = 'Brios Grid';\n  private _locale = '';\n  private _labels: BriosGridLabels = { ...GRID_LABELS_ES };\n  private labelOverrides: Partial<BriosGridLabels> = {};\n  @Input()\n  set locale(value: string) {\n    this._locale = value?.trim() || '';\n    this._labels = this.composeLabels();\n  }\n  get locale(): string { return this._locale || this.localeService.locale; }\n  @Input()\n  set labels(value: Partial<BriosGridLabels> | undefined) {\n    this.labelOverrides = value ?? {};\n    this._labels = this.composeLabels();\n  }\n  get labels(): BriosGridLabels { return this.composeLabels(); }\n  private localizedLabels(): BriosGridLabels {\n    const text = (key: string, fallback: string): string => this.localeService.gridText(key, fallback, this.locale);\n    const operators: readonly GridOperator[] = ['contains', 'equals', 'notEquals', 'startsWith', 'endsWith', 'greaterThan', 'greaterThanOrEqual', 'lessThan', 'lessThanOrEqual', 'between', 'in', 'isEmpty', 'isNotEmpty'];\n    return {\n      search: text('search', 'Buscar'), searchAria: text('searchAria', 'Buscar en la grilla'), group: text('group', 'Agrupar'), noGroup: text('noGroup', 'Sin grupo'), columns: text('columns', 'Columnas'), columnChooser: text('columnChooser', 'Mostrar/Ocultar Columnas'), newRow: text('newRow', 'Nueva fila'),\n      clearFilters: text('clearFilters', 'Limpiar filtros'), copy: text('copy', 'Copiar'), excel: text('excel', 'Excel'), print: text('print', 'PDF / imprimir'), autoSize: text('autoSize', 'Auto-size'), autoSizeTooltip: text('autoSizeTooltip', 'Redimensionar columnas'),\n      selectAll: text('selectAll', 'Seleccionar todo'), actions: text('actions', 'Acciones'), loading: text('loading', 'Cargando…'), validating: text('validating', 'Validando…'), empty: text('empty', 'Sin registros'), invalid: text('invalid', 'Valor inválido'), previous: text('previous', 'Anterior'), next: text('next', 'Siguiente'),\n      row: text('row', 'registro'), rows: text('rows', 'registros'), page: text('page', 'Página'), error: text('error', 'No se pudieron cargar los datos'), retry: text('retry', 'Reintentar'), filterValues: text('filterValues', 'Valores'),\n      filterValuesSearch: text('filterValuesSearch', 'Buscar valores'), selectFilterValues: text('selectFilterValues', 'Seleccionar todo'), clearFilterValues: text('clearFilterValues', 'Limpiar filtros'), filterMenu: text('filterMenu', 'Filtro'), openFilter: text('openFilter', 'Abrir filtro'),\n      exporting: text('exporting', 'Exportando'), cancelExport: text('cancelExport', 'Cancelar'), exportError: text('exportError', 'No se pudo exportar'), filter: text('filter', 'Filtrar'), operator: text('operator', 'Operador'),\n      filterFrom: text('filterFrom', 'Desde'), filterTo: text('filterTo', 'Hasta'), apply: text('apply', 'Aplicar'), rowsPerPage: text('rowsPerPage', 'Filas'), groupBy: text('groupBy', 'Agrupar por'), subtotal: text('subtotal', 'Subtotal'), summary: text('summary', 'Resumen de la grilla'), contextMenu: text('contextMenu', 'Menú contextual'), treeTotal: text('treeTotal', 'Total general del árbol'),\n      addGroup: text('addGroup', 'Agregar columna'), removeGroup: text('removeGroup', 'Quitar agrupación'), dropToGroup: text('dropToGroup', 'Arrastra una columna aquí'), expand: text('expand', 'Expandir'),\n      collapse: text('collapse', 'Colapsar'), detail: text('detail', 'Mostrar detalle'), detailRow: text('detailRow', 'Detalle'), selectRow: text('selectRow', 'Seleccionar fila'), selected: text('selected', 'seleccionada'), selectedMany: text('selectedMany', 'seleccionadas'), editRow: text('editRow', 'Editar fila'), removeRow: text('removeRow', 'Eliminar fila'),\n      saveRow: text('saveRow', 'Guardar fila'), cancelRow: text('cancelRow', 'Cancelar edición'), conflict: text('conflict', 'El servidor rechazó este cambio'), conflictBulk: text('conflictBulk', 'El servidor rechazó estos cambios ({count} registros)'), retryConflict: text('retryConflict', 'Reintentar edición'),\n      dismissConflict: text('dismissConflict', 'Descartar'), previousMatch: text('previousMatch', 'Coincidencia anterior'), nextMatch: text('nextMatch', 'Coincidencia siguiente'), searchResult: text('searchResult', 'Resultado de búsqueda'),\n      pending: text('pending', 'Guardando…'), serverError: text('serverError', 'Error del servidor'),\n      operatorLabels: operators.reduce((labels, operator) => {\n        labels[operator] = this.localeService.gridOperator(operator, operator, this.locale);\n        return labels;\n      }, {} as Partial<Record<GridOperator, string>>)\n    };\n  }\n  private composeLabels(): BriosGridLabels {\n    const base = this.localizedLabels();\n    return {\n      ...base,\n      ...this.labelOverrides,\n      operatorLabels: { ...base.operatorLabels, ...(this.labelOverrides.operatorLabels ?? {}) }\n    };\n  }\n  @Input() height = 480;\n  @Input() maxFilterValues = 100;\n  @Input() showFilterMenu = true;\n  @Input() rowHeight = 42;\n  @Input() rowHeightFor?: (item: GridDisplayRow<T>, index: number) => number;\n  @Input() showTruncatedCellTooltip = true;\n  @Input() truncatedTooltipMinLength = 24;\n  @Input() frozenRows = 0;\n  @Input() overscan = 8;\n  @Input() horizontalOverscan = 2;\n  @Input() horizontalWindowSize = 12;\n  @Input() virtualization: boolean | 'auto' = 'auto';\n  @Input() horizontalVirtualization: boolean | 'auto' = 'auto';\n  @Input() showToolbar = true;\n  @Input() searchable = true;\n  @Input() searchCaseSensitive = false;\n  @Input() normalizeSearchAccents = true;\n  @Input() filterable = true;\n  @Input() groupable = true;\n  @Input() showGroupDropZone = false;\n  @Input()\n  set showGroupSummaries(value: boolean) {\n    this._showGroupSummaries = Boolean(value);\n    this.controller.setGroupSummaries(this._showGroupSummaries);\n    this.refreshRows();\n  }\n  get showGroupSummaries(): boolean { return this._showGroupSummaries; }\n  @Input() showFooter = false;\n  @Input() showColumnChooser = false;\n  @Input() allowRowEditing = false;\n  @Input() allowRowAdding = false;\n  @Input() allowRowRemoving = false;\n  @Input() editCommitMode: 'auto' | 'explicit' = 'auto';\n  @Input() confirmRemove?: (row: T) => boolean | Promise<boolean>;\n  @Input() loadChildren?: (row: T, signal: AbortSignal) => Promise<readonly T[]>;\n  @Input() loadDetail?: BriosGridDetailLoader<T, D>;\n  @Input() detailCacheSize = 50;\n  /** Persists cached detail rows together with expanded keys when stateStorage is configured. */\n  @Input() persistDetailCache = false;\n  @Input() copyHeaders = true;\n  @Input() keyboardShortcuts: BriosGridKeyboardShortcuts = {};\n  @Input() pasteAtomic = true;\n  /** Maps pasted cells to visible columns by default; use `all` to include hidden columns. */\n  @Input() pasteColumnScope: 'visible' | 'all' = 'visible';\n  @Input() confirmPaste?: (changes: readonly GridPasteChange<T>[]) => boolean | Promise<boolean>;\n  @Input() exportSelectionOnly = false;\n  @Input() exportGroups = false;\n  @Input() exportGroupSummaries = false;\n  /** Includes one total row for all loaded TreeGrid nodes in structured exports. */\n  @Input() exportTreeSummary = false;\n  @Input() exportDetails = false;\n  @Input() exportChunkSize = 500;\n  @Input() optimisticMutations = true;\n  @Input() contextMenuItems: readonly GridContextMenuItem<T>[] = [];\n  @Input() allowResizing = true;\n  @Input() allowDragging = true;\n  @Input() persistKey = '';\n  @Input() persistVersion = 1;\n  @Input() persistMigrate?: BriosGridStateMigration<T>;\n  @Input() stateStorage?: GridStateStorage;\n  @Input() showPagination = true;\n  @Input() remoteDebounceMs = 180;\n  @Input() remoteRetries = 0;\n  @Input() remoteRetryDelayMs = 250;\n  @Input() remoteRetryBackoff = 2;\n  @Input() remoteShouldRetry?: GridRetryOptions['shouldRetry'];\n  @Input()\n  set realtimeSource(value: GridRealtimeSource<T> | undefined) {\n    this._realtimeSource = value;\n    this.controller.setRealtimeSource(value);\n    this.refreshRows();\n  }\n  get realtimeSource(): GridRealtimeSource<T> | undefined { return this._realtimeSource; }\n  @Input() selectable: GridSelectionMode = 'row';\n  @Input() selectionMode?: GridSelectionMode;\n  private _groupBy?: Extract<keyof T, string>;\n  groupDropSelection = '';\n  private _showGroupSummaries = false;\n  private _childrenField?: Extract<keyof T, string>;\n\n  @Input()\n  set groupBy(value: Extract<keyof T, string> | undefined) {\n    this._groupBy = value;\n    this.controller.setGroupBy(value ?? null);\n    this.refreshRows();\n  }\n  get groupBy(): Extract<keyof T, string> | undefined { return this._groupBy; }\n\n  @Input()\n  set groups(value: readonly GridGroup<T>[]) {\n    this.controller.setGroups(value ?? []);\n    this._groupBy = value?.[0]?.key;\n    this.refreshRows();\n  }\n  get groups(): readonly GridGroup<T>[] { return this.controller.groups; }\n\n  groupColumnHeader(key: Extract<keyof T, string>): string {\n    return this.columns.find((column) => column.key === key)?.header ?? String(key);\n  }\n\n  isGrouped(key: Extract<keyof T, string>): boolean {\n    return this.groups.some((group) => group.key === key);\n  }\n\n  addGroupFromSelector(key: string): void {\n    if (!key) return;\n    this.addGroupKey(key as Extract<keyof T, string>);\n    this.groupDropSelection = '';\n  }\n\n  dropColumnToGroup(event: DragEvent): void {\n    event.preventDefault();\n    if (!this.draggedColumnKey) return;\n    const column = this.columns.find((item) => String(item.key) === this.draggedColumnKey);\n    if (column) this.addGroupKey(column.key);\n    this.draggedColumnKey = null;\n  }\n\n  addGroupKey(key: Extract<keyof T, string>): void {\n    if (this.isGrouped(key)) return;\n    const groups = [...this.groups, { key } satisfies GridGroup<T>];\n    this.controller.setGroups(groups);\n    this._groupBy = groups[0]?.key;\n    this.persistLayout();\n    this.refreshRows();\n  }\n\n  removeGroup(key: Extract<keyof T, string>): void {\n    const groups = this.groups.filter((group) => group.key !== key);\n    this.controller.setGroups(groups);\n    this._groupBy = groups[0]?.key;\n    this.persistLayout();\n    this.refreshRows();\n  }\n\n  @Input()\n  set childrenField(value: Extract<keyof T, string> | undefined) {\n    this.cancelHierarchyLoads();\n    this._childrenField = value;\n    this.controller.setChildrenField(value ?? null);\n    this.refreshRows();\n  }\n  get childrenField(): Extract<keyof T, string> | undefined { return this._childrenField; }\n  @Input() treeSelectionPropagation: 'none' | 'descendants' | 'ancestors' | 'both' = 'none';\n\n  @Input()\n  set items(value: readonly T[]) {\n    const next = value ?? [];\n    if (this.dataIdentityChanged(next)) this.cancelHierarchyLoads();\n    this._items = next;\n    this.controller.setData(this._items);\n    this.refreshRows();\n  }\n  get items(): readonly T[] { return this._items; }\n\n  @Input()\n  set itemsSource(value: BriosItemsSource<T> | undefined) {\n    this._itemsSource = value;\n    this.itemsSourceSubscription?.unsubscribe();\n    this.itemsSourceEffect?.destroy();\n    this.itemsSourceAbort?.abort();\n    this.exportAbort?.abort();\n    this.itemsSourceSubscription = undefined;\n    this.itemsSourceEffect = undefined;\n    this.itemsSourceAbort = undefined;\n    this.itemsSourceError = null;\n    if (!value) return;\n    if (typeof (value as Observable<readonly T[]>).subscribe === 'function') {\n      this.itemsSourceSubscription = (value as Observable<readonly T[]>).subscribe({\n        next: (items) => this.applyItemsSource(items),\n        error: (error) => this.handleItemsSourceError(error)\n      });\n      return;\n    }\n    if (typeof value === 'function') {\n      const signal = value as Signal<readonly T[]>;\n      this.itemsSourceEffect = effect(() => this.applyItemsSource(signal()), { injector: this.injector });\n      return;\n    }\n    void this.consumeAsyncItems(value as AsyncIterable<T | readonly T[]>);\n  }\n  get itemsSource(): BriosItemsSource<T> | undefined { return this._itemsSource; }\n\n  @Input()\n  set columns(value: readonly GridColumn<T>[]) {\n    this._columns = value ?? [];\n    this.controller.setColumns(this._columns);\n    this.refreshRows();\n  }\n  get columns(): readonly GridColumn<T>[] { return this._columns; }\n\n  @Input()\n  set dataSource(value: GridDataSource<T> | undefined) {\n    this.cancelHierarchyLoads();\n    this._dataSource = value;\n    this.controller.setDataSource(value);\n    if (value) void this.reload();\n  }\n  get dataSource(): GridDataSource<T> | undefined { return this._dataSource; }\n\n  @Input()\n  set pageSize(value: number) {\n    this._pageSize = Number(value) || 25;\n    this.controller.setPageSize(this._pageSize);\n    this.refreshRows();\n  }\n  get pageSize(): number { return this._pageSize; }\n\n  @Input()\n  set trackBy(value: ((row: T, index: number) => GridKey) | undefined) {\n    if (value) this.controller.setTrackBy(value);\n  }\n\n  @Output() readonly rowClick = new EventEmitter<{ row: T; rowIndex: number }>();\n  @Output() readonly selectionChange = new EventEmitter<GridSelectionSnapshot<T>>();\n  @Output() readonly cellEditCommit = new EventEmitter<GridCellChange<T>>();\n  @Output() readonly validation = new EventEmitter<GridValidationResult>();\n  @Output() readonly error = new EventEmitter<unknown>();\n  @Output() readonly remoteConflict = new EventEmitter<BriosGridRemoteConflict<T>>();\n  @Output() readonly remoteConflictBulk = new EventEmitter<BriosGridBulkRemoteConflict<T>>();\n  @Output() readonly columnLayoutChange = new EventEmitter<readonly GridColumn<T>[]>();\n  @Output() readonly columnResize = new EventEmitter<BriosGridColumnResizeEvent<T>>();\n  @Output() readonly contextMenu = new EventEmitter<{ event: MouseEvent; row: T; rowIndex: number }>();\n  @Output() readonly beforeEdit = new EventEmitter<GridBeforeEditEvent<T>>();\n  @Output() readonly beforeCommit = new EventEmitter<GridBeforeCommitEvent<T>>();\n  @Output() readonly commit = new EventEmitter<GridRowChange<T>>();\n  @Output() readonly cancel = new EventEmitter<GridRowEvent<T>>();\n  @Output() readonly rowAdd = new EventEmitter<GridRowChange<T>>();\n  @Output() readonly rowRemove = new EventEmitter<GridRowEvent<T>>();\n  @Output() readonly bulkCommit = new EventEmitter<readonly GridRowChange<T>[]>();\n  @Output() readonly pasteComplete = new EventEmitter<GridPasteResult<T>>();\n  @Output() readonly exportStateChange = new EventEmitter<BriosGridExportState>();\n\n  private columnWidths = new Map<string, number>();\n  private draggedColumnKey: string | null = null;\n  private resizing: { key: string; startX: number; startWidth: number; previousWidth: number } | null = null;\n\n  @ContentChildren(BriosGridCellTemplateDirective)\n  cellTemplates!: QueryList<BriosGridCellTemplateDirective<T>>;\n\n  @ContentChildren(BriosGridEditorTemplateDirective)\n  editorTemplates!: QueryList<BriosGridEditorTemplateDirective<T>>;\n\n  @ContentChildren(BriosGridDetailTemplateDirective)\n  detailTemplates!: QueryList<BriosGridDetailTemplateDirective<T, D>>;\n\n  @ContentChildren(BriosGridHeaderTemplateDirective)\n  headerTemplates!: QueryList<BriosGridHeaderTemplateDirective<T>>;\n\n  @ContentChildren(BriosGridFooterTemplateDirective)\n  footerTemplates!: QueryList<BriosGridFooterTemplateDirective<T>>;\n\n  @ContentChildren(BriosGridStateTemplateDirective)\n  stateTemplates!: QueryList<BriosGridStateTemplateDirective>;\n\n  @ContentChild(BriosGridGroupTemplateDirective)\n  groupTemplateDirective?: BriosGridGroupTemplateDirective<T>;\n\n  @ContentChild(BriosGridValidationTemplateDirective)\n  validationTemplateDirective?: BriosGridValidationTemplateDirective<T>;\n\n  constructor(private readonly changeDetector: ChangeDetectorRef, private readonly injector: Injector, readonly localeService: BriosLocaleService = new BriosLocaleService()) {\n    this._labels = this.composeLabels();\n  }\n\n  ngOnDestroy(): void {\n    if (this.pointerFocusTimer) clearTimeout(this.pointerFocusTimer);\n    if (this.scrollFrame !== null) {\n      if (this.scrollFrameUsesTimeout) clearTimeout(this.scrollFrame);\n      else if (typeof cancelAnimationFrame === 'function') cancelAnimationFrame(this.scrollFrame);\n      this.scrollFrame = null;\n    }\n    if (this.remoteReloadTimer) clearTimeout(this.remoteReloadTimer);\n    this.itemsSourceSubscription?.unsubscribe();\n    this.itemsSourceEffect?.destroy();\n    this.itemsSourceAbort?.abort();\n    this.cancelHierarchyLoads();\n    this.detailCache.clear();\n    this.controller.dispose();\n  }\n\n  ngAfterContentInit(): void {\n    this.templateMap = new Map(this.cellTemplates.map((item) => [item.columnKey, item.template]));\n    this.editorTemplateMap = new Map(this.editorTemplates.map((item) => [item.columnKey, item.template]));\n    this.headerTemplateMap = new Map(this.headerTemplates.map((item) => [item.columnKey, item.template]));\n    this.footerTemplateMap = new Map(this.footerTemplates.map((item) => [item.columnKey, item.template]));\n    this.stateTemplateMap = new Map(this.stateTemplates.map((item) => [item.state, item.template]));\n    this.detailTemplate = this.detailTemplates.first?.template ?? null;\n    this.groupTemplate = this.groupTemplateDirective?.template ?? null;\n    this.validationTemplate = this.validationTemplateDirective?.template ?? null;\n    this.restoreLayout();\n  }\n\n  ngAfterViewInit(): void {\n    if (this.viewport) this.onScroll(this.viewport.nativeElement.scrollTop, this.viewport.nativeElement.scrollLeft, this.viewport.nativeElement.clientWidth);\n  }\n\n  ngAfterViewChecked(): void {\n    this.syncDetailRowHeights();\n  }\n\n  get visibleColumns(): readonly GridColumn<T>[] { return this.controller.columnsList; }\n  get columnGroupHeaders(): readonly { header: string; span: number }[] {\n    const groups: { header: string; span: number }[] = [];\n    for (const column of this.visibleColumns) {\n      const header = column.group ?? '';\n      const previous = groups[groups.length - 1];\n      if (previous && previous.header === header) previous.span += 1;\n      else groups.push({ header, span: 1 });\n    }\n    return groups;\n  }\n  get hasColumnGroups(): boolean { return !this.horizontalVirtualizationEnabled && this.columnGroupHeaders.some((group) => Boolean(group.header)); }\n  get activeFilters(): readonly GridFilter<T>[] { return this.controller.filters; }\n  get selectedCount(): number { return this.controller.selectedRows.length; }\n  bulkConflictMessage(count: number): string {\n    return (this.labels.conflictBulk || 'El servidor rechazó estos cambios ({count} registros)').replace(/\\{count\\}/g, String(count));\n  }\n  get headerRowCount(): number { return (this.hasColumnGroups ? 1 : 0) + 1 + (this.filterable ? 1 : 0); }\n  get totalAriaRowCount(): number { return this.headerRowCount + Math.max(this.totalItems, this.displayItems.length) + this.expandedDetailKeys.size; }\n  get rowActionColumnCount(): number { return this.allowRowEditing || this.allowRowRemoving ? 1 : 0; }\n  get selectionColumnCount(): number { return this.currentSelectionMode !== 'none' ? 1 : 0; }\n  get page(): number { return this.controller.page; }\n  get pageCount(): number { return this.controller.pageCount; }\n  get allVisibleSelected(): boolean {\n    const rows = this.renderedItems.filter((item): item is GridDataDisplayRow<T> => item.kind === 'data');\n    return rows.length > 0 && rows.every((item) => this.isSelected(item.row, item.dataIndex));\n  }\n\n  detailAriaRowIndex(item: GridDisplayRow<T>): number {\n    const displayIndex = this.displayItems.indexOf(item);\n    return this.headerRowCount + Math.max(0, displayIndex) + 2;\n  }\n  get virtualizationEnabled(): boolean { return this.virtualization === true || (this.virtualization === 'auto' && this.visibleItems.length > 100); }\n  get horizontalVirtualizationEnabled(): boolean { return this.horizontalVirtualization === true || (this.horizontalVirtualization === 'auto' && this.visibleColumns.length > 20); }\n  get renderedColumns(): readonly GridColumn<T>[] {\n    if (!this.horizontalVirtualizationEnabled) return this.visibleColumns;\n    const window = this.layout.columnWindow(true);\n    const byKey = new Map(this.visibleColumns.map((column) => [String(column.key), column]));\n    return [...window.startColumns, ...window.visibleColumns, ...window.endColumns]\n      .map((column) => byKey.get(column.key))\n      .filter((column): column is GridColumn<T> => Boolean(column));\n  }\n  get horizontalLeftOffset(): number {\n    if (!this.horizontalVirtualizationEnabled) return 0;\n    return this.layout.columnWindow(true).leftSpacer;\n  }\n  get horizontalRightOffset(): number {\n    if (!this.horizontalVirtualizationEnabled) return 0;\n    return this.layout.columnWindow(true).rightSpacer;\n  }\n  get horizontalSpacerColumnCount(): number {\n    if (!this.horizontalVirtualizationEnabled) return 0;\n    return (this.horizontalLeftOffset ? 1 : 0) + (this.horizontalRightOffset ? 1 : 0);\n  }\n  get currentSelectionMode(): GridSelectionMode { return this.selectionMode ?? this.selectable; }\n  get searchMatchCount(): number {\n    if (!this.searchText.trim()) return 0;\n    return this.dataSource ? this.controller.totalRows : this.controller.rows.length;\n  }\n  get searchMatchPosition(): number {\n    if (!this.searchMatchCount) return 0;\n    const active = this.controller.activeCell?.row ?? -1;\n    const cursor = this.searchMatchCursor >= 0 && this.searchMatchCursor < this.searchMatchCount\n      ? this.searchMatchCursor\n      : active >= 0 && active < this.searchMatchCount ? active : 0;\n    return this.searchMatchCursor >= 0 ? cursor + 1 : active >= 0 ? active + 1 : 0;\n  }\n  get api(): GridController<T> { return this.controller; }\n  get remoteError(): unknown { return this.controller.remoteState.error ?? this.itemsSourceError; }\n  get nextCursor(): string | null { return this.controller.remoteState.nextCursor; }\n  get dataSourceState(): GridRemoteState { return this.controller.remoteState; }\n\n  /** Warms a remote query without replacing the rows currently visible. */\n  prefetch(queryOverrides: Partial<ReturnType<GridController<T>['query']>> = {}, signal?: AbortSignal): Promise<GridResult<T> | null> {\n    return this.controller.prefetch(queryOverrides, signal);\n  }\n\n  /** Returns URL-safe search, filter, group, sort and pagination state. */\n  serializeQueryState(): string {\n    return serializeGridQueryState(this.controller.query());\n  }\n\n  /** Restores query state produced by serializeQueryState and refreshes the grid. */\n  restoreQueryState(value: string): boolean {\n    const state = parseGridQueryState<T>(value);\n    if (!state) return false;\n    if (state.pageSize !== undefined) this.controller.setPageSize(state.pageSize);\n    this.controller.setCursor(state.cursor ?? null);\n    this.controller.setSearch(state.search);\n    this.controller.setSort(state.sort);\n    this.controller.setFilters(state.filters);\n    this.controller.setFilterGroups(state.filterGroups);\n    this.controller.setGroups(state.groups);\n    if (state.page !== undefined) this.controller.setPage(state.page);\n    this.refreshRows();\n    if (this.dataSource) void this.reload();\n    return true;\n  }\n\n  measureRow(index: number, height: number): void {\n    this.layout.setRowSize(index, height);\n    this.refreshWindow();\n  }\n\n  footerValue(column: GridColumn<T>): string {\n    const rows = this.childrenField ? this.controller.allTreeData : this.controller.rows;\n    const value = this.controller.footerValue(column, rows);\n    return value == null ? '' : String(value);\n  }\n\n  cellClass(row: T, column: GridColumn<T>): string | undefined {\n    return column.conditionalClass?.(this.controller.getValue(row, column), row);\n  }\n\n  toggleColumn(column: GridColumn<T>): void {\n    this.controller.setColumnVisibility(column.key, column.visible === false);\n    this._columns = this._columns.map((item) => item.key === column.key ? { ...item, visible: column.visible === false } : item);\n    this.columnLayoutChange.emit(this._columns);\n    this.persistLayout();\n    this.refreshRows();\n    this.columnChooserOpen = true;\n  }\n\n  toggleColumnChooser(): void {\n    this.columnChooserOpen = !this.columnChooserOpen;\n  }\n\n  setGroupByFromToolbar(value: Extract<keyof T, string> | ''): void {\n    this.groupBy = value || undefined;\n  }\n\n  rowTrackBy = (_index: number, item: GridDisplayRow<T>): GridKey => item.key;\n  columnTrackBy = (_index: number, column: GridColumn<T>): string => String(column.key);\n  columnGroupTrackBy = (_index: number, group: { header: string }): string => group.header;\n  filterOperatorTrackBy = (_index: number, option: { value: GridOperator }): GridOperator => option.value;\n  editorOptionTrackBy = (_index: number, option: { value: unknown }): unknown => option.value;\n\n  absoluteIndex(renderedIndex: number): number {\n    return this.renderedDisplayIndices[renderedIndex] ?? this.renderedStart + renderedIndex;\n  }\n\n  isVirtualSpacerBefore(renderedIndex: number): boolean {\n    return this.virtualizationEnabled && this.topOffset > 0 && renderedIndex === this.frozenRenderedCount;\n  }\n\n  ariaRowIndex(displayIndex: number): number {\n    return this.headerRowCount + displayIndex + 1;\n  }\n\n  globalColumnIndex(column: GridColumn<T>): number {\n    return this.visibleColumns.findIndex((item) => item.key === column.key);\n  }\n\n  isFrozenRow(displayIndex: number): boolean {\n    return this.frozenRows > 0 && displayIndex < this.frozenRows;\n  }\n\n  frozenRowTop(displayIndex: number): number {\n    const headerRows = (this.hasColumnGroups ? 1 : 0) + 1 + (this.filterable ? 1 : 0);\n    return headerRows * this.rowHeight + this.layout.rowOffset(displayIndex);\n  }\n\n  isGroupRow(item: GridDisplayRow<T>): item is GridGroupDisplayRow<T> {\n    return item.kind === 'group';\n  }\n\n  rowOf(item: GridDisplayRow<T>): T {\n    return item.kind === 'data' ? item.row : ({} as T);\n  }\n\n  dataIndexOf(item: GridDisplayRow<T>): number {\n    return item.kind === 'data' ? item.dataIndex : -1;\n  }\n\n  levelOf(item: GridDisplayRow<T>): number {\n    return item.level;\n  }\n\n  hasChildren(row: T): boolean {\n    const children = this.childrenField ? row[this.childrenField] : undefined;\n    return Boolean((Array.isArray(children) && children.length > 0) || (this.childrenField && this.loadChildren));\n  }\n\n  isNodeLoading(item: GridDisplayRow<T>): boolean { return item.kind === 'data' && this.childLoadingKeys.has(item.key); }\n\n  isNodeCollapsed(item: GridDisplayRow<T>): boolean {\n    return item.kind === 'data' && this.api.isNodeCollapsed(item.key);\n  }\n\n  async toggleNode(item: GridDisplayRow<T>): Promise<void> {\n    if (item.kind !== 'data') return;\n    if (this.childLoadingKeys.has(item.key)) {\n      this.childLoadControllers.get(item.key)?.abort();\n      this.childLoadControllers.delete(item.key);\n      this.childLoadingKeys.delete(item.key);\n      this.changeDetector.markForCheck();\n      return;\n    }\n    const field = this.childrenField;\n    const children = field ? item.row[field] : undefined;\n    if (this.loadChildren && field && (!Array.isArray(children) || children.length === 0)) {\n      if (this.childLoadingKeys.has(item.key)) return;\n      const abort = new AbortController();\n      this.childLoadControllers.set(item.key, abort);\n      this.childLoadingKeys.add(item.key);\n      this.changeDetector.markForCheck();\n      try {\n        const loaded = await this.loadChildren(item.row, abort.signal);\n        if (!abort.signal.aborted) {\n          this.controller.updateRow(item.row, { [field]: [...loaded] } as Partial<T>);\n          this.refreshRows();\n        }\n      } catch (error) {\n        if (!abort.signal.aborted) this.error.emit(error);\n      } finally {\n        this.childLoadControllers.delete(item.key);\n        this.childLoadingKeys.delete(item.key);\n        this.changeDetector.markForCheck();\n      }\n      return;\n    }\n    this.controller.toggleNode(item.key);\n    this.persistLayout();\n    this.refreshRows();\n  }\n\n  isDetailExpanded(item: GridDisplayRow<T>): boolean {\n    return item.kind === 'data' && Boolean(this.detailTemplate) && this.expandedDetailKeys.has(item.key);\n  }\n\n  isDetailLoading(item: GridDisplayRow<T>): boolean {\n    return item.kind === 'data' && this.detailLoadingKeys.has(item.key);\n  }\n\n  async toggleDetail(item: GridDisplayRow<T>): Promise<void> {\n    if (item.kind !== 'data' || !this.detailTemplate) return;\n    if (this.expandedDetailKeys.has(item.key)) {\n      this.detailLoadControllers.get(item.key)?.abort();\n      this.detailLoadControllers.delete(item.key);\n      this.detailLoadingKeys.delete(item.key);\n      this.detailErrors.delete(item.key);\n      this.expandedDetailKeys.delete(item.key);\n    } else {\n      this.expandedDetailKeys.add(item.key);\n      if (this.loadDetail && !this.detailCache.has(item.key)) {\n        const abort = new AbortController();\n        this.detailLoadControllers.set(item.key, abort);\n        this.detailLoadingKeys.add(item.key);\n        this.detailErrors.delete(item.key);\n        this.changeDetector.markForCheck();\n        try {\n          const rows = await this.loadDetail(item.row, abort.signal);\n          if (!abort.signal.aborted) {\n            this.detailCache.set(item.key, rows);\n            this.trimDetailCache();\n          }\n        } catch (error) {\n          if (!abort.signal.aborted) this.detailErrors.set(item.key, error);\n        } finally {\n          this.detailLoadControllers.delete(item.key);\n          this.detailLoadingKeys.delete(item.key);\n          this.changeDetector.markForCheck();\n        }\n      }\n    }\n    this.persistLayout();\n    this.changeDetector.markForCheck();\n  }\n\n  detailContext(item: GridDisplayRow<T>): BriosGridDetailTemplateContext<T, D> {\n    const row = this.rowOf(item);\n    return {\n      $implicit: row,\n      row,\n      rowIndex: this.dataIndexOf(item),\n      detailRows: item.kind === 'data' ? this.detailCache.get(item.key) : undefined,\n      loading: item.kind === 'data' && this.detailLoadingKeys.has(item.key),\n      error: item.kind === 'data' ? this.detailErrors.get(item.key) : undefined\n    };\n  }\n\n  toggleGroup(item: GridGroupDisplayRow<T>): void {\n    if (item.summary) return;\n    this.controller.toggleGroup(item.key);\n    this.persistLayout();\n    this.refreshRows();\n  }\n\n  expandAll(): void {\n    if (this.childrenField) this.controller.expandAllNodes();\n    if (this.groups.length) this.controller.expandAllGroups();\n    this.persistLayout();\n    this.refreshRows();\n  }\n\n  collapseAll(): void {\n    if (this.childrenField) this.controller.collapseAllNodes();\n    if (this.groups.length) this.controller.collapseAllGroups();\n    this.persistLayout();\n    this.refreshRows();\n  }\n\n  groupAggregateLabel(item: GridGroupDisplayRow<T>): string {\n    const entries = Object.entries(item.aggregates);\n    if (!entries.length) return '';\n    return entries.map(([key, value]) => `${key}: ${typeof value === 'number' ? value.toLocaleString() : String(value)}`).join(' · ');\n  }\n\n  groupContext(item: GridGroupDisplayRow<T>): BriosGridGroupTemplateContext<T> {\n    return {\n      $implicit: item,\n      group: item,\n      value: item.value,\n      level: item.level,\n      count: item.count,\n      aggregates: item.aggregates,\n      toggle: () => { if (!item.summary) this.toggleGroup(item); }\n    };\n  }\n\n  columnWidth(column: GridColumn<T>): string | null {\n    const resized = this.columnWidths.get(String(column.key));\n    if (resized) return `${this.clampColumnWidth(column, resized)}px`;\n    if (column.flex && column.flex > 0) {\n      const resolved = this.layout.resolvedColumnSize(String(column.key));\n      return `${resolved > 0 ? resolved : this.baseColumnWidth(column)}px`;\n    }\n    if (typeof column.width === 'number') return `${this.clampColumnWidth(column, column.width)}px`;\n    return column.width ?? null;\n  }\n\n  private columnSize(column: GridColumn<T>): number {\n    const resized = this.columnWidths.get(String(column.key));\n    if (resized) return resized;\n    if (column.flex && column.flex > 0) {\n      const resolved = this.layout.resolvedColumnSize(String(column.key));\n      if (resolved > 0) return resolved;\n    }\n    if (typeof column.width === 'number') return column.width;\n    const parsed = typeof column.width === 'string' ? Number.parseInt(column.width, 10) : NaN;\n    return this.clampColumnWidth(column, Number.isFinite(parsed) ? parsed : 120);\n  }\n\n  private clampColumnWidth(column: GridColumn<T>, width: number): number {\n    return Math.min(column.maxWidth ?? Number.POSITIVE_INFINITY, Math.max(column.minWidth ?? 48, width));\n  }\n\n  isFrozenStart(column: GridColumn<T>): boolean {\n    return column.pinned === 'start' || column.frozen === true;\n  }\n\n  isFrozenEnd(column: GridColumn<T>): boolean {\n    return column.pinned === 'end';\n  }\n\n  frozenStartOffset(column: GridColumn<T>): number {\n    let offset = this.currentSelectionMode !== 'none' ? 42 : 0;\n    for (const item of this.visibleColumns) {\n      if (item.key === column.key) break;\n      if (this.isFrozenStart(item)) offset += this.columnSize(item);\n    }\n    return offset;\n  }\n\n  frozenEndOffset(column: GridColumn<T>): number {\n    let offset = 0;\n    const index = this.visibleColumns.findIndex((item) => item.key === column.key);\n    for (let position = index + 1; position < this.visibleColumns.length; position += 1) {\n      if (this.isFrozenEnd(this.visibleColumns[position])) offset += this.columnSize(this.visibleColumns[position]);\n    }\n    return offset;\n  }\n\n  startResize(event: MouseEvent, column: GridColumn<T>): void {\n    if (!this.allowResizing) return;\n    event.preventDefault();\n    event.stopPropagation();\n    const target = event.currentTarget as HTMLElement;\n    const cell = target.tagName.toLowerCase() === 'th' ? target : target.parentElement;\n    const previousWidth = this.columnSize(column);\n    const startWidth = this.clampColumnWidth(column, cell?.getBoundingClientRect().width ?? previousWidth);\n    this.resizing = { key: String(column.key), startX: event.clientX, startWidth, previousWidth };\n  }\n\n  onHeaderMouseDown(event: MouseEvent, column: GridColumn<T>): void {\n    if (!this.allowResizing) return;\n    const target = event.target as HTMLElement | null;\n    if (target?.closest('button, input, select, textarea, summary, a')) return;\n    const header = event.currentTarget as HTMLElement;\n    if (header.getBoundingClientRect().right - event.clientX <= 8) this.startResize(event, column);\n  }\n\n  @HostListener('document:click', ['$event'])\n  onDocumentClick(event: MouseEvent): void {\n    const target = event.target as HTMLElement | null;\n    if (this.openFilterMenuKey !== null && !target?.closest('.brios-grid__filter-menu') && !target?.closest('.brios-grid__filter-menu-trigger')) this.closeFilterMenu(false);\n    if (this.openFilterValueKey !== null && !target?.closest('.brios-grid__filter-values')) this.closeFilterValues(false);\n    if (this.contextMenuState && !target?.closest('.brios-grid__context-menu')) this.closeContextMenu(false);\n    const chooser = this.columnChooser?.nativeElement as HTMLElement | undefined;\n    const eventPath = typeof event.composedPath === 'function' ? event.composedPath() : [];\n    const clickedInsideChooser = Boolean(chooser && (chooser.contains(target) || eventPath.includes(chooser)));\n    if (!clickedInsideChooser) this.closeColumnChooser();\n  }\n\n  @HostListener('document:focusin', ['$event'])\n  onDocumentFocusIn(event: FocusEvent): void {\n    const target = event.target as HTMLElement | null;\n    if (!target?.closest('.brios-grid__column-chooser')) this.closeColumnChooser();\n  }\n\n  @HostListener('window:scroll')\n  onWindowScroll(): void {\n    this.closeFilterOverlaysOnScroll();\n  }\n\n  @HostListener('document:keydown.escape')\n  onEscape(): void {\n    if (this.openFilterMenuKey !== null) this.closeFilterMenu();\n    if (this.openFilterValueKey !== null) this.closeFilterValues();\n    if (this.contextMenuState) this.closeContextMenu();\n    this.closeColumnChooser();\n  }\n\n  private closeColumnChooser(): void {\n    this.columnChooserOpen = false;\n  }\n\n  @HostListener('document:mousemove', ['$event'])\n  onDocumentMouseMove(event: MouseEvent): void {\n    if (!this.resizing) return;\n    const column = this._columns.find((item) => String(item.key) === this.resizing?.key);\n    if (!column) return;\n    const width = this.clampColumnWidth(column, this.resizing.startWidth + event.clientX - this.resizing.startX);\n    this.columnWidths.set(this.resizing.key, width);\n    this.layout.setColumnSize(this.resizing.key, width);\n    this.changeDetector.markForCheck();\n  }\n\n  @HostListener('document:mouseup')\n  onDocumentMouseUp(): void {\n    const resizing = this.resizing;\n    this.resizing = null;\n    this.persistLayout();\n    if (!resizing) return;\n    const column = this._columns.find((item) => String(item.key) === resizing.key);\n    const width = this.columnWidths.get(resizing.key);\n    if (column && width !== undefined && width !== resizing.previousWidth) this.columnResize.emit({ column, previousWidth: resizing.previousWidth, width });\n  }\n\n  startColumnDrag(column: GridColumn<T>): void {\n    if (this.allowDragging) this.draggedColumnKey = String(column.key);\n  }\n\n  dropColumn(target: GridColumn<T>): void {\n    if (!this.allowDragging || !this.draggedColumnKey || this.draggedColumnKey === String(target.key)) return;\n    const next = [...this._columns];\n    const fromIndex = next.findIndex((column) => String(column.key) === this.draggedColumnKey);\n    const toIndex = next.findIndex((column) => column.key === target.key);\n    if (fromIndex < 0 || toIndex < 0) return;\n    const [moved] = next.splice(fromIndex, 1);\n    next.splice(toIndex, 0, moved);\n    this._columns = next;\n    this.controller.setColumns(next);\n    this.draggedColumnKey = null;\n    this.columnLayoutChange.emit(next);\n    this.persistLayout();\n    this.refreshRows();\n  }\n\n  onHeaderKeydown(event: KeyboardEvent, column: GridColumn<T>): void {\n    if (!this.allowDragging || !['ArrowLeft', 'ArrowRight'].includes(event.key)) return;\n    const fromIndex = this._columns.findIndex((item) => item.key === column.key);\n    if (fromIndex < 0) return;\n    const delta = event.key === 'ArrowLeft' ? -1 : 1;\n    const targetIndex = Math.min(this._columns.length - 1, Math.max(0, fromIndex + delta));\n    if (targetIndex === fromIndex) return;\n    event.preventDefault();\n    const next = [...this._columns];\n    const [moved] = next.splice(fromIndex, 1);\n    next.splice(targetIndex, 0, moved);\n    this._columns = next;\n    this.controller.setColumns(next);\n    this.columnLayoutChange.emit(next);\n    this.persistLayout();\n    this.refreshRows();\n  }\n\n  autoSizeColumns(): void {\n    for (const column of this.visibleColumns) {\n      const values = this.visibleItems.slice(0, 80).map((row) => this.displayValue(row, column));\n      const longest = Math.max(column.header.length, ...values.map((value) => value.length));\n      const width = Math.min(column.maxWidth ?? 360, Math.max(column.minWidth ?? 72, longest * 8 + 30));\n      this.columnWidths.set(String(column.key), width);\n      this.layout.setColumnSize(String(column.key), width);\n    }\n    this.persistLayout();\n    this.changeDetector.markForCheck();\n  }\n\n  sort(column: GridColumn<T>, event?: MouseEvent): void {\n    this.controller.sort(column.key, Boolean(event?.shiftKey));\n    this.refreshRows();\n    if (this.dataSource) void this.reload();\n  }\n\n  sortIndicator(column: GridColumn<T>): string {\n    const sort = this.controller.sortStates.find((item) => item.key === column.key);\n    if (!sort) return '';\n    return sort.direction === 'asc' ? '↑' : '↓';\n  }\n\n  sortAriaValue(column: GridColumn<T>): 'ascending' | 'descending' | 'none' {\n    const sort = this.controller.sortStates.find((item) => item.key === column.key);\n    return sort ? sort.direction === 'asc' ? 'ascending' : 'descending' : 'none';\n  }\n\n  onSearch(value: string): void {\n    this.searchText = value;\n    this.searchMatchCursor = -1;\n    this.controller.setSearchOptions({ caseSensitive: this.searchCaseSensitive, normalizeAccents: this.normalizeSearchAccents });\n    this.controller.setSearch(value);\n    this.refreshRows();\n    this.scheduleRemoteReload();\n  }\n\n  filterValue(column: GridColumn<T>): string {\n    return this.columnFilterValues.get(String(column.key)) ?? '';\n  }\n\n  filterInputType(column: GridColumn<T>): 'search' | 'number' | 'date' {\n    if (column.dataType === 'date') return 'date';\n    if (column.dataType === 'number' && ['greaterThan', 'greaterThanOrEqual', 'lessThan', 'lessThanOrEqual', 'between'].includes(this.filterOperator(column))) return 'number';\n    return 'search';\n  }\n\n  filterBetweenPart(column: GridColumn<T>, index: 0 | 1): string {\n    return this.filterValue(column).split(',')[index]?.trim() ?? '';\n  }\n\n  onColumnFilterRange(column: GridColumn<T>, index: 0 | 1, value: string): void {\n    const parts = [this.filterBetweenPart(column, 0), this.filterBetweenPart(column, 1)];\n    parts[index] = value;\n    this.onColumnFilter(column, parts.some(Boolean) ? parts.join(', ') : '');\n  }\n\n  isColumnFiltered(column: GridColumn<T>): boolean {\n    return this.activeFilters.some((filter) => filter.key === column.key);\n  }\n\n  isColumnSorted(column: GridColumn<T>): boolean {\n    return this.controller.sortStates.some((sort) => sort.key === column.key);\n  }\n\n  get hasFilterValues(): boolean {\n    return this.controller.allData.length > 0;\n  }\n\n  filterValues(column: GridColumn<T>): readonly { value: string; label: string }[] {\n    const key = String(column.key);\n    const rows = this.controller.allData;\n    const limit = Math.max(1, Math.floor(Number(this.maxFilterValues)) || 100);\n    const cached = this.filterValueOptionsCache.get(key);\n    if (cached?.rows === rows && cached.limit === limit) return cached.options;\n    return [];\n  }\n\n  filterValuesLoading(column: GridColumn<T>): boolean {\n    return this.filterValueLoadingKeys.has(String(column.key));\n  }\n\n  private prepareFilterValues(column: GridColumn<T>): void {\n    const key = String(column.key);\n    const rows = this.controller.allData;\n    const limit = Math.max(1, Math.floor(Number(this.maxFilterValues)) || 100);\n    const cached = this.filterValueOptionsCache.get(key);\n    if (cached?.rows === rows && cached.limit === limit) return;\n    const activeBuild = this.filterValueBuilds.get(key);\n    if (activeBuild?.rows === rows && activeBuild.limit === limit) return;\n    const token = Symbol(key);\n    this.filterValueBuilds.set(key, { rows, limit, token });\n    this.filterValueLoadingKeys.add(key);\n    void createFilterValueOptionsAsync(\n      rows,\n      (row) => this.controller.getValue(row, column),\n      (row) => this.displayValue(row, column),\n      limit\n    ).then((options) => {\n      const current = this.filterValueBuilds.get(key);\n      if (!current || current.token !== token || current.rows !== this.controller.allData) return;\n      this.filterValueOptionsCache.set(key, { rows, limit, options });\n      this.filteredFilterValueOptionsCache.delete(key);\n      this.filterValueBuilds.delete(key);\n      this.filterValueLoadingKeys.delete(key);\n      this.changeDetector.markForCheck();\n    });\n  }\n\n  filterValueSearch(column: GridColumn<T>): string {\n    return this.filterValueSearches.get(String(column.key)) ?? '';\n  }\n\n  filteredFilterValues(column: GridColumn<T>): readonly { value: string; label: string }[] {\n    const query = this.filterValueSearch(column).trim().toLocaleLowerCase();\n    const source = this.filterValues(column);\n    const key = String(column.key);\n    const cached = this.filteredFilterValueOptionsCache.get(key);\n    if (cached?.source === source && cached.query === query) return cached.options;\n    const options = !query ? source : source.filter((option) => `${option.label} ${option.value}`.toLocaleLowerCase().includes(query));\n    this.filteredFilterValueOptionsCache.set(key, { source, query, options });\n    return options;\n  }\n\n  filterValueTrackBy(_index: number, option: { value: string }): string {\n    return option.value;\n  }\n\n  onFilterValueSearch(column: GridColumn<T>, value: string): void {\n    const key = String(column.key);\n    if (value) this.filterValueSearches.set(key, value);\n    else this.filterValueSearches.delete(key);\n    this.filteredFilterValueOptionsCache.delete(key);\n    this.changeDetector.markForCheck();\n  }\n\n  selectAllFilterValues(column: GridColumn<T>): void {\n    const values = this.filteredFilterValues(column).map((option) => option.value);\n    const current = new Set(this.uniqueFilterValues.get(String(column.key)) ?? []);\n    values.forEach((value) => current.add(value));\n    this.setFilterValueSelection(column, current);\n  }\n\n  clearFilterValues(column: GridColumn<T>): void {\n    this.setFilterValueSelection(column, new Set<string>());\n  }\n\n  isFilterMenuOpen(column: GridColumn<T>): boolean {\n    return this.openFilterMenuKey === String(column.key);\n  }\n\n  showFilterMenuFor(column: GridColumn<T>): boolean {\n    return column.showFilterMenu ?? this.showFilterMenu;\n  }\n\n  filterMenuMaxHeight(): number {\n    const menuTopOffset = (this.hasColumnGroups ? 2 : 1) * this.rowHeight + 12;\n    return Math.max(120, this.height - menuTopOffset);\n  }\n\n  toggleFilterMenu(column: GridColumn<T>, event: MouseEvent): void {\n    event.preventDefault();\n    event.stopPropagation();\n    const key = String(column.key);\n    const activeFilter = this.controller.filters.find((filter) => String(filter.key) === key);\n    if (activeFilter) this.columnFilterOperators.set(key, activeFilter.operator);\n    if (this.openFilterMenuKey === key) {\n      this.closeFilterMenu();\n      return;\n    }\n    this.filterMenuFocusOrigin = this.focusOrigin(event);\n    this.filterMenuFocusKey = key;\n    this.filterValuesFocusOrigin = null;\n    this.filterValuesFocusKey = null;\n    this.openFilterValueKey = null;\n    this.openFilterMenuKey = key;\n    this.prepareFilterValues(column);\n    this.changeDetector.markForCheck();\n  }\n\n  closeFilterMenu(restoreFocus = true): void {\n    if (this.openFilterMenuKey === null) return;\n    this.openFilterMenuKey = null;\n    this.changeDetector.markForCheck();\n    if (restoreFocus) this.restoreFilterFocus('menu');\n  }\n\n  isFilterValuesOpen(column: GridColumn<T>): boolean {\n    return this.openFilterValueKey === String(column.key);\n  }\n\n  get filterValuesOverlayOpen(): boolean {\n    return this.openFilterValueKey !== null;\n  }\n\n  toggleFilterValues(column: GridColumn<T>, event: MouseEvent): void {\n    event.preventDefault();\n    const key = String(column.key);\n    if (this.openFilterValueKey === key) {\n      this.closeFilterValues();\n      return;\n    }\n    this.filterValuesFocusOrigin = this.focusOrigin(event);\n    this.filterValuesFocusKey = key;\n    this.filterMenuFocusOrigin = null;\n    this.filterMenuFocusKey = null;\n    this.openFilterMenuKey = null;\n    this.openFilterValueKey = key;\n    this.prepareFilterValues(column);\n    this.changeDetector.markForCheck();\n  }\n\n  private closeFilterValues(restoreFocus = true): void {\n    if (this.openFilterValueKey === null) return;\n    this.openFilterValueKey = null;\n    this.changeDetector.markForCheck();\n    if (restoreFocus) this.restoreFilterFocus('values');\n  }\n\n  private focusOrigin(event: Event): HTMLElement | null {\n    if (event.currentTarget instanceof HTMLElement) return event.currentTarget;\n    const active = typeof document !== 'undefined' && document.activeElement instanceof HTMLElement ? document.activeElement : null;\n    if (active && active !== document.body) return active;\n    return null;\n  }\n\n  private restoreFilterFocus(kind: 'menu' | 'values'): void {\n    const origin = kind === 'menu' ? this.filterMenuFocusOrigin : this.filterValuesFocusOrigin;\n    const key = kind === 'menu' ? this.filterMenuFocusKey : this.filterValuesFocusKey;\n    if (kind === 'menu') {\n      this.filterMenuFocusOrigin = null;\n      this.filterMenuFocusKey = null;\n    } else {\n      this.filterValuesFocusOrigin = null;\n      this.filterValuesFocusKey = null;\n    }\n    setTimeout(() => {\n      if (origin?.isConnected) { origin.focus(); return; }\n      const selector = kind === 'menu' ? '.brios-grid__filter-menu-trigger' : '.brios-grid__filter-values summary';\n      const attribute = kind === 'menu' ? 'filterKey' : 'filterValuesKey';\n      const replacement = key ? Array.from(this.hostElement().querySelectorAll<HTMLElement>(selector)).find((element) => element.dataset[attribute] === key) : undefined;\n      replacement?.focus();\n    }, 0);\n  }\n\n  private hostElement(): HTMLElement {\n    try { return this.injector.get(ElementRef).nativeElement as HTMLElement; } catch { return typeof document !== 'undefined' ? document.body : {} as HTMLElement; }\n  }\n\n  isFilterValueSelected(column: GridColumn<T>, value: string): boolean {\n    return this.uniqueFilterValues.get(String(column.key))?.has(value) === true;\n  }\n\n  toggleFilterValue(column: GridColumn<T>, value: string, checked: boolean): void {\n    const key = String(column.key);\n    const selected = new Set(this.uniqueFilterValues.get(key) ?? []);\n    if (checked) selected.add(value);\n    else selected.delete(value);\n    this.setFilterValueSelection(column, selected);\n  }\n\n  private setFilterValueSelection(column: GridColumn<T>, selected: Set<string>): void {\n    const key = String(column.key);\n    if (selected.size) {\n      this.uniqueFilterValues.set(key, selected);\n      this.columnFilterOperators.set(key, 'in');\n      this.columnFilterValues.set(key, [...selected].join(', '));\n      this.controller.setFilter({ key: column.key, operator: 'in', value: [...selected] });\n    } else {\n      this.uniqueFilterValues.delete(key);\n      this.columnFilterValues.delete(key);\n      this.controller.setFilters(this.activeFilters.filter((filter) => filter.key !== column.key));\n    }\n    this.refreshRows();\n    if (this.dataSource) void this.reload();\n  }\n\n  filterOperator(column: GridColumn<T>): GridOperator {\n    const key = String(column.key);\n    return this.columnFilterOperators.get(key)\n      ?? this.controller.filters.find((filter) => String(filter.key) === key)?.operator\n      ?? 'contains';\n  }\n\n  onColumnFilter(column: GridColumn<T>, value: string): void {\n    const key = String(column.key);\n    this.uniqueFilterValues.delete(key);\n    if (value) this.columnFilterValues.set(key, value);\n    else this.columnFilterValues.delete(key);\n    if (value) {\n      const operator = this.filterOperator(column);\n      const parts = value.split(',').map((part) => part.trim()).filter(Boolean);\n      this.controller.setFilter({ key: column.key, operator, value: operator === 'between' ? parts[0] : operator === 'in' ? parts : value, valueTo: operator === 'between' ? parts[1] : undefined });\n    }\n    else this.controller.setFilters(this.activeFilters.filter((filter) => filter.key !== column.key));\n    this.refreshRows();\n    this.scheduleRemoteReload();\n  }\n\n  onColumnFilterOperator(column: GridColumn<T>, operator: GridOperator): void {\n    const key = String(column.key);\n    this.columnFilterOperators.set(key, operator);\n    if (operator !== 'in') this.uniqueFilterValues.delete(key);\n    const value = this.filterValue(column);\n    if (value || operator === 'isEmpty' || operator === 'isNotEmpty') {\n      const parts = value.split(',').map((part) => part.trim()).filter(Boolean);\n      this.controller.setFilter({ key: column.key, operator, value: operator === 'between' ? parts[0] : operator === 'in' ? parts : value, valueTo: operator === 'between' ? parts[1] : undefined });\n    }\n    this.refreshRows();\n    this.scheduleRemoteReload();\n  }\n\n  clearFilters(): void {\n    this.searchText = '';\n    this.searchMatchCursor = -1;\n    this.uniqueFilterValues.clear();\n    this.columnFilterValues.clear();\n    this.columnFilterOperators.clear();\n    this.filterValueSearches.clear();\n    this.controller.setSearch('');\n    this.controller.clearFilters();\n    this.refreshRows();\n    if (this.dataSource) void this.reload();\n  }\n\n  async navigateSearchMatch(direction: -1 | 1): Promise<void> {\n    const count = this.searchMatchCount;\n    if (!count) return;\n    const current = this.searchMatchCursor >= 0 ? this.searchMatchCursor : (this.controller.activeCell?.row ?? -1);\n    const target = (current + direction + count) % count;\n    this.searchMatchCursor = target;\n    const page = this.controller.pageSize > 0 ? Math.floor(target / this.controller.pageSize) + 1 : 1;\n    if (!this.dataSource && this.showPagination) this.controller.setPage(page);\n    if (this.dataSource) {\n      this.controller.setPage(page);\n      await this.reload();\n      if (this.searchMatchCursor !== target) return;\n    }\n    const rowIndex = this.dataSource ? target % this.controller.pageSize : target;\n    if (!this.controller.rows[rowIndex]) return;\n    this.controller.selectRange({ rowStart: rowIndex, rowEnd: rowIndex, colStart: 0, colEnd: 0 });\n    this.refreshRows();\n    const visibleIndex = rowIndex;\n    if (this.viewport && visibleIndex >= 0) this.viewport.nativeElement.scrollTop = Math.max(0, visibleIndex * this.rowHeight - this.height / 2);\n  }\n\n  setFilter(filter: GridFilter<T>): void {\n    this.controller.setFilter(filter);\n    this.refreshRows();\n    this.scheduleRemoteReload();\n  }\n\n  goToPage(page: number): void {\n    this.controller.setPage(page);\n    this.refreshRows();\n    if (this.dataSource) void this.reload();\n  }\n\n  setPageSize(value: number): void {\n    this._pageSize = Number(value) || 25;\n    this.controller.setPageSize(this._pageSize);\n    this.refreshRows();\n    if (this.dataSource) void this.reload();\n  }\n\n  onScroll(scrollTop: number, scrollLeft = 0, viewportWidth = 0): void {\n    this.closeFilterOverlaysOnScroll();\n    this.verticalScrollTop = scrollTop;\n    this.horizontalScrollLeft = scrollLeft;\n    this.scrollViewportWidth = viewportWidth;\n    if (this.scrollFrame !== null) return;\n    const apply = (): void => {\n      this.scrollFrame = null;\n      this.scrollFrameUsesTimeout = false;\n      this.layout.setViewport({ scrollTop: this.verticalScrollTop, scrollLeft: this.horizontalScrollLeft, width: this.scrollViewportWidth });\n      if (this.footerViewport && this.footerViewport.nativeElement.scrollLeft !== this.horizontalScrollLeft) this.footerViewport.nativeElement.scrollLeft = this.horizontalScrollLeft;\n      this.refreshWindow();\n    };\n    if (typeof requestAnimationFrame === 'function') {\n      this.scrollFrame = requestAnimationFrame(apply);\n    } else {\n      this.scrollFrameUsesTimeout = true;\n      this.scrollFrame = setTimeout(apply, 0) as unknown as number;\n    }\n  }\n\n  private closeFilterOverlaysOnScroll(): void {\n    if (this.openFilterMenuKey !== null) this.closeFilterMenu(false);\n    if (this.openFilterValueKey !== null) this.closeFilterValues(false);\n  }\n\n  onFooterScroll(scrollLeft: number): void {\n    this.horizontalScrollLeft = scrollLeft;\n    if (this.viewport && this.viewport.nativeElement.scrollLeft !== scrollLeft) this.viewport.nativeElement.scrollLeft = scrollLeft;\n    this.layout.setViewport({ scrollTop: this.verticalScrollTop, scrollLeft });\n    this.refreshWindow();\n  }\n\n  summaryFooterColumns(): string {\n    return this.visibleColumns.map((column) => `${this.columnSize(column)}px`).join(' ');\n  }\n\n  summaryFooterWidth(): number {\n    return this.visibleColumns.reduce((total, column) => total + this.columnSize(column), 0);\n  }\n\n  selectRow(row: T, rowIndex: number, event?: MouseEvent): void {\n    if (this.disabled) return;\n    const active = this.controller.activeCell;\n    const rowPosition = this.controller.rows.indexOf(row);\n    let selection = event?.shiftKey && active\n      ? this.controller.selectRange({ rowStart: active.row, rowEnd: rowPosition >= 0 ? rowPosition : rowIndex, colStart: 0, colEnd: Math.max(0, this.visibleColumns.length - 1) })\n      : this.controller.toggleSelection(row, rowIndex, this.currentSelectionMode);\n    if (this.childrenField && this.treeSelectionPropagation !== 'none') selection = this.applyTreeSelection(row, rowIndex, selection);\n    this.rowClick.emit({ row, rowIndex });\n    this.selectionChange.emit(selection);\n    this.valueChange(selection.rows);\n    this.touched();\n    this.persistLayout();\n    this.changeDetector.markForCheck();\n  }\n\n  private applyTreeSelection(row: T, rowIndex: number, selection: GridSelectionSnapshot<T>): GridSelectionSnapshot<T> {\n    const related = new Set<GridKey>([this.controller.keyFor(row, rowIndex)]);\n    if (this.treeSelectionPropagation === 'descendants' || this.treeSelectionPropagation === 'both') {\n      for (const child of this.treeDescendants(row)) {\n        const index = this.controller.allData.indexOf(child);\n        related.add(this.controller.keyFor(child, index >= 0 ? index : 0));\n      }\n    }\n    if (this.treeSelectionPropagation === 'ancestors' || this.treeSelectionPropagation === 'both') {\n      for (const ancestor of this.treeAncestors(row)) {\n        const index = this.controller.allData.indexOf(ancestor);\n        related.add(this.controller.keyFor(ancestor, index >= 0 ? index : 0));\n      }\n    }\n    const selecting = selection.keys.includes(this.controller.keyFor(row, rowIndex));\n    const keys = selecting ? [...new Set([...selection.keys, ...related])] : selection.keys.filter((key) => !related.has(key));\n    return this.controller.selectKeys(keys);\n  }\n\n  private treeDescendants(row: T): readonly T[] {\n    if (!this.childrenField) return [];\n    const children = row[this.childrenField];\n    if (!Array.isArray(children)) return [];\n    const descendants: T[] = [];\n    for (const child of children) descendants.push(child as T, ...this.treeDescendants(child as T));\n    return descendants;\n  }\n\n  private treeAncestors(row: T): readonly T[] {\n    if (!this.childrenField) return [];\n    const result: T[] = [];\n    const find = (items: readonly T[], ancestors: readonly T[]): boolean => {\n      for (const candidate of items) {\n        const children = candidate[this.childrenField!];\n        if (!Array.isArray(children)) continue;\n        if (children.includes(row)) { result.push(...ancestors, candidate); return true; }\n        if (find(children as readonly T[], [...ancestors, candidate])) return true;\n      }\n      return false;\n    };\n    find(this.controller.allData, []);\n    return result;\n  }\n\n  selectColumn(column: GridColumn<T>, event?: MouseEvent): void {\n    if (this.disabled || this.currentSelectionMode !== 'column') return;\n    const selection = this.controller.selectColumn(this.globalColumnIndex(column), Boolean(event?.ctrlKey || event?.metaKey));\n    this.selectionChange.emit(selection);\n    this.valueChange(selection.rows);\n    this.touched();\n    this.persistLayout();\n    this.changeDetector.markForCheck();\n  }\n\n  isColumnSelected(column: GridColumn<T>): boolean {\n    return this.currentSelectionMode === 'column' && this.controller.getSelection().columns?.includes(this.globalColumnIndex(column)) === true;\n  }\n\n  toggleAll(): void {\n    if (this.disabled) return;\n    const selection = this.allVisibleSelected ? this.controller.clearSelection() : this.controller.selectAll();\n    this.selectionChange.emit(selection);\n    this.valueChange(selection.rows);\n    this.touched();\n    this.persistLayout();\n    this.changeDetector.markForCheck();\n  }\n\n  isSelected(row: T, rowIndex: number): boolean { return this.controller.isSelected(row, rowIndex); }\n\n  treeSelectionState(row: T, rowIndex: number): boolean | 'mixed' {\n    const selected = this.isSelected(row, rowIndex);\n    if (!this.childrenField) return selected;\n    const related = [row, ...this.treeDescendants(row)];\n    if (related.length < 2) return selected;\n    const selectedCount = related.reduce((count, item) => {\n      const index = this.controller.allData.indexOf(item);\n      return count + (this.isSelected(item, index >= 0 ? index : 0) ? 1 : 0);\n    }, 0);\n    return selectedCount === 0 ? false : selectedCount === related.length ? true : 'mixed';\n  }\n\n  activateCell(rowIndex: number, columnIndex: number, event: MouseEvent): void {\n    if (this.disabled) return;\n    event.stopPropagation();\n    const row = this.controller.rows[rowIndex] ?? this.controller.allData[rowIndex] ?? this.visibleItems[rowIndex];\n    const rowPosition = row ? this.controller.rows.indexOf(row) : rowIndex;\n    const active = this.controller.activeCell;\n    const selection = event.shiftKey && active\n      ? this.controller.selectRange({ rowStart: active.row, rowEnd: rowPosition >= 0 ? rowPosition : rowIndex, colStart: active.column, colEnd: columnIndex })\n      : event.metaKey || event.ctrlKey\n        ? this.controller.toggleRange({ rowStart: rowPosition >= 0 ? rowPosition : rowIndex, rowEnd: rowPosition >= 0 ? rowPosition : rowIndex, colStart: columnIndex, colEnd: columnIndex })\n        : this.controller.selectRange({ rowStart: rowPosition >= 0 ? rowPosition : rowIndex, rowEnd: rowPosition >= 0 ? rowPosition : rowIndex, colStart: columnIndex, colEnd: columnIndex });\n    this.selectionChange.emit(selection);\n    this.valueChange(selection.rows);\n    this.touched();\n    this.persistLayout();\n    this.changeDetector.markForCheck();\n  }\n\n  isActiveCell(rowIndex: number, columnIndex: number): boolean {\n    const active = this.controller.activeCell;\n    const item = this.displayItems[rowIndex];\n    if (!active || active.column !== columnIndex || item?.kind !== 'data') return false;\n    const activeRow = this.controller.rows[active.row];\n    return Boolean(activeRow && item.key === this.rowKey(activeRow));\n  }\n\n  cellId(rowIndex: number, columnIndex: number): string {\n    return `brios-grid-cell-${Math.max(0, rowIndex)}-${Math.max(0, columnIndex)}`;\n  }\n\n  activeDescendantId(): string | null {\n    const active = this.controller.activeCell;\n    const activeRow = active ? this.controller.rows[active.row] : undefined;\n    if (!active || !activeRow) return null;\n    const displayIndex = this.displayItems.findIndex((item) => item.kind === 'data' && item.key === this.rowKey(activeRow));\n    return displayIndex < 0 ? null : this.cellId(displayIndex, active.column);\n  }\n\n  private rowKey(row: T): GridKey {\n    const sourceIndex = this.controller.allData.indexOf(row);\n    return this.controller.keyFor(row, sourceIndex >= 0 ? sourceIndex : 0);\n  }\n\n  /** Gives keyboard users a deterministic starting cell when the grid receives focus. */\n  ensureActiveCell(event?: FocusEvent): void {\n    const target = event?.currentTarget as HTMLElement | null;\n    queueMicrotask(() => {\n      if (this.pointerFocusTimer) return;\n      if (target && typeof document !== 'undefined' && document.activeElement !== target) return;\n      if (this.disabled || this.controller.activeCell || !this.visibleItems.length || !this.visibleColumns.length) return;\n      const selection = this.controller.selectRange({ rowStart: 0, rowEnd: 0, colStart: 0, colEnd: 0 });\n      this.selectionChange.emit(selection);\n      this.valueChange(selection.rows);\n      this.changeDetector.markForCheck();\n    });\n  }\n\n  suppressFocusActivation(): void {\n    if (this.pointerFocusTimer) clearTimeout(this.pointerFocusTimer);\n    this.pointerFocusTimer = setTimeout(() => { this.pointerFocusTimer = undefined; }, 0);\n  }\n\n  handleKeydown(event: KeyboardEvent): void {\n    if (this.matchesShortcut(event, 'cancelEdit', ['escape']) && (this.activeEdit || this.activeRowEdit)) {\n      if (this.activeEdit) this.cancelEdit();\n      else if (this.activeRowEdit) this.cancelRowEdit();\n      return;\n    }\n    if (this.matchesShortcut(event, 'redo', ['mod+shift+z', 'mod+y'])) {\n      event.preventDefault();\n      if (this.controller.redo()) this.refreshRows();\n      return;\n    }\n    if (this.matchesShortcut(event, 'undo', ['mod+z'])) {\n      event.preventDefault();\n      if (this.controller.undo()) this.refreshRows();\n      return;\n    }\n    if (this.matchesShortcut(event, 'copy', ['mod+c'])) {\n      event.preventDefault();\n      this.copySelection();\n      return;\n    }\n    if (this.matchesShortcut(event, 'selectAll', ['mod+a'])) {\n      event.preventDefault();\n      this.toggleAll();\n      return;\n    }\n    const active = this.controller.activeCell;\n    if (!active) return;\n    const treeDataItems = this.childrenField\n      ? this.displayItems.filter((item): item is GridDataDisplayRow<T> => item.kind === 'data')\n      : null;\n    const activeRow = this.controller.rows[active.row];\n    const activeTreeIndex = treeDataItems && activeRow\n      ? treeDataItems.findIndex((item) => item.key === this.rowKey(activeRow))\n      : -1;\n    let row = treeDataItems ? Math.max(0, activeTreeIndex) : active.row;\n    let column = active.column;\n    if (treeDataItems && column === 0 && (event.key === 'ArrowLeft' || event.key === 'ArrowRight')) {\n      const item = treeDataItems[row];\n      if (item && this.hasChildren(item.row)) {\n        const shouldToggle = event.key === 'ArrowRight' ? this.isNodeCollapsed(item) : !this.isNodeCollapsed(item);\n        if (shouldToggle) {\n          event.preventDefault();\n          void this.toggleNode(item);\n          return;\n        }\n      }\n    }\n    if (event.key === 'Tab') {\n      const direction = event.shiftKey ? -1 : 1;\n      column += direction;\n      if (column >= this.visibleColumns.length) { column = 0; row += 1; }\n      if (column < 0) { column = Math.max(0, this.visibleColumns.length - 1); row -= 1; }\n    }\n    else if (event.key === 'ArrowDown') row += 1;\n    else if (event.key === 'ArrowUp') row -= 1;\n    else if (event.key === 'ArrowRight') column += 1;\n    else if (event.key === 'ArrowLeft') column -= 1;\n    else if (event.key === 'PageDown') row += Math.max(1, Math.floor(this.height / this.rowHeight));\n    else if (event.key === 'PageUp') row -= Math.max(1, Math.floor(this.height / this.rowHeight));\n    else if (event.key === 'Home') {\n      column = 0;\n      if (event.ctrlKey || event.metaKey) row = 0;\n    }\n    else if (event.key === 'End') {\n      column = this.visibleColumns.length - 1;\n      if (event.ctrlKey || event.metaKey) row = (treeDataItems?.length ?? this.visibleItems.length) - 1;\n    }\n    else if (this.matchesShortcut(event, 'beginEdit', ['enter', 'f2']) && (treeDataItems?.[row]?.row ?? this.visibleItems[row]) && this.visibleColumns[column]) {\n      event.preventDefault();\n      const editRow = treeDataItems?.[row]?.row ?? this.visibleItems[row];\n      this.beginEdit(editRow, this.controller.rows.indexOf(editRow), this.visibleColumns[column]);\n      return;\n    } else return;\n    event.preventDefault();\n    row = Math.min(Math.max(0, row), Math.max(0, (treeDataItems?.length ?? this.visibleItems.length) - 1));\n    column = Math.min(Math.max(0, column), Math.max(0, this.visibleColumns.length - 1));\n    const selectionRow = treeDataItems ? this.controller.rows.indexOf(treeDataItems[row].row) : row;\n    const selection = this.controller.selectRange({ rowStart: Math.max(0, selectionRow), rowEnd: Math.max(0, selectionRow), colStart: column, colEnd: column });\n    this.selectionChange.emit(selection);\n    this.valueChange(selection.rows);\n    this.touched();\n    if (this.virtualizationEnabled) this.renderedStart = Math.max(0, row - this.overscan);\n    if (this.viewport) {\n      const activeRow = this.controller.rows[selectionRow];\n      const displayRow = activeRow\n        ? this.displayItems.findIndex((item) => item.kind === 'data' && item.key === this.rowKey(activeRow))\n        : row;\n      this.viewport.nativeElement.scrollTop = Math.max(0, (displayRow < 0 ? row : displayRow) * this.rowHeight - this.height / 2);\n      const targetColumn = this.visibleColumns[column];\n      if (targetColumn) {\n        const columnOffset = this.layout.columnOffset(String(targetColumn.key));\n        const columnWidth = this.columnSize(targetColumn);\n        if (columnOffset < this.viewport.nativeElement.scrollLeft) this.viewport.nativeElement.scrollLeft = columnOffset;\n        else if (columnOffset + columnWidth > this.viewport.nativeElement.scrollLeft + this.viewport.nativeElement.clientWidth) {\n          this.viewport.nativeElement.scrollLeft = Math.max(0, columnOffset + columnWidth - this.viewport.nativeElement.clientWidth);\n        }\n      }\n    }\n    this.refreshWindow();\n  }\n\n  displayValue(row: T, column: GridColumn<T>): string {\n    const value = this.controller.getValue(row, column);\n    const dataMap = this.dataMapItems(column);\n    if (dataMap.length) return dataMap.find((item) => item.value === value)?.label ?? String(value ?? '');\n    if (column.formatter) return column.formatter(value, row);\n    if (value == null || value === '') return '';\n    if (column.dataType === 'currency' && typeof value === 'number') {\n      const locale = column.locale ?? this.locale;\n      const options = { style: 'currency', currency: column.currency ?? 'MXN', ...column.numberFormat } as Intl.NumberFormatOptions;\n      const key = `${locale}|${JSON.stringify(options)}`;\n      let formatter = this.numberFormatterCache.get(key);\n      if (!formatter) {\n        formatter = new Intl.NumberFormat(locale, options);\n        this.numberFormatterCache.set(key, formatter);\n      }\n      return formatter.format(value);\n    }\n    if (column.dataType === 'number' && typeof value === 'number' && column.numberFormat) {\n      const locale = column.locale ?? this.locale;\n      const key = `${locale}|${JSON.stringify(column.numberFormat)}`;\n      let formatter = this.numberFormatterCache.get(key);\n      if (!formatter) {\n        formatter = new Intl.NumberFormat(locale, column.numberFormat);\n        this.numberFormatterCache.set(key, formatter);\n      }\n      return formatter.format(value);\n    }\n    if (column.dataType === 'date') {\n      const date = value instanceof Date ? value : new Date(String(value));\n      if (!Number.isNaN(date.getTime())) {\n        const locale = column.locale ?? this.locale;\n        const options = column.dateFormat ?? { dateStyle: 'medium' };\n        const key = `${locale}|${JSON.stringify(options)}`;\n        let formatter = this.dateFormatterCache.get(key);\n        if (!formatter) {\n          formatter = new Intl.DateTimeFormat(locale, options);\n          this.dateFormatterCache.set(key, formatter);\n        }\n        return formatter.format(date);\n      }\n    }\n    return String(value);\n  }\n\n  highlightedValue(row: T, column: GridColumn<T>): string {\n    const value = escapeHtml(this.displayValue(row, column));\n    const query = this.searchText.trim();\n    if (!query) return value;\n    const escapedQuery = escapeHtml(query).replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n    return value.replace(new RegExp(`(${escapedQuery})`, 'gi'), '<mark>$1</mark>');\n  }\n\n  private matchesShortcut(event: KeyboardEvent, command: BriosGridKeyboardCommand, defaults: readonly string[]): boolean {\n    const configured = this.keyboardShortcuts[command];\n    if (configured === false) return false;\n    const shortcuts = configured === undefined ? defaults : [configured];\n    return shortcuts.some((shortcut) => this.matchesShortcutValue(event, shortcut));\n  }\n\n  private matchesShortcutValue(event: KeyboardEvent, shortcut: string): boolean {\n    const tokens = shortcut.toLocaleLowerCase().split('+').map((token) => token.trim()).filter(Boolean);\n    const keyToken = tokens.find((token) => !['mod', 'ctrl', 'control', 'cmd', 'meta', 'alt', 'option', 'shift'].includes(token));\n    if (!keyToken) return false;\n    const expectedKey = keyToken === 'esc' ? 'escape' : keyToken === 'space' ? ' ' : keyToken;\n    if (event.key.toLocaleLowerCase() !== expectedKey) return false;\n    const wantsMod = tokens.includes('mod');\n    const wantsCtrl = tokens.includes('ctrl') || tokens.includes('control');\n    const wantsMeta = tokens.includes('cmd') || tokens.includes('meta');\n    const wantsAlt = tokens.includes('alt') || tokens.includes('option');\n    const wantsShift = tokens.includes('shift');\n    const hasMod = event.ctrlKey || event.metaKey;\n    if (wantsMod ? !hasMod : wantsCtrl ? !event.ctrlKey : wantsMeta ? !event.metaKey : hasMod) return false;\n    if (event.ctrlKey && !wantsMod && !wantsCtrl) return false;\n    if (event.metaKey && !wantsMod && !wantsMeta) return false;\n    if (event.altKey !== wantsAlt || event.shiftKey !== wantsShift) return false;\n    return true;\n  }\n\n  cellTooltip(row: T, column: GridColumn<T>): string | null {\n    const value = this.controller.getValue(row, column);\n    if (column.tooltip) return typeof column.tooltip === 'function' ? column.tooltip(value, row) : column.tooltip;\n    if (!this.showTruncatedCellTooltip || column.wrap === true) return null;\n    const display = this.displayValue(row, column);\n    return display.length >= Math.max(1, this.truncatedTooltipMinLength) ? display : null;\n  }\n\n  cellAriaLabel(row: T, column: GridColumn<T>): string | null {\n    const tooltip = this.cellTooltip(row, column);\n    return tooltip ? `${column.header}: ${tooltip}` : null;\n  }\n\n  cellTemplate(column: GridColumn<T>): TemplateRef<BriosGridCellTemplateContext<T>> | null {\n    return this.templateMap.get(String(column.key)) ?? null;\n  }\n\n  editorTemplate(column: GridColumn<T>): TemplateRef<BriosGridEditorTemplateContext<T>> | null {\n    return this.editorTemplateMap.get(String(column.key)) ?? null;\n  }\n\n  editorContext(row: T, rowIndex: number, column: GridColumn<T>): BriosGridEditorTemplateContext<T> {\n    const rowEditing = this.isRowEditing(row);\n    const value = rowEditing ? this.rowEditValue(row, column) : this.editValue;\n    const mode: BriosGridEditorMode = rowEditing ? 'row' : 'cell';\n    return {\n      $implicit: value,\n      row,\n      rowIndex,\n      column,\n      value,\n      initialValue: this.controller.getValue(row, column),\n      selected: this.isSelected(row, rowIndex),\n      editing: true,\n      mode,\n      pending: this.validationPending || this.rowEditState(row) === 'pending',\n      validationError: rowEditing ? this.rowValidationError(row, rowIndex) : this.validationError || this.cellValidationError(row, rowIndex, column),\n      setValue: (next) => rowEditing ? this.setRowEditValue(row, column, next) : (this.editValue = next),\n      commit: () => rowEditing ? this.commitRowEdit() : this.commitEdit(),\n      cancel: () => rowEditing ? this.cancelRowEdit() : this.cancelEdit()\n    };\n  }\n\n  headerTemplate(column: GridColumn<T>): TemplateRef<BriosGridHeaderTemplateContext<T>> | null {\n    return this.headerTemplateMap.get(String(column.key)) ?? null;\n  }\n\n  headerContext(column: GridColumn<T>): BriosGridHeaderTemplateContext<T> {\n    return { $implicit: column, column };\n  }\n\n  footerTemplate(column: GridColumn<T>): TemplateRef<BriosGridFooterTemplateContext<T>> | null {\n    return this.footerTemplateMap.get(String(column.key)) ?? null;\n  }\n\n  footerContext(column: GridColumn<T>): BriosGridFooterTemplateContext<T> {\n    const rows = this.childrenField ? this.controller.allTreeData : this.controller.rows;\n    return { $implicit: column, column, value: this.controller.footerValue(column, rows), rows };\n  }\n\n  stateTemplate(state: BriosGridState): TemplateRef<BriosGridStateTemplateContext> | null {\n    return this.stateTemplateMap.get(state) ?? null;\n  }\n\n  stateTemplateContext(state: BriosGridState): BriosGridStateTemplateContext {\n    return { $implicit: state, state, error: this.remoteError, retry: () => this.retry() };\n  }\n\n  cellContext(row: T, rowIndex: number, column: GridColumn<T>): BriosGridCellTemplateContext<T> {\n    return { $implicit: row, row, rowIndex, column, value: this.controller.getValue(row, column), selected: this.isSelected(row, rowIndex), editing: false };\n  }\n\n  cellValidationError(row: T, rowIndex: number, column: GridColumn<T>): string {\n    return this.validationMessages.get(this.validationKey(row, rowIndex, column)) ?? '';\n  }\n\n  validationContext(row: T, rowIndex: number, column: GridColumn<T>, message: string, pending = false): BriosGridValidationTemplateContext<T> {\n    return { $implicit: message, message, row, rowIndex, column, pending };\n  }\n\n  rowValidationError(row: T, rowIndex: number): string {\n    for (const column of this.columns) {\n      const message = this.cellValidationError(row, rowIndex, column);\n      if (message) return message;\n    }\n    return '';\n  }\n\n  private validationKey(row: T, rowIndex: number, column: GridColumn<T>): string {\n    return `${String(this.controller.keyFor(row, rowIndex))}::${String(column.key)}`;\n  }\n\n  private setCellValidationError(row: T, rowIndex: number, column: GridColumn<T>, message: string | null): void {\n    const key = this.validationKey(row, rowIndex, column);\n    if (message) this.validationMessages.set(key, message);\n    else this.validationMessages.delete(key);\n  }\n\n  private clearRowValidationErrors(row: T, rowIndex: number): void {\n    for (const column of this.columns) this.setCellValidationError(row, rowIndex, column, null);\n  }\n\n  editorAriaLabel(column: GridColumn<T>): string {\n    return column.header || String(column.key);\n  }\n\n  editorType(column: GridColumn<T>): string {\n    return column.editor?.type ?? column.dataType ?? 'text';\n  }\n\n  editorInputType(column: GridColumn<T>): 'number' | 'date' | 'text' {\n    const type = this.editorType(column);\n    return type === 'number' ? 'number' : type === 'date' ? 'date' : 'text';\n  }\n\n  currencyPlaceholder(column: GridColumn<T>): string {\n    return new Intl.NumberFormat(column.locale ?? this.locale, { style: 'currency', currency: column.currency ?? 'MXN' }).format(0);\n  }\n\n  editorInputValue(value: unknown, column: GridColumn<T>): unknown {\n    return this.editorType(column) === 'currency' && typeof value === 'number' ? String(value) : value;\n  }\n\n  coerceEditorValue(column: GridColumn<T>, value: unknown): unknown {\n    return this.editorType(column) === 'currency' ? this.parseLocalizedNumber(value, column.locale ?? this.locale) : value;\n  }\n\n  private parseLocalizedNumber(value: unknown, locale: string): number | null {\n    if (value === null || value === undefined || String(value).trim() === '') return null;\n    const parts = new Intl.NumberFormat(locale).formatToParts(12345.6);\n    const group = parts.find((part) => part.type === 'group')?.value ?? ',';\n    const decimal = parts.find((part) => part.type === 'decimal')?.value ?? '.';\n    const normalized = String(value).trim().split(group).join('').split(decimal).join('.').replace(/[^0-9.+-]/g, '');\n    const parsed = Number(normalized);\n    return Number.isFinite(parsed) ? parsed : null;\n  }\n\n  editorOptions(column: GridColumn<T>): readonly { value: unknown; label: string }[] {\n    return column.editor?.options ?? this.dataMapItems(column);\n  }\n\n  private dataMapItems(column: GridColumn<T>): readonly { value: unknown; label: string }[] {\n    if (!column.dataMap) return [];\n    return 'items' in column.dataMap ? column.dataMap.items : column.dataMap;\n  }\n\n  beginEdit(row: T, rowIndex: number, column: GridColumn<T>): void {\n    if (!column.editable || column.readonly || this.loading) return;\n    const before: GridBeforeEditEvent<T> = { row, rowIndex, column, value: this.controller.getValue(row, column), cancel: false };\n    this.beforeEdit.emit(before);\n    if (before.cancel) return;\n    this.activeEdit = { row, rowIndex, column };\n    this.validationError = '';\n    this.setCellValidationError(row, rowIndex, column, null);\n    this.editValue = this.controller.getValue(row, column);\n    this.changeDetector.markForCheck();\n  }\n\n  isEditing(row: T, rowIndex: number, column: GridColumn<T>): boolean {\n    if (!this.activeEdit || this.activeEdit.column.key !== column.key) return false;\n    return this.controller.keyFor(row, rowIndex) === this.controller.keyFor(this.activeEdit.row, this.activeEdit.rowIndex);\n  }\n\n  private currentRowForCellEdit(edit: ActiveEdit<T>): T {\n    const targetKey = this.controller.keyFor(edit.row, edit.rowIndex);\n    return this.controller.allData.find((row, index) => this.controller.keyFor(row, index) === targetKey) ?? edit.row;\n  }\n\n  async commitEdit(): Promise<void> {\n    if (!this.activeEdit || this.validationPending) return;\n    const edit = this.activeEdit;\n    const current = this.currentRowForCellEdit(edit);\n    this.validationPending = true;\n    this.changeDetector.markForCheck();\n    let validation: GridValidationResult | undefined;\n    try {\n      validation = await this.controller.validateCell(current, edit.column, this.editValue);\n    } finally {\n      this.validationPending = false;\n      this.changeDetector.markForCheck();\n    }\n    if (!validation) return;\n    this.validation.emit(validation);\n    if (!validation.valid) {\n      this.validationError = validation.message ?? (this.labels.invalid || 'Valor inválido');\n      this.setCellValidationError(edit.row, edit.rowIndex, edit.column, this.validationError);\n      this.changeDetector.markForCheck();\n      return;\n    }\n    this.setCellValidationError(edit.row, edit.rowIndex, edit.column, null);\n    const value = this.coerceValue(edit.column, this.editValue);\n    const changes = { [edit.column.key]: value } as Partial<T>;\n    const beforeCommit: GridBeforeCommitEvent<T> = { row: current, rowIndex: edit.rowIndex, changes, cancel: false };\n    this.beforeCommit.emit(beforeCommit);\n    if (beforeCommit.cancel) return;\n    const result = this.controller.updateCell(current, edit.column, value);\n    this.activeEdit = null;\n    this.validationError = '';\n    if (result) {\n      const change = { row: result.row, rowIndex: result.rowIndex, column: edit.column, previousValue: result.previousValue, value: result.row[edit.column.key] };\n      this.cellEditCommit.emit(change);\n      if (!this.activeRowEdit) this.commit.emit({ row: result.row, rowIndex: result.rowIndex, previous: { ...current }, current: result.row, changes });\n      if (this.dataSource?.update) {\n        const remoteKey = this.controller.keyFor(result.row, result.rowIndex);\n        this.remoteEditErrors.delete(remoteKey);\n        this.remoteEditPendingKeys.add(remoteKey);\n        this.changeDetector.markForCheck();\n        void this.controller.updateRemoteRow(result.row, changes).then(() => {\n          this.remoteEditPendingKeys.delete(remoteKey);\n          this.remoteEditErrors.delete(remoteKey);\n          this.changeDetector.markForCheck();\n          this.refreshRows();\n        }).catch((error) => {\n          this.remoteEditPendingKeys.delete(remoteKey);\n          this.remoteEditErrors.set(remoteKey, error);\n          this.controller.updateCell(result.row, edit.column, result.previousValue);\n          this.error.emit(error);\n          this.changeDetector.markForCheck();\n          this.refreshRows();\n        });\n      }\n    }\n    this.refreshRows();\n  }\n\n  handleEditBlur(): void {\n    if (this.editCommitMode === 'auto') void this.commitEdit();\n  }\n\n  cancelEdit(): void {\n    if (this.activeEdit) {\n      this.clearRowValidationErrors(this.activeEdit.row, this.activeEdit.rowIndex);\n      this.cancel.emit({ row: this.activeEdit.row, rowIndex: this.activeEdit.rowIndex });\n    }\n    this.activeEdit = null;\n    this.validationError = '';\n    this.changeDetector.markForCheck();\n  }\n\n  beginRowEdit(row: T, rowIndex: number, isNew = false): void {\n    if (this.loading || this.disabled) return;\n    const before: GridBeforeEditEvent<T> = { row, rowIndex, cancel: false };\n    this.beforeEdit.emit(before);\n    if (before.cancel) return;\n    this.activeRowEdit = { row, rowIndex, original: { ...row }, isNew };\n    const key = this.controller.keyFor(row, rowIndex);\n    this.remoteEditErrors.delete(key);\n    this.rowEditValues.set(key, {});\n    this.validationError = '';\n    this.clearRowValidationErrors(row, rowIndex);\n    this.changeDetector.markForCheck();\n  }\n\n  isRowEditing(row: T): boolean {\n    if (!this.activeRowEdit) return false;\n    return this.controller.keyFor(row, this.activeRowEdit.rowIndex) === this.controller.keyFor(this.activeRowEdit.row, this.activeRowEdit.rowIndex);\n  }\n\n  rowEditValue(row: T, column: GridColumn<T>): unknown {\n    const key = this.controller.keyFor(row, this.controller.allData.indexOf(row));\n    const values = this.rowEditValues.get(key);\n    return values && column.key in values ? values[column.key] : this.controller.getValue(row, column);\n  }\n\n  rowEditState(row: T): 'idle' | 'editing' | 'pending' | 'server-error' {\n    const rowIndex = this.controller.allData.indexOf(row);\n    const key = this.controller.keyFor(row, rowIndex < 0 ? 0 : rowIndex);\n    if (this.remoteEditPendingKeys.has(key)) return 'pending';\n    if (this.remoteEditErrors.has(key)) return 'server-error';\n    return this.isRowEditing(row) ? 'editing' : 'idle';\n  }\n\n  rowServerError(row: T): unknown {\n    const rowIndex = this.controller.allData.indexOf(row);\n    return this.remoteEditErrors.get(this.controller.keyFor(row, rowIndex < 0 ? 0 : rowIndex));\n  }\n\n  setRowEditValue(row: T, column: GridColumn<T>, value: unknown): void {\n    if (!this.isRowEditing(row) || column.readonly) return;\n    const rowIndex = this.controller.allData.indexOf(row);\n    const key = this.controller.keyFor(row, rowIndex);\n    const nextValue = this.coerceValue(column, value);\n    const next = { ...(this.rowEditValues.get(key) ?? {}), [column.key]: nextValue } as Partial<T>;\n    this.rowEditValues.set(key, next);\n    this.changeDetector.markForCheck();\n  }\n\n  private rowEditDraft(row: T, key: GridKey): T {\n    const values = this.rowEditValues.get(key);\n    if (!values) return row;\n    let draft = row;\n    for (const column of this.columns) {\n      if (!(column.key in values)) continue;\n      const value = values[column.key];\n      draft = column.setValue ? column.setValue(draft, value) : { ...draft, [column.key]: value } as T;\n    }\n    return draft;\n  }\n\n  private currentRowForEdit(): T | undefined {\n    if (!this.activeRowEdit) return undefined;\n    const targetKey = this.controller.keyFor(this.activeRowEdit.row, this.activeRowEdit.rowIndex);\n    return this.controller.allData.find((row, index) => this.controller.keyFor(row, index) === targetKey);\n  }\n\n  async commitRowEdit(): Promise<void> {\n    if (!this.activeRowEdit) return;\n    const edit = this.activeRowEdit;\n    const current = this.currentRowForEdit();\n    if (!current) return;\n    const editKey = this.controller.keyFor(edit.original, edit.rowIndex);\n    const draft = this.rowEditDraft(current, editKey);\n    this.validationPending = true;\n    this.changeDetector.markForCheck();\n    try {\n      for (const column of this.columns) {\n        if (!column.editable || column.readonly) continue;\n        const validation = await this.controller.validateCell(draft, column, this.controller.getValue(draft, column));\n        this.validation.emit(validation);\n        if (!validation.valid) {\n          this.validationError = validation.message ?? (this.labels.invalid || 'Valor inválido');\n          this.setCellValidationError(current, edit.rowIndex, column, this.validationError);\n          this.focusValidationCell(current, edit.rowIndex, column);\n          this.changeDetector.markForCheck();\n          return;\n        }\n        this.setCellValidationError(current, edit.rowIndex, column, null);\n      }\n    } finally {\n      this.validationPending = false;\n      this.changeDetector.markForCheck();\n    }\n    const changes: Partial<T> = {};\n    for (const column of this.columns) {\n      const previousValue = this.controller.getValue(current, column);\n      const currentValue = this.controller.getValue(draft, column);\n      if (!Object.is(previousValue, currentValue)) (changes as Record<string, unknown>)[column.key] = currentValue;\n    }\n    const before: GridBeforeCommitEvent<T> = { row: draft, rowIndex: edit.rowIndex, changes, cancel: false };\n    this.beforeCommit.emit(before);\n    if (before.cancel) {\n      this.controller.replaceRowByKey(editKey, current);\n      this.activeRowEdit = null;\n      this.rowEditValues.delete(editKey);\n      this.clearRowValidationErrors(current, edit.rowIndex);\n      this.refreshRows();\n      this.cancel.emit({ row: current, rowIndex: edit.rowIndex });\n      return;\n    }\n    this.controller.replaceRowByKey(editKey, draft);\n    let committed = draft;\n    const hasRemoteOperation = Boolean(edit.isNew ? this.dataSource?.create : this.dataSource?.update);\n    if (hasRemoteOperation) {\n      this.remoteEditErrors.delete(editKey);\n      this.remoteEditPendingKeys.add(editKey);\n      this.changeDetector.markForCheck();\n    }\n    try {\n      if (edit.isNew && this.dataSource?.create) committed = await this.controller.persistRemoteCreate(draft) ?? draft;\n      else if (!edit.isNew && this.dataSource?.update) committed = await this.controller.updateRemoteRow(draft, changes) ?? draft;\n    } catch (error) {\n      if (hasRemoteOperation) {\n        this.remoteEditPendingKeys.delete(editKey);\n        this.remoteEditErrors.set(editKey, error);\n      }\n      if (edit.isNew) this.controller.removeRow(current);\n      else this.controller.replaceRowByKey(editKey, current);\n      if (!edit.isNew && this.dataSource?.resolveConflict) {\n        this.announceRemoteConflict(current, edit.rowIndex, changes, error);\n      }\n      this.activeRowEdit = null;\n      this.rowEditValues.delete(editKey);\n      this.clearRowValidationErrors(current, edit.rowIndex);\n      this.error.emit(error);\n      this.cancel.emit({ row: current, rowIndex: edit.rowIndex });\n      this.refreshRows();\n      return;\n    }\n    if (hasRemoteOperation) {\n      this.remoteEditPendingKeys.delete(editKey);\n      this.remoteEditErrors.delete(editKey);\n    }\n    const change: GridRowChange<T> = { row: committed, rowIndex: edit.rowIndex, previous: current, current: committed, changes };\n    this.remoteConflictState = null;\n    this.activeRowEdit = null;\n    this.rowEditValues.delete(editKey);\n    this.clearRowValidationErrors(current, edit.rowIndex);\n    this.validationError = '';\n    this.commit.emit(change);\n    if (edit.isNew) this.rowAdd.emit(change);\n    this.refreshRows();\n  }\n\n  /** Applies one validated change set to every selected row and persists it when possible. */\n  async applySelectionChanges(changes: Partial<T>): Promise<readonly GridRowChange<T>[]> {\n    if (this.disabled) return [];\n    const rows = this.controller.selectedRows;\n    if (!rows.length) return [];\n    for (const row of rows) {\n      for (const column of this.columns) {\n        if (!(column.key in changes) || column.readonly || column.editable === false) continue;\n        const result = await this.controller.validateCell(row, column, changes[column.key]);\n        this.validation.emit(result);\n        if (!result.valid) {\n          this.validationError = result.message ?? (this.labels.invalid || 'Valor inválido');\n          this.changeDetector.markForCheck();\n          return [];\n        }\n      }\n    }\n    const transaction = this.controller.beginTransaction();\n    const local = this.controller.updateRows(rows.map((row) => ({ row, changes })));\n    const batch: readonly GridBatchUpdate<T>[] = local.map((entry) => ({ key: this.controller.keyFor(entry.previous, entry.rowIndex), changes: entry.changes }));\n    const pendingKeys = local.map((entry) => this.controller.keyFor(entry.previous, entry.rowIndex));\n    try {\n      if (this.dataSource?.updateMany || this.dataSource?.update) {\n        for (const key of pendingKeys) {\n          this.remoteEditErrors.delete(key);\n          this.remoteEditPendingKeys.add(key);\n        }\n        this.changeDetector.markForCheck();\n        await this.controller.updateRemoteRows(batch);\n      }\n    } catch (error) {\n      const partial = isGridRemotePartialConflictError<T>(error) ? error : null;\n      transaction.rollback();\n      if (partial) {\n        const resolvedKeys = new Set(partial.resolved.map((item) => item.key));\n        for (const resolved of partial.resolved) {\n          this.controller.replaceRowByKey(resolved.key, resolved.row);\n          this.remoteEditPendingKeys.delete(resolved.key);\n          this.remoteEditErrors.delete(resolved.key);\n        }\n        for (const key of pendingKeys) {\n          this.remoteEditPendingKeys.delete(key);\n          if (!resolvedKeys.has(key)) this.remoteEditErrors.set(key, error);\n        }\n        const conflicts = partial.conflicts.map((context) => {\n          const rowIndex = this.controller.allData.findIndex((row, index) => this.controller.keyFor(row, index) === context.key);\n          return { key: context.key, row: context.row, rowIndex, changes: context.changes, error: context.error } satisfies BriosGridRemoteConflict<T>;\n        });\n        this.remoteConflictBulkState = { conflicts, changes, error: partial.originalError };\n        this.remoteConflictBulk.emit(this.remoteConflictBulkState);\n        this.error.emit(error);\n        this.refreshRows();\n        return [];\n      }\n      for (const key of pendingKeys) {\n        this.remoteEditPendingKeys.delete(key);\n        this.remoteEditErrors.set(key, error);\n      }\n      if (rows[0] && this.dataSource?.resolveConflict) {\n        this.announceRemoteConflictBulk(rows, changes, error);\n      }\n      this.error.emit(error);\n      this.refreshRows();\n      return [];\n    }\n    for (const key of pendingKeys) {\n      this.remoteEditPendingKeys.delete(key);\n      this.remoteEditErrors.delete(key);\n    }\n    transaction.commit();\n    const committed = local.map((entry) => ({ row: entry.row, rowIndex: entry.rowIndex, previous: entry.previous, current: entry.row, changes: entry.changes } satisfies GridRowChange<T>));\n    this.validationError = '';\n    this.bulkCommit.emit(committed);\n    for (const change of committed) this.commit.emit(change);\n    this.refreshRows();\n    return committed;\n  }\n\n  cancelRowEdit(): void {\n    if (!this.activeRowEdit) return;\n    const edit = this.activeRowEdit;\n    const editKey = this.controller.keyFor(edit.original, edit.rowIndex);\n    const current = this.currentRowForEdit() ?? edit.original;\n    this.activeRowEdit = null;\n    this.rowEditValues.delete(editKey);\n    this.remoteEditPendingKeys.delete(editKey);\n    this.remoteEditErrors.delete(editKey);\n    this.validationError = '';\n    if (this.remoteConflictState?.key === editKey) this.remoteConflictState = null;\n    this.clearRowValidationErrors(current, edit.rowIndex);\n    this.cancel.emit({ row: current, rowIndex: edit.rowIndex });\n    this.refreshRows();\n  }\n\n  retryRemoteConflict(): void {\n    const conflict = this.remoteConflictState;\n    if (!conflict) return;\n    const row = this.controller.allData.find((item, index) => this.controller.keyFor(item, index) === conflict.key) ?? conflict.row;\n    this.remoteConflictState = null;\n    this.remoteEditPendingKeys.delete(conflict.key);\n    this.remoteEditErrors.delete(conflict.key);\n    this.beginRowEdit(row, this.controller.allData.indexOf(row));\n    this.changeDetector.markForCheck();\n  }\n\n  retryRemoteConflictBulk(): void {\n    const conflict = this.remoteConflictBulkState;\n    if (!conflict) return;\n    this.remoteConflictBulkState = null;\n    this.controller.selectKeys(conflict.conflicts.map((item) => item.key));\n    void this.applySelectionChanges(conflict.changes);\n    this.changeDetector.markForCheck();\n  }\n\n  dismissRemoteConflictBulk(): void {\n    this.remoteConflictBulkState = null;\n    this.changeDetector.markForCheck();\n  }\n\n  dismissRemoteConflict(): void {\n    this.remoteConflictState = null;\n    this.changeDetector.markForCheck();\n  }\n\n  private announceRemoteConflict(row: T, rowIndex: number, changes: Partial<T>, error: unknown): void {\n    const conflict: BriosGridRemoteConflict<T> = {\n      key: this.controller.keyFor(row, rowIndex),\n      row,\n      rowIndex,\n      changes,\n      error\n    };\n    this.remoteConflictState = conflict;\n    this.remoteConflict.emit(conflict);\n    this.changeDetector.markForCheck();\n  }\n\n  private announceRemoteConflictBulk(rows: readonly T[], changes: Partial<T>, error: unknown): void {\n    const conflicts = rows.map((row) => {\n      const rowIndex = this.controller.allData.indexOf(row);\n      return {\n        key: this.controller.keyFor(row, rowIndex),\n        row,\n        rowIndex,\n        changes,\n        error\n      } satisfies BriosGridRemoteConflict<T>;\n    });\n    this.remoteConflictBulkState = { conflicts, changes, error };\n    this.remoteConflictBulk.emit(this.remoteConflictBulkState);\n    this.changeDetector.markForCheck();\n  }\n\n  private focusValidationCell(row: T, rowIndex: number, column: GridColumn<T>): void {\n    const visibleRowIndex = this.controller.rows.indexOf(row);\n    const columnIndex = this.globalColumnIndex(column);\n    if (visibleRowIndex < 0 || columnIndex < 0) return;\n    this.controller.selectRange({ rowStart: visibleRowIndex, rowEnd: visibleRowIndex, colStart: columnIndex, colEnd: columnIndex });\n    this.changeDetector.markForCheck();\n    queueMicrotask(() => {\n      const cell = typeof document === 'undefined' ? null : document.getElementById(this.cellId(visibleRowIndex, columnIndex));\n      cell?.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n      cell?.querySelector<HTMLElement>('.brios-grid__editor')?.focus();\n    });\n  }\n\n  addRow(): void {\n    const row = {} as T;\n    for (const column of this.columns) (row as Record<string, unknown>)[String(column.key)] = null;\n    this.controller.addRow(row, true);\n    this.refreshRows();\n    const current = this.controller.allData[0];\n    if (current) this.beginRowEdit(current, 0, true);\n  }\n\n  async removeRow(row: T, rowIndex: number): Promise<void> {\n    if (this.disabled) return;\n    if (this.confirmRemove && !(await this.confirmRemove(row))) return;\n    try {\n      if (this.dataSource?.remove) await this.controller.removeRemoteRow(row, this.optimisticMutations);\n      else if (!this.controller.removeRow(row)) return;\n      this.rowRemove.emit({ row, rowIndex });\n      this.refreshRows();\n    } catch (error) {\n      this.error.emit(error);\n    }\n  }\n\n  async reload(): Promise<void> {\n    const request = ++this.requestId;\n    this.cancelHierarchyLoads();\n    this.loading = true;\n    this.controller.setRetryOptions({ retries: this.remoteRetries, delayMs: this.remoteRetryDelayMs, backoff: this.remoteRetryBackoff, shouldRetry: this.remoteShouldRetry });\n    this.changeDetector.markForCheck();\n    try {\n      await this.controller.load();\n      if (request !== this.requestId) return;\n      this.refreshRows();\n    } catch (error) {\n      if (request === this.requestId) this.error.emit(error);\n    } finally {\n      if (request === this.requestId) {\n        this.loading = false;\n        this.changeDetector.markForCheck();\n      }\n    }\n  }\n\n  async retry(): Promise<void> {\n    await this.reload();\n  }\n\n  async loadNextCursor(): Promise<boolean> {\n    if (!this.dataSource || !this.controller.hasNextCursor) return false;\n    const request = ++this.requestId;\n    this.loading = true;\n    this.changeDetector.markForCheck();\n    try {\n      const loaded = await this.controller.loadNextCursor();\n      if (request !== this.requestId) return false;\n      if (loaded) this.refreshRows();\n      return loaded;\n    } finally {\n      if (request === this.requestId) {\n        this.loading = false;\n        this.changeDetector.markForCheck();\n      }\n    }\n  }\n\n  setCursor(cursor: string | null): void {\n    this.controller.setCursor(cursor);\n    this.scheduleRemoteReload();\n  }\n\n  private scheduleRemoteReload(): void {\n    if (!this.dataSource) return;\n    if (this.remoteReloadTimer) clearTimeout(this.remoteReloadTimer);\n    this.remoteReloadTimer = setTimeout(() => { this.remoteReloadTimer = undefined; void this.reload(); }, Math.max(0, this.remoteDebounceMs));\n  }\n\n  copySelection(mode: BriosGridCopyMode = 'selection'): string {\n    const selection = this.controller.getSelection();\n    const processedRows = this.controller.rows;\n    if (mode === 'selection' && selection.ranges.length > 1) {\n      const blocks = selection.ranges.map((range) => {\n        const columns = this.visibleColumns.slice(Math.max(0, range.colStart), Math.min(this.visibleColumns.length, range.colEnd + 1));\n        const rows = processedRows.slice(Math.max(0, range.rowStart), Math.min(processedRows.length, range.rowEnd + 1));\n        return this.formatClipboardBlock(rows, columns);\n      }).filter((block) => block.length > 0);\n      const text = blocks.join('\\n\\n');\n      this.writeClipboard(text);\n      return text;\n    }\n    const range = selection.ranges[0];\n    const active = this.controller.activeCell;\n    const activeRow = active ? processedRows[active.row] : undefined;\n    const columns = mode === 'activeCell' && active\n      ? this.visibleColumns.slice(active.column, active.column + 1)\n      : mode === 'column' && active\n        ? this.visibleColumns.slice(active.column, active.column + 1)\n        : range\n      ? this.visibleColumns.slice(Math.max(0, range.colStart), Math.min(this.visibleColumns.length, range.colEnd + 1))\n      : this.visibleColumns;\n    const rows = mode === 'activeCell' && activeRow\n      ? [activeRow]\n      : mode === 'row' && activeRow\n        ? [activeRow]\n        : mode === 'column'\n          ? processedRows\n          : mode === 'range' && range\n            ? processedRows.slice(Math.max(0, range.rowStart), Math.min(processedRows.length, range.rowEnd + 1))\n            : range\n      ? processedRows.slice(Math.max(0, range.rowStart), Math.min(processedRows.length, range.rowEnd + 1))\n      : this.controller.selectedRows;\n    const fallbackRows = this.renderedItems.filter((item): item is GridDataDisplayRow<T> => item.kind === 'data').map((item) => item.row);\n    const selectedRows = rows.length ? rows : fallbackRows;\n    const text = this.formatClipboardBlock(selectedRows, columns);\n    this.writeClipboard(text);\n    return text;\n  }\n\n  private formatClipboardBlock(rows: readonly T[], columns: readonly GridColumn<T>[]): string {\n    if (!rows.length || !columns.length) return '';\n    const header = this.copyHeaders ? `${columns.map((column) => column.header).join('\\t')}\\n` : '';\n    return header + rows.map((row) => columns.map((column) => this.displayValue(row, column)).join('\\t')).join('\\n');\n  }\n\n  downloadCsv(): void {\n    void this.downloadCsvAsync();\n  }\n\n  async downloadCsvAsync(): Promise<void> {\n    if (typeof document === 'undefined' || this.exporting) return;\n    this.exportAbort?.abort();\n    const abort = new AbortController();\n    this.exportAbort = abort;\n    this.exporting = true;\n    this.exportError = null;\n    this.exportProgress = { processed: 0, total: 0, ratio: 0 };\n    this.emitExportState('running');\n    try {\n      const exportOptions = await this.prepareExportOptions(abort.signal);\n      this.exportProgress = { processed: 0, total: exportOptions.displayRows?.length ?? exportOptions.rows.length, ratio: 0 };\n      this.emitExportState('running');\n      const csv = await toCsvAsync({\n        ...exportOptions,\n        chunkSize: this.exportChunkSize,\n        signal: abort.signal,\n        onProgress: (progress) => {\n          this.exportProgress = progress;\n          this.changeDetector.markForCheck();\n          this.emitExportState('running');\n        }\n      });\n      if (abort.signal.aborted) return;\n      this.downloadBlob(new Blob([csv], { type: 'text/csv;charset=utf-8' }), 'brios-grid.csv');\n      this.exportProgress = { processed: this.exportProgress.total, total: this.exportProgress.total, ratio: 1 };\n      this.emitExportState('completed');\n    } catch (error: unknown) {\n      if (abort.signal.aborted || (error as { name?: string })?.name === 'AbortError') {\n        this.emitExportState('cancelled');\n        return;\n      }\n      this.exportError = error;\n      this.error.emit(error);\n      this.emitExportState('error');\n    } finally {\n      if (this.exportAbort === abort) this.exportAbort = undefined;\n      this.exporting = false;\n      this.changeDetector.markForCheck();\n    }\n  }\n\n  downloadExcel(): void {\n    if (typeof document === 'undefined' || this.exporting) return;\n    this.exportAbort?.abort();\n    const abort = new AbortController();\n    this.exportAbort = abort;\n    this.exporting = true;\n    this.exportError = null;\n    this.exportProgress = { processed: 0, total: 0, ratio: 0 };\n    this.emitExportState('running');\n    void this.prepareExportOptions(abort.signal).then((exportOptions) => {\n      if (abort.signal.aborted) return undefined;\n      this.exportProgress = { processed: 0, total: exportOptions.rows.length, ratio: 0 };\n      return toXlsxAsync({\n        ...exportOptions,\n        sheetName: 'Brios Grid',\n        chunkSize: this.exportChunkSize,\n        signal: abort.signal,\n        onProgress: (progress) => {\n          this.exportProgress = progress;\n          this.changeDetector.markForCheck();\n          this.emitExportState('running');\n        }\n      });\n    }).then((workbook) => {\n      if (!workbook) return;\n      if (abort.signal.aborted) return;\n      this.downloadBlob(new Blob([workbook], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }), 'brios-grid.xlsx');\n      this.exportProgress = { processed: this.exportProgress.total, total: this.exportProgress.total, ratio: 1 };\n      this.emitExportState('completed');\n    }).catch((error: unknown) => {\n      if (abort.signal.aborted || (error as { name?: string })?.name === 'AbortError') {\n        this.emitExportState('cancelled');\n        return;\n      }\n      this.exportError = error;\n      this.error.emit(error);\n      this.emitExportState('error');\n    }).finally(() => {\n      if (this.exportAbort === abort) this.exportAbort = undefined;\n      this.exporting = false;\n      this.changeDetector.markForCheck();\n    });\n  }\n\n  cancelExport(): void {\n    if (!this.exporting) return;\n    this.exportAbort?.abort();\n    this.exporting = false;\n    this.emitExportState('cancelled');\n    this.changeDetector.markForCheck();\n  }\n\n  downloadPdf(): void {\n    void this.downloadPdfAsync();\n  }\n\n  private async downloadPdfAsync(): Promise<void> {\n    if (typeof document === 'undefined' || this.exporting) return;\n    this.exportAbort?.abort();\n    const abort = new AbortController();\n    this.exportAbort = abort;\n    this.exporting = true;\n    this.exportError = null;\n    this.exportProgress = { processed: 0, total: 0, ratio: 0 };\n    this.emitExportState('running');\n    try {\n      const exportOptions = await this.prepareExportOptions(abort.signal);\n      this.exportProgress = { processed: 0, total: exportOptions.rows.length, ratio: 0 };\n      const pdf = toPdf({ ...exportOptions, title: 'Brios Grid', signal: abort.signal, onProgress: (progress) => {\n        this.exportProgress = progress;\n        this.emitExportState('running');\n      } });\n      if (abort.signal.aborted) return;\n      this.downloadBlob(new Blob([pdf], { type: 'application/pdf' }), 'brios-grid.pdf');\n      this.exportProgress = { processed: this.exportProgress.total, total: this.exportProgress.total, ratio: 1 };\n      this.emitExportState('completed');\n    } catch (error: unknown) {\n      if (abort.signal.aborted || (error as { name?: string })?.name === 'AbortError') {\n        this.emitExportState('cancelled');\n        return;\n      }\n      this.exportError = error;\n      this.error.emit(error);\n      this.emitExportState('error');\n    } finally {\n      if (this.exportAbort === abort) this.exportAbort = undefined;\n      this.exporting = false;\n      this.changeDetector.markForCheck();\n    }\n  }\n\n  printGrid(): void {\n    if (typeof window === 'undefined' || typeof document === 'undefined') return;\n    const printWindow = window.open('', '_blank', 'noopener,noreferrer,width=1200,height=800');\n    if (!printWindow) return;\n    printWindow.document.write(toPrintHtml({ ...this.exportOptions(), title: 'Brios Grid' }));\n    printWindow.document.close();\n    printWindow.focus();\n    printWindow.print();\n  }\n\n  onContextMenu(event: MouseEvent, row: T, rowIndex: number): void {\n    event.preventDefault();\n    this.contextMenuFocusOrigin = this.captureContextMenuFocus(event);\n    this.contextMenuState = { event, row, rowIndex };\n    this.contextMenu.emit({ event, row, rowIndex });\n    this.changeDetector.markForCheck();\n    const firstEnabled = this.contextMenuItems.find((item) => !this.isContextMenuItemDisabled(item));\n    if (typeof document !== 'undefined' && firstEnabled) setTimeout(() => document.getElementById(this.contextMenuItemId(firstEnabled))?.focus(), 0);\n  }\n\n  private captureContextMenuFocus(event: MouseEvent): HTMLElement | null {\n    if (typeof document !== 'undefined' && document.activeElement instanceof HTMLElement && document.activeElement !== document.body) return document.activeElement;\n    const target = event.currentTarget instanceof HTMLElement ? event.currentTarget : event.target instanceof HTMLElement ? event.target : null;\n    return target?.closest<HTMLElement>('table[tabindex], [role=\"grid\"][tabindex]') ?? target;\n  }\n\n  private closeContextMenu(restoreFocus = true): void {\n    if (!this.contextMenuState) return;\n    this.contextMenuState = null;\n    this.changeDetector.markForCheck();\n    const origin = this.contextMenuFocusOrigin;\n    this.contextMenuFocusOrigin = null;\n    if (restoreFocus && origin) setTimeout(() => origin.isConnected && origin.focus(), 0);\n  }\n\n  contextMenuItemId(item: GridContextMenuItem<T>): string {\n    return `brios-grid-context-menu-${this.contextMenuState?.rowIndex ?? 0}-${item.id}`;\n  }\n\n  isFirstContextMenuItem(index: number): boolean {\n    const first = this.contextMenuItems.findIndex((item) => !this.isContextMenuItemDisabled(item));\n    return first >= 0 && index === first;\n  }\n\n  onContextMenuKeydown(event: KeyboardEvent, item: GridContextMenuItem<T>): void {\n    const enabled = this.contextMenuItems.filter((candidate) => !this.isContextMenuItemDisabled(candidate));\n    const index = enabled.findIndex((candidate) => candidate.id === item.id);\n    const delta = event.key === 'ArrowDown' ? 1 : event.key === 'ArrowUp' ? -1 : 0;\n    const target = event.key === 'Home' ? enabled[0] : event.key === 'End' ? enabled[enabled.length - 1] : delta && enabled.length ? enabled[(index + delta + enabled.length) % enabled.length] : undefined;\n    if (event.key === 'Enter' || event.key === ' ') { event.preventDefault(); this.runContextMenuItem(item); return; }\n    if (event.key === 'Escape') { event.preventDefault(); this.closeContextMenu(); return; }\n    if (!target) return;\n    event.preventDefault();\n    if (typeof document !== 'undefined') queueMicrotask(() => document.getElementById(this.contextMenuItemId(target))?.focus());\n  }\n\n  isContextMenuItemDisabled(item: GridContextMenuItem<T>): boolean {\n    if (!this.contextMenuState) return true;\n    return typeof item.disabled === 'function' ? item.disabled(this.contextMenuState.row) : Boolean(item.disabled);\n  }\n\n  runContextMenuItem(item: GridContextMenuItem<T>): void {\n    if (!this.contextMenuState || this.isContextMenuItemDisabled(item)) return;\n    const state = this.contextMenuState;\n    item.action?.(state.row, state.rowIndex);\n    this.closeContextMenu();\n  }\n\n  private downloadBlob(blob: Blob, filename: string): void {\n    const url = URL.createObjectURL(blob);\n    const link = document.createElement('a');\n    link.href = url;\n    link.download = filename;\n    link.click();\n    URL.revokeObjectURL(url);\n  }\n\n  private emitExportState(status: BriosGridExportState['status']): void {\n    this.exportStateChange.emit({ status, progress: this.exportProgress, error: this.exportError });\n  }\n\n  private writeClipboard(text: string): void {\n    if (typeof navigator !== 'undefined' && navigator.clipboard?.writeText) {\n      try {\n        void navigator.clipboard.writeText(text).catch(() => this.writeClipboardFallback(text));\n      } catch {\n        this.writeClipboardFallback(text);\n      }\n      return;\n    }\n    this.writeClipboardFallback(text);\n  }\n\n  private writeClipboardFallback(text: string): void {\n    if (typeof document === 'undefined') return;\n    const textarea = document.createElement('textarea');\n    textarea.value = text;\n    textarea.setAttribute('readonly', 'true');\n    textarea.style.position = 'fixed';\n    textarea.style.opacity = '0';\n    document.body.appendChild(textarea);\n    textarea.select();\n    try { document.execCommand('copy'); } finally { textarea.remove(); }\n  }\n\n  private rowsForExport(): readonly T[] {\n    return this.exportSelectionOnly && this.selectedCount ? this.controller.selectedRows : this.visibleItems;\n  }\n\n  private async prepareExportOptions(signal: AbortSignal): Promise<ExportOptions<T>> {\n    await this.ensureExportDetails(signal);\n    return this.exportOptions();\n  }\n\n  private async ensureExportDetails(signal: AbortSignal): Promise<void> {\n    if (!this.exportDetails || !this.loadDetail) return;\n    for (const row of this.rowsForExport()) {\n      if (signal.aborted) throw Object.assign(new Error('Export aborted'), { name: 'AbortError' });\n      const rowIndex = this.controller.allData.indexOf(row);\n      const key = this.controller.keyFor(row, rowIndex >= 0 ? rowIndex : 0);\n      if (this.detailCache.has(key)) continue;\n      await this.loadDetailForExport(row, key, signal);\n    }\n  }\n\n  private loadDetailForExport(row: T, key: GridKey, signal: AbortSignal): Promise<readonly D[]> {\n    const running = this.detailExportPromises.get(key);\n    if (running) return running;\n    const promise = this.loadDetail!(row, signal).then((rows) => {\n      if (signal.aborted) throw Object.assign(new Error('Export aborted'), { name: 'AbortError' });\n      this.detailCache.set(key, rows);\n      this.trimDetailCache();\n      return rows;\n    }).finally(() => this.detailExportPromises.delete(key));\n    this.detailExportPromises.set(key, promise);\n    return promise;\n  }\n\n  private exportOptions(): ExportOptions<T> {\n    const displayRows = this.exportDisplayRows();\n    return {\n      columns: this.exportColumns(),\n      rows: this.rowsForExport(),\n      displayRows,\n      beforeCell: ({ value, rowKind, level, label, columnIndex }) => {\n        if ((rowKind === 'group' || rowKind === 'summary' || rowKind === 'detail') && columnIndex === 0) {\n          const prefix = '  '.repeat(Math.max(0, level ?? 0));\n          return `${prefix}${label ?? (value == null ? '' : String(value))}`;\n        }\n        return value;\n      }\n    };\n  }\n\n  private exportDisplayRows(): readonly ExportDisplayRow<T>[] | undefined {\n    if (!this.exportGroups && !this.exportDetails && !(this.childrenField && this.exportTreeSummary)) return undefined;\n    const rows: ExportDisplayRow<T>[] = [];\n    if (this.exportSelectionOnly && this.selectedCount) {\n      for (const row of this.rowsForExport()) {\n        const rowIndex = this.controller.allData.indexOf(row);\n        const key = this.controller.keyFor(row, rowIndex >= 0 ? rowIndex : 0);\n        rows.push({ kind: 'data', row, level: 0 });\n        if (this.exportDetails) {\n          for (const detail of this.detailCache.get(key) ?? []) {\n            if (detail && typeof detail === 'object') rows.push({ kind: 'detail', row: detail as unknown as T, level: 1, label: this.labels.detailRow });\n          }\n        }\n      }\n      return rows;\n    }\n    for (const item of this.controller.displayRows) {\n      if (item.kind === 'group') {\n        if (!this.exportGroups) continue;\n        const groupRow = { [item.field]: item.value, ...item.aggregates } as T;\n        const groupLabel = this.groupColumnHeader(item.field);\n        if (item.summary) rows.push({ kind: 'summary', row: groupRow, level: item.level, label: `${this.labels.subtotal} ${groupLabel}: ${String(item.value)}` });\n        else {\n          rows.push({ kind: 'group', row: groupRow, level: item.level, label: `${groupLabel}: ${String(item.value)}` });\n          if (this.exportGroupSummaries) rows.push({ kind: 'summary', row: groupRow, level: item.level, label: `${this.labels.subtotal} ${groupLabel}: ${String(item.value)}` });\n        }\n        continue;\n      }\n      rows.push({ kind: 'data', row: item.row, level: item.level });\n      if (this.exportDetails) {\n    const detailRows = this.detailCache.get(item.key) ?? [];\n        for (const detail of detailRows) {\n          if (detail && typeof detail === 'object') rows.push({ kind: 'detail', row: detail as unknown as T, level: item.level + 1, label: this.labels.detailRow });\n        }\n      }\n    }\n    if (this.childrenField && this.exportTreeSummary) {\n      const treeRows = this.controller.allTreeData;\n      const summaryRow: Record<string, unknown> = {};\n      for (const column of this.visibleColumns) {\n        const value = column.footer\n          ? this.controller.footerValue(column, treeRows)\n          : this.controller.aggregateValue(column, treeRows);\n        if (value !== undefined) summaryRow[String(column.key)] = value;\n      }\n      rows.push({ kind: 'summary', row: summaryRow as T, level: 0, label: this.labels.treeTotal });\n    }\n    return rows;\n  }\n\n  private exportColumns(): readonly ExportColumn<T>[] {\n    return this.visibleColumns.map((column) => ({\n      key: column.key,\n      header: column.header,\n      dataType: column.dataType === 'text' || column.dataType === 'custom' ? 'string' : column.dataType,\n      value: (row: T) => this.controller.getValue(row, column),\n      format: (value: unknown, row: T) => column.formatter ? column.formatter(value, row) : this.localizedExportValue(value, column)\n    }));\n  }\n\n  private localizedExportValue(value: unknown, column: GridColumn<T>): string {\n    if (value == null || value === '') return '';\n    if (column.dataType === 'currency' && typeof value === 'number') return new Intl.NumberFormat(column.locale ?? this.locale, { style: 'currency', currency: column.currency ?? 'MXN', ...column.numberFormat }).format(value);\n    if (column.dataType === 'number' && typeof value === 'number' && column.numberFormat) return new Intl.NumberFormat(column.locale ?? this.locale, column.numberFormat).format(value);\n    if (column.dataType === 'date') {\n      const date = value instanceof Date ? value : new Date(String(value));\n      if (!Number.isNaN(date.getTime())) return new Intl.DateTimeFormat(column.locale ?? this.locale, column.dateFormat ?? { dateStyle: 'medium' }).format(date);\n    }\n    return String(value);\n  }\n\n  onPaste(event: ClipboardEvent): void {\n    const text = event.clipboardData?.getData('text/plain') ?? '';\n    const active = this.controller.activeCell;\n    if (!text || !active) return;\n    event.preventDefault();\n    void this.applyPaste(text, active.row, active.column);\n  }\n\n  private async applyPaste(text: string, startRow: number, startColumn: number): Promise<void> {\n    const result = await this.controller.pasteMatrix(text, { row: startRow, column: startColumn }, {\n      columns: this.pasteColumnScope === 'all' ? this.columns : this.visibleColumns,\n      atomic: this.pasteAtomic,\n      coerce: (value, column) => this.coerceValue(column, value),\n      confirm: this.confirmPaste\n    });\n    this.pasteComplete.emit(result);\n    if (result.errors.length) {\n      this.validationError = result.errors[0].message;\n      this.validation.emit({ valid: false, message: this.validationError });\n    }\n    for (const change of result.changes) {\n      this.cellEditCommit.emit({ row: change.row, rowIndex: change.rowIndex, column: change.column, previousValue: change.previousValue, value: change.value });\n      if (this.dataSource?.update) {\n        void this.controller.updateRemoteRow(change.row, { [change.column.key]: change.value } as Partial<T>).catch((error) => {\n          this.controller.updateCell(change.row, change.column, change.previousValue);\n          this.error.emit(error);\n          this.refreshRows();\n        });\n      }\n    }\n    this.refreshRows();\n  }\n\n  private persistLayout(): void {\n    if (!this.persistKey) return;\n    const payload = {\n      version: this.persistVersion,\n      order: this._columns.map((column) => column.key),\n      widths: (() => {\n        const widths: Record<string, number> = {};\n        for (const [key, width] of this.columnWidths) widths[String(key)] = width;\n        return widths;\n      })(),\n      details: [...this.expandedDetailKeys],\n      detailCache: this.persistDetailCache ? this.detailCache.entries() : undefined,\n      state: this.controller.snapshot()\n    };\n    try {\n      this.getStateStorage()?.write(`brios-grid:${this.persistKey}`, JSON.stringify(payload));\n    } catch {\n      // A non-serializable detail row or a storage quota must not break grid state.\n      const { detailCache: _detailCache, ...layoutOnly } = payload;\n      try { this.getStateStorage()?.write(`brios-grid:${this.persistKey}`, JSON.stringify(layoutOnly)); } catch { /* optional persistence */ }\n    }\n  }\n\n  private restoreLayout(): void {\n    if (!this.persistKey) return;\n    const raw = this.getStateStorage()?.read(`brios-grid:${this.persistKey}`);\n    if (!raw) return;\n    try {\n      const payload = JSON.parse(raw) as { version?: number; order?: string[]; widths?: Record<string, number>; details?: GridKey[]; detailCache?: Array<[GridKey, readonly D[]]>; state?: ReturnType<GridController<T>['snapshot']> };\n      if (payload.version !== undefined && payload.version !== this.persistVersion) {\n        const migrated = payload.state && this.persistMigrate?.(payload.state, payload.version);\n        if (!migrated) {\n          this.getStateStorage()?.remove(`brios-grid:${this.persistKey}`);\n          return;\n        }\n        payload.state = migrated;\n      }\n      if (payload.widths) this.columnWidths = new Map(Object.entries(payload.widths));\n      if (payload.details) this.expandedDetailKeys = new Set(payload.details);\n      if (this.persistDetailCache && Array.isArray(payload.detailCache)) {\n        for (const [key, rows] of payload.detailCache) {\n          if (Array.isArray(rows)) this.detailCache.set(key, rows);\n        }\n        this.trimDetailCache();\n      }\n      if (payload.order?.length) {\n        const order = new Map(payload.order.map((key, index) => [String(key), index]));\n        this._columns = [...this._columns].sort((left, right) => (order.get(String(left.key)) ?? Number.MAX_SAFE_INTEGER) - (order.get(String(right.key)) ?? Number.MAX_SAFE_INTEGER));\n        this.controller.setColumns(this._columns);\n      }\n      if (payload.state) this.controller.restore(payload.state);\n      this.restoreFilterUiState();\n      if (payload.state?.groupBy) this._groupBy = payload.state.groupBy;\n      if (payload.state?.childrenField) this._childrenField = payload.state.childrenField;\n      this.refreshRows();\n    } catch {\n      this.getStateStorage()?.remove(`brios-grid:${this.persistKey}`);\n    }\n  }\n\n  private getStateStorage(): GridStateStorage | undefined {\n    if (this.stateStorage) return this.stateStorage;\n    if (typeof localStorage === 'undefined') return undefined;\n    return {\n      read: (key) => localStorage.getItem(key),\n      write: (key, value) => localStorage.setItem(key, value),\n      remove: (key) => localStorage.removeItem(key)\n    };\n  }\n\n  private restoreFilterUiState(): void {\n    this.columnFilterValues.clear();\n    this.columnFilterOperators.clear();\n    this.uniqueFilterValues.clear();\n    for (const filter of this.controller.filters) {\n      const key = String(filter.key);\n      this.columnFilterOperators.set(key, filter.operator);\n      if (filter.operator === 'in' && Array.isArray(filter.value)) {\n        const values = filter.value.map((value) => String(value));\n        this.uniqueFilterValues.set(key, new Set(values));\n        this.columnFilterValues.set(key, values.join(', '));\n      } else if (filter.operator === 'between') {\n        this.columnFilterValues.set(key, [filter.value, filter.valueTo].filter((value) => value !== undefined && value !== null).join(', '));\n      } else if (filter.value !== undefined && filter.value !== null) {\n        this.columnFilterValues.set(key, String(filter.value));\n      }\n    }\n  }\n\n  private trimDetailCache(): void {\n    this.detailCache.setLimit(this.detailCacheSize);\n    this.detailCache.trim(this.expandedDetailKeys);\n  }\n\n  private cancelHierarchyLoads(): void {\n    for (const controller of this.childLoadControllers.values()) controller.abort();\n    for (const controller of this.detailLoadControllers.values()) controller.abort();\n    this.childLoadControllers.clear();\n    this.detailLoadControllers.clear();\n    this.childLoadingKeys.clear();\n    this.detailLoadingKeys.clear();\n  }\n\n  private dataIdentityChanged(next: readonly T[]): boolean {\n    if (this._items.length !== next.length) return true;\n    return this._items.some((row, index) => this.controller.keyFor(row, index) !== this.controller.keyFor(next[index], index));\n  }\n\n  private coerceValue(column: GridColumn<T>, value: unknown): unknown {\n    if (column.dataType === 'number' || column.editor?.type === 'number') return value === '' ? null : Number(value);\n    if (column.dataType === 'currency' || column.editor?.type === 'currency') return this.parseLocalizedNumber(value, column.locale ?? this.locale);\n    if (column.dataType === 'boolean' || column.editor?.type === 'boolean') {\n      if (typeof value === 'string') return value === 'true' || value === '1' || value === 'on';\n      return Boolean(value);\n    }\n    if (column.dataType === 'date' || column.editor?.type === 'date') return value === '' ? null : value;\n    return value;\n  }\n\n  private applyItemsSource(items: readonly T[]): void {\n    this._items = [...items];\n    this.controller.setData(this._items);\n    this.itemsSourceError = null;\n    this.loading = false;\n    this.refreshRows();\n  }\n\n  private handleItemsSourceError(error: unknown): void {\n    this.loading = false;\n    this.itemsSourceError = error;\n    this.error.emit(error);\n    this.changeDetector.markForCheck();\n  }\n\n  private async consumeAsyncItems(source: AsyncIterable<T | readonly T[]>): Promise<void> {\n    const controller = new AbortController();\n    this.itemsSourceAbort = controller;\n    const rows: T[] = [];\n    this.loading = true;\n    this.changeDetector.markForCheck();\n    try {\n      for await (const chunk of source) {\n        if (controller.signal.aborted) return;\n        if (Array.isArray(chunk)) rows.push(...(chunk as readonly T[]));\n        else rows.push(chunk as T);\n        this.applyItemsSource(rows);\n        this.loading = true;\n      }\n      this.loading = false;\n      this.changeDetector.markForCheck();\n    } catch (error) {\n      if (!controller.signal.aborted) this.handleItemsSourceError(error);\n    }\n  }\n\n  writeValue(value: readonly T[] | null): void {\n    const keys = (value ?? []).map((row, index) => this.controller.keyFor(row, index));\n    this.controller.selectKeys(keys);\n    this.changeDetector.markForCheck();\n  }\n\n  registerOnChange(fn: (value: readonly T[]) => void): void {\n    this.valueChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.touched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n    this.changeDetector.markForCheck();\n  }\n\n  private refreshRows(): void {\n    this.filterValueOptionsCache.clear();\n    this.filteredFilterValueOptionsCache.clear();\n    this.filterValueBuilds.clear();\n    this.filterValueLoadingKeys.clear();\n    const allRows = [...this.controller.rows];\n    const allDisplayRows = [...this.controller.displayRows];\n    this.visibleItems = this.showPagination && !this.virtualizationEnabled && !this.dataSource\n      ? allRows.slice((this.page - 1) * this.pageSize, this.page * this.pageSize)\n      : allRows;\n    this.displayItems = this.showPagination && !this.virtualizationEnabled && !this.dataSource && !this.groupBy && !this.childrenField\n      ? allDisplayRows.slice((this.page - 1) * this.pageSize, this.page * this.pageSize)\n      : allDisplayRows;\n    this.totalItems = this.controller.totalRows;\n    this.layout.setOptions({ rowHeight: this.rowHeight, overscan: this.overscan, horizontalOverscan: this.horizontalOverscan, horizontalWindowSize: this.horizontalWindowSize, viewportHeight: this.height });\n    this.layout.setRowCount(this.displayItems.length);\n    if (this.rowHeightFor) this.displayItems.forEach((item, index) => this.layout.setRowSize(index, this.rowHeightFor?.(item, index) ?? this.rowHeight));\n    this.layout.setColumns(this.visibleColumns.map((column) => ({\n      key: String(column.key),\n      width: this.baseColumnWidth(column),\n      flex: column.flex,\n      minWidth: column.minWidth,\n      maxWidth: column.maxWidth,\n      pinned: column.pinned,\n      frozen: column.frozen\n    })));\n    this.layout.setViewport({ scrollTop: this.verticalScrollTop, scrollLeft: this.horizontalScrollLeft });\n    this.refreshWindow();\n    this.syncViewportScroll();\n    this.persistLayout();\n  }\n\n  private syncDetailRowHeights(): void {\n    const views = this.detailRowViews?.toArray() ?? [];\n    const active = new Set<string>();\n    let changed = false;\n    for (const view of views) {\n      const element = view.nativeElement;\n      const key = element.dataset.detailKey;\n      if (key === undefined) continue;\n      const index = this.displayItems.findIndex((item) => item.kind === 'data' && String(item.key) === key);\n      if (index < 0) continue;\n      const height = typeof element.getBoundingClientRect === 'function' ? Math.max(0, Math.ceil(element.getBoundingClientRect().height)) : 0;\n      active.add(key);\n      const previous = this.measuredDetailHeights.get(key);\n      if (previous?.index === index && previous.height === height) continue;\n      this.measuredDetailHeights.set(key, { index, height });\n      const item = this.displayItems[index];\n      const base = this.rowHeightFor ? this.rowHeightFor(item, index) ?? this.rowHeight : this.rowHeight;\n      this.layout.setRowSize(index, base + height);\n      changed = true;\n    }\n    for (const [key, previous] of this.measuredDetailHeights) {\n      if (active.has(key)) continue;\n      this.measuredDetailHeights.delete(key);\n      const item = this.displayItems[previous.index];\n      if (item) {\n        const base = this.rowHeightFor ? this.rowHeightFor(item, previous.index) ?? this.rowHeight : this.rowHeight;\n        this.layout.setRowSize(previous.index, base);\n      }\n      changed = true;\n    }\n    if (changed) this.refreshWindow();\n  }\n\n  private baseColumnWidth(column: GridColumn<T>): number {\n    const resized = this.columnWidths.get(String(column.key));\n    if (resized) return resized;\n    if (typeof column.width === 'number') return this.clampColumnWidth(column, column.width);\n    const parsed = typeof column.width === 'string' ? Number.parseInt(column.width, 10) : NaN;\n    return this.clampColumnWidth(column, Number.isFinite(parsed) ? parsed : 120);\n  }\n\n  private refreshWindow(): void {\n    const rowWindow = this.layout.rowWindow(this.virtualizationEnabled);\n    const columnWindow = this.layout.columnWindow(this.horizontalVirtualizationEnabled);\n    this.renderedColumnStart = columnWindow.start;\n    if (!this.virtualizationEnabled) {\n      this.renderedItems = this.displayItems;\n      this.renderedDisplayIndices = this.displayItems.map((_item, index) => index);\n      this.renderedStart = 0;\n      this.frozenRenderedCount = Math.min(Math.max(0, Math.floor(this.frozenRows)), this.displayItems.length);\n      this.topOffset = 0;\n      this.bottomOffset = 0;\n    } else {\n      const frozenCount = Math.min(Math.max(0, Math.floor(this.frozenRows)), this.displayItems.length);\n      const virtualStart = Math.max(rowWindow.start, frozenCount);\n      const indices = [\n        ...Array.from({ length: frozenCount }, (_value, index) => index),\n        ...Array.from({ length: Math.max(0, rowWindow.end - virtualStart) }, (_value, index) => virtualStart + index)\n      ];\n      this.renderedDisplayIndices = indices;\n      this.renderedItems = indices.map((index) => this.displayItems[index]).filter((item): item is GridDisplayRow<T> => Boolean(item));\n      this.renderedStart = virtualStart;\n      this.frozenRenderedCount = frozenCount;\n      this.topOffset = rowWindow.start > frozenCount\n        ? Math.max(0, this.layout.rowOffset(rowWindow.start) - this.layout.rowOffset(frozenCount))\n        : 0;\n      this.bottomOffset = rowWindow.after;\n    }\n    this.changeDetector.markForCheck();\n  }\n\n  private syncViewportScroll(): void {\n    if (!this.viewport) return;\n    const viewport = this.viewport.nativeElement;\n    const next = this.layout.currentViewport;\n    if (Math.abs(viewport.scrollTop - next.scrollTop) > 1) viewport.scrollTop = next.scrollTop;\n    if (Math.abs(viewport.scrollLeft - next.scrollLeft) > 1) viewport.scrollLeft = next.scrollLeft;\n    if (this.footerViewport && Math.abs(this.footerViewport.nativeElement.scrollLeft - next.scrollLeft) > 1) {\n      this.footerViewport.nativeElement.scrollLeft = next.scrollLeft;\n    }\n  }\n}\n\nfunction escapeHtml(value: string): string {\n  return value.replace(/[&<>\"']/g, (character) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;' })[character] ?? character);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.BriosLocaleService"],"mappings":"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"}