import type { CloneRule, Nxtpression, PanelProperty, SchemaProperty } from '../../common/index.ts';
export interface AssetRecords {
    "asset.assignees": AssetAssigneesRecord;
    "asset.clone": AssetCloneRecord;
    "asset.deadlines": AssetDeadlinesRecord;
    "asset.duration": AssetDurationRecord;
    "asset.dynamicProperties?": AssetDynamicPropertiesProvidedRecord;
    "asset.embedding": AssetEmbeddingRecord;
    "asset.icon": AssetIconRecord;
    "asset.locations": AssetLocationsRecord;
    "asset.media": AssetMediaRecord;
    "asset.tags": AssetTagsRecord;
    "asset.title": AssetTitleRecord;
    "asset.types": AssetTypesRecord;
    "asset.http": AssetHttpRecord;
}
export interface AssetAssigneesRecord {
    value?: Nxtpression<string[], {
        id: string;
    }>;
    dynamic?: Dynamic;
}
export interface AssetCloneRecord {
    rules: CloneRule[];
}
export interface AssetDeadlinesRecord {
    value?: Nxtpression<string, {
        id: string;
    }>;
    dynamic?: Dynamic;
}
export interface AssetDurationRecord {
    value?: Nxtpression<number, {
        id: string;
    }>;
    dynamic?: Dynamic;
}
export interface AssetEmbeddingRecord {
    value?: Nxtpression<string, {
        id: string;
    }>;
    dynamic?: Dynamic;
}
export interface AssetIconRecord {
    value?: Nxtpression<string, {
        id: string;
    }>;
    dynamic?: Dynamic;
}
export interface AssetLocationsRecord {
    value?: Nxtpression<Array<{
        lat: number;
        lon: number;
    }>, {
        id: string;
    }>;
    dynamic?: Dynamic;
}
export interface AssetMediaRecord {
    value?: Nxtpression<Record<string, unknown>, {
        id: string;
    }>;
    dynamic?: Dynamic;
}
export interface AssetTagsRecord {
    value?: Nxtpression<string[], {
        id: string;
    }>;
    dynamic?: Dynamic;
}
export interface AssetTitleRecord {
    value?: Nxtpression<string, {
        id: string;
    }>;
    dynamic?: Dynamic;
}
export interface AssetTypesRecord {
    [type: string]: null | string | {
        priority?: number;
        label: string;
        icon?: string;
    };
}
export interface AssetHttpRecord {
    whitelist?: string[] | null;
    blacklist?: string[] | null;
    allowImport?: boolean;
}
export interface AssetDynamicPropertiesProvidedRecord {
    value?: DynamicProperty[];
}
/**
 * Dynamic property definition.
 * Properties come from :panel assets or :schema assets.
 */
export type DynamicProperty = DynamicPanelProperty | DynamicSchemaProperty;
interface DynamicPropertyBase {
    path: string;
    domain: string;
}
interface DynamicPanelProperty extends DynamicPropertyBase, Omit<PanelProperty, "path" | "domain"> {
    /** ID of the panel asset that defines this property */
    panel: string;
}
interface DynamicSchemaProperty extends DynamicPropertyBase, Omit<SchemaProperty, "path" | "domain"> {
    /** ID of the schema asset that defines this property */
    schema: string;
}
type Dynamic = false | string[];
export {};
