import type Ajv from 'ajv';
import type { JSONSchemaDefinition, JSONSchemaType, SchemaConflict, NotViolation } from './schema-types';
export type { JSONSchema, JSONSchemaDefinition, JSONSchemaType, SchemaConflict, AllOfMergeResult, NotViolation, } from './schema-types';
export { mergeAllOf } from './schema-merge';
export { evaluateNotViolation, composeEffectiveObjectSchema, evaluateIfThenElseOverlay, getEvaluatedProperties, } from './schema-conditionals';
export type SchemaContextOptions = {
    schema: JSONSchemaDefinition;
    definition: JSONSchemaDefinition;
    horizontal: boolean;
    path: ReadonlyArray<PropertyKey>;
    ajv?: Ajv;
    isPropertyRequired?: boolean;
    suppressLabel?: boolean;
    schemaConflicts?: readonly SchemaConflict[];
    notViolations?: readonly NotViolation[];
};
export declare class SchemaContext {
    readonly schema: JSONSchemaDefinition;
    readonly definition: JSONSchemaDefinition;
    readonly horizontal: boolean;
    readonly path: ReadonlyArray<PropertyKey>;
    readonly ajv: Ajv | undefined;
    readonly isPropertyRequired: boolean;
    readonly suppressLabel: boolean;
    readonly schemaConflicts: readonly SchemaConflict[];
    readonly notViolations: readonly NotViolation[];
    constructor(options: SchemaContextOptions);
    readonly with: (options: Partial<SchemaContextOptions>) => SchemaContext;
    readonly append: (segment: PropertyKey) => SchemaContext;
    get isRoot(): boolean;
    get name(): string | undefined;
    get widgetName(): string;
    get widgetLabel(): string | undefined;
    readonly hasRequiredProperty: (name: string) => boolean;
    get nullable(): any;
    get isNullable(): boolean;
    /**
     * Determines if this property is optional (can be absent from parent object).
     * This is different from nullable - optional means the key can be missing,
     * while nullable means the value can be explicitly null.
     */
    get isOptional(): boolean;
    /**
     * Determines if this property should show a presence toggle.
     * Optional properties that are not at the root level should have presence toggles,
     * but primitive values that allow null should use nullable controls instead.
     */
    get shouldShowPresenceToggle(): boolean;
    /**
     * Determines if this schema represents a primitive type (string, number, boolean, null).
     */
    get isPrimitive(): boolean;
    /**
     * Determines if this property is marked as readOnly.
     */
    get isReadOnly(): boolean;
    /**
     * Determines if this property is marked as writeOnly.
     */
    get isWriteOnly(): boolean;
    /**
     * Determines if this property is marked as deprecated.
     */
    get isDeprecated(): boolean;
    /**
     * Checks if readOnly should be ignored based on x:ui.ignoreReadOnly.
     */
    get shouldIgnoreReadOnly(): boolean;
    /**
     * Checks if writeOnly should be shown based on x:ui.showWriteOnly.
     */
    get shouldShowWriteOnly(): boolean;
    get anyOf(): SchemaContext[] | undefined;
    get oneOf(): SchemaContext[] | undefined;
    get allOf(): SchemaContext[] | undefined;
    readonly hasType: (type: JSONSchemaType) => boolean;
    readonly hasEnumValue: (value: unknown) => boolean;
    readonly hasConstValue: (value: unknown) => boolean;
    get description(): string | undefined;
    get examples(): unknown[] | undefined;
    get default(): unknown;
}
