import { ThingKind } from './kinds.js';
import { ModelValidationOptions } from './types.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 extends EventTarget {
    kind: string;
    /**
     * The name of the thing.
     */
    accessor name: string | undefined;
    /**
     * 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.
     */
    accessor displayName: string | undefined;
    /**
     * The description of the thing.
     */
    accessor description: string | undefined;
    /**
     * The version number of the thing.
     */
    accessor version: string | undefined;
    /**
     * Returns one in this order:
     * - displayName
     * - name
     * - 'Unnamed object'
     *
     * @deprecated Use `getLabel()` instead.
     */
    get renderLabel(): string;
    /**
     * Creates a basic description from a name.
     */
    static fromName(name: string): Thing;
    /**
     * Creates a new thing instance.
     *
     * @param input The thing definition used to restore the state.
     */
    static fromJSON(input?: Partial<IThing>, defaults?: Partial<IThing>): 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;
    notifyChange(): void;
    static validate(input: unknown, options?: ModelValidationOptions): boolean;
    /**
     * Checks whether the input is a definition of a server.
     */
    static isThing(input: unknown): boolean;
    toJSON(): IThing;
    /**
     * Returns one in this order:
     * - `this.displayName`
     * - `this.name`
     * - `defaultName`
     * - 'Unnamed object'
     *
     * @param defaultName The default name to use when no other is available.
     */
    getLabel(defaultName?: string): string;
}
//# sourceMappingURL=Thing.d.ts.map