/**
 * The category a data asset belongs to.
 */
export type DataAssetCategoryId = 'GENERAL-DATA' | 'ONLINE-ACCOUNT' | 'DEV-KEYS-SECRETS' | 'CRYPTO-WALLETS' | 'PAYMENT-CARD' | 'MEDIA-FILES';
/**
 * Core (static) definition of a data asset type.
 * Does not include UI-specific concerns like translated name/description
 * or form/previewer components — those are injected by the consumer via resolve().
 */
export interface DataAssetCoreDef {
    /** Asset type identifier (e.g. 'PLAIN-TEXT', 'USER-PSWD'). */
    id: string;
    /** Short code abbreviation (e.g. 'PTXT'). */
    code: string;
    /** Category this asset belongs to. */
    category: DataAssetCategoryId;
    /** FontAwesome icon name (kebab-case). */
    iconName: string;
    /** Secret field names relevant to this asset type. */
    fields: string[];
    /** Whether this asset type requires a full plan subscription. */
    requiresFullPlan: boolean;
}
/**
 * Core (static) definition of a data asset category.
 * The name is intentionally omitted — supply it via resolveCategories().
 */
export interface DataAssetCategoryCoreDef {
    /** Category identifier. */
    id: DataAssetCategoryId;
    /** Display order (ascending). */
    order: number;
    /** FontAwesome icon name (kebab-case). */
    iconName: string;
}
/**
 * Provides the canonical list of data asset type and category definitions.
 *
 * Core definitions hold structural metadata only (id, code, category, icon, fields).
 * UI-specific concerns — translated name/description, Form, Previewer — are injected
 * by the consumer via resolve() / resolveCategories(), keeping the SDK decoupled from
 * any i18n or UI framework.
 *
 * @example
 * ```typescript
 * const service = new DataAssetDefinitionService();
 *
 * const assets = service.resolve(def => ({
 *     name: translate(`assets.${def.id}.name`),
 *     description: translate(`assets.${def.id}.description`),
 *     Form: formMap[def.id],
 *     Previewer: previewerMap[def.id],
 * }));
 *
 * const categories = service.resolveCategories(cat => ({
 *     name: translate(`categories.${cat.id}.name`),
 * }));
 * ```
 */
export default class DataAssetDefinitionService {
    /** Returns all core asset definitions without any consumer extensions. */
    getCoreDefinitions(): DataAssetCoreDef[];
    /** Returns all core category definitions without any consumer extensions. */
    getCoreCategories(): DataAssetCategoryCoreDef[];
    /**
     * Returns all asset definitions merged with the result of the resolver callback.
     * Use this to attach translated name/description, Form, Previewer, or any other
     * UI-layer properties without coupling the SDK to a specific framework.
     *
     * @param resolver Called once per definition; its return value is spread onto the def.
     */
    resolve<TExtra>(resolver: (def: DataAssetCoreDef) => TExtra): (DataAssetCoreDef & TExtra)[];
    /**
     * Returns all category definitions merged with the result of the resolver callback.
     * Use this to attach a translated name (or any other UI-layer property) per category.
     *
     * @param resolver Called once per category; its return value is spread onto the def.
     */
    resolveCategories<TExtra>(resolver: (def: DataAssetCategoryCoreDef) => TExtra): (DataAssetCategoryCoreDef & TExtra)[];
}
