@mozaic-ds/angular 2.0.46 → 2.0.48

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.
@@ -2278,11 +2278,29 @@ interface BulkCopyEvent {
2278
2278
  selectionMode?: 'rows' | 'cells';
2279
2279
  rowSelection?: unknown;
2280
2280
  }
2281
+ /**
2282
+ * A single cell change produced by a bulk operation (paste, delete, …).
2283
+ * Values are already coerced to the column's expected type and have passed
2284
+ * `cellEditorValidator`; consumers can persist them as-is.
2285
+ */
2286
+ interface BulkCellChange {
2287
+ rowIndex: number;
2288
+ rowId: unknown;
2289
+ field: string;
2290
+ oldValue: unknown;
2291
+ newValue: unknown;
2292
+ }
2281
2293
  interface BulkPasteEvent {
2282
2294
  range: CellRange | null;
2283
2295
  data: string[][];
2284
2296
  rowIds: unknown[];
2285
2297
  fields: string[];
2298
+ /**
2299
+ * Fully resolved per-cell changes applied by the grid (post-coercion,
2300
+ * post-validation). Use this to persist server-side — no need to replicate
2301
+ * the fill logic from `data` vs `range`.
2302
+ */
2303
+ changes: BulkCellChange[];
2286
2304
  selectionMode?: 'rows' | 'cells';
2287
2305
  rowSelection?: unknown;
2288
2306
  }
@@ -2310,6 +2328,11 @@ interface BulkDeleteEvent {
2310
2328
  cellCount: number;
2311
2329
  rowIds: unknown[];
2312
2330
  fields: string[];
2331
+ /**
2332
+ * Fully resolved per-cell changes applied by the grid (post-coercion,
2333
+ * post-validation). Use this to persist server-side.
2334
+ */
2335
+ changes: BulkCellChange[];
2313
2336
  selectionMode?: 'rows' | 'cells';
2314
2337
  rowSelection?: unknown;
2315
2338
  }
@@ -2450,6 +2473,16 @@ interface ColumnDef<T = unknown> {
2450
2473
  filterTemplate?: TemplateRef<unknown>;
2451
2474
  /** Validation function for cell values. Returns CellError or null. */
2452
2475
  cellValidator?: (value: unknown, row: T) => CellError | null;
2476
+ /**
2477
+ * Enables spreadsheet-style formulas for this column. Setting this to
2478
+ * `true` implies `editable: true` (users need to type the formula). When
2479
+ * the committed value starts with `=`, it is routed to the `FormulaEngine`
2480
+ * and the evaluated result is rendered in place of the raw formula text.
2481
+ *
2482
+ * Requires the grid-level `formulas` input to be `true` and the row to
2483
+ * expose a stable id via `rowIdField`.
2484
+ */
2485
+ allowFormula?: boolean;
2453
2486
  }
2454
2487
  interface ColumnStateEntry {
2455
2488
  field: string;
@@ -2695,6 +2728,10 @@ declare class GridStateManager<T = unknown> {
2695
2728
  readonly draggingColumn: _angular_core.WritableSignal<string | null>;
2696
2729
  readonly dropIndicatorIndex: _angular_core.WritableSignal<number | null>;
2697
2730
  readonly cellEditState: _angular_core.WritableSignal<CellEditState>;
2731
+ /** `true` while the user is editing a formula inside the top formula bar
2732
+ * (outside any cell). Consumed by `FormulaEngine.isFormulaEditActive`
2733
+ * so headers show column-letter badges during bar-driven edits too. */
2734
+ readonly formulaBarEditingActive: _angular_core.WritableSignal<boolean>;
2698
2735
  readonly visibleColumns: _angular_core.Signal<ColumnStateEntry[]>;
2699
2736
  readonly pinnedLeftColumns: _angular_core.Signal<ColumnStateEntry[]>;
2700
2737
  readonly unpinnedColumns: _angular_core.Signal<ColumnStateEntry[]>;
@@ -2720,6 +2757,8 @@ declare class GridStateManager<T = unknown> {
2720
2757
  readonly leadingColumnSpacer: _angular_core.Signal<number>;
2721
2758
  readonly trailingColumnSpacer: _angular_core.Signal<number>;
2722
2759
  readonly columnDefMap: _angular_core.Signal<Map<string, ColumnDef<T>>>;
2760
+ /** `true` when at least one column declares `allowFormula: true`. */
2761
+ readonly hasFormulaColumns: _angular_core.Signal<boolean>;
2723
2762
  readonly gridTemplateColumns: _angular_core.Signal<string>;
2724
2763
  readonly totalContentWidth: _angular_core.Signal<number>;
2725
2764
  readonly totalPages: _angular_core.Signal<number>;
@@ -2767,6 +2806,293 @@ declare class RowSelectionEngine<T = unknown> {
2767
2806
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<RowSelectionEngine<any>>;
2768
2807
  }
2769
2808
 
2809
+ /**
2810
+ * Public types for the formula engine. These are the only symbols consumers
2811
+ * of the grid need to interact with. The parser / evaluator / DAG live in
2812
+ * `features/formula/` and expose the public surface through `FormulaEngine`.
2813
+ *
2814
+ * Shape overview:
2815
+ * - `CellAddress` — stable (rowId, field) tuple.
2816
+ * - `FormulaValue` — tagged union of numbers, strings, booleans, empty
2817
+ * and errors. Errors propagate through operators.
2818
+ * - `FormulaError` — Excel-compatible error codes + `#PARSE!`.
2819
+ * - `FormulaFunction*` — registration shape for built-in + custom funcs.
2820
+ * - `FormulaChange*` / `FormulaError*` — events emitted by the grid.
2821
+ */
2822
+ /** Stable cell identifier, resistant to sort/filter/pagination. */
2823
+ interface CellAddress {
2824
+ rowId: string | number;
2825
+ field: string;
2826
+ }
2827
+ /** Excel-compatible error codes, plus mozaic-specific `#PARSE!`. */
2828
+ type FormulaError = '#DIV/0!' | '#VALUE!' | '#REF!' | '#NAME?' | '#NUM!' | '#N/A' | '#CYCLE!' | '#PARSE!';
2829
+ /**
2830
+ * Tagged union for any value that can appear as a formula operand or result.
2831
+ * `empty` represents a cell with no source value (distinct from the empty
2832
+ * string) and coerces to 0 in arithmetic contexts, `""` in textual ones.
2833
+ */
2834
+ type FormulaValue = {
2835
+ kind: 'number';
2836
+ value: number;
2837
+ } | {
2838
+ kind: 'string';
2839
+ value: string;
2840
+ } | {
2841
+ kind: 'boolean';
2842
+ value: boolean;
2843
+ } | {
2844
+ kind: 'empty';
2845
+ } | {
2846
+ kind: 'error';
2847
+ error: FormulaError;
2848
+ };
2849
+ /**
2850
+ * Context passed to every function implementation. Keeps evaluation
2851
+ * side-effect free: the engine owns the cell store and only exposes a
2852
+ * `resolveRef` primitive. Range expansion is handled by the engine before
2853
+ * the function is invoked, so implementations receive a flat value array.
2854
+ */
2855
+ interface FormulaEvalContext {
2856
+ /** Current cell being evaluated (used for diagnostics only). */
2857
+ readonly addr?: CellAddress;
2858
+ /**
2859
+ * Resolve a long-form reference. Returns `#REF!` when the target is
2860
+ * missing (column removed, row deleted). The engine is responsible for
2861
+ * cycle protection — functions must not worry about recursion.
2862
+ */
2863
+ resolveRef(target: CellAddress): FormulaValue;
2864
+ /** Active locale, used by date/text helpers that are locale-aware. */
2865
+ readonly locale: 'en' | 'fr';
2866
+ }
2867
+ /** Arity constraint for a function registration. */
2868
+ type FormulaArity = number | 'variadic' | readonly [min: number, max: number];
2869
+ /**
2870
+ * Human-readable metadata shown in the autocomplete panel. When absent, the
2871
+ * suggestion listing falls back to the function name only.
2872
+ */
2873
+ interface FormulaFunctionDocs {
2874
+ /** Canonical signature string, e.g. `SUM(number1, [number2, ...])`. */
2875
+ readonly signature: string;
2876
+ /** One-line summary — displayed next to the signature in FR by default. */
2877
+ readonly summary: string;
2878
+ }
2879
+ interface FormulaFunctionImpl {
2880
+ /** Number of arguments accepted. */
2881
+ readonly arity: FormulaArity;
2882
+ /**
2883
+ * Whether the function accepts a range argument (e.g. `SUM(A1:B3)`).
2884
+ * When `true`, each range is flattened into the `args` array in
2885
+ * row-major order. When `false`, passing a range yields `#VALUE!`.
2886
+ *
2887
+ * Defaults to `false`.
2888
+ */
2889
+ readonly acceptsRange?: boolean;
2890
+ /** Optional documentation — consumed by the editor's autocomplete panel. */
2891
+ readonly docs?: FormulaFunctionDocs;
2892
+ /** Evaluate the function. Must be pure (no I/O, no mutation). */
2893
+ evaluate(args: FormulaValue[], ctx: FormulaEvalContext): FormulaValue;
2894
+ }
2895
+ /** Lookup table of function name (uppercase) → implementation. */
2896
+ type FormulaFunctionRegistry = Readonly<Record<string, FormulaFunctionImpl>>;
2897
+ /**
2898
+ * Source for storing formulas externally (instead of serialising the raw
2899
+ * formula into the row's field). Mirror of AG-Grid's `formulaDataSource`.
2900
+ */
2901
+ interface FormulaDataSource {
2902
+ getFormula(addr: CellAddress): string | undefined;
2903
+ setFormula(addr: CellAddress, formula: string | undefined): void;
2904
+ /** Optional bulk hydration — useful for persistence layers. */
2905
+ hydrate?(entries: Iterable<{
2906
+ addr: CellAddress;
2907
+ formula: string;
2908
+ }>): void;
2909
+ }
2910
+ interface FormulaChangeEvent {
2911
+ addr: CellAddress;
2912
+ /** Canonical long-form formula (references keyed by rowId/field). */
2913
+ formula: string;
2914
+ /** Last evaluated value after the change. */
2915
+ evaluated: FormulaValue;
2916
+ }
2917
+ interface FormulaErrorEvent {
2918
+ addr: CellAddress;
2919
+ formula: string;
2920
+ error: FormulaError;
2921
+ }
2922
+ /** Factory helpers for callers that prefer not to build literals by hand. */
2923
+ declare const FormulaValues: {
2924
+ readonly number: (value: number) => FormulaValue;
2925
+ readonly string: (value: string) => FormulaValue;
2926
+ readonly boolean: (value: boolean) => FormulaValue;
2927
+ readonly empty: () => FormulaValue;
2928
+ readonly error: (error: FormulaError) => FormulaValue;
2929
+ };
2930
+ /** Narrow a value to a number, following Excel coercion rules. */
2931
+ declare function toNumber(v: FormulaValue): number | FormulaError;
2932
+ /** Narrow a value to a string, following Excel coercion rules. */
2933
+ declare function toStringValue(v: FormulaValue): string | FormulaError;
2934
+ /** Narrow a value to a boolean, following Excel coercion rules. */
2935
+ declare function toBoolean(v: FormulaValue): boolean | FormulaError;
2936
+ /** Returns the first error found in the given values, or `null`. */
2937
+ declare function firstError(values: readonly FormulaValue[]): FormulaError | null;
2938
+
2939
+ /**
2940
+ * Maps structured refs (A1-backed, field-keyed) to / from long-form
2941
+ * `CellAddress` tuples, and converts formula *source strings* between the
2942
+ * A1 edit surface and the `REF(COLUMN("…"),ROW(N))` storage form.
2943
+ *
2944
+ * The mapper is the only component aware of the grid's current column
2945
+ * order — every other layer works exclusively with addresses, so reordering
2946
+ * columns or renaming a field's display label never breaks a stored formula.
2947
+ *
2948
+ * Surface round-trip:
2949
+ *
2950
+ * Editor types → a1ToLongForm(ctx) → REF(COLUMN(…),ROW(…)) (stored)
2951
+ * Stored REF long-form → longFormToA1(ctx) → A1 (displayed)
2952
+ *
2953
+ * The mapper is intentionally stateless and receives its dependencies
2954
+ * (fields list + row id list) through the method parameters. This keeps
2955
+ * it unit-testable without instantiating the whole grid.
2956
+ */
2957
+
2958
+ interface RefMapperContext {
2959
+ /**
2960
+ * Ordered list of column fields that can participate in formulas. Used
2961
+ * for A1 letter ↔ field conversion and for existence checks (an unknown
2962
+ * field yields `#REF!`).
2963
+ */
2964
+ readonly fields: readonly string[];
2965
+ /**
2966
+ * Row identifiers in display order. Index 0 = row `1` in the user-facing
2967
+ * surface syntax. For grids in server mode, callers typically provide the
2968
+ * *currently loaded* subset — unresolved references surface as `#REF!`
2969
+ * which is the expected behaviour for page-scoped formulas.
2970
+ */
2971
+ readonly rowIds: readonly (string | number)[];
2972
+ /**
2973
+ * Row id of the formula being resolved. The editor-side A1 helpers use
2974
+ * this to detect same-row refs (so the display can be relative by
2975
+ * default).
2976
+ */
2977
+ readonly currentRowId?: string | number;
2978
+ }
2979
+ /** `(addr) → "A1"` using the current column order. */
2980
+ declare function addressToA1(addr: CellAddress, ctx: RefMapperContext): string | undefined;
2981
+
2982
+ /**
2983
+ * `FormulaEngine` — grid-scoped service that owns every formula cell, the
2984
+ * dependency DAG linking them, and the evaluator that turns stored
2985
+ * formulas into `FormulaValue`s.
2986
+ *
2987
+ * Responsibilities (Phase 1):
2988
+ * - Parse + resolve a raw formula when the user commits an edit.
2989
+ * - Update the dependency graph and detect cycles (`#CYCLE!`).
2990
+ * - Re-evaluate the mutated cell and every descendant in topological order.
2991
+ * - Expose a `values` signal the grid renders against.
2992
+ * - Provide an explicit `invalidate(addr)` so inline-edit can refresh
2993
+ * dependents after a *non-formula* source cell changes — avoiding a
2994
+ * blanket re-eval of the whole dataset.
2995
+ *
2996
+ * Out of scope (Phase ≥ 2):
2997
+ * - Editor component + autocomplete (uses `longFormToA1` under the hood).
2998
+ * - Clipboard / fill-handle rebasing of relative refs.
2999
+ * - History integration (undo/redo of formula mutations).
3000
+ */
3001
+
3002
+ declare class FormulaEngine<T = unknown> {
3003
+ private readonly state;
3004
+ private readonly cells;
3005
+ private readonly dag;
3006
+ /** Last-evaluated values keyed by `rowId|field`. */
3007
+ private readonly valuesSignal;
3008
+ /** Function registry — consumers can replace via `setFunctions`. */
3009
+ private functions;
3010
+ /** Active locale for the parser/evaluator. */
3011
+ private locale;
3012
+ /** Snapshot of all evaluated formula values. Consumers read by key. */
3013
+ readonly values: Signal<ReadonlyMap<string, FormulaValue>>;
3014
+ /** Whether any formula is currently tracked. */
3015
+ readonly hasAnyFormula: Signal<boolean>;
3016
+ /**
3017
+ * `true` when the user is currently editing a cell whose column has
3018
+ * `allowFormula: true`. The grid's header uses this to surface the
3019
+ * structured-ref column badges (`[price]`, `[qty]`, …) above each
3020
+ * header, matching what the user types in their formula.
3021
+ */
3022
+ readonly isFormulaEditActive: Signal<boolean>;
3023
+ /** Merge / replace the function registry (called once at grid init). */
3024
+ setFunctions(functions: FormulaFunctionRegistry): void;
3025
+ /** Read-only view of the current function registry — used by the editor's
3026
+ * autocomplete panel to enumerate available names + their docs. */
3027
+ getFunctions(): FormulaFunctionRegistry;
3028
+ setLocale(locale: 'en' | 'fr'): void;
3029
+ hasFormula(addr: CellAddress): boolean;
3030
+ /** Raw formula string, or `undefined` when none is stored. */
3031
+ getFormula(addr: CellAddress): string | undefined;
3032
+ /** Last-evaluated value, or `undefined` when no formula is stored. */
3033
+ valueAt(addr: CellAddress): FormulaValue | undefined;
3034
+ /**
3035
+ * Formula re-presented as A1 surface syntax for the current column /
3036
+ * row order. Returns `undefined` when the cell has no formula. Used by
3037
+ * the editor when opening a cell for edit.
3038
+ */
3039
+ displayFormula(addr: CellAddress): string | undefined;
3040
+ /**
3041
+ * Registers or updates a formula at `addr`. Returns the freshly-computed
3042
+ * value. Invalid formulas are stored with their error as value so the
3043
+ * grid can render `#PARSE!` / `#REF!` etc. instead of silently dropping.
3044
+ */
3045
+ set(addr: CellAddress, rawFormula: string): FormulaValue;
3046
+ /** Removes the formula at `addr`. Descendants are re-evaluated. */
3047
+ remove(addr: CellAddress): void;
3048
+ /**
3049
+ * Notifies the engine that a non-formula cell changed. Only dependents
3050
+ * are re-evaluated — this is the hook used by `InlineEditEngine` after
3051
+ * committing a plain value edit.
3052
+ */
3053
+ invalidate(addr: CellAddress): void;
3054
+ /** Wipes every formula / value. */
3055
+ clear(): void;
3056
+ /**
3057
+ * Reconciles the engine against `sourceData()`: any cell whose column
3058
+ * declares `allowFormula: true` and whose value is a `=…` string is
3059
+ * registered (or updated). Cells previously registered but no longer
3060
+ * present (row removed, value changed to a literal) are dropped.
3061
+ *
3062
+ * Designed to be called from a grid-level effect tracking
3063
+ * `(formulas, sourceData, columnDefMap)` so that formulas baked into
3064
+ * the initial dataset are evaluated on first render — without it, the
3065
+ * engine would only learn about a formula after the user committed an
3066
+ * inline edit on it.
3067
+ *
3068
+ * The reconciliation is incremental: identical formula strings short-
3069
+ * circuit (no re-parse, no re-eval) so the call is cheap on stable data.
3070
+ */
3071
+ syncFromSource(allowFormula: (field: string) => boolean): void;
3072
+ /**
3073
+ * Re-parses every stored formula so refs pick up the latest column
3074
+ * order / row list. Called by the grid shell when visibility or row
3075
+ * identity changes (reorder, filter flip, …).
3076
+ */
3077
+ rebuild(): void;
3078
+ private refMapperContext;
3079
+ private storeError;
3080
+ /**
3081
+ * Evaluate the given seeds and every descendant in topological order.
3082
+ * Each node is first checked for cycle participation — any node inside
3083
+ * a cycle reports `#CYCLE!` without attempting evaluation (which would
3084
+ * recurse through the cached values and either spin or yield garbage).
3085
+ */
3086
+ private revalidateFrom;
3087
+ private makeEvalContext;
3088
+ /** Resolve a reference: formula cell → cached value, else source data. */
3089
+ private resolveRef;
3090
+ private readSourceValue;
3091
+ private commitValues;
3092
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormulaEngine<any>, never>;
3093
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<FormulaEngine<any>>;
3094
+ }
3095
+
2770
3096
  interface GridPlugin {
2771
3097
  name: string;
2772
3098
  init(state: GridStateManager<never>): void;
@@ -2837,6 +3163,8 @@ declare class MozGridComponent<T = unknown> {
2837
3163
  private readonly historyEngine;
2838
3164
  private readonly groupEngine;
2839
3165
  private readonly filterEngine;
3166
+ protected readonly formulaEngine: FormulaEngine<T>;
3167
+ private readonly refHighlight;
2840
3168
  private readonly persistenceEngine;
2841
3169
  private readonly exportEngine;
2842
3170
  private readonly validationEngine;
@@ -2862,6 +3190,12 @@ declare class MozGridComponent<T = unknown> {
2862
3190
  readonly rowSelection: _angular_core.InputSignal<boolean>;
2863
3191
  readonly expandable: _angular_core.InputSignal<boolean>;
2864
3192
  readonly rowIdField: _angular_core.InputSignal<string>;
3193
+ /**
3194
+ * Enables the spreadsheet-style formula engine. When `true`, any cell
3195
+ * committed with a leading `=` in a column declaring `allowFormula: true`
3196
+ * is routed to `FormulaEngine` and its evaluated value is rendered.
3197
+ */
3198
+ readonly formulas: _angular_core.InputSignal<boolean>;
2865
3199
  readonly detailTemplate: _angular_core.InputSignal<TemplateRef<unknown> | null>;
2866
3200
  readonly fullscreen: _angular_core.InputSignal<boolean>;
2867
3201
  readonly reorderable: _angular_core.InputSignal<boolean>;
@@ -2945,6 +3279,39 @@ declare class MozGridComponent<T = unknown> {
2945
3279
  protected readonly selectionTotalCount: _angular_core.Signal<number>;
2946
3280
  protected readonly showPagination: _angular_core.Signal<boolean>;
2947
3281
  protected readonly showInfiniteScrollLoader: _angular_core.Signal<boolean>;
3282
+ /** Focused cell coord picked up by the formula bar — falls back to the
3283
+ * selected cell so the bar stays populated after focus is lost (e.g.
3284
+ * the user clicked outside to dismiss an overlay). */
3285
+ private readonly formulaBarCoord;
3286
+ /** Snapshot coord captured at edit entry — kept as a signal so the
3287
+ * bar's address reads from it reactively and stays pinned to the
3288
+ * original cell even when the user clicks elsewhere to pick refs. */
3289
+ private readonly formulaBarActiveCoord;
3290
+ /** A1 address (`A5`, `$A$5`) of the formula-bar target cell. While the
3291
+ * bar is editing the address stays pinned to the snapshot so ref
3292
+ * picking doesn't visually jump the label around. */
3293
+ protected readonly formulaBarAddress: _angular_core.Signal<string>;
3294
+ /** Formula source if the target cell holds one, otherwise the displayed
3295
+ * value as a string. Mirrors Excel's formula-bar behaviour. */
3296
+ protected readonly formulaBarContent: _angular_core.Signal<string>;
3297
+ /** `true` while the user is editing in the formula bar (mounts the
3298
+ * full-featured formula editor with ref highlights + autocomplete). */
3299
+ protected readonly formulaBarEditing: _angular_core.WritableSignal<boolean>;
3300
+ /** Live draft while the formula-bar input is focused. `null` means
3301
+ * "not editing" and the input mirrors `formulaBarContent()`. */
3302
+ protected readonly formulaBarDraft: _angular_core.WritableSignal<string | null>;
3303
+ /** Snapshot of the cell targeted when the formula bar gained focus.
3304
+ * Needed because blur fires *after* the click that moved the
3305
+ * selection elsewhere — without this we'd commit into the new cell. */
3306
+ private formulaBarEditSnapshot;
3307
+ /** Value shown in the bar input — draft while editing, committed value otherwise. */
3308
+ protected readonly formulaBarDisplay: _angular_core.Signal<string>;
3309
+ /** Address of the cell the formula bar is editing (for `@row`
3310
+ * highlighting inside the embedded editor). Reads from the snapshot
3311
+ * so it stays stable while the user clicks other cells to pick refs. */
3312
+ protected readonly formulaBarEditingAddr: _angular_core.Signal<CellAddress | null>;
3313
+ /** `true` when the target cell sits in an editable column. */
3314
+ protected readonly formulaBarEditable: _angular_core.Signal<boolean>;
2948
3315
  private columnsInitialized;
2949
3316
  private stateRestored;
2950
3317
  private documentMouseUpHandler;
@@ -2973,6 +3340,12 @@ declare class MozGridComponent<T = unknown> {
2973
3340
  private resetInfiniteScrollIfActive;
2974
3341
  private refocusGrid;
2975
3342
  onMouseUp(): void;
3343
+ /**
3344
+ * Shifts a formula's relative refs by the given (row, col) delta when the
3345
+ * value is a formula string dropped on a new cell during a fill. Non-formula
3346
+ * values are returned as-is so downstream code can still see the raw value.
3347
+ */
3348
+ private shiftFormulaForFill;
2976
3349
  /**
2977
3350
  * Maps a display row index (from displayRow.index) to the actual index in
2978
3351
  * sourceData(). When grouping or sorting is active the display index doesn't
@@ -3004,6 +3377,27 @@ declare class MozGridComponent<T = unknown> {
3004
3377
  onGroupClick(): void;
3005
3378
  private applyGroupResult;
3006
3379
  onKeyboardShortcutsClick(): void;
3380
+ /** Clicking the readonly preview flips the bar into edit mode: we mount
3381
+ * the full formula editor on the next tick (it auto-focuses) and
3382
+ * snapshot the target cell so blur-ordering races can't mis-route
3383
+ * the commit to a different row. */
3384
+ onFormulaBarInputFocus(): void;
3385
+ onFormulaBarEditorChange(value: string): void;
3386
+ onFormulaBarEditorCommit(): void;
3387
+ onFormulaBarEditorCancel(): void;
3388
+ /** Commit-on-outside-focus: when the user tabs or clicks truly away
3389
+ * from the bar (not onto a grid cell — cells aren't focusable so they
3390
+ * don't steal focus), persist the draft. */
3391
+ onFormulaBarWrapperFocusout(event: FocusEvent): void;
3392
+ private exitFormulaBarEdit;
3393
+ private commitFormulaBar;
3394
+ /**
3395
+ * Convert a formula-bar A1 draft to REF long-form storage. Kept as a
3396
+ * member so it can re-use the grid's reactive context without threading
3397
+ * `fields` / `rowIds` through every caller.
3398
+ */
3399
+ private a1FormulaToStorage;
3400
+ onFormulaReferenceClick(): void;
3007
3401
  private static readonly DENSITY_ROW_HEIGHT;
3008
3402
  onSettingsClick(): void;
3009
3403
  private applySettings;
@@ -3013,6 +3407,12 @@ declare class MozGridComponent<T = unknown> {
3013
3407
  private getRangeFields;
3014
3408
  private getRowSelectionIds;
3015
3409
  private getAllVisibleFields;
3410
+ /**
3411
+ * Resolves a list of internal `HistoryCellChange` records into the public
3412
+ * `BulkCellChange[]` shape exposed on bulk events. Looks up each row's
3413
+ * configured id so consumers can persist changes without a second pass.
3414
+ */
3415
+ private toBulkCellChanges;
3016
3416
  private clearSelectionAndCloseBar;
3017
3417
  onBulkEdit(): void;
3018
3418
  onBulkCopy(): void;
@@ -3025,7 +3425,7 @@ declare class MozGridComponent<T = unknown> {
3025
3425
  private deleteSelectedRows;
3026
3426
  private coerceAndValidate;
3027
3427
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MozGridComponent<any>, never>;
3028
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MozGridComponent<any>, "moz-grid", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "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; }; "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; }; "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"; }, ["columnDefs", "toolbarDefs", "emptyDefs"], ["[mozGridFilterTags]"], true, never>;
3428
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MozGridComponent<any>, "moz-grid", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "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; }; "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"; }, ["columnDefs", "toolbarDefs", "emptyDefs"], ["[mozGridFilterTags]"], true, never>;
3029
3429
  }
3030
3430
 
3031
3431
  interface GroupRow<T = unknown> {
@@ -3099,6 +3499,13 @@ declare class MozGridColumnDef<T = unknown> {
3099
3499
  readonly hideable: _angular_core.InputSignal<boolean>;
3100
3500
  readonly freezable: _angular_core.InputSignal<boolean>;
3101
3501
  readonly headerMenuDisabled: _angular_core.InputSignal<boolean>;
3502
+ /**
3503
+ * Mirrors `ColumnDef.allowFormula`. Required so the template binding
3504
+ * `[allowFormula]="true"` is forwarded into the generated column def —
3505
+ * without it, `FormulaEngine.syncFromSource` cannot detect this column
3506
+ * and any baked-in `=…` value is rendered as a raw string.
3507
+ */
3508
+ readonly allowFormula: _angular_core.InputSignal<boolean>;
3102
3509
  readonly pinned: _angular_core.InputSignal<"start" | "end" | null>;
3103
3510
  readonly cellEditor: _angular_core.InputSignal<CellEditorType | undefined>;
3104
3511
  readonly cellEditorOptions: _angular_core.InputSignal<MozSelectOption[] | undefined>;
@@ -3111,7 +3518,7 @@ declare class MozGridColumnDef<T = unknown> {
3111
3518
  readonly filterTemplateContent: _angular_core.Signal<TemplateRef<unknown> | undefined>;
3112
3519
  toColumnDef(): ColumnDef<T>;
3113
3520
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MozGridColumnDef<any>, never>;
3114
- 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; }; "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; }; "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>;
3521
+ 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; }; "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>;
3115
3522
  }
3116
3523
 
3117
3524
  declare class GridEngine<T = unknown> {
@@ -3190,6 +3597,7 @@ declare class InlineEditEngine<T = unknown> {
3190
3597
  private readonly state;
3191
3598
  private readonly history;
3192
3599
  private readonly gridEngine;
3600
+ private readonly formulaEngine;
3193
3601
  startEdit(rowIndex: number, field: string): void;
3194
3602
  /**
3195
3603
  * Excel-style "typing-to-edit": starts the editor with the cell value replaced
@@ -3202,7 +3610,22 @@ declare class InlineEditEngine<T = unknown> {
3202
3610
  commitEdit(): CellEditEvent<T> | null;
3203
3611
  cancelEdit(): CellEditCancelEvent | null;
3204
3612
  isEditing(rowIndex: number, colIndex: number): boolean;
3613
+ /**
3614
+ * Convert an A1-surface formula draft to REF long-form storage. Strings
3615
+ * that do not start with `=` are returned untouched — callers should
3616
+ * only invoke this on values they already know to be formulas.
3617
+ */
3618
+ private a1DraftToStorage;
3205
3619
  resolveEditorType(field: string, value: unknown): CellEditorType;
3620
+ /**
3621
+ * Route a cell-edit commit through the formula engine when appropriate:
3622
+ * - `allowFormula` column + new value starts with `=` → register formula.
3623
+ * - `allowFormula` column + old value was a formula but new one isn't
3624
+ * → remove the stored formula (reverts to a plain literal).
3625
+ * - Any cell change → invalidate dependents so their cached value
3626
+ * refreshes (no-op when the engine has zero dependents on this cell).
3627
+ */
3628
+ private updateFormulaEngine;
3206
3629
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<InlineEditEngine<any>, never>;
3207
3630
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<InlineEditEngine<any>>;
3208
3631
  }
@@ -3378,8 +3801,13 @@ declare class FilterEngine<T = unknown> {
3378
3801
  /** Returns the filter data type inferred for a column. */
3379
3802
  getFilterType(field: string): FilterDataType;
3380
3803
  /**
3381
- * Builds the column descriptors consumed by the filter builder UI. The
3382
- * returned list includes only filterable columns.
3804
+ * Builds the column descriptors consumed by the filter builder UI.
3805
+ *
3806
+ * All `filterable` columns are included, even those that ship a custom
3807
+ * `filterTemplate`. The custom template drives the inline header filter
3808
+ * row (quick per-column UI), while the builder — rendered in the toolbar
3809
+ * drawer and in the column-menu overlay — always uses the generic editors.
3810
+ * The two mechanisms are complementary and can coexist on the same column.
3383
3811
  */
3384
3812
  describeFilterableColumns(): FilterColumnDescriptor[];
3385
3813
  describeColumn(def: ColumnDef<T>): FilterColumnDescriptor;
@@ -3555,6 +3983,27 @@ declare class InfiniteScrollEngine<T = unknown> {
3555
3983
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<InfiniteScrollEngine<any>>;
3556
3984
  }
3557
3985
 
3986
+ /**
3987
+ * Default registry of formula functions (Phase 1 scope).
3988
+ *
3989
+ * Implementations are intentionally compact and reuse the coercion helpers
3990
+ * in `models/formula.model.ts`. Each entry is pure, side-effect free and
3991
+ * returns a `FormulaValue` — errors are data, never exceptions.
3992
+ *
3993
+ * Naming: keys are uppercase; the parser uppercases every identifier before
3994
+ * dispatch so consumers can write `sum(a, b)` or `SUM(a,b)` interchangeably.
3995
+ */
3996
+
3997
+ /**
3998
+ * Default function registry. Consumers can spread this into their own
3999
+ * registry to extend it:
4000
+ *
4001
+ * ```
4002
+ * const registry = { ...DEFAULT_FORMULA_FUNCTIONS, TVA: myTvaFn };
4003
+ * ```
4004
+ */
4005
+ declare const DEFAULT_FORMULA_FUNCTIONS: FormulaFunctionRegistry;
4006
+
3558
4007
  declare function trackDisplayRow<T>(_index: number, row: DisplayRow<T>): string;
3559
4008
  declare function trackByField(_index: number, col: {
3560
4009
  field: string;
@@ -3628,6 +4077,8 @@ declare class MozGridFilterOverlayDirective implements OnDestroy {
3628
4077
  declare class MozGridHeaderCellComponent<T = unknown> {
3629
4078
  private readonly state;
3630
4079
  private readonly filterEngine;
4080
+ /** Optional — only present when the grid provides `FormulaEngine`. */
4081
+ private readonly formulaEngine;
3631
4082
  readonly columnState: _angular_core.InputSignal<ColumnStateEntry>;
3632
4083
  readonly def: _angular_core.InputSignal<ColumnDef<T>>;
3633
4084
  readonly isLast: _angular_core.InputSignal<boolean>;
@@ -3650,6 +4101,19 @@ declare class MozGridHeaderCellComponent<T = unknown> {
3650
4101
  }>;
3651
4102
  readonly resizeStart: _angular_core.OutputEmitterRef<MouseEvent>;
3652
4103
  readonly label: _angular_core.Signal<string>;
4104
+ /**
4105
+ * Spreadsheet-style column letter (`A`, `B`, …, `AA`, `AB`, …) matching
4106
+ * this column's position in the visible column order. Shown above each
4107
+ * header while a formula is being edited so the user sees exactly what
4108
+ * letter to type to reference a cell in this column.
4109
+ */
4110
+ readonly columnLetter: _angular_core.Signal<string>;
4111
+ /**
4112
+ * `true` when the user is editing a formula-capable cell. The header
4113
+ * uses this to show the column-letter badge — a visual cue matching the
4114
+ * A1 references the user types in the formula bar.
4115
+ */
4116
+ readonly showColumnLetter: _angular_core.Signal<boolean>;
3653
4117
  readonly menuItems: _angular_core.Signal<MozActionListItem[]>;
3654
4118
  onHeaderClick(event: MouseEvent): void;
3655
4119
  onMenuItemClick(item: MozActionListItem): void;
@@ -3731,6 +4195,9 @@ declare class MozGridCellComponent<T = unknown> {
3731
4195
  private readonly validationEngine;
3732
4196
  private readonly clipboard;
3733
4197
  private readonly gridEngine;
4198
+ /** Optional: present only when the grid provides `FormulaEngine`. */
4199
+ private readonly formulaEngine;
4200
+ private readonly refHighlight;
3734
4201
  private readonly elRef;
3735
4202
  private preEditWidth;
3736
4203
  constructor();
@@ -3747,12 +4214,37 @@ declare class MozGridCellComponent<T = unknown> {
3747
4214
  readonly resolvedMinWidth: _angular_core.Signal<number>;
3748
4215
  readonly commitEdit: _angular_core.OutputEmitterRef<void>;
3749
4216
  readonly cancelEdit: _angular_core.OutputEmitterRef<void>;
4217
+ onFormulaCancel(): void;
3750
4218
  readonly cellTemplate: _angular_core.Signal<_angular_core.TemplateRef<unknown> | null>;
3751
4219
  readonly editTemplate: _angular_core.Signal<_angular_core.TemplateRef<unknown> | null>;
3752
4220
  readonly updateDraftFn: (value: unknown) => void;
3753
4221
  readonly commitEditFn: () => void;
4222
+ /**
4223
+ * Stable cell address for the formula engine. `null` when the column
4224
+ * isn't formula-enabled or the row lacks a stable id (e.g. headers).
4225
+ */
4226
+ private readonly formulaAddr;
4227
+ /**
4228
+ * Last-evaluated `FormulaValue` for this cell, or `null` when the cell
4229
+ * holds no formula. Reactivity is driven by `formulaEngine.values`.
4230
+ */
4231
+ readonly formulaValue: _angular_core.Signal<FormulaValue | null>;
3754
4232
  readonly value: _angular_core.Signal<unknown>;
3755
4233
  readonly displayValue: _angular_core.Signal<string>;
4234
+ /** `true` when the current cell value is a formula error (e.g. `#DIV/0!`). */
4235
+ readonly hasFormulaError: _angular_core.Signal<boolean>;
4236
+ /**
4237
+ * Currently editing and the draft is a formula (starts with `=`).
4238
+ * Drives the switch to `MozGridFormulaEditorComponent` instead of the
4239
+ * default text input.
4240
+ */
4241
+ readonly isFormulaEditing: _angular_core.Signal<boolean>;
4242
+ /**
4243
+ * Palette CSS var for the coloured border shown when this cell is
4244
+ * currently referenced by the formula being edited elsewhere. `null`
4245
+ * when no editor is active or this cell is not referenced.
4246
+ */
4247
+ readonly refHighlightColor: _angular_core.Signal<string | null>;
3756
4248
  readonly editState: _angular_core.Signal<_mozaic_ds_angular.CellEditState>;
3757
4249
  readonly isEditing: _angular_core.Signal<boolean>;
3758
4250
  readonly editorType: _angular_core.Signal<CellEditorType>;
@@ -4269,8 +4761,10 @@ declare class MozTreeComponent<T = unknown> {
4269
4761
  readonly selectedIds: _angular_core.InputSignal<Set<string | number>>;
4270
4762
  readonly loadChildren: _angular_core.InputSignal<LoadChildrenFn<T> | null>;
4271
4763
  readonly indentSize: _angular_core.InputSignal<number>;
4764
+ readonly virtualScroll: _angular_core.InputSignal<boolean | "auto">;
4272
4765
  readonly virtualScrollThreshold: _angular_core.InputSignal<number>;
4273
4766
  readonly rowHeight: _angular_core.InputSignal<number>;
4767
+ readonly viewportHeight: _angular_core.InputSignal<string>;
4274
4768
  readonly _defaultTemplate: _angular_core.Signal<MozTreeNodeTemplateDirective | undefined>;
4275
4769
  readonly _typedTemplates: _angular_core.Signal<readonly MozTreeNodeTemplateDirective[]>;
4276
4770
  readonly nodeTemplate: _angular_core.Signal<TemplateRef<TreeNodeContext<T>> | null>;
@@ -4291,7 +4785,7 @@ declare class MozTreeComponent<T = unknown> {
4291
4785
  trackNode(_index: number, node: TreeNode<T>): string | number;
4292
4786
  trackFlatNode(_index: number, flat: FlatNode<T>): string | number;
4293
4787
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MozTreeComponent<any>, never>;
4294
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MozTreeComponent<any>, "moz-tree", never, { "nodes": { "alias": "nodes"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "expandedIds": { "alias": "expandedIds"; "required": false; "isSignal": true; }; "selectedIds": { "alias": "selectedIds"; "required": false; "isSignal": true; }; "loadChildren": { "alias": "loadChildren"; "required": false; "isSignal": true; }; "indentSize": { "alias": "indentSize"; "required": false; "isSignal": true; }; "virtualScrollThreshold": { "alias": "virtualScrollThreshold"; "required": false; "isSignal": true; }; "rowHeight": { "alias": "rowHeight"; "required": false; "isSignal": true; }; }, { "expandedIdsChange": "expandedIdsChange"; "selectionChange": "selectionChange"; }, ["_defaultTemplate", "_typedTemplates"], never, true, never>;
4788
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MozTreeComponent<any>, "moz-tree", never, { "nodes": { "alias": "nodes"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "expandedIds": { "alias": "expandedIds"; "required": false; "isSignal": true; }; "selectedIds": { "alias": "selectedIds"; "required": false; "isSignal": true; }; "loadChildren": { "alias": "loadChildren"; "required": false; "isSignal": true; }; "indentSize": { "alias": "indentSize"; "required": false; "isSignal": true; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; "isSignal": true; }; "virtualScrollThreshold": { "alias": "virtualScrollThreshold"; "required": false; "isSignal": true; }; "rowHeight": { "alias": "rowHeight"; "required": false; "isSignal": true; }; "viewportHeight": { "alias": "viewportHeight"; "required": false; "isSignal": true; }; }, { "expandedIdsChange": "expandedIdsChange"; "selectionChange": "selectionChange"; }, ["_defaultTemplate", "_typedTemplates"], never, true, never>;
4295
4789
  }
4296
4790
 
4297
4791
  declare class MozTreeNodeComponent<T = unknown> {
@@ -4332,5 +4826,5 @@ declare class MozTreeNodeComponent<T = unknown> {
4332
4826
  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>;
4333
4827
  }
4334
4828
 
4335
- export { ACTION_LISTBOX_CONFIG, ActionListboxContainerComponent, ActionListboxRef, BuiltInMenuComponent, CellSelectionEngine, CellValidationEngine, ColumnReorderEngine, ColumnResizeEngine, DEFAULT_ACTION_LISTBOX_CONFIG, DEFAULT_GRID_OPTIONS, DEFAULT_MODAL_CONFIG, DEFAULT_TOASTER_CONFIG, DRAWER_CONFIG, DRAWER_DATA, DrawerContainerComponent, ExpandableRowEngine, ExportEngine, FilterEngine, 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, MozDatepickerComponent, MozDividerComponent, MozDrawerComponent, MozDrawerFooterDirective, MozDrawerRef, MozDrawerService, MozFieldComponent, MozFieldGroupComponent, MozFileUploaderComponent, MozFileUploaderItemComponent, MozFlagComponent, MozGridBodyComponent, MozGridCellComponent, MozGridColumnDef, MozGridColumnVisibilityPanelComponent, MozGridComponent, 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, POPOVER_CONFIG, POPOVER_DATA, PaginationEngine, PopoverContainerComponent, PopoverRef, PopoverService, RowSelectionEngine, SortEngine, StatePersistenceEngine, TOASTER_CONFIG, TreeEngine, TreeKeyboardService, TreeSelectionService, TreeStateService, isSection, trackByField, trackDisplayRow };
4336
- export type { ActionListboxConfig, ActionListboxPosition, ActiveFilter, BulkCopyEvent, BulkDeleteEvent, BulkEditEvent, BulkPasteEvent, CellCoord, CellEditCancelEvent, CellEditEvent, CellEditState, CellEditorType, CellError, CellRange, CellSelectionEvent, ColumnDef, ColumnFreezeEvent, ColumnReorderEvent, ColumnResizeEvent, ColumnSearchToggleEvent, ColumnStateEntry, ColumnVisibilityEvent, DisplayRow, ExportOptions, FillDownEvent, FilterEvent, FlatNode, GridDensity, GridEmptyContext, GridEmptyKind, GridEventMap, GridEventType, 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, PageEvent, PaginationState, PersistedGridState, PopoverConfig, PopoverTriggerMode, RowSelectionEvent, SelectAllMode, SortDef, SortDirection, SortEvent, TreeDisplayRow, TreeNode, TreeNodeConfig, TreeNodeContext, TreeSelectionMode };
4829
+ 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_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, MozDatepickerComponent, MozDividerComponent, MozDrawerComponent, MozDrawerFooterDirective, MozDrawerRef, MozDrawerService, MozFieldComponent, MozFieldGroupComponent, MozFileUploaderComponent, MozFileUploaderItemComponent, MozFlagComponent, MozGridBodyComponent, MozGridCellComponent, MozGridColumnDef, MozGridColumnVisibilityPanelComponent, MozGridComponent, 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, POPOVER_CONFIG, POPOVER_DATA, PaginationEngine, PopoverContainerComponent, PopoverRef, PopoverService, RowSelectionEngine, SortEngine, StatePersistenceEngine, TOASTER_CONFIG, TreeEngine, TreeKeyboardService, TreeSelectionService, TreeStateService, addressToA1, firstError, isSection, toBoolean, toNumber, toStringValue, trackByField, trackDisplayRow };
4830
+ export type { ActionListboxConfig, ActionListboxPosition, ActiveFilter, BulkCellChange, BulkCopyEvent, BulkDeleteEvent, BulkEditEvent, BulkPasteEvent, CellAddress, CellCoord, CellEditCancelEvent, CellEditEvent, CellEditState, CellEditorType, CellError, CellRange, CellSelectionEvent, ColumnDef, ColumnFreezeEvent, ColumnReorderEvent, ColumnResizeEvent, ColumnSearchToggleEvent, ColumnStateEntry, ColumnVisibilityEvent, DisplayRow, ExportOptions, FillDownEvent, FilterEvent, FlatNode, FormulaArity, FormulaChangeEvent, FormulaDataSource, FormulaError, FormulaErrorEvent, FormulaEvalContext, FormulaFunctionDocs, FormulaFunctionImpl, FormulaFunctionRegistry, FormulaValue, GridDensity, GridEmptyContext, GridEmptyKind, GridEventMap, GridEventType, 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, PageEvent, PaginationState, PersistedGridState, PopoverConfig, PopoverTriggerMode, RowSelectionEvent, SelectAllMode, SortDef, SortDirection, SortEvent, TreeDisplayRow, TreeNode, TreeNodeConfig, TreeNodeContext, TreeSelectionMode };