/**
 * Tag Service
 *
 * Manages custom tags for plugins.
 *
 * @since v1.28.0
 */
import { type Tag, type TagColor, type TagStore } from './tag-types.js';
/**
 * Service for managing plugin tags
 */
export declare class TagService {
    private store;
    private filePath;
    constructor(initialStore?: TagStore);
    /**
     * Set the file path for persistence
     */
    setFilePath(path: string): void;
    /**
     * Get the current file path
     */
    getFilePath(): string | null;
    /**
     * Create a new tag
     */
    createTag(name: string, color: TagColor, description?: string): Tag;
    /**
     * Update an existing tag
     */
    updateTag(id: string, updates: Partial<Omit<Tag, 'id' | 'isSystem' | 'createdAt'>>): void;
    /**
     * Delete a tag
     */
    deleteTag(id: string): void;
    /**
     * Get all tags
     */
    getTags(): Tag[];
    /**
     * Get system tags only
     */
    getSystemTags(): Tag[];
    /**
     * Get custom (non-system) tags only
     */
    getCustomTags(): Tag[];
    /**
     * Get a tag by ID
     */
    getTag(id: string): Tag | null;
    /**
     * Check if a tag exists
     */
    hasTag(id: string): boolean;
    /**
     * Get the number of tags
     */
    getTagCount(): number;
    /**
     * Assign a tag to a plugin
     */
    assignTag(pluginName: string, tagId: string): void;
    /**
     * Remove a tag from a plugin
     */
    removeTag(pluginName: string, tagId: string): void;
    /**
     * Toggle a tag on a plugin
     * @returns The new state (true = tag assigned)
     */
    toggleTag(pluginName: string, tagId: string): boolean;
    /**
     * Check if a plugin has a specific tag
     */
    hasPluginTag(pluginName: string, tagId: string): boolean;
    /**
     * Get all tags for a plugin
     */
    getPluginTags(pluginName: string): Tag[];
    /**
     * Get all plugins with a specific tag
     */
    getPluginsByTag(tagId: string): string[];
    /**
     * Get tag IDs for a plugin
     */
    getPluginTagIds(pluginName: string): string[];
    /**
     * Assign a tag to multiple plugins
     */
    assignTagToMany(pluginNames: string[], tagId: string): void;
    /**
     * Remove a tag from multiple plugins
     */
    removeTagFromMany(pluginNames: string[], tagId: string): void;
    /**
     * Set all tags for a plugin (replaces existing)
     */
    setPluginTags(pluginName: string, tagIds: string[]): void;
    /**
     * Clear all tags from a plugin
     */
    clearPluginTags(pluginName: string): void;
    /**
     * Get count of plugins per tag
     */
    getTagCounts(): Map<string, number>;
    /**
     * Get number of tagged plugins
     */
    getTaggedPluginCount(): number;
    /**
     * Serialize the store for persistence
     */
    serialize(): string;
    /**
     * Load from serialized data
     */
    static fromSerialized(data: string): TagService;
    /**
     * Get the raw store (for persistence)
     */
    getStore(): TagStore;
    /**
     * Reset the service (for testing)
     */
    reset(): void;
}
/**
 * Get the singleton tag service
 */
export declare function getTagService(): TagService;
/**
 * Reset the singleton (for testing)
 */
export declare function resetTagService(): void;
//# sourceMappingURL=tag-service.d.ts.map