/**
 * Base abstract class implementing IElement interface.
 * Provides common functionality that all element types can extend.
 */
import { IElement, IElementMetadata, ElementStatus, ElementRatings, Reference, ElementValidationResult, FeedbackContext } from '../types/elements/index.js';
import { ElementType } from '../portfolio/types.js';
export declare abstract class BaseElement implements IElement {
    id: string;
    type: ElementType;
    version: string;
    metadata: IElementMetadata;
    references?: Reference[];
    extensions?: Record<string, any>;
    ratings?: ElementRatings;
    protected _status: ElementStatus;
    protected _isDirty: boolean;
    private readonly MAX_FEEDBACK_HISTORY;
    constructor(type: ElementType, metadata?: Partial<IElementMetadata>);
    /**
     * Generate a unique ID for the element based on its name and type.
     * Format: type_name-slug_timestamp
     */
    protected generateId(name: string): string;
    /**
     * Core validation that all elements share.
     * Subclasses should override and call super.validate() first.
     */
    validate(): ElementValidationResult;
    /**
     * Default serialization to JSON.
     * Subclasses can override for custom formats.
     */
    serialize(): string;
    /**
     * Default deserialization from JSON.
     * Subclasses can override for custom formats.
     */
    deserialize(data: string): void;
    /**
     * Process user feedback and update ratings.
     */
    receiveFeedback(feedback: string, context?: FeedbackContext): void;
    /**
     * Simple sentiment analysis.
     * Subclasses can override for more sophisticated analysis.
     */
    protected analyzeSentiment(feedback: string): 'positive' | 'negative' | 'neutral';
    /**
     * Simple rating inference from feedback.
     * Subclasses can override for more sophisticated inference.
     */
    protected inferRating(feedback: string): number | undefined;
    /**
     * Update user rating with a new value.
     */
    protected updateUserRating(newRating: number): void;
    /**
     * Get current element status.
     */
    getStatus(): ElementStatus;
    /**
     * Default lifecycle methods - subclasses should override as needed.
     */
    beforeActivate(): Promise<void>;
    activate(): Promise<void>;
    afterActivate(): Promise<void>;
    deactivate(): Promise<void>;
    /**
     * Mark element as modified.
     */
    protected markDirty(): void;
    /**
     * Check if element has unsaved changes.
     */
    isDirty(): boolean;
    /**
     * Mark element as saved.
     */
    markClean(): void;
}
//# sourceMappingURL=BaseElement.d.ts.map