@mozaic-ds/angular 2.0.64 → 2.0.66

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { TemplateRef, OnInit, ElementRef, InjectionToken, Type, AfterViewInit, OnDestroy, Renderer2, WritableSignal, Signal, AfterContentInit, QueryList, EventEmitter, ComponentRef, InputSignal, OutputEmitterRef, OnChanges, SimpleChanges } from '@angular/core';
2
+ import { TemplateRef, OnInit, ElementRef, InjectionToken, Type, AfterViewInit, OnDestroy, Renderer2, WritableSignal, Signal, AfterContentInit, QueryList, EventEmitter, ComponentRef } from '@angular/core';
3
3
  import { ControlValueAccessor } from '@angular/forms';
4
4
  import { CheckCircle32, Uploading32, WarningCircle32 } from '@mozaic-ds/icons-angular';
5
5
  import { RouterLink } from '@angular/router';
@@ -8,7 +8,6 @@ import * as rxjs from 'rxjs';
8
8
  import { Observable } from 'rxjs';
9
9
  import { CdkPortalOutlet } from '@angular/cdk/portal';
10
10
  import * as _mozaic_ds_angular from '@mozaic-ds/angular';
11
- import { CdkDragDrop } from '@angular/cdk/drag-drop';
12
11
  import { ComponentHarness } from '@angular/cdk/testing';
13
12
 
14
13
  type MozBreadcrumbAppearance = 'standard' | 'inverse';
@@ -242,7 +241,7 @@ declare class MozFileUploaderItemComponent {
242
241
  readonly fileName: _angular_core.Signal<string>;
243
242
  readonly fileInfo: _angular_core.Signal<string>;
244
243
  readonly isInline: _angular_core.Signal<boolean>;
245
- readonly stateModifier: _angular_core.Signal<"default" | "error" | "loading">;
244
+ readonly stateModifier: _angular_core.Signal<"error" | "loading" | "default">;
246
245
  readonly modifierClass: _angular_core.Signal<string>;
247
246
  readonly isUploading: _angular_core.Signal<boolean>;
248
247
  readonly stateIcon: _angular_core.Signal<typeof CheckCircle32 | typeof Uploading32 | typeof WarningCircle32>;
@@ -2259,2349 +2258,6 @@ declare class MozNavigationIndicatorComponent {
2259
2258
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<MozNavigationIndicatorComponent, "moz-navigation-indicator", never, { "steps": { "alias": "steps"; "required": true; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "action": { "alias": "action"; "required": false; "isSignal": true; }; "light": { "alias": "light"; "required": false; "isSignal": true; }; "hideAction": { "alias": "hideAction"; "required": false; "isSignal": true; }; "pauseLabel": { "alias": "pauseLabel"; "required": false; "isSignal": true; }; "resumeLabel": { "alias": "resumeLabel"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; "stepClick": "stepClick"; "actionClick": "actionClick"; }, never, never, true, never>;
2260
2259
  }
2261
2260
 
2262
- interface CellCoord {
2263
- row: number;
2264
- col: number;
2265
- }
2266
- interface CellRange {
2267
- start: CellCoord;
2268
- end: CellCoord;
2269
- }
2270
- interface CellEditState {
2271
- editingCell: CellCoord | null;
2272
- originalValue: unknown;
2273
- draftValue: unknown;
2274
- validationError: string | null;
2275
- }
2276
- interface CellEditEvent<T = unknown> {
2277
- row: T;
2278
- rowIndex: number;
2279
- field: string;
2280
- oldValue: unknown;
2281
- newValue: unknown;
2282
- }
2283
- interface CellEditCancelEvent {
2284
- rowIndex: number;
2285
- field: string;
2286
- originalValue: unknown;
2287
- }
2288
- interface BulkEditEvent {
2289
- range: CellRange | null;
2290
- cellCount: number;
2291
- rowIds: unknown[];
2292
- fields: string[];
2293
- selectionMode?: 'rows' | 'cells';
2294
- rowSelection?: unknown;
2295
- }
2296
- interface BulkCopyEvent {
2297
- range: CellRange | null;
2298
- data: string[][];
2299
- rowIds: unknown[];
2300
- fields: string[];
2301
- selectionMode?: 'rows' | 'cells';
2302
- rowSelection?: unknown;
2303
- }
2304
- /**
2305
- * A single cell change produced by a bulk operation (paste, delete, …).
2306
- * Values are already coerced to the column's expected type and have passed
2307
- * `cellEditorValidator`; consumers can persist them as-is.
2308
- */
2309
- interface BulkCellChange {
2310
- rowIndex: number;
2311
- rowId: unknown;
2312
- field: string;
2313
- oldValue: unknown;
2314
- newValue: unknown;
2315
- }
2316
- interface BulkPasteEvent {
2317
- range: CellRange | null;
2318
- data: string[][];
2319
- rowIds: unknown[];
2320
- fields: string[];
2321
- /**
2322
- * Fully resolved per-cell changes applied by the grid (post-coercion,
2323
- * post-validation). Use this to persist server-side — no need to replicate
2324
- * the fill logic from `data` vs `range`.
2325
- */
2326
- changes: BulkCellChange[];
2327
- selectionMode?: 'rows' | 'cells';
2328
- rowSelection?: unknown;
2329
- }
2330
- interface FillDownEvent {
2331
- sourceCell: CellCoord;
2332
- sourceValue: unknown;
2333
- direction: 'vertical' | 'horizontal';
2334
- /** Total cells actually written (excludes the anchor and non-editable columns). */
2335
- affectedCellCount: number;
2336
- field?: string;
2337
- targetRange?: {
2338
- startRow: number;
2339
- endRow: number;
2340
- };
2341
- /** @deprecated Use `affectedCellCount` instead. */
2342
- affectedRowCount?: number;
2343
- /** Target columns written in the horizontal fill. Non-editable columns are filtered out. */
2344
- targetFields?: string[];
2345
- }
2346
- interface CellError {
2347
- message: string;
2348
- }
2349
- interface BulkDeleteEvent {
2350
- range: CellRange | null;
2351
- cellCount: number;
2352
- rowIds: unknown[];
2353
- fields: string[];
2354
- /**
2355
- * Fully resolved per-cell changes applied by the grid (post-coercion,
2356
- * post-validation). Use this to persist server-side.
2357
- */
2358
- changes: BulkCellChange[];
2359
- selectionMode?: 'rows' | 'cells';
2360
- rowSelection?: unknown;
2361
- }
2362
-
2363
- /**
2364
- * Filter model — multi-condition filter builder with AND/OR combinators.
2365
- *
2366
- * Evaluation is left-associative (no operator precedence). Grouped / parenthesised
2367
- * conditions (`(a AND b) OR c`) are out of scope for the MVP; see docs.
2368
- */
2369
-
2370
- /** Controls where filter evaluation happens. */
2371
- type FilterMode = 'client' | 'server';
2372
- type FilterDataType = 'text' | 'number' | 'date' | 'set' | 'boolean' | 'custom';
2373
- type TextOperator = 'contains' | 'notContains' | 'equals' | 'notEquals' | 'startsWith' | 'endsWith' | 'blank' | 'notBlank';
2374
- type NumberOperator = 'equals' | 'notEquals' | 'gt' | 'gte' | 'lt' | 'lte' | 'between' | 'blank' | 'notBlank';
2375
- type DateOperator = NumberOperator;
2376
- type SetOperator = 'in' | 'notIn' | 'blank' | 'notBlank';
2377
- type BooleanOperator = 'equals' | 'blank' | 'notBlank';
2378
- type FilterOperator = TextOperator | NumberOperator | DateOperator | SetOperator | BooleanOperator;
2379
- type FilterCombinator = 'and' | 'or';
2380
- interface FilterValue {
2381
- /** Primary value. Absent / ignored for `blank` / `notBlank`. */
2382
- value?: unknown;
2383
- /** Upper bound for `between`. */
2384
- valueTo?: unknown;
2385
- }
2386
- interface FilterCondition {
2387
- /** Stable identifier — used for trackBy and drag-drop reordering. */
2388
- id: string;
2389
- /** Ignored for the first condition. Rendered as "Where" in the UI. */
2390
- combinator: FilterCombinator;
2391
- field: string;
2392
- operator: FilterOperator;
2393
- value: FilterValue;
2394
- }
2395
- interface FilterModel {
2396
- conditions: FilterCondition[];
2397
- }
2398
- type FilterChangeReason = 'add' | 'update' | 'remove' | 'reorder' | 'clear' | 'replace';
2399
- /**
2400
- * Payload emitted whenever the filter model changes. Replaces the legacy
2401
- * `{ filters: ActiveFilter[] }` shape.
2402
- */
2403
- interface FilterEvent {
2404
- /** Full model after mutation. */
2405
- model: FilterModel;
2406
- /** Condition concerned by the mutation. null for `clear` / `replace`. */
2407
- condition: FilterCondition | null;
2408
- /** Mutation kind. */
2409
- reason: FilterChangeReason;
2410
- }
2411
- /** Drawer data / result for the Filters drawer (toolbar). */
2412
- interface FilterDrawerData {
2413
- model: FilterModel;
2414
- availableColumns: FilterColumnDescriptor[];
2415
- applyMode: FilterApplyMode;
2416
- }
2417
- interface FilterDrawerResult {
2418
- model: FilterModel;
2419
- applied: boolean;
2420
- }
2421
- type FilterApplyMode = 'auto' | 'manual';
2422
- /**
2423
- * Base class for custom filter components. Extend this class and declare:
2424
- * readonly condition = input.required<FilterCondition>();
2425
- * readonly conditionChange = output<FilterValue>();
2426
- *
2427
- * The filter builder instantiates the component via ViewContainerRef and wires
2428
- * the inputs/outputs automatically — the component has no dependency on the grid.
2429
- */
2430
- declare abstract class MozGridCustomFilter {
2431
- abstract readonly condition: InputSignal<FilterCondition>;
2432
- abstract readonly conditionChange: OutputEmitterRef<FilterValue>;
2433
- }
2434
- /** Minimal column info the builder needs to render labels, operators and value editors. */
2435
- interface FilterColumnDescriptor {
2436
- field: string;
2437
- headerName: string;
2438
- filterType: FilterDataType;
2439
- operators: FilterOperator[];
2440
- options?: {
2441
- value: unknown;
2442
- label: string;
2443
- }[];
2444
- defaultOperator: FilterOperator;
2445
- /** Custom component rendered in the builder for filterType === 'custom'. */
2446
- filterComponent?: Type<MozGridCustomFilter>;
2447
- /** Override for completion check. Defaults to value.value != null && !== ''. */
2448
- filterIsComplete?: (value: FilterValue) => boolean;
2449
- }
2450
- /**
2451
- * Default operator sets per data type. Consumers can restrict the set via
2452
- * `ColumnDef.filterOperators`.
2453
- */
2454
- declare const DEFAULT_OPERATORS: Record<FilterDataType, FilterOperator[]>;
2455
- declare const DEFAULT_OPERATOR_PER_TYPE: Record<FilterDataType, FilterOperator>;
2456
- /** Human-readable operator labels (used by `toLabel`). */
2457
- declare const OPERATOR_LABELS: Record<FilterOperator, string>;
2458
- /** Operators that do not require a user-entered value. */
2459
- declare const VALUELESS_OPERATORS: ReadonlySet<FilterOperator>;
2460
- /** Operators that need a secondary value (`between`). */
2461
- declare const RANGE_OPERATORS: ReadonlySet<FilterOperator>;
2462
- /** Small helper for generating condition ids without pulling in a uuid dep. */
2463
- declare function generateConditionId(): string;
2464
- /** True when a condition has enough information to participate in evaluation. */
2465
- declare function isConditionComplete(condition: FilterCondition): boolean;
2466
-
2467
- type SortDirection = 'asc' | 'desc' | null;
2468
- type CellEditorType = 'text' | 'number' | 'textarea' | 'select' | 'checkbox' | 'date' | 'toggle' | 'custom';
2469
- interface ColumnDef<T = unknown> {
2470
- /** Unique column identifier */
2471
- field: string;
2472
- /** Display name in header */
2473
- headerName?: string;
2474
- /** Fixed width in px (e.g. '120px') */
2475
- width?: string;
2476
- /** Minimum width in px for resize */
2477
- minWidth?: string;
2478
- /** Maximum width in px for resize */
2479
- maxWidth?: string;
2480
- /** Flex grow factor (like CSS flex) */
2481
- flex?: number;
2482
- /** Whether column is sortable */
2483
- sortable?: boolean;
2484
- /** Custom sort comparator */
2485
- sortComparator?: (a: T, b: T) => number;
2486
- /** Whether column is resizable */
2487
- resizable?: boolean;
2488
- /** Whether column is reorderable */
2489
- reorderable?: boolean;
2490
- /** Whether column is groupable */
2491
- groupable?: boolean;
2492
- /** Whether column supports filtering */
2493
- filterable?: boolean;
2494
- /**
2495
- * Filter data type. When omitted, it is derived from `cellEditor`:
2496
- * `number → number`, `date → date`, `select → set`, anything else → `text`.
2497
- */
2498
- filterType?: FilterDataType;
2499
- /** Allowed operators — subset of the defaults for `filterType`. Optional. */
2500
- filterOperators?: FilterOperator[];
2501
- /** Default operator used when a condition is created for this column. */
2502
- defaultFilterOperator?: FilterOperator;
2503
- /** For `set` filters: the options shown in the value picker. */
2504
- filterOptions?: {
2505
- value: unknown;
2506
- label: string;
2507
- }[];
2508
- /** Whether column is pinned/frozen ('start' | 'end' | null) */
2509
- pinned?: 'start' | 'end' | null;
2510
- /** Whether column is visible */
2511
- visible?: boolean;
2512
- /** Whether column can be hidden via header menu */
2513
- hideable?: boolean;
2514
- /** Whether column can be frozen via header menu */
2515
- freezable?: boolean;
2516
- /** Whether the column header search (filter input) is visible */
2517
- searchVisible?: boolean;
2518
- /** Disable the header menu entirely for this column */
2519
- headerMenuDisabled?: boolean;
2520
- /** Cell value accessor (alternative to field for nested data) */
2521
- valueGetter?: (row: T) => unknown;
2522
- /** Cell value formatter for display */
2523
- valueFormatter?: (value: unknown, row: T) => string;
2524
- /** CSS class for column cells */
2525
- cellClass?: string | ((row: T) => string);
2526
- /** CSS class for header cell */
2527
- headerClass?: string;
2528
- /** Whether this column supports inline editing (double-click to edit) */
2529
- editable?: boolean;
2530
- /** Editor type — determines which Mozaic component is rendered in edit mode */
2531
- cellEditor?: CellEditorType;
2532
- /** Options for select editors (MozSelectOption[]) */
2533
- cellEditorOptions?: MozSelectOption[];
2534
- /** Custom validation before commit */
2535
- cellEditorValidator?: (value: unknown, row: T) => boolean | string;
2536
- /** Custom cell template */
2537
- cellTemplate?: TemplateRef<unknown>;
2538
- /** Custom edit template */
2539
- editTemplate?: TemplateRef<unknown>;
2540
- /** Custom filter template rendered in the sub-header filter row */
2541
- filterTemplate?: TemplateRef<unknown>;
2542
- /**
2543
- * Custom Angular component rendered as the value editor in the filter builder.
2544
- * The component must extend `MozGridCustomFilter`.
2545
- * Automatically sets filterType to 'custom'.
2546
- */
2547
- filterComponent?: Type<MozGridCustomFilter>;
2548
- /**
2549
- * Client-side predicate used when filterMode="client" and filterType is 'custom'.
2550
- * If absent, custom conditions are silently skipped in client mode.
2551
- */
2552
- filterPredicate?: (row: T, value: FilterValue) => boolean;
2553
- /**
2554
- * Determines whether a custom filter condition is "complete" (has enough data
2555
- * to participate in evaluation). Defaults to value.value != null && !== ''.
2556
- */
2557
- filterIsComplete?: (value: FilterValue) => boolean;
2558
- /** Validation function for cell values. Returns CellError or null. */
2559
- cellValidator?: (value: unknown, row: T) => CellError | null;
2560
- /**
2561
- * Enables spreadsheet-style formulas for this column. Setting this to
2562
- * `true` implies `editable: true` (users need to type the formula). When
2563
- * the committed value starts with `=`, it is routed to the `FormulaEngine`
2564
- * and the evaluated result is rendered in place of the raw formula text.
2565
- *
2566
- * Requires the grid-level `formulas` input to be `true` and the row to
2567
- * expose a stable id via `rowIdField`.
2568
- */
2569
- allowFormula?: boolean;
2570
- }
2571
- interface ColumnStateEntry {
2572
- field: string;
2573
- currentWidth: number;
2574
- order: number;
2575
- visible: boolean;
2576
- sort: SortDirection;
2577
- sortIndex: number | null;
2578
- pinned: 'start' | 'end' | null;
2579
- searchVisible: boolean;
2580
- }
2581
- interface ColumnResizeEvent {
2582
- field: string;
2583
- previousWidth: number;
2584
- newWidth: number;
2585
- }
2586
- interface ColumnReorderEvent {
2587
- field: string;
2588
- previousIndex: number;
2589
- newIndex: number;
2590
- columns: string[];
2591
- }
2592
- interface ColumnFreezeEvent {
2593
- field: string;
2594
- side: 'start' | 'end' | null;
2595
- frozenLeftColumns: string[];
2596
- frozenRightColumns: string[];
2597
- }
2598
- interface ColumnVisibilityEvent {
2599
- field: string;
2600
- visible: boolean;
2601
- visibleColumns: string[];
2602
- }
2603
- interface ColumnSearchToggleEvent {
2604
- field: string;
2605
- searchVisible: boolean;
2606
- }
2607
- type HeaderMenuActionId = 'sort-asc' | 'sort-desc' | 'filter-column' | 'group-column' | 'freeze-column-left' | 'freeze-column-right' | 'unfreeze-column' | 'hide-column' | 'toggle-column-search';
2608
- interface HeaderMenuConfig {
2609
- field: string;
2610
- columnIndex: number;
2611
- headerName: string;
2612
- sortable: boolean;
2613
- filterable: boolean;
2614
- groupable: boolean;
2615
- freezable: boolean;
2616
- hideable: boolean;
2617
- searchVisible: boolean;
2618
- currentSort: SortDirection;
2619
- }
2620
-
2621
- interface SortDef {
2622
- field: string;
2623
- direction: SortDirection;
2624
- priority: number;
2625
- }
2626
- interface SortEvent {
2627
- sorts: SortDef[];
2628
- }
2629
-
2630
- type LoadingStrategy = 'pagination' | 'infinite-scroll';
2631
- interface PaginationState {
2632
- pageIndex: number;
2633
- pageSize: number;
2634
- totalItems: number;
2635
- totalPages: number;
2636
- }
2637
- interface PageEvent {
2638
- pageIndex: number;
2639
- pageSize: number;
2640
- previousPageIndex: number;
2641
- previousPageSize: number;
2642
- }
2643
- interface LoadMoreEvent {
2644
- offset: number;
2645
- limit: number;
2646
- }
2647
-
2648
- /**
2649
- * Lightweight display descriptor for the "FILTERED BY" tag bar. Derived from
2650
- * the active filter model via `FilterEngine.toLabel()`; kept as a separate
2651
- * shape so the tag bar template does not depend on the full `FilterCondition`.
2652
- */
2653
- interface ActiveFilter {
2654
- /** Condition id (not the column field — multiple conditions can target the same field). */
2655
- id: string;
2656
- field: string;
2657
- label: string;
2658
- removable: boolean;
2659
- }
2660
- interface GroupEvent {
2661
- columns: string[];
2662
- groups: GroupEntry[];
2663
- }
2664
- /**
2665
- * Emitted when the toolbar export action is triggered while `exportMode` is
2666
- * `'server'`. The grid does not produce a file itself — the consumer reacts to
2667
- * this event (e.g. calls a back-end export endpoint) using the active view
2668
- * descriptors below.
2669
- */
2670
- interface GridExportEvent {
2671
- format: 'csv';
2672
- /** Active sort descriptors at export time. */
2673
- sorts: SortDef[];
2674
- /** Active filter model at export time. */
2675
- filterModel: FilterModel;
2676
- /** Fields of the currently visible columns, in display order. */
2677
- columns: string[];
2678
- }
2679
- interface RowSelectionEvent<T = unknown> {
2680
- selectedIds: unknown[];
2681
- excludedIds: unknown[];
2682
- selectedRows: T[];
2683
- mode: SelectAllMode;
2684
- count: number;
2685
- }
2686
- type SelectAllMode = 'none' | 'page' | 'all';
2687
- interface CellSelectionEvent<T = unknown> {
2688
- focusedCell: {
2689
- row: number;
2690
- col: number;
2691
- } | null;
2692
- selectedCell: {
2693
- row: number;
2694
- col: number;
2695
- } | null;
2696
- range: {
2697
- start: {
2698
- row: number;
2699
- col: number;
2700
- };
2701
- end: {
2702
- row: number;
2703
- col: number;
2704
- };
2705
- } | null;
2706
- selectedData: {
2707
- row: T;
2708
- column: string;
2709
- value: unknown;
2710
- }[];
2711
- }
2712
- interface GridEventMap<T = unknown> {
2713
- pageChange: PageEvent;
2714
- sortChange: SortEvent;
2715
- filterChange: FilterEvent;
2716
- groupChange: GroupEvent;
2717
- columnResize: ColumnResizeEvent;
2718
- columnReorder: ColumnReorderEvent;
2719
- columnFreeze: ColumnFreezeEvent;
2720
- columnVisibility: ColumnVisibilityEvent;
2721
- columnSearchToggle: ColumnSearchToggleEvent;
2722
- selectionChange: RowSelectionEvent<T>;
2723
- cellSelectionChange: CellSelectionEvent<T>;
2724
- rowClick: {
2725
- row: T;
2726
- index: number;
2727
- event: MouseEvent;
2728
- };
2729
- rowExpand: {
2730
- row: T;
2731
- index: number;
2732
- expanded: boolean;
2733
- };
2734
- cellEdit: CellEditEvent<T>;
2735
- cellEditCancel: CellEditCancelEvent;
2736
- }
2737
- type GridEventType = keyof GridEventMap;
2738
- type GridDensity = 'small' | 'default' | 'large';
2739
- interface GridSettingsData {
2740
- columns: {
2741
- field: string;
2742
- headerName: string;
2743
- visible: boolean;
2744
- }[];
2745
- density: GridDensity;
2746
- defaultColumns: {
2747
- field: string;
2748
- headerName: string;
2749
- visible: boolean;
2750
- }[];
2751
- }
2752
- interface GridSettingsResult {
2753
- density: GridDensity;
2754
- columns: {
2755
- field: string;
2756
- visible: boolean;
2757
- order: number;
2758
- }[];
2759
- }
2760
- interface GroupEntry {
2761
- field: string;
2762
- sortDirection: 'asc' | 'desc';
2763
- }
2764
- interface GroupDrawerData {
2765
- groups: GroupEntry[];
2766
- availableColumns: {
2767
- field: string;
2768
- headerName: string;
2769
- }[];
2770
- }
2771
- interface GroupDrawerResult {
2772
- groups: GroupEntry[];
2773
- }
2774
-
2775
- declare class GridStateManager<T = unknown> {
2776
- readonly sourceData: _angular_core.WritableSignal<T[]>;
2777
- readonly totalItems: _angular_core.WritableSignal<number>;
2778
- readonly mode: _angular_core.WritableSignal<"client" | "server">;
2779
- readonly filterMode: _angular_core.WritableSignal<FilterMode>;
2780
- readonly loadingStrategy: _angular_core.WritableSignal<LoadingStrategy>;
2781
- readonly columnDefs: _angular_core.WritableSignal<ColumnDef<T>[]>;
2782
- readonly columnStates: _angular_core.WritableSignal<ColumnStateEntry[]>;
2783
- readonly activeSorts: _angular_core.WritableSignal<SortDef[]>;
2784
- readonly groupColumns: _angular_core.WritableSignal<GroupEntry[]>;
2785
- readonly expandedGroups: _angular_core.WritableSignal<Set<string>>;
2786
- /**
2787
- * Unified filter state: single source of truth for the multi-condition
2788
- * builder. The tag-bar displays a derived view via `FilterEngine.toLabel()`.
2789
- */
2790
- readonly filterModel: _angular_core.WritableSignal<FilterModel>;
2791
- /** `false` disables paging entirely — `paginatedData` returns the full
2792
- * filtered set instead of slicing by `pageSize`. */
2793
- readonly paginationEnabled: _angular_core.WritableSignal<boolean>;
2794
- readonly pageIndex: _angular_core.WritableSignal<number>;
2795
- readonly pageSize: _angular_core.WritableSignal<number>;
2796
- readonly visibleRowCount: _angular_core.WritableSignal<number>;
2797
- readonly scrollLeft: _angular_core.WritableSignal<number>;
2798
- readonly scrollTop: _angular_core.WritableSignal<number>;
2799
- readonly scrollViewportWidth: _angular_core.WritableSignal<number>;
2800
- readonly scrollViewportHeight: _angular_core.WritableSignal<number>;
2801
- readonly scrollContentTotalWidth: _angular_core.WritableSignal<number>;
2802
- readonly horizontalVirtualScrollEnabled: _angular_core.WritableSignal<boolean>;
2803
- readonly visibleColumnRange: _angular_core.WritableSignal<{
2804
- start: number;
2805
- end: number;
2806
- }>;
2807
- /** Range of display-row indices currently mounted in the DOM. */
2808
- readonly visibleRowRange: _angular_core.WritableSignal<{
2809
- start: number;
2810
- end: number;
2811
- }>;
2812
- /** Pixel offset of the first rendered row from the top of the body content. */
2813
- readonly topSpacerHeight: _angular_core.WritableSignal<number>;
2814
- /** Pixel offset between the last rendered row and the bottom of the body content. */
2815
- readonly bottomSpacerHeight: _angular_core.WritableSignal<number>;
2816
- /** Total height of all display rows (data + group, includes expanded detail). */
2817
- readonly totalRowsHeight: _angular_core.WritableSignal<number>;
2818
- readonly isLoading: _angular_core.WritableSignal<boolean>;
2819
- readonly rowHeight: _angular_core.WritableSignal<number>;
2820
- readonly density: _angular_core.WritableSignal<GridDensity>;
2821
- readonly selectedRowIds: _angular_core.WritableSignal<Set<unknown>>;
2822
- readonly excludedRowIds: _angular_core.WritableSignal<Set<unknown>>;
2823
- readonly selectAllMode: _angular_core.WritableSignal<"none" | "page" | "all">;
2824
- readonly focusedCell: _angular_core.WritableSignal<CellCoord | null>;
2825
- readonly selectedCell: _angular_core.WritableSignal<CellCoord | null>;
2826
- readonly cellRange: _angular_core.WritableSignal<{
2827
- start: CellCoord;
2828
- end: CellCoord;
2829
- } | null>;
2830
- readonly isDragging: _angular_core.WritableSignal<boolean>;
2831
- readonly focusSource: _angular_core.WritableSignal<"click" | "keyboard" | null>;
2832
- readonly isFilling: _angular_core.WritableSignal<boolean>;
2833
- readonly fillAnchor: _angular_core.WritableSignal<CellCoord | null>;
2834
- readonly fillTarget: _angular_core.WritableSignal<CellCoord | null>;
2835
- readonly cutSource: _angular_core.WritableSignal<{
2836
- start: CellCoord;
2837
- end: CellCoord;
2838
- } | null>;
2839
- readonly expandedRowIds: _angular_core.WritableSignal<Set<unknown>>;
2840
- readonly rowIdField: _angular_core.WritableSignal<string>;
2841
- readonly multiCellSelectionEnabled: _angular_core.WritableSignal<boolean>;
2842
- readonly activeSelectionMode: _angular_core.WritableSignal<"none" | "rows" | "cells">;
2843
- readonly draggingColumn: _angular_core.WritableSignal<string | null>;
2844
- readonly dropIndicatorIndex: _angular_core.WritableSignal<number | null>;
2845
- readonly cellEditState: _angular_core.WritableSignal<CellEditState>;
2846
- /** `true` while the user is editing a formula inside the top formula bar
2847
- * (outside any cell). Consumed by `FormulaEngine.isFormulaEditActive`
2848
- * so headers show column-letter badges during bar-driven edits too. */
2849
- readonly formulaBarEditingActive: _angular_core.WritableSignal<boolean>;
2850
- readonly visibleColumns: _angular_core.Signal<ColumnStateEntry[]>;
2851
- readonly pinnedLeftColumns: _angular_core.Signal<ColumnStateEntry[]>;
2852
- readonly unpinnedColumns: _angular_core.Signal<ColumnStateEntry[]>;
2853
- readonly pinnedRightColumns: _angular_core.Signal<ColumnStateEntry[]>;
2854
- readonly pinnedLeftWidth: _angular_core.Signal<number>;
2855
- readonly pinnedRightWidth: _angular_core.Signal<number>;
2856
- /**
2857
- * Cumulative `left` offset (px) for each pinned-left column, in render
2858
- * order. Consumers add their own utility-cell prefix (checkbox/expand) and
2859
- * pass the result to `position: sticky; left: <offset>px`.
2860
- * Returns an array of length `pinnedLeftColumns().length`.
2861
- */
2862
- readonly pinnedLeftCumulativeOffsets: _angular_core.Signal<number[]>;
2863
- /**
2864
- * Cumulative `right` offset (px) for each pinned-right column, in render
2865
- * order. The first column from the right (visually leftmost in the
2866
- * pinned-right group) has the largest `right` offset.
2867
- */
2868
- readonly pinnedRightCumulativeOffsets: _angular_core.Signal<number[]>;
2869
- readonly unpinnedWidth: _angular_core.Signal<number>;
2870
- /**
2871
- * Unpinned columns actually rendered in data rows. When horizontal virtual scroll
2872
- * is disabled, this is the full set; when enabled, it's the slice inside the
2873
- * current visibleColumnRange. Header and filter row keep rendering the full set —
2874
- * only row cells are virtualized.
2875
- */
2876
- /**
2877
- * Effective column range with edit-mode widening: keeps the column being edited
2878
- * inside the rendered window so the editor never gets torn down mid-edit.
2879
- */
2880
- readonly effectiveColumnRange: _angular_core.Signal<{
2881
- start: number;
2882
- end: number;
2883
- }>;
2884
- readonly renderedUnpinnedColumns: _angular_core.Signal<ColumnStateEntry[]>;
2885
- readonly leadingColumnSpacer: _angular_core.Signal<number>;
2886
- readonly trailingColumnSpacer: _angular_core.Signal<number>;
2887
- readonly columnDefMap: _angular_core.Signal<Map<string, ColumnDef<T>>>;
2888
- /** `true` when at least one column declares `allowFormula: true`. */
2889
- readonly hasFormulaColumns: _angular_core.Signal<boolean>;
2890
- readonly gridTemplateColumns: _angular_core.Signal<string>;
2891
- readonly totalContentWidth: _angular_core.Signal<number>;
2892
- readonly totalPages: _angular_core.Signal<number>;
2893
- readonly hasMore: _angular_core.Signal<boolean>;
2894
- initColumns(defs: ColumnDef<T>[]): void;
2895
- updateColumnState(field: string, updates: Partial<ColumnStateEntry>): void;
2896
- private resolveWidth;
2897
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<GridStateManager<any>, never>;
2898
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<GridStateManager<any>>;
2899
- }
2900
-
2901
- declare class RowSelectionEngine<T = unknown> {
2902
- private readonly state;
2903
- private readonly engine;
2904
- readonly selectedIds: _angular_core.Signal<Set<unknown>>;
2905
- readonly excludedIds: _angular_core.Signal<Set<unknown>>;
2906
- /**
2907
- * Anchor row for shift-click range selection. We track the row object
2908
- * (not its index) so the anchor stays valid across grouping, sorting and
2909
- * filtering — where display indices shift without the underlying row
2910
- * changing.
2911
- */
2912
- readonly lastToggledRow: _angular_core.WritableSignal<T | null>;
2913
- readonly count: _angular_core.Signal<number>;
2914
- readonly pageSelectedCount: _angular_core.Signal<number>;
2915
- readonly isAllSelected: _angular_core.Signal<boolean>;
2916
- readonly isIndeterminate: _angular_core.Signal<boolean>;
2917
- /**
2918
- * Extends the selection from the last-toggled row (the anchor) to `endRow`,
2919
- * resolving positions by object identity against the currently paginated
2920
- * data. This is robust to grouping / sorting / filtering because we don't
2921
- * rely on numeric indices, and works across any visible page slice.
2922
- */
2923
- selectRowRangeToRow(endRow: T): void;
2924
- toggleRow(row: T): void;
2925
- isRowSelected(row: T): boolean;
2926
- selectAllPage(): void;
2927
- selectAll(): void;
2928
- deselectAll(): void;
2929
- deselectPage(): void;
2930
- toggleSelectAllPage(): void;
2931
- getSelectionEvent(): RowSelectionEvent<T>;
2932
- getRowId(row: T): unknown;
2933
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<RowSelectionEngine<any>, never>;
2934
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<RowSelectionEngine<any>>;
2935
- }
2936
-
2937
- /**
2938
- * Public types for the formula engine. These are the only symbols consumers
2939
- * of the grid need to interact with. The parser / evaluator / DAG live in
2940
- * `features/formula/` and expose the public surface through `FormulaEngine`.
2941
- *
2942
- * Shape overview:
2943
- * - `CellAddress` — stable (rowId, field) tuple.
2944
- * - `FormulaValue` — tagged union of numbers, strings, booleans, empty
2945
- * and errors. Errors propagate through operators.
2946
- * - `FormulaError` — Excel-compatible error codes + `#PARSE!`.
2947
- * - `FormulaFunction*` — registration shape for built-in + custom funcs.
2948
- * - `FormulaChange*` / `FormulaError*` — events emitted by the grid.
2949
- */
2950
- /** Stable cell identifier, resistant to sort/filter/pagination. */
2951
- interface CellAddress {
2952
- rowId: string | number;
2953
- field: string;
2954
- }
2955
- /** Excel-compatible error codes, plus mozaic-specific `#PARSE!`. */
2956
- type FormulaError = '#DIV/0!' | '#VALUE!' | '#REF!' | '#NAME?' | '#NUM!' | '#N/A' | '#CYCLE!' | '#PARSE!';
2957
- /**
2958
- * Tagged union for any value that can appear as a formula operand or result.
2959
- * `empty` represents a cell with no source value (distinct from the empty
2960
- * string) and coerces to 0 in arithmetic contexts, `""` in textual ones.
2961
- */
2962
- type FormulaValue = {
2963
- kind: 'number';
2964
- value: number;
2965
- } | {
2966
- kind: 'string';
2967
- value: string;
2968
- } | {
2969
- kind: 'boolean';
2970
- value: boolean;
2971
- } | {
2972
- kind: 'empty';
2973
- } | {
2974
- kind: 'error';
2975
- error: FormulaError;
2976
- };
2977
- /**
2978
- * Context passed to every function implementation. Keeps evaluation
2979
- * side-effect free: the engine owns the cell store and only exposes a
2980
- * `resolveRef` primitive. Range expansion is handled by the engine before
2981
- * the function is invoked, so implementations receive a flat value array.
2982
- */
2983
- interface FormulaEvalContext {
2984
- /** Current cell being evaluated (used for diagnostics only). */
2985
- readonly addr?: CellAddress;
2986
- /**
2987
- * Resolve a long-form reference. Returns `#REF!` when the target is
2988
- * missing (column removed, row deleted). The engine is responsible for
2989
- * cycle protection — functions must not worry about recursion.
2990
- */
2991
- resolveRef(target: CellAddress): FormulaValue;
2992
- /** Active locale, used by date/text helpers that are locale-aware. */
2993
- readonly locale: 'en' | 'fr';
2994
- }
2995
- /** Arity constraint for a function registration. */
2996
- type FormulaArity = number | 'variadic' | readonly [min: number, max: number];
2997
- /**
2998
- * Human-readable metadata shown in the autocomplete panel. When absent, the
2999
- * suggestion listing falls back to the function name only.
3000
- */
3001
- interface FormulaFunctionDocs {
3002
- /** Canonical signature string, e.g. `SUM(number1, [number2, ...])`. */
3003
- readonly signature: string;
3004
- /** One-line summary — displayed next to the signature in FR by default. */
3005
- readonly summary: string;
3006
- }
3007
- interface FormulaFunctionImpl {
3008
- /** Number of arguments accepted. */
3009
- readonly arity: FormulaArity;
3010
- /**
3011
- * Whether the function accepts a range argument (e.g. `SUM(A1:B3)`).
3012
- * When `true`, each range is flattened into the `args` array in
3013
- * row-major order. When `false`, passing a range yields `#VALUE!`.
3014
- *
3015
- * Defaults to `false`.
3016
- */
3017
- readonly acceptsRange?: boolean;
3018
- /** Optional documentation — consumed by the editor's autocomplete panel. */
3019
- readonly docs?: FormulaFunctionDocs;
3020
- /** Evaluate the function. Must be pure (no I/O, no mutation). */
3021
- evaluate(args: FormulaValue[], ctx: FormulaEvalContext): FormulaValue;
3022
- }
3023
- /** Lookup table of function name (uppercase) → implementation. */
3024
- type FormulaFunctionRegistry = Readonly<Record<string, FormulaFunctionImpl>>;
3025
- /**
3026
- * Source for storing formulas externally (instead of serialising the raw
3027
- * formula into the row's field). Mirror of AG-Grid's `formulaDataSource`.
3028
- */
3029
- interface FormulaDataSource {
3030
- getFormula(addr: CellAddress): string | undefined;
3031
- setFormula(addr: CellAddress, formula: string | undefined): void;
3032
- /** Optional bulk hydration — useful for persistence layers. */
3033
- hydrate?(entries: Iterable<{
3034
- addr: CellAddress;
3035
- formula: string;
3036
- }>): void;
3037
- }
3038
- interface FormulaChangeEvent {
3039
- addr: CellAddress;
3040
- /** Canonical long-form formula (references keyed by rowId/field). */
3041
- formula: string;
3042
- /** Last evaluated value after the change. */
3043
- evaluated: FormulaValue;
3044
- }
3045
- interface FormulaErrorEvent {
3046
- addr: CellAddress;
3047
- formula: string;
3048
- error: FormulaError;
3049
- }
3050
- /** Factory helpers for callers that prefer not to build literals by hand. */
3051
- declare const FormulaValues: {
3052
- readonly number: (value: number) => FormulaValue;
3053
- readonly string: (value: string) => FormulaValue;
3054
- readonly boolean: (value: boolean) => FormulaValue;
3055
- readonly empty: () => FormulaValue;
3056
- readonly error: (error: FormulaError) => FormulaValue;
3057
- };
3058
- /** Narrow a value to a number, following Excel coercion rules. */
3059
- declare function toNumber(v: FormulaValue): number | FormulaError;
3060
- /** Narrow a value to a string, following Excel coercion rules. */
3061
- declare function toStringValue(v: FormulaValue): string | FormulaError;
3062
- /** Narrow a value to a boolean, following Excel coercion rules. */
3063
- declare function toBoolean(v: FormulaValue): boolean | FormulaError;
3064
- /** Returns the first error found in the given values, or `null`. */
3065
- declare function firstError(values: readonly FormulaValue[]): FormulaError | null;
3066
-
3067
- /**
3068
- * Maps structured refs (A1-backed, field-keyed) to / from long-form
3069
- * `CellAddress` tuples, and converts formula *source strings* between the
3070
- * A1 edit surface and the `REF(COLUMN("…"),ROW(N))` storage form.
3071
- *
3072
- * The mapper is the only component aware of the grid's current column
3073
- * order — every other layer works exclusively with addresses, so reordering
3074
- * columns or renaming a field's display label never breaks a stored formula.
3075
- *
3076
- * Surface round-trip:
3077
- *
3078
- * Editor types → a1ToLongForm(ctx) → REF(COLUMN(…),ROW(…)) (stored)
3079
- * Stored REF long-form → longFormToA1(ctx) → A1 (displayed)
3080
- *
3081
- * The mapper is intentionally stateless and receives its dependencies
3082
- * (fields list + row id list) through the method parameters. This keeps
3083
- * it unit-testable without instantiating the whole grid.
3084
- */
3085
-
3086
- interface RefMapperContext {
3087
- /**
3088
- * Ordered list of column fields that can participate in formulas. Used
3089
- * for A1 letter ↔ field conversion and for existence checks (an unknown
3090
- * field yields `#REF!`).
3091
- */
3092
- readonly fields: readonly string[];
3093
- /**
3094
- * Row identifiers in display order. Index 0 = row `1` in the user-facing
3095
- * surface syntax. For grids in server mode, callers typically provide the
3096
- * *currently loaded* subset — unresolved references surface as `#REF!`
3097
- * which is the expected behaviour for page-scoped formulas.
3098
- */
3099
- readonly rowIds: readonly (string | number)[];
3100
- /**
3101
- * Row id of the formula being resolved. The editor-side A1 helpers use
3102
- * this to detect same-row refs (so the display can be relative by
3103
- * default).
3104
- */
3105
- readonly currentRowId?: string | number;
3106
- }
3107
- /** `(addr) → "A1"` using the current column order. */
3108
- declare function addressToA1(addr: CellAddress, ctx: RefMapperContext): string | undefined;
3109
-
3110
- /**
3111
- * `FormulaEngine` — grid-scoped service that owns every formula cell, the
3112
- * dependency DAG linking them, and the evaluator that turns stored
3113
- * formulas into `FormulaValue`s.
3114
- *
3115
- * Responsibilities (Phase 1):
3116
- * - Parse + resolve a raw formula when the user commits an edit.
3117
- * - Update the dependency graph and detect cycles (`#CYCLE!`).
3118
- * - Re-evaluate the mutated cell and every descendant in topological order.
3119
- * - Expose a `values` signal the grid renders against.
3120
- * - Provide an explicit `invalidate(addr)` so inline-edit can refresh
3121
- * dependents after a *non-formula* source cell changes — avoiding a
3122
- * blanket re-eval of the whole dataset.
3123
- *
3124
- * Out of scope (Phase ≥ 2):
3125
- * - Editor component + autocomplete (uses `longFormToA1` under the hood).
3126
- * - Clipboard / fill-handle rebasing of relative refs.
3127
- * - History integration (undo/redo of formula mutations).
3128
- */
3129
-
3130
- declare class FormulaEngine<T = unknown> {
3131
- private readonly state;
3132
- private readonly cells;
3133
- private readonly dag;
3134
- /** Last-evaluated values keyed by `rowId|field`. */
3135
- private readonly valuesSignal;
3136
- /** Function registry — consumers can replace via `setFunctions`. */
3137
- private functions;
3138
- /** Active locale for the parser/evaluator. */
3139
- private locale;
3140
- /** Snapshot of all evaluated formula values. Consumers read by key. */
3141
- readonly values: Signal<ReadonlyMap<string, FormulaValue>>;
3142
- /** Whether any formula is currently tracked. */
3143
- readonly hasAnyFormula: Signal<boolean>;
3144
- /**
3145
- * `true` when the user is currently editing a cell whose column has
3146
- * `allowFormula: true`. The grid's header uses this to surface the
3147
- * structured-ref column badges (`[price]`, `[qty]`, …) above each
3148
- * header, matching what the user types in their formula.
3149
- */
3150
- readonly isFormulaEditActive: Signal<boolean>;
3151
- /** Merge / replace the function registry (called once at grid init). */
3152
- setFunctions(functions: FormulaFunctionRegistry): void;
3153
- /** Read-only view of the current function registry — used by the editor's
3154
- * autocomplete panel to enumerate available names + their docs. */
3155
- getFunctions(): FormulaFunctionRegistry;
3156
- setLocale(locale: 'en' | 'fr'): void;
3157
- hasFormula(addr: CellAddress): boolean;
3158
- /** Raw formula string, or `undefined` when none is stored. */
3159
- getFormula(addr: CellAddress): string | undefined;
3160
- /** Last-evaluated value, or `undefined` when no formula is stored. */
3161
- valueAt(addr: CellAddress): FormulaValue | undefined;
3162
- /**
3163
- * Formula re-presented as A1 surface syntax for the current column /
3164
- * row order. Returns `undefined` when the cell has no formula. Used by
3165
- * the editor when opening a cell for edit.
3166
- */
3167
- displayFormula(addr: CellAddress): string | undefined;
3168
- /**
3169
- * Registers or updates a formula at `addr`. Returns the freshly-computed
3170
- * value. Invalid formulas are stored with their error as value so the
3171
- * grid can render `#PARSE!` / `#REF!` etc. instead of silently dropping.
3172
- */
3173
- set(addr: CellAddress, rawFormula: string): FormulaValue;
3174
- /** Removes the formula at `addr`. Descendants are re-evaluated. */
3175
- remove(addr: CellAddress): void;
3176
- /**
3177
- * Notifies the engine that a non-formula cell changed. Only dependents
3178
- * are re-evaluated — this is the hook used by `InlineEditEngine` after
3179
- * committing a plain value edit.
3180
- */
3181
- invalidate(addr: CellAddress): void;
3182
- /** Wipes every formula / value. */
3183
- clear(): void;
3184
- /**
3185
- * Reconciles the engine against `sourceData()`: any cell whose column
3186
- * declares `allowFormula: true` and whose value is a `=…` string is
3187
- * registered (or updated). Cells previously registered but no longer
3188
- * present (row removed, value changed to a literal) are dropped.
3189
- *
3190
- * Designed to be called from a grid-level effect tracking
3191
- * `(formulas, sourceData, columnDefMap)` so that formulas baked into
3192
- * the initial dataset are evaluated on first render — without it, the
3193
- * engine would only learn about a formula after the user committed an
3194
- * inline edit on it.
3195
- *
3196
- * The reconciliation is incremental: identical formula strings short-
3197
- * circuit (no re-parse, no re-eval) so the call is cheap on stable data.
3198
- */
3199
- syncFromSource(allowFormula: (field: string) => boolean): void;
3200
- /**
3201
- * Re-parses every stored formula so refs pick up the latest column
3202
- * order / row list. Called by the grid shell when visibility or row
3203
- * identity changes (reorder, filter flip, …).
3204
- */
3205
- rebuild(): void;
3206
- private refMapperContext;
3207
- private storeError;
3208
- /**
3209
- * Evaluate the given seeds and every descendant in topological order.
3210
- * Each node is first checked for cycle participation — any node inside
3211
- * a cycle reports `#CYCLE!` without attempting evaluation (which would
3212
- * recurse through the cached values and either spin or yield garbage).
3213
- */
3214
- private revalidateFrom;
3215
- private makeEvalContext;
3216
- /** Resolve a reference: formula cell → cached value, else source data. */
3217
- private resolveRef;
3218
- private readSourceValue;
3219
- private commitValues;
3220
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormulaEngine<any>, never>;
3221
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<FormulaEngine<any>>;
3222
- }
3223
-
3224
- interface GridPlugin {
3225
- name: string;
3226
- init(state: GridStateManager<never>): void;
3227
- destroy(): void;
3228
- }
3229
-
3230
- type GridToolbarSlot = 'start' | 'end';
3231
- declare class MozGridToolbarDef {
3232
- readonly slot: _angular_core.InputSignal<GridToolbarSlot>;
3233
- readonly template: TemplateRef<any>;
3234
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<MozGridToolbarDef, never>;
3235
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<MozGridToolbarDef, "[mozGridToolbarDef]", never, { "slot": { "alias": "mozGridToolbarDef"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3236
- }
3237
-
3238
- /**
3239
- * Discriminator for the empty-state context.
3240
- * - `no-data` : the source dataset is empty (no rows ever loaded).
3241
- * - `no-results` : the dataset is non-empty but the active filter / search
3242
- * produced zero rows.
3243
- *
3244
- * A template registered without an explicit kind defaults to `no-data` and
3245
- * is also used as the fallback when `no-results` has no dedicated template.
3246
- */
3247
- type GridEmptyKind = 'no-data' | 'no-results';
3248
- /**
3249
- * Marks a `<ng-template>` projected into `<moz-grid>` as the renderer for
3250
- * the empty state. Register one or two templates:
3251
- *
3252
- * ```html
3253
- * <moz-grid [data]="rows">
3254
- * <ng-template mozGridEmptyDef>
3255
- * <p>Aucune donnée pour le moment</p>
3256
- * </ng-template>
3257
- *
3258
- * <ng-template mozGridEmptyDef="no-results" let-ctx>
3259
- * <p>Aucun résultat pour vos filtres ({{ ctx.activeFilterCount }})</p>
3260
- * <button (click)="ctx.clearFilters()">Réinitialiser</button>
3261
- * </ng-template>
3262
- * </moz-grid>
3263
- * ```
3264
- *
3265
- * The implicit context (`let-ctx`) exposes `{ activeFilterCount, clearFilters }`.
3266
- */
3267
- declare class MozGridEmptyDef {
3268
- readonly kind: _angular_core.InputSignal<GridEmptyKind>;
3269
- readonly template: TemplateRef<GridEmptyContext>;
3270
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<MozGridEmptyDef, never>;
3271
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<MozGridEmptyDef, "[mozGridEmptyDef]", never, { "kind": { "alias": "mozGridEmptyDef"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3272
- }
3273
- /** Context object passed to a `mozGridEmptyDef` template. */
3274
- interface GridEmptyContext {
3275
- /** Number of active filter conditions; `0` when called with `no-data`. */
3276
- activeFilterCount: number;
3277
- /** Convenience callback to clear all filter conditions. */
3278
- clearFilters: () => void;
3279
- }
3280
-
3281
- declare class MozGridComponent<T = unknown> {
3282
- protected readonly state: GridStateManager<T>;
3283
- private readonly gridEngine;
3284
- private readonly sortEngine;
3285
- private readonly inlineEditEngine;
3286
- private readonly resizeEngine;
3287
- protected readonly rowSelectionEngine: RowSelectionEngine<T>;
3288
- private readonly cellSelectionEngine;
3289
- private readonly keyboardEngine;
3290
- private readonly clipboardEngine;
3291
- private readonly historyEngine;
3292
- private readonly groupEngine;
3293
- private readonly filterEngine;
3294
- protected readonly formulaEngine: FormulaEngine<T>;
3295
- private readonly refHighlight;
3296
- private readonly persistenceEngine;
3297
- private readonly exportEngine;
3298
- private readonly validationEngine;
3299
- private readonly verticalVirtualScrollEngine;
3300
- private readonly horizontalVirtualScrollEngine;
3301
- private readonly paginationEngine;
3302
- private readonly infiniteScrollEngine;
3303
- private readonly gridContainer;
3304
- private readonly ngZone;
3305
- private readonly destroyRef;
3306
- private readonly drawerService;
3307
- private readonly columnDefs;
3308
- private readonly toolbarDefs;
3309
- private readonly emptyDefs;
3310
- readonly data: _angular_core.InputSignal<T[]>;
3311
- readonly mode: _angular_core.InputSignal<"client" | "server">;
3312
- readonly filterMode: _angular_core.InputSignal<FilterMode>;
3313
- readonly totalItems: _angular_core.InputSignal<number>;
3314
- readonly pagination: _angular_core.InputSignal<boolean>;
3315
- readonly pageSize: _angular_core.InputSignal<number>;
3316
- readonly pageSizeOptions: _angular_core.InputSignal<number[]>;
3317
- readonly rowHeight: _angular_core.InputSignal<number>;
3318
- readonly loading: _angular_core.InputSignal<boolean>;
3319
- readonly rowSelection: _angular_core.InputSignal<boolean>;
3320
- readonly expandable: _angular_core.InputSignal<boolean>;
3321
- readonly rowIdField: _angular_core.InputSignal<string>;
3322
- /**
3323
- * Enables the spreadsheet-style formula engine. When `true`, any cell
3324
- * committed with a leading `=` in a column declaring `allowFormula: true`
3325
- * is routed to `FormulaEngine` and its evaluated value is rendered.
3326
- */
3327
- readonly formulas: _angular_core.InputSignal<boolean>;
3328
- readonly detailTemplate: _angular_core.InputSignal<TemplateRef<unknown> | null>;
3329
- readonly fullscreen: _angular_core.InputSignal<boolean>;
3330
- readonly reorderable: _angular_core.InputSignal<boolean>;
3331
- readonly stateKey: _angular_core.InputSignal<string | null>;
3332
- /** Title for the default "no data" empty state. */
3333
- readonly emptyDataTitle: _angular_core.InputSignal<string>;
3334
- /** Description for the default "no data" empty state. */
3335
- readonly emptyDataDescription: _angular_core.InputSignal<string>;
3336
- /** Title for the default "no results" empty state (active filters). */
3337
- readonly noResultsTitle: _angular_core.InputSignal<string>;
3338
- /** Description for the default "no results" empty state. */
3339
- readonly noResultsDescription: _angular_core.InputSignal<string>;
3340
- /** CTA label on the "no results" state. Empty disables the button. */
3341
- readonly noResultsActionLabel: _angular_core.InputSignal<string>;
3342
- readonly exportable: _angular_core.InputSignal<boolean>;
3343
- /**
3344
- * `'client'` (default): the grid builds and downloads the CSV itself.
3345
- * `'server'`: the grid emits `(exportRequest)` instead, leaving the consumer
3346
- * to perform the export (e.g. a back-end download).
3347
- */
3348
- readonly exportMode: _angular_core.InputSignal<"client" | "server">;
3349
- readonly showToolbar: _angular_core.InputSignal<boolean>;
3350
- readonly multiCellSelection: _angular_core.InputSignal<boolean>;
3351
- readonly horizontalVirtualScroll: _angular_core.InputSignal<boolean>;
3352
- readonly loadingStrategy: _angular_core.InputSignal<LoadingStrategy>;
3353
- readonly scrollThreshold: _angular_core.InputSignal<number>;
3354
- readonly plugins: _angular_core.InputSignal<GridPlugin[]>;
3355
- readonly sortChange: _angular_core.OutputEmitterRef<SortEvent>;
3356
- readonly pageChange: _angular_core.OutputEmitterRef<PageEvent>;
3357
- readonly loadMore: _angular_core.OutputEmitterRef<LoadMoreEvent>;
3358
- readonly cellEdit: _angular_core.OutputEmitterRef<CellEditEvent<T>>;
3359
- readonly cellEditCancel: _angular_core.OutputEmitterRef<CellEditCancelEvent>;
3360
- readonly selectionChange: _angular_core.OutputEmitterRef<RowSelectionEvent<T>>;
3361
- readonly cellSelectionChange: _angular_core.OutputEmitterRef<CellSelectionEvent<T>>;
3362
- readonly groupChange: _angular_core.OutputEmitterRef<GroupEvent>;
3363
- readonly filterChange: _angular_core.OutputEmitterRef<FilterEvent>;
3364
- readonly bulkEdit: _angular_core.OutputEmitterRef<BulkEditEvent>;
3365
- readonly bulkCopy: _angular_core.OutputEmitterRef<BulkCopyEvent>;
3366
- readonly bulkPaste: _angular_core.OutputEmitterRef<BulkPasteEvent>;
3367
- readonly bulkDelete: _angular_core.OutputEmitterRef<BulkDeleteEvent>;
3368
- readonly fillDown: _angular_core.OutputEmitterRef<FillDownEvent>;
3369
- readonly settingsChange: _angular_core.OutputEmitterRef<GridSettingsResult>;
3370
- /** Emitted when the toolbar export is triggered while `exportMode === 'server'`. */
3371
- readonly exportRequest: _angular_core.OutputEmitterRef<GridExportEvent>;
3372
- protected readonly isFullscreen: _angular_core.WritableSignal<boolean>;
3373
- protected readonly groupPanelOpen: _angular_core.WritableSignal<boolean>;
3374
- /**
3375
- * Mode controlling how the builder emits `filterChange`:
3376
- * - `auto` : each mutation triggers an event (default in `client` mode).
3377
- * - `manual` : only an explicit Apply emits (default in `server` mode).
3378
- */
3379
- readonly filterApplyMode: _angular_core.InputSignal<FilterApplyMode | null>;
3380
- protected readonly resolvedFilterApplyMode: _angular_core.Signal<FilterApplyMode>;
3381
- /** Display descriptors for the "FILTERED BY" tag bar. */
3382
- protected readonly activeFilters: _angular_core.Signal<ActiveFilter[]>;
3383
- protected readonly activeFilterCount: _angular_core.Signal<number>;
3384
- /**
3385
- * Kind of empty state to show, or `'none'` when rows are present:
3386
- * - `'no-data'` : no rows have been loaded (and the source is empty).
3387
- * - `'no-results'` : the source has rows but the active filters yield 0.
3388
- *
3389
- * Loading and infinite-scroll loading-more states are *not* treated as
3390
- * empty (we let the loading indicator drive the UX instead).
3391
- */
3392
- protected readonly emptyStateKind: _angular_core.Signal<"none" | GridEmptyKind>;
3393
- /** Resolves the projected `<ng-template mozGridEmptyDef>` for the kind. */
3394
- protected readonly emptyTemplate: _angular_core.Signal<TemplateRef<GridEmptyContext> | null>;
3395
- /** Context object exposed to projected empty-state templates. */
3396
- protected readonly emptyContext: _angular_core.Signal<GridEmptyContext>;
3397
- /**
3398
- * Wrap the empty context for `ngTemplateOutlet` so consumers can use
3399
- * either `let-ctx` (positional, via `$implicit`) or named bindings
3400
- * (`let-clearFilters="clearFilters"`) without having to choose at
3401
- * declaration time.
3402
- */
3403
- protected readonly emptyTemplateContext: _angular_core.Signal<{
3404
- activeFilterCount: number;
3405
- clearFilters: () => void;
3406
- $implicit: GridEmptyContext;
3407
- }>;
3408
- /** CTA label for the default no-results state — hidden when no filters. */
3409
- protected readonly resolvedNoResultsActionLabel: _angular_core.Signal<string>;
3410
- protected readonly hasHiddenColumns: _angular_core.Signal<boolean>;
3411
- protected readonly hiddenColumnsList: _angular_core.Signal<{
3412
- field: string;
3413
- label: string;
3414
- }[]>;
3415
- protected readonly toolbarStartDefs: _angular_core.Signal<MozGridToolbarDef[]>;
3416
- protected readonly toolbarEndDefs: _angular_core.Signal<MozGridToolbarDef[]>;
3417
- protected readonly selectionBannerVisible: _angular_core.Signal<boolean>;
3418
- protected readonly selectionTotalCount: _angular_core.Signal<number>;
3419
- protected readonly showPagination: _angular_core.Signal<boolean>;
3420
- protected readonly showInfiniteScrollLoader: _angular_core.Signal<boolean>;
3421
- /** Focused cell coord picked up by the formula bar — falls back to the
3422
- * selected cell so the bar stays populated after focus is lost (e.g.
3423
- * the user clicked outside to dismiss an overlay). */
3424
- private readonly formulaBarCoord;
3425
- /** Snapshot coord captured at edit entry — kept as a signal so the
3426
- * bar's address reads from it reactively and stays pinned to the
3427
- * original cell even when the user clicks elsewhere to pick refs. */
3428
- private readonly formulaBarActiveCoord;
3429
- /** A1 address (`A5`, `$A$5`) of the formula-bar target cell. While the
3430
- * bar is editing the address stays pinned to the snapshot so ref
3431
- * picking doesn't visually jump the label around. */
3432
- protected readonly formulaBarAddress: _angular_core.Signal<string>;
3433
- /** Formula source if the target cell holds one, otherwise the displayed
3434
- * value as a string. Mirrors Excel's formula-bar behaviour. */
3435
- protected readonly formulaBarContent: _angular_core.Signal<string>;
3436
- /** `true` while the user is editing in the formula bar (mounts the
3437
- * full-featured formula editor with ref highlights + autocomplete). */
3438
- protected readonly formulaBarEditing: _angular_core.WritableSignal<boolean>;
3439
- /** Live draft while the formula-bar input is focused. `null` means
3440
- * "not editing" and the input mirrors `formulaBarContent()`. */
3441
- protected readonly formulaBarDraft: _angular_core.WritableSignal<string | null>;
3442
- /** Snapshot of the cell targeted when the formula bar gained focus.
3443
- * Needed because blur fires *after* the click that moved the
3444
- * selection elsewhere — without this we'd commit into the new cell. */
3445
- private formulaBarEditSnapshot;
3446
- /** Value shown in the bar input — draft while editing, committed value otherwise. */
3447
- protected readonly formulaBarDisplay: _angular_core.Signal<string>;
3448
- /** Address of the cell the formula bar is editing (for `@row`
3449
- * highlighting inside the embedded editor). Reads from the snapshot
3450
- * so it stays stable while the user clicks other cells to pick refs. */
3451
- protected readonly formulaBarEditingAddr: _angular_core.Signal<CellAddress | null>;
3452
- /** `true` when the target cell sits in an editable column. */
3453
- protected readonly formulaBarEditable: _angular_core.Signal<boolean>;
3454
- private columnsInitialized;
3455
- private stateRestored;
3456
- private documentMouseUpHandler;
3457
- constructor();
3458
- onSortClick(event: {
3459
- field: string;
3460
- isMultiSort: boolean;
3461
- }): void;
3462
- onMenuAction(event: {
3463
- field: string;
3464
- actionId: HeaderMenuActionId;
3465
- }): void;
3466
- onCellEdit(event: CellEditEvent<unknown>): void;
3467
- onSelectAllToggle(): void;
3468
- onRowSelectionToggle(): void;
3469
- private activateRowSelectionMode;
3470
- onKeydown(event: KeyboardEvent): void;
3471
- private handleEditModeKeydown;
3472
- private commitFromEditMode;
3473
- private onCutShortcut;
3474
- private onUndo;
3475
- private onRedo;
3476
- private onFillDownShortcut;
3477
- private onFillRightShortcut;
3478
- private onStartEditShortcut;
3479
- private resetInfiniteScrollIfActive;
3480
- private refocusGrid;
3481
- onMouseUp(): void;
3482
- /**
3483
- * Shifts a formula's relative refs by the given (row, col) delta when the
3484
- * value is a formula string dropped on a new cell during a fill. Non-formula
3485
- * values are returned as-is so downstream code can still see the raw value.
3486
- */
3487
- private shiftFormulaForFill;
3488
- /**
3489
- * Maps a display row index (from displayRow.index) to the actual index in
3490
- * sourceData(). When grouping or sorting is active the display index doesn't
3491
- * match sourceData order, so we resolve via object identity.
3492
- */
3493
- private displayIndexToSourceIndex;
3494
- private applyFill;
3495
- private applyVerticalFill;
3496
- private applyHorizontalFill;
3497
- onGroupToggle(groupKey: string): void;
3498
- onRemoveGroup(field: string): void;
3499
- onToggleGroupSort(field: string): void;
3500
- onSelectAllRows(): void;
3501
- onClearSelection(): void;
3502
- /** Removes a single condition by id (tag "×" button). */
3503
- onRemoveFilter(id: string): void;
3504
- /** Clears the whole filter model ("Remove all" button). */
3505
- onRemoveAllFilters(): void;
3506
- onFiltersClick(): void;
3507
- onRestoreColumn(field: string): void;
3508
- toggleFullscreen(): void;
3509
- onRestoreAllColumns(): void;
3510
- getColumnLabel(field: string): string;
3511
- onResizeStart(event: {
3512
- field: string;
3513
- event: MouseEvent;
3514
- }): void;
3515
- onExportCsv(): void;
3516
- onGroupClick(): void;
3517
- private applyGroupResult;
3518
- onKeyboardShortcutsClick(): void;
3519
- /** Clicking the readonly preview flips the bar into edit mode: we mount
3520
- * the full formula editor on the next tick (it auto-focuses) and
3521
- * snapshot the target cell so blur-ordering races can't mis-route
3522
- * the commit to a different row. */
3523
- onFormulaBarInputFocus(): void;
3524
- onFormulaBarEditorChange(value: string): void;
3525
- onFormulaBarEditorCommit(): void;
3526
- onFormulaBarEditorCancel(): void;
3527
- /** Commit-on-outside-focus: when the user tabs or clicks truly away
3528
- * from the bar (not onto a grid cell — cells aren't focusable so they
3529
- * don't steal focus), persist the draft. */
3530
- onFormulaBarWrapperFocusout(event: FocusEvent): void;
3531
- private exitFormulaBarEdit;
3532
- private commitFormulaBar;
3533
- /**
3534
- * Convert a formula-bar A1 draft to REF long-form storage. Kept as a
3535
- * member so it can re-use the grid's reactive context without threading
3536
- * `fields` / `rowIds` through every caller.
3537
- */
3538
- private a1FormulaToStorage;
3539
- onFormulaReferenceClick(): void;
3540
- private static readonly DENSITY_ROW_HEIGHT;
3541
- onSettingsClick(): void;
3542
- private applySettings;
3543
- private freezeLeft;
3544
- private freezeRight;
3545
- private getRangeRowIds;
3546
- private getRangeFields;
3547
- private getRowSelectionIds;
3548
- private getAllVisibleFields;
3549
- /**
3550
- * Resolves a list of internal `HistoryCellChange` records into the public
3551
- * `BulkCellChange[]` shape exposed on bulk events. Looks up each row's
3552
- * configured id so consumers can persist changes without a second pass.
3553
- */
3554
- private toBulkCellChanges;
3555
- private clearSelectionAndCloseBar;
3556
- onBulkEdit(): void;
3557
- onBulkCopy(): void;
3558
- onBulkPaste(): Promise<void>;
3559
- onBulkExport(): void;
3560
- onBulkDelete(): void;
3561
- private extractRangeData;
3562
- private extractRowSelectionData;
3563
- private applyPasteToSelectedRows;
3564
- private deleteSelectedRows;
3565
- private coerceAndValidate;
3566
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<MozGridComponent<any>, never>;
3567
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MozGridComponent<any>, "moz-grid", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "filterMode": { "alias": "filterMode"; "required": false; "isSignal": true; }; "totalItems": { "alias": "totalItems"; "required": false; "isSignal": true; }; "pagination": { "alias": "pagination"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "rowHeight": { "alias": "rowHeight"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "rowSelection": { "alias": "rowSelection"; "required": false; "isSignal": true; }; "expandable": { "alias": "expandable"; "required": false; "isSignal": true; }; "rowIdField": { "alias": "rowIdField"; "required": false; "isSignal": true; }; "formulas": { "alias": "formulas"; "required": false; "isSignal": true; }; "detailTemplate": { "alias": "detailTemplate"; "required": false; "isSignal": true; }; "fullscreen": { "alias": "fullscreen"; "required": false; "isSignal": true; }; "reorderable": { "alias": "reorderable"; "required": false; "isSignal": true; }; "stateKey": { "alias": "stateKey"; "required": false; "isSignal": true; }; "emptyDataTitle": { "alias": "emptyDataTitle"; "required": false; "isSignal": true; }; "emptyDataDescription": { "alias": "emptyDataDescription"; "required": false; "isSignal": true; }; "noResultsTitle": { "alias": "noResultsTitle"; "required": false; "isSignal": true; }; "noResultsDescription": { "alias": "noResultsDescription"; "required": false; "isSignal": true; }; "noResultsActionLabel": { "alias": "noResultsActionLabel"; "required": false; "isSignal": true; }; "exportable": { "alias": "exportable"; "required": false; "isSignal": true; }; "exportMode": { "alias": "exportMode"; "required": false; "isSignal": true; }; "showToolbar": { "alias": "showToolbar"; "required": false; "isSignal": true; }; "multiCellSelection": { "alias": "multiCellSelection"; "required": false; "isSignal": true; }; "horizontalVirtualScroll": { "alias": "horizontalVirtualScroll"; "required": false; "isSignal": true; }; "loadingStrategy": { "alias": "loadingStrategy"; "required": false; "isSignal": true; }; "scrollThreshold": { "alias": "scrollThreshold"; "required": false; "isSignal": true; }; "plugins": { "alias": "plugins"; "required": false; "isSignal": true; }; "filterApplyMode": { "alias": "filterApplyMode"; "required": false; "isSignal": true; }; }, { "sortChange": "sortChange"; "pageChange": "pageChange"; "loadMore": "loadMore"; "cellEdit": "cellEdit"; "cellEditCancel": "cellEditCancel"; "selectionChange": "selectionChange"; "cellSelectionChange": "cellSelectionChange"; "groupChange": "groupChange"; "filterChange": "filterChange"; "bulkEdit": "bulkEdit"; "bulkCopy": "bulkCopy"; "bulkPaste": "bulkPaste"; "bulkDelete": "bulkDelete"; "fillDown": "fillDown"; "settingsChange": "settingsChange"; "exportRequest": "exportRequest"; }, ["columnDefs", "toolbarDefs", "emptyDefs"], ["[mozGridFilterTags]"], true, never>;
3568
- }
3569
-
3570
- interface GroupRow<T = unknown> {
3571
- type: 'group';
3572
- field: string;
3573
- value: unknown;
3574
- displayValue: string;
3575
- depth: number;
3576
- count: number;
3577
- expanded: boolean;
3578
- groupKey: string;
3579
- children: (GroupRow<T> | T)[];
3580
- parent: GroupRow<T> | null;
3581
- }
3582
- type DisplayRow<T = unknown> = {
3583
- type: 'data';
3584
- data: T;
3585
- index: number;
3586
- depth: number;
3587
- } | {
3588
- type: 'group';
3589
- group: GroupRow<T>;
3590
- } | {
3591
- type: 'detail';
3592
- data: T;
3593
- index: number;
3594
- };
3595
-
3596
- interface GridOptions<T = unknown> {
3597
- /** Data mode */
3598
- mode: 'client' | 'server';
3599
- /** Pagination */
3600
- pagination: boolean;
3601
- pageSize: number;
3602
- pageSizeOptions: number[];
3603
- /** Row height for virtual scroll (px) */
3604
- rowHeight: number;
3605
- /** Enable row checkbox selection */
3606
- rowSelection: boolean;
3607
- /** Selection mode */
3608
- selectionMode: 'single' | 'multiple';
3609
- /** Enable column grouping */
3610
- grouping: boolean;
3611
- /** Enable fullscreen toggle */
3612
- fullscreen: boolean;
3613
- /** Enable expandable rows */
3614
- expandableRows: boolean;
3615
- /** Enable column resize */
3616
- columnResize: boolean;
3617
- /** Enable column reorder */
3618
- columnReorder: boolean;
3619
- /** Show or hide the toolbar. Defaults to true. */
3620
- showToolbar?: boolean;
3621
- /** Enable multi-cell selection (click / drag range / keyboard navigation). Defaults to true. */
3622
- multiCellSelection?: boolean;
3623
- /** Track by function for virtual scroll */
3624
- trackBy: (index: number, item: T) => unknown;
3625
- }
3626
- declare const DEFAULT_GRID_OPTIONS: GridOptions;
3627
-
3628
- declare class MozGridColumnDef<T = unknown> {
3629
- readonly field: _angular_core.InputSignal<string>;
3630
- readonly headerName: _angular_core.InputSignal<string | undefined>;
3631
- readonly width: _angular_core.InputSignal<string | undefined>;
3632
- readonly minWidth: _angular_core.InputSignal<string | undefined>;
3633
- readonly maxWidth: _angular_core.InputSignal<string | undefined>;
3634
- readonly flex: _angular_core.InputSignal<number | undefined>;
3635
- readonly sortable: _angular_core.InputSignal<boolean>;
3636
- readonly resizable: _angular_core.InputSignal<boolean>;
3637
- readonly reorderable: _angular_core.InputSignal<boolean>;
3638
- readonly groupable: _angular_core.InputSignal<boolean>;
3639
- readonly filterable: _angular_core.InputSignal<boolean>;
3640
- readonly filterType: _angular_core.InputSignal<FilterDataType | undefined>;
3641
- readonly filterOperators: _angular_core.InputSignal<FilterOperator[] | undefined>;
3642
- readonly defaultFilterOperator: _angular_core.InputSignal<FilterOperator | undefined>;
3643
- readonly filterOptions: _angular_core.InputSignal<{
3644
- value: unknown;
3645
- label: string;
3646
- }[] | undefined>;
3647
- readonly filterComponent: _angular_core.InputSignal<Type<MozGridCustomFilter> | undefined>;
3648
- readonly filterIsComplete: _angular_core.InputSignal<((value: FilterValue) => boolean) | undefined>;
3649
- readonly filterPredicate: _angular_core.InputSignal<((row: unknown, value: FilterValue) => boolean) | undefined>;
3650
- readonly editable: _angular_core.InputSignal<boolean>;
3651
- readonly visible: _angular_core.InputSignal<boolean>;
3652
- readonly hideable: _angular_core.InputSignal<boolean>;
3653
- readonly freezable: _angular_core.InputSignal<boolean>;
3654
- readonly headerMenuDisabled: _angular_core.InputSignal<boolean>;
3655
- /**
3656
- * Mirrors `ColumnDef.allowFormula`. Required so the template binding
3657
- * `[allowFormula]="true"` is forwarded into the generated column def —
3658
- * without it, `FormulaEngine.syncFromSource` cannot detect this column
3659
- * and any baked-in `=…` value is rendered as a raw string.
3660
- */
3661
- readonly allowFormula: _angular_core.InputSignal<boolean>;
3662
- readonly pinned: _angular_core.InputSignal<"start" | "end" | null>;
3663
- readonly cellEditor: _angular_core.InputSignal<CellEditorType | undefined>;
3664
- readonly cellEditorOptions: _angular_core.InputSignal<MozSelectOption[] | undefined>;
3665
- readonly cellValidator: _angular_core.InputSignal<((value: unknown, row: unknown) => CellError | null) | undefined>;
3666
- readonly cellTemplateInput: _angular_core.InputSignal<TemplateRef<unknown> | null>;
3667
- readonly editTemplateInput: _angular_core.InputSignal<TemplateRef<unknown> | null>;
3668
- readonly filterTemplateInput: _angular_core.InputSignal<TemplateRef<unknown> | null>;
3669
- readonly cellTemplateContent: _angular_core.Signal<TemplateRef<unknown> | undefined>;
3670
- readonly editTemplateContent: _angular_core.Signal<TemplateRef<unknown> | undefined>;
3671
- readonly filterTemplateContent: _angular_core.Signal<TemplateRef<unknown> | undefined>;
3672
- toColumnDef(): ColumnDef<T>;
3673
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<MozGridColumnDef<any>, never>;
3674
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<MozGridColumnDef<any>, "moz-grid-column-def", never, { "field": { "alias": "field"; "required": true; "isSignal": true; }; "headerName": { "alias": "headerName"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "minWidth": { "alias": "minWidth"; "required": false; "isSignal": true; }; "maxWidth": { "alias": "maxWidth"; "required": false; "isSignal": true; }; "flex": { "alias": "flex"; "required": false; "isSignal": true; }; "sortable": { "alias": "sortable"; "required": false; "isSignal": true; }; "resizable": { "alias": "resizable"; "required": false; "isSignal": true; }; "reorderable": { "alias": "reorderable"; "required": false; "isSignal": true; }; "groupable": { "alias": "groupable"; "required": false; "isSignal": true; }; "filterable": { "alias": "filterable"; "required": false; "isSignal": true; }; "filterType": { "alias": "filterType"; "required": false; "isSignal": true; }; "filterOperators": { "alias": "filterOperators"; "required": false; "isSignal": true; }; "defaultFilterOperator": { "alias": "defaultFilterOperator"; "required": false; "isSignal": true; }; "filterOptions": { "alias": "filterOptions"; "required": false; "isSignal": true; }; "filterComponent": { "alias": "filterComponent"; "required": false; "isSignal": true; }; "filterIsComplete": { "alias": "filterIsComplete"; "required": false; "isSignal": true; }; "filterPredicate": { "alias": "filterPredicate"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "visible": { "alias": "visible"; "required": false; "isSignal": true; }; "hideable": { "alias": "hideable"; "required": false; "isSignal": true; }; "freezable": { "alias": "freezable"; "required": false; "isSignal": true; }; "headerMenuDisabled": { "alias": "headerMenuDisabled"; "required": false; "isSignal": true; }; "allowFormula": { "alias": "allowFormula"; "required": false; "isSignal": true; }; "pinned": { "alias": "pinned"; "required": false; "isSignal": true; }; "cellEditor": { "alias": "cellEditor"; "required": false; "isSignal": true; }; "cellEditorOptions": { "alias": "cellEditorOptions"; "required": false; "isSignal": true; }; "cellValidator": { "alias": "cellValidator"; "required": false; "isSignal": true; }; "cellTemplateInput": { "alias": "cellTemplate"; "required": false; "isSignal": true; }; "editTemplateInput": { "alias": "editTemplate"; "required": false; "isSignal": true; }; "filterTemplateInput": { "alias": "filterTemplate"; "required": false; "isSignal": true; }; }, {}, ["cellTemplateContent", "editTemplateContent", "filterTemplateContent"], never, true, never>;
3675
- }
3676
-
3677
- declare class GridEngine<T = unknown> {
3678
- private readonly state;
3679
- private readonly sortEngine;
3680
- private readonly filterEngine;
3681
- private readonly groupEngine;
3682
- /**
3683
- * Pipeline step 1: sorted data.
3684
- * In server mode, returns source data unchanged.
3685
- */
3686
- readonly sortedData: _angular_core.Signal<T[]>;
3687
- /**
3688
- * Pipeline step 2: filtered data.
3689
- * In server mode, returns sorted data unchanged.
3690
- */
3691
- readonly filteredData: _angular_core.Signal<T[]>;
3692
- /**
3693
- * Pipeline step 3: paginated data.
3694
- * In server mode, the data is already paginated by the server.
3695
- * In infinite-scroll mode, all accumulated data is displayed (no slice).
3696
- * Pagination applies before grouping so groups are per-page.
3697
- */
3698
- readonly paginatedData: _angular_core.Signal<T[]>;
3699
- /**
3700
- * Pipeline final: display rows (flat array for virtual scroll).
3701
- * If grouped, produces group header + data rows.
3702
- * If not grouped, wraps paginated data rows.
3703
- */
3704
- readonly displayRows: _angular_core.Signal<DisplayRow<T>[]>;
3705
- /**
3706
- * Total items count for pagination.
3707
- */
3708
- readonly computedTotalItems: _angular_core.Signal<number>;
3709
- /**
3710
- * Resolves a display row index (as emitted via `DisplayRow.index`) to the
3711
- * actual index in `sourceData()`. When sort/filter/group is active these do
3712
- * not match, so we look up the display row's data object and search for it
3713
- * in sourceData. Returns -1 when the display index is unknown.
3714
- */
3715
- displayIndexToSourceIndex(displayIndex: number): number;
3716
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<GridEngine<any>, never>;
3717
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<GridEngine<any>>;
3718
- }
3719
-
3720
- declare class SortEngine<T = unknown> {
3721
- private readonly state;
3722
- toggleSort(field: string, isMultiSort: boolean): void;
3723
- setSort(field: string, direction: SortDirection): void;
3724
- clearSort(): void;
3725
- sortData(data: T[]): T[];
3726
- private syncColumnSortState;
3727
- private getValue;
3728
- private defaultCompare;
3729
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<SortEngine<any>, never>;
3730
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<SortEngine<any>>;
3731
- }
3732
-
3733
- declare class ColumnResizeEngine<T = unknown> {
3734
- private readonly state;
3735
- private readonly ngZone;
3736
- private resizing;
3737
- private resizeField;
3738
- private startX;
3739
- private startWidth;
3740
- private invertDelta;
3741
- private readonly onMouseMove;
3742
- private readonly onMouseUp;
3743
- startResize(field: string, event: MouseEvent): void;
3744
- getResizeEvent(field: string, previousWidth: number): ColumnResizeEvent;
3745
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ColumnResizeEngine<any>, never>;
3746
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<ColumnResizeEngine<any>>;
3747
- }
3748
-
3749
- declare class InlineEditEngine<T = unknown> {
3750
- private readonly state;
3751
- private readonly history;
3752
- private readonly gridEngine;
3753
- private readonly formulaEngine;
3754
- startEdit(rowIndex: number, field: string): void;
3755
- /**
3756
- * Excel-style "typing-to-edit": starts the editor with the cell value replaced
3757
- * by the character the user just typed. For non-text editors (select / date /
3758
- * checkbox / number) we coerce: the character is kept if it's compatible with
3759
- * the editor, otherwise the editor opens on a cleared value.
3760
- */
3761
- startEditWithChar(rowIndex: number, field: string, char: string): void;
3762
- updateDraft(value: unknown): void;
3763
- commitEdit(): CellEditEvent<T> | null;
3764
- cancelEdit(): CellEditCancelEvent | null;
3765
- isEditing(rowIndex: number, colIndex: number): boolean;
3766
- /**
3767
- * Convert an A1-surface formula draft to REF long-form storage. Strings
3768
- * that do not start with `=` are returned untouched — callers should
3769
- * only invoke this on values they already know to be formulas.
3770
- */
3771
- private a1DraftToStorage;
3772
- resolveEditorType(field: string, value: unknown): CellEditorType;
3773
- /**
3774
- * Route a cell-edit commit through the formula engine when appropriate:
3775
- * - `allowFormula` column + new value starts with `=` → register formula.
3776
- * - `allowFormula` column + old value was a formula but new one isn't
3777
- * → remove the stored formula (reverts to a plain literal).
3778
- * - Any cell change → invalidate dependents so their cached value
3779
- * refreshes (no-op when the engine has zero dependents on this cell).
3780
- */
3781
- private updateFormulaEngine;
3782
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<InlineEditEngine<any>, never>;
3783
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<InlineEditEngine<any>>;
3784
- }
3785
-
3786
- declare class CellSelectionEngine<T = unknown> {
3787
- private readonly state;
3788
- focusCell(row: number, col: number, source?: 'click' | 'keyboard'): void;
3789
- clearFocus(): void;
3790
- isCellFocused(row: number, col: number): boolean;
3791
- isCellInRange(row: number, col: number): boolean;
3792
- selectRange(start: {
3793
- row: number;
3794
- col: number;
3795
- }, end: {
3796
- row: number;
3797
- col: number;
3798
- }): void;
3799
- startRangeSelection(row: number, col: number): void;
3800
- extendRange(row: number, col: number): void;
3801
- endRangeSelection(): void;
3802
- moveUp(): void;
3803
- moveDown(): void;
3804
- moveLeft(): void;
3805
- moveRight(): void;
3806
- moveToRowStart(): void;
3807
- moveToRowEnd(): void;
3808
- moveToGridStart(): void;
3809
- moveToGridEnd(): void;
3810
- /**
3811
- * Excel-style Ctrl+Arrow: jump to the edge of the current data block.
3812
- * If on an empty cell, jumps to the next non-empty cell. If on a filled
3813
- * cell, jumps to the last filled cell before the next empty transition
3814
- * (or to the grid edge if no empty cell is encountered).
3815
- */
3816
- jumpToEdge(direction: 'up' | 'down' | 'left' | 'right'): void;
3817
- movePage(direction: 'up' | 'down'): void;
3818
- extendRangeBy(dRow: number, dCol: number): void;
3819
- extendRangeToRowStart(): void;
3820
- extendRangeToRowEnd(): void;
3821
- extendRangeToGridStart(): void;
3822
- extendRangeToGridEnd(): void;
3823
- extendRangeJumpToEdge(direction: 'up' | 'down' | 'left' | 'right'): void;
3824
- extendRangeByPage(direction: 'up' | 'down'): void;
3825
- selectRow(row: number): void;
3826
- selectColumn(col: number): void;
3827
- selectAll(): void;
3828
- private pageBounds;
3829
- private pageRowStep;
3830
- private directionVector;
3831
- private inBounds;
3832
- private isCellFilled;
3833
- private findLastNonEmptyCol;
3834
- private edgeFromCell;
3835
- moveToNextEditableCell(): void;
3836
- startFill(row: number, col: number): void;
3837
- /**
3838
- * Extends the fill range. The dominant axis (the one with the largest delta
3839
- * from the anchor) wins: vertical if |dRow| >= |dCol|, otherwise horizontal.
3840
- * The fill is 1D — it's always locked to a single row or a single column.
3841
- */
3842
- extendFill(row: number, col: number): void;
3843
- endFill(): {
3844
- anchor: {
3845
- row: number;
3846
- col: number;
3847
- };
3848
- target: {
3849
- row: number;
3850
- col: number;
3851
- };
3852
- } | null;
3853
- cancelFill(): void;
3854
- isCellInFillRange(row: number, col: number): boolean;
3855
- /**
3856
- * During a horizontal fill, cells that sit inside the drag bounding box but
3857
- * belong to a non-editable column cannot receive the filled value. We expose
3858
- * them here so the view can paint a red dashed outline — a visual cue that
3859
- * the fill is skipping that column.
3860
- */
3861
- isCellInFillRejectRange(row: number, col: number): boolean;
3862
- private isColEditable;
3863
- /**
3864
- * Returns the effective editor type for a column index.
3865
- * Falls back to 'text' when no explicit cellEditor is defined.
3866
- */
3867
- private getColEditorType;
3868
- /**
3869
- * Checks whether the source column's editor type is compatible with the
3870
- * target column's editor type for a horizontal fill operation.
3871
- * text↔text, number↔number, select↔select, etc. — only same-type is allowed.
3872
- */
3873
- private isColTypeCompatible;
3874
- private moveBy;
3875
- getNormalizedRange(): CellRange | null;
3876
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<CellSelectionEngine<any>, never>;
3877
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<CellSelectionEngine<any>>;
3878
- }
3879
-
3880
- /**
3881
- * Actions that require grid-level orchestration (event emission, clipboard
3882
- * system access, async, UI refocus). The keyboard engine can run pure
3883
- * navigation locally, but bounces these back to the host component.
3884
- */
3885
- interface KeyboardActions {
3886
- copy: () => void;
3887
- paste: () => void;
3888
- cut: () => void;
3889
- deleteRange: () => void;
3890
- undo: () => void;
3891
- redo: () => void;
3892
- fillDown: () => void;
3893
- fillRight: () => void;
3894
- startEdit: (row: number, col: number, initialChar?: string) => void;
3895
- }
3896
- declare class KeyboardEngine<T = unknown> {
3897
- private readonly cellSelection;
3898
- private readonly inlineEdit;
3899
- private readonly state;
3900
- private actions;
3901
- registerActions(actions: KeyboardActions): void;
3902
- handleKeydown(event: KeyboardEvent): void;
3903
- /** Returns true when the event was handled (so the caller should preventDefault). */
3904
- private dispatch;
3905
- private handleArrow;
3906
- /**
3907
- * A key press is "printable" when it represents exactly one character that
3908
- * the user intends as input — excluding named keys like F1, Home, Arrow*,
3909
- * etc. Also excludes IME composition events (event.isComposing).
3910
- */
3911
- private isPrintableKey;
3912
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<KeyboardEngine<any>, never>;
3913
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<KeyboardEngine<any>>;
3914
- }
3915
-
3916
- declare class GroupEngine<T = unknown> {
3917
- private readonly state;
3918
- addGroup(field: string): void;
3919
- removeGroup(field: string): void;
3920
- applyGroups(groups: GroupEntry[]): void;
3921
- clearGroups(): void;
3922
- toggleGroupExpand(groupKey: string): void;
3923
- isGroupExpanded(groupKey: string): boolean;
3924
- groupData(data: T[]): DisplayRow<T>[];
3925
- private buildGroups;
3926
- private flattenGroups;
3927
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<GroupEngine<any>, never>;
3928
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<GroupEngine<any>>;
3929
- }
3930
-
3931
- declare class FilterEngine<T = unknown> {
3932
- private readonly state;
3933
- /** Latest mutation, used by the grid shell to emit `filterChange` once. */
3934
- private readonly lastChange;
3935
- readonly conditions: Signal<FilterCondition[]>;
3936
- readonly hasActiveFilters: Signal<boolean>;
3937
- readonly lastEvent: Signal<FilterEvent | null>;
3938
- /** Replaces the whole model in one go. Used by the drawer's Apply button. */
3939
- setModel(model: FilterModel, reason?: FilterChangeReason): void;
3940
- addCondition(condition: FilterCondition): void;
3941
- updateCondition(id: string, patch: Partial<FilterCondition>): void;
3942
- removeCondition(id: string): void;
3943
- reorderConditions(fromIndex: number, toIndex: number): void;
3944
- clearAll(): void;
3945
- /** Convenience: drop all conditions that target a given field. */
3946
- removeByField(field: string): void;
3947
- /**
3948
- * Drops conditions whose value is not yet complete. Called when a filter
3949
- * builder is dismissed: a row the user added but never filled in must not
3950
- * linger in the model as a phantom active filter.
3951
- */
3952
- dropIncompleteConditions(): void;
3953
- /**
3954
- * Evaluates the current model against the provided data.
3955
- * In `server` filterMode the grid delegates filtering to the consumer — returns input as-is.
3956
- */
3957
- filterData(data: T[]): T[];
3958
- private isComplete;
3959
- private matchRow;
3960
- /** Returns a human-readable label for a condition ("Status equals En stock"). */
3961
- toLabel(condition: FilterCondition): string;
3962
- /** Returns the filter data type inferred for a column. */
3963
- getFilterType(field: string): FilterDataType;
3964
- /**
3965
- * Builds the column descriptors consumed by the filter builder UI.
3966
- *
3967
- * All `filterable` columns are included, even those that ship a custom
3968
- * `filterTemplate`. The custom template drives the inline header filter
3969
- * row (quick per-column UI), while the builder — rendered in the toolbar
3970
- * drawer and in the column-menu overlay — always uses the generic editors.
3971
- * The two mechanisms are complementary and can coexist on the same column.
3972
- */
3973
- describeFilterableColumns(): FilterColumnDescriptor[];
3974
- describeColumn(def: ColumnDef<T>): FilterColumnDescriptor;
3975
- /** Factory for new conditions created by the UI. */
3976
- makeCondition(field: string, isFirst: boolean, overrides?: Partial<FilterCondition>): FilterCondition;
3977
- private notify;
3978
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<FilterEngine<any>, never>;
3979
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<FilterEngine<any>>;
3980
- }
3981
-
3982
- declare class ColumnReorderEngine<T = unknown> {
3983
- private readonly state;
3984
- reorder(previousIndex: number, newIndex: number): void;
3985
- /**
3986
- * Reorder using indices relative to unpinned columns only.
3987
- * Translates to global columnStates indices before applying.
3988
- */
3989
- reorderUnpinned(unpinnedPrevIndex: number, unpinnedNewIndex: number): void;
3990
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ColumnReorderEngine<any>, never>;
3991
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<ColumnReorderEngine<any>>;
3992
- }
3993
-
3994
- declare class ExpandableRowEngine<T = unknown> {
3995
- private readonly state;
3996
- readonly hasExpandedRows: _angular_core.Signal<boolean>;
3997
- toggleRow(rowId: unknown): void;
3998
- expandRow(rowId: unknown): void;
3999
- collapseRow(rowId: unknown): void;
4000
- collapseAll(): void;
4001
- isRowExpanded(rowId: unknown): boolean;
4002
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ExpandableRowEngine<any>, never>;
4003
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<ExpandableRowEngine<any>>;
4004
- }
4005
-
4006
- interface PersistedGridState {
4007
- columns: Array<{
4008
- field: string;
4009
- currentWidth: number;
4010
- order: number;
4011
- visible: boolean;
4012
- pinned: 'start' | 'end' | null;
4013
- }>;
4014
- sorts: SortDef[];
4015
- /** Serialised filter conditions. `id` is regenerated on restore. */
4016
- filters?: Array<Omit<FilterCondition, 'id'>>;
4017
- }
4018
- declare class StatePersistenceEngine<T = unknown> {
4019
- private readonly state;
4020
- save(storageKey: string): void;
4021
- restore(storageKey: string): boolean;
4022
- clear(storageKey: string): void;
4023
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatePersistenceEngine<any>, never>;
4024
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<StatePersistenceEngine<any>>;
4025
- }
4026
-
4027
- interface ExportOptions {
4028
- filename?: string;
4029
- separator?: string;
4030
- includeHeaders?: boolean;
4031
- columns?: string[];
4032
- }
4033
- declare class ExportEngine<T = unknown> {
4034
- private readonly state;
4035
- exportCsv(data: T[], options?: ExportOptions): void;
4036
- exportJson(data: T[], options?: {
4037
- filename?: string;
4038
- columns?: string[];
4039
- }): void;
4040
- private escapeCsvValue;
4041
- private downloadFile;
4042
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ExportEngine<any>, never>;
4043
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<ExportEngine<any>>;
4044
- }
4045
-
4046
- interface TreeNodeConfig {
4047
- childrenField: string;
4048
- hasChildrenField?: string;
4049
- expandedByDefault?: boolean;
4050
- }
4051
- interface TreeDisplayRow<T = unknown> {
4052
- type: 'data';
4053
- data: T;
4054
- index: number;
4055
- depth: number;
4056
- hasChildren: boolean;
4057
- expanded: boolean;
4058
- nodeKey: string;
4059
- }
4060
- declare class TreeEngine<T = unknown> {
4061
- private readonly state;
4062
- flatten(data: T[], config: TreeNodeConfig, expandedNodes: Set<string>, idField: string): TreeDisplayRow<T>[];
4063
- toggleNode(nodeKey: string): void;
4064
- expandAll(data: T[], config: TreeNodeConfig, idField: string): void;
4065
- collapseAll(): void;
4066
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<TreeEngine<any>, never>;
4067
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<TreeEngine<any>>;
4068
- }
4069
-
4070
- declare class CellValidationEngine<T = unknown> {
4071
- private readonly state;
4072
- /** Map<"rowIndex:field", CellError> */
4073
- readonly cellErrors: _angular_core.WritableSignal<Map<string, CellError>>;
4074
- /** Number of cells currently in error */
4075
- readonly errorCount: _angular_core.Signal<number>;
4076
- /** Revalidate all cells for the given data slice */
4077
- validateAll(data: T[]): void;
4078
- /** Revalidate a single cell */
4079
- validateCell(rowIndex: number, field: string, value: unknown, row: T): void;
4080
- /** Get the error for a specific cell, or null */
4081
- getCellError(rowIndex: number, field: string): CellError | null;
4082
- /** Check if a specific cell has an error */
4083
- hasCellError(rowIndex: number, field: string): boolean;
4084
- /** Clear all errors */
4085
- clearAll(): void;
4086
- private removeCellError;
4087
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<CellValidationEngine<any>, never>;
4088
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<CellValidationEngine<any>>;
4089
- }
4090
-
4091
- declare class HorizontalVirtualScrollEngine<T = unknown> {
4092
- private readonly state;
4093
- /** Cumulative left offsets of unpinned columns. Length = unpinnedColumns.length + 1. */
4094
- private offsets;
4095
- constructor();
4096
- /** Called by grid.ts when the body viewport scrolls or resizes. */
4097
- onScroll(scrollLeft: number, viewportWidth: number): void;
4098
- rebuildOffsets(): void;
4099
- private recompute;
4100
- /** Binary search: returns the largest index i such that offsets[i] <= x. */
4101
- private findIndexAt;
4102
- private fullRange;
4103
- private setRange;
4104
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<HorizontalVirtualScrollEngine<any>, never>;
4105
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<HorizontalVirtualScrollEngine<any>>;
4106
- }
4107
-
4108
- declare class PaginationEngine<T = unknown> {
4109
- private readonly state;
4110
- readonly totalPages: _angular_core.Signal<number>;
4111
- readonly currentPage: _angular_core.Signal<number>;
4112
- readonly startItem: _angular_core.Signal<number>;
4113
- readonly endItem: _angular_core.Signal<number>;
4114
- readonly isFirstPage: _angular_core.Signal<boolean>;
4115
- readonly isLastPage: _angular_core.Signal<boolean>;
4116
- private readonly computedTotal;
4117
- goToPage(pageIndex: number): void;
4118
- nextPage(): void;
4119
- previousPage(): void;
4120
- setPageSize(size: number): void;
4121
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<PaginationEngine<any>, never>;
4122
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<PaginationEngine<any>>;
4123
- }
4124
-
4125
- declare class InfiniteScrollEngine<T = unknown> {
4126
- private readonly state;
4127
- private readonly destroyRef;
4128
- private readonly ngZone;
4129
- private scrollListener;
4130
- private scrollElement;
4131
- private loadMoreCallback;
4132
- readonly scrollThreshold: _angular_core.WritableSignal<number>;
4133
- readonly hasMore: _angular_core.Signal<boolean>;
4134
- readonly isActive: _angular_core.Signal<boolean>;
4135
- attach(scrollElement: HTMLElement, onLoadMore: (event: LoadMoreEvent) => void): void;
4136
- detach(): void;
4137
- private checkScrollPosition;
4138
- /**
4139
- * Reset scroll state — called when sort/filter changes require
4140
- * reloading from offset 0.
4141
- */
4142
- reset(onLoadMore: (event: LoadMoreEvent) => void): void;
4143
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<InfiniteScrollEngine<any>, never>;
4144
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<InfiniteScrollEngine<any>>;
4145
- }
4146
-
4147
- /**
4148
- * Default registry of formula functions (Phase 1 scope).
4149
- *
4150
- * Implementations are intentionally compact and reuse the coercion helpers
4151
- * in `models/formula.model.ts`. Each entry is pure, side-effect free and
4152
- * returns a `FormulaValue` — errors are data, never exceptions.
4153
- *
4154
- * Naming: keys are uppercase; the parser uppercases every identifier before
4155
- * dispatch so consumers can write `sum(a, b)` or `SUM(a,b)` interchangeably.
4156
- */
4157
-
4158
- /**
4159
- * Default function registry. Consumers can spread this into their own
4160
- * registry to extend it:
4161
- *
4162
- * ```
4163
- * const registry = { ...DEFAULT_FORMULA_FUNCTIONS, TVA: myTvaFn };
4164
- * ```
4165
- */
4166
- declare const DEFAULT_FORMULA_FUNCTIONS: FormulaFunctionRegistry;
4167
-
4168
- declare function trackDisplayRow<T>(_index: number, row: DisplayRow<T>): string;
4169
- declare function trackByField(_index: number, col: {
4170
- field: string;
4171
- }): string;
4172
-
4173
- declare class MozGridHeaderComponent {
4174
- protected readonly state: GridStateManager<any>;
4175
- protected readonly rowSelection: RowSelectionEngine<any>;
4176
- private readonly dragEngine;
4177
- protected readonly trackByField: typeof trackByField;
4178
- readonly headerCenter: _angular_core.Signal<ElementRef<HTMLElement> | undefined>;
4179
- readonly showCheckbox: _angular_core.InputSignal<boolean>;
4180
- readonly showExpand: _angular_core.InputSignal<boolean>;
4181
- readonly reorderable: _angular_core.InputSignal<boolean>;
4182
- readonly sortClick: _angular_core.OutputEmitterRef<{
4183
- field: string;
4184
- isMultiSort: boolean;
4185
- }>;
4186
- readonly menuAction: _angular_core.OutputEmitterRef<{
4187
- field: string;
4188
- actionId: HeaderMenuActionId;
4189
- }>;
4190
- readonly resizeStart: _angular_core.OutputEmitterRef<{
4191
- field: string;
4192
- event: MouseEvent;
4193
- }>;
4194
- readonly selectAllToggle: _angular_core.OutputEmitterRef<void>;
4195
- readonly columnReorder: _angular_core.OutputEmitterRef<{
4196
- previousIndex: number;
4197
- currentIndex: number;
4198
- }>;
4199
- constructor();
4200
- protected readonly utilityLeftWidth: _angular_core.Signal<number>;
4201
- protected readonly rowMinWidth: _angular_core.Signal<number>;
4202
- protected readonly hasFilterRow: _angular_core.Signal<boolean>;
4203
- getFilterTemplate(field: string): TemplateRef<unknown> | null;
4204
- onSelectAllClick(event: Event): void;
4205
- onDragStart(event: MouseEvent, unpinnedIndex: number): void;
4206
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<MozGridHeaderComponent, never>;
4207
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MozGridHeaderComponent, "moz-grid-header", never, { "showCheckbox": { "alias": "showCheckbox"; "required": false; "isSignal": true; }; "showExpand": { "alias": "showExpand"; "required": false; "isSignal": true; }; "reorderable": { "alias": "reorderable"; "required": false; "isSignal": true; }; }, { "sortClick": "sortClick"; "menuAction": "menuAction"; "resizeStart": "resizeStart"; "selectAllToggle": "selectAllToggle"; "columnReorder": "columnReorder"; }, never, never, true, never>;
4208
- }
4209
-
4210
- /**
4211
- * Programmatically opens a CDK overlay anchored on the host element that
4212
- * renders the filter builder. Unlike the action-listbox directive, the
4213
- * overlay does not toggle on click — the host is simply the anchor. Open
4214
- * the overlay by injecting this directive via a template ref (`#filter`)
4215
- * and calling `filter.open(options)`.
4216
- */
4217
- declare class MozGridFilterOverlayDirective implements OnDestroy {
4218
- private readonly overlay;
4219
- private readonly host;
4220
- private readonly injector;
4221
- private readonly engine;
4222
- private overlayRef;
4223
- private componentRef;
4224
- /** Opens the overlay anchored on the host. No-op if already open. */
4225
- open(options: {
4226
- columns: FilterColumnDescriptor[];
4227
- model: FilterModel;
4228
- /** Optional pre-selected column to seed a new condition. */
4229
- seedField?: string;
4230
- onChange: (model: FilterModel) => void;
4231
- }): void;
4232
- close(): void;
4233
- ngOnDestroy(): void;
4234
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<MozGridFilterOverlayDirective, never>;
4235
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<MozGridFilterOverlayDirective, "[mozGridFilterOverlay]", ["mozGridFilterOverlay"], {}, {}, never, never, true, never>;
4236
- }
4237
-
4238
- declare class MozGridHeaderCellComponent<T = unknown> {
4239
- private readonly state;
4240
- private readonly filterEngine;
4241
- /** Optional — only present when the grid provides `FormulaEngine`. */
4242
- private readonly formulaEngine;
4243
- readonly columnState: _angular_core.InputSignal<ColumnStateEntry>;
4244
- readonly def: _angular_core.InputSignal<ColumnDef<T>>;
4245
- readonly isLast: _angular_core.InputSignal<boolean>;
4246
- readonly pinnedEnd: _angular_core.InputSignal<boolean>;
4247
- readonly reorderable: _angular_core.InputSignal<boolean>;
4248
- /** When set, applies `position: sticky` with the given side. */
4249
- readonly pinnedSticky: _angular_core.InputSignal<"left" | "right" | null>;
4250
- /** Pixel offset for `left` (left-pinned) or `right` (right-pinned). */
4251
- readonly pinnedOffset: _angular_core.InputSignal<number>;
4252
- /** Visual edge of the pinned section — drives the separation shadow. */
4253
- readonly pinnedEdge: _angular_core.InputSignal<"left" | "right" | null>;
4254
- protected readonly filterOverlay: _angular_core.Signal<MozGridFilterOverlayDirective | undefined>;
4255
- /** True when at least one active condition targets this column. */
4256
- readonly hasActiveFilter: _angular_core.Signal<boolean>;
4257
- /** Tooltip for the gear / filter button (count + short summary). */
4258
- readonly filterTooltip: _angular_core.Signal<string>;
4259
- readonly resolvedMinWidth: _angular_core.Signal<number>;
4260
- readonly isDragging: _angular_core.Signal<boolean>;
4261
- readonly sortClick: _angular_core.OutputEmitterRef<{
4262
- field: string;
4263
- isMultiSort: boolean;
4264
- }>;
4265
- readonly menuAction: _angular_core.OutputEmitterRef<{
4266
- field: string;
4267
- actionId: HeaderMenuActionId;
4268
- }>;
4269
- readonly resizeStart: _angular_core.OutputEmitterRef<MouseEvent>;
4270
- readonly label: _angular_core.Signal<string>;
4271
- /**
4272
- * Spreadsheet-style column letter (`A`, `B`, …, `AA`, `AB`, …) matching
4273
- * this column's position in the visible column order. Shown above each
4274
- * header while a formula is being edited so the user sees exactly what
4275
- * letter to type to reference a cell in this column.
4276
- */
4277
- readonly columnLetter: _angular_core.Signal<string>;
4278
- /**
4279
- * `true` when the user is editing a formula-capable cell. The header
4280
- * uses this to show the column-letter badge — a visual cue matching the
4281
- * A1 references the user types in the formula bar.
4282
- */
4283
- readonly showColumnLetter: _angular_core.Signal<boolean>;
4284
- readonly menuItems: _angular_core.Signal<MozActionListItem[]>;
4285
- onHeaderClick(event: MouseEvent): void;
4286
- onMenuItemClick(item: MozActionListItem): void;
4287
- private openFilterOverlay;
4288
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<MozGridHeaderCellComponent<any>, never>;
4289
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MozGridHeaderCellComponent<any>, "moz-grid-header-cell", never, { "columnState": { "alias": "columnState"; "required": true; "isSignal": true; }; "def": { "alias": "def"; "required": true; "isSignal": true; }; "isLast": { "alias": "isLast"; "required": false; "isSignal": true; }; "pinnedEnd": { "alias": "pinnedEnd"; "required": false; "isSignal": true; }; "reorderable": { "alias": "reorderable"; "required": false; "isSignal": true; }; "pinnedSticky": { "alias": "pinnedSticky"; "required": false; "isSignal": true; }; "pinnedOffset": { "alias": "pinnedOffset"; "required": false; "isSignal": true; }; "pinnedEdge": { "alias": "pinnedEdge"; "required": false; "isSignal": true; }; }, { "sortClick": "sortClick"; "menuAction": "menuAction"; "resizeStart": "resizeStart"; }, never, never, true, never>;
4290
- }
4291
-
4292
- declare class MozGridBodyComponent {
4293
- protected readonly state: GridStateManager<any>;
4294
- protected readonly engine: GridEngine<any>;
4295
- private readonly expandableEngine;
4296
- private readonly verticalEngine;
4297
- readonly bodyContainer: _angular_core.Signal<ElementRef<HTMLElement> | undefined>;
4298
- private readonly rowEls;
4299
- readonly showCheckbox: _angular_core.InputSignal<boolean>;
4300
- readonly showExpand: _angular_core.InputSignal<boolean>;
4301
- readonly detailTemplate: _angular_core.InputSignal<TemplateRef<unknown> | null>;
4302
- readonly cellEdit: _angular_core.OutputEmitterRef<CellEditEvent<unknown>>;
4303
- readonly cellEditCancel: _angular_core.OutputEmitterRef<CellEditCancelEvent>;
4304
- readonly rowSelectionToggle: _angular_core.OutputEmitterRef<void>;
4305
- readonly groupToggle: _angular_core.OutputEmitterRef<string>;
4306
- /** Width consumed by sticky utility cells before the first pinned-left
4307
- * column — must match `MozGridRowComponent.utilityLeftWidth()` so the
4308
- * detail/group rows align with the data row layout. */
4309
- protected readonly utilityLeftWidth: _angular_core.Signal<number>;
4310
- /** Number of skeleton rows shown while loading — match page size, max 20. */
4311
- protected readonly skeletonRows: _angular_core.Signal<number[]>;
4312
- /** Concrete display-row indices to render this frame. */
4313
- protected readonly visibleIndices: _angular_core.Signal<number[]>;
4314
- protected isRowExpanded(data: unknown): boolean;
4315
- private resizeObserver;
4316
- constructor();
4317
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<MozGridBodyComponent, never>;
4318
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MozGridBodyComponent, "moz-grid-body", never, { "showCheckbox": { "alias": "showCheckbox"; "required": false; "isSignal": true; }; "showExpand": { "alias": "showExpand"; "required": false; "isSignal": true; }; "detailTemplate": { "alias": "detailTemplate"; "required": false; "isSignal": true; }; }, { "cellEdit": "cellEdit"; "cellEditCancel": "cellEditCancel"; "rowSelectionToggle": "rowSelectionToggle"; "groupToggle": "groupToggle"; }, never, never, true, never>;
4319
- }
4320
-
4321
- declare class MozGridRowComponent<T = unknown> {
4322
- protected readonly state: GridStateManager<any>;
4323
- private readonly inlineEdit;
4324
- private readonly rowSelection;
4325
- private readonly expandableEngine;
4326
- private readonly elRef;
4327
- protected readonly trackByField: typeof trackByField;
4328
- readonly row: _angular_core.InputSignal<T>;
4329
- readonly rowIndex: _angular_core.InputSignal<number>;
4330
- readonly showCheckbox: _angular_core.InputSignal<boolean>;
4331
- readonly showExpand: _angular_core.InputSignal<boolean>;
4332
- readonly cellEdit: _angular_core.OutputEmitterRef<{
4333
- row: T;
4334
- rowIndex: number;
4335
- field: string;
4336
- oldValue: unknown;
4337
- newValue: unknown;
4338
- }>;
4339
- readonly cellEditCancel: _angular_core.OutputEmitterRef<{
4340
- rowIndex: number;
4341
- field: string;
4342
- originalValue: unknown;
4343
- }>;
4344
- readonly rowSelectionToggle: _angular_core.OutputEmitterRef<void>;
4345
- readonly isSelected: _angular_core.Signal<boolean>;
4346
- readonly isExpanded: _angular_core.Signal<boolean>;
4347
- /** Width consumed by sticky utility cells before the first pinned-left
4348
- * column (expand button + checkbox). */
4349
- protected readonly utilityLeftWidth: _angular_core.Signal<number>;
4350
- onExpandClick(event: Event): void;
4351
- onCheckboxClick(event: MouseEvent): void;
4352
- onCommitEdit(): void;
4353
- onCancelEdit(): void;
4354
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<MozGridRowComponent<any>, never>;
4355
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MozGridRowComponent<any>, "moz-grid-row", never, { "row": { "alias": "row"; "required": true; "isSignal": true; }; "rowIndex": { "alias": "rowIndex"; "required": true; "isSignal": true; }; "showCheckbox": { "alias": "showCheckbox"; "required": false; "isSignal": true; }; "showExpand": { "alias": "showExpand"; "required": false; "isSignal": true; }; }, { "cellEdit": "cellEdit"; "cellEditCancel": "cellEditCancel"; "rowSelectionToggle": "rowSelectionToggle"; }, never, never, true, never>;
4356
- }
4357
-
4358
- declare class MozGridCellComponent<T = unknown> {
4359
- private readonly state;
4360
- private readonly inlineEdit;
4361
- private readonly cellSelectionEngine;
4362
- private readonly validationEngine;
4363
- private readonly clipboard;
4364
- private readonly gridEngine;
4365
- /** Optional: present only when the grid provides `FormulaEngine`. */
4366
- private readonly formulaEngine;
4367
- private readonly refHighlight;
4368
- private readonly elRef;
4369
- constructor();
4370
- private focusEditor;
4371
- readonly row: _angular_core.InputSignal<T>;
4372
- readonly rowIndex: _angular_core.InputSignal<number>;
4373
- readonly colIndex: _angular_core.InputSignal<number>;
4374
- readonly colState: _angular_core.InputSignal<ColumnStateEntry>;
4375
- readonly def: _angular_core.InputSignal<ColumnDef<T>>;
4376
- readonly isLast: _angular_core.InputSignal<boolean>;
4377
- readonly pinnedEnd: _angular_core.InputSignal<boolean>;
4378
- /** When set, applies `position: sticky` with the given side; the offset is
4379
- * read from `pinnedOffset()`. */
4380
- readonly pinnedSticky: _angular_core.InputSignal<"left" | "right" | null>;
4381
- /** Pixel offset applied to `left` (when `pinnedSticky === 'left'`) or
4382
- * `right` (when `'right'`). */
4383
- readonly pinnedOffset: _angular_core.InputSignal<number>;
4384
- /** Marks the cell at the visual edge of its pinned section so it can paint
4385
- * the shadow that separates frozen columns from the scrollable area. */
4386
- readonly pinnedEdge: _angular_core.InputSignal<"left" | "right" | null>;
4387
- readonly resolvedMinWidth: _angular_core.Signal<number>;
4388
- readonly commitEdit: _angular_core.OutputEmitterRef<void>;
4389
- readonly cancelEdit: _angular_core.OutputEmitterRef<void>;
4390
- onFormulaCancel(): void;
4391
- readonly cellTemplate: _angular_core.Signal<_angular_core.TemplateRef<unknown> | null>;
4392
- readonly editTemplate: _angular_core.Signal<_angular_core.TemplateRef<unknown> | null>;
4393
- readonly updateDraftFn: (value: unknown) => void;
4394
- readonly commitEditFn: () => void;
4395
- /**
4396
- * Stable cell address for the formula engine. `null` when the column
4397
- * isn't formula-enabled or the row lacks a stable id (e.g. headers).
4398
- */
4399
- private readonly formulaAddr;
4400
- /**
4401
- * Last-evaluated `FormulaValue` for this cell, or `null` when the cell
4402
- * holds no formula. Reactivity is driven by `formulaEngine.values`.
4403
- */
4404
- readonly formulaValue: _angular_core.Signal<FormulaValue | null>;
4405
- readonly value: _angular_core.Signal<unknown>;
4406
- readonly displayValue: _angular_core.Signal<string>;
4407
- /** `true` when the current cell value is a formula error (e.g. `#DIV/0!`). */
4408
- readonly hasFormulaError: _angular_core.Signal<boolean>;
4409
- /**
4410
- * Currently editing and the draft is a formula (starts with `=`).
4411
- * Drives the switch to `MozGridFormulaEditorComponent` instead of the
4412
- * default text input.
4413
- */
4414
- readonly isFormulaEditing: _angular_core.Signal<boolean>;
4415
- /**
4416
- * Palette CSS var for the coloured border shown when this cell is
4417
- * currently referenced by the formula being edited elsewhere. `null`
4418
- * when no editor is active or this cell is not referenced.
4419
- */
4420
- readonly refHighlightColor: _angular_core.Signal<string | null>;
4421
- readonly editState: _angular_core.Signal<_mozaic_ds_angular.CellEditState>;
4422
- readonly isEditing: _angular_core.Signal<boolean>;
4423
- readonly editorType: _angular_core.Signal<CellEditorType>;
4424
- readonly isFocused: _angular_core.Signal<boolean>;
4425
- readonly isInRange: _angular_core.Signal<boolean>;
4426
- readonly isInFillRange: _angular_core.Signal<boolean>;
4427
- readonly isInFillRejectRange: _angular_core.Signal<boolean>;
4428
- readonly cutEdges: _angular_core.Signal<{
4429
- top: boolean;
4430
- right: boolean;
4431
- bottom: boolean;
4432
- left: boolean;
4433
- any: boolean;
4434
- }>;
4435
- readonly cellError: _angular_core.Signal<_mozaic_ds_angular.CellError | null>;
4436
- onCellClick(event: MouseEvent): void;
4437
- onMouseDown(event: MouseEvent): void;
4438
- onMouseEnter(): void;
4439
- onDoubleClick(): void;
4440
- onEditorInput(event: Event): void;
4441
- onSelectChange(event: Event): void;
4442
- onCheckboxChange(event: Event): void;
4443
- onDateChange(value: string | null): void;
4444
- onFillHandleMouseDown(event: MouseEvent): void;
4445
- onEditorBlur(event: FocusEvent): void;
4446
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<MozGridCellComponent<any>, never>;
4447
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MozGridCellComponent<any>, "moz-grid-cell", never, { "row": { "alias": "row"; "required": true; "isSignal": true; }; "rowIndex": { "alias": "rowIndex"; "required": true; "isSignal": true; }; "colIndex": { "alias": "colIndex"; "required": true; "isSignal": true; }; "colState": { "alias": "colState"; "required": true; "isSignal": true; }; "def": { "alias": "def"; "required": true; "isSignal": true; }; "isLast": { "alias": "isLast"; "required": false; "isSignal": true; }; "pinnedEnd": { "alias": "pinnedEnd"; "required": false; "isSignal": true; }; "pinnedSticky": { "alias": "pinnedSticky"; "required": false; "isSignal": true; }; "pinnedOffset": { "alias": "pinnedOffset"; "required": false; "isSignal": true; }; "pinnedEdge": { "alias": "pinnedEdge"; "required": false; "isSignal": true; }; }, { "commitEdit": "commitEdit"; "cancelEdit": "cancelEdit"; }, never, never, true, never>;
4448
- }
4449
-
4450
- declare class MozGridFooterComponent {
4451
- protected readonly state: GridStateManager<any>;
4452
- protected readonly engine: GridEngine<any>;
4453
- readonly pageSizeOptions: _angular_core.InputSignal<number[]>;
4454
- readonly pageChange: _angular_core.OutputEmitterRef<PageEvent>;
4455
- readonly currentPageSizeStr: _angular_core.Signal<string>;
4456
- readonly pageSizeSelectOptions: _angular_core.Signal<{
4457
- text: string;
4458
- value: string;
4459
- }[]>;
4460
- readonly paginationOptions: _angular_core.Signal<{
4461
- text: string;
4462
- value: number;
4463
- }[]>;
4464
- readonly rangeLabel: _angular_core.Signal<string>;
4465
- onPageChange(newPageIndex: number): void;
4466
- onPageSizeChange(event: Event): void;
4467
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<MozGridFooterComponent, never>;
4468
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MozGridFooterComponent, "moz-grid-footer", never, { "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; }, { "pageChange": "pageChange"; }, never, never, true, never>;
4469
- }
4470
-
4471
- declare class MozGridGroupRowComponent<T = unknown> {
4472
- protected readonly state: GridStateManager<any>;
4473
- readonly groupRow: _angular_core.InputSignal<GroupRow<T>>;
4474
- readonly toggleExpand: _angular_core.OutputEmitterRef<string>;
4475
- readonly fieldLabel: _angular_core.Signal<string>;
4476
- readonly groupValue: _angular_core.Signal<string>;
4477
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<MozGridGroupRowComponent<any>, never>;
4478
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MozGridGroupRowComponent<any>, "moz-grid-group-row", never, { "groupRow": { "alias": "groupRow"; "required": true; "isSignal": true; }; }, { "toggleExpand": "toggleExpand"; }, never, never, true, never>;
4479
- }
4480
-
4481
- declare class MozGridDetailRowComponent<T = unknown> {
4482
- readonly data: _angular_core.InputSignal<T>;
4483
- readonly rowIndex: _angular_core.InputSignal<number>;
4484
- readonly detailTemplate: _angular_core.InputSignal<TemplateRef<unknown> | null>;
4485
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<MozGridDetailRowComponent<any>, never>;
4486
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MozGridDetailRowComponent<any>, "moz-grid-detail-row", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; "rowIndex": { "alias": "rowIndex"; "required": true; "isSignal": true; }; "detailTemplate": { "alias": "detailTemplate"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4487
- }
4488
-
4489
- declare class MozGridColumnVisibilityPanelComponent {
4490
- private readonly state;
4491
- readonly restoreColumn: _angular_core.OutputEmitterRef<string>;
4492
- readonly restoreAll: _angular_core.OutputEmitterRef<void>;
4493
- readonly hiddenColumns: _angular_core.Signal<{
4494
- field: string;
4495
- label: string;
4496
- }[]>;
4497
- onRestore(field: string): void;
4498
- onRestoreAll(): void;
4499
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<MozGridColumnVisibilityPanelComponent, never>;
4500
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MozGridColumnVisibilityPanelComponent, "moz-grid-column-visibility-panel", never, {}, { "restoreColumn": "restoreColumn"; "restoreAll": "restoreAll"; }, never, never, true, never>;
4501
- }
4502
-
4503
- declare class MozGridHeaderMenuComponent {
4504
- private readonly state;
4505
- readonly field: _angular_core.InputSignal<string>;
4506
- readonly isOpen: _angular_core.InputSignal<boolean>;
4507
- readonly actionClick: _angular_core.OutputEmitterRef<{
4508
- field: string;
4509
- actionId: HeaderMenuActionId;
4510
- }>;
4511
- readonly close: _angular_core.OutputEmitterRef<void>;
4512
- readonly menuItems: _angular_core.Signal<MozActionListItem[]>;
4513
- onItemClick(item: MozActionListItem): void;
4514
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<MozGridHeaderMenuComponent, never>;
4515
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MozGridHeaderMenuComponent, "moz-grid-header-menu", never, { "field": { "alias": "field"; "required": true; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; }, { "actionClick": "actionClick"; "close": "close"; }, never, never, true, never>;
4516
- }
4517
-
4518
- type SettingsScreen = 'main' | 'density' | 'columns';
4519
- interface DraftColumn {
4520
- field: string;
4521
- headerName: string;
4522
- visible: boolean;
4523
- }
4524
- declare class GridSettingsDrawerComponent {
4525
- private readonly drawerRef;
4526
- private readonly data;
4527
- readonly screen: _angular_core.WritableSignal<SettingsScreen>;
4528
- readonly draftDensity: _angular_core.WritableSignal<GridDensity>;
4529
- readonly draftColumns: _angular_core.WritableSignal<DraftColumn[]>;
4530
- readonly searchQuery: _angular_core.WritableSignal<string>;
4531
- readonly densityOptions: {
4532
- text: string;
4533
- value: string;
4534
- }[];
4535
- readonly densityLabel: _angular_core.Signal<string>;
4536
- readonly columnsLabel: _angular_core.Signal<string>;
4537
- readonly filteredColumns: _angular_core.Signal<DraftColumn[]>;
4538
- private readonly defaultColumns;
4539
- constructor();
4540
- goTo(screen: SettingsScreen): void;
4541
- onColumnToggle(field: string, checked: boolean): void;
4542
- onColumnDrop(event: CdkDragDrop<DraftColumn[]>): void;
4543
- onSearchInput(event: Event): void;
4544
- hideAll(): void;
4545
- showAll(): void;
4546
- apply(): void;
4547
- reset(): void;
4548
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<GridSettingsDrawerComponent, never>;
4549
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<GridSettingsDrawerComponent, "moz-grid-settings-drawer", never, {}, {}, never, never, true, never>;
4550
- }
4551
-
4552
- interface DraftGroupItem {
4553
- field: string;
4554
- headerName: string;
4555
- sortDirection: 'asc' | 'desc';
4556
- }
4557
- declare class GridGroupDrawerComponent {
4558
- private readonly drawerRef;
4559
- private readonly data;
4560
- readonly draftGrouped: _angular_core.WritableSignal<DraftGroupItem[]>;
4561
- private readonly allAvailable;
4562
- readonly available: _angular_core.Signal<{
4563
- field: string;
4564
- headerName: string;
4565
- }[]>;
4566
- onDrop(event: CdkDragDrop<DraftGroupItem[]>): void;
4567
- onSortDirectionChange(index: number, event: Event): void;
4568
- addGroup(field: string): void;
4569
- removeGroup(field: string): void;
4570
- apply(): void;
4571
- reset(): void;
4572
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<GridGroupDrawerComponent, never>;
4573
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<GridGroupDrawerComponent, "moz-grid-group-drawer", never, {}, {}, never, never, true, never>;
4574
- }
4575
-
4576
- declare class MozGridLoadingIndicatorComponent {
4577
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<MozGridLoadingIndicatorComponent, never>;
4578
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MozGridLoadingIndicatorComponent, "moz-grid-loading-indicator", never, {}, {}, never, never, true, never>;
4579
- }
4580
-
4581
- /**
4582
- * Structural host for custom filter components inside the filter builder.
4583
- *
4584
- * Usage in template:
4585
- * <ng-container mozCustomFilterHost
4586
- * [componentType]="descriptor.filterComponent"
4587
- * [condition]="condition"
4588
- * (conditionChange)="onValueChange(condition.id, $event)"
4589
- * />
4590
- */
4591
- declare class MozCustomFilterHostDirective implements OnChanges, OnDestroy {
4592
- readonly componentType: _angular_core.InputSignal<Type<MozGridCustomFilter>>;
4593
- readonly condition: _angular_core.InputSignal<FilterCondition>;
4594
- readonly conditionChange: _angular_core.OutputEmitterRef<FilterValue>;
4595
- private readonly vcr;
4596
- private ref;
4597
- private sub;
4598
- ngOnChanges(changes: SimpleChanges): void;
4599
- ngOnDestroy(): void;
4600
- private teardown;
4601
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<MozCustomFilterHostDirective, never>;
4602
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<MozCustomFilterHostDirective, "[mozCustomFilterHost]", never, { "componentType": { "alias": "componentType"; "required": true; "isSignal": true; }; "condition": { "alias": "condition"; "required": true; "isSignal": true; }; }, { "conditionChange": "conditionChange"; }, never, never, true, never>;
4603
- }
4604
-
4605
2261
  /**
4606
2262
  * McCombobox — Data models & type guards
4607
2263
  *
@@ -5072,5 +2728,5 @@ declare class MozTreeNodeComponent<T = unknown> {
5072
2728
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<MozTreeNodeComponent<any>, "moz-tree-node", never, { "node": { "alias": "node"; "required": true; "isSignal": true; }; "depth": { "alias": "depth"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "indentSize": { "alias": "indentSize"; "required": false; "isSignal": true; }; "nodeTemplate": { "alias": "nodeTemplate"; "required": false; "isSignal": true; }; "nodeTemplates": { "alias": "nodeTemplates"; "required": false; "isSignal": true; }; "loadChildren": { "alias": "loadChildren"; "required": false; "isSignal": true; }; "ancestors": { "alias": "ancestors"; "required": false; "isSignal": true; }; "flat": { "alias": "flat"; "required": false; "isSignal": true; }; "noResultText": { "alias": "noResultText"; "required": false; "isSignal": true; }; }, { "expandChange": "expandChange"; "selectionChange": "selectionChange"; }, never, never, true, never>;
5073
2729
  }
5074
2730
 
5075
- export { ACTION_LISTBOX_CONFIG, ActionListboxContainerComponent, ActionListboxRef, BuiltInMenuComponent, CellSelectionEngine, CellValidationEngine, ColumnReorderEngine, ColumnResizeEngine, DEFAULT_ACTION_LISTBOX_CONFIG, DEFAULT_FORMULA_FUNCTIONS, DEFAULT_GRID_OPTIONS, DEFAULT_MODAL_CONFIG, DEFAULT_OPERATORS, DEFAULT_OPERATOR_PER_TYPE, DEFAULT_TOASTER_CONFIG, DRAWER_CONFIG, DRAWER_DATA, DrawerContainerComponent, ExpandableRowEngine, ExportEngine, FilterEngine, FormulaEngine, FormulaValues, GridEngine, GridGroupDrawerComponent, GridSettingsDrawerComponent, GridStateManager, GroupEngine, HorizontalVirtualScrollEngine, InfiniteScrollEngine, InlineEditEngine, KeyboardEngine, MODAL_CONFIG, MODAL_DATA, MozAccordionComponent, MozAccordionContentComponent, MozAccordionHeaderComponent, MozAccordionPanelComponent, MozActionBottomBarComponent, MozActionListboxComponent, MozActionListboxTriggerDirective, MozAvatarComponent, MozBreadcrumbComponent, MozButtonComponent, MozCalloutComponent, MozCarouselComponent, MozCheckListMenuComponent, MozCheckboxComponent, MozCheckboxGroupComponent, MozCircularProgressBarComponent, MozComboboxComponent, MozComboboxHarness, MozComboboxOptionHarness, MozCustomFilterHostDirective, MozDatepickerComponent, MozDividerComponent, MozDrawerComponent, MozDrawerFooterDirective, MozDrawerRef, MozDrawerService, MozFieldComponent, MozFieldGroupComponent, MozFileUploaderComponent, MozFileUploaderItemComponent, MozFlagComponent, MozGridBodyComponent, MozGridCellComponent, MozGridColumnDef, MozGridColumnVisibilityPanelComponent, MozGridComponent, MozGridCustomFilter, MozGridDetailRowComponent, MozGridEmptyDef, MozGridFooterComponent, MozGridGroupRowComponent, MozGridHeaderCellComponent, MozGridHeaderComponent, MozGridHeaderMenuComponent, MozGridLoadingIndicatorComponent, MozGridRowComponent, MozGridToolbarDef, MozIconButtonComponent, MozKpiComponent, MozLinearProgressBarBufferComponent, MozLinearProgressBarPercentageComponent, MozLinkComponent, MozLoaderComponent, MozLoadingOverlayComponent, MozModalComponent, MozModalFooterDirective, MozModalRef, MozModalService, MozNavigationIndicatorComponent, MozNumberBadgeComponent, MozOverlayComponent, MozPageHeaderComponent, MozPaginationComponent, MozPasswordInputDirective, MozPhoneNumberComponent, MozPincodeInputComponent, MozPopoverComponent, MozPopoverFooterDirective, MozPopoverTriggerDirective, MozQuantitySelectorComponent, MozRadioComponent, MozRadioGroupComponent, MozSegmentedControlComponent, MozSelectComponent, MozSidebarComponent, MozStarRatingComponent, MozStatusBadgeComponent, MozStatusDotComponent, MozStatusMessageComponent, MozStatusNotificationComponent, MozStepperBottomBarComponent, MozStepperCompactComponent, MozStepperInlineComponent, MozStepperStackedComponent, MozTabComponent, MozTabsComponent, MozTagComponent, MozTextInput, MozTextarea, MozTileComponent, MozTileExpandableComponent, MozTileSelectableComponent, MozToasterComponent, MozToasterRef, MozToasterService, MozToggleComponent, MozTooltipComponent, MozTooltipDirective, MozTreeComponent, MozTreeNodeComponent, MozTreeNodeTemplateDirective, OPERATOR_LABELS, POPOVER_CONFIG, POPOVER_DATA, PaginationEngine, PopoverContainerComponent, PopoverRef, PopoverService, RANGE_OPERATORS, RowSelectionEngine, SortEngine, StatePersistenceEngine, TOASTER_CONFIG, TreeEngine, TreeKeyboardService, TreeSelectionService, TreeStateService, VALUELESS_OPERATORS, addressToA1, firstError, generateConditionId, isConditionComplete, isSection, toBoolean, toNumber, toStringValue, trackByField, trackDisplayRow };
5076
- export type { ActionListboxConfig, ActionListboxPosition, ActiveFilter, BooleanOperator, BulkCellChange, BulkCopyEvent, BulkDeleteEvent, BulkEditEvent, BulkPasteEvent, CellAddress, CellCoord, CellEditCancelEvent, CellEditEvent, CellEditState, CellEditorType, CellError, CellRange, CellSelectionEvent, ColumnDef, ColumnFreezeEvent, ColumnReorderEvent, ColumnResizeEvent, ColumnSearchToggleEvent, ColumnStateEntry, ColumnVisibilityEvent, DateOperator, DisplayRow, ExportOptions, FillDownEvent, FilterApplyMode, FilterChangeReason, FilterColumnDescriptor, FilterCombinator, FilterCondition, FilterDataType, FilterDrawerData, FilterDrawerResult, FilterEvent, FilterMode, FilterModel, FilterOperator, FilterValue, FlatNode, FormulaArity, FormulaChangeEvent, FormulaDataSource, FormulaError, FormulaErrorEvent, FormulaEvalContext, FormulaFunctionDocs, FormulaFunctionImpl, FormulaFunctionRegistry, FormulaValue, GridDensity, GridEmptyContext, GridEmptyKind, GridEventMap, GridEventType, GridExportEvent, GridOptions, GridPlugin, GridSettingsData, GridSettingsResult, GridToolbarSlot, GroupDrawerData, GroupDrawerResult, GroupEntry, GroupEvent, GroupRow, HeaderMenuActionId, HeaderMenuConfig, KeyboardActions, LoadChildrenFn, LoadMoreEvent, LoadingStrategy, MozActionListItem, MozActionListItemAppearance, MozAvatarSize, MozBreadcrumbAppearance, MozBreadcrumbLink, MozBuiltInMenuItem, MozBuiltInMenuItemTarget, MozButtonAppearance, MozButtonIconPosition, MozButtonSize, MozButtonType, MozCalloutVariant, MozCheckListMenuItem, MozCircularProgessBarSize, MozComboboxItem, MozComboboxOption, MozComboboxSection, MozComboboxSize, MozDatepickerSize, MozDividerAppearance, MozDividerOrientation, MozDividerSize, MozDrawerConfig, MozDrawerPosition, MozFileUploaderFormat, MozFileUploaderItemFormat, MozFlagType, MozIconButtonAppearance, MozIconButtonSize, MozIconButtonType, MozKpiSize, MozKpiStatus, MozKpiTrend, MozLinearProgressBarBufferSize, MozLinkAppearance, MozLinkIconPosition, MozLinkSize, MozLoaderAppearance, MozLoaderSize, MozNavigationIndicatorAction, MozNumberBadgeAppearance, MozNumberBadgeSize, MozPageHeaderScope, MozPhoneNumberCountry, MozPhoneNumberSize, MozPhoneNumberValue, MozPincodeLength, MozPopoverAppearance, MozPopoverPosition, MozPopoverSize, MozQuantitySelectorSize, MozSegmentedControlSize, MozSegmentedItem, MozSelectOption, MozSelectSize, MozSelectValue, MozSidebarItem, MozSidebarSubItem, MozStarRatingAppearance, MozStarRatingSize, MozStatusBadgeStatus, MozStatusDotSize, MozStatusDotStatus, MozStatusMessageStatus, MozStatusNotificationStatus, MozStepperBottomBarStep, MozStepperInlineStep, MozStepperStackedStep, MozTabItem, MozTagSize, MozTagType, MozTextInputSize, MozTileAppearance, MozTileExpandableTrigger, MozTileInputPosition, MozTileInputVerticalPosition, MozTileSelectableAppearance, MozTileSelectableType, MozToasterPosition, MozToasterRole, MozToasterStatus, MozToggleSize, MozTooltipPosition, NumberOperator, PageEvent, PaginationState, PersistedGridState, PopoverConfig, PopoverTriggerMode, RowSelectionEvent, SelectAllMode, SetOperator, SortDef, SortDirection, SortEvent, TextOperator, TreeDisplayRow, TreeNode, TreeNodeConfig, TreeNodeContext, TreeSelectionMode };
2731
+ export { ACTION_LISTBOX_CONFIG, ActionListboxContainerComponent, ActionListboxRef, BuiltInMenuComponent, DEFAULT_ACTION_LISTBOX_CONFIG, DEFAULT_MODAL_CONFIG, DEFAULT_TOASTER_CONFIG, DRAWER_CONFIG, DRAWER_DATA, DrawerContainerComponent, MODAL_CONFIG, MODAL_DATA, MozAccordionComponent, MozAccordionContentComponent, MozAccordionHeaderComponent, MozAccordionPanelComponent, MozActionBottomBarComponent, MozActionListboxComponent, MozActionListboxTriggerDirective, MozAvatarComponent, MozBreadcrumbComponent, MozButtonComponent, MozCalloutComponent, MozCarouselComponent, MozCheckListMenuComponent, MozCheckboxComponent, MozCheckboxGroupComponent, MozCircularProgressBarComponent, MozComboboxComponent, MozComboboxHarness, MozComboboxOptionHarness, MozDatepickerComponent, MozDividerComponent, MozDrawerComponent, MozDrawerFooterDirective, MozDrawerRef, MozDrawerService, MozFieldComponent, MozFieldGroupComponent, MozFileUploaderComponent, MozFileUploaderItemComponent, MozFlagComponent, MozIconButtonComponent, MozKpiComponent, MozLinearProgressBarBufferComponent, MozLinearProgressBarPercentageComponent, MozLinkComponent, MozLoaderComponent, MozLoadingOverlayComponent, MozModalComponent, MozModalFooterDirective, MozModalRef, MozModalService, MozNavigationIndicatorComponent, MozNumberBadgeComponent, MozOverlayComponent, MozPageHeaderComponent, MozPaginationComponent, MozPasswordInputDirective, MozPhoneNumberComponent, MozPincodeInputComponent, MozPopoverComponent, MozPopoverFooterDirective, MozPopoverTriggerDirective, MozQuantitySelectorComponent, MozRadioComponent, MozRadioGroupComponent, MozSegmentedControlComponent, MozSelectComponent, MozSidebarComponent, MozStarRatingComponent, MozStatusBadgeComponent, MozStatusDotComponent, MozStatusMessageComponent, MozStatusNotificationComponent, MozStepperBottomBarComponent, MozStepperCompactComponent, MozStepperInlineComponent, MozStepperStackedComponent, MozTabComponent, MozTabsComponent, MozTagComponent, MozTextInput, MozTextarea, MozTileComponent, MozTileExpandableComponent, MozTileSelectableComponent, MozToasterComponent, MozToasterRef, MozToasterService, MozToggleComponent, MozTooltipComponent, MozTooltipDirective, MozTreeComponent, MozTreeNodeComponent, MozTreeNodeTemplateDirective, POPOVER_CONFIG, POPOVER_DATA, PopoverContainerComponent, PopoverRef, PopoverService, TOASTER_CONFIG, TreeKeyboardService, TreeSelectionService, TreeStateService, isSection };
2732
+ export type { ActionListboxConfig, ActionListboxPosition, FlatNode, LoadChildrenFn, MozActionListItem, MozActionListItemAppearance, MozAvatarSize, MozBreadcrumbAppearance, MozBreadcrumbLink, MozBuiltInMenuItem, MozBuiltInMenuItemTarget, MozButtonAppearance, MozButtonIconPosition, MozButtonSize, MozButtonType, MozCalloutVariant, MozCheckListMenuItem, MozCircularProgessBarSize, MozComboboxItem, MozComboboxOption, MozComboboxSection, MozComboboxSize, MozDatepickerSize, MozDividerAppearance, MozDividerOrientation, MozDividerSize, MozDrawerConfig, MozDrawerPosition, MozFileUploaderFormat, MozFileUploaderItemFormat, MozFlagType, MozIconButtonAppearance, MozIconButtonSize, MozIconButtonType, MozKpiSize, MozKpiStatus, MozKpiTrend, MozLinearProgressBarBufferSize, MozLinkAppearance, MozLinkIconPosition, MozLinkSize, MozLoaderAppearance, MozLoaderSize, MozNavigationIndicatorAction, MozNumberBadgeAppearance, MozNumberBadgeSize, MozPageHeaderScope, MozPhoneNumberCountry, MozPhoneNumberSize, MozPhoneNumberValue, MozPincodeLength, MozPopoverAppearance, MozPopoverPosition, MozPopoverSize, MozQuantitySelectorSize, MozSegmentedControlSize, MozSegmentedItem, MozSelectOption, MozSelectSize, MozSelectValue, MozSidebarItem, MozSidebarSubItem, MozStarRatingAppearance, MozStarRatingSize, MozStatusBadgeStatus, MozStatusDotSize, MozStatusDotStatus, MozStatusMessageStatus, MozStatusNotificationStatus, MozStepperBottomBarStep, MozStepperInlineStep, MozStepperStackedStep, MozTabItem, MozTagSize, MozTagType, MozTextInputSize, MozTileAppearance, MozTileExpandableTrigger, MozTileInputPosition, MozTileInputVerticalPosition, MozTileSelectableAppearance, MozTileSelectableType, MozToasterPosition, MozToasterRole, MozToasterStatus, MozToggleSize, MozTooltipPosition, PopoverConfig, PopoverTriggerMode, TreeNode, TreeNodeContext, TreeSelectionMode };