import type AvonRequest from '../Http/Requests/AvonRequest';
import { type AnyValue, type Model } from '../Contracts';
import type { Filter } from '../Filters';
import Relation from './Relation';
export default abstract class HasManyOrOne extends Relation {
    /**
     * Indicates related resources have to load.
     */
    loaded: boolean;
    constructor(resource: string, relation?: string);
    filterableAttribute(request: AvonRequest): string;
    /**
     * Make the field filter.
     */
    makeFilter(request: AvonRequest): Filter;
    /**
     * Get attribute that hold the related model key.
     */
    foreignKeyName(request: AvonRequest): string;
    /**
     * Get attribute that hold the related model key.
     */
    ownerKeyName(request: AvonRequest): string;
    /**
     * Resolve related value for given resources.
     */
    resolveRelatables(request: AvonRequest, resources: Model[]): Promise<AnyValue>;
    /**
     * Get related models for given resources.
     */
    searchRelatables(request: AvonRequest, resources: Model[]): Promise<Model[]>;
    /**
     * Determine field is fillable or not.
     */
    fillable(): boolean;
}
