import '../../globals.js';
/**
 * Helpful static methods for manipulating phetioIDs. Used to minimize the amount of duplicated logic specific to the
 * string structure of the phetioID. Available in the main PhET-iO js import as a global, or statically on PhetioClient.
 * @hideconstructor
 * @class
 */
declare class PhetioIDUtils {
    private constructor();
    /**
     * Appends a component to an existing phetioID to create a new unique phetioID for the component.
     * @example
     * append( 'myScreen.myControlPanel', 'myComboBox' )
     * -->  'myScreen.myControlPanel.myComboBox'
     * @public
     * @param {string} phetioID - the ID of the PhET-iO Element
     * @param {string|string[]} componentNames - the name or list of names to append to the ID
     * @returns {string} - the appended phetioID
     */
    static append(phetioID: string, ...componentNames: string[]): string;
    /**
     * Given a phetioID for a PhET-iO Element, get the part of that ID that pertains to the component (basically the
     * tail piece).
     * @example
     * getComponentName( 'myScreen.myControlPanel.myComboBox' )
     * -->  'myComboBox'
     * @public
     * @param {string} phetioID - the ID of the PhET-iO Element
     * @returns {string} - the component name
     */
    static getComponentName(phetioID: string): string;
    /**
     * Given a phetioID for a PhET-iO Element, get the phetioID of the parent component.
     * @example
     * getParentID( 'myScreen.myControlPanel.myComboBox' )
     * -->  'myScreen.myControlPanel'
     * @public
     * @param {string} phetioID - the ID of the PhET-iO Element
     * @returns {string|null} - the phetioID of the parent, or null if there is no parent
     */
    static getParentID(phetioID: string): string | null;
    /**
     * Given a phetioID for an instrumented object, get a string that can be used to assign an ID to a DOM element
     * @param {string} phetioID - the ID of the PhET-iO Element
     * @returns {string}
     * @public
     * @deprecated
     */
    static getDOMElementID(phetioID: string): string;
    /**
     * Get the screen id from the phetioID.
     * @example
     * getScreenID( 'sim.myScreen.model.property' )
     * --> sim.myScreen
     * getScreenID( 'sim.myScreen' )
     * --> sim.myScreen
     * getScreenID( 'sim.general.activeProperty' )
     * --> null
     * @param {string} phetioID
     * @public
     * @returns {string|null} - null if there is no screen component name in the phetioID
     */
    static getScreenID(phetioID: string): string | null;
    /**
     * Get the index number from the component name of the component name provided.
     * @param {string} componentName
     * @returns {number}
     * @example
     * getGroupElementIndex( 'particle_1' )
     * --> 1
     * @public
     */
    static getGroupElementIndex(componentName: string): number;
    /**
     * Returns true if the potential ancestor is indeed an ancestor of the potential descendant, but not the same phetioID
     * @param {string} potentialAncestorPhetioID
     * @param {string} potentialDescendantPhetioID
     * @returns {boolean}
     * @public
     */
    static isAncestor(potentialAncestorPhetioID: string, potentialDescendantPhetioID: string): boolean;
    /**
     * Converts a given phetioID to one where all dynamic element terms (i.e. ones with an underscore, like battery_4)
     * are replaced with the term 'archetype'. This helps when looking up the archetype phetioID or metadata for a given
     * dynamic element. Also support INTER_TERM_SEPARATOR delimited parts, like 'sim.screen1.myObject.term1-and-term2-battery_4-term4-etc'.
     *
     * See unit tests and examples in PhetioIDUtilsTests.ts.
     * @param {string} phetioID
     * @public
     * @returns {string}
     */
    static getArchetypalPhetioID(phetioID: string): string;
    /**
     * The separator used to piece together a phet-io ID.
     * @type {string}
     * @constant
     * @public
     */
    static readonly SEPARATOR = ".";
    /**
     * The separator used to specify the count of a element in a group.
     * @type {string}
     * @constant
     * @public
     */
    static readonly GROUP_SEPARATOR = "_";
    /**
     * The separator used to specify terms in a phetioID that is used by another phetioID. For example:
     *
     * sim.general.view.sim-global-otherID
     *
     * @type {string}
     * @constant
     * @public
     */
    static readonly INTER_TERM_SEPARATOR = "-";
    /**
     * The component name for the id section that holds phet-io elements general to all simulations.
     * @type {string}
     * @constant
     * @public
     */
    static readonly GENERAL_COMPONENT_NAME = "general";
    /**
     * The component name for the id section that holds simulation specific elements that don't belong in a screen.
     * @type {string}
     * @constant
     * @public
     */
    static readonly GLOBAL_COMPONENT_NAME = "global";
    /**
     * The component name for the id section that holds the home screen.
     * @type {string}
     * @constant
     * @public
     */
    static readonly HOME_SCREEN_COMPONENT_NAME = "homeScreen";
    /**
     * The component name for an id section that holds model specific elements.
     * @type {string}
     * @constant
     * @public
     */
    static readonly MODEL_COMPONENT_NAME = "model";
    /**
     * The component name for an id section that holds view specific elements.
     * @type {string}
     * @constant
     * @public
     */
    static readonly VIEW_COMPONENT_NAME = "view";
    /**
     * The component name for an id section that holds controller specific elements.
     * @type {string}
     * @constant
     * @public
     */
    static readonly CONTROLLER_COMPONENT_NAME = "controller";
    /**
     * The component name for a section that holds colors
     * @type {string}
     * @constant
     * @public
     */
    static readonly COLORS_COMPONENT_NAME = "colors";
    /**
     * The component name for a section that holds strings
     * @type {string}
     * @constant
     * @public
     */
    static readonly STRINGS_COMPONENT_NAME = "strings";
    /**
     * The component name for a dynamic element archetype
     * @type {string}
     * @constant
     * @public
     */
    static readonly ARCHETYPE = "archetype";
    /**
     * The component name suffix for the container (parent) of a dynamic element that doesn't have an '_' in it.
     * @type {string}
     * @constant
     * @public
     */
    static readonly CAPSULE_SUFFIX = "Capsule";
}
export default PhetioIDUtils;
//# sourceMappingURL=PhetioIDUtils.d.ts.map