@ng-forge/dynamic-forms 1.0.0-rc.4 → 1.1.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +25 -32
  3. package/fesm2022/{ng-forge-dynamic-forms-array-field.component-DZWGHZjj.mjs → ng-forge-dynamic-forms-array-field.component-CIheZh11.mjs} +5 -5
  4. package/fesm2022/{ng-forge-dynamic-forms-array-field.component-DZWGHZjj.mjs.map → ng-forge-dynamic-forms-array-field.component-CIheZh11.mjs.map} +1 -1
  5. package/fesm2022/{ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-ueIHE70C.mjs → ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-C9aVachF.mjs} +2 -2
  6. package/fesm2022/{ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-ueIHE70C.mjs.map → ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-C9aVachF.mjs.map} +1 -1
  7. package/fesm2022/{ng-forge-dynamic-forms-container-field.component-Dt5yfGQ7.mjs → ng-forge-dynamic-forms-container-field.component-DNafCSO8.mjs} +5 -5
  8. package/fesm2022/{ng-forge-dynamic-forms-container-field.component-Dt5yfGQ7.mjs.map → ng-forge-dynamic-forms-container-field.component-DNafCSO8.mjs.map} +1 -1
  9. package/fesm2022/{ng-forge-dynamic-forms-css-wrapper.component-AScQAJTQ.mjs → ng-forge-dynamic-forms-css-wrapper.component-BmHGlmES.mjs} +4 -4
  10. package/fesm2022/{ng-forge-dynamic-forms-css-wrapper.component-AScQAJTQ.mjs.map → ng-forge-dynamic-forms-css-wrapper.component-BmHGlmES.mjs.map} +1 -1
  11. package/fesm2022/{ng-forge-dynamic-forms-group-field.component-BgoDlVYp.mjs → ng-forge-dynamic-forms-group-field.component-CKVIw2K5.mjs} +5 -5
  12. package/fesm2022/{ng-forge-dynamic-forms-group-field.component-BgoDlVYp.mjs.map → ng-forge-dynamic-forms-group-field.component-CKVIw2K5.mjs.map} +1 -1
  13. package/fesm2022/ng-forge-dynamic-forms-integration.mjs +70 -51
  14. package/fesm2022/ng-forge-dynamic-forms-integration.mjs.map +1 -1
  15. package/fesm2022/ng-forge-dynamic-forms-internal.mjs +1430 -1408
  16. package/fesm2022/ng-forge-dynamic-forms-internal.mjs.map +1 -1
  17. package/fesm2022/{ng-forge-dynamic-forms-ng-forge-dynamic-forms-CRCXs4f8.mjs → ng-forge-dynamic-forms-ng-forge-dynamic-forms-CBawLbtp.mjs} +70 -57
  18. package/fesm2022/ng-forge-dynamic-forms-ng-forge-dynamic-forms-CBawLbtp.mjs.map +1 -0
  19. package/fesm2022/{ng-forge-dynamic-forms-page-field.component-W9f5VyQJ.mjs → ng-forge-dynamic-forms-page-field.component-BRixkgyS.mjs} +5 -5
  20. package/fesm2022/{ng-forge-dynamic-forms-page-field.component-W9f5VyQJ.mjs.map → ng-forge-dynamic-forms-page-field.component-BRixkgyS.mjs.map} +1 -1
  21. package/fesm2022/{ng-forge-dynamic-forms-row-wrapper.component-BlVa801t.mjs → ng-forge-dynamic-forms-row-wrapper.component-BBWmqQA_.mjs} +4 -4
  22. package/fesm2022/{ng-forge-dynamic-forms-row-wrapper.component-BlVa801t.mjs.map → ng-forge-dynamic-forms-row-wrapper.component-BBWmqQA_.mjs.map} +1 -1
  23. package/fesm2022/{ng-forge-dynamic-forms-text-field.component-CNCpmf5_.mjs → ng-forge-dynamic-forms-text-field.component-C-f80sbk.mjs} +4 -4
  24. package/fesm2022/{ng-forge-dynamic-forms-text-field.component-CNCpmf5_.mjs.map → ng-forge-dynamic-forms-text-field.component-C-f80sbk.mjs.map} +1 -1
  25. package/fesm2022/ng-forge-dynamic-forms.mjs +1 -1
  26. package/package.json +5 -5
  27. package/types/ng-forge-dynamic-forms-integration.d.ts +29 -3
  28. package/types/ng-forge-dynamic-forms-internal.d.ts +50 -201
  29. package/fesm2022/ng-forge-dynamic-forms-ng-forge-dynamic-forms-CRCXs4f8.mjs.map +0 -1
@@ -249,7 +249,7 @@ type FormFieldStateMap = Record<string, FieldStateInfo | undefined>;
249
249
  /** Field state context for the current field being evaluated. */
250
250
  type FieldStateContext = FieldStateInfo;
251
251
 
252
- interface EvaluationContext<TValue = unknown, TFormValue extends Record<string, unknown> = any> {
252
+ interface EvaluationContext<TValue = unknown, TFormValue extends Record<string, unknown> = Record<string, unknown>> {
253
253
  /** Current field value */
254
254
  fieldValue: TValue;
255
255
  /** Form value for the current evaluation scope. */
@@ -302,12 +302,12 @@ interface CustomFunctionOptions {
302
302
  scope?: CustomFunctionScope;
303
303
  }
304
304
  /** Custom function signature for conditional expressions */
305
- type CustomFunction<TFormValue extends Record<string, unknown> = any> = (context: EvaluationContext<unknown, TFormValue>) => unknown;
305
+ type CustomFunction<TFormValue extends Record<string, unknown> = Record<string, unknown>> = (context: EvaluationContext<unknown, TFormValue>) => unknown;
306
306
 
307
307
  /** Async function for derivations — returns any value. */
308
- type AsyncDerivationFunction<TFormValue extends Record<string, unknown> = any> = (context: EvaluationContext<unknown, TFormValue>) => Promise<unknown> | Observable<unknown>;
308
+ type AsyncDerivationFunction<TFormValue extends Record<string, unknown> = Record<string, unknown>> = (context: EvaluationContext<unknown, TFormValue>) => Promise<unknown> | Observable<unknown>;
309
309
  /** Async function for conditions — returns boolean. */
310
- type AsyncConditionFunction<TFormValue extends Record<string, unknown> = any> = (context: EvaluationContext<unknown, TFormValue>) => Promise<boolean> | Observable<boolean>;
310
+ type AsyncConditionFunction<TFormValue extends Record<string, unknown> = Record<string, unknown>> = (context: EvaluationContext<unknown, TFormValue>) => Promise<boolean> | Observable<boolean>;
311
311
 
312
312
  /** Configuration for an HTTP request used by declarative HTTP validators, derivations, and conditions. */
313
313
  interface HttpRequestConfig {
@@ -846,7 +846,7 @@ type ProcessField<T, D extends number = 5> = [D] extends [never] ? Record<string
846
846
  } : never : T extends {
847
847
  type: 'text';
848
848
  } ? never : T extends {
849
- type: 'submit' | 'button' | 'next' | 'previous' | 'addArrayItem' | 'removeArrayItem';
849
+ type: 'submit' | 'button' | 'next' | 'previous' | 'addArrayItem' | 'add-array-item' | 'prependArrayItem' | 'prepend-array-item' | 'insertArrayItem' | 'insert-array-item' | 'removeArrayItem' | 'remove-array-item' | 'popArrayItem' | 'pop-array-item' | 'shiftArrayItem' | 'shift-array-item';
850
850
  } ? never : T extends {
851
851
  key: infer K;
852
852
  value: infer V;
@@ -1652,6 +1652,13 @@ interface ButtonLogicContext {
1652
1652
  currentPageValid?: Signal<boolean>;
1653
1653
  /** Current form value for evaluating conditional expressions */
1654
1654
  formValue?: unknown;
1655
+ /**
1656
+ * Optional factory returning the full evaluation context (including `externalData`
1657
+ * and `customFunctions`) used to evaluate `ConditionalExpression` conditions.
1658
+ * Invoked lazily during evaluation so external-data signal reads stay reactive.
1659
+ * When omitted, a minimal context (form value only) is used.
1660
+ */
1661
+ evaluationContext?: () => EvaluationContext;
1655
1662
  /** Optional logger for diagnostic output. Falls back to no-op logger if not provided. */
1656
1663
  logger?: Logger;
1657
1664
  }
@@ -1681,6 +1688,13 @@ interface NonFieldLogicContext {
1681
1688
  explicitValue?: boolean;
1682
1689
  /** Current form value for evaluating conditional expressions */
1683
1690
  formValue?: unknown;
1691
+ /**
1692
+ * Optional factory returning the full evaluation context (including `externalData`
1693
+ * and `customFunctions`) used to evaluate `ConditionalExpression` conditions.
1694
+ * Invoked lazily during evaluation so external-data signal reads stay reactive.
1695
+ * When omitted, a minimal context (form value only) is used.
1696
+ */
1697
+ evaluationContext?: () => EvaluationContext;
1684
1698
  /** Optional logger for diagnostic output. Falls back to no-op logger if not provided. */
1685
1699
  logger?: Logger;
1686
1700
  }
@@ -1726,6 +1740,18 @@ declare function evaluateNonFieldDisabled(ctx: NonFieldLogicContext): boolean;
1726
1740
  * @returns A computed signal that returns true when the element should be disabled
1727
1741
  */
1728
1742
  declare function resolveNonFieldDisabled(ctx: NonFieldLogicContext): Signal<boolean>;
1743
+ /**
1744
+ * Builds a lazy full evaluation-context factory (with `externalData` and `customFunctions`)
1745
+ * for a non-form-bound element. Call from a mapper factory body (injection context); the
1746
+ * returned thunk is invoked lazily inside the mapper/resolver computed so external-data
1747
+ * signal reads stay reactive. Single source for that factory, shared by the container/text
1748
+ * mappers (via `applyHiddenLogic`) and the button mappers.
1749
+ */
1750
+ declare function injectNonFieldEvaluationContext(fieldDef: {
1751
+ key?: string;
1752
+ }, options?: {
1753
+ scopeToArrayItem?: boolean;
1754
+ }): () => EvaluationContext;
1729
1755
 
1730
1756
  /** Text element type for rendering different HTML text elements */
1731
1757
  type TextElementType = 'p' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'span';
@@ -1967,11 +1993,12 @@ declare const ADDON_TYPE_REGISTRY: InjectionToken<Map<string, AddonTypeDefinitio
1967
1993
  declare const ADDON_TYPE_COMPONENT_CACHE: InjectionToken<Map<string, Type<unknown>>>;
1968
1994
 
1969
1995
  /**
1970
- * Multi-provider token used by `withCustomAddon(...)` features to contribute
1971
- * addon type definitions. `provideDynamicForm` aggregates all values into
1972
- * the form-scoped `ADDON_TYPE_REGISTRY` map.
1996
+ * Multi-provider token used by `withCustomAddon(...)` features and UI adapters
1997
+ * to contribute addon type definitions. `provideDynamicForm` aggregates all
1998
+ * values into the form-scoped `ADDON_TYPE_REGISTRY` map.
1973
1999
  *
1974
- * @internal
2000
+ * Part of the `/integration` adapter contract: each UI adapter registers its
2001
+ * addon kinds against this token in its provider.
1975
2002
  */
1976
2003
  declare const ADDON_TYPE_DEFINITIONS: InjectionToken<readonly AddonTypeDefinition<_ng_forge_dynamic_forms_internal.BaseAddon<_ng_forge_dynamic_forms_internal.AddonSlot>>[]>;
1977
2004
 
@@ -2363,80 +2390,18 @@ declare class AsyncConditionFunctionCacheService {
2363
2390
  readonly asyncConditionFunctionCache: Map<string, LogicFn<unknown, boolean>>;
2364
2391
  }
2365
2392
 
2366
- /** Creates a logic function for an async condition. */
2367
- declare function createAsyncConditionLogicFunction<TValue>(condition: AsyncCondition): LogicFn<TValue, boolean>;
2368
-
2369
2393
  /**
2370
2394
  * Evaluate conditional expression
2371
2395
  * Uses secure AST-based parsing for JavaScript expressions
2372
2396
  */
2373
2397
  declare function evaluateCondition(expression: ConditionalExpression, context: EvaluationContext): boolean;
2374
2398
 
2375
- /**
2376
- * Trigger value carried through the debounced reactive pipeline.
2377
- *
2378
- * @internal
2379
- */
2380
- interface Trigger<TPayload> {
2381
- key: string;
2382
- payload: TPayload;
2383
- }
2384
- /**
2385
- * Configuration passed to {@link createDebouncedResourceLogicFn}.
2386
- *
2387
- * @internal
2388
- */
2389
- interface DebouncedResourceLogicFnConfig<TValue, TPayload, TResult> {
2390
- /** Default value returned by the resource while loading / pending. */
2391
- pendingValue: TResult;
2392
- /** Debounce window (ms) applied to the trigger signal before the resource sees it. */
2393
- debounceMs: number;
2394
- injector: Injector;
2395
- /**
2396
- * Builds the per-emission inner observable. Called every time the debounced
2397
- * trigger key changes; the resource swaps to the new stream automatically.
2398
- */
2399
- buildStream: (payload: TPayload) => Observable<TResult>;
2400
- /**
2401
- * Called per LogicFn invocation. Returns one of:
2402
- * - `{ kind: 'trigger', key, payload }` — set the trigger to this and
2403
- * return the (potentially still-loading) resource value.
2404
- * - `{ kind: 'returnEarly', value }` — bypass the resource and return
2405
- * this value directly (used by HTTP for response-cache hits — the
2406
- * cached value is authoritative and overrides any sticky resource value).
2407
- * - `{ kind: 'holdPrevious' }` — bypass the resource update but return
2408
- * the resource's current sticky value (its last resolved value via
2409
- * `withPreviousValue`, or `pendingValue` if it never resolved). Used
2410
- * by HTTP when the request template is temporarily unresolvable so
2411
- * the UI doesn't flicker back to `pendingValue`.
2412
- */
2413
- resolve: (ctx: FieldContext<TValue>) => {
2414
- kind: 'trigger';
2415
- key: string;
2416
- payload: TPayload;
2417
- } | {
2418
- kind: 'returnEarly';
2419
- value: TResult;
2420
- } | {
2421
- kind: 'holdPrevious';
2422
- };
2423
- }
2424
- /**
2425
- * Shared scaffolding for both async-function and HTTP condition LogicFns.
2426
- *
2427
- * @internal
2428
- */
2429
- declare function createDebouncedResourceLogicFn<TValue, TPayload, TResult>(config: DebouncedResourceLogicFnConfig<TValue, TPayload, TResult>): LogicFn<TValue, TResult>;
2430
-
2431
2399
  /** DI-scoped cache for HTTP condition logic functions. */
2432
2400
  declare class HttpConditionFunctionCacheService {
2433
2401
  /** Cache for HTTP condition logic functions, keyed by serialized condition. */
2434
2402
  readonly httpConditionFunctionCache: Map<string, LogicFn<unknown, boolean>>;
2435
2403
  }
2436
2404
 
2437
- /** Creates a logic function for an HTTP condition. */
2438
- declare function createHttpConditionLogicFunction<TValue>(condition: HttpCondition): LogicFn<TValue, boolean>;
2439
-
2440
2405
  /**
2441
2406
  * Create a logic function from a conditional expression.
2442
2407
  *
@@ -2619,24 +2584,6 @@ declare class ExpressionParserError extends DynamicFormError {
2619
2584
  interface EvaluationScope {
2620
2585
  [key: string]: unknown;
2621
2586
  }
2622
- /** Safely evaluates an AST node with a given context */
2623
- declare class Evaluator {
2624
- private readonly scope;
2625
- private readonly expression;
2626
- constructor(scope: EvaluationScope, expression: string);
2627
- /** Evaluate an AST node */
2628
- evaluate(node: ASTNode): unknown;
2629
- private evaluateIdentifier;
2630
- private evaluateMemberAccess;
2631
- private evaluateComputedMemberAccess;
2632
- private evaluateBinaryOp;
2633
- private evaluateUnaryOp;
2634
- private evaluateCallExpression;
2635
- private evaluateArrayLiteral;
2636
- private evaluateObjectLiteral;
2637
- private evaluateArrowFunction;
2638
- private isMethodSafe;
2639
- }
2640
2587
 
2641
2588
  /** Secure expression parser that uses AST-based evaluation */
2642
2589
  declare class ExpressionParser {
@@ -2656,66 +2603,6 @@ declare class ExpressionParser {
2656
2603
  };
2657
2604
  }
2658
2605
 
2659
- /**
2660
- * Parses tokens into an Abstract Syntax Tree (AST)
2661
- * Uses recursive descent parsing with operator precedence
2662
- */
2663
- declare class Parser {
2664
- private tokens;
2665
- private current;
2666
- private readonly expression;
2667
- constructor(expression: string);
2668
- /** Parse the expression into an AST */
2669
- parse(): ASTNode;
2670
- private parseExpression;
2671
- /**
2672
- * Ternary `test ? consequent : alternate` — right-associative, sits between
2673
- * the arrow-function check and logical-or in precedence.
2674
- */
2675
- private parseConditional;
2676
- /**
2677
- * Attempts to parse an arrow function. Returns null and leaves position
2678
- * unchanged if the next tokens don't form an arrow function head.
2679
- */
2680
- private tryParseArrowFunction;
2681
- private checkAt;
2682
- private parseLogicalOr;
2683
- private parseLogicalAnd;
2684
- private parseEquality;
2685
- private parseComparison;
2686
- private parseAddition;
2687
- private parseMultiplication;
2688
- private parseUnary;
2689
- private parsePostfix;
2690
- private parsePrimary;
2691
- private parseArgumentList;
2692
- private parseArrayElements;
2693
- private parseObjectProperties;
2694
- private match;
2695
- private check;
2696
- private advance;
2697
- private isAtEnd;
2698
- private peek;
2699
- private previous;
2700
- private consume;
2701
- }
2702
-
2703
- /** Tokenizes an expression string into tokens */
2704
- declare class Tokenizer {
2705
- private position;
2706
- private readonly expression;
2707
- constructor(expression: string);
2708
- /** Tokenize the entire expression */
2709
- tokenize(): Token[];
2710
- private skipWhitespace;
2711
- private nextToken;
2712
- private readString;
2713
- private readNumber;
2714
- private readIdentifierOrKeyword;
2715
- private getKeywordType;
2716
- private readOperatorOrPunctuation;
2717
- }
2718
-
2719
2606
  /** TTL cache for HTTP condition responses with max entries eviction. */
2720
2607
  declare class HttpConditionCache {
2721
2608
  private readonly cache;
@@ -2734,9 +2621,6 @@ declare const HTTP_CONDITION_CACHE: InjectionToken<HttpConditionCache>;
2734
2621
  */
2735
2622
  declare function resolveHttpRequest(config: HttpRequestConfig, context: EvaluationContext): HttpResourceRequest | null;
2736
2623
 
2737
- /** Evaluates an HTTP response against a `HttpValidationResponseMapping` to produce a validation result. */
2738
- declare function evaluateHttpValidationResponse(response: unknown, mapping: HttpValidationResponseMapping, logger: Logger): ValidationError$1 | null;
2739
-
2740
2624
  /**
2741
2625
  * Service that provides field evaluation context by combining
2742
2626
  * field context with root form registry information.
@@ -2774,8 +2658,14 @@ declare class FieldContextRegistryService {
2774
2658
  *
2775
2659
  * @param fieldPath - The key/path of the display-only component
2776
2660
  * @param customFunctions - Optional custom functions for expression evaluation
2777
- */
2778
- createDisplayOnlyContext(fieldPath: string, customFunctions?: Record<string, (context: EvaluationContext) => unknown>): EvaluationContext;
2661
+ * @param arrayScope - When the element lives inside an array item, scopes `formValue`
2662
+ * to that item so conditions resolve against sibling fields, matching leaf fields.
2663
+ */
2664
+ createDisplayOnlyContext(fieldPath: string, customFunctions?: Record<string, (context: EvaluationContext) => unknown>, arrayScope?: {
2665
+ arrayKey: string;
2666
+ index: number;
2667
+ localKey: string;
2668
+ }): EvaluationContext;
2779
2669
  static ɵfac: i0.ɵɵFactoryDeclaration<FieldContextRegistryService, never>;
2780
2670
  static ɵprov: i0.ɵɵInjectableDeclaration<FieldContextRegistryService>;
2781
2671
  }
@@ -2797,7 +2687,7 @@ declare class FunctionRegistryService {
2797
2687
  * @param fn - Function that receives EvaluationContext and returns any value
2798
2688
  * @param options - Optional configuration for the function
2799
2689
  */
2800
- registerCustomFunction(name: string, fn: CustomFunction, options?: CustomFunctionOptions): void;
2690
+ registerCustomFunction<TFormValue extends Record<string, unknown> = Record<string, unknown>>(name: string, fn: CustomFunction<TFormValue>, options?: CustomFunctionOptions): void;
2801
2691
  /**
2802
2692
  * Get the scope of a registered custom function.
2803
2693
  *
@@ -2833,7 +2723,7 @@ declare class FunctionRegistryService {
2833
2723
  *
2834
2724
  * @param derivations - Object mapping function names to derivation functions
2835
2725
  */
2836
- setDerivationFunctions(derivations: Record<string, CustomFunction> | undefined): void;
2726
+ setDerivationFunctions<TFormValue extends Record<string, unknown> = Record<string, unknown>>(derivations: Record<string, CustomFunction<TFormValue>> | undefined): void;
2837
2727
  /** Clear all derivation functions */
2838
2728
  clearDerivationFunctions(): void;
2839
2729
  /**
@@ -2853,7 +2743,7 @@ declare class FunctionRegistryService {
2853
2743
  *
2854
2744
  * @param fns - Object mapping function names to async derivation functions
2855
2745
  */
2856
- setAsyncDerivationFunctions(fns: Record<string, AsyncDerivationFunction> | undefined): void;
2746
+ setAsyncDerivationFunctions<TFormValue extends Record<string, unknown> = Record<string, unknown>>(fns: Record<string, AsyncDerivationFunction<TFormValue>> | undefined): void;
2857
2747
  /** Clear all async derivation functions */
2858
2748
  clearAsyncDerivationFunctions(): void;
2859
2749
  /**
@@ -2873,7 +2763,7 @@ declare class FunctionRegistryService {
2873
2763
  *
2874
2764
  * @param fns - Object mapping function names to async condition functions
2875
2765
  */
2876
- setAsyncConditionFunctions(fns: Record<string, AsyncConditionFunction> | undefined): void;
2766
+ setAsyncConditionFunctions<TFormValue extends Record<string, unknown> = Record<string, unknown>>(fns: Record<string, AsyncConditionFunction<TFormValue>> | undefined): void;
2877
2767
  /** Clear all async condition functions */
2878
2768
  clearAsyncConditionFunctions(): void;
2879
2769
  /**
@@ -3139,19 +3029,6 @@ interface TokenContext {
3139
3029
  */
3140
3030
  declare function resolveTokens(args: readonly (string | number | boolean | null | undefined)[], context: TokenContext): (string | number | boolean | null | undefined | unknown)[];
3141
3031
 
3142
- interface FieldWithHiddenLogic {
3143
- hidden?: boolean;
3144
- logic?: readonly (ContainerLogicConfig | LogicConfig)[];
3145
- }
3146
- /**
3147
- * Applies hidden logic to a mapper's input record.
3148
- *
3149
- * @param inputs The mutable input record to potentially add `hidden` to
3150
- * @param fieldDef The field definition containing `hidden` and `logic`
3151
- * @param rootFormRegistry The root form registry for accessing form state
3152
- */
3153
- declare function applyHiddenLogic(inputs: Record<string, unknown>, fieldDef: FieldWithHiddenLogic, rootFormRegistry: RootFormRegistryService): void;
3154
-
3155
3032
  /**
3156
3033
  * Maps an array field definition to component inputs.
3157
3034
  *
@@ -3563,21 +3440,6 @@ declare function dynamicTextToObservable(value: DynamicText | undefined, injecto
3563
3440
  /** Normalises a {@link DynamicValue} into a `Signal<T>`. */
3564
3441
  declare function resolveDynamicValue<T>(value: DynamicValue<T> | undefined, fallback: T, injector?: Injector): Signal<T>;
3565
3442
 
3566
- /**
3567
- * Generates CSS class string for responsive grid layout based on field column configuration.
3568
- *
3569
- * @param fieldDef - Field definition containing column configuration
3570
- * @returns CSS class string for grid layout, empty if no valid column configuration
3571
- */
3572
- declare function getGridClassString(fieldDef: FieldDef<unknown>): string;
3573
- /**
3574
- * Builds a combined className string from a field definition.
3575
- *
3576
- * @param fieldDef - Field definition containing className and col properties
3577
- * @returns Combined class string, or undefined if no classes
3578
- */
3579
- declare function buildClassName(fieldDef: FieldDef<unknown>): string | undefined;
3580
-
3581
3443
  /**
3582
3444
  * Injection token for configuring the initialization timeout in milliseconds.
3583
3445
  * Defaults to 10 seconds. When the timeout is reached, a warning is logged
@@ -3696,18 +3558,5 @@ declare function assertNever(value: never): never;
3696
3558
  */
3697
3559
  declare function withPreviousValue<T>(input: Resource<T>): Resource<T>;
3698
3560
 
3699
- /**
3700
- * Safely reads `pathKeys` from a FieldContext.
3701
- * Returns an empty array if `pathKeys` is not available (e.g., in tests or older Angular versions).
3702
- */
3703
- declare function safeReadPathKeys(fieldContext: FieldContext<unknown>): readonly string[];
3704
-
3705
- /**
3706
- * Serializes a value to a deterministic string for cache key generation.
3707
- * Unlike JSON.stringify, this sorts object keys to ensure consistent output
3708
- * regardless of property insertion order.
3709
- */
3710
- declare function stableStringify(value: unknown): string;
3711
-
3712
- export { ADDON_ACTION_HANDLERS, ADDON_ACTION_REGISTRY, ADDON_TYPE_COMPONENT_CACHE, ADDON_TYPE_DEFINITIONS, ADDON_TYPE_REGISTRY, ARRAY_CONTEXT, AsyncConditionFunctionCacheService, ComponentInitializedEvent, DEFAULT_PROPS, DEFAULT_VALIDATION_MESSAGES, DEFAULT_WRAPPERS, DEPRECATION_WARNING_TRACKER, DF_FIELD_TEMPLATES, DfAddonSlot, DynamicFormError, DynamicFormLogger, DynamicTextPipe, DynamicValueFunctionCacheService, EMIT_FORM_VALUE_ON_EVENTS, EXTERNAL_DATA, Evaluator, EventBus, ExpressionParser, ExpressionParserError, FIELD_REGISTRY, FIELD_SIGNAL_CONTEXT, FORM_ID_PREFIX, FORM_OPTIONS, FieldContextRegistryService, FunctionRegistryService, GROUP_CONTEXT, HTTP_CONDITION_CACHE, HttpConditionCache, HttpConditionFunctionCacheService, INITIALIZATION_TIMEOUT_MS, LogicFunctionCacheService, NoopLogger, Parser, READONLY_FIELD_TREE_CACHE, RootFormRegistryService, TokenType, Tokenizer, WRAPPER_AUTO_ASSOCIATIONS, WRAPPER_COMPONENT_CACHE, WRAPPER_REGISTRY, applyHiddenLogic, applyMetaToElement, applyValidator, applyValidators, arrayFieldMapper, assertNever, baseFieldMapper, buildBaseInputs, buildClassName, compareValues, containerFieldMapper, createAddonActionRegistry, createAsyncConditionLogicFunction, createDebouncedLogicFunction, createDebouncedResourceLogicFn, createDefaultDerivationLogConfig, createDynamicValueFunction, createFormFieldStateMap, createHttpConditionLogicFunction, createInitializationTracker, createLogicFunction, createWarningTracker, deepMergeDefaults, derivedFromDeferred, detectFormMode, dynamicTextToObservable, evaluateCondition, evaluateHttpValidationResponse, evaluateNonFieldDisabled, evaluateNonFieldHidden, extractExpressionDependencies, extractStringDependencies, getArrayLength, getChangedKeys, getFieldValueHandling, getGridClassString, getNestedValue, groupFieldMapper, hasChildFields, hasCrossFieldWhenCondition, hasFormValue, hasNestedProperty, hasTargetProperty, injectAddonTypeRegistry, injectFieldSignalContext, injectFieldsSupportingAddons, interpolateParams, isArrayField, isCheckedField, isContainerField, isCrossFieldBuiltInValidator, isCrossFieldExpression, isCrossFieldSchema, isCrossFieldStateLogic, isCrossFieldValidator, isDerivationLogicConfig, isDisplayOnlyField, isEqual, isFieldBoundContext, isFormStateCondition, isFunctionHttpValidator, isGenericContainerField, isGroupField, isHiddenField, isLeafField, isNonPagedForm, isPageField, isPagedForm, isResourceBasedValidator, isRowField, isSimplifiedArrayField, isStateLogicConfig, isValidNonPagedForm, isValidPagedForm, isValueBearingField, isValueField, isWrapperTypeDefinition, keyBy, mapValues, memoize, normalizeFieldsArray, omit, pageFieldMapper, readFieldStateInfo, resolveDynamicValue, resolveHttpRequest, resolveNextButtonDisabled, resolveNonFieldDisabled, resolveNonFieldHidden, resolveSubmitButtonDisabled, resolveTokens, rowFieldMapper, runPresetAction, safeReadPathKeys, setupInitializationTracking, shouldLog, stableStringify, textFieldMapper, toReadonlyFieldTree, toReadonlyFieldTreeCached, validatePageNesting, withPreviousValue, writeToFieldValue };
3713
- export type { ASTNode, AddonActionContext, AddonActionHandler, AddonActionPreset, AddonShapeValidator, AddonSlot, AddonTypeDefinition, AddonTypeRegistryRef, AddonTypeSchema, AndCondition, AnyAddon, ArrayAllowedChildren, ArrayButtonConfig, ArrayComponent, ArrayContext, ArrayField, ArrayFieldTree, ArrayItemDefinition, ArrayItemTemplate, ArrayLiteralNode, ArrowFunctionNode, AsyncCondition, AsyncConditionFunction, AsyncCustomValidator, AsyncDerivationFunction, AsyncValidatorConfig, AvailableFieldTypes, BaseAddon, BaseCheckedField, BaseValidatorConfig, BaseValueField, BinaryOpNode, BuiltInValidatorConfig, ButtonLogicContext, CallExpressionNode, CheckedFieldComponent, CommonAddonActionPreset, CommonAddonSlot, ComparisonOperator, ComponentAddon, ComputedMemberAccessNode, ConditionalExpression, ConditionalNode, ContainerAllowedChildren, ContainerComponent, ContainerField, ContainerFieldTypes, ContainerLogicConfig, CrossFieldDetectionContext, CssWrapper, CustomCondition, CustomFnConfig, CustomFunction, CustomFunctionOptions, CustomFunctionScope, CustomValidator, CustomValidatorConfig, DebouncedResourceLogicFnConfig, DeclarativeHttpValidatorConfig, DerivationLogConfig, DerivationLogLevel, DerivationLogicConfig, DerivedFromDeferredOptions, DynamicFormActionRegistry, DynamicFormAddonActionPresetRegistry, DynamicFormAddonRegistry, DynamicFormAddonSlotRegistry, DynamicFormFieldRegistry, DynamicText, DynamicValue, EvaluationContext, EvaluationScope, ExtractField, FieldAddonSupport, FieldAddonSupportEntry, FieldBoundAddonActionContext, FieldComponent, FieldDef, FieldMeta, FieldOption, FieldPathAccess, FieldRegistryContainers, FieldRegistryLeaves, FieldRegistryWrappers, FieldScope, FieldSignalContext, FieldStateContext, FieldStateInfo, FieldTreeRecord, FieldTypeDefinition, FieldValueCondition, FieldWithValidation, FieldWrapper, FormConfig, FormEvent, FormEventConstructor, FormFieldStateMap, FormMode, FormModeDetectionResult, FormOptions, FormStateCondition, FunctionHttpValidatorConfig, GroupAllowedChildren, GroupComponent, GroupContext, GroupField, HiddenField, HiddenScalar, HiddenValue, HttpCondition, HttpCustomValidator, HttpRequestConfig, HttpResourceRequest, HttpValidationResponseMapping, IdentifierNode, InferFormModel, InferFormValue, InitializationTrackingOptions, JavascriptCondition, LazyComponentLoader, LeafFieldTypes, LiteralNode, Logger, LogicConfig, LogicTrigger, MapperFn, MemberAccessNode, MemoizeOptions, NarrowField, NarrowFields, NextButtonOptions, NonFieldLogicConfig, NonFieldLogicContext, NonFieldLogicType, ObjectLiteralNode, OrCondition, OrphanAddonActionContext, PageAllowedChildren, PageField, PresetCollaborators, Prettify, ReadonlyFieldTree, RegisteredActionRef, RegisteredFieldTypes, RegisteredWrapperTypes, RenderReadyInput, ResolvedValidationExecutionConfig, ResolvedValueExclusionConfig, RowAllowedChildren, RowComponent, RowField, RowWrapper, SchemaApplicationConfig, SchemaDefinition, SimplifiedArrayField, StateLogicConfig, StateLogicType, SubmissionActionResult, SubmissionConfig, SubmitButtonOptions, TemplateAddon, TextAddon, TextElementType, TextField, TextProps, Token, TokenContext, Trigger, UnaryOpNode, ValidationError, ValidationExecutionConfig, ValidationMessages, ValidatorConfig, ValueExclusionConfig, ValueFieldComponent, ValueHandlingMode, ValueType, WarningTracker, WithInputSignals, WrapperAutoAssociations, WrapperConfig, WrapperFieldInputs, WrapperTypeDefinition };
3561
+ export { ADDON_ACTION_HANDLERS, ADDON_ACTION_REGISTRY, ADDON_TYPE_COMPONENT_CACHE, ADDON_TYPE_DEFINITIONS, ADDON_TYPE_REGISTRY, ARRAY_CONTEXT, AsyncConditionFunctionCacheService, ComponentInitializedEvent, DEFAULT_PROPS, DEFAULT_VALIDATION_MESSAGES, DEFAULT_WRAPPERS, DEPRECATION_WARNING_TRACKER, DF_FIELD_TEMPLATES, DfAddonSlot, DynamicFormError, DynamicFormLogger, DynamicTextPipe, DynamicValueFunctionCacheService, EMIT_FORM_VALUE_ON_EVENTS, EXTERNAL_DATA, EventBus, ExpressionParser, ExpressionParserError, FIELD_REGISTRY, FIELD_SIGNAL_CONTEXT, FORM_ID_PREFIX, FORM_OPTIONS, FieldContextRegistryService, FunctionRegistryService, GROUP_CONTEXT, HTTP_CONDITION_CACHE, HttpConditionCache, HttpConditionFunctionCacheService, INITIALIZATION_TIMEOUT_MS, LogicFunctionCacheService, NoopLogger, READONLY_FIELD_TREE_CACHE, RootFormRegistryService, TokenType, WRAPPER_AUTO_ASSOCIATIONS, WRAPPER_COMPONENT_CACHE, WRAPPER_REGISTRY, applyMetaToElement, applyValidator, applyValidators, arrayFieldMapper, assertNever, baseFieldMapper, buildBaseInputs, compareValues, containerFieldMapper, createAddonActionRegistry, createDebouncedLogicFunction, createDefaultDerivationLogConfig, createDynamicValueFunction, createFormFieldStateMap, createInitializationTracker, createLogicFunction, createWarningTracker, deepMergeDefaults, derivedFromDeferred, detectFormMode, dynamicTextToObservable, evaluateCondition, evaluateNonFieldDisabled, evaluateNonFieldHidden, extractExpressionDependencies, extractStringDependencies, getArrayLength, getChangedKeys, getFieldValueHandling, getNestedValue, groupFieldMapper, hasChildFields, hasCrossFieldWhenCondition, hasFormValue, hasNestedProperty, hasTargetProperty, injectAddonTypeRegistry, injectFieldSignalContext, injectFieldsSupportingAddons, injectNonFieldEvaluationContext, interpolateParams, isArrayField, isCheckedField, isContainerField, isCrossFieldBuiltInValidator, isCrossFieldExpression, isCrossFieldSchema, isCrossFieldStateLogic, isCrossFieldValidator, isDerivationLogicConfig, isDisplayOnlyField, isEqual, isFieldBoundContext, isFormStateCondition, isFunctionHttpValidator, isGenericContainerField, isGroupField, isHiddenField, isLeafField, isNonPagedForm, isPageField, isPagedForm, isResourceBasedValidator, isRowField, isSimplifiedArrayField, isStateLogicConfig, isValidNonPagedForm, isValidPagedForm, isValueBearingField, isValueField, isWrapperTypeDefinition, keyBy, mapValues, memoize, normalizeFieldsArray, omit, pageFieldMapper, readFieldStateInfo, resolveDynamicValue, resolveHttpRequest, resolveNextButtonDisabled, resolveNonFieldDisabled, resolveNonFieldHidden, resolveSubmitButtonDisabled, resolveTokens, rowFieldMapper, runPresetAction, setupInitializationTracking, shouldLog, textFieldMapper, toReadonlyFieldTree, toReadonlyFieldTreeCached, validatePageNesting, withPreviousValue, writeToFieldValue };
3562
+ export type { ASTNode, AddonActionContext, AddonActionHandler, AddonActionPreset, AddonShapeValidator, AddonSlot, AddonTypeDefinition, AddonTypeRegistryRef, AddonTypeSchema, AndCondition, AnyAddon, ArrayAllowedChildren, ArrayButtonConfig, ArrayComponent, ArrayContext, ArrayField, ArrayFieldTree, ArrayItemDefinition, ArrayItemTemplate, ArrayLiteralNode, ArrowFunctionNode, AsyncCondition, AsyncConditionFunction, AsyncCustomValidator, AsyncDerivationFunction, AsyncValidatorConfig, AvailableFieldTypes, BaseAddon, BaseCheckedField, BaseValidatorConfig, BaseValueField, BinaryOpNode, BuiltInValidatorConfig, ButtonLogicContext, CallExpressionNode, CheckedFieldComponent, CommonAddonActionPreset, CommonAddonSlot, ComparisonOperator, ComponentAddon, ComputedMemberAccessNode, ConditionalExpression, ConditionalNode, ContainerAllowedChildren, ContainerComponent, ContainerField, ContainerFieldTypes, ContainerLogicConfig, CrossFieldDetectionContext, CssWrapper, CustomCondition, CustomFnConfig, CustomFunction, CustomFunctionOptions, CustomFunctionScope, CustomValidator, CustomValidatorConfig, DeclarativeHttpValidatorConfig, DerivationLogConfig, DerivationLogLevel, DerivationLogicConfig, DerivedFromDeferredOptions, DynamicFormActionRegistry, DynamicFormAddonActionPresetRegistry, DynamicFormAddonRegistry, DynamicFormAddonSlotRegistry, DynamicFormFieldRegistry, DynamicText, DynamicValue, EvaluationContext, ExtractField, FieldAddonSupport, FieldAddonSupportEntry, FieldBoundAddonActionContext, FieldComponent, FieldDef, FieldMeta, FieldOption, FieldPathAccess, FieldRegistryContainers, FieldRegistryLeaves, FieldRegistryWrappers, FieldScope, FieldSignalContext, FieldStateContext, FieldStateInfo, FieldTreeRecord, FieldTypeDefinition, FieldValueCondition, FieldWithValidation, FieldWrapper, FormConfig, FormEvent, FormEventConstructor, FormFieldStateMap, FormMode, FormModeDetectionResult, FormOptions, FormStateCondition, FunctionHttpValidatorConfig, GroupAllowedChildren, GroupComponent, GroupContext, GroupField, HiddenField, HiddenScalar, HiddenValue, HttpCondition, HttpCustomValidator, HttpRequestConfig, HttpResourceRequest, HttpValidationResponseMapping, IdentifierNode, InferFormModel, InferFormValue, InitializationTrackingOptions, JavascriptCondition, LazyComponentLoader, LeafFieldTypes, LiteralNode, Logger, LogicConfig, LogicTrigger, MapperFn, MemberAccessNode, MemoizeOptions, NarrowField, NarrowFields, NextButtonOptions, NonFieldLogicConfig, NonFieldLogicContext, NonFieldLogicType, ObjectLiteralNode, OrCondition, OrphanAddonActionContext, PageAllowedChildren, PageField, PresetCollaborators, Prettify, ReadonlyFieldTree, RegisteredActionRef, RegisteredFieldTypes, RegisteredWrapperTypes, RenderReadyInput, ResolvedValidationExecutionConfig, ResolvedValueExclusionConfig, RowAllowedChildren, RowComponent, RowField, RowWrapper, SchemaApplicationConfig, SchemaDefinition, SimplifiedArrayField, StateLogicConfig, StateLogicType, SubmissionActionResult, SubmissionConfig, SubmitButtonOptions, TemplateAddon, TextAddon, TextElementType, TextField, TextProps, Token, TokenContext, UnaryOpNode, ValidationError, ValidationExecutionConfig, ValidationMessages, ValidatorConfig, ValueExclusionConfig, ValueFieldComponent, ValueHandlingMode, ValueType, WarningTracker, WithInputSignals, WrapperAutoAssociations, WrapperConfig, WrapperFieldInputs, WrapperTypeDefinition };