import * as rdfine from '@tpluscode/rdfine';
import { RdfineEnvironment } from '@tpluscode/rdfine/environment';
import type * as RDF from '@rdfjs/types';
import type { RdfResourceCore } from '@tpluscode/rdfine/RdfResource';
import type * as Sh from '../index.js';
import type * as Rdf from '@rdfine/rdf';
import type * as Rdfs from '@rdfine/rdfs';
export interface Shape<D extends RDF.DatasetCore = RDF.DatasetCore> extends Rdfs.Resource<D>, rdfine.RdfResource<D> {
    and: Array<Sh.Shape<D>>;
    class: Rdfs.Class<D> | undefined;
    closed: boolean | undefined;
    in: Array<RDF.Term>;
    node: Sh.NodeShape<D> | undefined;
    nodeKind: Sh.NodeKind | undefined;
    or: Array<Sh.Shape<D>>;
    property: Array<Sh.PropertyShape<D>>;
    rule: Sh.Rule<D> | undefined;
    severity: Sh.Severity<D> | undefined;
    sparql: Sh.SPARQLConstraint<D> | undefined;
    target: Sh.Target<D> | undefined;
    targetClass: Array<Rdfs.Class<D>>;
    targetNode: Array<RDF.Term>;
    targetObjectsOf: Rdf.Property<D> | undefined;
    targetSubjectsOf: Rdf.Property<D> | undefined;
    xone: Array<Sh.Shape<D>>;
}
export declare function ShapeMixin<Base extends rdfine.Constructor>(Resource: Base): rdfine.Constructor<Shape & RdfResourceCore> & Base;
export declare namespace ShapeMixin {
    var appliesTo: RDF.NamedNode<string> & RDF.NamedNode<"http://www.w3.org/ns/shacl#Shape">;
    var createFactory: (env: RdfineEnvironment) => import("@tpluscode/rdfine/factory").FullFactory<Sh.Shape<RDF.DatasetCore<RDF.Quad, RDF.Quad>>> & import("@tpluscode/rdfine/factory").CurriedFactory<Sh.Shape<RDF.DatasetCore<RDF.Quad, RDF.Quad>>> & import("@tpluscode/rdfine/factory").CurriedBlankFactory<Sh.Shape<RDF.DatasetCore<RDF.Quad, RDF.Quad>>>;
}
