"use strict";
/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
Object.defineProperty(exports, "__esModule", { value: true });
exports.onNextChange = exports.TreeStatus = exports.boxedIterator = exports.FlexTreeEntityKind = exports.isFlexTreeNode = exports.isFlexTreeEntity = exports.flexTreeMarker = void 0;
/**
 * Indicates that an object is a flex tree.
 * @alpha
 */
exports.flexTreeMarker = Symbol("flexTreeMarker");
function isFlexTreeEntity(t) {
    return typeof t === "object" && t !== null && exports.flexTreeMarker in t;
}
exports.isFlexTreeEntity = isFlexTreeEntity;
function isFlexTreeNode(t) {
    return isFlexTreeEntity(t) && t[exports.flexTreeMarker] === FlexTreeEntityKind.Node;
}
exports.isFlexTreeNode = isFlexTreeNode;
/**
 * @alpha
 */
var FlexTreeEntityKind;
(function (FlexTreeEntityKind) {
    FlexTreeEntityKind[FlexTreeEntityKind["Node"] = 0] = "Node";
    FlexTreeEntityKind[FlexTreeEntityKind["Field"] = 1] = "Field";
})(FlexTreeEntityKind || (exports.FlexTreeEntityKind = FlexTreeEntityKind = {}));
/**
 * Allows boxed iteration of a tree/field
 */
exports.boxedIterator = Symbol();
/**
 * Status of the tree that a particular node belongs to.
 * @beta
 */
var TreeStatus;
(function (TreeStatus) {
    /**
     * Is parented under the root field.
     */
    TreeStatus[TreeStatus["InDocument"] = 0] = "InDocument";
    /**
     * Is not parented under the root field, but can be added back to the original document tree.
     */
    TreeStatus[TreeStatus["Removed"] = 1] = "Removed";
    /**
     * Is removed and cannot be added back to the original document tree.
     */
    TreeStatus[TreeStatus["Deleted"] = 2] = "Deleted";
})(TreeStatus || (exports.TreeStatus = TreeStatus = {}));
/**
 * {@inheritdoc TreeNode.[onNextChange]}
 */
exports.onNextChange = Symbol("onNextChange");
// #endregion
//# sourceMappingURL=flexTreeTypes.js.map