/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
import type { InsertableTypedNode, TreeNode, TreeNodeFromImplicitAllowedTypes, WithType } from "../simple-tree/index.js";
import { type TextAsTree } from "./textDomain.js";
/**
 * A collection of text related types, schema and utilities for working with text beyond the basic {@link SchemaStatics.string}.
 * @privateRemarks
 * This has hard-coded assumptions about what kind of embedded content and what kind of formatting is supported.
 * We will want to generalize this with a more generic schema factory function like with table.
 * Then either that and/or the output from it can be package exported.
 * This version is just an initial prototype.
 * @internal
 */
export declare namespace FormattedTextAsTree {
    const CharacterFormat_base: import("../simple-tree/index.js").ObjectNodeSchemaWorkaround<"com.fluidframework.text.formatted.CharacterFormat", {
        readonly bold: import("../simple-tree/leafNodeSchema.js").LeafSchema<"boolean", boolean>;
        readonly italic: import("../simple-tree/leafNodeSchema.js").LeafSchema<"boolean", boolean>;
        readonly underline: import("../simple-tree/leafNodeSchema.js").LeafSchema<"boolean", boolean>;
        readonly size: import("../simple-tree/leafNodeSchema.js").LeafSchema<"number", number>;
        readonly font: import("../simple-tree/leafNodeSchema.js").LeafSchema<"string", string>;
    }, true, unknown>;
    /**
     * Formatting options for characters.
     * @internal
     */
    export class CharacterFormat extends CharacterFormat_base {
    }
    const StringTextAtom_base: import("../simple-tree/index.js").TreeNodeSchemaClass<"com.fluidframework.text.formatted.StringTextAtom", import("../simple-tree/index.js").NodeKind.Object, import("../simple-tree/index.js").TreeObjectNode<{
        /**
         * The underlying text content of this atom.
         * @remarks
         * This is typically a single unicode codepoint, and thus may contain multiple utf-16 surrogate pair code units.
         * Using longer strings is still valid. For example, so users might store whole grapheme clusters here, or even longer sections of text.
         * Anything combined into a single atom will be treated atomically, and can not be partially selected or formatted.
         * Using larger atoms and splitting them as needed is NOT a recommended approach, since this will result in poor merge behavior for concurrent edits.
         * Instead atoms should always be the smallest unit of text which will be independently selected, moved or formatted.
         * @privateRemarks
         * This content logically represents the whole atom's content, so using {@link EmptyKey} makes sense to help indicate that.
         */
        readonly content: import("../simple-tree/fieldSchema.js").FieldSchema<import("../simple-tree/fieldSchema.js").FieldKind.Required, readonly [import("../simple-tree/leafNodeSchema.js").LeafSchema<"string", string>], unknown>;
    }, "com.fluidframework.text.formatted.StringTextAtom">, object & {
        readonly content: string;
    }, true, {
        /**
         * The underlying text content of this atom.
         * @remarks
         * This is typically a single unicode codepoint, and thus may contain multiple utf-16 surrogate pair code units.
         * Using longer strings is still valid. For example, so users might store whole grapheme clusters here, or even longer sections of text.
         * Anything combined into a single atom will be treated atomically, and can not be partially selected or formatted.
         * Using larger atoms and splitting them as needed is NOT a recommended approach, since this will result in poor merge behavior for concurrent edits.
         * Instead atoms should always be the smallest unit of text which will be independently selected, moved or formatted.
         * @privateRemarks
         * This content logically represents the whole atom's content, so using {@link EmptyKey} makes sense to help indicate that.
         */
        readonly content: import("../simple-tree/fieldSchema.js").FieldSchema<import("../simple-tree/fieldSchema.js").FieldKind.Required, readonly [import("../simple-tree/leafNodeSchema.js").LeafSchema<"string", string>], unknown>;
    }, never, unknown>;
    /**
     * Unit in the string representing a single character.
     * @internal
     */
    export class StringTextAtom extends StringTextAtom_base {
    }
    /**
     * Tag with which a line in text can be formatted from HTML.
     * @internal
     */
    export const LineTag: (<TValue extends "ol" | "li" | "h1" | "h2" | "h3" | "h4" | "h5" | "checked" | "unchecked" | "blockquote" | "codeBlock">(value: TValue) => TValue extends unknown ? TreeNode & {
        readonly value: TValue;
    } : never) & {
        h1: import("../simple-tree/index.js").TreeNodeSchemaClass<"com.fluidframework.text.formatted.lineTag.h1" | "com.h1", import("../simple-tree/index.js").NodeKind.Object, TreeNode & {
            readonly value: "h1";
        }, Record<string, never>, true, Record<string, never>, undefined>;
        h3: import("../simple-tree/index.js").TreeNodeSchemaClass<"com.fluidframework.text.formatted.lineTag.h3" | "com.h3", import("../simple-tree/index.js").NodeKind.Object, TreeNode & {
            readonly value: "h3";
        }, Record<string, never>, true, Record<string, never>, undefined>;
        codeBlock: import("../simple-tree/index.js").TreeNodeSchemaClass<"com.fluidframework.text.formatted.lineTag.codeBlock" | "com.codeBlock", import("../simple-tree/index.js").NodeKind.Object, TreeNode & {
            readonly value: "codeBlock";
        }, Record<string, never>, true, Record<string, never>, undefined>;
        h2: import("../simple-tree/index.js").TreeNodeSchemaClass<"com.fluidframework.text.formatted.lineTag.h2" | "com.h2", import("../simple-tree/index.js").NodeKind.Object, TreeNode & {
            readonly value: "h2";
        }, Record<string, never>, true, Record<string, never>, undefined>;
        h4: import("../simple-tree/index.js").TreeNodeSchemaClass<"com.fluidframework.text.formatted.lineTag.h4" | "com.h4", import("../simple-tree/index.js").NodeKind.Object, TreeNode & {
            readonly value: "h4";
        }, Record<string, never>, true, Record<string, never>, undefined>;
        ol: import("../simple-tree/index.js").TreeNodeSchemaClass<"com.fluidframework.text.formatted.lineTag.ol" | "com.ol", import("../simple-tree/index.js").NodeKind.Object, TreeNode & {
            readonly value: "ol";
        }, Record<string, never>, true, Record<string, never>, undefined>;
        h5: import("../simple-tree/index.js").TreeNodeSchemaClass<"com.fluidframework.text.formatted.lineTag.h5" | "com.h5", import("../simple-tree/index.js").NodeKind.Object, TreeNode & {
            readonly value: "h5";
        }, Record<string, never>, true, Record<string, never>, undefined>;
        li: import("../simple-tree/index.js").TreeNodeSchemaClass<"com.fluidframework.text.formatted.lineTag.li" | "com.li", import("../simple-tree/index.js").NodeKind.Object, TreeNode & {
            readonly value: "li";
        }, Record<string, never>, true, Record<string, never>, undefined>;
        checked: import("../simple-tree/index.js").TreeNodeSchemaClass<"com.fluidframework.text.formatted.lineTag.checked" | "com.checked", import("../simple-tree/index.js").NodeKind.Object, TreeNode & {
            readonly value: "checked";
        }, Record<string, never>, true, Record<string, never>, undefined>;
        unchecked: import("../simple-tree/index.js").TreeNodeSchemaClass<"com.fluidframework.text.formatted.lineTag.unchecked" | "com.unchecked", import("../simple-tree/index.js").NodeKind.Object, TreeNode & {
            readonly value: "unchecked";
        }, Record<string, never>, true, Record<string, never>, undefined>;
        blockquote: import("../simple-tree/index.js").TreeNodeSchemaClass<"com.fluidframework.text.formatted.lineTag.blockquote" | "com.blockquote", import("../simple-tree/index.js").NodeKind.Object, TreeNode & {
            readonly value: "blockquote";
        }, Record<string, never>, true, Record<string, never>, undefined>;
    } & {
        readonly schema: [import("../simple-tree/index.js").TreeNodeSchemaClass<"com.fluidframework.text.formatted.lineTag.ol" | "com.ol", import("../simple-tree/index.js").NodeKind.Object, TreeNode & {
            readonly value: "ol";
        }, Record<string, never>, true, Record<string, never>, undefined>, import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.li" | "com.li", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "li";
        }), import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.h1" | "com.h1", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "h1";
        }), import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.h2" | "com.h2", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "h2";
        }), import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.h3" | "com.h3", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "h3";
        }), import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.h4" | "com.h4", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "h4";
        }), import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.h5" | "com.h5", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "h5";
        }), import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.checked" | "com.checked", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "checked";
        }), import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.unchecked" | "com.unchecked", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "unchecked";
        }), import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.blockquote" | "com.blockquote", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "blockquote";
        }), import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.codeBlock" | "com.codeBlock", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "codeBlock";
        })];
    };
    /**
     * {@inheritdoc FormattedTextAsTree.(LineTag:variable)}
     * @internal
     */
    export type LineTag = TreeNodeFromImplicitAllowedTypes<typeof LineTag.schema>;
    const StringLineAtom_base: import("../simple-tree/index.js").TreeNodeSchemaClass<"com.fluidframework.text.formatted.StringLineAtom", import("../simple-tree/index.js").NodeKind.Object, import("../simple-tree/index.js").TreeObjectNode<{
        readonly tag: [import("../simple-tree/index.js").TreeNodeSchemaClass<"com.fluidframework.text.formatted.lineTag.ol" | "com.ol", import("../simple-tree/index.js").NodeKind.Object, TreeNode & {
            readonly value: "ol";
        }, Record<string, never>, true, Record<string, never>, undefined>, import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.li" | "com.li", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "li";
        }), import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.h1" | "com.h1", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "h1";
        }), import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.h2" | "com.h2", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "h2";
        }), import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.h3" | "com.h3", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "h3";
        }), import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.h4" | "com.h4", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "h4";
        }), import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.h5" | "com.h5", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "h5";
        }), import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.checked" | "com.checked", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "checked";
        }), import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.unchecked" | "com.unchecked", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "unchecked";
        }), import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.blockquote" | "com.blockquote", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "blockquote";
        }), import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.codeBlock" | "com.codeBlock", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "codeBlock";
        })];
        readonly indent: import("../simple-tree/leafNodeSchema.js").LeafSchema<"number", number>;
    }, "com.fluidframework.text.formatted.StringLineAtom">, object & {
        readonly tag: Record<string, never> | (Record<string, never> & TreeNode & {
            readonly value: "ol";
        }) | (Record<string, never> & TreeNode & {
            readonly value: "li";
        }) | (Record<string, never> & TreeNode & {
            readonly value: "h1";
        }) | (Record<string, never> & TreeNode & {
            readonly value: "h2";
        }) | (Record<string, never> & TreeNode & {
            readonly value: "h3";
        }) | (Record<string, never> & TreeNode & {
            readonly value: "h4";
        }) | (Record<string, never> & TreeNode & {
            readonly value: "h5";
        }) | (Record<string, never> & TreeNode & {
            readonly value: "checked";
        }) | (Record<string, never> & TreeNode & {
            readonly value: "unchecked";
        }) | (Record<string, never> & TreeNode & {
            readonly value: "blockquote";
        }) | (Record<string, never> & TreeNode & {
            readonly value: "codeBlock";
        }) | (TreeNode & {
            readonly value: "ol";
        } & Record<string, never>) | (TreeNode & {
            readonly value: "ol";
        }) | (TreeNode & {
            readonly value: "li";
        } & Record<string, never>) | (TreeNode & {
            readonly value: "li";
        }) | (TreeNode & {
            readonly value: "h1";
        } & Record<string, never>) | (TreeNode & {
            readonly value: "h1";
        }) | (TreeNode & {
            readonly value: "h2";
        } & Record<string, never>) | (TreeNode & {
            readonly value: "h2";
        }) | (TreeNode & {
            readonly value: "h3";
        } & Record<string, never>) | (TreeNode & {
            readonly value: "h3";
        }) | (TreeNode & {
            readonly value: "h4";
        } & Record<string, never>) | (TreeNode & {
            readonly value: "h4";
        }) | (TreeNode & {
            readonly value: "h5";
        } & Record<string, never>) | (TreeNode & {
            readonly value: "h5";
        }) | (TreeNode & {
            readonly value: "checked";
        } & Record<string, never>) | (TreeNode & {
            readonly value: "checked";
        }) | (TreeNode & {
            readonly value: "unchecked";
        } & Record<string, never>) | (TreeNode & {
            readonly value: "unchecked";
        }) | (TreeNode & {
            readonly value: "blockquote";
        } & Record<string, never>) | (TreeNode & {
            readonly value: "blockquote";
        }) | (TreeNode & {
            readonly value: "codeBlock";
        } & Record<string, never>) | (TreeNode & {
            readonly value: "codeBlock";
        });
        readonly indent: number;
    }, true, {
        readonly tag: [import("../simple-tree/index.js").TreeNodeSchemaClass<"com.fluidframework.text.formatted.lineTag.ol" | "com.ol", import("../simple-tree/index.js").NodeKind.Object, TreeNode & {
            readonly value: "ol";
        }, Record<string, never>, true, Record<string, never>, undefined>, import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.li" | "com.li", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "li";
        }), import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.h1" | "com.h1", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "h1";
        }), import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.h2" | "com.h2", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "h2";
        }), import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.h3" | "com.h3", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "h3";
        }), import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.h4" | "com.h4", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "h4";
        }), import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.h5" | "com.h5", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "h5";
        }), import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.checked" | "com.checked", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "checked";
        }), import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.unchecked" | "com.unchecked", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "unchecked";
        }), import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.blockquote" | "com.blockquote", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "blockquote";
        }), import("../simple-tree/index.js").TreeNodeSchemaCore<"com.fluidframework.text.formatted.lineTag.codeBlock" | "com.codeBlock", import("../simple-tree/index.js").NodeKind.Object, true, Record<string, never>, Record<string, never>, unknown> & (new (data?: Record<string, never> | import("../simple-tree/index.js").InternalTreeNode | undefined) => TreeNode & {
            readonly value: "codeBlock";
        })];
        readonly indent: import("../simple-tree/leafNodeSchema.js").LeafSchema<"number", number>;
    }, never, unknown>;
    /**
     * Unit in the string representing a new line character with line formatting.
     * @remarks
     * This aligns with how Quill represents line formatting.
     * Quill formats line attributes (headers, list, blockquote, etc... ) on the newline character
     * and only lines using this atom can have line-specific formatting.
     * The optional indent level mirrors Quill's indent attribute,
     * which is applies to the line before the line break.
     * Any tagged line can be indented independently.
     * @internal
     */
    export class StringLineAtom extends StringLineAtom_base {
        readonly content = "\n";
    }
    /**
     * Types of "atoms" that make up the text.
     * @internal
     */
    export const StringAtomContent: readonly [typeof StringTextAtom, typeof StringLineAtom];
    /**
     * {@inheritdoc FormattedTextAsTree.(StringAtomContent:variable)}
     * @internal
     */
    export type StringAtomContent = TreeNodeFromImplicitAllowedTypes<typeof StringAtomContent>;
    const StringAtom_base: import("../simple-tree/index.js").TreeNodeSchemaClass<"com.fluidframework.text.formatted.StringAtom", import("../simple-tree/index.js").NodeKind.Object, import("../simple-tree/index.js").TreeObjectNode<{
        readonly content: import("../simple-tree/fieldSchema.js").FieldSchema<import("../simple-tree/fieldSchema.js").FieldKind.Required, readonly [typeof StringTextAtom, typeof StringLineAtom], unknown>;
        readonly format: typeof CharacterFormat;
    }, "com.fluidframework.text.formatted.StringAtom">, object & {
        readonly content: StringTextAtom | (object & {
            readonly content: string;
        }) | StringLineAtom | (object & {
            readonly tag: Record<string, never> | (Record<string, never> & TreeNode & {
                readonly value: "ol";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "li";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h1";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h2";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h3";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h4";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h5";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "checked";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "unchecked";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "blockquote";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "codeBlock";
            }) | (TreeNode & {
                readonly value: "ol";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "ol";
            }) | (TreeNode & {
                readonly value: "li";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "li";
            }) | (TreeNode & {
                readonly value: "h1";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h1";
            }) | (TreeNode & {
                readonly value: "h2";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h2";
            }) | (TreeNode & {
                readonly value: "h3";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h3";
            }) | (TreeNode & {
                readonly value: "h4";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h4";
            }) | (TreeNode & {
                readonly value: "h5";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h5";
            }) | (TreeNode & {
                readonly value: "checked";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "checked";
            }) | (TreeNode & {
                readonly value: "unchecked";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "unchecked";
            }) | (TreeNode & {
                readonly value: "blockquote";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "blockquote";
            }) | (TreeNode & {
                readonly value: "codeBlock";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "codeBlock";
            });
            readonly indent: number;
        }) | (StringTextAtom & object & {
            readonly content: string;
        }) | (StringTextAtom & object & {
            readonly tag: Record<string, never> | (Record<string, never> & TreeNode & {
                readonly value: "ol";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "li";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h1";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h2";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h3";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h4";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h5";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "checked";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "unchecked";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "blockquote";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "codeBlock";
            }) | (TreeNode & {
                readonly value: "ol";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "ol";
            }) | (TreeNode & {
                readonly value: "li";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "li";
            }) | (TreeNode & {
                readonly value: "h1";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h1";
            }) | (TreeNode & {
                readonly value: "h2";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h2";
            }) | (TreeNode & {
                readonly value: "h3";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h3";
            }) | (TreeNode & {
                readonly value: "h4";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h4";
            }) | (TreeNode & {
                readonly value: "h5";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h5";
            }) | (TreeNode & {
                readonly value: "checked";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "checked";
            }) | (TreeNode & {
                readonly value: "unchecked";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "unchecked";
            }) | (TreeNode & {
                readonly value: "blockquote";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "blockquote";
            }) | (TreeNode & {
                readonly value: "codeBlock";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "codeBlock";
            });
            readonly indent: number;
        }) | (object & {
            readonly content: string;
        } & StringTextAtom) | (object & {
            readonly content: string;
        } & StringLineAtom) | (object & {
            readonly content: string;
        } & {
            readonly tag: Record<string, never> | (Record<string, never> & TreeNode & {
                readonly value: "ol";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "li";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h1";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h2";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h3";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h4";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h5";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "checked";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "unchecked";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "blockquote";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "codeBlock";
            }) | (TreeNode & {
                readonly value: "ol";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "ol";
            }) | (TreeNode & {
                readonly value: "li";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "li";
            }) | (TreeNode & {
                readonly value: "h1";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h1";
            }) | (TreeNode & {
                readonly value: "h2";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h2";
            }) | (TreeNode & {
                readonly value: "h3";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h3";
            }) | (TreeNode & {
                readonly value: "h4";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h4";
            }) | (TreeNode & {
                readonly value: "h5";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h5";
            }) | (TreeNode & {
                readonly value: "checked";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "checked";
            }) | (TreeNode & {
                readonly value: "unchecked";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "unchecked";
            }) | (TreeNode & {
                readonly value: "blockquote";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "blockquote";
            }) | (TreeNode & {
                readonly value: "codeBlock";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "codeBlock";
            });
            readonly indent: number;
        }) | (StringLineAtom & object & {
            readonly content: string;
        }) | (StringLineAtom & object & {
            readonly tag: Record<string, never> | (Record<string, never> & TreeNode & {
                readonly value: "ol";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "li";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h1";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h2";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h3";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h4";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h5";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "checked";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "unchecked";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "blockquote";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "codeBlock";
            }) | (TreeNode & {
                readonly value: "ol";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "ol";
            }) | (TreeNode & {
                readonly value: "li";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "li";
            }) | (TreeNode & {
                readonly value: "h1";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h1";
            }) | (TreeNode & {
                readonly value: "h2";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h2";
            }) | (TreeNode & {
                readonly value: "h3";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h3";
            }) | (TreeNode & {
                readonly value: "h4";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h4";
            }) | (TreeNode & {
                readonly value: "h5";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h5";
            }) | (TreeNode & {
                readonly value: "checked";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "checked";
            }) | (TreeNode & {
                readonly value: "unchecked";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "unchecked";
            }) | (TreeNode & {
                readonly value: "blockquote";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "blockquote";
            }) | (TreeNode & {
                readonly value: "codeBlock";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "codeBlock";
            });
            readonly indent: number;
        }) | (object & {
            readonly tag: Record<string, never> | (Record<string, never> & TreeNode & {
                readonly value: "ol";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "li";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h1";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h2";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h3";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h4";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h5";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "checked";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "unchecked";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "blockquote";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "codeBlock";
            }) | (TreeNode & {
                readonly value: "ol";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "ol";
            }) | (TreeNode & {
                readonly value: "li";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "li";
            }) | (TreeNode & {
                readonly value: "h1";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h1";
            }) | (TreeNode & {
                readonly value: "h2";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h2";
            }) | (TreeNode & {
                readonly value: "h3";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h3";
            }) | (TreeNode & {
                readonly value: "h4";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h4";
            }) | (TreeNode & {
                readonly value: "h5";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h5";
            }) | (TreeNode & {
                readonly value: "checked";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "checked";
            }) | (TreeNode & {
                readonly value: "unchecked";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "unchecked";
            }) | (TreeNode & {
                readonly value: "blockquote";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "blockquote";
            }) | (TreeNode & {
                readonly value: "codeBlock";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "codeBlock";
            });
            readonly indent: number;
        } & StringTextAtom) | (object & {
            readonly tag: Record<string, never> | (Record<string, never> & TreeNode & {
                readonly value: "ol";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "li";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h1";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h2";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h3";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h4";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h5";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "checked";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "unchecked";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "blockquote";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "codeBlock";
            }) | (TreeNode & {
                readonly value: "ol";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "ol";
            }) | (TreeNode & {
                readonly value: "li";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "li";
            }) | (TreeNode & {
                readonly value: "h1";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h1";
            }) | (TreeNode & {
                readonly value: "h2";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h2";
            }) | (TreeNode & {
                readonly value: "h3";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h3";
            }) | (TreeNode & {
                readonly value: "h4";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h4";
            }) | (TreeNode & {
                readonly value: "h5";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h5";
            }) | (TreeNode & {
                readonly value: "checked";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "checked";
            }) | (TreeNode & {
                readonly value: "unchecked";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "unchecked";
            }) | (TreeNode & {
                readonly value: "blockquote";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "blockquote";
            }) | (TreeNode & {
                readonly value: "codeBlock";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "codeBlock";
            });
            readonly indent: number;
        } & {
            readonly content: string;
        }) | (object & {
            readonly tag: Record<string, never> | (Record<string, never> & TreeNode & {
                readonly value: "ol";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "li";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h1";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h2";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h3";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h4";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "h5";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "checked";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "unchecked";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "blockquote";
            }) | (Record<string, never> & TreeNode & {
                readonly value: "codeBlock";
            }) | (TreeNode & {
                readonly value: "ol";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "ol";
            }) | (TreeNode & {
                readonly value: "li";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "li";
            }) | (TreeNode & {
                readonly value: "h1";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h1";
            }) | (TreeNode & {
                readonly value: "h2";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h2";
            }) | (TreeNode & {
                readonly value: "h3";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h3";
            }) | (TreeNode & {
                readonly value: "h4";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h4";
            }) | (TreeNode & {
                readonly value: "h5";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "h5";
            }) | (TreeNode & {
                readonly value: "checked";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "checked";
            }) | (TreeNode & {
                readonly value: "unchecked";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "unchecked";
            }) | (TreeNode & {
                readonly value: "blockquote";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "blockquote";
            }) | (TreeNode & {
                readonly value: "codeBlock";
            } & Record<string, never>) | (TreeNode & {
                readonly value: "codeBlock";
            });
            readonly indent: number;
        } & StringLineAtom);
        readonly format: (InsertableTypedNode<typeof CharacterFormat> | undefined) & InsertableTypedNode<typeof CharacterFormat>;
    }, true, {
        readonly content: import("../simple-tree/fieldSchema.js").FieldSchema<import("../simple-tree/fieldSchema.js").FieldKind.Required, readonly [typeof StringTextAtom, typeof StringLineAtom], unknown>;
        readonly format: typeof CharacterFormat;
    }, never, unknown>;
    /**
     * A unit of the text, with formatting.
     * @internal
     */
    export class StringAtom extends StringAtom_base {
    }
    /**
     * Statics for text nodes.
     * @internal
     */
    export interface Statics {
        /**
         * Construct a {@link FormattedTextAsTree.(Tree:type)} from a string, where each character (as defined by iterating over the string) becomes a single character in the text node.
         * @remarks This combines pairs of utf-16 surrogate code units into single characters as appropriate.
         */
        fromString(value: string): Tree;
    }
    /**
     * Interface for a text node.
     * @remarks
     * The string is broken up into substrings which are referred to as 'characters'.
     * Unlike with JavaScript strings, all indexes are by character, not UTF-16 code unit.
     * This avoids the problem JavaScript where it can split UTF-16 surrogate pairs producing invalid strings,
     * and avoids the issue where indexing a string and iterating it segment the string differently.
     * This does NOT mean the characters correspond to user perceived characters (like grapheme clusters try to do):
     * applications will likely want to include higher level segmentation logic
     * which might differ between operations like delete
     * (which often operates on something in between unicode code points and grapheme clusters)
     * and navigation/selection (which typically uses grapheme clusters).
     *
     * @see {@link FormattedTextAsTree.Statics.fromString} for construction.
     * @see {@link FormattedTextAsTree.(Tree:type)} for schema.
     * @internal
     */
    export interface Members extends TextAsTree.Members {
        /**
         * Format to use by default for text inserted with non-formatted APIs.
         * @remarks
         * This is not persisted in the tree, and observation of it is not tracked by the tree observation tracking.
         * @privateRemarks
         * Opt this into observation tracking.
         */
        defaultFormat: CharacterFormat;
        /**
         * Gets an array type view of the characters currently in the text.
         * @remarks
         * This iterator matches the behavior of {@link (TreeArrayNode:interface)} with respect to edits during iteration.
         * @privateRemarks
         * Currently this is implemented by a node and changes with the text over time.
         * We might not want to leak a node like this in the API.
         * Providing a way to index and iterate separately might be better.
         */
        charactersWithFormatting(): readonly StringAtom[];
        /**
         * Insert a range of characters into the string based on character index.
         * @remarks
         * See {@link (TreeArrayNode:interface).insertAt} for more details on the behavior.
         * See {@link FormattedTextAsTree.Statics.fromString} for how the `additionalCharacters` string is broken into characters.
         * @privateRemarks
         * If we provide ways to customize character boundaries, that could be handled here by taking in an Iterable<string> instead of a string.
         * Doing this currently would enable insertion of text with different character boundaries than the existing text,
         * which would violate the currently documented character boundary invariants.
         *
         * Another option would be to take an approach like Table,
         * where the user of the API uses a factory function to generate the schema, and can inject custom logic, like a string character iterator.
         */
        insertWithFormattingAt(index: number, additionalCharacters: Iterable<InsertableTypedNode<typeof StringAtom>>): void;
        /**
         * Apply formatting to a range of characters based on character index.
         * @param startIndex - The starting index (inclusive) of the range to format.
         * @param endIndex - The ending index (exclusive) of the range to format.
         * @param format - The formatting to apply to the specified range.
         * @remarks
         * The start and end behave the same as in {@link (TreeArrayNode:interface).removeRange}.
         */
        formatRange(startIndex: number | undefined, endIndex: number | undefined, format: Partial<CharacterFormat>): void;
        /**
         * Returns the length of the run of characters starting at `startIndex` which have the same formatting and atom type, up to `endIndex`.
         * @param startIndex - The starting index of the run.
         * @param endIndex - The ending index (exclusive) of the run. Defaults to the end of the text.
         */
        getUniformRun(startIndex: number, endIndex?: number): number;
        /**
         * Returns a substring of the text from `startIndex` to `endIndex`
         * @param startIndex - starting index (inclusive)
         * @param endIndex - Optional ending index (exclusive). Defaults to the end of the text.
         */
        getString(startIndex: number, endIndex?: number): string;
    }
    /**
     * Schema for a text node.
     * @remarks
     * See {@link FormattedTextAsTree.Members} for the API.
     * See {@link FormattedTextAsTree.Statics} for static APIs on this Schema, including construction.
     * @internal
     */
    export const Tree: Statics & import("../simple-tree/index.js").TreeNodeSchema<"com.fluidframework.text.formatted.Text", import("../simple-tree/index.js").NodeKind, Members & TreeNode & WithType<"com.fluidframework.text.formatted.Text", import("../simple-tree/index.js").NodeKind, unknown>, never, false>;
    export type Tree = Members & TreeNode & WithType<"com.fluidframework.text.formatted.Text">;
    export {};
}
//# sourceMappingURL=textDomainFormatted.d.ts.map