import type { Nxtpression } from './nxtpression.ts';
import type { WidgetOptions, WidgetType } from './widget.ts';
export interface PanelRootProperty<Value = unknown> extends Omit<PanelProperty<Value>, "const"> {
    domain?: string;
    path?: string;
    computed?: Nxtpression<Value>;
    /** An object specifying where to index the data. Adding this will effectively make the data searchable. */
    index?: {
        /** A string specifying the user-friendly title of the search property. This is what users will see when creating search filters and bookmarks. */
        label: string;
        /** A string specifying where to store the data in the search index. Note that this should be a globally unique value in the system. Typically you'd use `{domain}.{path}` and you should prefer English in camel case */
        path: string;
    };
}
export interface PanelProperty<Value = unknown> {
    type?: "array" | "asset" | "boolean" | "datetime" | "number" | "string" | "object" | "rpc" | undefined;
    /** User-friendly title of the property. This will be used as the field's label in the UI. */
    title?: string;
    description?: string;
    /** If present, indicates that the user must specify a value for the asset to be treated as valid. */
    required?: boolean;
    oneOf?: Array<PanelProperty>;
    anyOf?: Array<PanelProperty>;
    enum?: ReadonlyArray<Value>;
    minItems?: number;
    maxItems?: number;
    items?: PanelProperty<Value>;
    const?: Value;
    properties?: Record<string, PanelProperty<unknown>>;
    widget?: WidgetType | WidgetOptions;
    placeholder?: string;
    helpText?: string;
    invalid?: boolean;
    emptyValue?: Value;
}
