@nexterajs/ui 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +16 -0
  3. package/README.md +64 -0
  4. package/fesm2022/nexterajs-ui-animations.mjs +184 -0
  5. package/fesm2022/nexterajs-ui-animations.mjs.map +1 -0
  6. package/fesm2022/nexterajs-ui-core.mjs +326 -0
  7. package/fesm2022/nexterajs-ui-core.mjs.map +1 -0
  8. package/fesm2022/nexterajs-ui-dropdowns.mjs +953 -0
  9. package/fesm2022/nexterajs-ui-dropdowns.mjs.map +1 -0
  10. package/fesm2022/nexterajs-ui-excel.mjs +779 -0
  11. package/fesm2022/nexterajs-ui-excel.mjs.map +1 -0
  12. package/fesm2022/nexterajs-ui-file-uploader.mjs +125 -0
  13. package/fesm2022/nexterajs-ui-file-uploader.mjs.map +1 -0
  14. package/fesm2022/nexterajs-ui-forms.mjs +1113 -0
  15. package/fesm2022/nexterajs-ui-forms.mjs.map +1 -0
  16. package/fesm2022/nexterajs-ui-grid.mjs +4145 -0
  17. package/fesm2022/nexterajs-ui-grid.mjs.map +1 -0
  18. package/fesm2022/nexterajs-ui-intl.mjs +377 -0
  19. package/fesm2022/nexterajs-ui-intl.mjs.map +1 -0
  20. package/fesm2022/nexterajs-ui-pivot.mjs +4739 -0
  21. package/fesm2022/nexterajs-ui-pivot.mjs.map +1 -0
  22. package/fesm2022/nexterajs-ui-styling.mjs +59 -0
  23. package/fesm2022/nexterajs-ui-styling.mjs.map +1 -0
  24. package/fesm2022/nexterajs-ui-tree-view.mjs +202 -0
  25. package/fesm2022/nexterajs-ui-tree-view.mjs.map +1 -0
  26. package/fesm2022/nexterajs-ui-validation.mjs +269 -0
  27. package/fesm2022/nexterajs-ui-validation.mjs.map +1 -0
  28. package/fesm2022/nexterajs-ui.mjs +23 -0
  29. package/fesm2022/nexterajs-ui.mjs.map +1 -0
  30. package/package.json +100 -0
  31. package/styles/_button-directives.scss +39 -0
  32. package/styles/_dropdown.scss +113 -0
  33. package/styles/_editor.scss +146 -0
  34. package/styles/_mixins.scss +2 -0
  35. package/styles/_tokens.scss +77 -0
  36. package/styles/_widget.scss +58 -0
  37. package/styles/index.scss +83 -0
  38. package/types/nexterajs-ui-animations.d.ts +22 -0
  39. package/types/nexterajs-ui-core.d.ts +328 -0
  40. package/types/nexterajs-ui-dropdowns.d.ts +334 -0
  41. package/types/nexterajs-ui-excel.d.ts +159 -0
  42. package/types/nexterajs-ui-file-uploader.d.ts +47 -0
  43. package/types/nexterajs-ui-forms.d.ts +296 -0
  44. package/types/nexterajs-ui-grid.d.ts +1485 -0
  45. package/types/nexterajs-ui-intl.d.ts +125 -0
  46. package/types/nexterajs-ui-pivot.d.ts +1470 -0
  47. package/types/nexterajs-ui-styling.d.ts +40 -0
  48. package/types/nexterajs-ui-tree-view.d.ts +69 -0
  49. package/types/nexterajs-ui-validation.d.ts +102 -0
  50. package/types/nexterajs-ui.d.ts +12 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nexterajs-ui-grid.mjs","sources":["../../../projects/nextera-ui/grid/src/lib/grid/nxe-format.util.ts","../../../projects/nextera-ui/grid/src/lib/grid/nxe-grid-dom.ts","../../../projects/nextera-ui/grid/src/lib/grid/nxe-grid-drag.ts","../../../projects/nextera-ui/grid/src/lib/grid/nxe-grid.types.ts","../../../projects/nextera-ui/grid/src/lib/grid/nxe-column.component.ts","../../../projects/nextera-ui/grid/src/lib/grid/nxe-selection.component.ts","../../../projects/nextera-ui/grid/src/lib/grid/nxe-header-filter.component.ts","../../../projects/nextera-ui/grid/src/lib/grid/nxe-header-filter.model.ts","../../../projects/nextera-ui/grid/src/lib/grid/nxe-header-filter-panel.component.ts","../../../projects/nextera-ui/grid/src/lib/grid/nxe-header-filter-panel.component.html","../../../projects/nextera-ui/grid/src/lib/grid/nxe-header-filter-overlay.ts","../../../projects/nextera-ui/grid/src/lib/grid/nxe-grouping.component.ts","../../../projects/nextera-ui/grid/src/lib/grid/nxe-summary.component.ts","../../../projects/nextera-ui/grid/src/lib/grid/nxe-paging.component.ts","../../../projects/nextera-ui/grid/src/lib/grid/nxe-editing.component.ts","../../../projects/nextera-ui/grid/src/lib/grid/nxe-filter-row.component.ts","../../../projects/nextera-ui/grid/src/lib/grid/nxe-master-detail.component.ts","../../../projects/nextera-ui/grid/src/lib/grid/nxe-scrolling.component.ts","../../../projects/nextera-ui/grid/src/lib/grid/nxe-excel-export.service.ts","../../../projects/nextera-ui/grid/src/lib/grid/nxe-grid-resize.ts","../../../projects/nextera-ui/grid/src/lib/grid/nxe-data-grid.component.ts","../../../projects/nextera-ui/grid/src/lib/grid/nxe-data-grid.component.html","../../../projects/nextera-ui/grid/src/public-api.ts","../../../projects/nextera-ui/grid/src/nexterajs-ui-grid.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\r\n// Shared value-formatting helpers for the nxe grid family — the single source of truth for how\r\n// a dx-style column/field `format` renders. Extracted from nxe-data-grid's private\r\n// `defaultFormat()`/`datePattern()` (the grid delegates here unchanged); the pivot resolves its\r\n// data-field formats through the same functions so both widgets can never drift apart.\r\n//\r\n// dx `{ type }` format objects resolve to the library's own LDML masks:\r\n// { type: 'fixedPoint', precision: N } → '#,##0' + N decimals\r\n// { type: 'currency', precision: N } → the same mask — deliberately WITHOUT a currency\r\n// symbol (recorded in DEFAULTS.md)\r\n// { type: 'percent', precision: N } → value × 100 + '%' (Excel's own '%' code multiplies,\r\n// so the exported mask carries a bare '%')\r\n// { type: '<date pattern>' } → the pattern itself (the app's `Format.DATE`)\r\n// { formatter } → the function's own text\r\n\r\nimport { formatDisplay, parseDateValue } from '@nexterajs/ui/intl';\r\nimport { formatNumber, parseNumberFormat } from '@nexterajs/ui/intl';\r\nimport { NxeColumnFormat } from './nxe-grid.types';\r\n\r\n/** `precision: 2` → `'.00'`; absent/zero precision → `''` (dx defaults fixedPoint to 0). */\r\nfunction precisionDecimals(precision: number | undefined): string {\r\n return precision && precision > 0 ? '.' + '0'.repeat(precision) : '';\r\n}\r\n\r\n/** Resolve a `format` to a date display pattern — a `{ type }` object's `type` IS the pattern. */\r\nexport function nxeDatePattern(format: NxeColumnFormat | undefined, fallback = 'dd MMM yyyy'): string {\r\n if (!format) {\r\n return fallback;\r\n }\r\n return typeof format === 'string' ? format : format.type ?? fallback;\r\n}\r\n\r\n/**\r\n * Resolve a `format` to the LDML number mask the library's number engine understands: string\r\n * masks pass through; `{ type: 'fixedPoint' | 'currency', precision }` build a grouped mask\r\n * (`currency` deliberately carries NO symbol — DEFAULTS.md). Anything else → `undefined`.\r\n */\r\nexport function nxeNumberMask(format: NxeColumnFormat | undefined): string | undefined {\r\n if (!format) {\r\n return undefined;\r\n }\r\n if (typeof format === 'string') {\r\n return format;\r\n }\r\n if (format.type === 'fixedPoint' || format.type === 'currency') {\r\n return '#,##0' + precisionDecimals(format.precision);\r\n }\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Format a numeric value per a dx-style `format` (string mask, `{ type }` object, or\r\n * `{ formatter }`). No format / an unresolvable one → `String(value)` (the grid's untyped\r\n * rendering).\r\n */\r\nexport function nxeFormatNumberValue(value: number, format: NxeColumnFormat | undefined): string {\r\n if (format && typeof format === 'object') {\r\n if (typeof format.formatter === 'function') {\r\n return String(format.formatter(value));\r\n }\r\n if (format.type === 'percent') {\r\n const mask = '#,##0' + precisionDecimals(format.precision) + '%';\r\n return formatNumber(value * 100, parseNumberFormat(mask));\r\n }\r\n }\r\n const mask = nxeNumberMask(format);\r\n return mask ? formatNumber(value, parseNumberFormat(mask)) : String(value);\r\n}\r\n\r\n/**\r\n * Derive the Excel `numFmt` mask for a `format`: string masks pass through, fixedPoint/currency\r\n * come from {@link nxeNumberMask}, percent appends a bare `%` (Excel multiplies by 100 itself),\r\n * and any other `{ type }` is a date pattern used as-is. `{ formatter }`-only objects →\r\n * `undefined` (callers fall back to exporting the formatted text).\r\n */\r\nexport function nxeExcelNumFmt(format: NxeColumnFormat | undefined): string | undefined {\r\n if (!format) {\r\n return undefined;\r\n }\r\n if (typeof format === 'string') {\r\n return format;\r\n }\r\n if (typeof format.formatter === 'function') {\r\n return undefined;\r\n }\r\n if (format.type === 'percent') {\r\n return '#,##0' + precisionDecimals(format.precision) + '%';\r\n }\r\n return nxeNumberMask(format) ?? format.type ?? undefined;\r\n}\r\n\r\n/**\r\n * The data grid's default cell rendering (pure extraction of nxe-data-grid's `defaultFormat`):\r\n * `dataType`/`format` → display text. Number cells honour string masks only — exactly the\r\n * grid's pre-extraction behaviour.\r\n */\r\nexport function nxeDefaultFormat(\r\n dataType: 'string' | 'number' | 'date' | 'boolean' | undefined,\r\n format: NxeColumnFormat | undefined,\r\n raw: any,\r\n): string {\r\n if (raw == null || raw === '') {\r\n return '';\r\n }\r\n switch (dataType) {\r\n case 'number': {\r\n const pattern = typeof format === 'string' ? format : undefined;\r\n const num = typeof raw === 'number' ? raw : Number(raw);\r\n return isNaN(num) ? String(raw) : formatNumber(num, parseNumberFormat(pattern));\r\n }\r\n case 'date': {\r\n const dt = parseDateValue(raw);\r\n return dt ? formatDisplay(dt, nxeDatePattern(format)) : String(raw);\r\n }\r\n case 'boolean':\r\n return raw ? '✓' : '';\r\n default:\r\n return String(raw);\r\n }\r\n}\r\n","/**\r\n * DOM lookups shared by the grid component and its drag/resize controllers.\r\n *\r\n * Both questions here used to be answered with `querySelector('.dx-header-row')`, which stopped\r\n * being right once bands could add header rows above the leaves.\r\n */\r\n\r\n/**\r\n * The all-leaves header row of THIS grid.\r\n *\r\n * Two things have to be true at once. It must be the LAST `.dx-header-row` in the thead, because\r\n * bands sit above the leaves and only the bottom row has one cell per data column. And it must\r\n * belong to this grid rather than a nested master-detail grid — those live in the tbody, so the\r\n * first `thead` in document order is always the outer grid's own.\r\n */\r\nexport function nxeLeafHeaderRow(host: HTMLElement): HTMLTableRowElement | null {\r\n const thead = host.querySelector<HTMLElement>(\r\n '.dx-datagrid-content > .dx-datagrid-table > thead',\r\n );\r\n const rows = thead?.querySelectorAll<HTMLTableRowElement>('.dx-header-row');\r\n return rows && rows.length ? rows[rows.length - 1] : null;\r\n}\r\n\r\n/**\r\n * The data cells of a header row, command columns removed.\r\n *\r\n * Indexing these by visible-column index is deliberate: command cells live in the FIRST header\r\n * row and span downwards, so a banded grid's leaf row has none, and any fixed lead offset would\r\n * be off by however many command columns the grid happens to show.\r\n */\r\nexport function nxeHeaderDataCells(row: HTMLTableRowElement | null): HTMLTableCellElement[] {\r\n if (!row) {\r\n return [];\r\n }\r\n return Array.from(row.cells).filter(\r\n (td) =>\r\n !td.classList.contains('dx-command-expand') &&\r\n !td.classList.contains('dx-command-select') &&\r\n !td.classList.contains('dx-command-edit'),\r\n );\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { NgZone } from '@angular/core';\r\nimport { NxeColumnComponent } from './nxe-column.component';\r\nimport { nxeLeafHeaderRow } from './nxe-grid-dom';\r\n\r\n/**\r\n * Pointer-based drag engines (drag-to-group parity with DevExtreme, baselined against the\r\n * bright deployment 2026-07-27; gesture core shared with the pivot field panel since P3-C2).\r\n *\r\n * Deliberately NOT CDK DragDrop: the drop topologies are \"header → group panel\", \"chip →\r\n * anywhere outside = ungroup/remove\", \"chip ↔ chip = reorder\" — not list-to-list — and the\r\n * ghosts must be dx's exact clones (`.dx-datagrid-drag-header` for the grid,\r\n * `.dx-pivotgrid-fields-container.dx-drag` for the pivot panel). Document-level listeners run\r\n * outside the zone; Angular re-enters only on drop. No `setPointerCapture` (throws for\r\n * synthetic pointerIds under Karma).\r\n *\r\n * dx baseline facts encoded here:\r\n * - grid ghost: `div.dx-datagrid-drag-header.dx-datagrid-text-content.dx-widget.dx-datagrid-drag-action`\r\n * appended to <body>, caption text only, positioned near the cursor;\r\n * - insertion indicator: `div.dx-block-separator` placed between panel chips;\r\n * - chip drag highlights the header row with `dx-datagrid-drop-highlight`;\r\n * - the source cell/chip stays in place, dimmed;\r\n * - header→panel drop APPENDS as the last group level (indicator after the last chip).\r\n */\r\n\r\n/** Movement (px) before a press becomes a drag — below this a release is a normal click. */\r\nconst DRAG_START_DELTA = 5;\r\n/** Ghost offset from the pointer (px), tuned against the bright screenshots. */\r\nconst GHOST_OFFSET = 8;\r\n\r\n/**\r\n * One-shot suppression of the click a completed gesture is about to fire, shared by the drag and\r\n * resize engines. Strictly gesture-scoped: clears once that trailing click has passed (even when\r\n * it lands on an element without a consuming handler) and expires after 500ms, so a later genuine\r\n * click is never eaten.\r\n */\r\nexport class NxeGestureClickSuppression {\r\n private pending = false;\r\n private until = 0;\r\n\r\n arm(): void {\r\n this.pending = true;\r\n this.until = performance.now() + 500;\r\n // Capture runs before the bubble-phase consumers; the macrotask runs after dispatch.\r\n document.addEventListener(\r\n 'click',\r\n () => setTimeout(() => (this.pending = false)),\r\n { capture: true, once: true },\r\n );\r\n }\r\n\r\n consume(): boolean {\r\n const suppress = this.pending && performance.now() < this.until;\r\n this.pending = false;\r\n return suppress;\r\n }\r\n}\r\n\r\n/**\r\n * Owner-side contract of {@link NxeDragGesture}. The gesture core owns the press → threshold →\r\n * drag lifecycle (document listeners outside the zone, ghost mounting/positioning, Escape /\r\n * pointercancel semantics, click suppression, ghost/source/body teardown); the delegate owns the\r\n * payload, the drop-target hit-testing, and any indicators/highlights beyond the ghost itself.\r\n */\r\nexport interface NxeDragGestureDelegate {\r\n /** Build the ghost's element (classes + content). The gesture appends it to <body> and\r\n * keeps it `position: fixed` at pointer + offset. Called once, when the threshold passes. */\r\n createGhost(): HTMLElement;\r\n /** Class(es) that dim the pressed source element for the duration of the drag. */\r\n sourceDragClasses: readonly string[];\r\n /** The 5px threshold just passed — add initial highlights (e.g. the grid's header-row\r\n * drop highlight for chip drags). */\r\n dragStarted?(): void;\r\n /** Pointer tracking while a drag is active — update drop targets / indicators. */\r\n dragMove(x: number, y: number): void;\r\n /** Pointer released after a REAL drag. Runs inside the Angular zone; the ghost, source dim,\r\n * and `clearDropVisuals` teardown have already happened (imperative DOM must be gone\r\n * before any signal write re-runs an @for over the drop zone). */\r\n drop(): void;\r\n /** Remove indicators/highlights the delegate created. Must be idempotent — also runs on\r\n * cancel and destroy. */\r\n clearDropVisuals(): void;\r\n /** Gesture over (drop dispatched, sub-threshold release, cancel, destroy) — drop payload. */\r\n reset?(): void;\r\n}\r\n\r\n/**\r\n * The shared pointer-gesture core (extracted from the grid controller in P3-C2 so the pivot\r\n * field panel reuses it rather than copy-pasting). Behavior is the audited 2026-07-27 gesture:\r\n * press arms, 5px starts, Escape cancels (suppressing the held pointer's release click),\r\n * pointercancel cancels silently, drop arms one-shot click suppression.\r\n */\r\nexport class NxeDragGesture {\r\n private active: {\r\n /** The pointer that started the gesture — other pointers (second touch) are ignored. */\r\n pointerId: number;\r\n startX: number;\r\n startY: number;\r\n source: HTMLElement;\r\n started: boolean;\r\n ghost: HTMLElement | null;\r\n } | null = null;\r\n private readonly suppression = new NxeGestureClickSuppression();\r\n\r\n private readonly onMove = (e: PointerEvent): void => this.pointerMove(e);\r\n private readonly onUp = (e: PointerEvent): void => {\r\n if (this.active && e.pointerId !== this.active.pointerId) {\r\n return;\r\n }\r\n this.pointerUp();\r\n };\r\n private readonly onCancel = (e: PointerEvent): void => {\r\n if (this.active && e.pointerId !== this.active.pointerId) {\r\n return;\r\n }\r\n // pointercancel fires no trailing click — cancel WITHOUT arming click suppression.\r\n this.cancel(false);\r\n };\r\n private readonly onKey = (e: KeyboardEvent): void => {\r\n if (e.key === 'Escape') {\r\n this.cancel(true); // the still-held pointer's release click will follow\r\n }\r\n };\r\n\r\n constructor(\r\n private readonly zone: NgZone,\r\n private readonly delegate: NxeDragGestureDelegate,\r\n ) {}\r\n\r\n /** Arm a gesture on pointerdown. Returns false (payload must NOT be set) when refused. */\r\n begin(event: PointerEvent): boolean {\r\n if (event.button !== 0 || this.active) {\r\n return false;\r\n }\r\n this.active = {\r\n pointerId: event.pointerId,\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n source: event.currentTarget as HTMLElement,\r\n started: false,\r\n ghost: null,\r\n };\r\n this.zone.runOutsideAngular(() => {\r\n document.addEventListener('pointermove', this.onMove);\r\n document.addEventListener('pointerup', this.onUp);\r\n document.addEventListener('pointercancel', this.onCancel);\r\n document.addEventListener('keydown', this.onKey);\r\n });\r\n return true;\r\n }\r\n\r\n /**\r\n * One-shot suppression of the click browsers fire right after a drag's pointerup — call at\r\n * the top of header/chip/funnel click handlers so a drop never doubles as a click action.\r\n */\r\n consumeClick(): boolean {\r\n return this.suppression.consume();\r\n }\r\n\r\n destroy(): void {\r\n if (this.active) {\r\n this.cancel(false);\r\n }\r\n }\r\n\r\n private pointerMove(e: PointerEvent): void {\r\n const a = this.active;\r\n if (!a || e.pointerId !== a.pointerId) {\r\n return;\r\n }\r\n if (!a.started) {\r\n if (Math.hypot(e.clientX - a.startX, e.clientY - a.startY) < DRAG_START_DELTA) {\r\n return;\r\n }\r\n a.started = true;\r\n a.ghost = this.mountGhost(a);\r\n for (const cls of this.delegate.sourceDragClasses) {\r\n a.source.classList.add(cls);\r\n }\r\n document.body.classList.add('nxe-grid-dragging');\r\n this.delegate.dragStarted?.();\r\n }\r\n if (e.cancelable) {\r\n e.preventDefault(); // no text selection / touch scroll mid-drag\r\n }\r\n if (a.ghost) {\r\n a.ghost.style.left = `${e.clientX + GHOST_OFFSET}px`;\r\n a.ghost.style.top = `${e.clientY + GHOST_OFFSET}px`;\r\n }\r\n this.delegate.dragMove(e.clientX, e.clientY);\r\n }\r\n\r\n private mountGhost(a: { startX: number; startY: number }): HTMLElement {\r\n const ghost = this.delegate.createGhost();\r\n ghost.style.position = 'fixed';\r\n ghost.style.left = `${a.startX + GHOST_OFFSET}px`;\r\n ghost.style.top = `${a.startY + GHOST_OFFSET}px`;\r\n ghost.style.pointerEvents = 'none';\r\n ghost.style.zIndex = '10000';\r\n document.body.appendChild(ghost);\r\n return ghost;\r\n }\r\n\r\n private pointerUp(): void {\r\n const a = this.active;\r\n this.detachListeners();\r\n this.active = null;\r\n if (!a) {\r\n return;\r\n }\r\n if (!a.started) {\r\n this.delegate.reset?.();\r\n return; // plain click — let the click event do its job\r\n }\r\n this.suppression.arm();\r\n // Imperative DOM must be gone BEFORE any signal write re-runs a drop zone's @for.\r\n this.teardownVisuals(a);\r\n this.zone.run(() => this.delegate.drop());\r\n this.delegate.reset?.();\r\n }\r\n\r\n private cancel(willClickFollow: boolean): void {\r\n const a = this.active;\r\n this.detachListeners();\r\n this.active = null;\r\n if (!a) {\r\n return;\r\n }\r\n if (a.started) {\r\n if (willClickFollow) {\r\n this.suppression.arm(); // Escape: the held pointer's release click still fires\r\n }\r\n this.teardownVisuals(a);\r\n }\r\n this.delegate.reset?.();\r\n }\r\n\r\n private teardownVisuals(a: { source: HTMLElement; ghost: HTMLElement | null }): void {\r\n a.ghost?.remove();\r\n a.ghost = null;\r\n for (const cls of this.delegate.sourceDragClasses) {\r\n a.source.classList.remove(cls);\r\n }\r\n document.body.classList.remove('nxe-grid-dragging');\r\n this.delegate.clearDropVisuals();\r\n }\r\n\r\n private detachListeners(): void {\r\n document.removeEventListener('pointermove', this.onMove);\r\n document.removeEventListener('pointerup', this.onUp);\r\n document.removeEventListener('pointercancel', this.onCancel);\r\n document.removeEventListener('keydown', this.onKey);\r\n }\r\n}\r\n\r\nexport interface NxeGridDragHooks {\r\n zone: NgZone;\r\n host: () => HTMLElement;\r\n /** Header dropped on the group panel. */\r\n onGroupDrop: (col: NxeColumnComponent) => void;\r\n /** Chip dropped outside the panel. */\r\n onChipRemove: (col: NxeColumnComponent) => void;\r\n /** Chip dropped at another panel position. */\r\n onChipMove: (fromLevel: number, toLevel: number) => void;\r\n /** dx `allowColumnReordering` (default false) — enables the header-row drop zone. */\r\n reorderEnabled: () => boolean;\r\n /** Header dropped between two headers: move visible column `from` to insertion `slot`. */\r\n onColumnMove: (fromVisibleIndex: number, insertionSlot: number) => void;\r\n /** Data-column header cells (command cells excluded), for reorder hit-testing. */\r\n headerDataCells: () => HTMLElement[];\r\n}\r\n\r\ninterface GridDragState {\r\n kind: 'header' | 'chip';\r\n col: NxeColumnComponent;\r\n /** Chip drags: the group level being dragged. Header drags: the visible column index. */\r\n level: number;\r\n separator: HTMLElement | null;\r\n /** Reorder drop indicator (vertical bar between headers). */\r\n colIndicator: HTMLElement | null;\r\n overPanel: boolean;\r\n /** Chip drags: insertion slot among the panel chips while hovering the panel. */\r\n dropIndex: number | null;\r\n /** Header drags with reordering on: insertion slot among the data headers. */\r\n headerSlot: number | null;\r\n}\r\n\r\n/** The data grid's drag controller — payload + drop topology over the shared gesture core. */\r\nexport class NxeGridDragController {\r\n private drag: GridDragState | null = null;\r\n private readonly gesture: NxeDragGesture;\r\n\r\n constructor(private readonly hooks: NxeGridDragHooks) {\r\n this.gesture = new NxeDragGesture(hooks.zone, {\r\n // Exact class list observed on bright's dx ghost + an nxe hook for fallback styling.\r\n createGhost: () => {\r\n const ghost = document.createElement('div');\r\n ghost.className =\r\n 'dx-datagrid-drag-header dx-datagrid-text-content dx-widget dx-datagrid-drag-action nxe-grid-drag-ghost';\r\n const col = this.drag?.col;\r\n ghost.textContent = col ? col.caption() || col.dataField() : '';\r\n ghost.style.whiteSpace = 'nowrap';\r\n return ghost;\r\n },\r\n sourceDragClasses: ['nxe-drag-source'],\r\n dragStarted: () => {\r\n if (this.drag?.kind === 'chip') {\r\n // dx: while a chip is dragged, the header row is the highlighted return target.\r\n this.headerRow()?.classList.add('dx-datagrid-drop-highlight');\r\n }\r\n },\r\n dragMove: (x, y) => {\r\n if (this.drag) {\r\n this.updateDropTarget(this.drag, x, y);\r\n }\r\n },\r\n drop: () => this.completeDrop(),\r\n clearDropVisuals: () => {\r\n if (this.drag) {\r\n this.removeSeparator(this.drag);\r\n this.removeColIndicator(this.drag);\r\n }\r\n this.headerRow()?.classList.remove('dx-datagrid-drop-highlight');\r\n },\r\n reset: () => {\r\n this.drag = null;\r\n },\r\n });\r\n }\r\n\r\n startHeaderDrag(col: NxeColumnComponent, visibleIndex: number, event: PointerEvent): void {\r\n this.begin('header', col, visibleIndex, event);\r\n }\r\n\r\n startChipDrag(col: NxeColumnComponent, level: number, event: PointerEvent): void {\r\n this.begin('chip', col, level, event);\r\n }\r\n\r\n /** See {@link NxeDragGesture.consumeClick}. */\r\n consumeClick(): boolean {\r\n return this.gesture.consumeClick();\r\n }\r\n\r\n destroy(): void {\r\n this.gesture.destroy();\r\n }\r\n\r\n private begin(kind: 'header' | 'chip', col: NxeColumnComponent, level: number, event: PointerEvent): void {\r\n if (!this.gesture.begin(event)) {\r\n return;\r\n }\r\n this.drag = {\r\n kind,\r\n col,\r\n level,\r\n separator: null,\r\n colIndicator: null,\r\n overPanel: false,\r\n dropIndex: null,\r\n headerSlot: null,\r\n };\r\n }\r\n\r\n private updateDropTarget(a: GridDragState, x: number, y: number): void {\r\n const panel = this.panel();\r\n const rect = panel?.getBoundingClientRect();\r\n a.overPanel = !!rect && x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;\r\n if (!panel || !a.overPanel) {\r\n a.dropIndex = null;\r\n this.removeSeparator(a);\r\n if (a.kind === 'header') {\r\n this.updateHeaderReorderTarget(a, x, y);\r\n }\r\n return;\r\n }\r\n this.removeColIndicator(a);\r\n a.headerSlot = null;\r\n const chips = Array.from(panel.querySelectorAll<HTMLElement>('.dx-group-panel-item'));\r\n if (a.kind === 'header') {\r\n // dx appends on header→panel drop; the indicator sits after the last chip.\r\n a.dropIndex = chips.length;\r\n this.placeSeparator(a, panel, chips, chips.length);\r\n return;\r\n }\r\n let index = chips.length;\r\n for (let i = 0; i < chips.length; i++) {\r\n const r = chips[i].getBoundingClientRect();\r\n if (x < r.left + r.width / 2) {\r\n index = i;\r\n break;\r\n }\r\n }\r\n a.dropIndex = index;\r\n this.placeSeparator(a, panel, chips, index);\r\n }\r\n\r\n /** Header-row drop zone (only with `allowColumnReordering`): slot between data headers. */\r\n private updateHeaderReorderTarget(a: GridDragState, x: number, y: number): void {\r\n if (!this.hooks.reorderEnabled()) {\r\n a.headerSlot = null;\r\n this.removeColIndicator(a);\r\n return;\r\n }\r\n const rowRect = this.headerRow()?.getBoundingClientRect();\r\n if (!rowRect || x < rowRect.left || x > rowRect.right || y < rowRect.top || y > rowRect.bottom) {\r\n a.headerSlot = null;\r\n this.removeColIndicator(a);\r\n return;\r\n }\r\n const cells = this.hooks.headerDataCells();\r\n if (!cells.length) {\r\n return;\r\n }\r\n let slot = cells.length;\r\n for (let i = 0; i < cells.length; i++) {\r\n const r = cells[i].getBoundingClientRect();\r\n if (x < r.left + r.width / 2) {\r\n slot = i;\r\n break;\r\n }\r\n }\r\n a.headerSlot = slot;\r\n if (!a.colIndicator) {\r\n a.colIndicator = document.createElement('div');\r\n a.colIndicator.className = 'nxe-col-drop-indicator';\r\n document.body.appendChild(a.colIndicator);\r\n }\r\n const edge =\r\n slot < cells.length\r\n ? cells[slot].getBoundingClientRect().left\r\n : cells[cells.length - 1].getBoundingClientRect().right;\r\n a.colIndicator.style.left = `${edge - 1}px`;\r\n a.colIndicator.style.top = `${rowRect.top}px`;\r\n a.colIndicator.style.height = `${rowRect.height}px`;\r\n }\r\n\r\n private removeColIndicator(a: GridDragState): void {\r\n a.colIndicator?.remove();\r\n a.colIndicator = null;\r\n }\r\n\r\n private completeDrop(): void {\r\n const a = this.drag;\r\n if (!a) {\r\n return;\r\n }\r\n if (a.kind === 'header') {\r\n if (a.overPanel) {\r\n this.hooks.onGroupDrop(a.col);\r\n } else if (a.headerSlot != null) {\r\n this.hooks.onColumnMove(a.level, a.headerSlot);\r\n }\r\n return;\r\n }\r\n if (!a.overPanel) {\r\n this.hooks.onChipRemove(a.col);\r\n return;\r\n }\r\n if (a.dropIndex != null) {\r\n const target = a.dropIndex > a.level ? a.dropIndex - 1 : a.dropIndex;\r\n if (target !== a.level) {\r\n this.hooks.onChipMove(a.level, target);\r\n }\r\n }\r\n }\r\n\r\n private placeSeparator(a: GridDragState, panel: HTMLElement, chips: HTMLElement[], index: number): void {\r\n if (!a.separator) {\r\n a.separator = document.createElement('div');\r\n a.separator.className = 'dx-block-separator';\r\n a.separator.textContent = ' '; // dx renders the separator as an &nbsp; block\r\n }\r\n const reference = chips[index] ?? null;\r\n if (a.separator.parentElement !== panel || a.separator.nextElementSibling !== reference) {\r\n panel.insertBefore(a.separator, reference);\r\n }\r\n }\r\n\r\n private removeSeparator(a: GridDragState): void {\r\n a.separator?.remove();\r\n a.separator = null;\r\n }\r\n\r\n private panel(): HTMLElement | null {\r\n return this.hooks.host().querySelector('.dx-datagrid-group-panel');\r\n }\r\n\r\n private headerRow(): HTMLElement | null {\r\n return nxeLeafHeaderRow(this.hooks.host());\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n// Shared types for the nxe-data-grid family. Row data is `any` to mirror DevExtreme's untyped\r\n// grid (the app stores plain JS records and reads arbitrary fields off `key.data`).\r\n\r\n/** A DevExtreme-style column `format`: a number-mask string, a date format string, or `{ type }`. */\r\nexport interface NxeColumnFormatObject {\r\n type?: string;\r\n precision?: number;\r\n /** dx parity: a custom `formatter` wins over `type` (resolved in nxe-format.util). */\r\n formatter?: (value: any) => string;\r\n}\r\nexport type NxeColumnFormat = string | NxeColumnFormatObject;\r\n\r\n/** Column `customizeText` callback — `(info) => string` (used by `formatAccounting`). */\r\nexport type NxeCustomizeText = (info: { value: any; valueText: string }) => string;\r\n\r\n/**\r\n * The `$implicit` context object handed to a cell template, mirroring DevExtreme's cell info.\r\n * Templates read `cell.data.<field>` (live row object), `cell.rowIndex`, and `cell.columnIndex`.\r\n * `value`/`displayValue`/`text`/`key`/`column` are provided for parity (presently unread in cells).\r\n */\r\nexport interface NxeCellInfo<T = any> {\r\n data: T;\r\n rowIndex: number;\r\n columnIndex: number;\r\n value: any;\r\n displayValue: any;\r\n text: string;\r\n key: T;\r\n column: { dataField?: string; caption?: string } | null;\r\n}\r\n\r\n/**\r\n * The `$implicit` context of an `editCellTemplate`, mirroring DevExtreme's edit-cell info.\r\n *\r\n * `data` is the LIVE row object. That is the load-bearing part: the dominant template shape\r\n * assigns straight to it (`ctx.data.amount = $event`) rather than calling `setValue`, exactly as\r\n * it did under dx, and the grid reads display text back off the same object.\r\n *\r\n * `setValue` is provided for dx parity and routes through the grid's own write path — committing\r\n * in `cell` mode, buffering in `row` mode — so a template that uses it participates in Save and\r\n * Cancel. A template that writes `data` directly bypasses the buffer, and therefore Cancel; dx\r\n * behaves the same way, because it hands out the raw row and does not police it.\r\n */\r\nexport interface NxeEditCellInfo<T = any> {\r\n data: T;\r\n key: any;\r\n value: any;\r\n displayValue: any;\r\n text: string;\r\n rowIndex: number;\r\n columnIndex: number;\r\n column: {\r\n dataField?: string;\r\n caption?: string;\r\n dataType?: string;\r\n format?: NxeColumnFormat;\r\n } | null;\r\n /** dx parity: commits in `cell` mode, buffers in `row` mode. */\r\n setValue: (newValue: any) => void;\r\n component: NxeGridInstance<T>;\r\n}\r\n\r\n/** dx `rowType` — which kind of row a prepared cell belongs to. */\r\nexport type NxeRowType = 'header' | 'filter' | 'data' | 'group' | 'groupFooter' | 'totalFooter';\r\n\r\n/** The row half of a prepared event, shared by `onCellPrepared` and `onRowPrepared`. */\r\nexport interface NxeRowInfo<T = any> {\r\n rowType: NxeRowType;\r\n data: T | undefined;\r\n key: any;\r\n rowIndex: number;\r\n /** Group nesting level for a group or group-footer row; absent elsewhere. */\r\n groupIndex?: number;\r\n /** dx handlers written against older builds read this name instead. */\r\n groupLevel?: number;\r\n isExpanded?: boolean;\r\n isSelected?: boolean;\r\n}\r\n\r\n/**\r\n * DevExtreme-shaped `onCellPrepared` payload, emitted once per rendered cell after the DOM is\r\n * written — `cellElement` is the real `<td>`, and handlers are expected to mutate it.\r\n *\r\n * The declarative `mergeColumns` and `rowClass` inputs are the recommended way to do what most\r\n * handlers do. This exists because applications carry handlers that cannot be rewritten.\r\n */\r\nexport interface NxeCellPreparedEvent<T = any> {\r\n data: T | undefined;\r\n key: any;\r\n value: any;\r\n displayValue: any;\r\n text: string;\r\n /** Visible-column index, command columns excluded; -1 for a cell that spans columns. */\r\n columnIndex: number;\r\n /** 0-based data-row index; -1 for header, filter and total-footer rows. */\r\n rowIndex: number;\r\n column: { dataField?: string; caption?: string; dataType?: string; index: number } | null;\r\n row: NxeRowInfo<T> | null;\r\n rowType: NxeRowType;\r\n cellElement: HTMLTableCellElement;\r\n component: NxeGridInstance<T>;\r\n element: HTMLElement;\r\n}\r\n\r\n/** DevExtreme-shaped `onRowPrepared` payload. `rowClass` covers the common case declaratively. */\r\nexport interface NxeRowPreparedEvent<T = any> extends NxeRowInfo<T> {\r\n rowElement: HTMLTableRowElement;\r\n columnCount: number;\r\n component: NxeGridInstance<T>;\r\n element: HTMLElement;\r\n}\r\n\r\n/**\r\n * The `$implicit` context of a `groupCellTemplate`, replacing the `\"Caption: value\"` text in a\r\n * group row's caption cell. `value` is the raw group key; `text` is what the grid would have\r\n * rendered.\r\n */\r\nexport interface NxeGroupCellInfo<T = any> {\r\n data: T[];\r\n key: any;\r\n value: any;\r\n displayValue: any;\r\n text: string;\r\n groupIndex: number;\r\n columnIndex: number;\r\n column: { dataField?: string; caption?: string } | null;\r\n component: NxeGridInstance<T>;\r\n}\r\n\r\n/**\r\n * DevExtreme-shaped `onOptionChanged` payload. Emitted for internal paging\r\n * (`paging.pageIndex`) and for runtime grouping changes (`columns[<i>].groupIndex`, where `<i>`\r\n * is the column's content-children declaration index) — one event per user gesture, carrying\r\n * `previousValue`/`value` exactly as generic-list's persistence handler expects.\r\n */\r\nexport interface NxeGridOptionChangedEvent {\r\n name: string;\r\n fullName: string;\r\n value: any;\r\n previousValue?: any;\r\n}\r\n\r\n/** DevExtreme-shaped `onSelectionChanged` payload (handlers read `selectedRowsData[0]?.<field>`). */\r\nexport interface NxeGridSelectionChangedEvent<T = any> {\r\n selectedRowsData: T[];\r\n selectedRowKeys: T[];\r\n currentSelectedRowKeys: T[];\r\n currentDeselectedRowKeys: T[];\r\n component: NxeGridInstance<T>;\r\n element: HTMLElement | null;\r\n}\r\n\r\n/**\r\n * The `.instance` facade surface — only the methods the codebase actually calls\r\n * (`getSelectedRowsData` ×12 in templates, `refresh` ×13, `columnOption(field,'visible',bool)` ×3).\r\n */\r\nexport interface NxeExportColumn {\r\n caption: string;\r\n dataField: string;\r\n dataType: 'string' | 'number' | 'date' | 'boolean';\r\n format: NxeColumnFormat | undefined;\r\n}\r\n\r\n/** dx TreeList node shape — the slice `exportTreeToExcel` walks (`data` + `children`). */\r\nexport interface NxeTreeListNode<T = any> {\r\n key?: any;\r\n data?: T;\r\n children: NxeTreeListNode<T>[];\r\n level?: number;\r\n hasChildren?: boolean;\r\n}\r\n\r\nexport interface NxeGridInstance<T = any> {\r\n getSelectedRowsData(): T[];\r\n getSelectedRowKeys(): T[];\r\n refresh(): void;\r\n /**\r\n * dx `clearFilter()`: no argument clears the filter row AND header filters (including\r\n * declarative `filterValues` seeds); `'row'`/`'header'` clear one kind. `'search'`,\r\n * `'filterValue'`, `'dataSource'` are accepted no-ops (those filters don't exist here).\r\n */\r\n clearFilter(filterName?: 'row' | 'header' | 'search' | 'filterValue' | 'dataSource'): void;\r\n /** Only the `(field, 'visible', boolean)` setter form is used (export show/hide toggle). */\r\n columnOption(dataField: string, optionName: 'visible', value: boolean): void;\r\n /** Export model: currently-visible columns (honours columnOption visibility toggles). */\r\n getVisibleColumns(): NxeExportColumn[];\r\n /** Export model: the filtered+sorted data rows (all pages). */\r\n getVisibleRows(): T[];\r\n /**\r\n * dx `totalCount()`: data rows after filtering, across all pages. Read as\r\n * `e.component.totalCount()` from a cell-prepared handler to size a merge run.\r\n */\r\n totalCount(): number;\r\n /** dx TreeList parity: virtual root whose `children` are the top-level nodes (empty for flat grids). */\r\n getRootNode(): NxeTreeListNode<T>;\r\n /** DevExtreme parity no-op (layout is CSS-driven); triggers a refresh tick. */\r\n updateDimensions(): void;\r\n /** Collapses a master-detail row / tree-list node by key (orbit addition). */\r\n collapseRow(key: any): void;\r\n /** Expands a tree-list node by key, overriding a manual collapse (orbit addition). */\r\n expandRow(key: any): void;\r\n /**\r\n * Ungroups every grouped column (real dx semantics), emitting one `columns[i].groupIndex`\r\n * removal per level in descending order so generic-list's persistence replay converges.\r\n */\r\n clearGrouping(): void;\r\n /** Expands all groups / tree nodes (orbit addition). */\r\n expandAll(): void;\r\n /** Commits the pending row edit, if any (dx parity; cell edits commit on blur). */\r\n saveEditData(): void;\r\n /** The grid's host element (dx parity: `e.component.element()`). */\r\n element(): HTMLElement;\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChildren,\r\n input,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { NxeColumnFormat, NxeCustomizeText } from './nxe-grid.types';\r\n\r\n/**\r\n * `nxe-column` — drop-in replacement for DevExtreme `dxi-column`.\r\n *\r\n * A no-render config element collected by the parent `nxe-data-grid` via `contentChildren`.\r\n * Carries the column's display/format/behaviour config as signals. Works inside `@for`/`@if`\r\n * with full property binding (column sets are computed at render time; `dataField`/`caption`\r\n * are sometimes expressions). There are no command-button columns or `calculate*` options here.\r\n */\r\n@Component({\r\n selector: 'nxe-column',\r\n standalone: true,\r\n template: '',\r\n host: { style: 'display: none' },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeColumnComponent {\r\n readonly caption = input<string>('');\r\n /** Bound row field (supports dotted paths and bound/ternary expressions). */\r\n readonly dataField = input<string>('');\r\n readonly dataType = input<'string' | 'number' | 'date' | 'boolean'>('string');\r\n /** px width — number (`[width]=\"150\"`) or numeric string (`width=\"200\"`). */\r\n readonly width = input<number | string | undefined>(undefined);\r\n readonly minWidth = input<number | string | undefined>(undefined);\r\n readonly alignment = input<'left' | 'center' | 'right' | undefined>(undefined);\r\n /** Number-mask string (`#,##0.00`), date format string, or `{ type: 'dd MMM yyyy' }`. */\r\n readonly format = input<NxeColumnFormat | undefined>(undefined);\r\n /** `(info:{value}) => string` (e.g. `formatAccounting` for parenthesized negatives). */\r\n readonly customizeText = input<NxeCustomizeText | undefined>(undefined);\r\n /** Name of a sibling `<ng-template nxeTemplate=\"...\">` to render the cell. */\r\n readonly cellTemplate = input<string | undefined>(undefined);\r\n /**\r\n * DevExtreme column `lookup` (orbit addition): raw values resolve to display text through\r\n * `dataSource` (`{ lookup: { dataSource, valueExpr: 'lovCode', displayExpr: 'lovName' } }`).\r\n * Inline cell editing renders a `<select>` over the same list.\r\n */\r\n readonly lookup = input<\r\n { dataSource: readonly any[]; valueExpr?: string; displayExpr?: string } | undefined\r\n >(undefined);\r\n\r\n readonly allowSorting = input(true);\r\n /** dx parity: whether the header can be dragged into the group panel (default true). */\r\n readonly allowGrouping = input(true);\r\n /** dx parity: whether this column shows a resize handle when the grid allows resizing. */\r\n readonly allowResizing = input(true);\r\n readonly allowFiltering = input(true);\r\n readonly allowEditing = input(true);\r\n readonly allowExporting = input(true);\r\n readonly allowSearch = input(true);\r\n readonly allowHeaderFiltering = input(true);\r\n readonly visible = input(true);\r\n\r\n readonly sortOrder = input<'asc' | 'desc' | undefined>(undefined);\r\n readonly sortIndex = input<number | undefined>(undefined);\r\n readonly groupIndex = input<number | undefined>(undefined);\r\n readonly fixed = input(false);\r\n readonly filterValues = input<any[] | undefined>(undefined);\r\n /** Column `type` (only `type=\"date\"` seen — a display hint, NOT a command column). */\r\n readonly type = input<string | undefined>(undefined);\r\n /**\r\n * dx `cssClass` — extra classes on this column's header, filter and data cells. The escape\r\n * hatch for one-off cell styling that does not warrant a `cellTemplate`.\r\n */\r\n readonly cssClass = input<string | undefined>(undefined);\r\n /**\r\n * dx `editCellTemplate` — the sibling `<ng-template nxeTemplate=\"NAME\">` rendered while this\r\n * cell is being edited, in place of the built-in editor. Its context is a\r\n * {@link NxeEditCellInfo}, whose `data` is the live row: a template that assigns\r\n * `ctx.data.field = $event` writes straight through, which is how dx's own edit templates\r\n * were used.\r\n */\r\n readonly editCellTemplate = input<string | undefined>(undefined);\r\n /**\r\n * dx `groupCellTemplate` — replaces the `\"Caption: value\"` text in a group row's caption\r\n * cell when this column is the one grouped by.\r\n */\r\n readonly groupCellTemplate = input<string | undefined>(undefined);\r\n\r\n /**\r\n * Child columns declared inside this one — dx's banded header. Empty for an ordinary column.\r\n *\r\n * `descendants: false` is explicit rather than relied upon: a band's grandchildren belong to\r\n * its children, and flattening them here would collapse the very nesting the band expresses.\r\n */\r\n readonly childColumns = contentChildren(NxeColumnComponent, { descendants: false });\r\n\r\n /** dx `isBand`: a column that groups other columns under a shared header instead of a field. */\r\n readonly isBand = computed(() => this.childColumns().length > 0);\r\n}\r\n","import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\r\n\r\n/**\r\n * `nxe-selection` — drop-in replacement for DevExtreme `dxo-selection` (grid child option).\r\n *\r\n * A no-render config element collected by `nxe-data-grid` via `contentChild`. The app only uses\r\n * `mode` (\"single\" ×17 / \"multiple\" ×14, plain string attrs), `selectAllMode=\"page\"`,\r\n * `showCheckBoxesMode` (\"always\" ×11 shows the checkbox column; \"false\"/\"none\" hide it →\r\n * selection by row click). `recursive` is tree-list-only (ignored here).\r\n */\r\n@Component({\r\n selector: 'nxe-selection',\r\n standalone: true,\r\n template: '',\r\n host: { style: 'display: none' },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeSelectionComponent {\r\n readonly mode = input<'single' | 'multiple' | 'none'>('single');\r\n readonly selectAllMode = input<'page' | 'allPages'>('page');\r\n /** \"always\" shows the checkbox column; anything else (\"false\"/\"none\"/\"onClick\") hides it. */\r\n readonly showCheckBoxesMode = input<string>('onClick');\r\n readonly recursive = input(false);\r\n /** dx parity: row-body clicks toggle selection even when checkboxes are shown. */\r\n readonly selectByClick = input(false);\r\n}\r\n","import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\r\n\r\n/**\r\n * `nxe-header-filter` — drop-in replacement for DevExtreme `dxo-header-filter` (grid child option).\r\n *\r\n * Adds a funnel icon to each filterable column header; clicking it opens a popup of the column's\r\n * distinct values (checkbox list + optional search) to filter the grid. The app uses essentially\r\n * one shape: `[search]=\"{ enabled: true }\" [visible]=\"true\"` (60 files). Legacy `[allowSearch]`\r\n * (1×) folds into `search.enabled`.\r\n */\r\n@Component({\r\n selector: 'nxe-header-filter',\r\n standalone: true,\r\n template: '',\r\n host: { style: 'display: none' },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeHeaderFilterComponent {\r\n readonly visible = input(true);\r\n readonly search = input<{ enabled?: boolean } | undefined>(undefined);\r\n /** Legacy alias for `search.enabled` (one holdout). */\r\n readonly allowSearch = input<boolean | undefined>(undefined);\r\n\r\n /** Whether the in-popup search box shows.\r\n *\r\n * Defaults to **true**, matching the legacy DevExtreme deployment: a popup listing every\r\n * distinct value in a column is close to unusable without one. 60 of the app's templates\r\n * already opt in explicitly, so this only changes the handful that never said either way —\r\n * and an explicit `[search]=\"{ enabled: false }\"` still turns it off. */\r\n searchEnabled(): boolean {\r\n return this.search()?.enabled ?? this.allowSearch() ?? true;\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { computed, signal } from '@angular/core';\r\nimport { parseDateValue } from '@nexterajs/ui/intl';\r\n\r\n/**\r\n * Header-filter state model — the draft/apply/search machinery extracted from\r\n * `nxe-data-grid` (pivot parity Phase 3a) so the pivot's field panel can reuse it on pages\r\n * that have no data grid. Pure signals/computeds, no Angular DI, ZERO behavior change:\r\n * every computed/method body is a verbatim move from `nxe-data-grid.component.ts`.\r\n *\r\n * The model is generic over the column type `C` (the grid passes `NxeColumnComponent`; the\r\n * pivot will pass its field descriptor) and reads rows/values through a\r\n * {@link NxeHeaderFilterSource} adapter, so it owns only the frozen semantics:\r\n * `(Blanks)` first, Yes/No boolean buckets, the date Year > Month > Day tree, dx search\r\n * scoping of (Select All), check-on-open, and \"everything checked = no filter\" on apply.\r\n */\r\n\r\n/**\r\n * Header-filter key for blank-ish values (`null`/`undefined`/`''`) — dx lists them as one\r\n * `(Blanks)` bucket, FIRST (bright audit). A symbol can never collide with data values.\r\n */\r\nexport const NXE_HF_BLANKS: unique symbol = Symbol('nxe-hf-blanks');\r\n\r\n/** A node of the date-column header-filter tree (dx: Year > Month > Day, bright audit). */\r\nexport interface NxeHfDateNode {\r\n label: string;\r\n key: string;\r\n children: NxeHfDateNode[];\r\n /** The draft-set entries this node covers (day keys, or the blanks sentinel). */\r\n leafKeys: any[];\r\n}\r\n\r\n/**\r\n * Normalizes a raw cell value to its header-filter key: blank-ish → the `(Blanks)` sentinel,\r\n * date columns → a `yyyy-MM-dd` day key (the tree's leaf unit), else the raw value.\r\n */\r\nexport function nxeHfKey(raw: any, isDate: boolean): any {\r\n if (raw == null || raw === '') {\r\n return NXE_HF_BLANKS;\r\n }\r\n if (isDate) {\r\n const dt = parseDateValue(raw);\r\n return dt ? dt.toFormat('yyyy-MM-dd') : String(raw);\r\n }\r\n return raw;\r\n}\r\n\r\n/** How the model reads rows and column values — the host (grid, pivot) supplies these. */\r\nexport interface NxeHeaderFilterSource<C> {\r\n /** The rows the value list is built from. dx does NOT cascade header-filter lists for\r\n client arrays (bright audit V6) — the grid passes its FULL dataSource here. */\r\n rows(): readonly any[];\r\n /** Raw cell value of a row for this column (dotted-path aware on the grid). */\r\n rawValue(column: C, row: any): any;\r\n /** Formatted display text for a row — used for non-blank, non-boolean-bucket items. */\r\n displayText(column: C, row: any): string;\r\n /** Date column → values bucket into the Year > Month > Day tree. */\r\n isDate(column: C): boolean;\r\n /** dx sorts lookup columns by display text, everything else by raw value. */\r\n sortByDisplayText(column: C): boolean;\r\n /** dx boolean buckets label Yes/No (Yes first); `null` = not a boolean bucket. */\r\n boolLabel(column: C, raw: any): 'Yes' | 'No' | null;\r\n /** Raw-value comparator (numbers numeric, dates by instant, else locale strings). */\r\n compare(a: any, b: any): number;\r\n}\r\n\r\nexport class NxeHeaderFilterModel<C = unknown> {\r\n private static readonly MONTH_NAMES = [\r\n 'January', 'February', 'March', 'April', 'May', 'June',\r\n 'July', 'August', 'September', 'October', 'November', 'December',\r\n ];\r\n\r\n /** The column whose popup is open (`null` = closed). */\r\n readonly column = signal<C | null>(null);\r\n /** The checked key set being edited in the popup (committed by the host on OK). */\r\n readonly draft = signal<ReadonlySet<any>>(new Set());\r\n readonly search = signal('');\r\n readonly expanded = signal<ReadonlySet<string>>(new Set());\r\n\r\n constructor(private readonly source: NxeHeaderFilterSource<C>) {}\r\n\r\n /** This column's header-filter key for a raw value. */\r\n key(column: C, raw: any): any {\r\n return nxeHfKey(raw, this.source.isDate(column));\r\n }\r\n\r\n /** Distinct {key, text} for the open column — `(Blanks)` first, then Yes/No or values ascending. */\r\n readonly distinct = computed<{ key: any; text: string }[]>(() => {\r\n const col = this.column();\r\n if (!col) {\r\n return [];\r\n }\r\n const seen = new Map<any, { key: any; text: string; raw: any }>();\r\n for (const row of this.source.rows()) {\r\n const raw = this.source.rawValue(col, row);\r\n const key = this.key(col, raw);\r\n if (!seen.has(key)) {\r\n seen.set(key, {\r\n key,\r\n raw,\r\n text:\r\n key === NXE_HF_BLANKS\r\n ? '(Blanks)'\r\n : (this.source.boolLabel(col, raw) ?? this.source.displayText(col, row)),\r\n });\r\n }\r\n }\r\n // dx sorts lookup columns by display text, everything else by raw value.\r\n const byDisplay = this.source.sortByDisplayText(col);\r\n return [...seen.values()]\r\n .sort((a, b) => {\r\n if (a.key === NXE_HF_BLANKS) {\r\n return -1;\r\n }\r\n if (b.key === NXE_HF_BLANKS) {\r\n return 1;\r\n }\r\n const la = this.source.boolLabel(col, a.raw);\r\n const lb = this.source.boolLabel(col, b.raw);\r\n if (la && lb) {\r\n return la === lb ? 0 : la === 'Yes' ? -1 : 1;\r\n }\r\n return byDisplay ? a.text.localeCompare(b.text) : this.source.compare(a.raw, b.raw);\r\n })\r\n .map(({ key, text }) => ({ key, text }));\r\n });\r\n\r\n readonly distinctFiltered = computed(() => {\r\n const q = this.search().trim().toLowerCase();\r\n return q ? this.distinct().filter((d) => d.text.toLowerCase().includes(q)) : this.distinct();\r\n });\r\n\r\n // --- Date-column header filter: Year > Month > Day tree (dx groupInterval default) ----------\r\n readonly isDate = computed(() => {\r\n const col = this.column();\r\n return !!col && this.source.isDate(col);\r\n });\r\n\r\n readonly dateTree = computed<NxeHfDateNode[]>(() => {\r\n const col = this.column();\r\n if (!col || !this.source.isDate(col)) {\r\n return [];\r\n }\r\n const days = new Set<string>();\r\n const unparseable = new Map<string, any>();\r\n let hasBlanks = false;\r\n for (const row of this.source.rows()) {\r\n const key = this.key(col, this.source.rawValue(col, row));\r\n if (key === NXE_HF_BLANKS) {\r\n hasBlanks = true;\r\n } else if (typeof key === 'string' && /^\\d{4}-\\d{2}-\\d{2}$/.test(key)) {\r\n days.add(key);\r\n } else {\r\n // nxeHfKey's String(raw) fallback for unparseable dates — a flat leaf, not Y>M>D\r\n unparseable.set(String(key), key);\r\n }\r\n }\r\n const out: NxeHfDateNode[] = [];\r\n if (hasBlanks) {\r\n out.push({ label: '(Blanks)', key: 'blanks', children: [], leafKeys: [NXE_HF_BLANKS] });\r\n }\r\n const byYear = new Map<string, Map<number, string[]>>();\r\n for (const day of [...days].sort()) {\r\n const year = day.slice(0, 4);\r\n const month = Number(day.slice(5, 7));\r\n if (!byYear.has(year)) {\r\n byYear.set(year, new Map());\r\n }\r\n const months = byYear.get(year)!;\r\n if (!months.has(month)) {\r\n months.set(month, []);\r\n }\r\n months.get(month)!.push(day);\r\n }\r\n for (const [year, months] of byYear) {\r\n const monthNodes: NxeHfDateNode[] = [];\r\n for (const [month, dayKeys] of months) {\r\n monthNodes.push({\r\n label: NxeHeaderFilterModel.MONTH_NAMES[month - 1],\r\n key: `m:${year}-${month}`,\r\n children: dayKeys.map((d) => ({\r\n label: String(Number(d.slice(8, 10))),\r\n key: `d:${d}`,\r\n children: [],\r\n leafKeys: [d],\r\n })),\r\n leafKeys: dayKeys,\r\n });\r\n }\r\n out.push({\r\n label: year,\r\n key: `y:${year}`,\r\n children: monthNodes,\r\n leafKeys: monthNodes.flatMap((m) => m.leafKeys),\r\n });\r\n }\r\n for (const [label, key] of [...unparseable].sort((a, b) => a[0].localeCompare(b[0]))) {\r\n out.push({ label, key: `o:${label}`, children: [], leafKeys: [key] });\r\n }\r\n return out;\r\n });\r\n\r\n /**\r\n * Search prunes the tree dx-style: a node stays if its label matches or a descendant does;\r\n * a matched-label node with no matching descendants collapses to a leaf (keeps all its keys).\r\n */\r\n readonly dateTreeFiltered = computed<NxeHfDateNode[]>(() => {\r\n const q = this.search().trim().toLowerCase();\r\n if (!q) {\r\n return this.dateTree();\r\n }\r\n const prune = (nodes: NxeHfDateNode[]): NxeHfDateNode[] =>\r\n nodes\r\n .map((n) => {\r\n const kids = prune(n.children);\r\n if (kids.length) {\r\n return { ...n, children: kids, leafKeys: kids.flatMap((k) => k.leafKeys) };\r\n }\r\n if (n.label.toLowerCase().includes(q)) {\r\n return { ...n, children: [] };\r\n }\r\n return null;\r\n })\r\n .filter((n): n is NxeHfDateNode => !!n);\r\n return prune(this.dateTree());\r\n });\r\n\r\n toggleExpand(key: string): void {\r\n this.expanded.update((set) => {\r\n const next = new Set(set);\r\n next.has(key) ? next.delete(key) : next.add(key);\r\n return next;\r\n });\r\n }\r\n\r\n /** While searching every surviving branch shows expanded (dx auto-expands matches). */\r\n nodeExpanded(key: string): boolean {\r\n return this.search().trim() ? true : this.expanded().has(key);\r\n }\r\n\r\n nodeChecked(n: NxeHfDateNode): boolean {\r\n const draft = this.draft();\r\n return n.leafKeys.length > 0 && n.leafKeys.every((k) => draft.has(k));\r\n }\r\n\r\n nodeIndeterminate(n: NxeHfDateNode): boolean {\r\n const draft = this.draft();\r\n return !this.nodeChecked(n) && n.leafKeys.some((k) => draft.has(k));\r\n }\r\n\r\n toggleNode(n: NxeHfDateNode): void {\r\n const removing = this.nodeChecked(n);\r\n this.draft.update((set) => {\r\n const next = new Set(set);\r\n for (const k of n.leafKeys) {\r\n removing ? next.delete(k) : next.add(k);\r\n }\r\n return next;\r\n });\r\n }\r\n\r\n /** Every selectable key of the open column (tree leaves for dates, list keys otherwise). */\r\n readonly allKeys = computed<any[]>(() =>\r\n this.isDate()\r\n ? this.dateTree().flatMap((n) => n.leafKeys)\r\n : this.distinct().map((d) => d.key),\r\n );\r\n\r\n /** The keys currently shown in the popup — with a search active, only the matches. */\r\n readonly visibleKeys = computed<any[]>(() =>\r\n this.isDate()\r\n ? this.dateTreeFiltered().flatMap((n) => n.leafKeys)\r\n : this.distinctFiltered().map((d) => d.key),\r\n );\r\n\r\n /** (Select All) state/toggle operate on the VISIBLE keys (dx: search scopes Select All). */\r\n readonly allChecked = computed(() => {\r\n const all = this.visibleKeys();\r\n const draft = this.draft();\r\n return all.length > 0 && all.every((k) => draft.has(k));\r\n });\r\n\r\n /** Whether every key of the whole column is checked — decides \"no filter\" on apply. */\r\n readonly fullChecked = computed(() => {\r\n const all = this.allKeys();\r\n const draft = this.draft();\r\n return all.length > 0 && all.every((k) => draft.has(k));\r\n });\r\n\r\n /**\r\n * Reset the popup state for `column` (check-on-open — FROZEN, see DEFAULTS.md):\r\n * no applied filter → everything checked; else start from the applied set.\r\n */\r\n open(column: C, applied: ReadonlySet<any> | undefined): void {\r\n this.column.set(column);\r\n this.search.set('');\r\n this.expanded.set(new Set());\r\n this.draft.set(applied ? new Set(applied) : new Set(this.allKeys()));\r\n }\r\n\r\n close(): void {\r\n this.column.set(null);\r\n }\r\n\r\n toggleValue(value: any): void {\r\n this.draft.update((set) => {\r\n const next = new Set(set);\r\n next.has(value) ? next.delete(value) : next.add(value);\r\n return next;\r\n });\r\n }\r\n\r\n toggleAll(): void {\r\n const visible = this.visibleKeys();\r\n const removing = this.allChecked();\r\n this.draft.update((set) => {\r\n const next = new Set(set);\r\n for (const k of visible) {\r\n removing ? next.delete(k) : next.add(k);\r\n }\r\n return next;\r\n });\r\n }\r\n\r\n /**\r\n * The set the host stores on OK: everything checked (or nothing to choose from) =\r\n * explicit \"no filter\" (`null` so a declarative seed can't resurrect); else the\r\n * allowed-key set (empty = empty grid).\r\n */\r\n applyResult(): ReadonlySet<any> | null {\r\n const clear = this.fullChecked() || this.allKeys().length === 0;\r\n return clear ? null : new Set(this.draft());\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n input,\r\n output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { NxeHeaderFilterModel } from './nxe-header-filter.model';\r\n\r\n/**\r\n * The header-filter popup panel — the `.nxe-hf-*` chunk extracted from `nxe-data-grid`'s\r\n * template (pivot parity Phase 3a) so the pivot can open the same popup on pages with no\r\n * data grid. Same DOM, same FROZEN classes (`.nxe-hf-item`/`.nxe-hf-search`/… — DEFAULTS.md):\r\n * the host element carries `dx-header-filter-menu nxe-hf-panel`, exactly where the old\r\n * template's root `<div>` sat inside the overlay pane.\r\n *\r\n * Renders whatever {@link NxeHeaderFilterModel} it is given — checkbox list or the date\r\n * Year > Month > Day tree — and emits `applied`/`cancelled` for the host to commit/close;\r\n * the panel itself never touches the host's filter state.\r\n */\r\n@Component({\r\n selector: 'nxe-header-filter-panel',\r\n standalone: true,\r\n imports: [NgTemplateOutlet],\r\n templateUrl: './nxe-header-filter-panel.component.html',\r\n styleUrl: './nxe-header-filter-panel.component.scss',\r\n host: { class: 'dx-header-filter-menu nxe-hf-panel' },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeHeaderFilterPanelComponent {\r\n readonly model = input.required<NxeHeaderFilterModel<any>>();\r\n /** Live predicate (re-read every CD, like the grid template did) — a mid-open config\r\n change to `search.enabled` still shows/hides the box. */\r\n readonly searchEnabled = input<() => boolean>(() => true);\r\n /** OK — the host commits the draft and closes. */\r\n readonly applied = output<void>();\r\n /** Cancel — the host closes without committing. */\r\n readonly cancelled = output<void>();\r\n\r\n protected showSearch(): boolean {\r\n return this.searchEnabled()();\r\n }\r\n}\r\n","@if (showSearch()) {\r\n <input\r\n class=\"nxe-hf-search\"\r\n type=\"text\"\r\n placeholder=\"Search\"\r\n [value]=\"model().search()\"\r\n (input)=\"model().search.set($any($event.target).value)\" />\r\n}\r\n<div class=\"nxe-hf-list\" [class.nxe-hf-tree]=\"model().isDate()\">\r\n <label class=\"nxe-hf-item nxe-hf-selectall\">\r\n <input type=\"checkbox\" [checked]=\"model().allChecked()\" (change)=\"model().toggleAll()\" />\r\n <span>Select All</span>\r\n </label>\r\n @if (model().isDate()) {\r\n <!-- dx date header filter: Year > Month > Day checkbox tree -->\r\n <ng-container\r\n [ngTemplateOutlet]=\"hfTreeNodes\"\r\n [ngTemplateOutletContext]=\"{ $implicit: model().dateTreeFiltered() }\" />\r\n } @else {\r\n @for (item of model().distinctFiltered(); track item.key) {\r\n <label class=\"nxe-hf-item\">\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"model().draft().has(item.key)\"\r\n (change)=\"model().toggleValue(item.key)\" />\r\n <span>{{ item.text }}</span>\r\n </label>\r\n }\r\n }\r\n</div>\r\n<div class=\"nxe-hf-actions\">\r\n <button type=\"button\" class=\"nxe-hf-btn nxe-hf-ok\" (click)=\"applied.emit()\">OK</button>\r\n <button type=\"button\" class=\"nxe-hf-btn\" (click)=\"cancelled.emit()\">Cancel</button>\r\n</div>\r\n\r\n<!-- Recursive date-tree nodes for the header-filter popup -->\r\n<ng-template #hfTreeNodes let-nodes>\r\n @for (n of nodes; track n.key) {\r\n <div class=\"nxe-hf-tree-node\">\r\n @if (n.children.length) {\r\n <span\r\n class=\"nxe-hf-tree-toggle\"\r\n [class.nxe-expanded]=\"model().nodeExpanded(n.key)\"\r\n (click)=\"model().toggleExpand(n.key)\"></span>\r\n } @else {\r\n <span class=\"nxe-hf-tree-toggle-stub\"></span>\r\n }\r\n <label class=\"nxe-hf-item\">\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"model().nodeChecked(n)\"\r\n [indeterminate]=\"model().nodeIndeterminate(n)\"\r\n (change)=\"model().toggleNode(n)\" />\r\n <span>{{ n.label }}</span>\r\n </label>\r\n @if (n.children.length && model().nodeExpanded(n.key)) {\r\n <div class=\"nxe-hf-tree-children\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"hfTreeNodes\"\r\n [ngTemplateOutletContext]=\"{ $implicit: n.children }\" />\r\n </div>\r\n }\r\n </div>\r\n }\r\n</ng-template>\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { ViewContainerRef } from '@angular/core';\r\nimport { nxePane } from '@nexterajs/ui/styling';\r\nimport { NxeHeaderFilterModel } from './nxe-header-filter.model';\r\nimport { NxeHeaderFilterPanelComponent } from './nxe-header-filter-panel.component';\r\n\r\n/**\r\n * CDK overlay wiring for the header-filter popup — extracted from `nxe-data-grid` (pivot\r\n * parity Phase 3a) so any host (grid header funnel, pivot field panel) opens the identical\r\n * popup: dropped below the origin start-aligned (end-aligned fallback), repositioning on\r\n * scroll, closing on a transparent-backdrop click, pane carrying `nxePane('nxe-hf-pane')`\r\n * (the `.nxe-widget` font contract for body-level panes).\r\n */\r\nexport interface NxeHeaderFilterOverlayOptions {\r\n overlay: Overlay;\r\n /** Anchors the panel in the caller's injector AND change-detection tree — exactly what\r\n the grid's old `TemplatePortal(panel, viewContainerRef)` attachment did. */\r\n viewContainerRef: ViewContainerRef;\r\n /** The clicked funnel/trigger element the panel connects to. */\r\n origin: HTMLElement;\r\n model: NxeHeaderFilterModel<any>;\r\n /** Live predicate for the in-popup search box (re-read every CD). */\r\n searchEnabled: () => boolean;\r\n /** OK — commit the draft and close (the host disposes/detaches the returned ref). */\r\n onApply: () => void;\r\n /** Cancel button or backdrop click — close without committing. */\r\n onClose: () => void;\r\n}\r\n\r\n/** Create + attach the header-filter popup; the caller keeps the ref to detach/dispose. */\r\nexport function openNxeHeaderFilterOverlay(options: NxeHeaderFilterOverlayOptions): OverlayRef {\r\n const overlayRef = options.overlay.create({\r\n positionStrategy: options.overlay\r\n .position()\r\n .flexibleConnectedTo(options.origin)\r\n .withPositions([\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top' },\r\n ]),\r\n scrollStrategy: options.overlay.scrollStrategies.reposition(),\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n panelClass: nxePane('nxe-hf-pane'),\r\n });\r\n overlayRef.backdropClick().subscribe(() => options.onClose());\r\n // Escape closes the filter menu (dx). This subscription is also what makes CDK deliver the\r\n // key here at all: OverlayKeyboardDispatcher dispatches to the topmost overlay that HAS a\r\n // keydown observer, so without it Escape fell through to whatever overlay sits underneath —\r\n // on the pivot that is the field chooser, which would close and strand this popup on a\r\n // detached anchor.\r\n overlayRef.keydownEvents().subscribe((event) => {\r\n if (event.key === 'Escape') {\r\n event.stopPropagation();\r\n options.onClose();\r\n }\r\n });\r\n const panelRef = overlayRef.attach(\r\n new ComponentPortal(NxeHeaderFilterPanelComponent, options.viewContainerRef),\r\n );\r\n panelRef.setInput('model', options.model);\r\n panelRef.setInput('searchEnabled', options.searchEnabled);\r\n panelRef.instance.applied.subscribe(() => options.onApply());\r\n panelRef.instance.cancelled.subscribe(() => options.onClose());\r\n return overlayRef;\r\n}\r\n","import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\r\n\r\n/** `dxo-grouping` — only `[autoExpandAll]=\"true\"` is used (24 grids). */\r\n@Component({\r\n selector: 'nxe-grouping',\r\n standalone: true,\r\n template: '',\r\n host: { style: 'display: none' },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeGroupingComponent {\r\n readonly autoExpandAll = input(true);\r\n}\r\n\r\n/** `dxo-group-panel` — only `[visible]` is used (23 grids). */\r\n@Component({\r\n selector: 'nxe-group-panel',\r\n standalone: true,\r\n template: '',\r\n host: { style: 'display: none' },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeGroupPanelComponent {\r\n readonly visible = input<boolean | 'auto'>(false);\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n contentChildren,\r\n Directive,\r\n input,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { NxeColumnFormat, NxeCustomizeText } from './nxe-grid.types';\r\n\r\n/** Structural shape the grid reads off a total/group summary item. */\r\nexport interface NxeSummaryItemLike {\r\n column(): string;\r\n summaryType(): 'sum' | 'count' | 'min' | 'max' | 'avg' | 'custom';\r\n name(): string | undefined;\r\n displayFormat(): string;\r\n customizeText(): NxeCustomizeText | undefined;\r\n valueFormat(): NxeColumnFormat | undefined;\r\n alignByColumn(): boolean;\r\n showInGroupFooter(): boolean;\r\n showInColumn(): string | undefined;\r\n}\r\n\r\n/** Shared base for total/group summary items. The app only uses `summaryType=\"sum\"`. */\r\n@Directive()\r\nabstract class NxeSummaryItemBase implements NxeSummaryItemLike {\r\n readonly column = input<string>('');\r\n readonly summaryType = input<'sum' | 'count' | 'min' | 'max' | 'avg' | 'custom'>('sum');\r\n /** Identifier passed to `calculateCustomSummary` for `summaryType='custom'` items. */\r\n readonly name = input<string | undefined>(undefined);\r\n /** Positional template; `{0}` is replaced by the customized/formatted value. */\r\n readonly displayFormat = input<string>('{0}');\r\n readonly customizeText = input<NxeCustomizeText | undefined>(undefined);\r\n readonly valueFormat = input<NxeColumnFormat | undefined>(undefined);\r\n readonly alignByColumn = input(false);\r\n /** Render this group aggregate in a footer row under the group instead of the group row. */\r\n readonly showInGroupFooter = input(false);\r\n readonly showInColumn = input<string | undefined>(undefined);\r\n}\r\n\r\n/** `dxi-total-item` — a grand-total footer aggregate. */\r\n@Component({\r\n selector: 'nxe-total-item',\r\n standalone: true,\r\n template: '',\r\n host: { style: 'display: none' },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeTotalItemComponent extends NxeSummaryItemBase {}\r\n\r\n/** `dxi-group-item` — a per-group footer aggregate. */\r\n@Component({\r\n selector: 'nxe-group-item',\r\n standalone: true,\r\n template: '',\r\n host: { style: 'display: none' },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeGroupItemComponent extends NxeSummaryItemBase {}\r\n\r\n/** `dxo-summary` — container collecting `nxe-total-item` / `nxe-group-item` children. */\r\n@Component({\r\n selector: 'nxe-summary',\r\n standalone: true,\r\n template: '<ng-content />',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeSummaryComponent {\r\n /**\r\n * DevExtreme `calculateCustomSummary` (orbit addition): called with the dx protocol —\r\n * `{name, summaryProcess:'start'}`, then `'calculate'` once per row (`options.value` = the\r\n * row object), then `'finalize'`; the handler mutates `options.totalValue`.\r\n */\r\n readonly calculateCustomSummary = input<((options: any) => void) | undefined>(undefined);\r\n readonly totalItems = contentChildren(NxeTotalItemComponent);\r\n readonly groupItems = contentChildren(NxeGroupItemComponent);\r\n}\r\n","import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\r\n\r\n/** `dxo-paging` — internal client paging. Presence enables paging; `[pageSize]`/`[pageIndex]` used. */\r\n@Component({\r\n selector: 'nxe-paging',\r\n standalone: true,\r\n template: '',\r\n host: { style: 'display: none' },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxePagingComponent {\r\n readonly pageSize = input<number>(20);\r\n readonly pageIndex = input<number>(0);\r\n readonly enabled = input<boolean>(true);\r\n}\r\n\r\n/** `dxo-pager` — the pager UI config. */\r\n@Component({\r\n selector: 'nxe-pager',\r\n standalone: true,\r\n template: '',\r\n host: { style: 'display: none' },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxePagerComponent {\r\n readonly visible = input<boolean | 'auto'>('auto');\r\n readonly allowedPageSizes = input<number[] | 'auto'>('auto');\r\n readonly showPageSizeSelector = input(false);\r\n readonly showNavigationButtons = input(false);\r\n readonly showInfo = input(false);\r\n readonly displayMode = input<'adaptive' | 'compact' | 'full'>('adaptive');\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { ChangeDetectionStrategy, Component, input, model, ViewEncapsulation } from '@angular/core';\r\n\r\n/** A tracked inline change (matches the app's local `Change<T>` shape). */\r\nexport interface NxeGridChange<T = any> {\r\n type: 'insert' | 'update' | 'remove';\r\n key: any;\r\n data: Partial<T>;\r\n}\r\n\r\n/**\r\n * `dxo-editing` — inline editing config. In this app editing is almost always template-driven\r\n * (cell templates host `nxe-*` editors two-way-bound to `key.data.<field>`), so `mode=\"cell\"` +\r\n * `allowUpdating` are effectively decorative there. `mode=\"row\"` with `[(changes)]`/`[(editRowKey)]`\r\n * (autonumber-detail) and native cell editors (job-upsert) drive the grid's native inline editing.\r\n */\r\n@Component({\r\n selector: 'nxe-editing',\r\n standalone: true,\r\n template: '',\r\n host: { style: 'display: none' },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeEditingComponent {\r\n readonly mode = input<'cell' | 'row' | 'batch'>('cell');\r\n readonly allowUpdating = input(false);\r\n readonly allowAdding = input(false);\r\n readonly allowDeleting = input(false);\r\n /** Two-way tracked changes (autonumber-detail's `Change<T>[]`). */\r\n readonly changes = model<NxeGridChange[]>([]);\r\n /** Two-way key of the row currently in edit mode (row mode). */\r\n readonly editRowKey = model<any>(null);\r\n}\r\n","import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\r\n\r\n/**\r\n * `nxe-filter-row` — drop-in for DevExtreme `dxo-filter-row` (orbit addition; psak expressed\r\n * the same config through the grid's `[filterRow]` object input, which remains supported).\r\n * A no-render config element read by the parent `nxe-data-grid`.\r\n */\r\n@Component({\r\n selector: 'nxe-filter-row',\r\n standalone: true,\r\n template: '',\r\n host: { style: 'display: none' },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeFilterRowComponent {\r\n readonly visible = input(false);\r\n /** DevExtreme parity (`auto`/`onClick`); the nxe filter row always applies on input. */\r\n readonly applyFilter = input<string | undefined>(undefined);\r\n}\r\n","import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\r\n\r\n/**\r\n * `nxe-master-detail` — drop-in for DevExtreme `dxo-master-detail` (orbit addition).\r\n *\r\n * A no-render config element read by the parent `nxe-data-grid`. When `enabled`, the grid\r\n * prepends a `dx-command-expand` column; expanding a row renders a\r\n * `<tr class=\"dx-master-detail-row\">` hosting the named sibling\r\n * `<ng-template nxeTemplate=\"...\">` with `{ data, rowIndex, key }` — instantiated ONLY while\r\n * expanded, preserving the app's lazy nested-grid loading (`onRowExpanding` fires first).\r\n */\r\n@Component({\r\n selector: 'nxe-master-detail',\r\n standalone: true,\r\n template: '',\r\n host: { style: 'display: none' },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeMasterDetailComponent {\r\n readonly enabled = input(false);\r\n /** Name of the sibling `nxeTemplate` rendered as the detail section (default `detail`). */\r\n readonly template = input<string>('detail');\r\n}\r\n","import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\r\n\r\n/**\r\n * `dxo-scrolling` — accepted for parity.\r\n *\r\n * Grid: the only usage is `rowRenderingMode=\"virtual\"` (ledger-list), which renders only\r\n * visible rows but loads all data; nxe-data-grid renders all rows (datasets are small\r\n * enough), so it stays a no-op config there.\r\n *\r\n * Pivot (LIVE since W4 Lane 3): `NxePivotGridComponent` contentChild's this and\r\n * `mode: 'virtual'` arms ROW WINDOWING — for `rowHeaderLayout: 'tree'` ONLY (the standard\r\n * layout's rowspan-merged parent labels conflict with row slicing; DEFAULTS.md). Render-only:\r\n * fixed 31px row pitch, spacer rows keep the scrollbar honest, and the model/export/chart\r\n * always see every row. The DA page projects `mode=\"virtual\"` but renders the standard\r\n * layout → no-op there, dx-consistent with its pane-based virtual scrolling being a render\r\n * optimization, never a data change.\r\n */\r\n@Component({\r\n selector: 'nxe-scrolling',\r\n standalone: true,\r\n template: '',\r\n host: { style: 'display: none' },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeScrollingComponent {\r\n readonly mode = input<'standard' | 'virtual' | 'infinite'>('standard');\r\n readonly rowRenderingMode = input<'standard' | 'virtual'>('standard');\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Workbook } from '@nexterajs/ui/excel';\r\nimport { nxeSaveAs } from '@nexterajs/ui/excel';\r\nimport { parseDateValue } from '@nexterajs/ui/intl';\r\nimport { nxeDatePattern } from './nxe-format.util';\r\nimport { NxeExportColumn, NxeGridInstance } from './nxe-grid.types';\r\n\r\nexport interface NxeExcelExportOptions {\r\n /** File name (`.xlsx` appended if missing). */\r\n fileName: string;\r\n sheetName?: string;\r\n /** Default true — sets the sheet auto-filter over the header range. */\r\n autoFilter?: boolean;\r\n /** Default true — defaults every cell font to 'Calibri Light' (form-report passes false). */\r\n applyFont?: boolean;\r\n}\r\n\r\nfunction getRaw(row: any, field: string): any {\r\n if (!field || row == null) {\r\n return undefined;\r\n }\r\n return field.includes('.') ? field.split('.').reduce((o: any, k) => o?.[k], row) : row[field];\r\n}\r\n\r\n/** A cell's exceljs value + optional number format. */\r\nfunction cellValue(row: any, col: NxeExportColumn): { value: any; numFmt?: string } {\r\n const raw = getRaw(row, col.dataField);\r\n if (raw == null || raw === '') {\r\n return { value: '' };\r\n }\r\n switch (col.dataType) {\r\n case 'number': {\r\n const num = typeof raw === 'number' ? raw : Number(raw);\r\n if (isNaN(num)) {\r\n return { value: String(raw) };\r\n }\r\n // dx number masks ≈ exceljs numFmt; convert single-quoted literals to double-quoted.\r\n const mask = typeof col.format === 'string' ? col.format.replace(/'/g, '\"') : undefined;\r\n return { value: num, numFmt: mask };\r\n }\r\n case 'date': {\r\n const dt = parseDateValue(raw);\r\n if (!dt) {\r\n return { value: String(raw) };\r\n }\r\n // exceljs date codes are lowercase (dd mmm yyyy hh:mm).\r\n return { value: dt.toJSDate(), numFmt: nxeDatePattern(col.format).toLowerCase() };\r\n }\r\n case 'boolean':\r\n return { value: raw ? 'true' : 'false' };\r\n default:\r\n return { value: String(raw) };\r\n }\r\n}\r\n\r\n/**\r\n * Replacement for DevExtreme's `exportDataGrid({component, worksheet, autoFilterEnabled})`.\r\n * Walks an {@link NxeGridInstance}'s currently-visible columns + filtered/sorted rows into an\r\n * exceljs sheet (header row + autofilter + per-column numFmt), defaults the font to 'Calibri\r\n * Light' (preserving the app's `formatExcel`), and saves via `nxeSaveAs` — matching the prior\r\n * `report.helper.exportExcel` pipeline.\r\n */\r\nexport async function exportNxeGridToExcel(\r\n grid: NxeGridInstance,\r\n opts: NxeExcelExportOptions,\r\n): Promise<void> {\r\n const workbook = new Workbook();\r\n const ws = workbook.addWorksheet(opts.sheetName);\r\n const cols = grid.getVisibleColumns();\r\n const rows = grid.getVisibleRows();\r\n\r\n ws.addRow(cols.map((c) => c.caption));\r\n for (const row of rows) {\r\n const cells = cols.map((c) => cellValue(row, c));\r\n const r = ws.addRow(cells.map((c) => c.value));\r\n cells.forEach((c, i) => {\r\n if (c.numFmt) {\r\n r.getCell(i + 1).numFmt = c.numFmt;\r\n }\r\n });\r\n }\r\n if (opts.autoFilter !== false && cols.length > 0) {\r\n ws.autoFilter = { from: { row: 1, column: 1 }, to: { row: 1, column: cols.length } };\r\n }\r\n if (opts.applyFont !== false) {\r\n ws.eachRow((row) =>\r\n row.eachCell((cell) => {\r\n if (!cell.font?.name) {\r\n cell.font = Object.assign(cell.font || {}, { name: 'Calibri Light' });\r\n }\r\n }),\r\n );\r\n }\r\n const buffer = await workbook.xlsx.writeBuffer();\r\n const fileName = opts.fileName.endsWith('.xlsx') ? opts.fileName : `${opts.fileName}.xlsx`;\r\n nxeSaveAs(new Blob([buffer], { type: 'application/octet-stream' }), fileName);\r\n}\r\n\r\n/** Options for {@link exportDataGrid} — mirrors DevExtreme's worksheet-injection call form. */\r\nexport interface NxeExportDataGridOptions {\r\n component: NxeGridInstance;\r\n /**\r\n * Caller-supplied worksheet — exceljs `Worksheet` or the in-house one; typed loosely\r\n * because the two APIs are structural cousins, not the same declared type.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n worksheet: any;\r\n autoFilterEnabled?: boolean;\r\n}\r\n\r\n/**\r\n * Drop-in for DevExtreme's `exportDataGrid({component, worksheet, autoFilterEnabled})`\r\n * (orbit addition): writes the grid's visible columns + rows into the CALLER's worksheet —\r\n * the caller keeps ownership of the workbook, post-formatting, and saving\r\n * (`report.helper.exportExcel` pipeline).\r\n */\r\nexport async function exportDataGrid(opts: NxeExportDataGridOptions): Promise<void> {\r\n const ws = opts.worksheet;\r\n const cols = opts.component.getVisibleColumns();\r\n const rows = opts.component.getVisibleRows();\r\n\r\n ws.addRow(cols.map((c) => c.caption));\r\n for (const row of rows) {\r\n const cells = cols.map((c) => cellValue(row, c));\r\n const r = ws.addRow(cells.map((c) => c.value));\r\n cells.forEach((c, i) => {\r\n if (c.numFmt) {\r\n r.getCell(i + 1).numFmt = c.numFmt;\r\n }\r\n });\r\n }\r\n if (opts.autoFilterEnabled && cols.length > 0) {\r\n ws.autoFilter = { from: { row: 1, column: 1 }, to: { row: 1, column: cols.length } };\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { NgZone } from '@angular/core';\r\nimport { NxeGestureClickSuppression } from './nxe-grid-drag';\r\nimport { nxeHeaderDataCells, nxeLeafHeaderRow } from './nxe-grid-dom';\r\n\r\n/**\r\n * Pointer-based column-resize engine (dx `allowColumnResizing` parity).\r\n *\r\n * `widget` mode resizes only the dragged column — the table width follows; `nextColumn` (dx\r\n * default) trades width with the next visible column at constant table width; both clamp at\r\n * `columnMinWidth`. During the drag we write `<col>`/table widths directly (no change detection\r\n * per pointermove); the grid commits the final widths into its override signal on release —\r\n * freezing the layout exactly like dx does after the first manual resize.\r\n */\r\n\r\nexport interface NxeGridResizeHooks {\r\n zone: NgZone;\r\n host: () => HTMLElement;\r\n mode: () => 'nextColumn' | 'widget';\r\n minWidth: () => number;\r\n /** Drag started — the grid pauses its auto-width engine. */\r\n onStart: () => void;\r\n /** Escape/pointercancel — inline styles were restored, resume auto-width. */\r\n onCancel: () => void;\r\n /** Final widths per affected column; the grid freezes overrides and emits width events. */\r\n onCommit: (changes: { field: string; from: number; to: number }[]) => void;\r\n}\r\n\r\ninterface ActiveResize {\r\n field: string;\r\n nextField: string | null;\r\n /** The pointer that started the gesture — other pointers (second touch) are ignored. */\r\n pointerId: number;\r\n startX: number;\r\n startW: number;\r\n startNextW: number;\r\n colEl: HTMLTableColElement;\r\n nextColEl: HTMLTableColElement | null;\r\n tableEl: HTMLTableElement;\r\n startTableW: number;\r\n prevColStyle: string;\r\n prevNextStyle: string;\r\n prevTableStyle: string;\r\n lastW: number;\r\n lastNextW: number;\r\n}\r\n\r\nexport class NxeGridResizeController {\r\n private active: ActiveResize | null = null;\r\n private readonly suppression = new NxeGestureClickSuppression();\r\n\r\n private readonly onMove = (e: PointerEvent): void => this.pointerMove(e);\r\n private readonly onUp = (e: PointerEvent): void => {\r\n if (this.active && e.pointerId !== this.active.pointerId) {\r\n return;\r\n }\r\n this.pointerUp();\r\n };\r\n private readonly onCancelEv = (e: PointerEvent): void => {\r\n if (this.active && e.pointerId !== this.active.pointerId) {\r\n return;\r\n }\r\n this.cancel();\r\n };\r\n private readonly onKey = (e: KeyboardEvent): void => {\r\n if (e.key === 'Escape') {\r\n this.cancel();\r\n }\r\n };\r\n\r\n constructor(private readonly hooks: NxeGridResizeHooks) {}\r\n\r\n /** `visibleIndex`/`lead` locate the header cell + `<col>`; `nextField` only in nextColumn mode. */\r\n start(\r\n field: string,\r\n nextField: string | null,\r\n visibleIndex: number,\r\n lead: number,\r\n event: PointerEvent,\r\n ): void {\r\n if (event.button !== 0 || this.active) {\r\n return;\r\n }\r\n event.stopPropagation(); // the header td above would otherwise start a group drag\r\n event.preventDefault();\r\n const host = this.hooks.host();\r\n const table = host.querySelector<HTMLTableElement>('.dx-datagrid-content > .dx-datagrid-table');\r\n const headerRow = nxeLeafHeaderRow(host);\r\n if (!table || !headerRow) {\r\n return;\r\n }\r\n const cols = Array.from(table.querySelectorAll<HTMLTableColElement>(':scope > colgroup > col'));\r\n // The colgroup still counts command columns, so it keeps the lead offset; the header row\r\n // does not, because with bands the command cells span down from the row above.\r\n const headerCells = nxeHeaderDataCells(headerRow);\r\n const colEl = cols[lead + visibleIndex];\r\n const cell = headerCells[visibleIndex];\r\n if (!colEl || !cell) {\r\n return;\r\n }\r\n const nextColEl = nextField != null ? cols[lead + visibleIndex + 1] ?? null : null;\r\n const nextCell = nextField != null ? headerCells[visibleIndex + 1] : null;\r\n this.active = {\r\n field,\r\n nextField,\r\n pointerId: event.pointerId,\r\n startX: event.clientX,\r\n startW: cell.getBoundingClientRect().width,\r\n startNextW: nextCell ? nextCell.getBoundingClientRect().width : 0,\r\n colEl,\r\n nextColEl,\r\n tableEl: table,\r\n startTableW: table.getBoundingClientRect().width,\r\n prevColStyle: colEl.style.width,\r\n prevNextStyle: nextColEl?.style.width ?? '',\r\n prevTableStyle: table.style.width,\r\n lastW: cell.getBoundingClientRect().width,\r\n lastNextW: nextCell ? nextCell.getBoundingClientRect().width : 0,\r\n };\r\n this.hooks.onStart();\r\n document.body.classList.add('nxe-grid-resizing');\r\n this.hooks.zone.runOutsideAngular(() => {\r\n document.addEventListener('pointermove', this.onMove);\r\n document.addEventListener('pointerup', this.onUp);\r\n document.addEventListener('pointercancel', this.onCancelEv);\r\n document.addEventListener('keydown', this.onKey);\r\n });\r\n }\r\n\r\n consumeClick(): boolean {\r\n return this.suppression.consume();\r\n }\r\n\r\n destroy(): void {\r\n if (this.active) {\r\n this.cancel();\r\n }\r\n }\r\n\r\n private pointerMove(e: PointerEvent): void {\r\n const a = this.active;\r\n if (!a || e.pointerId !== a.pointerId) {\r\n return;\r\n }\r\n const min = this.hooks.minWidth();\r\n const delta = e.clientX - a.startX;\r\n if (this.hooks.mode() === 'widget' || !a.nextColEl) {\r\n const w = Math.max(min, a.startW + delta);\r\n a.colEl.style.width = `${w}px`;\r\n a.tableEl.style.width = `${a.startTableW + (w - a.startW)}px`;\r\n a.lastW = w;\r\n return;\r\n }\r\n // nextColumn: trade with the neighbor, both clamped, table width constant.\r\n let w = Math.max(min, a.startW + delta);\r\n let next = a.startNextW - (w - a.startW);\r\n if (next < min) {\r\n next = min;\r\n w = a.startW + a.startNextW - min;\r\n }\r\n a.colEl.style.width = `${w}px`;\r\n a.nextColEl.style.width = `${next}px`;\r\n a.lastW = w;\r\n a.lastNextW = next;\r\n }\r\n\r\n private pointerUp(): void {\r\n const a = this.active;\r\n this.teardown();\r\n if (!a) {\r\n return;\r\n }\r\n this.suppression.arm();\r\n // A zero-movement release is a plain click on the handle — no freeze, no no-op event.\r\n if (a.lastW === a.startW && a.lastNextW === a.startNextW) {\r\n this.hooks.zone.run(() => this.hooks.onCancel());\r\n return;\r\n }\r\n const changes: { field: string; from: number; to: number }[] = [\r\n { field: a.field, from: a.startW, to: a.lastW },\r\n ];\r\n if (a.nextField && a.lastNextW !== a.startNextW) {\r\n changes.push({ field: a.nextField, from: a.startNextW, to: a.lastNextW });\r\n }\r\n this.hooks.zone.run(() => this.hooks.onCommit(changes));\r\n }\r\n\r\n private cancel(): void {\r\n const a = this.active;\r\n this.teardown();\r\n if (!a) {\r\n return;\r\n }\r\n this.suppression.arm();\r\n a.colEl.style.width = a.prevColStyle;\r\n if (a.nextColEl) {\r\n a.nextColEl.style.width = a.prevNextStyle;\r\n }\r\n a.tableEl.style.width = a.prevTableStyle;\r\n this.hooks.zone.run(() => this.hooks.onCancel());\r\n }\r\n\r\n private teardown(): void {\r\n this.active = null;\r\n document.body.classList.remove('nxe-grid-resizing');\r\n document.removeEventListener('pointermove', this.onMove);\r\n document.removeEventListener('pointerup', this.onUp);\r\n document.removeEventListener('pointercancel', this.onCancelEv);\r\n document.removeEventListener('keydown', this.onKey);\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n afterNextRender,\r\n afterRenderEffect,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChild,\r\n contentChildren,\r\n ElementRef,\r\n EventEmitter,\r\n inject,\r\n input,\r\n linkedSignal,\r\n model,\r\n NgZone,\r\n OnDestroy,\r\n output,\r\n Output,\r\n signal,\r\n TemplateRef,\r\n untracked,\r\n viewChild,\r\n ViewContainerRef,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { NXE_DEFAULT_OPTIONS, NxeTemplateDirective } from '@nexterajs/ui/core';\r\nimport { nxeHeaderDataCells, nxeLeafHeaderRow } from './nxe-grid-dom';\r\nimport { parseDateValue } from '@nexterajs/ui/intl';\r\nimport { formatNumber, parseNumberFormat } from '@nexterajs/ui/intl';\r\nimport { NxeColumnComponent } from './nxe-column.component';\r\nimport { NxeEditingComponent } from './nxe-editing.component';\r\nimport { nxeDefaultFormat } from './nxe-format.util';\r\nimport { NxeGridDragController } from './nxe-grid-drag';\r\nimport { NxeGridResizeController } from './nxe-grid-resize';\r\nimport { NxeFilterRowComponent } from './nxe-filter-row.component';\r\nimport { NxeMasterDetailComponent } from './nxe-master-detail.component';\r\nimport { NxeGroupPanelComponent, NxeGroupingComponent } from './nxe-grouping.component';\r\nimport { NxeHeaderFilterComponent } from './nxe-header-filter.component';\r\nimport { openNxeHeaderFilterOverlay } from './nxe-header-filter-overlay';\r\nimport { NxeHeaderFilterModel, nxeHfKey } from './nxe-header-filter.model';\r\nimport { NxePagerComponent, NxePagingComponent } from './nxe-paging.component';\r\nimport { NxeSelectionComponent } from './nxe-selection.component';\r\nimport { nxePane } from '@nexterajs/ui/styling';\r\nimport { NxeSummaryComponent, NxeSummaryItemLike } from './nxe-summary.component';\r\nimport {\r\n NxeCellInfo,\r\n NxeCellPreparedEvent,\r\n NxeEditCellInfo,\r\n NxeGroupCellInfo,\r\n NxeRowInfo,\r\n NxeRowPreparedEvent,\r\n NxeRowType,\r\n NxeGridInstance,\r\n NxeGridOptionChangedEvent,\r\n NxeGridSelectionChangedEvent,\r\n} from './nxe-grid.types';\r\n\r\ninterface SortState {\r\n field: string;\r\n dir: 'asc' | 'desc';\r\n}\r\n\r\n/** dx filter-row operations (`selectedFilterOperation`). */\r\nexport type NxeFilterOp =\r\n | 'contains'\r\n | 'notcontains'\r\n | 'startswith'\r\n | 'endswith'\r\n | '='\r\n | '<>'\r\n | '<'\r\n | '<='\r\n | '>'\r\n | '>='\r\n | 'between';\r\n\r\n/** One column's filter-row state: chosen operation + the typed editor text(s). */\r\ninterface FilterRowEntry {\r\n op: NxeFilterOp;\r\n text: string;\r\n /** Second editor of a `between` range. */\r\n text2?: string;\r\n}\r\n\r\ninterface TreeNode {\r\n key: any;\r\n data: any;\r\n children: TreeNode[];\r\n level: number;\r\n hasChildren: boolean;\r\n}\r\n\r\n/** Flattened render rows when grouping or tree hierarchy is active. */\r\ntype GridRenderRow =\r\n | {\r\n kind: 'data';\r\n row: any;\r\n rowIndex: number;\r\n // tree-list only:\r\n level?: number;\r\n hasChildren?: boolean;\r\n expanded?: boolean;\r\n nodeKey?: any;\r\n }\r\n | {\r\n kind: 'group';\r\n level: number;\r\n column: NxeColumnComponent;\r\n text: string;\r\n /** Raw group key, before formatting — dx hands this to `groupCellTemplate` as `value`. */\r\n value: any;\r\n /** The rows in this group, dx's `data` for a group cell. */\r\n rows: readonly any[];\r\n groupKey: string;\r\n collapsed: boolean;\r\n /** `alignByColumn` group sums keyed by target dataField (`showInColumn ?? column`). */\r\n alignedSums: Map<string, string>;\r\n /** Non-aligned group items appended to the caption — dx `Caption: Key (a, b)`. */\r\n captionSuffix: string;\r\n }\r\n | {\r\n kind: 'groupFooter';\r\n level: number;\r\n /** Per-column formatted sums for items with `showInGroupFooter` (orbit addition). */\r\n sums: Map<string, string>;\r\n };\r\n\r\n/** One `<td>` in the header, which may span columns (a band) or rows (a leaf above the bottom). */\r\nexport interface NxeHeaderCell {\r\n column: NxeColumnComponent;\r\n colspan: number;\r\n rowspan: number;\r\n isBand: boolean;\r\n /** Index into the visible leaf columns; null for a band, which sorts and resizes nothing. */\r\n leafIndex: number | null;\r\n}\r\n\r\n/** Classify a rendered `<tr>` for dx's `rowType`, or null for rows dx does not report. */\r\nfunction nxeRowTypeOf(tr: HTMLTableRowElement): NxeRowType | null {\r\n const c = tr.classList;\r\n if (c.contains('dx-header-row')) {\r\n return 'header';\r\n }\r\n if (c.contains('dx-datagrid-filter-row')) {\r\n return 'filter';\r\n }\r\n if (c.contains('dx-data-row')) {\r\n return 'data';\r\n }\r\n if (c.contains('dx-group-footer-row')) {\r\n return 'groupFooter';\r\n }\r\n if (c.contains('dx-group-row')) {\r\n return 'group';\r\n }\r\n if (tr.parentElement?.classList.contains('dx-datagrid-total-footer')) {\r\n return 'totalFooter';\r\n }\r\n return null;\r\n}\r\n\r\n/** Depth-first leaves of a declared column tree: a band contributes its children, not itself. */\r\nfunction flattenLeafColumns(cols: readonly NxeColumnComponent[]): NxeColumnComponent[] {\r\n const out: NxeColumnComponent[] = [];\r\n for (const col of cols) {\r\n if (col.isBand()) {\r\n out.push(...flattenLeafColumns(col.childColumns()));\r\n } else {\r\n out.push(col);\r\n }\r\n }\r\n return out;\r\n}\r\n\r\n\r\n/**\r\n * `nxe-data-grid` — drop-in replacement for DevExtreme `dx-data-grid` (read-only core, slice 9a).\r\n *\r\n * Renders a single `<table>` emitting the dx DOM-class contract (`dx-widget dx-datagrid`,\r\n * `dx-row`/`dx-header-row`/`dx-data-row`/`dx-datagrid-headers`/`dx-datagrid-rowsview`, `td`s) so\r\n * the globally-loaded `dx.light.css` + repo `_grid.scss` overrides style it pixel-for-pixel\r\n * (4px cell padding, #f8fafc header, #525252 header text, row/hover/alt colours). Columns are\r\n * collected from `nxe-column` content children; named `cellTemplate`s resolve to sibling\r\n * `<ng-template nxeTemplate=\"name\">` blocks rendered with `{ data, rowIndex, columnIndex, ... }`\r\n * (the live row object, so in-cell `nxe-*` editors can write through `key.data.<field>`).\r\n *\r\n * The `.instance` facade exposes only what the app calls: `getSelectedRowsData()` (12 template\r\n * sites), `refresh()` (13), `columnOption(field,'visible',bool)` (3). Selection UI, header-filter,\r\n * grouping and summary land in slice 9b.\r\n */\r\n@Component({\r\n selector: 'nxe-data-grid, nxe-tree-list',\r\n standalone: true,\r\n imports: [NgTemplateOutlet],\r\n templateUrl: './nxe-data-grid.component.html',\r\n styleUrl: './nxe-data-grid.component.scss',\r\n host: { class: 'nxe-widget nxe-data-grid' },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeDataGridComponent implements OnDestroy {\r\n private readonly elementRef = inject(ElementRef<HTMLElement>);\r\n private readonly overlay = inject(Overlay);\r\n private readonly viewContainerRef = inject(ViewContainerRef);\r\n private readonly ngZone = inject(NgZone);\r\n private readonly defaults = inject(NXE_DEFAULT_OPTIONS);\r\n\r\n /** Pointer drag engine: drag-to-group, chip drag-out (ungroup), chip/column reorder. */\r\n protected readonly drag = new NxeGridDragController({\r\n zone: this.ngZone,\r\n host: () => this.elementRef.nativeElement,\r\n onGroupDrop: (col) => this.groupByColumn(col),\r\n onChipRemove: (col) => this.ungroupColumn(col.dataField()),\r\n onChipMove: (from, to) => this.moveGroup(from, to),\r\n reorderEnabled: () => this.allowColumnReordering(),\r\n onColumnMove: (from, slot) => this.moveColumnByVisible(from, slot),\r\n headerDataCells: () =>\r\n nxeHeaderDataCells(nxeLeafHeaderRow(this.elementRef.nativeElement as HTMLElement)),\r\n });\r\n\r\n /** Pointer resize engine (dx allowColumnResizing). */\r\n protected readonly resize = new NxeGridResizeController({\r\n zone: this.ngZone,\r\n host: () => this.elementRef.nativeElement,\r\n mode: () => this.columnResizingMode(),\r\n minWidth: () => this.columnMinWidth() ?? 50,\r\n onStart: () => (this.resizeActive = true),\r\n onCancel: () => (this.resizeActive = false),\r\n onCommit: (changes) => this.commitColumnResize(changes),\r\n });\r\n private resizeActive = false;\r\n\r\n /**\r\n * Columns exactly as declared: top-level leaves and bands, bands still holding their children.\r\n * Only the header model reads this — everything else wants leaves.\r\n */\r\n private readonly declaredColumns = contentChildren(NxeColumnComponent, { descendants: false });\r\n\r\n /**\r\n * The data columns: bands flattened away, depth-first, in declaration order.\r\n *\r\n * Keeping `columns()` meaning \"the columns that carry data\" is what stops banded headers\r\n * being a rewrite. Sorting, grouping, filtering, summaries, resize, export and the whole\r\n * `<tbody>` are about leaves and continue to work untouched; bands exist only in `<thead>`.\r\n */\r\n protected readonly columns = computed<readonly NxeColumnComponent[]>(() =>\r\n flattenLeafColumns(this.declaredColumns()),\r\n );\r\n\r\n /** True when any declared column is a band, i.e. the header needs more than one row. */\r\n protected readonly hasBands = computed(() => this.declaredColumns().some((c) => c.isBand()));\r\n private readonly templates = contentChildren(NxeTemplateDirective);\r\n protected readonly selection = contentChild(NxeSelectionComponent);\r\n protected readonly headerFilter = contentChild(NxeHeaderFilterComponent);\r\n protected readonly grouping = contentChild(NxeGroupingComponent);\r\n protected readonly groupPanel = contentChild(NxeGroupPanelComponent);\r\n protected readonly summaryCmp = contentChild(NxeSummaryComponent);\r\n protected readonly pagingCmp = contentChild(NxePagingComponent);\r\n protected readonly pagerCmp = contentChild(NxePagerComponent);\r\n protected readonly editingCmp = contentChild(NxeEditingComponent);\r\n protected readonly filterRowCmp = contentChild(NxeFilterRowComponent);\r\n protected readonly masterDetail = contentChild(NxeMasterDetailComponent);\r\n\r\n // --- Inputs (mirror dx-data-grid; object-literal inputs accepted as-is for drop-in parity) ---\r\n readonly dataSource = input<readonly any[] | null | undefined>([]);\r\n readonly keyExpr = input<string | undefined>(undefined);\r\n // Presentation options resolve as `binding ?? NXE_DEFAULT_OPTIONS ?? literal`. The raw input\r\n // is aliased so the element keeps its dx name, and the public member stays the resolved\r\n // value — every read site, template included, goes through the cascade without knowing.\r\n //\r\n // The default has to be `undefined`, not `false`: \"unset\" is a distinct state from \"set to\r\n // false\", and only the former defers to the token. A `booleanAttribute` transform here would\r\n // fold one into the other and silently disable the middle rung.\r\n readonly hoverStateEnabledInput = input<boolean | undefined>(undefined, {\r\n alias: 'hoverStateEnabled',\r\n });\r\n readonly showColumnLinesInput = input<boolean | undefined>(undefined, {\r\n alias: 'showColumnLines',\r\n });\r\n readonly showRowLinesInput = input<boolean | undefined>(undefined, { alias: 'showRowLines' });\r\n readonly showBordersInput = input<boolean | undefined>(undefined, { alias: 'showBorders' });\r\n readonly wordWrapEnabledInput = input<boolean | undefined>(undefined, {\r\n alias: 'wordWrapEnabled',\r\n });\r\n readonly columnAutoWidthInput = input<boolean | undefined>(undefined, {\r\n alias: 'columnAutoWidth',\r\n });\r\n readonly rowAlternationEnabledInput = input<boolean | undefined>(undefined, {\r\n alias: 'rowAlternationEnabled',\r\n });\r\n\r\n /** dx resolves `nxe-tree-list` against the `treeList` slice, not `dataGrid`. */\r\n private readonly widgetDefaults = computed(\r\n () => (this.treeMode ? this.defaults.treeList : this.defaults.dataGrid) ?? {},\r\n );\r\n\r\n readonly hoverStateEnabled = computed(\r\n () => this.hoverStateEnabledInput() ?? this.widgetDefaults().hoverStateEnabled ?? false,\r\n );\r\n readonly showColumnLines = computed(\r\n () => this.showColumnLinesInput() ?? this.widgetDefaults().showColumnLines ?? false,\r\n );\r\n readonly showRowLines = computed(\r\n () => this.showRowLinesInput() ?? this.widgetDefaults().showRowLines ?? true,\r\n );\r\n readonly showBorders = computed(\r\n () => this.showBordersInput() ?? this.widgetDefaults().showBorders ?? false,\r\n );\r\n readonly wordWrapEnabled = computed(\r\n () => this.wordWrapEnabledInput() ?? this.widgetDefaults().wordWrapEnabled ?? true,\r\n );\r\n readonly columnAutoWidth = computed(\r\n () => this.columnAutoWidthInput() ?? this.widgetDefaults().columnAutoWidth ?? false,\r\n );\r\n readonly rowAlternationEnabled = computed(\r\n () => this.rowAlternationEnabledInput() ?? this.widgetDefaults().rowAlternationEnabled ?? false,\r\n );\r\n readonly remoteOperations = input<any>(false);\r\n /**\r\n * dx `syncLookupFilterValues` — accepted, and deliberately inert. It asks dx to narrow a\r\n * lookup column's header-filter list to the values still reachable under the other filters.\r\n * This grid never cascades those lists for client arrays (see `hfBaseRows`), so `false` is\r\n * already what it does; `true` is the option we do not honour.\r\n * @nxeInert grid — parity/data-grid.yaml \"syncLookupFilterValues\".\r\n */\r\n readonly syncLookupFilterValues = input(true);\r\n readonly columnMinWidth = input<number | undefined>(undefined);\r\n readonly noDataTextInput = input<string | undefined>(undefined, { alias: 'noDataText' });\r\n readonly noDataText = computed(\r\n () => this.noDataTextInput() ?? this.widgetDefaults().noDataText ?? 'No data',\r\n );\r\n readonly loadPanel = input<{ enabled?: boolean } | undefined>(undefined);\r\n readonly paging = input<{ enabled?: boolean; pageSize?: number } | undefined>(undefined);\r\n readonly filterRow = input<{ visible?: boolean } | undefined>(undefined);\r\n /** Object-input forms of the config elements (dx accepts both; orbit uses both styles). */\r\n readonly headerFilterOptions = input<\r\n { visible?: boolean; search?: { enabled?: boolean } } | undefined\r\n >(undefined, { alias: 'headerFilter' });\r\n readonly groupingOptions = input<{ autoExpandAll?: boolean } | undefined>(undefined, {\r\n alias: 'grouping',\r\n });\r\n readonly groupPanelOptions = input<{ visible?: boolean } | undefined>(undefined, {\r\n alias: 'groupPanel',\r\n });\r\n readonly scrolling = input<any>(undefined);\r\n readonly sorting = input<{ mode?: 'single' | 'multiple' | 'none' } | undefined>(undefined);\r\n readonly allowColumnResizing = input(false);\r\n /** dx columnResizingMode: 'nextColumn' (default) trades width; 'widget' grows the table. */\r\n readonly columnResizingMode = input<'nextColumn' | 'widget'>('nextColumn');\r\n /** dx allowColumnReordering (default false — matches every dx-era template in this app). */\r\n readonly allowColumnReordering = input(false);\r\n readonly repaintChangesOnly = input(false);\r\n readonly showColumnHeaders = input(true);\r\n\r\n // --- Tree-list inputs (dx-tree-list) -------------------------------------------------------\r\n readonly parentIdExpr = input<string | undefined>(undefined);\r\n readonly dataStructure = input<'plain' | 'tree'>('plain');\r\n readonly rootValue = input<unknown>(undefined);\r\n readonly autoExpandAll = input(false);\r\n readonly expandedRowKeys = model<any[]>([]);\r\n /** Tree-list multi-select keys (`[(selectedRowKeys)]`); recursive via dxo-selection. */\r\n readonly selectedRowKeys = model<any[]>([]);\r\n\r\n /**\r\n * Declarative cell merge (orbit addition, replaces the legacy `onCellPrepared` DOM surgery):\r\n * dataFields merged hierarchically left→right — consecutive rows with equal values render one\r\n * cell with `rowspan`; a break in an earlier field breaks all later fields.\r\n */\r\n readonly mergeColumns = input<readonly string[]>([]);\r\n\r\n readonly onSelectionChanged = output<NxeGridSelectionChangedEvent>();\r\n readonly onRowClick = output<{ data: any; rowIndex: number; component: NxeGridInstance }>();\r\n /** Fires after the rendered row set changes (dx parity; used for post-render DOM work). */\r\n readonly onContentReady = output<{ component: NxeGridInstance; element: HTMLElement }>();\r\n /**\r\n * dx parity: `{ fullName: 'paging.pageIndex', value }` for internal paging and\r\n * `{ fullName: 'columns[<i>].groupIndex', previousValue, value }` for runtime grouping\r\n * changes (one event per gesture — the contract generic-list's persistence handler expects).\r\n */\r\n readonly onOptionChanged = output<NxeGridOptionChangedEvent>();\r\n /** Extra CSS classes for a data row (replaces dx `onRowPrepared` class tweaks). */\r\n readonly rowClass = input<((row: any) => string) | undefined>(undefined);\r\n\r\n /**\r\n * dx `onCellPrepared` / `onRowPrepared`, fired once per rendered cell and row after the DOM\r\n * is written, with the real element for handlers that mutate it.\r\n *\r\n * Classic EventEmitters, NOT `output()`, for the same reason the pivot uses them: `.observed`\r\n * gates a per-cell walk, so a grid that binds neither pays nothing. That gate is the whole\r\n * cost model here — without it every grid would walk every cell on every render.\r\n *\r\n * `mergeColumns` and `rowClass` are the supported way to do what most handlers do; these\r\n * exist because applications carry handlers that cannot be rewritten.\r\n */\r\n @Output() readonly onCellPrepared = new EventEmitter<NxeCellPreparedEvent>();\r\n @Output() readonly onRowPrepared = new EventEmitter<NxeRowPreparedEvent>();\r\n\r\n protected rowClassFor(row: any): string {\r\n return this.rowClass()?.(row) ?? '';\r\n }\r\n /** Master-detail expand lifecycle (fires before the detail template instantiates). */\r\n readonly onRowExpanding = output<{ key: any; component: NxeGridInstance }>();\r\n readonly onRowExpanded = output<{ key: any; component: NxeGridInstance }>();\r\n\r\n /** Set imperatively by `app-data-pagination-wrapper` (a group-count summary). Stored for 9b. */\r\n summary: any = undefined;\r\n\r\n private readonly hoveredIndex = signal<number | null>(null);\r\n private readonly sort = signal<SortState | null>(null);\r\n private readonly sortInit = signal(false);\r\n private readonly visibilityOverride = signal<ReadonlyMap<string, boolean>>(new Map());\r\n /** Filter-row state per dataField (operation + typed text) — controlled editors read it back. */\r\n private readonly filterRowState = signal<ReadonlyMap<string, FilterRowEntry>>(new Map());\r\n /**\r\n * Header-filter runtime overrides: field → allowed-key set, or `null` for \"user explicitly\r\n * cleared\" (a declarative `filterValues` seed must NOT resurrect after Select All → OK).\r\n * Absent field = untouched → the column's `filterValues` input seeds the filter (dx parity).\r\n */\r\n private readonly hfOverride = signal<ReadonlyMap<string, ReadonlySet<any> | null>>(new Map());\r\n private readonly selectedSet = signal<ReadonlySet<any>>(new Set());\r\n private readonly refreshTick = signal(0);\r\n\r\n /**\r\n * Header-filter popup working state — the draft/search/tree machinery lives in\r\n * {@link NxeHeaderFilterModel} (extracted for pivot reuse, Phase 3a); the grid supplies\r\n * its rows/columns through the source adapter and keeps the aliases the specs poke.\r\n */\r\n protected readonly hf = new NxeHeaderFilterModel<NxeColumnComponent>({\r\n rows: () => this.hfBaseRows(),\r\n rawValue: (col, row) => this.getRaw(row, col.dataField()),\r\n displayText: (col, row) => this.cellText(col, row),\r\n isDate: (col) => col.dataType() === 'date',\r\n sortByDisplayText: (col) => !!col.lookup(),\r\n boolLabel: (col, raw) => this.hfBoolLabel(col, raw),\r\n compare: (a, b) => this.compare(a, b),\r\n });\r\n protected readonly hfColumn = this.hf.column;\r\n protected readonly hfDraft = this.hf.draft;\r\n private hfOverlayRef?: OverlayRef;\r\n\r\n // Internal paging (dxo-paging present) working state\r\n protected readonly pageIndex = signal(0);\r\n private readonly userPageSize = signal<number | null>(null);\r\n\r\n /** DevExtreme `.instance` facade — `#gridAll.instance.<method>()`. */\r\n private readonly facade: NxeGridInstance = {\r\n getSelectedRowsData: () => this.selectedRowsData(),\r\n getSelectedRowKeys: () => this.rowKeys(this.selectedRowsData()),\r\n refresh: () => this.refreshTick.update((v) => v + 1),\r\n clearFilter: (filterName?: 'row' | 'header' | 'search' | 'filterValue' | 'dataSource') => {\r\n if (!filterName || filterName === 'row') {\r\n this.filterRowState.set(new Map());\r\n }\r\n if (!filterName || filterName === 'header') {\r\n // Explicit nulls so declarative `filterValues` seeds don't resurrect (dx clears\r\n // column.filterValues even when configured declaratively).\r\n const cleared = new Map<string, ReadonlySet<any> | null>();\r\n for (const col of this.columns()) {\r\n if (col.filterValues()?.length) {\r\n cleared.set(col.dataField(), null);\r\n }\r\n }\r\n this.hfOverride.set(cleared);\r\n }\r\n },\r\n columnOption: (field, optionName, value) => {\r\n if (optionName === 'visible') {\r\n this.setColumnVisible(field, value);\r\n }\r\n },\r\n getVisibleColumns: () =>\r\n this.visibleColumns().map((c) => ({\r\n caption: c.caption(),\r\n dataField: c.dataField(),\r\n dataType: c.dataType(),\r\n format: c.format(),\r\n })),\r\n getVisibleRows: () => this.displayRows(),\r\n totalCount: () => this.displayRows().length,\r\n getRootNode: () => ({\r\n key: undefined,\r\n data: undefined,\r\n level: -1,\r\n hasChildren: this.treeRoots().length > 0,\r\n children: this.treeRoots(),\r\n }),\r\n updateDimensions: () => this.refreshTick.update((v) => v + 1),\r\n clearGrouping: () => this.clearGroupingInternal(),\r\n expandAll: () => {\r\n this.groupExpandDefault.set(true);\r\n this.groupExpandOverride.set(new Map());\r\n if (this.treeMode) {\r\n const keyF = this.keyExpr() ?? 'id';\r\n const all = new Map<any, boolean>();\r\n for (const r of (this.dataSource() ?? []) as any[]) {\r\n all.set(r[keyF], true);\r\n }\r\n this.expandOverride.set(all);\r\n }\r\n },\r\n saveEditData: () => {\r\n const editing = this.editingCmp();\r\n const key = editing?.editRowKey();\r\n if (editing && key != null) {\r\n const row = ((this.dataSource() ?? []) as any[]).find((r) => this.rowKey(r) === key);\r\n if (row) {\r\n this.saveRowEdit(row, new Event('save'));\r\n }\r\n }\r\n },\r\n element: () => this.elementRef.nativeElement,\r\n expandRow: (key: any) => {\r\n // Symmetric with collapseRow for the tree list: writes the same override map the\r\n // expander arrows use, so a programmatic reveal wins over an earlier manual collapse\r\n // (the [expandedRowKeys] seed alone cannot — overrides take precedence over it).\r\n if (this.treeMode) {\r\n this.expandOverride.update((m) => new Map(m).set(key, true));\r\n }\r\n },\r\n collapseRow: (key: any) => {\r\n // Master-detail collapse by key; tree-list node collapse for tree mode.\r\n this.expandedDetails.update((set) => {\r\n const next = new Set(set);\r\n next.delete(key);\r\n return next;\r\n });\r\n if (this.treeMode) {\r\n this.expandOverride.update((m) => new Map(m).set(key, false));\r\n }\r\n // dx grouped-grid form: collapseRow(['X','Y']) collapses that group path.\r\n if (!this.treeMode && Array.isArray(key) && this.groupColumns().length) {\r\n let groupKey = '';\r\n key.forEach((value, level) => {\r\n groupKey = `${groupKey}/${level}:${typeof value}:${String(value)}`;\r\n });\r\n this.groupExpandOverride.update((m) => new Map(m).set(groupKey, false));\r\n }\r\n },\r\n };\r\n get instance(): NxeGridInstance {\r\n return this.facade;\r\n }\r\n\r\n /** Guards against a handler that schedules another render re-entering the walk. */\r\n private preparedDepth = 0;\r\n\r\n constructor() {\r\n // Registered before onContentReady so cells are prepared by the time it fires, as in dx.\r\n afterRenderEffect(() => {\r\n this.renderRows();\r\n this.visibleColumns();\r\n untracked(() => this.emitPreparedEvents());\r\n });\r\n\r\n // dx onContentReady parity: fire after the rendered row set reaches the DOM.\r\n afterRenderEffect(() => {\r\n this.renderRows();\r\n this.onContentReady.emit({ component: this.facade, element: this.elementRef.nativeElement });\r\n });\r\n\r\n // dx columnAutoWidth parity: measure natural column widths after render, then apply\r\n // fixed-layout pixel widths distributed like dx (explicit widths kept; free columns share\r\n // the remaining container width proportionally to their max-content size).\r\n afterRenderEffect(() => {\r\n this.renderRows();\r\n this.visibleColumns();\r\n this.columnAutoWidth();\r\n this.wordWrapEnabled();\r\n this.containerW();\r\n untracked(() => this.scheduleAutoWidthMeasure());\r\n });\r\n afterNextRender(() => {\r\n const rv = this.elementRef.nativeElement.querySelector('.dx-datagrid-rowsview');\r\n if (rv && typeof ResizeObserver !== 'undefined') {\r\n this.resizeObserver = new ResizeObserver((entries) => {\r\n const w = Math.round(entries[0]?.contentRect?.width ?? 0);\r\n if (w > 0 && Math.abs(w - this.containerW()) > 1) {\r\n this.containerW.set(w);\r\n }\r\n });\r\n this.resizeObserver.observe(rv);\r\n }\r\n });\r\n }\r\n\r\n // --- Column auto-width engine (dx columnAutoWidth parity) ----------------------------------\r\n private readonly autoWidths = signal<{ widths: readonly (string | null)[]; tableWidth: string } | null>(null);\r\n private readonly containerW = signal(0);\r\n private resizeObserver: ResizeObserver | null = null;\r\n private autoWidthPending = false;\r\n private lastAutoWidthKey = '';\r\n\r\n private scheduleAutoWidthMeasure(): void {\r\n // Frozen after a manual resize (dx stops redistributing), paused while a resize drag\r\n // writes the colgroup directly.\r\n if (!this.columnAutoWidth() || this.resizeActive || this.widthOverride().size) {\r\n if (this.autoWidths() !== null) {\r\n this.lastAutoWidthKey = '';\r\n this.autoWidths.set(null);\r\n }\r\n return;\r\n }\r\n if (this.autoWidthPending) {\r\n return;\r\n }\r\n this.autoWidthPending = true;\r\n requestAnimationFrame(() => {\r\n this.autoWidthPending = false;\r\n this.measureAutoWidths();\r\n });\r\n }\r\n\r\n private measureAutoWidths(): void {\r\n const host = this.elementRef.nativeElement as HTMLElement;\r\n const table = host.querySelector<HTMLTableElement>('.dx-datagrid-content > .dx-datagrid-table');\r\n const rowsview = host.querySelector<HTMLElement>('.dx-datagrid-rowsview');\r\n const headerRow = nxeLeafHeaderRow(host);\r\n if (!table || !rowsview || !headerRow) {\r\n return;\r\n }\r\n const cols = this.visibleColumns();\r\n const lead =\r\n this.groupLevelCount() + (this.masterDetailEnabled() ? 1 : 0) + (this.showCheckboxes() ? 1 : 0);\r\n // Indexed among data cells, not by a lead offset: command cells live in the FIRST header\r\n // row and span down, so a banded grid's leaf row has none of them.\r\n const cells = nxeHeaderDataCells(headerRow);\r\n const container = rowsview.clientWidth;\r\n if (cells.length !== cols.length || container <= 0) {\r\n return;\r\n }\r\n\r\n // Measurement pass: natural max-content widths (no wrap), reverted before paint.\r\n const colEls = Array.from(table.querySelectorAll<HTMLTableColElement>(':scope > colgroup > col'))\r\n .slice(lead, lead + cols.length);\r\n const prevLayout = table.style.tableLayout;\r\n const prevWidth = table.style.width;\r\n const prevColWidths = colEls.map((c) => c.style.width);\r\n table.style.tableLayout = 'auto';\r\n table.style.width = 'max-content';\r\n colEls.forEach((c) => (c.style.width = ''));\r\n const measured = cells.map((c) => c.getBoundingClientRect().width);\r\n table.style.tableLayout = prevLayout;\r\n table.style.width = prevWidth;\r\n colEls.forEach((c, i) => (c.style.width = prevColWidths[i]));\r\n\r\n // dx-style distribution: explicit px widths kept; free columns get the remaining space\r\n // proportionally to measured max-content (never below columnMinWidth; last col absorbs\r\n // rounding). Over-constrained -> keep max-content and let the rowsview scroll.\r\n const explicit = cols.map((c) => {\r\n const w = this.colWidth(c);\r\n if (w == null) {\r\n return null;\r\n }\r\n const n = parseFloat(w);\r\n return Number.isFinite(n) && (w.endsWith('px') || /^\\d+(\\.\\d+)?$/.test(w)) ? n : null;\r\n });\r\n const specialSum =\r\n 30 * this.groupLevelCount() +\r\n (this.masterDetailEnabled() ? 30 : 0) +\r\n (this.showCheckboxes() ? 70 : 0) +\r\n (this.rowEditCommandVisible() ? 100 : 0);\r\n const fixedSum = explicit.reduce((s: number, w) => s + (w ?? 0), 0) + specialSum;\r\n const freeIdx = explicit.map((w, i) => (w == null ? i : -1)).filter((i) => i >= 0);\r\n const out: (string | null)[] = explicit.map((w) => (w == null ? null : `${w}px`));\r\n const minW = this.columnMinWidth() ?? 50;\r\n let total = fixedSum;\r\n if (freeIdx.length) {\r\n const freeSum = freeIdx.reduce((s, i) => s + measured[i], 0) || 1;\r\n const avail = container - fixedSum;\r\n if (avail >= freeSum) {\r\n const scale = avail / freeSum;\r\n let used = 0;\r\n freeIdx.forEach((i, k) => {\r\n const w = k === freeIdx.length - 1\r\n ? Math.max(minW, avail - used)\r\n : Math.max(minW, Math.round(measured[i] * scale * 100) / 100);\r\n used += w;\r\n out[i] = `${w}px`;\r\n });\r\n total += used;\r\n } else {\r\n freeIdx.forEach((i) => {\r\n const w = Math.max(minW, Math.ceil(measured[i]));\r\n total += w;\r\n out[i] = `${w}px`;\r\n });\r\n }\r\n }\r\n const tableWidth = total > container + 1 ? `${Math.ceil(total)}px` : '100%';\r\n const key = `${out.join('|')}@${tableWidth}@${container}`;\r\n if (key !== this.lastAutoWidthKey) {\r\n this.lastAutoWidthKey = key;\r\n this.autoWidths.set({ widths: out, tableWidth });\r\n }\r\n }\r\n\r\n /**\r\n * A column with no frozen/declared width appearing AFTER a manual resize froze the layout\r\n * (ungrouped chip, re-shown via columnOption): give it dx's default column width instead of\r\n * letting the pinned table width squeeze it to ~0.\r\n */\r\n private frozenColWidth(col: NxeColumnComponent): number {\r\n const manual = this.widthOverride().get(col.dataField());\r\n if (manual != null) {\r\n return manual;\r\n }\r\n const declared = parseFloat(this.colWidth(col) ?? '');\r\n return Number.isFinite(declared) ? declared : 100;\r\n }\r\n\r\n protected effectiveColWidth(col: NxeColumnComponent, idx: number): string | null {\r\n const aw = this.autoWidths();\r\n if (aw && this.columnAutoWidth()) {\r\n return aw.widths[idx] ?? this.colWidth(col);\r\n }\r\n const w = this.colWidth(col);\r\n if (w == null && this.widthOverride().size) {\r\n return `${this.frozenColWidth(col)}px`;\r\n }\r\n return w;\r\n }\r\n\r\n protected tableWidthStyle(): string {\r\n // After a manual resize the layout is frozen: widget mode sizes the table to the sum of\r\n // its columns (dx grows/shrinks the table); nextColumn keeps filling the container.\r\n if (this.widthOverride().size && this.columnResizingMode() === 'widget') {\r\n let total =\r\n 30 * this.groupLevelCount() +\r\n (this.masterDetailEnabled() ? 30 : 0) +\r\n (this.showCheckboxes() ? 40 : 0) +\r\n (this.rowEditCommandVisible() ? 100 : 0);\r\n for (const col of this.visibleColumns()) {\r\n total += this.frozenColWidth(col);\r\n }\r\n return `${Math.round(total)}px`;\r\n }\r\n if (this.widthOverride().size) {\r\n return '100%';\r\n }\r\n const aw = this.autoWidths();\r\n return aw && this.columnAutoWidth() ? aw.tableWidth : '100%';\r\n }\r\n\r\n // --- Selection (dxo-selection) ---------------------------------------------------------------\r\n protected readonly selectionEnabled = computed(() => {\r\n const s = this.selection();\r\n return !!s && s.mode() !== 'none';\r\n });\r\n protected readonly selectionMode = computed(() => this.selection()?.mode() ?? 'single');\r\n protected readonly showCheckboxes = computed(() => {\r\n if (!this.selectionEnabled()) {\r\n return false;\r\n }\r\n // Tree-list multiple selection shows checkboxes by default (dx behaviour).\r\n return (\r\n this.selection()?.showCheckBoxesMode() === 'always' ||\r\n (this.treeMode && this.selectionMode() === 'multiple')\r\n );\r\n });\r\n /** Selected rows in dataSource order (stale refs from old data naturally filtered out). */\r\n protected readonly selectedRowsData = computed<any[]>(() => {\r\n if (this.treeMode) {\r\n const keySet = new Set(this.selectedRowKeys());\r\n return keySet.size === 0\r\n ? []\r\n : ((this.dataSource() ?? []) as any[]).filter((r) => keySet.has(this.rowKey(r)));\r\n }\r\n const set = this.selectedSet();\r\n return set.size === 0 ? [] : ((this.dataSource() ?? []) as any[]).filter((r) => set.has(r));\r\n });\r\n protected readonly allSelected = computed(() => {\r\n if (this.treeMode) {\r\n const rows = (this.dataSource() ?? []) as any[];\r\n const keys = this.selectedRowKeys();\r\n return rows.length > 0 && rows.every((r) => keys.includes(this.rowKey(r)));\r\n }\r\n const rows = this.displayRows();\r\n const set = this.selectedSet();\r\n return rows.length > 0 && rows.every((r) => set.has(r));\r\n });\r\n protected readonly someSelected = computed(() =>\r\n this.treeMode\r\n ? this.selectedRowKeys().length > 0\r\n : this.displayRows().some((r) => this.selectedSet().has(r)),\r\n );\r\n\r\n private rowKey(row: any): any {\r\n const k = this.keyExpr();\r\n return k ? row?.[k] : row;\r\n }\r\n\r\n private treeDescendantKeys(row: any): any[] {\r\n const start = this.rowKey(row);\r\n const out: any[] = [];\r\n const find = (nodes: TreeNode[]): TreeNode | null => {\r\n for (const n of nodes) {\r\n if (n.key === start) return n;\r\n const f = find(n.children);\r\n if (f) return f;\r\n }\r\n return null;\r\n };\r\n const node = find(this.treeRoots());\r\n const collect = (n: TreeNode): void => {\r\n out.push(n.key);\r\n n.children.forEach(collect);\r\n };\r\n if (node) collect(node);\r\n return out.length ? out : [start];\r\n }\r\n\r\n private toggleTreeSelection(row: any): void {\r\n const key = this.rowKey(row);\r\n // dx parity: single mode REPLACES the selection, and re-clicking the selected row keeps\r\n // it selected. A toggle here would immediately undo a key the host page just wrote into\r\n // [(selectedRowKeys)] from its own onRowClick handler — the output fires before this\r\n // runs, so the toggle would find the key present and delete it, ending every click with\r\n // an empty selection.\r\n if (this.selectionMode() !== 'multiple') {\r\n const previous = this.selectedRowKeys();\r\n const added = previous.includes(key) ? [] : [key];\r\n const removed = previous.filter((k) => k !== key);\r\n this.selectedRowKeys.set([key]);\r\n this.emitTreeSelectionChanged([key], added, removed);\r\n return;\r\n }\r\n const recursive = this.selection()?.recursive() ?? false;\r\n const keys = new Set(this.selectedRowKeys());\r\n const selecting = !keys.has(key);\r\n const affected = recursive ? this.treeDescendantKeys(row) : [key];\r\n for (const k of affected) {\r\n selecting ? keys.add(k) : keys.delete(k);\r\n }\r\n const arr = [...keys];\r\n this.selectedRowKeys.set(arr);\r\n this.emitTreeSelectionChanged(arr, selecting ? affected : [], selecting ? [] : affected);\r\n }\r\n\r\n private emitTreeSelectionChanged(allKeys: any[], added: any[], removed: any[]): void {\r\n const keySet = new Set(allKeys);\r\n const data = ((this.dataSource() ?? []) as any[]).filter((r) => keySet.has(this.rowKey(r)));\r\n this.onSelectionChanged.emit({\r\n selectedRowsData: data,\r\n selectedRowKeys: allKeys,\r\n currentSelectedRowKeys: added,\r\n currentDeselectedRowKeys: removed,\r\n component: this.facade,\r\n element: this.elementRef.nativeElement,\r\n });\r\n }\r\n\r\n // --- Grouping + summary (dxo-grouping / dxo-group-panel / dxo-summary) ------------------------\r\n /** `grouping.autoExpandAll` from the child element or object input; dx default is true. */\r\n private readonly groupAutoExpand = computed(\r\n () => this.grouping()?.autoExpandAll() ?? this.groupingOptions()?.autoExpandAll ?? true,\r\n );\r\n /** The current expand default — `expandAll()` flips it to true; an input change resets it. */\r\n private readonly groupExpandDefault = linkedSignal<boolean, boolean>({\r\n source: () => this.groupAutoExpand(),\r\n computation: (v) => v,\r\n });\r\n /**\r\n * Per-groupKey manual toggles. Reset when the autoExpandAll option flips or the group\r\n * configuration changes (dx repaints and re-applies the default; drag-created groups inherit it).\r\n */\r\n private readonly groupExpandOverride = linkedSignal<string, ReadonlyMap<string, boolean>>({\r\n source: () => `${this.groupAutoExpand()}|${this.groupedFields().join('\\u0000')}`,\r\n computation: () => new Map(),\r\n });\r\n\r\n private isGroupExpanded(groupKey: string): boolean {\r\n return this.groupExpandOverride().get(groupKey) ?? this.groupExpandDefault();\r\n }\r\n\r\n protected readonly groupPanelVisible = computed(\r\n () => this.groupPanel()?.visible() === true || this.groupPanelOptions()?.visible === true,\r\n );\r\n protected readonly isGrouped = computed(() => this.groupColumns().length > 0);\r\n\r\n private readonly totalItems = computed(() => this.summaryCmp()?.totalItems() ?? []);\r\n private readonly groupItems = computed(() => this.summaryCmp()?.groupItems() ?? []);\r\n\r\n protected readonly hasTotalFooter = computed(\r\n () => this.totalItems().length > 0 && this.displayRows().length > 0,\r\n );\r\n\r\n /** Grand-total sums keyed by dataField → formatted text (alignByColumn placement). */\r\n protected readonly totalSums = computed(() => {\r\n const map = new Map<string, string>();\r\n const rows = this.displayRows();\r\n for (const item of this.totalItems()) {\r\n map.set(item.column(), this.summaryText(item, rows));\r\n }\r\n return map;\r\n });\r\n\r\n // --- Internal paging (dxo-paging) -----------------------------------------------------------\r\n protected readonly pagingEnabled = computed(() => !!this.pagingCmp() && this.pagingCmp()!.enabled());\r\n protected readonly effectivePageSize = computed(\r\n () => this.userPageSize() ?? this.pagingCmp()?.pageSize() ?? 20,\r\n );\r\n protected readonly pageCount = computed(() =>\r\n this.pagingEnabled() ? Math.max(1, Math.ceil(this.displayRows().length / this.effectivePageSize())) : 1,\r\n );\r\n /** The filtered/sorted rows visible on the current page (all rows when paging is off). */\r\n private readonly pagedRows = computed<any[]>(() => {\r\n const rows = this.displayRows();\r\n if (!this.pagingEnabled()) {\r\n return rows;\r\n }\r\n const ps = this.effectivePageSize();\r\n const pi = Math.min(this.pageIndex(), this.pageCount() - 1);\r\n return rows.slice(pi * ps, pi * ps + ps);\r\n });\r\n protected readonly pagerVisible = computed(() => {\r\n const p = this.pagerCmp();\r\n if (!p) {\r\n return false;\r\n }\r\n return p.visible() === true || (p.visible() === 'auto' && this.pagingEnabled());\r\n });\r\n protected readonly pageSizes = computed<number[]>(() => {\r\n const a = this.pagerCmp()?.allowedPageSizes();\r\n return Array.isArray(a) ? a : [this.effectivePageSize()];\r\n });\r\n protected readonly pageNumbers = computed(() => Array.from({ length: this.pageCount() }, (_, i) => i));\r\n\r\n // --- Tree-list hierarchy (dx-tree-list) -----------------------------------------------------\r\n /** True when the host element is `<nxe-tree-list>` (vs `<nxe-data-grid>`). */\r\n protected readonly treeMode =\r\n (this.elementRef.nativeElement as HTMLElement).tagName.toLowerCase() === 'nxe-tree-list';\r\n\r\n private readonly expandOverride = signal<ReadonlyMap<any, boolean>>(new Map());\r\n\r\n /** Tree assembled from the flat dataSource via keyExpr/parentIdExpr/rootValue. */\r\n private readonly treeRoots = computed<TreeNode[]>(() => {\r\n if (!this.treeMode) {\r\n return [];\r\n }\r\n const rows = (this.dataSource() ?? []) as any[];\r\n const keyF = this.keyExpr() ?? 'id';\r\n const parentF = this.parentIdExpr() ?? 'parentId';\r\n const root = this.rootValue();\r\n const byKey = new Map<any, TreeNode>();\r\n for (const r of rows) {\r\n byKey.set(r[keyF], { key: r[keyF], data: r, children: [], level: 0, hasChildren: false });\r\n }\r\n const roots: TreeNode[] = [];\r\n for (const r of rows) {\r\n const node = byKey.get(r[keyF])!;\r\n const pk = r[parentF];\r\n const parent = root !== undefined && pk === root ? undefined : byKey.get(pk);\r\n if (parent && parent !== node) {\r\n parent.children.push(node);\r\n parent.hasChildren = true;\r\n } else {\r\n roots.push(node);\r\n }\r\n }\r\n const assign = (nodes: TreeNode[], lvl: number): void => {\r\n for (const n of nodes) {\r\n n.level = lvl;\r\n assign(n.children, lvl + 1);\r\n }\r\n };\r\n assign(roots, 0);\r\n return roots;\r\n });\r\n\r\n private readonly treeExpanded = computed<ReadonlySet<any>>(() => {\r\n const override = this.expandOverride();\r\n const expandAll = this.autoExpandAll();\r\n const seeded = new Set(this.expandedRowKeys());\r\n const out = new Set<any>();\r\n const walk = (nodes: TreeNode[]): void => {\r\n for (const n of nodes) {\r\n if (n.hasChildren) {\r\n const def = expandAll || seeded.has(n.key);\r\n if (override.get(n.key) ?? def) {\r\n out.add(n.key);\r\n }\r\n }\r\n walk(n.children);\r\n }\r\n };\r\n walk(this.treeRoots());\r\n return out;\r\n });\r\n\r\n protected toggleTreeNode(key: any, event: Event): void {\r\n event.stopPropagation();\r\n const expanded = this.treeExpanded().has(key);\r\n this.expandOverride.update((m) => new Map(m).set(key, !expanded));\r\n }\r\n\r\n /** Flattened group + data render rows (tree hierarchy, then grouping, then flat). */\r\n protected readonly renderRows = computed<GridRenderRow[]>(() => {\r\n if (this.treeMode) {\r\n this.refreshTick(); // role-tab mutates selectedRowKeys then calls .instance.refresh()\r\n const expanded = this.treeExpanded();\r\n const out: GridRenderRow[] = [];\r\n let idx = 0;\r\n const walk = (nodes: TreeNode[]): void => {\r\n for (const n of nodes) {\r\n out.push({\r\n kind: 'data',\r\n row: n.data,\r\n rowIndex: idx++,\r\n level: n.level,\r\n hasChildren: n.hasChildren,\r\n expanded: expanded.has(n.key),\r\n nodeKey: n.key,\r\n });\r\n if (n.hasChildren && expanded.has(n.key)) {\r\n walk(n.children);\r\n }\r\n }\r\n };\r\n walk(this.treeRoots());\r\n return out;\r\n }\r\n const groupCols = this.groupColumns();\r\n const rows = this.pagedRows();\r\n if (groupCols.length === 0) {\r\n return rows.map((row, i) => ({ kind: 'data', row, rowIndex: i }) as GridRenderRow);\r\n }\r\n const out: GridRenderRow[] = [];\r\n const items = this.groupItems();\r\n let dataIndex = 0;\r\n\r\n const walk = (subset: any[], level: number, parentKey: string): void => {\r\n const col = groupCols[level];\r\n const field = col.dataField();\r\n // Contiguous partition by group value — displayRows pre-sorts by the group chain, so\r\n // first-seen bucket order IS the dx group order.\r\n const buckets = new Map<any, any[]>();\r\n for (const r of subset) {\r\n const v = this.getRaw(r, field);\r\n if (!buckets.has(v)) {\r\n buckets.set(v, []);\r\n }\r\n buckets.get(v)!.push(r);\r\n }\r\n for (const [value, bucket] of buckets) {\r\n const groupKey = `${parentKey}/${level}:${typeof value}:${String(value)}`;\r\n const isCollapsed = !this.isGroupExpanded(groupKey);\r\n // dx three-way split: footer items → group footer row; alignByColumn items →\r\n // summary cells aligned under their column; the rest → \"(a, b)\" caption suffix.\r\n const alignedSums = new Map<string, string>();\r\n const captionParts: string[] = [];\r\n const footerSums = new Map<string, string>();\r\n for (const item of items) {\r\n const text = this.summaryText(item, bucket);\r\n if (item.showInGroupFooter()) {\r\n footerSums.set(item.column(), text);\r\n } else if (item.alignByColumn()) {\r\n alignedSums.set(item.showInColumn() ?? item.column(), text);\r\n } else {\r\n captionParts.push(text);\r\n }\r\n }\r\n out.push({\r\n kind: 'group',\r\n level,\r\n column: col,\r\n text: this.cellText(col, bucket[0]),\r\n value: this.getRaw(bucket[0], col.dataField()),\r\n rows: bucket,\r\n groupKey,\r\n collapsed: isCollapsed,\r\n alignedSums,\r\n captionSuffix: captionParts.length ? ` (${captionParts.join(', ')})` : '',\r\n });\r\n if (!isCollapsed) {\r\n if (level + 1 < groupCols.length) {\r\n walk(bucket, level + 1, groupKey);\r\n } else {\r\n for (const r of bucket) {\r\n out.push({ kind: 'data', row: r, rowIndex: dataIndex++ });\r\n }\r\n }\r\n if (footerSums.size) {\r\n out.push({ kind: 'groupFooter', level, sums: footerSums });\r\n }\r\n }\r\n }\r\n };\r\n walk(rows, 0, '');\r\n return out;\r\n });\r\n\r\n /** Computes + formats a summary item over a set of rows. */\r\n private summaryText(item: NxeSummaryItemLike, rows: any[]): string {\r\n const field = item.column();\r\n let value: number;\r\n switch (item.summaryType()) {\r\n case 'custom':\r\n value = this.customSummaryValue(item, rows);\r\n break;\r\n case 'count':\r\n value = rows.length;\r\n break;\r\n case 'min':\r\n case 'max':\r\n case 'avg':\r\n case 'sum':\r\n default: {\r\n const nums = rows\r\n .map((r) => Number(this.getRaw(r, field)))\r\n .filter((n) => !isNaN(n));\r\n if (item.summaryType() === 'min') value = Math.min(...nums);\r\n else if (item.summaryType() === 'max') value = Math.max(...nums);\r\n else if (item.summaryType() === 'avg') value = nums.reduce((a, b) => a + b, 0) / (nums.length || 1);\r\n else value = nums.reduce((a, b) => a + b, 0);\r\n }\r\n }\r\n const fmt = item.valueFormat();\r\n const valueText = typeof fmt === 'string' ? formatNumber(value, parseNumberFormat(fmt)) : String(value);\r\n const ct = item.customizeText();\r\n const text = ct ? ct({ value, valueText }) : valueText;\r\n return item.displayFormat().replace('{0}', text);\r\n }\r\n\r\n /**\r\n * DevExtreme `calculateCustomSummary` protocol replay (orbit addition): `start`, then\r\n * `calculate` once per row (`options.value` = the row object, matching the app's\r\n * `generateSummaryFunction` which reads row properties), then `finalize`.\r\n */\r\n private customSummaryValue(item: NxeSummaryItemLike, rows: any[]): number {\r\n const fn = this.summaryCmp()?.calculateCustomSummary();\r\n if (!fn) {\r\n return 0;\r\n }\r\n const options: any = { name: item.name(), summaryProcess: 'start', totalValue: 0 };\r\n fn(options);\r\n options.summaryProcess = 'calculate';\r\n for (const row of rows) {\r\n options.value = row;\r\n fn(options);\r\n }\r\n options.summaryProcess = 'finalize';\r\n delete options.value;\r\n fn(options);\r\n return Number(options.totalValue) || 0;\r\n }\r\n\r\n protected toggleGroup(groupKey: string): void {\r\n const expanded = this.isGroupExpanded(groupKey);\r\n this.groupExpandOverride.update((m) => new Map(m).set(groupKey, !expanded));\r\n }\r\n\r\n protected goToPage(index: number): void {\r\n const next = Math.max(0, Math.min(index, this.pageCount() - 1));\r\n if (next !== this.pageIndex()) {\r\n this.pageIndex.set(next);\r\n this.onOptionChanged.emit({ name: 'paging', fullName: 'paging.pageIndex', value: next });\r\n }\r\n }\r\n protected prevPage(): void {\r\n this.goToPage(this.pageIndex() - 1);\r\n }\r\n protected nextPage(): void {\r\n this.goToPage(this.pageIndex() + 1);\r\n }\r\n protected changePageSize(size: number): void {\r\n this.userPageSize.set(size);\r\n this.pageIndex.set(0);\r\n }\r\n protected onPageSizeSelect(event: Event): void {\r\n this.changePageSize(Number((event.target as HTMLSelectElement).value));\r\n }\r\n protected readonly pageInfo = computed(() => {\r\n const total = this.displayRows().length;\r\n const ps = this.effectivePageSize();\r\n const start = total === 0 ? 0 : this.pageIndex() * ps + 1;\r\n const end = Math.min((this.pageIndex() + 1) * ps, total);\r\n return `${start}-${end} of ${total}`;\r\n });\r\n\r\n // --- Runtime group state (drag-to-group backbone) --------------------------------------------\r\n private static readonly fieldArrayEqual = (a: readonly string[], b: readonly string[]): boolean =>\r\n a.length === b.length && a.every((v, i) => v === b[i]);\r\n\r\n /**\r\n * Declarative seed: ordered dataFields of columns declaring `groupIndex`. Custom equality so\r\n * unrelated column-input churn (captions, widths, lookups) can never reset runtime drag state.\r\n */\r\n private readonly declaredGroupFields = computed<readonly string[]>(\r\n () =>\r\n this.columns()\r\n .filter((c) => c.groupIndex() != null)\r\n .sort((a, b) => (a.groupIndex() ?? 0) - (b.groupIndex() ?? 0))\r\n .map((c) => c.dataField()),\r\n { equal: NxeDataGridComponent.fieldArrayEqual },\r\n );\r\n\r\n /**\r\n * THE group state — array order == group level. Runtime gestures (drag-to-group, chip\r\n * drag-out/reorder, clearGrouping) win until the declarative seed itself changes\r\n * (generic-list re-seeds `groupIndex` from localStorage through `filterResource`).\r\n */\r\n private readonly groupedFields = linkedSignal<readonly string[], readonly string[]>({\r\n source: () => this.declaredGroupFields(),\r\n computation: (seed) => seed,\r\n });\r\n\r\n /**\r\n * Per-grouped-column sort direction (dx: grouping a column sorts it ascending; clicking its\r\n * group-panel chip cycles asc↔desc). Pruned to the currently grouped fields so a re-grouped\r\n * column starts fresh at `asc`.\r\n */\r\n private readonly groupSortDir = linkedSignal<\r\n readonly string[],\r\n ReadonlyMap<string, 'asc' | 'desc'>\r\n >({\r\n source: () => this.groupedFields(),\r\n computation: (fields, previous) => {\r\n const prev = previous?.value;\r\n const next = new Map<string, 'asc' | 'desc'>();\r\n if (prev) {\r\n for (const field of fields) {\r\n const dir = prev.get(field);\r\n if (dir) {\r\n next.set(field, dir);\r\n }\r\n }\r\n }\r\n return next;\r\n },\r\n });\r\n\r\n /** Columns moved into group rows, in group-level order. */\r\n protected readonly groupColumns = computed(() =>\r\n this.groupedFields()\r\n .map((field) => this.columns().find((c) => c.dataField() === field))\r\n .filter((c): c is NxeColumnComponent => !!c),\r\n );\r\n\r\n /** The active sort direction of a grouped column (chip indicator + group-order comparator). */\r\n protected groupDir(col: NxeColumnComponent): 'asc' | 'desc' {\r\n return this.groupSortDir().get(col.dataField()) ?? col.sortOrder() ?? 'asc';\r\n }\r\n\r\n /** Chip click (dx): cycle the grouped column's sort asc↔desc — never back to none. */\r\n protected sortGroupColumn(col: NxeColumnComponent): void {\r\n const field = col.dataField();\r\n if (!this.groupedFields().includes(field)) {\r\n return;\r\n }\r\n const next = this.groupDir(col) === 'asc' ? 'desc' : 'asc';\r\n this.groupSortDir.update((m) => new Map(m).set(field, next));\r\n }\r\n\r\n /** Gesture: drag a header into the group panel — append as the last group level. */\r\n protected groupByColumn(col: NxeColumnComponent): void {\r\n const field = col.dataField();\r\n // allowGrouping guard here too: with allowColumnReordering on, headers are draggable\r\n // even when the column refuses grouping — a panel drop must then be a no-op.\r\n if (!field || !col.allowGrouping() || this.groupedFields().includes(field)) {\r\n return;\r\n }\r\n const level = this.groupedFields().length;\r\n // dx moves an active user sort on this column onto the group level (chip indicator).\r\n const current = this.sortInit() ? this.sort() : null;\r\n this.groupedFields.update((fields) => [...fields, field]);\r\n if (current?.field === field) {\r\n this.groupSortDir.update((m) => new Map(m).set(field, current.dir));\r\n this.sort.set(null);\r\n }\r\n this.emitGroupIndexChange(this.columns().indexOf(col), null, level);\r\n }\r\n\r\n /** Gesture: drag a chip out of the group panel — remove that group level. */\r\n protected ungroupColumn(field: string): void {\r\n const fields = this.groupedFields();\r\n const level = fields.indexOf(field);\r\n if (level === -1) {\r\n return;\r\n }\r\n // dx keeps the column sorted when it leaves the group panel: restore its group direction\r\n // as the header sort — unless another column already carries the active user sort.\r\n const col = this.columns().find((c) => c.dataField() === field);\r\n const dir = col ? this.groupDir(col) : 'asc';\r\n this.groupedFields.set(fields.filter((f) => f !== field));\r\n if (!this.effectiveSort()) {\r\n this.sortInit.set(true);\r\n this.sort.set({ field, dir });\r\n }\r\n this.emitGroupIndexChange(\r\n this.columns().findIndex((c) => c.dataField() === field),\r\n level,\r\n null,\r\n );\r\n }\r\n\r\n /**\r\n * Gesture: reorder chips within the group panel — move a group level.\r\n *\r\n * Emission contract: generic-list's frozen handler replays each event as a positional SWAP,\r\n * while a chip drag is a MOVE. The two only coincide for adjacent positions, so a distance-n\r\n * move emits n adjacent-swap events (each adjacent swap == the corresponding move step) —\r\n * the replayed array converges to exactly the grid's order.\r\n */\r\n protected moveGroup(from: number, to: number): void {\r\n const fields = this.groupedFields();\r\n if (from === to || from < 0 || to < 0 || from >= fields.length || to >= fields.length) {\r\n return;\r\n }\r\n const next = [...fields];\r\n const [moved] = next.splice(from, 1);\r\n next.splice(to, 0, moved);\r\n this.groupedFields.set(next);\r\n const movedColumnIndex = this.columns().findIndex((c) => c.dataField() === moved);\r\n const step = from < to ? 1 : -1;\r\n for (let level = from; level !== to; level += step) {\r\n this.emitGroupIndexChange(movedColumnIndex, level, level + step);\r\n }\r\n }\r\n\r\n /**\r\n * Real dx `clearGrouping()`: ungroup everything. Removal events fire in DESCENDING level\r\n * order so generic-list's `splice(previousValue, 1)` replay converges to `[]`.\r\n */\r\n private clearGroupingInternal(): void {\r\n const fields = this.groupedFields();\r\n if (!fields.length) {\r\n return;\r\n }\r\n this.groupedFields.set([]);\r\n for (let level = fields.length - 1; level >= 0; level--) {\r\n this.emitGroupIndexChange(\r\n this.columns().findIndex((c) => c.dataField() === fields[level]),\r\n level,\r\n null,\r\n );\r\n }\r\n }\r\n\r\n private emitGroupIndexChange(\r\n columnIndex: number,\r\n previousValue: number | null,\r\n value: number | null,\r\n ): void {\r\n this.onOptionChanged.emit({\r\n name: 'columns',\r\n fullName: `columns[${columnIndex}].groupIndex`,\r\n previousValue,\r\n value,\r\n });\r\n }\r\n\r\n // --- Runtime column order (allowColumnReordering) + width (allowColumnResizing) overrides ----\r\n private readonly declaredFieldOrder = computed<readonly string[]>(\r\n () => this.columns().map((c) => c.dataField()),\r\n { equal: NxeDataGridComponent.fieldArrayEqual },\r\n );\r\n /** Runtime column order; header drag-reorder wins until the declared column set changes. */\r\n private readonly fieldOrder = linkedSignal<readonly string[], readonly string[]>({\r\n source: () => this.declaredFieldOrder(),\r\n computation: (seed) => seed,\r\n });\r\n\r\n private readonly declaredWidthsKey = computed(() =>\r\n this.columns()\r\n .map((c) => `${c.dataField()}:${c.width() ?? ''}`)\r\n .join('|'),\r\n );\r\n /**\r\n * Manual column widths (px). Populated on the first resize with a snapshot of every rendered\r\n * width — freezing the layout like dx — and reset when declared widths change.\r\n */\r\n private readonly widthOverride = linkedSignal<string, ReadonlyMap<string, number>>({\r\n source: () => this.declaredWidthsKey(),\r\n computation: () => new Map(),\r\n });\r\n\r\n /** Visible data columns: `visible`/`columnOption` honoured, grouped columns excluded. */\r\n protected readonly visibleColumns = computed(() => {\r\n const grouped = new Set(this.groupColumns());\r\n const filtered = this.columns().filter((c) => {\r\n if (grouped.has(c)) {\r\n return false;\r\n }\r\n const override = this.visibilityOverride().get(c.dataField());\r\n return override ?? c.visible();\r\n });\r\n const pos = new Map<string, number>();\r\n this.fieldOrder().forEach((f, i) => pos.set(f, i));\r\n return [...filtered].sort(\r\n (a, b) => (pos.get(a.dataField()) ?? 0) - (pos.get(b.dataField()) ?? 0),\r\n );\r\n });\r\n\r\n /**\r\n * How many header rows the band structure needs, counted over the VISIBLE tree.\r\n *\r\n * Pruning matters: a band whose every leaf is hidden or grouped away contributes no row, so\r\n * a grid that loses its last band collapses back to a single header row rather than keeping\r\n * an empty one.\r\n */\r\n protected readonly headerDepth = computed(() => {\r\n const visible = new Set(this.visibleColumns());\r\n const depthOf = (cols: readonly NxeColumnComponent[]): number => {\r\n let d = 0;\r\n for (const col of cols) {\r\n if (col.isBand()) {\r\n const inner = depthOf(col.childColumns());\r\n if (inner > 0) {\r\n d = Math.max(d, 1 + inner);\r\n }\r\n } else if (visible.has(col)) {\r\n d = Math.max(d, 1);\r\n }\r\n }\r\n return d;\r\n };\r\n return Math.max(1, depthOf(this.declaredColumns()));\r\n });\r\n\r\n /**\r\n * The header as rows of cells: bands carry `colspan`, leaves above the bottom row carry\r\n * `rowspan`, which is dx's own banded markup.\r\n */\r\n protected readonly headerRows = computed<NxeHeaderCell[][]>(() => {\r\n const visible = this.visibleColumns();\r\n const visibleSet = new Set(visible);\r\n const indexOfLeaf = new Map<NxeColumnComponent, number>();\r\n visible.forEach((c, i) => indexOfLeaf.set(c, i));\r\n\r\n const visibleLeaves = (col: NxeColumnComponent): number =>\r\n col.isBand()\r\n ? col.childColumns().reduce((n, c) => n + visibleLeaves(c), 0)\r\n : visibleSet.has(col)\r\n ? 1\r\n : 0;\r\n\r\n // Siblings render in visible-leaf order, not declaration order: a drag-reorder rewrites\r\n // `visibleColumns()` and the header has to follow, or the body reorders under a header\r\n // that did not. A band takes the position of its leftmost leaf.\r\n const orderOf = (col: NxeColumnComponent): number => {\r\n if (!col.isBand()) {\r\n return indexOfLeaf.get(col) ?? Number.MAX_SAFE_INTEGER;\r\n }\r\n return col.childColumns().reduce((min, c) => Math.min(min, orderOf(c)), Number.MAX_SAFE_INTEGER);\r\n };\r\n\r\n const depth = this.headerDepth();\r\n const rows: NxeHeaderCell[][] = Array.from({ length: depth }, () => []);\r\n const walk = (cols: readonly NxeColumnComponent[], level: number): void => {\r\n for (const col of [...cols].sort((a, b) => orderOf(a) - orderOf(b))) {\r\n const span = visibleLeaves(col);\r\n if (span === 0) {\r\n continue;\r\n }\r\n if (col.isBand()) {\r\n rows[level].push({\r\n column: col,\r\n colspan: span,\r\n rowspan: 1,\r\n isBand: true,\r\n leafIndex: null,\r\n });\r\n walk(col.childColumns(), level + 1);\r\n } else {\r\n rows[level].push({\r\n column: col,\r\n colspan: 1,\r\n rowspan: depth - level,\r\n isBand: false,\r\n leafIndex: indexOfLeaf.get(col) ?? null,\r\n });\r\n }\r\n }\r\n };\r\n walk(this.declaredColumns(), 0);\r\n return rows;\r\n });\r\n\r\n /** Drag-reorder drop: move visible column `fromVis` to insertion `slot` (dx visibleIndex). */\r\n protected moveColumnByVisible(fromVis: number, slot: number): void {\r\n const vis = this.visibleColumns();\r\n const moved = vis[fromVis]?.dataField();\r\n if (!moved) {\r\n return;\r\n }\r\n const target = slot > fromVis ? slot - 1 : slot;\r\n if (target === fromVis) {\r\n return;\r\n }\r\n const without = vis.filter((_, i) => i !== fromVis);\r\n const anchor = without[target]?.dataField() ?? null;\r\n const order = this.fieldOrder().filter((f) => f !== moved);\r\n const idx = anchor ? order.indexOf(anchor) : order.length;\r\n const next = [...order];\r\n next.splice(idx, 0, moved);\r\n this.fieldOrder.set(next);\r\n this.onOptionChanged.emit({\r\n name: 'columns',\r\n fullName: `columns[${this.columns().findIndex((c) => c.dataField() === moved)}].visibleIndex`,\r\n previousValue: fromVis,\r\n value: target,\r\n });\r\n }\r\n\r\n /** True when this header renders a resize handle on its right edge. */\r\n protected resizeHandleVisible(col: NxeColumnComponent, ci: number): boolean {\r\n if (!this.allowColumnResizing() || !col.allowResizing()) {\r\n return false;\r\n }\r\n return this.columnResizingMode() === 'widget' || ci < this.visibleColumns().length - 1;\r\n }\r\n\r\n protected startColumnResize(col: NxeColumnComponent, ci: number, event: PointerEvent): void {\r\n const next =\r\n this.columnResizingMode() === 'nextColumn' ? this.visibleColumns()[ci + 1] ?? null : null;\r\n this.resize.start(col.dataField(), next?.dataField() ?? null, ci, this.leadCellCount(), event);\r\n }\r\n\r\n /** Command columns preceding the data columns — the offset dx's 1-based aria-colindex counts from. */\r\n protected leadCellCount(): number {\r\n return (\r\n this.groupLevelCount() +\r\n (this.masterDetailEnabled() ? 1 : 0) +\r\n (this.showCheckboxes() ? 1 : 0)\r\n );\r\n }\r\n\r\n /** Resize commit: freeze all rendered widths (dx post-resize behavior) + emit width events. */\r\n private commitColumnResize(changes: { field: string; from: number; to: number }[]): void {\r\n const map = new Map(this.widthOverride());\r\n const headerRow = nxeLeafHeaderRow(this.elementRef.nativeElement as HTMLElement);\r\n if (headerRow) {\r\n const cells = nxeHeaderDataCells(headerRow);\r\n this.visibleColumns().forEach((c, i) => {\r\n const cell = cells[i];\r\n if (cell) {\r\n map.set(c.dataField(), Math.round(cell.getBoundingClientRect().width * 100) / 100);\r\n }\r\n });\r\n }\r\n for (const ch of changes) {\r\n map.set(ch.field, Math.round(ch.to * 100) / 100);\r\n }\r\n this.resizeActive = false;\r\n this.widthOverride.set(map);\r\n for (const ch of changes) {\r\n this.onOptionChanged.emit({\r\n name: 'columns',\r\n fullName: `columns[${this.columns().findIndex((c) => c.dataField() === ch.field)}].width`,\r\n previousValue: ch.from,\r\n value: ch.to,\r\n });\r\n }\r\n }\r\n\r\n protected readonly filterRowVisible = computed(\r\n () => this.filterRow()?.visible === true || this.filterRowCmp()?.visible() === true,\r\n );\r\n\r\n // --- Master-detail (dxo-master-detail, orbit addition) --------------------------------------\r\n protected readonly masterDetailEnabled = computed(() => this.masterDetail()?.enabled() === true);\r\n private readonly expandedDetails = signal<ReadonlySet<any>>(new Set());\r\n\r\n protected isDetailExpanded(row: any): boolean {\r\n return this.expandedDetails().has(this.rowKey(row));\r\n }\r\n\r\n protected toggleDetail(row: any, event: Event): void {\r\n event.stopPropagation();\r\n const key = this.rowKey(row);\r\n const expanding = !this.expandedDetails().has(key);\r\n if (expanding) {\r\n this.onRowExpanding.emit({ key, component: this.facade });\r\n }\r\n this.expandedDetails.update((set) => {\r\n const next = new Set(set);\r\n expanding ? next.add(key) : next.delete(key);\r\n return next;\r\n });\r\n if (expanding) {\r\n this.onRowExpanded.emit({ key, component: this.facade });\r\n }\r\n }\r\n\r\n protected detailTemplate() {\r\n return this.templateFor(this.masterDetail()?.template());\r\n }\r\n\r\n protected detailContext(row: any, rowIndex: number): { $implicit: { data: any; rowIndex: number; key: any } } {\r\n return { $implicit: { data: row, rowIndex, key: this.rowKey(row) } };\r\n }\r\n\r\n /** Group indent levels (dx renders one 30px command column per group level; grid mode only). */\r\n protected readonly groupLevelCount = computed(() =>\r\n this.treeMode ? 0 : this.groupColumns().length,\r\n );\r\n\r\n protected indents(count: number): number[] {\r\n return Array.from({ length: count }, (_, i) => i);\r\n }\r\n\r\n /** Visible columns from the first alignByColumn target onward — each gets its own summary td. */\r\n protected groupRowTrailing(item: {\r\n level: number;\r\n alignedSums: Map<string, string>;\r\n }): NxeColumnComponent[] {\r\n if (!item.alignedSums.size) {\r\n return [];\r\n }\r\n const cols = this.visibleColumns();\r\n const first = cols.findIndex((c) => item.alignedSums.has(c.dataField()));\r\n if (first === -1) {\r\n return [];\r\n }\r\n let trailing = cols.slice(first);\r\n // The caption cell needs at least one column of room — trim leading trailing cells\r\n // instead of letting the colspan clamp shift the summary alignment.\r\n const maxTrailing =\r\n this.allColCount() - item.level - 2 - (this.rowEditCommandVisible() ? 1 : 0);\r\n if (trailing.length > maxTrailing) {\r\n trailing = trailing.slice(trailing.length - Math.max(0, maxTrailing));\r\n }\r\n return trailing;\r\n }\r\n\r\n /** dx group-cell span: everything after the expand cell not taken by aligned summary cells. */\r\n protected groupCellColspan(item: { level: number; alignedSums: Map<string, string> }): number {\r\n const trailing = this.groupRowTrailing(item).length;\r\n const editTd = trailing > 0 && this.rowEditCommandVisible() ? 1 : 0;\r\n return Math.max(1, this.allColCount() - item.level - 1 - trailing - editTd);\r\n }\r\n\r\n /** Total column count including command columns (indents/checkbox/expand/edit) for colspans. */\r\n protected readonly allColCount = computed(\r\n () =>\r\n (this.groupLevelCount() +\r\n this.visibleColumns().length +\r\n (this.showCheckboxes() ? 1 : 0) +\r\n (this.masterDetailEnabled() ? 1 : 0) +\r\n (this.rowEditCommandVisible() ? 1 : 0)) ||\r\n 1,\r\n );\r\n\r\n // --- Inline editing (dxo-editing, orbit addition) -------------------------------------------\r\n protected readonly cellEditingEnabled = computed(() => {\r\n const e = this.editingCmp();\r\n return !!e && e.mode() === 'cell' && e.allowUpdating();\r\n });\r\n protected readonly rowEditingEnabled = computed(() => {\r\n const e = this.editingCmp();\r\n return !!e && e.mode() === 'row' && e.allowUpdating();\r\n });\r\n protected readonly rowEditCommandVisible = computed(() => this.rowEditingEnabled());\r\n\r\n /** The single cell in edit mode (`cell` mode): row ref + dataField. */\r\n protected readonly editingCell = signal<{ row: any; field: string } | null>(null);\r\n /** Buffered values for the row in edit mode (`row` mode), keyed by dataField. */\r\n protected readonly rowEditBuffer = signal<Record<string, any>>({});\r\n\r\n protected isEditingCell(row: any, col: NxeColumnComponent): boolean {\r\n const c = this.editingCell();\r\n return !!c && c.row === row && c.field === col.dataField();\r\n }\r\n\r\n protected isRowEditing(row: any): boolean {\r\n return this.rowEditingEnabled() && this.editingCmp()?.editRowKey() === this.rowKey(row);\r\n }\r\n\r\n protected editableCell(col: NxeColumnComponent): boolean {\r\n if (col.allowEditing() === false || !col.dataField()) {\r\n return false;\r\n }\r\n // A `cellTemplate` cell renders its own content, so the built-in editor stays out of its\r\n // way. Naming an `editCellTemplate` is an explicit request to edit it anyway — which is\r\n // broker's dominant shape, where `customizeText`/`format` render the cell at rest and a\r\n // projected editor takes over on click.\r\n return !!col.editCellTemplate() || !col.cellTemplate();\r\n }\r\n\r\n protected onCellClick(row: any, col: NxeColumnComponent, event: Event): void {\r\n if (!this.cellEditingEnabled() || !this.editableCell(col)) {\r\n return;\r\n }\r\n event.stopPropagation();\r\n this.editingCell.set({ row, field: col.dataField() });\r\n }\r\n\r\n /** dx cell-mode semantics: commit to the row on blur/Enter (client-side array write-through). */\r\n protected commitCellEdit(row: any, col: NxeColumnComponent, rawInput: any): void {\r\n this.writeCell(row, col, rawInput);\r\n this.editingCell.set(null);\r\n this.refreshTick.update((v) => v + 1);\r\n }\r\n\r\n /** Write a cell value through the grid's own path, leaving edit state alone (dx `setValue`). */\r\n private writeCellValue(row: any, col: NxeColumnComponent, value: any): void {\r\n this.writeCell(row, col, value);\r\n this.refreshTick.update((v) => v + 1);\r\n }\r\n\r\n protected cancelCellEdit(): void {\r\n this.editingCell.set(null);\r\n }\r\n\r\n /**\r\n * Leave cell-edit state when focus goes somewhere outside the cell.\r\n *\r\n * The built-in editor commits on its own blur, but a projected `editCellTemplate` has no such\r\n * contract, so the cell needs to notice for itself. Nothing is committed here: those templates\r\n * write through the live row object, so leaving edit state is purely a view change.\r\n *\r\n * A projected picker opens its panel in a CDK overlay appended to `<body>`, which means focus\r\n * legitimately leaves the `<td>` while the edit is still going on — hence the second guard.\r\n */\r\n protected onEditCellFocusOut(row: any, col: NxeColumnComponent, event: FocusEvent): void {\r\n if (!col.editCellTemplate() || !this.isEditingCell(row, col)) {\r\n return;\r\n }\r\n const td = event.currentTarget as HTMLElement | null;\r\n const next = event.relatedTarget as Node | null;\r\n if (!td || (next && td.contains(next))) {\r\n return;\r\n }\r\n if (document.querySelector('.cdk-overlay-container')?.hasChildNodes()) {\r\n return;\r\n }\r\n this.editingCell.set(null);\r\n }\r\n\r\n private writeCell(row: any, col: NxeColumnComponent, rawInput: any): void {\r\n const field = col.dataField();\r\n let value: any = rawInput;\r\n if (col.dataType() === 'number' && typeof rawInput === 'string') {\r\n const n = Number(rawInput.replace(/,/g, ''));\r\n value = rawInput.trim() === '' || isNaN(n) ? null : n;\r\n }\r\n if (field.includes('.')) {\r\n const parts = field.split('.');\r\n const last = parts.pop()!;\r\n const target = parts.reduce((o: any, k) => (o == null ? o : o[k]), row);\r\n if (target != null) {\r\n target[last] = value;\r\n }\r\n return;\r\n }\r\n row[field] = value;\r\n }\r\n\r\n protected startRowEdit(row: any, event: Event): void {\r\n event.stopPropagation();\r\n this.editingCmp()?.editRowKey.set(this.rowKey(row));\r\n this.rowEditBuffer.set({});\r\n }\r\n\r\n protected bufferRowEdit(col: NxeColumnComponent, rawInput: any): void {\r\n this.rowEditBuffer.update((b) => ({ ...b, [col.dataField()]: rawInput }));\r\n }\r\n\r\n /** dx row-mode Save: apply the buffer to the row and record an `update` change. */\r\n protected saveRowEdit(row: any, event: Event): void {\r\n event.stopPropagation();\r\n const editing = this.editingCmp();\r\n if (!editing) {\r\n return;\r\n }\r\n const buffer = this.rowEditBuffer();\r\n const data: Record<string, any> = {};\r\n for (const [field, raw] of Object.entries(buffer)) {\r\n const col = this.columns().find((c) => c.dataField() === field);\r\n if (col) {\r\n this.writeCell(row, col, raw);\r\n data[field] = this.getRaw(row, field);\r\n }\r\n }\r\n if (Object.keys(data).length) {\r\n editing.changes.update((list) => [\r\n ...list.filter((c) => !(c.type === 'update' && c.key === this.rowKey(row))),\r\n { type: 'update', key: this.rowKey(row), data },\r\n ]);\r\n }\r\n editing.editRowKey.set(null);\r\n this.rowEditBuffer.set({});\r\n this.refreshTick.update((v) => v + 1);\r\n }\r\n\r\n protected cancelRowEdit(event: Event): void {\r\n event.stopPropagation();\r\n this.editingCmp()?.editRowKey.set(null);\r\n this.rowEditBuffer.set({});\r\n }\r\n\r\n protected editorInputValue(row: any, col: NxeColumnComponent): string {\r\n if (this.isRowEditing(row)) {\r\n const buffered = this.rowEditBuffer()[col.dataField()];\r\n if (buffered !== undefined) {\r\n return String(buffered);\r\n }\r\n }\r\n const raw = this.getRaw(row, col.dataField());\r\n return raw == null ? '' : String(raw);\r\n }\r\n\r\n // --- Cell merge (`[mergeColumns]`, orbit addition) ------------------------------------------\r\n /**\r\n * Rowspan map over `renderRows`: `\"<renderIndex>:<field>\"` → span (>1 = merged head,\r\n * 0 = suppressed continuation, absent = normal cell). Hierarchical: a value break in an\r\n * earlier merge column breaks all later ones; group/detail rows break every run.\r\n */\r\n protected readonly mergeSpans = computed<ReadonlyMap<string, number>>(() => {\r\n const fields = this.mergeColumns();\r\n const map = new Map<string, number>();\r\n if (!fields.length) {\r\n return map;\r\n }\r\n const rows = this.renderRows();\r\n // runStart[f] = renderRows index where the current run for field f began.\r\n const runStart = new Map<string, number>();\r\n const runLength = new Map<string, number>();\r\n const flush = (field: string): void => {\r\n const start = runStart.get(field);\r\n const len = runLength.get(field) ?? 0;\r\n if (start !== undefined && len > 1) {\r\n map.set(`${start}:${field}`, len);\r\n for (let i = start + 1; i < start + len; i++) {\r\n map.set(`${i}:${field}`, 0);\r\n }\r\n }\r\n runStart.delete(field);\r\n runLength.delete(field);\r\n };\r\n let prevRow: any = null;\r\n rows.forEach((item, idx) => {\r\n if (item.kind !== 'data') {\r\n fields.forEach(flush);\r\n prevRow = null;\r\n return;\r\n }\r\n let broken = false;\r\n for (const field of fields) {\r\n const same =\r\n !broken &&\r\n prevRow != null &&\r\n this.getRaw(prevRow, field) === this.getRaw(item.row, field) &&\r\n this.getRaw(item.row, field) != null &&\r\n this.getRaw(item.row, field) !== '';\r\n if (same) {\r\n runLength.set(field, (runLength.get(field) ?? 1) + 1);\r\n } else {\r\n broken = true;\r\n flush(field);\r\n runStart.set(field, idx);\r\n runLength.set(field, 1);\r\n }\r\n }\r\n prevRow = item.row;\r\n });\r\n fields.forEach(flush);\r\n return map;\r\n });\r\n\r\n protected mergeSpan(renderIndex: number, col: NxeColumnComponent): number | null {\r\n if (!this.mergeColumns().includes(col.dataField())) {\r\n return null;\r\n }\r\n return this.mergeSpans().get(`${renderIndex}:${col.dataField()}`) ?? null;\r\n }\r\n\r\n protected isMergeSuppressed(renderIndex: number, col: NxeColumnComponent): boolean {\r\n return this.mergeSpan(renderIndex, col) === 0;\r\n }\r\n\r\n private readonly columnByField = computed<ReadonlyMap<string, NxeColumnComponent>>(() => {\r\n const map = new Map<string, NxeColumnComponent>();\r\n for (const c of this.columns()) {\r\n map.set(c.dataField(), c);\r\n }\r\n return map;\r\n });\r\n\r\n private readonly filterRowPredicate = computed<((row: any) => boolean) | null>(() => {\r\n const state = this.filterRowState();\r\n if (!state.size) {\r\n return null;\r\n }\r\n const byField = this.columnByField();\r\n const matchers: ((row: any) => boolean)[] = [];\r\n for (const [field, entry] of state) {\r\n const col = byField.get(field);\r\n if (!col) {\r\n continue;\r\n }\r\n const matcher = this.buildFilterRowMatcher(col, entry);\r\n if (matcher) {\r\n matchers.push(matcher);\r\n }\r\n }\r\n return matchers.length ? (row) => matchers.every((m) => m(row)) : null;\r\n });\r\n\r\n /** Builds one column's filter-row matcher; null when the entry has no effective value yet. */\r\n private buildFilterRowMatcher(\r\n col: NxeColumnComponent,\r\n entry: FilterRowEntry,\r\n ): ((row: any) => boolean) | null {\r\n const kind = this.frEditorKind(col);\r\n const t1 = entry.text.trim();\r\n const t2 = (entry.text2 ?? '').trim();\r\n if (!t1 && !t2) {\r\n return null;\r\n }\r\n if (kind === 'lookup' || kind === 'boolean') {\r\n // select editors: dx filters by '=' on the raw value; 'false' must NOT match blanks\r\n return (row) => {\r\n const raw = this.getRaw(row, col.dataField());\r\n if (kind === 'boolean') {\r\n return t1 === 'true' ? raw === true : raw === false;\r\n }\r\n return String(raw ?? '') === t1;\r\n };\r\n }\r\n if (kind === 'number') {\r\n const v1 = t1 ? Number(t1.replace(/,/g, '')) : null;\r\n const v2 = t2 ? Number(t2.replace(/,/g, '')) : null;\r\n if ((t1 && Number.isNaN(v1)) || (t2 && Number.isNaN(v2))) {\r\n return null; // dx applies nothing until the editor holds a valid number\r\n }\r\n return (row) => {\r\n const raw = this.getRaw(row, col.dataField());\r\n const n = raw == null || raw === '' ? null : Number(raw);\r\n if (n == null || Number.isNaN(n)) {\r\n return entry.op === '<>';\r\n }\r\n return this.matchScalar(entry.op, n, v1, v2);\r\n };\r\n }\r\n if (kind === 'date') {\r\n const d1 = t1 ? this.dayKey(t1) : null;\r\n const d2 = t2 ? this.dayKey(t2) : null;\r\n if ((t1 && !d1) || (t2 && !d2)) {\r\n return null;\r\n }\r\n return (row) => {\r\n const raw = this.getRaw(row, col.dataField());\r\n const day = raw == null || raw === '' ? null : this.dayKey(raw);\r\n if (!day) {\r\n return entry.op === '<>';\r\n }\r\n // dx expands date '=' to the whole day — day keys compare lexicographically.\r\n return this.matchScalar(entry.op, day, d1, d2);\r\n };\r\n }\r\n // string operations, case-insensitive over the displayed text\r\n const q = t1.toLowerCase();\r\n return (row) => {\r\n const text = this.cellText(col, row).toLowerCase();\r\n switch (entry.op) {\r\n case 'notcontains':\r\n return !text.includes(q);\r\n case 'startswith':\r\n return text.startsWith(q);\r\n case 'endswith':\r\n return text.endsWith(q);\r\n case '=':\r\n return text === q;\r\n case '<>':\r\n return text !== q;\r\n default:\r\n return text.includes(q);\r\n }\r\n };\r\n }\r\n\r\n private matchScalar<T extends number | string>(\r\n op: NxeFilterOp,\r\n value: T,\r\n v1: T | null,\r\n v2: T | null,\r\n ): boolean {\r\n switch (op) {\r\n case '<>':\r\n return value !== v1;\r\n case '<':\r\n return v1 != null && value < v1;\r\n case '<=':\r\n return v1 != null && value <= v1;\r\n case '>':\r\n return v1 != null && value > v1;\r\n case '>=':\r\n return v1 != null && value >= v1;\r\n case 'between':\r\n return (v1 == null || value >= v1) && (v2 == null || value <= v2);\r\n default:\r\n return value === v1;\r\n }\r\n }\r\n\r\n private dayKey(raw: any): string | null {\r\n const dt = parseDateValue(raw);\r\n return dt ? dt.toFormat('yyyy-MM-dd') : null;\r\n }\r\n\r\n /**\r\n * The applied header filters: runtime overrides win; untouched columns fall back to their\r\n * declarative `filterValues` seed. Values are normalized through `hfKey`.\r\n */\r\n private readonly effectiveHeaderFilters = computed<ReadonlyMap<string, ReadonlySet<any>>>(() => {\r\n const out = new Map<string, ReadonlySet<any>>();\r\n const override = this.hfOverride();\r\n for (const col of this.columns()) {\r\n const field = col.dataField();\r\n if (!field || out.has(field)) {\r\n continue;\r\n }\r\n if (override.has(field)) {\r\n const set = override.get(field);\r\n if (set) {\r\n out.set(field, set);\r\n }\r\n } else {\r\n const seed = col.filterValues();\r\n if (seed?.length) {\r\n out.set(field, new Set(seed.map((v) => this.hfKey(col, v))));\r\n }\r\n }\r\n }\r\n return out;\r\n });\r\n\r\n private readonly headerFilterPredicate = computed<((row: any) => boolean) | null>(() => {\r\n const hf = this.effectiveHeaderFilters();\r\n if (!hf.size) {\r\n return null;\r\n }\r\n const byField = this.columnByField();\r\n const entries = [...hf].map(([field, set]) => ({ field, set, col: byField.get(field) }));\r\n return (row) =>\r\n entries.every(({ field, set, col }) =>\r\n set.has(col ? this.hfKey(col, this.getRaw(row, field)) : this.getRaw(row, field)),\r\n );\r\n });\r\n\r\n /** dataSource → filter-row filters → header filters (sorting happens in `displayRows`). */\r\n private readonly filteredRows = computed<any[]>(() => {\r\n this.refreshTick();\r\n let rows = (this.dataSource() ?? []) as any[];\r\n const rowFilter = this.filterRowPredicate();\r\n if (rowFilter) {\r\n rows = rows.filter(rowFilter);\r\n }\r\n const hf = this.headerFilterPredicate();\r\n if (hf) {\r\n rows = rows.filter(hf);\r\n }\r\n return rows;\r\n });\r\n\r\n /**\r\n * dx sort semantics: grouped columns lead the sort expression in level order (each by its\r\n * group direction), then the user/declarative sort applies WITHIN the innermost groups.\r\n * Ungrouped grids keep the single-column behavior unchanged.\r\n */\r\n protected readonly displayRows = computed<any[]>(() => {\r\n const rows = this.filteredRows();\r\n const chain: SortState[] = [];\r\n if (!this.treeMode) {\r\n for (const col of this.groupColumns()) {\r\n chain.push({ field: col.dataField(), dir: this.groupDir(col) });\r\n }\r\n }\r\n const user = this.effectiveSort();\r\n if (user && !chain.some((s) => s.field === user.field)) {\r\n chain.push(user);\r\n }\r\n if (!chain.length) {\r\n return rows;\r\n }\r\n return [...rows].sort((a, b) => {\r\n for (const s of chain) {\r\n const r = this.compare(this.getRaw(a, s.field), this.getRaw(b, s.field));\r\n if (r !== 0) {\r\n return s.dir === 'asc' ? r : -r;\r\n }\r\n }\r\n return 0;\r\n });\r\n });\r\n\r\n protected readonly loading = computed(\r\n () => this.dataSource() == null && this.loadPanel()?.enabled !== false,\r\n );\r\n\r\n /** The active sort: an explicit user click, else the first column declaring `sortOrder`. */\r\n private effectiveSort(): SortState | null {\r\n if (this.sortInit()) {\r\n return this.sort();\r\n }\r\n const sorted = this.columns().find((c) => c.sortOrder());\r\n return sorted ? { field: sorted.dataField(), dir: sorted.sortOrder()! } : null;\r\n }\r\n\r\n // --- Rendering helpers -----------------------------------------------------------------------\r\n\r\n protected align(col: NxeColumnComponent): string {\r\n const a = col.alignment();\r\n if (a) {\r\n return a;\r\n }\r\n switch (col.dataType()) {\r\n case 'number':\r\n return 'right';\r\n case 'boolean':\r\n return 'center';\r\n default:\r\n return 'left';\r\n }\r\n }\r\n\r\n protected colWidth(col: NxeColumnComponent): string | null {\r\n const manual = this.widthOverride().get(col.dataField());\r\n if (manual != null) {\r\n return `${manual}px`;\r\n }\r\n const w = col.width();\r\n if (w == null) {\r\n return null;\r\n }\r\n return typeof w === 'number' ? `${w}px` : /^\\d+$/.test(w) ? `${w}px` : w;\r\n }\r\n\r\n protected getRaw(row: any, dataField: string): any {\r\n if (!dataField || row == null) {\r\n return undefined;\r\n }\r\n if (dataField.includes('.')) {\r\n return dataField.split('.').reduce((o: any, k) => (o == null ? o : o[k]), row);\r\n }\r\n return row[dataField];\r\n }\r\n\r\n /** Resolve the displayed cell text: lookup > customizeText > dataType/format > raw string. */\r\n /** dx parity: boolean values render as read-only checkboxes (dx dataType inference did this). */\r\n protected isBooleanCell(col: NxeColumnComponent, row: any): boolean {\r\n if (col.dataType() === 'boolean') {\r\n return true;\r\n }\r\n const v = this.getRaw(row, col.dataField());\r\n return v === true || v === false;\r\n }\r\n\r\n protected cellText(col: NxeColumnComponent, row: any): string {\r\n const raw = this.getRaw(row, col.dataField());\r\n const valueText = this.lookupText(col, raw) ?? this.defaultFormat(col, raw);\r\n const ct = col.customizeText();\r\n return ct ? ct({ value: raw, valueText }) : valueText;\r\n }\r\n\r\n /** Column `lookup` resolution (orbit addition): raw value → display text via the lookup list. */\r\n private lookupText(col: NxeColumnComponent, raw: any): string | null {\r\n const lookup = col.lookup();\r\n if (!lookup || raw == null) {\r\n return null;\r\n }\r\n const valueExpr = lookup.valueExpr ?? 'lovCode';\r\n const displayExpr = lookup.displayExpr ?? 'lovName';\r\n const match = (lookup.dataSource ?? []).find((item: any) => item?.[valueExpr] === raw);\r\n return match ? String(match[displayExpr] ?? raw) : String(raw);\r\n }\r\n\r\n private defaultFormat(col: NxeColumnComponent, raw: any): string {\r\n return nxeDefaultFormat(col.dataType(), col.format(), raw);\r\n }\r\n\r\n protected templateFor(name: string | undefined) {\r\n if (!name) {\r\n return null;\r\n }\r\n return this.templates().find((t) => t.name() === name)?.templateRef ?? null;\r\n }\r\n\r\n protected cellContext(row: any, rowIndex: number, columnIndex: number, col: NxeColumnComponent): {\r\n $implicit: NxeCellInfo;\r\n } {\r\n const value = this.getRaw(row, col.dataField());\r\n return {\r\n $implicit: {\r\n data: row,\r\n rowIndex,\r\n columnIndex,\r\n value,\r\n displayValue: value,\r\n text: this.cellText(col, row),\r\n key: row,\r\n column: { dataField: col.dataField(), caption: col.caption() },\r\n },\r\n };\r\n }\r\n\r\n protected editCellContext(\r\n row: any,\r\n rowIndex: number,\r\n columnIndex: number,\r\n col: NxeColumnComponent,\r\n ): { $implicit: NxeEditCellInfo } {\r\n const value = this.getRaw(row, col.dataField());\r\n // Captured now rather than read inside setValue: which write path applies is decided by\r\n // the state the template was rendered in, and `cell` mode clears `editingCell` on commit.\r\n const cellMode = this.isEditingCell(row, col);\r\n return {\r\n $implicit: {\r\n data: row,\r\n key: this.rowKey(row),\r\n value,\r\n displayValue: value,\r\n text: this.cellText(col, row),\r\n rowIndex,\r\n columnIndex,\r\n column: {\r\n dataField: col.dataField(),\r\n caption: col.caption(),\r\n dataType: col.dataType(),\r\n format: col.format(),\r\n },\r\n // dx's setValue changes the cell value; it does not end the edit. The editor\r\n // closes when focus leaves, which `onEditCellFocusOut` handles. Committing here\r\n // instead would also fight the click that triggered it: clearing the edit state\r\n // mid-dispatch lets the same event bubble to the cell and reopen it.\r\n setValue: (newValue: any) =>\r\n cellMode ? this.writeCellValue(row, col, newValue) : this.bufferRowEdit(col, newValue),\r\n component: this.facade,\r\n },\r\n };\r\n }\r\n\r\n protected groupCellContext(item: {\r\n column: NxeColumnComponent;\r\n text: string;\r\n value: any;\r\n rows: readonly any[];\r\n level: number;\r\n captionSuffix: string;\r\n }): { $implicit: NxeGroupCellInfo } {\r\n return {\r\n $implicit: {\r\n data: [...item.rows],\r\n key: item.value,\r\n value: item.value,\r\n displayValue: item.text,\r\n // What the grid would have rendered, suffix included, so a template can decorate\r\n // the default rather than having to rebuild it.\r\n text: `${item.column.caption()}: ${item.text}${item.captionSuffix}`,\r\n groupIndex: item.level,\r\n columnIndex: this.columns().indexOf(item.column),\r\n column: { dataField: item.column.dataField(), caption: item.column.caption() },\r\n component: this.facade,\r\n },\r\n };\r\n }\r\n\r\n /**\r\n * dx `onCellPrepared` / `onRowPrepared`.\r\n *\r\n * Emitted from a render hook rather than an effect, because the payload carries the real\r\n * `<td>`: it cannot exist before the DOM does. `afterRenderEffect` is the sanctioned\r\n * primitive for that here, and the walk runs inside `untracked()` so a handler that happens\r\n * to read a signal cannot enrol it in this hook's dependency set — the invisible-dependency\r\n * failure the `effect()` ban exists to prevent.\r\n */\r\n private emitPreparedEvents(): void {\r\n if (!this.onCellPrepared.observed && !this.onRowPrepared.observed) {\r\n return;\r\n }\r\n // A handler that writes a signal schedules another render, and therefore another\r\n // emission. dx re-fires on repaint too and the merge helpers are idempotent, but a\r\n // pathological handler should fail safe rather than hang the tab.\r\n if (this.preparedDepth > 0) {\r\n return;\r\n }\r\n const host = this.elementRef.nativeElement as HTMLElement;\r\n const table = host.querySelector<HTMLTableElement>(\r\n '.dx-datagrid-content > .dx-datagrid-table',\r\n );\r\n if (!table) {\r\n return;\r\n }\r\n // Own rows only: a nested master-detail grid renders its own rows deeper inside a cell,\r\n // and section.parentElement === table is what separates them.\r\n const rows = Array.from(table.querySelectorAll<HTMLTableRowElement>('tr')).filter(\r\n (tr) => tr.parentElement?.parentElement === table,\r\n );\r\n const cols = this.visibleColumns();\r\n const dataItems = this.renderRows().filter((r) => r.kind === 'data');\r\n const groupItems = this.renderRows().filter((r) => r.kind === 'group');\r\n\r\n this.preparedDepth++;\r\n try {\r\n let dataSeen = 0;\r\n let groupSeen = 0;\r\n for (const tr of rows) {\r\n const rowType = nxeRowTypeOf(tr);\r\n if (!rowType) {\r\n continue;\r\n }\r\n let info: NxeRowInfo;\r\n if (rowType === 'data') {\r\n const item = dataItems[dataSeen++] as { row: any; rowIndex: number } | undefined;\r\n info = {\r\n rowType,\r\n data: item?.row,\r\n key: item ? this.rowKey(item.row) : undefined,\r\n rowIndex: item?.rowIndex ?? -1,\r\n isSelected: item ? this.isSelected(item.row) : false,\r\n };\r\n } else if (rowType === 'group') {\r\n const item = groupItems[groupSeen++] as\r\n | { rows: readonly any[]; value: any; level: number; collapsed: boolean }\r\n | undefined;\r\n info = {\r\n rowType,\r\n data: item?.rows as any,\r\n key: item?.value,\r\n rowIndex: -1,\r\n // dx handlers read one name or the other depending on vintage; supply both.\r\n groupIndex: item?.level,\r\n groupLevel: item?.level,\r\n isExpanded: item ? !item.collapsed : undefined,\r\n };\r\n } else {\r\n info = { rowType, data: undefined, key: undefined, rowIndex: -1 };\r\n }\r\n\r\n if (this.onRowPrepared.observed) {\r\n this.onRowPrepared.emit({\r\n ...info,\r\n rowElement: tr,\r\n columnCount: tr.cells.length,\r\n component: this.facade,\r\n element: host,\r\n });\r\n }\r\n if (!this.onCellPrepared.observed) {\r\n continue;\r\n }\r\n let colSeen = 0;\r\n for (const td of Array.from(tr.cells)) {\r\n const isCommand =\r\n td.classList.contains('dx-command-expand') ||\r\n td.classList.contains('dx-command-select') ||\r\n td.classList.contains('dx-command-edit') ||\r\n td.classList.contains('dx-group-cell') ||\r\n td.classList.contains('nxe-band-cell');\r\n const col = isCommand ? undefined : cols[colSeen];\r\n const columnIndex = isCommand ? -1 : colSeen;\r\n if (!isCommand) {\r\n colSeen++;\r\n }\r\n const value =\r\n col && rowType === 'data' && info.data\r\n ? this.getRaw(info.data, col.dataField())\r\n : undefined;\r\n this.onCellPrepared.emit({\r\n data: info.data,\r\n key: info.key,\r\n value,\r\n displayValue: value,\r\n text: td.textContent ?? '',\r\n columnIndex,\r\n rowIndex: info.rowIndex,\r\n column: col\r\n ? {\r\n dataField: col.dataField(),\r\n caption: col.caption(),\r\n dataType: col.dataType(),\r\n index: columnIndex,\r\n }\r\n : null,\r\n row: info,\r\n rowType,\r\n cellElement: td,\r\n component: this.facade,\r\n element: host,\r\n });\r\n }\r\n }\r\n } finally {\r\n this.preparedDepth--;\r\n }\r\n }\r\n\r\n // --- Interaction -----------------------------------------------------------------------------\r\n\r\n /** True when this header can start a drag gesture (to the group panel and/or a reorder). */\r\n protected headerDraggable(col: NxeColumnComponent): boolean {\r\n if (this.treeMode || !col.dataField()) {\r\n return false;\r\n }\r\n // Reordering is off for banded grids: dragging a leaf out of its band has no meaning in\r\n // dx, and letting it happen here would tear the band apart. Grouping still works, and a\r\n // band whose leaves are all grouped away simply disappears.\r\n return (\r\n (this.groupPanelVisible() && col.allowGrouping()) ||\r\n (this.allowColumnReordering() && !this.hasBands())\r\n );\r\n }\r\n\r\n protected onHeaderPointerDown(col: NxeColumnComponent, ci: number, event: PointerEvent): void {\r\n if (this.headerDraggable(col)) {\r\n this.drag.startHeaderDrag(col, ci, event);\r\n }\r\n }\r\n\r\n protected onChipPointerDown(col: NxeColumnComponent, level: number, event: PointerEvent): void {\r\n this.drag.startChipDrag(col, level, event);\r\n }\r\n\r\n /** Chip click (dx): toggle the grouped column's sort — unless this click ends a drag. */\r\n protected onChipClick(col: NxeColumnComponent): void {\r\n if (this.drag.consumeClick()) {\r\n return;\r\n }\r\n this.sortGroupColumn(col);\r\n }\r\n\r\n protected onHeaderClick(col: NxeColumnComponent): void {\r\n if (this.drag.consumeClick() || this.resize.consumeClick()) {\r\n return; // this click is the tail of a drag/resize gesture, not a sort request\r\n }\r\n if (!col.allowSorting() || this.sorting()?.mode === 'none') {\r\n return;\r\n }\r\n const field = col.dataField();\r\n if (!field) {\r\n return;\r\n }\r\n this.sortInit.set(true);\r\n const current = this.effectiveSort();\r\n if (!current || current.field !== field) {\r\n this.sort.set({ field, dir: 'asc' });\r\n } else if (current.dir === 'asc') {\r\n this.sort.set({ field, dir: 'desc' });\r\n } else {\r\n this.sort.set(null);\r\n }\r\n }\r\n\r\n protected sortDir(col: NxeColumnComponent): 'asc' | 'desc' | null {\r\n const s = this.effectiveSort();\r\n return s && s.field === col.dataField() ? s.dir : null;\r\n }\r\n\r\n protected onRowEnter(index: number): void {\r\n if (this.hoverStateEnabled()) {\r\n this.hoveredIndex.set(index);\r\n }\r\n }\r\n protected onRowLeave(): void {\r\n this.hoveredIndex.set(null);\r\n }\r\n protected isHovered(index: number): boolean {\r\n return this.hoveredIndex() === index;\r\n }\r\n\r\n protected isSelected(row: any): boolean {\r\n return this.treeMode\r\n ? this.selectedRowKeys().includes(this.rowKey(row))\r\n : this.selectedSet().has(row);\r\n }\r\n\r\n /** Row body click: single-select (LOV pickers) or toggle when checkboxes are hidden. */\r\n protected onDataRowClick(row: any, rowIndex = 0): void {\r\n this.onRowClick.emit({ data: row, rowIndex, component: this.facade });\r\n if (!this.selectionEnabled()) {\r\n return;\r\n }\r\n if (\r\n this.selectionMode() === 'multiple' &&\r\n this.showCheckboxes() &&\r\n !this.selection()?.selectByClick()\r\n ) {\r\n return; // checkbox-driven; row click is a no-op\r\n }\r\n this.toggleRow(row);\r\n }\r\n\r\n protected onCheckboxClick(row: any, event: Event): void {\r\n event.stopPropagation();\r\n this.toggleRow(row);\r\n }\r\n\r\n private toggleRow(row: any): void {\r\n if (this.treeMode) {\r\n this.toggleTreeSelection(row);\r\n return;\r\n }\r\n const set = new Set(this.selectedSet());\r\n let currentSelected: any[] = [];\r\n let currentDeselected: any[] = [];\r\n if (this.selectionMode() === 'single') {\r\n currentDeselected = [...set].filter((r) => r !== row);\r\n set.clear();\r\n set.add(row);\r\n currentSelected = [row];\r\n } else if (set.has(row)) {\r\n set.delete(row);\r\n currentDeselected = [row];\r\n } else {\r\n set.add(row);\r\n currentSelected = [row];\r\n }\r\n this.selectedSet.set(set);\r\n this.emitSelectionChanged(currentSelected, currentDeselected);\r\n }\r\n\r\n protected toggleSelectAll(event: Event): void {\r\n event.stopPropagation();\r\n if (this.treeMode) {\r\n const allKeys = ((this.dataSource() ?? []) as any[]).map((r) => this.rowKey(r));\r\n if (this.allSelected()) {\r\n this.selectedRowKeys.set([]);\r\n this.emitTreeSelectionChanged([], [], allKeys);\r\n } else {\r\n this.selectedRowKeys.set(allKeys);\r\n this.emitTreeSelectionChanged(allKeys, allKeys, []);\r\n }\r\n return;\r\n }\r\n const rows = this.displayRows();\r\n if (this.allSelected()) {\r\n this.selectedSet.set(new Set());\r\n this.emitSelectionChanged([], rows);\r\n } else {\r\n this.selectedSet.set(new Set(rows));\r\n this.emitSelectionChanged(rows, []);\r\n }\r\n }\r\n\r\n private emitSelectionChanged(currentSelected: any[], currentDeselected: any[]): void {\r\n const data = this.selectedRowsData();\r\n this.onSelectionChanged.emit({\r\n selectedRowsData: data,\r\n selectedRowKeys: this.rowKeys(data),\r\n currentSelectedRowKeys: this.rowKeys(currentSelected),\r\n currentDeselectedRowKeys: this.rowKeys(currentDeselected),\r\n component: this.facade,\r\n element: this.elementRef.nativeElement,\r\n });\r\n }\r\n\r\n private rowKeys(rows: any[]): any[] {\r\n const key = this.keyExpr();\r\n return key ? rows.map((r) => r?.[key]) : rows;\r\n }\r\n\r\n // --- Filter row (dxo-filter-row): typed editors + dx operation-chooser menu ------------------\r\n private static readonly STRING_OPS: { op: NxeFilterOp; label: string }[] = [\r\n { op: 'contains', label: 'Contains' },\r\n { op: 'notcontains', label: 'Does not contain' },\r\n { op: 'startswith', label: 'Starts with' },\r\n { op: 'endswith', label: 'Ends with' },\r\n { op: '=', label: 'Equals' },\r\n { op: '<>', label: 'Does not equal' },\r\n ];\r\n private static readonly SCALAR_OPS: { op: NxeFilterOp; label: string }[] = [\r\n { op: '=', label: 'Equals' },\r\n { op: '<>', label: 'Does not equal' },\r\n { op: '<', label: 'Less than' },\r\n { op: '>', label: 'Greater than' },\r\n { op: '<=', label: 'Less than or equal to' },\r\n { op: '>=', label: 'Greater than or equal to' },\r\n { op: 'between', label: 'Between' },\r\n ];\r\n private static readonly OP_ICON_SLUGS: Record<NxeFilterOp, string> = {\r\n contains: 'contains',\r\n notcontains: 'not-contains',\r\n startswith: 'starts-with',\r\n endswith: 'ends-with',\r\n '=': 'equals',\r\n '<>': 'not-equals',\r\n '<': 'less',\r\n '<=': 'less-equal',\r\n '>': 'greater',\r\n '>=': 'greater-equal',\r\n between: 'between',\r\n };\r\n\r\n protected readonly frMenuColumn = signal<NxeColumnComponent | null>(null);\r\n private frMenuOverlayRef?: OverlayRef;\r\n private readonly frMenuPanel = viewChild<TemplateRef<unknown>>('frOpMenu');\r\n\r\n /** Which editor a filter cell renders (mirrors dx: select for lookup/boolean, typed inputs). */\r\n protected frEditorKind(col: NxeColumnComponent): 'lookup' | 'boolean' | 'date' | 'number' | 'text' {\r\n if (col.lookup()) {\r\n return 'lookup';\r\n }\r\n const type = col.dataType();\r\n return type === 'boolean' || type === 'date' || type === 'number' ? type : 'text';\r\n }\r\n\r\n /** dx shows the operation-chooser magnifier only for typed (non-select) editors. */\r\n protected frHasOpMenu(col: NxeColumnComponent): boolean {\r\n const kind = this.frEditorKind(col);\r\n return kind !== 'lookup' && kind !== 'boolean';\r\n }\r\n\r\n private frDefaultOp(col: NxeColumnComponent): NxeFilterOp {\r\n return this.frEditorKind(col) === 'text' ? 'contains' : '=';\r\n }\r\n\r\n protected frOp(col: NxeColumnComponent): NxeFilterOp {\r\n return this.filterRowState().get(col.dataField())?.op ?? this.frDefaultOp(col);\r\n }\r\n\r\n protected frText(col: NxeColumnComponent): string {\r\n return this.filterRowState().get(col.dataField())?.text ?? '';\r\n }\r\n\r\n protected frText2(col: NxeColumnComponent): string {\r\n return this.filterRowState().get(col.dataField())?.text2 ?? '';\r\n }\r\n\r\n protected frOpIconClass(col: NxeColumnComponent): string {\r\n return `dx-icon-filter-operation-${NxeDataGridComponent.OP_ICON_SLUGS[this.frOp(col)]}`;\r\n }\r\n\r\n protected opIconSlug(op: NxeFilterOp): string {\r\n return NxeDataGridComponent.OP_ICON_SLUGS[op];\r\n }\r\n\r\n protected setFilterRowText(col: NxeColumnComponent, text: string, second = false): void {\r\n const field = col.dataField();\r\n const next = new Map(this.filterRowState());\r\n const prev = next.get(field) ?? { op: this.frDefaultOp(col), text: '' };\r\n next.set(field, second ? { ...prev, text2: text } : { ...prev, text });\r\n this.filterRowState.set(next);\r\n }\r\n\r\n protected openFilterOpMenu(col: NxeColumnComponent, event: Event): void {\r\n event.stopPropagation();\r\n this.frMenuColumn.set(col);\r\n this.frMenuOverlayRef?.dispose();\r\n const origin = event.currentTarget as HTMLElement;\r\n this.frMenuOverlayRef = this.overlay.create({\r\n positionStrategy: this.overlay\r\n .position()\r\n .flexibleConnectedTo(origin)\r\n .withPositions([\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\r\n ]),\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n panelClass: nxePane('nxe-fr-op-pane'),\r\n });\r\n this.frMenuOverlayRef.backdropClick().subscribe(() => this.closeFilterOpMenu());\r\n const panel = this.frMenuPanel();\r\n if (panel) {\r\n this.frMenuOverlayRef.attach(new TemplatePortal(panel, this.viewContainerRef));\r\n }\r\n }\r\n\r\n protected frMenuOps(): { op: NxeFilterOp; label: string }[] {\r\n const col = this.frMenuColumn();\r\n if (!col) {\r\n return [];\r\n }\r\n return this.frEditorKind(col) === 'text'\r\n ? NxeDataGridComponent.STRING_OPS\r\n : NxeDataGridComponent.SCALAR_OPS;\r\n }\r\n\r\n protected selectFilterOp(op: NxeFilterOp): void {\r\n const col = this.frMenuColumn();\r\n if (col) {\r\n const field = col.dataField();\r\n const next = new Map(this.filterRowState());\r\n const prev = next.get(field) ?? { op: this.frDefaultOp(col), text: '' };\r\n next.set(field, { ...prev, op, ...(op !== 'between' ? { text2: undefined } : {}) });\r\n this.filterRowState.set(next);\r\n }\r\n this.closeFilterOpMenu();\r\n }\r\n\r\n /** dx Reset menu item: restore the default operation and clear the editor. */\r\n protected resetFilterRow(): void {\r\n const col = this.frMenuColumn();\r\n if (col) {\r\n const next = new Map(this.filterRowState());\r\n next.delete(col.dataField());\r\n this.filterRowState.set(next);\r\n }\r\n this.closeFilterOpMenu();\r\n }\r\n\r\n protected closeFilterOpMenu(): void {\r\n this.frMenuOverlayRef?.detach();\r\n this.frMenuColumn.set(null);\r\n }\r\n\r\n // --- Header filter (dxo-header-filter) -------------------------------------------------------\r\n protected readonly headerFilterEnabled = computed(\r\n () => this.headerFilter()?.visible() === true || this.headerFilterOptions()?.visible === true,\r\n );\r\n\r\n protected hasHeaderFilter(col: NxeColumnComponent): boolean {\r\n return this.effectiveHeaderFilters().has(col.dataField());\r\n }\r\n\r\n /** Whether this column shows a funnel — the grid has header filtering on AND the column opts in.\r\n Named because the header cell asks three times (the caption's indicator class, the wrapper's\r\n existence, the funnel itself) and the group-panel chip asks again. */\r\n protected headerFilterVisible(col: NxeColumnComponent): boolean {\r\n return this.headerFilterEnabled() && col.allowHeaderFiltering();\r\n }\r\n\r\n /**\r\n * Normalizes a raw cell value to its header-filter key: blank-ish → the `(Blanks)` sentinel,\r\n * date columns → a `yyyy-MM-dd` day key (the tree's leaf unit), else the raw value.\r\n */\r\n private hfKey(col: NxeColumnComponent, raw: any): any {\r\n return nxeHfKey(raw, col.dataType() === 'date');\r\n }\r\n\r\n /** dx does NOT cascade header-filter lists for client arrays (bright audit V6). */\r\n private hfBaseRows(): any[] {\r\n return (this.dataSource() ?? []) as any[];\r\n }\r\n\r\n private hfBoolLabel(col: NxeColumnComponent, raw: any): 'Yes' | 'No' | null {\r\n if (col.lookup()) {\r\n return null;\r\n }\r\n if (raw === true) {\r\n return 'Yes';\r\n }\r\n if (raw === false || col.dataType() === 'boolean') {\r\n return 'No';\r\n }\r\n return null;\r\n }\r\n\r\n /** (Select All) checkbox state — spec-pinned alias of the model's computed\r\n ((Select All) operates on the VISIBLE keys: dx scopes it to the search). */\r\n protected readonly hfAllChecked = this.hf.allChecked;\r\n\r\n /** Default true — see NxeHeaderFilterComponent.searchEnabled. The two branches have to agree,\r\n since a grid can be configured either by the content child or by the object input. */\r\n protected hfSearchEnabled(): boolean {\r\n return (\r\n this.headerFilter()?.searchEnabled() ??\r\n this.headerFilterOptions()?.search?.enabled ??\r\n true\r\n );\r\n }\r\n\r\n protected openHeaderFilter(col: NxeColumnComponent, event: Event): void {\r\n event.stopPropagation();\r\n if (this.drag.consumeClick()) {\r\n return; // the funnel was merely the landing spot of an aborted drag\r\n }\r\n // No applied filter → everything checked; else start from the applied set.\r\n this.hf.open(col, this.effectiveHeaderFilters().get(col.dataField()));\r\n\r\n this.hfOverlayRef?.dispose();\r\n this.hfOverlayRef = openNxeHeaderFilterOverlay({\r\n overlay: this.overlay,\r\n viewContainerRef: this.viewContainerRef,\r\n origin: event.currentTarget as HTMLElement,\r\n model: this.hf,\r\n searchEnabled: () => this.hfSearchEnabled(),\r\n onApply: () => this.hfApply(),\r\n onClose: () => this.closeHeaderFilter(),\r\n });\r\n }\r\n\r\n protected hfApply(): void {\r\n const col = this.hf.column();\r\n if (col) {\r\n const next = new Map(this.hfOverride());\r\n // Everything checked (or nothing to choose from) = explicit \"no filter\" (`null` so a\r\n // declarative seed can't resurrect); else the allowed-key set (empty = empty grid).\r\n next.set(col.dataField(), this.hf.applyResult());\r\n this.hfOverride.set(next);\r\n }\r\n this.closeHeaderFilter();\r\n }\r\n\r\n protected closeHeaderFilter(): void {\r\n this.hfOverlayRef?.detach();\r\n this.hf.close();\r\n }\r\n\r\n private setColumnVisible(field: string, visible: boolean): void {\r\n this.visibilityOverride.update((m) => {\r\n const next = new Map(m);\r\n next.set(field, visible);\r\n return next;\r\n });\r\n }\r\n\r\n private compare(a: any, b: any): number {\r\n if (a == null && b == null) return 0;\r\n if (a == null) return -1;\r\n if (b == null) return 1;\r\n if (typeof a === 'number' && typeof b === 'number') return a - b;\r\n const da = parseDateValue(a);\r\n const db = parseDateValue(b);\r\n if (da && db) return da.toMillis() - db.toMillis();\r\n return String(a).localeCompare(String(b));\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.drag.destroy();\r\n this.resize.destroy();\r\n this.hfOverlayRef?.dispose();\r\n this.frMenuOverlayRef?.dispose();\r\n this.resizeObserver?.disconnect();\r\n }\r\n}\r\n","<div class=\"dx-widget dx-datagrid\" [class.dx-datagrid-borders]=\"showBorders()\">\r\n <div class=\"dx-gridbase-container\">\r\n @if (groupPanelVisible()) {\r\n <div class=\"dx-datagrid-header-panel\">\r\n <div class=\"dx-datagrid-group-panel\">\r\n @if (groupColumns().length === 0) {\r\n <span class=\"dx-group-panel-message\">Drag a column header here to group by that column</span>\r\n } @else {\r\n @for (col of groupColumns(); track col.dataField(); let li = $index) {\r\n <!-- dx chip DOM: caption + sort indicator + header-filter button (bright audit) -->\r\n <div\r\n class=\"dx-group-panel-item dx-datagrid-action dx-datagrid-drag-action\"\r\n tabindex=\"0\"\r\n (pointerdown)=\"onChipPointerDown(col, li, $event)\"\r\n (click)=\"onChipClick(col)\">{{ col.caption() }}<div class=\"dx-column-indicators\" role=\"presentation\"><span\r\n class=\"dx-sort\"\r\n [class.dx-sort-up]=\"groupDir(col) === 'asc'\"\r\n [class.dx-sort-down]=\"groupDir(col) === 'desc'\"></span>@if (headerFilterVisible(col)) {<span\r\n class=\"nxe-grid-hf-icon\"\r\n [class.nxe-hf-active]=\"hasHeaderFilter(col)\"\r\n (pointerdown)=\"$event.stopPropagation()\"\r\n (click)=\"openHeaderFilter(col, $event)\"></span>}</div></div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n }\r\n <div\r\n class=\"dx-datagrid-rowsview dx-datagrid-after-headers\"\r\n [class.dx-datagrid-nowrap]=\"!wordWrapEnabled()\">\r\n <div class=\"dx-datagrid-content\">\r\n <table class=\"dx-datagrid-table dx-datagrid-table-fixed\" [style.width]=\"tableWidthStyle()\">\r\n <colgroup>\r\n @for (i of indents(groupLevelCount()); track i) {\r\n <col style=\"width: 30px\" />\r\n }\r\n @if (masterDetailEnabled()) {\r\n <col style=\"width: 30px\" />\r\n }\r\n @if (showCheckboxes()) {\r\n <col style=\"width: 40px\" />\r\n }\r\n @for (col of visibleColumns(); track $index; let ci = $index) {\r\n <col [style.width]=\"effectiveColWidth(col, ci)\" />\r\n }\r\n @if (rowEditCommandVisible()) {\r\n <col style=\"width: 100px\" />\r\n }\r\n </colgroup>\r\n <thead class=\"dx-datagrid-headers\">\r\n <!-- Bands add header rows: a band cell spans its visible leaves with\r\n colspan, and a leaf above the bottom row spans down with rowspan.\r\n That is dx's own banded markup, and it keeps the LAST header row\r\n all-leaves - which the auto-width, resize and drag code relies on. -->\r\n @for (hrow of headerRows(); track $index; let hi = $index) {\r\n <tr class=\"dx-row dx-header-row\" [class.dx-column-lines]=\"showColumnLines()\">\r\n @if (hi === 0) {\r\n @for (i of indents(groupLevelCount()); track i) {\r\n <td\r\n class=\"dx-command-expand dx-datagrid-group-space dx-cell-focus-disabled\"\r\n [attr.rowspan]=\"headerDepth() > 1 ? headerDepth() : null\"></td>\r\n }\r\n @if (masterDetailEnabled()) {\r\n <td\r\n class=\"dx-command-expand\"\r\n [attr.rowspan]=\"headerDepth() > 1 ? headerDepth() : null\"></td>\r\n }\r\n @if (showCheckboxes()) {\r\n <td\r\n class=\"dx-command-select\"\r\n [attr.rowspan]=\"headerDepth() > 1 ? headerDepth() : null\">\r\n @if (selectionMode() === 'multiple') {\r\n <span\r\n class=\"dx-select-checkbox nxe-grid-checkbox\"\r\n [class.nxe-checked]=\"allSelected()\"\r\n [class.nxe-indeterminate]=\"someSelected() && !allSelected()\"\r\n (click)=\"toggleSelectAll($event)\">\r\n <span class=\"nxe-grid-checkbox-box\"></span>\r\n </span>\r\n }\r\n </td>\r\n }\r\n }\r\n @for (cell of hrow; track $index) {\r\n @if (cell.isBand) {\r\n <td\r\n class=\"nxe-band-cell\"\r\n [class]=\"cell.column.cssClass()\"\r\n [attr.colspan]=\"cell.colspan > 1 ? cell.colspan : null\"\r\n [style.text-align]=\"cell.column.alignment() ?? 'center'\">\r\n <div class=\"dx-datagrid-text-content\">{{ cell.column.caption() }}</div>\r\n </td>\r\n } @else {\r\n <td\r\n [class]=\"cell.column.cssClass()\"\r\n [attr.aria-colindex]=\"leadCellCount() + cell.leafIndex + 1\"\r\n [attr.rowspan]=\"cell.rowspan > 1 ? cell.rowspan : null\"\r\n [style.text-align]=\"align(cell.column)\"\r\n [class.dx-cell-focus-disabled]=\"!cell.column.allowSorting()\"\r\n [class.dx-datagrid-drag-action]=\"headerDraggable(cell.column)\"\r\n (pointerdown)=\"onHeaderPointerDown(cell.column, cell.leafIndex, $event)\"\r\n (click)=\"onHeaderClick(cell.column)\">\r\n <!-- Both indicator classes are load-bearing, not decorative: they are what\r\n gate dx's caption max-widths (`.dx-header-row .dx-sort-indicator\r\n {max-width:calc(100% - 17px)}` and the .dx-header-filter-indicator\r\n family), i.e. the 17px-per-indicator budget that stops a long\r\n caption from colliding with the arrow and the funnel. -->\r\n <div\r\n class=\"dx-datagrid-text-content\"\r\n [class.dx-sort-indicator]=\"!!sortDir(cell.column)\"\r\n [class.dx-header-filter-indicator]=\"headerFilterVisible(cell.column)\">\r\n {{ cell.column.caption() }}\r\n </div>\r\n <!-- dx wraps the arrow and the funnel in one indicator block, and the\r\n group-panel chip below already did. Matching it here means the two\r\n places share a single set of metrics instead of drifting. -->\r\n @if (sortDir(cell.column) || headerFilterVisible(cell.column)) {\r\n <div class=\"dx-column-indicators\" role=\"presentation\">\r\n @if (sortDir(cell.column); as dir) {\r\n <span\r\n class=\"dx-sort\"\r\n [class.dx-sort-up]=\"dir === 'asc'\"\r\n [class.dx-sort-down]=\"dir === 'desc'\"></span>\r\n }\r\n @if (headerFilterVisible(cell.column)) {\r\n <span\r\n class=\"nxe-grid-hf-icon\"\r\n [class.nxe-hf-active]=\"hasHeaderFilter(cell.column)\"\r\n (click)=\"openHeaderFilter(cell.column, $event)\"></span>\r\n }\r\n </div>\r\n }\r\n @if (resizeHandleVisible(cell.column, cell.leafIndex)) {\r\n <span\r\n class=\"nxe-col-resize-handle\"\r\n (pointerdown)=\"startColumnResize(cell.column, cell.leafIndex, $event)\"></span>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (hi === 0 && rowEditCommandVisible()) {\r\n <td\r\n class=\"dx-command-edit\"\r\n [attr.rowspan]=\"headerDepth() > 1 ? headerDepth() : null\"></td>\r\n }\r\n </tr>\r\n }\r\n @if (filterRowVisible()) {\r\n <tr class=\"dx-row dx-datagrid-filter-row\">\r\n @for (i of indents(groupLevelCount()); track i) {\r\n <td class=\"dx-command-expand dx-datagrid-group-space\"></td>\r\n }\r\n @if (masterDetailEnabled()) {\r\n <td class=\"dx-command-expand\"></td>\r\n }\r\n @if (showCheckboxes()) {\r\n <td class=\"dx-command-select\"></td>\r\n }\r\n @for (col of visibleColumns(); track $index) {\r\n <!-- dx filter cell: td.dx-editor-cell > .dx-editor-with-menu >\r\n [.dx-menu op chooser][typed editor] (dx-compat.css contract) -->\r\n <td class=\"dx-editor-cell\" [class]=\"col.cssClass()\">\r\n @if (col.allowFiltering()) {\r\n @switch (frEditorKind(col)) {\r\n @case ('lookup') {\r\n <select\r\n class=\"dx-texteditor-input nxe-grid-filter-input\"\r\n [value]=\"frText(col)\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"setFilterRowText(col, $any($event.target).value)\">\r\n <option value=\"\">(All)</option>\r\n @for (item of col.lookup()!.dataSource; track $index) {\r\n <option [value]=\"item[col.lookup()!.valueExpr ?? 'lovCode']\">\r\n {{ item[col.lookup()!.displayExpr ?? 'lovName'] }}\r\n </option>\r\n }\r\n </select>\r\n }\r\n @case ('boolean') {\r\n <select\r\n class=\"dx-texteditor-input nxe-grid-filter-input\"\r\n [value]=\"frText(col)\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"setFilterRowText(col, $any($event.target).value)\">\r\n <option value=\"\">(All)</option>\r\n <option value=\"true\">true</option>\r\n <option value=\"false\">false</option>\r\n </select>\r\n }\r\n @default {\r\n <div class=\"dx-editor-with-menu\">\r\n <div class=\"dx-menu dx-menu-base\">\r\n <ul class=\"dx-menu-horizontal\">\r\n <li>\r\n <div\r\n class=\"dx-menu-item\"\r\n title=\"Filter operation\"\r\n (click)=\"openFilterOpMenu(col, $event)\">\r\n <div class=\"dx-menu-item-content\">\r\n <span class=\"dx-icon\" [class]=\"frOpIconClass(col)\"></span>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n <input\r\n class=\"dx-texteditor-input nxe-grid-filter-input\"\r\n [type]=\"frEditorKind(col) === 'date' ? 'date' : 'text'\"\r\n [attr.inputmode]=\"frEditorKind(col) === 'number' ? 'decimal' : null\"\r\n [value]=\"frText(col)\"\r\n (input)=\"setFilterRowText(col, $any($event.target).value)\"\r\n (click)=\"$event.stopPropagation()\" />\r\n @if (frOp(col) === 'between') {\r\n <input\r\n class=\"dx-texteditor-input nxe-grid-filter-input nxe-fr-second\"\r\n [type]=\"frEditorKind(col) === 'date' ? 'date' : 'text'\"\r\n [attr.inputmode]=\"frEditorKind(col) === 'number' ? 'decimal' : null\"\r\n [value]=\"frText2(col)\"\r\n (input)=\"setFilterRowText(col, $any($event.target).value, true)\"\r\n (click)=\"$event.stopPropagation()\" />\r\n }\r\n </div>\r\n }\r\n }\r\n }\r\n </td>\r\n }\r\n @if (rowEditCommandVisible()) {\r\n <td class=\"dx-command-edit\"></td>\r\n }\r\n </tr>\r\n }\r\n </thead>\r\n <tbody>\r\n @for (item of renderRows(); track $index; let ri = $index) {\r\n @if (item.kind === 'group') {\r\n <!-- dx group-row anatomy (bright audit): [indent cells][expand chevron\r\n cell][dx-group-cell colspan][alignByColumn summary cells] -->\r\n <tr\r\n class=\"dx-row dx-group-row\"\r\n [class.dx-column-lines]=\"showColumnLines()\"\r\n [attr.aria-roledescription]=\"item.collapsed ? 'Collapsed row' : 'Expanded row'\">\r\n @for (i of indents(item.level); track i) {\r\n <td class=\"dx-command-expand dx-datagrid-group-space\"></td>\r\n }\r\n <td\r\n class=\"dx-command-expand dx-datagrid-group-space dx-datagrid-expand dx-selection-disabled\"\r\n [attr.aria-label]=\"item.collapsed ? 'Expand' : 'Collapse'\"\r\n (click)=\"toggleGroup(item.groupKey)\">\r\n <div\r\n [class.dx-datagrid-group-opened]=\"!item.collapsed\"\r\n [class.dx-datagrid-group-closed]=\"item.collapsed\"></div>\r\n </td>\r\n <td class=\"dx-group-cell\" [attr.colspan]=\"groupCellColspan(item)\">\r\n @if (templateFor(item.column.groupCellTemplate()); as gtpl) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"gtpl\"\r\n [ngTemplateOutletContext]=\"groupCellContext(item)\" />\r\n } @else {\r\n {{ item.column.caption() }}: {{ item.text }}{{ item.captionSuffix }}\r\n }\r\n </td>\r\n @for (col of groupRowTrailing(item); track col.dataField()) {\r\n <td class=\"dx-datagrid-summary-item\" [style.text-align]=\"align(col)\">\r\n {{ item.alignedSums.get(col.dataField()) || '' }}\r\n </td>\r\n }\r\n @if (groupRowTrailing(item).length && rowEditCommandVisible()) {\r\n <td class=\"dx-command-edit\"></td>\r\n }\r\n </tr>\r\n } @else if (item.kind === 'groupFooter') {\r\n <tr\r\n class=\"dx-row dx-group-footer-row nxe-group-footer-row\"\r\n [class]=\"'nxe-group-footer-level-' + item.level\">\r\n @for (i of indents(groupLevelCount()); track i) {\r\n <td class=\"dx-datagrid-group-space\"></td>\r\n }\r\n @if (masterDetailEnabled()) {\r\n <td class=\"dx-command-expand\"></td>\r\n }\r\n @if (showCheckboxes()) {\r\n <td class=\"dx-command-select\"></td>\r\n }\r\n @for (col of visibleColumns(); track col.dataField()) {\r\n <td class=\"dx-datagrid-summary-item\" [style.text-align]=\"align(col)\">\r\n {{ item.sums.get(col.dataField()) || '' }}\r\n </td>\r\n }\r\n @if (rowEditCommandVisible()) {\r\n <td class=\"dx-command-edit\"></td>\r\n }\r\n </tr>\r\n } @else {\r\n <tr\r\n class=\"dx-row dx-data-row\"\r\n [class]=\"rowClassFor(item.row)\"\r\n [attr.aria-rowindex]=\"item.rowIndex + 1\"\r\n [class.dx-row-lines]=\"showRowLines()\"\r\n [class.dx-column-lines]=\"showColumnLines()\"\r\n [class.dx-row-alt]=\"rowAlternationEnabled() && item.rowIndex % 2 === 1\"\r\n [class.dx-selection]=\"isSelected(item.row)\"\r\n [class.dx-state-hover]=\"isHovered(item.rowIndex)\"\r\n [class.dx-edit-row]=\"isRowEditing(item.row)\"\r\n (mouseenter)=\"onRowEnter(item.rowIndex)\"\r\n (mouseleave)=\"onRowLeave()\"\r\n (click)=\"onDataRowClick(item.row, item.rowIndex)\">\r\n @for (i of indents(groupLevelCount()); track i) {\r\n <td class=\"dx-datagrid-group-space\"></td>\r\n }\r\n @if (masterDetailEnabled()) {\r\n <td class=\"dx-command-expand dx-datagrid-expand\">\r\n <span\r\n class=\"nxe-detail-expander\"\r\n [class.nxe-expanded]=\"isDetailExpanded(item.row)\"\r\n (click)=\"toggleDetail(item.row, $event)\"></span>\r\n </td>\r\n }\r\n @if (showCheckboxes()) {\r\n <td class=\"dx-command-select\">\r\n <span\r\n class=\"dx-select-checkbox nxe-grid-checkbox\"\r\n [class.nxe-checked]=\"isSelected(item.row)\"\r\n (click)=\"onCheckboxClick(item.row, $event)\">\r\n <span class=\"nxe-grid-checkbox-box\"></span>\r\n </span>\r\n </td>\r\n }\r\n @for (col of visibleColumns(); track $index; let ci = $index) {\r\n @if (!isMergeSuppressed(ri, col)) {\r\n <td\r\n [class]=\"col.cssClass()\"\r\n [attr.aria-colindex]=\"leadCellCount() + ci + 1\"\r\n [attr.aria-roledescription]=\"\r\n editableCell(col) && (cellEditingEnabled() || rowEditingEnabled())\r\n ? 'Editable'\r\n : null\r\n \"\r\n [style.text-align]=\"align(col)\"\r\n [style.padding-left.px]=\"treeMode && ci === 0 ? (item.level || 0) * 18 + 4 : null\"\r\n [attr.rowspan]=\"mergeSpan(ri, col)\"\r\n [class.dx-editor-cell]=\"isEditingCell(item.row, col) || (isRowEditing(item.row) && editableCell(col))\"\r\n (click)=\"onCellClick(item.row, col, $event)\"\r\n (focusout)=\"onEditCellFocusOut(item.row, col, $event)\">\r\n @if (treeMode && ci === 0) {\r\n @if (item.hasChildren) {\r\n <span\r\n class=\"nxe-tree-expander\"\r\n [class.nxe-collapsed]=\"!item.expanded\"\r\n (click)=\"toggleTreeNode(item.nodeKey, $event)\"></span>\r\n } @else {\r\n <span class=\"nxe-tree-expander-stub\"></span>\r\n }\r\n }\r\n @if (isEditingCell(item.row, col) || (isRowEditing(item.row) && editableCell(col))) {\r\n @if (templateFor(col.editCellTemplate()); as etpl) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"etpl\"\r\n [ngTemplateOutletContext]=\"editCellContext(item.row, item.rowIndex, ci, col)\" />\r\n } @else if (isEditingCell(item.row, col)) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"cellEditor\"\r\n [ngTemplateOutletContext]=\"{ row: item.row, col: col, mode: 'cell' }\" />\r\n } @else {\r\n <ng-container\r\n [ngTemplateOutlet]=\"cellEditor\"\r\n [ngTemplateOutletContext]=\"{ row: item.row, col: col, mode: 'row' }\" />\r\n }\r\n } @else if (templateFor(col.cellTemplate()); as tpl) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"tpl\"\r\n [ngTemplateOutletContext]=\"cellContext(item.row, item.rowIndex, ci, col)\" />\r\n } @else if (isBooleanCell(col, item.row)) {\r\n <!-- dx parity: boolean cells render a read-only dx-style checkbox, not \"true\"/\"false\" -->\r\n <span\r\n class=\"nxe-grid-checkbox nxe-grid-checkbox-readonly\"\r\n [class.nxe-checked]=\"getRaw(item.row, col.dataField()) === true\">\r\n <span class=\"nxe-grid-checkbox-box\"></span>\r\n </span>\r\n } @else {\r\n {{ cellText(col, item.row) }}\r\n }\r\n </td>\r\n }\r\n }\r\n @if (rowEditCommandVisible()) {\r\n <td class=\"dx-command-edit dx-datagrid-drag-action\">\r\n @if (isRowEditing(item.row)) {\r\n <a class=\"dx-link dx-link-save\" (click)=\"saveRowEdit(item.row, $event)\">Save</a>\r\n <a class=\"dx-link dx-link-cancel\" (click)=\"cancelRowEdit($event)\">Cancel</a>\r\n } @else {\r\n <a class=\"dx-link dx-link-edit\" (click)=\"startRowEdit(item.row, $event)\">Edit</a>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n @if (masterDetailEnabled() && isDetailExpanded(item.row)) {\r\n <tr class=\"dx-row dx-master-detail-row\">\r\n <td [attr.colspan]=\"allColCount()\">\r\n @if (detailTemplate(); as tpl) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"tpl\"\r\n [ngTemplateOutletContext]=\"detailContext(item.row, item.rowIndex)\" />\r\n }\r\n </td>\r\n </tr>\r\n }\r\n }\r\n }\r\n <tr class=\"dx-row dx-freespace-row\">\r\n <td [attr.colspan]=\"allColCount()\"></td>\r\n </tr>\r\n </tbody>\r\n @if (hasTotalFooter()) {\r\n <tfoot class=\"dx-datagrid-total-footer\">\r\n <tr class=\"dx-row\">\r\n @for (i of indents(groupLevelCount()); track i) {\r\n <td class=\"dx-datagrid-group-space\"></td>\r\n }\r\n @if (masterDetailEnabled()) {\r\n <td class=\"dx-command-expand\"></td>\r\n }\r\n @if (showCheckboxes()) {\r\n <td class=\"dx-command-select\"></td>\r\n }\r\n @for (col of visibleColumns(); track col.dataField()) {\r\n <td class=\"dx-datagrid-summary-item\" [style.text-align]=\"align(col)\">\r\n {{ totalSums().get(col.dataField()) || '' }}\r\n </td>\r\n }\r\n @if (rowEditCommandVisible()) {\r\n <td class=\"dx-command-edit\"></td>\r\n }\r\n </tr>\r\n </tfoot>\r\n }\r\n </table>\r\n </div>\r\n\r\n @if (displayRows().length === 0 && !loading()) {\r\n <div class=\"dx-datagrid-nodata\">{{ noDataText() }}</div>\r\n }\r\n @if (loading()) {\r\n <div class=\"dx-datagrid-loadpanel\"><span class=\"nxe-grid-spinner\"></span></div>\r\n }\r\n </div>\r\n\r\n @if (pagerVisible()) {\r\n <div class=\"dx-datagrid-pager dx-pager nxe-grid-pager\">\r\n @if (pagerCmp()?.showPageSizeSelector() && pageSizes().length > 1) {\r\n <select class=\"nxe-pager-size\" (change)=\"onPageSizeSelect($event)\">\r\n @for (s of pageSizes(); track s) {\r\n <option [value]=\"s\" [selected]=\"s === effectivePageSize()\">{{ s }}</option>\r\n }\r\n </select>\r\n }\r\n <div class=\"nxe-pager-pages\">\r\n @if (pagerCmp()?.showNavigationButtons()) {\r\n <button type=\"button\" class=\"nxe-pager-nav\" [disabled]=\"pageIndex() === 0\" (click)=\"prevPage()\">‹</button>\r\n }\r\n @for (p of pageNumbers(); track p) {\r\n <button\r\n type=\"button\"\r\n class=\"nxe-pager-page\"\r\n [class.nxe-active]=\"p === pageIndex()\"\r\n (click)=\"goToPage(p)\">\r\n {{ p + 1 }}\r\n </button>\r\n }\r\n @if (pagerCmp()?.showNavigationButtons()) {\r\n <button type=\"button\" class=\"nxe-pager-nav\" [disabled]=\"pageIndex() >= pageCount() - 1\" (click)=\"nextPage()\">›</button>\r\n }\r\n </div>\r\n @if (pagerCmp()?.showInfo()) {\r\n <span class=\"nxe-pager-info\">{{ pageInfo() }}</span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n\r\n<!-- Inline cell/row editor (dxo-editing, orbit addition). `mode: 'cell'` commits on blur/Enter;\r\n `mode: 'row'` buffers on input until the command column's Save. -->\r\n<ng-template #cellEditor let-row=\"row\" let-col=\"col\" let-mode=\"mode\">\r\n @if (col.lookup(); as lookup) {\r\n <select\r\n class=\"dx-texteditor-input nxe-grid-cell-editor\"\r\n [value]=\"editorInputValue(row, col)\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"\r\n mode === 'cell'\r\n ? commitCellEdit(row, col, $any($event.target).value)\r\n : bufferRowEdit(col, $any($event.target).value)\r\n \">\r\n <option value=\"\"></option>\r\n @for (item of lookup.dataSource; track $index) {\r\n <option [value]=\"item[lookup.valueExpr ?? 'lovCode']\">\r\n {{ item[lookup.displayExpr ?? 'lovName'] }}\r\n </option>\r\n }\r\n </select>\r\n } @else if (col.dataType() === 'boolean') {\r\n <input\r\n type=\"checkbox\"\r\n class=\"nxe-grid-cell-editor-check\"\r\n [checked]=\"!!editorInputValue(row, col) && editorInputValue(row, col) !== 'false'\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"\r\n mode === 'cell'\r\n ? commitCellEdit(row, col, $any($event.target).checked)\r\n : bufferRowEdit(col, $any($event.target).checked)\r\n \" />\r\n } @else {\r\n <input\r\n type=\"text\"\r\n class=\"dx-texteditor-input nxe-grid-cell-editor\"\r\n [value]=\"editorInputValue(row, col)\"\r\n (click)=\"$event.stopPropagation()\"\r\n (keydown.enter)=\"mode === 'cell' && commitCellEdit(row, col, $any($event.target).value)\"\r\n (keydown.escape)=\"mode === 'cell' && cancelCellEdit()\"\r\n (blur)=\"mode === 'cell' && commitCellEdit(row, col, $any($event.target).value)\"\r\n (input)=\"mode === 'row' && bufferRowEdit(col, $any($event.target).value)\" />\r\n }\r\n</ng-template>\r\n\r\n<!-- The header-filter popup (#hfPanel) moved to nxe-header-filter-panel.component.html —\r\n openHeaderFilter attaches it through openNxeHeaderFilterOverlay (pivot parity Phase 3a). -->\r\n\r\n<!-- Filter-row operation-chooser dropdown (dx filter menu) -->\r\n<ng-template #frOpMenu>\r\n <div class=\"nxe-fr-op-menu dx-datagrid\">\r\n @for (item of frMenuOps(); track item.op) {\r\n <div\r\n class=\"dx-menu-item\"\r\n [class.dx-menu-item-selected]=\"frMenuColumn() && frOp(frMenuColumn()!) === item.op\"\r\n (click)=\"selectFilterOp(item.op)\">\r\n <span class=\"dx-icon dx-icon-filter-operation-{{ opIconSlug(item.op) }}\"></span>\r\n <span class=\"dx-menu-item-text\">{{ item.label }}</span>\r\n </div>\r\n }\r\n <div class=\"dx-menu-item nxe-fr-reset\" (click)=\"resetFilterRow()\">\r\n <span class=\"dx-icon\"></span>\r\n <span class=\"dx-menu-item-text\">Reset</span>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n","// @nexterajs/ui/grid — public API.\r\nexport * from './lib/grid/nxe-format.util';\r\nexport * from './lib/grid/nxe-grid-drag';\r\nexport * from './lib/grid/nxe-grid.types';\r\nexport * from './lib/grid/nxe-column.component';\r\nexport * from './lib/grid/nxe-selection.component';\r\nexport * from './lib/grid/nxe-header-filter.component';\r\nexport * from './lib/grid/nxe-header-filter.model';\r\nexport * from './lib/grid/nxe-header-filter-panel.component';\r\nexport * from './lib/grid/nxe-header-filter-overlay';\r\nexport * from './lib/grid/nxe-grouping.component';\r\nexport * from './lib/grid/nxe-summary.component';\r\nexport * from './lib/grid/nxe-paging.component';\r\nexport * from './lib/grid/nxe-editing.component';\r\nexport * from './lib/grid/nxe-filter-row.component';\r\nexport * from './lib/grid/nxe-master-detail.component';\r\nexport * from './lib/grid/nxe-scrolling.component';\r\nexport * from './lib/grid/nxe-excel-export.service';\r\nexport * from './lib/grid/nxe-data-grid.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}