import { ThingKind } from './kinds.js';
/**
 * An interface describing a base metadata of a thing.
 */
export declare interface IThing {
    /**
     * The data kind. The application ignores the input with an unknown `kind`, unless
     * it can be determined from the context.
     */
    kind?: typeof ThingKind;
    /**
     * The name of the thing.
     */
    name?: string;
    /**
     * Optional value to overwrite the `name` in the UI.
     * The primary descriptive field is the `name`. The display name is only used in the presentation of the data.
     */
    displayName?: string;
    /**
     * The description of the thing.
     */
    description?: string;
    /**
     * The version number of the thing.
     */
    version?: string;
}
export declare class Thing {
    kind: string;
    /**
     * The name of the thing.
     */
    name?: string;
    /**
     * Optional value to overwrite the `name` in the UI.
     * The primary descriptive field is the `name`. The display name is only used in the presentation of the data.
     */
    displayName?: string;
    /**
     * The description of the thing.
     */
    description?: string;
    /**
     * The version number of the thing.
     */
    version?: string;
    /**
     * Returns one in this order:
     * - displayName
     * - name
     * - 'Unnamed object'
     */
    get renderLabel(): string;
    /**
     * Creates a basic description from a name.
     */
    static fromName(name: string): Thing;
    /**
     * @param input The thing definition used to restore the state.
     */
    constructor(input?: string | IThing);
    /**
     * Creates a new thing clearing anything that is so far defined.
     *
     * Note, this throws an error when the server is not a thing.
     */
    new(init: IThing): void;
    /**
     * Checks whether the input is a definition of a server.
     */
    static isThing(input: unknown): boolean;
    toJSON(): IThing;
}
//# sourceMappingURL=Thing.d.ts.map