/** Wrapper Registry Data */ import type { WrapperInfo } from './index.js'; /** * Authoring-contract pitfalls that apply to every wrapper component. * Surfaced by `ngforge_lookup topic="wrappers"` and any wrapper-scoped * lookup so consumers can't miss them. */ export declare const WRAPPER_AUTHORING_CONTRACT = "All wrapper components MUST:\n\n1. Implement `FieldWrapper` from `@ng-forge/dynamic-forms`.\n2. Expose `readonly fieldComponent = viewChild.required('fieldComponent', { read: ViewContainerRef });`\n \u2014 this is the slot where the inner wrapper (or the field) is rendered\n imperatively by the outlet.\n3. Place the `#fieldComponent` template ref UNCONDITIONALLY. It cannot\n live inside `@if`, `@defer`, `@for`, `@switch`, ``,\n or any structural directive that delays view creation. The outlet reads\n the `ViewContainerRef` immediately after creation \u2014 if the slot isn't\n materialised yet, `viewChild.required` throws `NG0951`\n (REQUIRED_QUERY_NO_VALUE), the wrapper chain is torn down, and the field\n renders bare.\n4. Declare every config key the wrapper consumes as an Angular `input()`.\n Unknown keys are silently dropped \u2014 the outlet probes\n `reflectComponentType(...).inputs` before calling `setInput()`.\n Runtime typos in config will NOT throw; rely on TypeScript (via\n `FieldRegistryWrappers` module augmentation) to catch them.\n5. Optionally accept `fieldInputs: input()` to read\n the wrapped field's mapper outputs and read-only form state."; export declare const WRAPPERS: WrapperInfo[]; //# sourceMappingURL=wrappers.d.ts.map