/*!
 * @license
 * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import { AlfrescoApiService } from '../../services/alfresco-api.service';
import { AppConfigService, UserPreferencesService } from '@alfresco/adf-core';
import { EventEmitter } from '@angular/core';
import { Observable } from 'rxjs';
import { TagBody, TagEntry, TagPaging, TagsApi } from '@alfresco/js-api';
import * as i0 from "@angular/core";
export declare class TagService {
    private apiService;
    private userPreferencesService;
    private appConfigService;
    private _tagsApi;
    get tagsApi(): TagsApi;
    /** Emitted when tag information is updated. */
    refresh: EventEmitter<any>;
    constructor(apiService: AlfrescoApiService, userPreferencesService: UserPreferencesService, appConfigService: AppConfigService);
    /**
     * Gets a list of tags added to a node.
     *
     * @param nodeId ID of the target node
     * @returns TagPaging object (defined in JS-API) containing the tags
     */
    getTagsByNodeId(nodeId: string): Observable<TagPaging>;
    /**
     * Gets a list of all the tags already defined in the repository.
     *
     * @param opts Options supported by JS-API
     * @param includedCounts True if count field should be included in response object for each tag, false otherwise.
     * @returns TagPaging object (defined in JS-API) containing the tags
     */
    getAllTheTags(opts?: any, includedCounts?: boolean): Observable<TagPaging>;
    /**
     * Adds a tag to a node.
     *
     * @param nodeId ID of the target node
     * @param tagName Name of the tag to add
     * @returns TagEntry object (defined in JS-API) with details of the new tag
     */
    addTag(nodeId: string, tagName: string): Observable<TagEntry>;
    /**
     * Removes a tag from a node.
     *
     * @param nodeId ID of the target node
     * @param tag Name of the tag to remove
     * @returns Null object when the operation completes
     */
    removeTag(nodeId: string, tag: string): Observable<void>;
    /**
     * Creates tags.
     *
     * @param tags list of tags to create.
     * @returns Created tags.
     */
    createTags(tags: TagBody[]): Observable<TagEntry[]>;
    /**
     * Update a tag
     *
     * @param tagId The identifier of a tag.
     * @param tagBody The updated tag.
     * @returns Updated tag.
     */
    updateTag(tagId: string, tagBody: TagBody): Observable<TagEntry>;
    /**
     * Find tags which name contains searched name.
     *
     * @param name Value for name which should be used during searching tags.
     * @param sorting Object which configures sorting. OrderBy field specifies field used for sorting, direction specified ascending or descending direction.
     * Default sorting is ascending by tag field.
     * @param includedCounts True if count field should be included in response object for each tag, false otherwise.
     * @param skipCount Specify how many first results should be skipped. Default 0.
     * @param maxItems Specify max number of returned tags. Default is specified by UserPreferencesService.
     * @returns Found tags which name contains searched name.
     */
    searchTags(name: string, sorting?: {
        orderBy: string;
        direction: string;
    }, includedCounts?: boolean, skipCount?: number, maxItems?: number): Observable<TagPaging>;
    /**
     * Find tag which name matches exactly to passed name.
     *
     * @param name Value for name which should be used during finding exact tag.
     * @returns Found tag which name matches exactly to passed name.
     */
    findTagByName(name: string): Observable<TagEntry>;
    /**
     * Deletes a tag with tagId.
     * This will cause the tag to be removed from all nodes.
     * You must have admin rights to delete a tag.
     *
     * @param tagId of the tag to be deleted
     * @returns Null object when the operation completes
     */
    deleteTag(tagId: string): Observable<void>;
    /**
     * Assign tags to node. If tag is new then tag is also created additionally, if tag already exists then it is just assigned.
     *
     * @param nodeId Id of node to which tags should be assigned.
     * @param tags List of tags to create and assign or just assign if they already exist.
     * @returns Just linked tags to node or single tag if linked only one tag.
     */
    assignTagsToNode(nodeId: string, tags: TagBody[]): Observable<TagPaging | TagEntry>;
    /**
     * Checks if tags plugin is enabled.
     *
     * @returns boolean true if tags plugin is enabled, false otherwise.
     */
    areTagsEnabled(): boolean;
    static ɵfac: i0.ɵɵFactoryDeclaration<TagService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<TagService>;
}
