/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
import type { TreeNodeSchemaIdentifier, TreeValue } from "../core/index.js";
import { type LeafNodeSchema as FlexLeafNodeSchema, type FlexTreeNode } from "../feature-libraries/index.js";
import { NodeKind, type TreeNodeSchema, type TreeNodeSchemaNonClass } from "./schemaTypes.js";
type UnbrandedName<T extends FlexLeafNodeSchema> = T["name"] extends TreeNodeSchemaIdentifier<infer Name extends string> ? Name : T["name"];
/**
 * Instances of this class are schema for leaf nodes.
 * @remarks
 * Unlike other schema, leaf schema are class instances instead of classes themselves.
 * This is because the instance type (the tree node type) for leaves are not objects,
 * so those instances can't be instances of a schema based class.
 * @privateRemarks
 * This class refers to the underlying flex tree schema in its constructor, so this class can't be included in the package API.
 */
export declare class LeafNodeSchema<T extends FlexLeafNodeSchema> implements TreeNodeSchemaNonClass<UnbrandedName<T>, NodeKind.Leaf, TreeValue<T["info"]>> {
    readonly identifier: UnbrandedName<T>;
    readonly kind = NodeKind.Leaf;
    readonly info: T["info"];
    readonly implicitlyConstructable: true;
    create(data: TreeValue<T["info"]> | FlexTreeNode): TreeValue<T["info"]>;
    constructor(schema: T);
}
export declare const stringSchema: TreeNodeSchema<"com.fluidframework.leaf.string", NodeKind.Leaf, string, string>;
export declare const numberSchema: TreeNodeSchema<"com.fluidframework.leaf.number", NodeKind.Leaf, number, number>;
export declare const booleanSchema: TreeNodeSchema<"com.fluidframework.leaf.boolean", NodeKind.Leaf, boolean, boolean>;
export declare const nullSchema: TreeNodeSchema<"com.fluidframework.leaf.null", NodeKind.Leaf, null, null>;
export declare const handleSchema: TreeNodeSchema<"com.fluidframework.leaf.handle", NodeKind.Leaf, import("@fluidframework/core-interfaces").IFluidHandle<unknown>, import("@fluidframework/core-interfaces").IFluidHandle<unknown>>;
export {};
//# sourceMappingURL=leafNodeSchema.d.ts.map