import * as _c8y_ngx_components from '@c8y/ngx-components';
import { TabsService, ExtensionFactory, Tab, ViewContext, ContextData, WidgetSettings, WidgetDisplaySettings, Widget, DynamicComponentDefinition, Route, TabWithTemplate, ModalService, NavigatorService, Permissions, AlertService, DynamicComponentService, GroupService, OptionsService, AppStateService, ContextRouteService, GainsightService, BreadcrumbItem, WidgetsDashboardComponent, DashboardCopyPermission, BottomDrawerService, ActionBarService, DashboardChildChange, DashboardChange, RevertChangeType, WidgetChange, GenericHookType, GenericHookOptions, ExtensionPointForPlugins, PluginsResolveService, DynamicComponentComponent, WIDGET_CONFIGURATION_GRID_SIZE, BottomDrawerRef, ActionBarFactory, PreviewService, ClipboardService } from '@c8y/ngx-components';
import * as i8 from '@angular/router';
import { Router, ActivatedRoute, ActivatedRouteSnapshot } from '@angular/router';
import * as i0 from '@angular/core';
import { InjectionToken, OnInit, OnChanges, OnDestroy, EventEmitter, Renderer2, DestroyRef, Type, Injector, TemplateRef, AfterContentInit, AfterViewInit, ElementRef, ChangeDetectorRef, ViewContainerRef, ModuleWithProviders } from '@angular/core';
import { ContextDashboardStateService } from '@c8y/ngx-components/context-dashboard-state';
import { TranslateService } from '@ngx-translate/core';
import * as _c8y_client from '@c8y/client';
import { IManagedObject, QueriesUtil, InventoryService, IResultList, IIdentified } from '@c8y/client';
import { Observable } from 'rxjs/internal/Observable';
import { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';
import * as rxjs from 'rxjs';
import { Observable as Observable$1, BehaviorSubject, Subject, Subscription } from 'rxjs';
import * as _angular_forms from '@angular/forms';
import { FormBuilder, ValidatorFn, NgForm } from '@angular/forms';
import * as i2 from 'ngx-bootstrap/tooltip';
import * as i3 from 'ngx-bootstrap/popover';
import * as i4 from '@c8y/ngx-components/assets-navigator';
import { AssetSelectorOptions, AssetSelectionChangeEvent } from '@c8y/ngx-components/assets-navigator';
import * as i5 from '@c8y/ngx-components/icon-selector';
import * as i6 from 'ngx-bootstrap/dropdown';
import * as i7 from 'ngx-bootstrap/collapse';
import { AssetPropertyType } from '@c8y/ngx-components/asset-properties';
import * as i1 from '@angular/common';
import { WidgetControlsPresetConfig, WidgetControls, PresetName, PresetDefinition, GlobalContextEvent, GlobalContextState } from '@c8y/ngx-components/global-context';

declare class AddDashboardComponent {
    private tabsService;
    private router;
    constructor(tabsService: TabsService, router: Router);
    addDashboard(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<AddDashboardComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<AddDashboardComponent, "[c8y-add-dashboard]", never, {}, {}, never, never, true, never>;
}

declare abstract class AddDashboardFactory implements ExtensionFactory<Tab> {
    protected abstract targetContext: ViewContext.Device | ViewContext.Group;
    currentContext: ContextData;
    private permissions;
    private contextRoute;
    get(activatedRoute?: ActivatedRoute): Promise<Tab | Tab[]>;
    private hasPermission;
}

declare const CONTEXT_DASHBOARD_CONFIG: InjectionToken<any>;
declare const DASHBOARD_SETTINGS_CHANGES: {
    readonly classes: "theme";
    readonly globalRolesIds: "global roles";
    readonly widgetClasses: "widget header style";
    readonly widgetMargin: "widget margin";
    readonly icon: "icon";
    readonly name: "name";
    readonly description: "description";
    readonly priority: "priority";
    readonly c8y_IsNavigatorNode: "navigator item";
    readonly translateWidgetTitle: "translate widget title";
    readonly translateDashboardTitle: "translate dashboard title";
    readonly children: "widgets";
};
interface ContextDashboardConfig {
    widgetFilter?: (component: DynamicComponentDefinition) => boolean;
    allowFullscreen?: boolean;
    /**
     * @deprecated
     */
    routes?: Route[];
}
interface ContextWidgetConfig {
    /**
     * Settings that define how the default config component is
     * displayed. They are static and will not be saved.
     */
    settings?: WidgetSettings;
    /**
     * Settings that are injected in any displaying component.
     */
    displaySettings?: WidgetDisplaySettings;
    /**
     * Whatever should be added to the configuration when a widget is created.
     */
    config?: {
        /**
         * Any other information that should be stored here.
         */
        [key: string]: any;
    };
    /**
     * The selected device or group (note: naming is inconsistent as group was added later
     * but must stay for already implemented widgets)
     */
    device?: {
        id?: string | number;
        name?: string;
        [key: string]: any;
    };
    /**
     * Method to export the widget configuration during dashboard export to a json file. It enhances the configuration with
     * additional data that can be used later by the `import` method to restore the widget configuration in a new context.
     * @param config Widget configuration
     * @return Enhanced widget configuration
     */
    export?: (config: any) => any | Promise<any>;
    /**
     * Method to import the widget configuration during dashboard import from a json file. It restores the widget configuration
     * with data exported by the `export` method.
     * @param config Widget configuration enhanced with export method
     * @param dashboardData Dashboard metadata
     * @return Restored widget configuration
     */
    import?: (config: any, dashboardData: DashboardMetadata) => any | Promise<any>;
    /**
     * Any other information that should be stored here.
     */
    [key: string]: any;
}
interface ContextDashboardManagedObject extends IManagedObject {
    c8y_Dashboard?: ContextDashboard;
    name?: string;
    c8y_DashboardHistory?: ContextDashboard[];
}
interface ContextDashboard {
    icon?: SupportedIconsSuggestions | null;
    name?: string | null;
    priority?: number | null;
    deviceType?: boolean | null;
    deviceTypeValue?: string | null;
    isFrozen?: boolean | null;
    classes?: {
        [key: string]: boolean;
    } | null;
    widgetClasses?: {
        [key: string]: boolean;
    } | null;
    widgetMargin?: number | null;
    translateWidgetTitle?: boolean | null;
    translateDashboardTitle?: boolean | null;
    global?: boolean | null;
    /**
     * The amount of columns on that dashboard.
     * Can be freely chosen, but product uses either 12 or 24.
     */
    columns?: number | null;
    children?: {
        [id: string]: Widget;
    };
    globalRolesIds?: DashboardGlobalRoles | null;
    c8y_IsNavigatorNode?: object | null;
    description?: string | null;
    historyDescription?: DashboardHistoryDescription | null;
    created?: string | null;
    author?: string | null;
    dashboardState?: {
        [key: string]: any;
    };
}
/**
 * Object describing changes applied to dashboard settings and its widgets. Used to display user-friendly change log.
 */
interface DashboardHistoryDescription {
    /**
     * Indicates type of dashboard change (or creation).
     */
    changeType?: 'reset' | 'create' | 'update' | null;
    /**
     * List of dashboard settings that has been changed.
     */
    dashboardSettingChanges?: (typeof DASHBOARD_SETTINGS_CHANGES)[keyof typeof DASHBOARD_SETTINGS_CHANGES][];
    /**
     * True if dashboard is typed dashboard, false if it's not.
     */
    deviceType?: boolean | null;
    /**
     * Object containing lists of widgets (by title) that has been changed, grouped by change type, e.g.:
     * ```ts
     * widgetChanges: {
     *     removed: ['Applications'],
     *     config?: ['Data points graph', 'Events list'],
     *   },
     * ```
     */
    widgetChanges?: {
        removed?: string[];
        added?: string[];
        config?: string[];
        arrangement?: string[];
    } | null;
    /**
     * String used to display the date from which the state was restored.
     */
    restored?: string;
}
declare const DASHBOARD_CHILDREN_STATE_NAME: {
    readonly initial: "Initial state";
    readonly config: "Widget configuration changed";
    readonly removed: "Widget removed";
    readonly added: "Widget added";
    readonly arrangement: "Widgets rearranged";
};
/**
 * Object representing state of dashboard widgets. Its main purpose is to allow to undo and redo changes
 * applied to dashboard children.
 */
type DashboardChildrenState = {
    /**
     * Name of the change applied to dashboard that results in current state, e.g. 'widget removed'
     */
    name: (typeof DASHBOARD_CHILDREN_STATE_NAME)[keyof typeof DASHBOARD_CHILDREN_STATE_NAME];
    /**
     * Dashboard children in particular, immutable state.
     */
    children: ContextDashboard['children'];
    /**
     * Object describing changes applied to dashboard widgets that can be easily mapped to DashboardHistoryDescription widgetChanges.
     * ```ts
     * {
     *    removed: {
     *        0969692617637703: { componentId: "Data points graph", config: {...}, classes: {...} ...}
     *    },
     *    config: {
     *        6347567345767653: { componentId: "Applications", config: {...}, classes: {...} ...},
     *        6456345634564566: { componentId: "Events list", config: {...}, classes: {...} ...},
     *    }
     * }
     * ```
     */
    changeHistory: Partial<Record<keyof DashboardHistoryDescription['widgetChanges'], {
        [id: string]: Widget;
    }>>;
};
declare enum ContextDashboardType {
    Device = "device",
    Type = "type",
    Group = "group",
    Named = "name",
    Report = "report"
}
declare enum DashboardDetailsTabId {
    GENERAL = "general",
    APPEARANCE = "appearance",
    VERSIONHISTORY = "versionHistory"
}
type DashboardDetailsTabs = Record<DashboardDetailsTabId, TabWithTemplate<string> & {
    featureId: DashboardDetailsTabId;
}>;
interface DashboardAndWidgetThemeDefinition {
    label: string;
    class: string;
    description: string;
}
declare const WIDGET_HEADER_CLASSES: [{
    readonly label: "Regular`style`";
    readonly class: "panel-title-regular";
    readonly description: "The widget has no border between header and content.";
}, {
    readonly label: "Border`style`";
    readonly class: "panel-title-border";
    readonly description: "The widget has a small separation border between header and content.";
}, {
    readonly label: "Overlay`style`";
    readonly class: "panel-title-overlay";
    readonly description: "The widget content overlays the header.";
}, {
    readonly label: "Hidden`style`";
    readonly class: "panel-title-hidden";
    readonly description: "The widget header is not shown.";
}];
declare const WIDGET_CONTENT_CLASSES: [{
    readonly label: "Branded`style`";
    readonly class: "panel-content-branded";
    readonly description: "The widget is styled with the main brand color.";
}, {
    readonly label: "Match dashboard`style`";
    readonly class: "panel-content-light";
    readonly description: "The widget appearance matches the dashboard appearance.";
}, {
    readonly label: "Light`style`";
    readonly class: "panel-content-white";
    readonly description: "The widget has light appearance, that is, dark text on light background.";
}, {
    readonly label: "Dark`style`";
    readonly class: "panel-content-dark";
    readonly description: "The widget has dark appearance, that is, light text on dark background.";
}, {
    readonly label: "Transparent`style`";
    readonly class: "panel-content-transparent";
    readonly description: "The widget has no background.";
}];
declare const DASHBOARD_THEME_CLASSES: [{
    readonly label: "Match UI`theme`";
    readonly class: "dashboard-theme-light";
    readonly description: "The dashboard appearance matches the UI appearance.";
}, {
    readonly label: "Light`theme`";
    readonly class: "dashboard-theme-white";
    readonly description: "The dashboard has light appearance, that is, dark text on light background.";
}, {
    readonly label: "Dark`theme`";
    readonly class: "dashboard-theme-dark";
    readonly description: "The dashboard has dark appearance, that is, light text on dark background.";
}, {
    readonly label: "Branded`theme`";
    readonly class: "dashboard-theme-branded";
    readonly description: "The dashboard is styled using the brand palette.";
}];
declare const STYLING_CLASS_PREFIXES: readonly ["dashboard-theme-", "panel-title-", "panel-content-"];
interface DashboardCopyClipboard {
    dashboardId: string;
    dashboard: ContextDashboard;
    context: DashboardContext;
}
interface DashboardContext {
    context: ViewContext;
    contextData: Partial<IManagedObject>;
}
declare const ALL_GLOBAL_ROLES_SELECTED: "all";
type DashboardGlobalRoles = number[] | typeof ALL_GLOBAL_ROLES_SELECTED;
declare const PRODUCT_EXPERIENCE: {
    readonly DASHBOARD: {
        readonly EVENTS: {
            readonly DASHBOARDS: "dashboards";
            readonly REPORTS: "reports";
            readonly DASHBOARD_TEMPLATE: "dashboardTemplate";
        };
        readonly COMPONENTS: {
            readonly DASHBOARD_VIEW: "context-dashboard";
            readonly DASHBOARD_AVAILABILITY: "dashboard-availability";
            readonly REPORTS_LIST: "report-dashboard-list";
            readonly ADD_REPORT: "report-dashboard-list";
            readonly ADD_DASHBOARD: "add-dashboard";
            readonly DELETE_DASHBOARD: "context-dashboard";
            readonly TYPED_DASHBOARD_SETTINGS: "typed-dashboard-settings";
        };
        readonly CONTEXT: {
            readonly REPORT: "report";
            readonly DEVICE: "device";
            readonly ASSET: "asset";
            readonly GROUP: "group";
        };
        readonly ACTIONS: {
            readonly APPLY_GLOBAL_ROLES_CHANGES: "applyGlobalRolesChanges";
            readonly DELETE: "delete";
            readonly LOAD: "load";
            readonly CREATE: "create";
            readonly ADD_REPORT: "addReport";
            readonly DUPLICATE_AS_REGULAR_DASHBOARD: "duplicateAsRegularDashboard";
        };
    };
};
interface CanDeactivateComponent {
    canDeactivate: () => boolean | Observable<boolean> | Promise<boolean>;
}
declare const REPORT_DEFAULT_NAVIGATION_NODE_PRIORITY = 30;
type AllowTypeDashboard = 'allow' | 'disallow' | 'allow_if_type_filled';
declare const DASHBOARD_DETAILS_OUTLET: "dashboard-details";
declare const DASHBOARD_DETAILS_TABS_OUTLET_NAME: "dashboardTabs";
interface DashboardMetadata {
    isReport: boolean;
    isNamedDashboard: boolean;
    hideAvailability: boolean;
    dashboard: ContextDashboard;
    deviceTypeValue: string;
    displayDeviceTypeValue: string;
    mo: ContextDashboardManagedObject;
    allowTypeDashboard: AllowTypeDashboard;
    isDevice: boolean;
    context: any;
}

declare class ContextDashboardService {
    private inventory;
    private tabs;
    private modal;
    private translateService;
    private router;
    private navigator;
    private permissions;
    private alert;
    private dynamicComponent;
    private groupService;
    private optionsService;
    private appStateService;
    private contextRouteService;
    dashboardTabs$: Observable$1<Tab[]>;
    readonly formDisabled$: Observable$1<boolean>;
    readonly REPORT_PARTIAL_NAME = "report_";
    copyClipboard: DashboardCopyClipboard;
    queriesUtil: QueriesUtil;
    readonly VERSION_HISTORY_SIZE_LIMIT = 10;
    private readonly INVENTORY_ROLES;
    private cache;
    private readonly DEFAULT_PAGESIZE;
    private readonly FRAGMENT_NAME;
    private readonly APPLIED_TO_FRAGMENT;
    private readonly DASHBOARD_ROUTE_PATH;
    private readonly INDEX_SPLIT;
    private readonly CACHE_TIMEOUT;
    private _formDisabled;
    private formDisabledSubject;
    private contextDashboardsCache;
    private appName;
    private readonly HIDE_TYPE_DASHBOARD_FOR_ASSETS;
    get formDisabled(): boolean;
    set formDisabled(value: boolean);
    constructor(inventory: InventoryService, tabs: TabsService, modal: ModalService, translateService: TranslateService, router: Router, navigator: NavigatorService, permissions: Permissions, alert: AlertService, dynamicComponent: DynamicComponentService, groupService: GroupService, optionsService: OptionsService, appStateService: AppStateService, contextRouteService: ContextRouteService);
    create(dashboardCfg: ContextDashboard, context?: ContextData, name?: string): Promise<ContextDashboardManagedObject>;
    detail(dashboardMO: ContextDashboardManagedObject): Promise<IManagedObject>;
    update(dashboard: ContextDashboardManagedObject, context?: ContextData): Promise<ContextDashboardManagedObject>;
    delete(dashboard: ContextDashboardManagedObject, withConfirmation?: boolean): Promise<void>;
    updateDashboardHistory(dashboard: Partial<ContextDashboardManagedObject>, dashboardCfg: ContextDashboard): Partial<ContextDashboardManagedObject>;
    activateDashboards(route: ActivatedRouteSnapshot, types: ContextDashboardType[]): Observable$1<boolean | Tab[]>;
    getDashboard(name: string, defaultWidgets: Widget[]): Observable$1<ContextDashboardManagedObject>;
    updateNavigatorItem(mo: IManagedObject): void;
    navigateToDashboard(dashboardMO: ContextDashboardManagedObject, isNewDashboard?: boolean): Promise<void>;
    /**
     * Checks if user is able to edit dashboard according to his roles and dashboard ownership.
     *
     * @param mo - Dashboard managed object.
     * @returns True if user is able to edit dashboard, false if he cannot.
     */
    canEditDashboard(mo: ContextDashboardManagedObject): Promise<boolean>;
    /**
     * Checks if user has permissions to copy dashboard according to his roles.
     *
     * @returns True if user has permissions to copy dashboard, false if he cannot.
     */
    hasPermissionsToCopyDashboard(): boolean;
    isNamed(dashboard: Partial<ContextDashboardManagedObject>): any;
    isReport(dashboard: Partial<ContextDashboardManagedObject>): any;
    isDeviceType(dashboard: Partial<ContextDashboardManagedObject>): any;
    isDeviceDashboard(dashboard: Partial<ContextDashboardManagedObject>): boolean;
    isGroupDashboard(dashboard: Partial<ContextDashboardManagedObject>): boolean;
    getFilteredDashboardStyles(styleList: string[]): string[];
    getStyling(styleList: any, styleName: any, defaultValue: any): any;
    mapWidgets(widgets: Widget[]): any;
    getDashboard$(dashboardIdOrName: any, dashboardType: ContextDashboardType[], mo?: IManagedObject): Observable$1<ContextDashboardManagedObject>;
    pasteDashboard(newContext: DashboardContext): Promise<void>;
    /**
     * Creates fragment that associates dashboards with device/asset. It consists of three elements:
     * - FRAGMENT_NAME - static string
     * - dashboard type (e.g. 'group', 'device')
     * - fragment value ( id of device/asset if it is not typed dashboard; deviceTypeValue property of dashboard if it is type dashboard)
     * Example fragment for device dashboard: 'c8y_Dashboard!device!773200'
     * Example fragment for group dashboard: 'c8y_Dashboard!group!84129208'
     * Example fragment for typed device dashboard: 'c8y_Dashboard!type!c8y_lwm2m_connector_device'
     *
     * @param contextDashboardType Type of dashboard
     * @param value Fragment value
     * @returns Fragment for dashboard
     */
    createFragmentKey<T extends ContextDashboardType, V extends string>(contextDashboardType: T, value: V): `c8y_Dashboard!${T}!${V}`;
    /**
     * Indicates if dashboard can be set to type dashboard.
     * First, it checks if deviceTypeValue exists and if user has permission to set dashboard type.
     * Then, case from sensor app is checked- dashboard created with sensor app has deviceType set to true but
     * type fragment is missing- we do not support this combination.
     * @param mo Dashboard managed object
     * @param context {ContextData} Current context
     * @returns True if dashboard can be set to type dashboard, false if it is forbidden.
     */
    shouldAllowToSetDashboardType(mo: ContextDashboardManagedObject, context: ContextData): AllowTypeDashboard;
    createReport(reportCfg: Partial<IManagedObject>): Promise<_c8y_client.IResult<IManagedObject>>;
    addReportNavigatorNode(report: IManagedObject): void;
    getContextForGS(mo: IManagedObject): string | null;
    getContextDashboards(mo: IManagedObject, dashboardType: ContextDashboardType[]): Promise<IResultList<IManagedObject>>;
    /**
     * Creates query for application bound dashboards.
     * If application key is not available, it returns empty object.
     * Use it when you need to filter dashboards according to
     * application they are applied to and need pagination.
     */
    appliedToFilter(): {
        __or?: undefined;
    } | {
        __or: ({
            __not: {
                __has: string;
            };
            c8y_AppliedToApplications?: undefined;
        } | {
            c8y_AppliedToApplications: {
                __in: string[];
            };
            __not?: undefined;
        })[];
    };
    /**
     * Creates a tuple describing the dashboard type and its fragments. For assets like devices and groups, it's possible
     * to have two fragments: one indicating this particular device/asset with its ID, and the second indicating
     * the device/asset type (if the dashboard is meant to be applied to all assets of this type).
     *
     * @param dashboardMO - Dashboard managed object.
     * @param context - Context data of asset.
     * @param name - Name of the dashboard.
     * @param isEdit - True if existing dashboard is updated, false when it's creation of new dashboard.
     * @returns Tuple of dashboard type and object containing dashboard fragments.
     */
    private getDashboardFragments;
    /**
     * Clears fragments that originates from other managed object.
     * E.g. typed dashboard is created for device A of type c8y_MQTTDevice and id 1, so it gets fragments object
     * ```ts
     * {
     * c8y_Dashboard!device!1: {},
     * c8y_Dashboard!type!c8y_MQTTDevice: {}
     * }
     *```
     * then, on device B of type c8y_MQTTDevice and id 2, which also has access to this dashboard, deviceType is set to
     * false, so dashboard is not typed dashboard anymore and now belongs to device B, therefore fragments should look like
     * ```ts
     * {
     * c8y_Dashboard!device!1: null, // this value is cleared because dashboard is doesn't belong to device A anymore
     * c8y_Dashboard!device!2: {}, // assign dashboard to device B
     * c8y_Dashboard!type!c8y_MQTTDevice: null // this value is cleared in getDashboardFragments method as it's not typed dashboard anymore
     * }
     * ```
     *
     * @param dashboardMO - Dashboard managed object.
     * @param type - Context dashboard type.
     * @param fragments - Fragments object.
     */
    private clearRedundantFragment;
    /**
     * Used to migrate dashboards from previous 12 columns layout to 24 columns.
     */
    private adjustDashboardFor24Columns;
    private serializeWidgetConfigs;
    private createContextDashboardCopy;
    private copyProperties;
    private replaceContextInDataPoints;
    private replaceContextInObj;
    /**
     * Replaces context IDs in a key-value map by substituting old context IDs with new context IDs.
     *
     * This function handles config values that map property names to managed object IDs,
     * for example used in legacy SCADA widgets (like deviceIds: { scadaPlaceholderName: 12345 }).
     * It iterates through the entries and replaces any ID that matches the old context ID with the new context ID.
     *
     * @param ids - A record mapping property names to managed object IDs
     * @param newContext - The new context managed object containing the ID to replace with
     * @param oldContext - The old context managed object containing the ID to replace
     * @returns A new record with old context IDs replaced by new context IDs
     */
    private replaceContextInIdsObj;
    private getTabs$;
    private verifyDashboardAvailability$;
    private getContextDashboards$;
    /**
     * Cleans already corrupted dashboards from dashboardMo property.
     * Added to fix dashboards on the cloud instance (eu-latest).
     * @deprecated This is going to be removed after 1007.7.0.
     */
    private removeDashboardMoProperty;
    private cacheDashboard;
    private createDashboardTab;
    private clean;
    private getNamedDashboard;
    private createDashboardFragment;
    private shouldSetGlobal;
    private getDefaultDashboard;
    private listAndFilterByApplication;
    static ɵfac: i0.ɵɵFactoryDeclaration<ContextDashboardService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<ContextDashboardService>;
}

declare class DashboardDetailService {
    private fb;
    private translateService;
    private tabsService;
    dashboardDetailsForm: ReturnType<DashboardDetailService['createDashboardDetailsForm']>;
    details: DashboardMetadata;
    detailsTabs: Tab[];
    saveButtonDisabled: boolean;
    get generalSettingsForm(): _angular_forms.AbstractControl<{
        deviceType: boolean;
        icon: "string" | "columns" | "settings" | "export" | "import" | "collapse-arrow" | "angle-up" | "chevron-up" | "forward" | "angle-right" | "chevron-right" | "chevron-breadcrumb" | "expand-arrow" | "angle-down" | "chevron-down" | "caret-back" | "angle-left" | "chevron-left" | "chevron-double-left" | "chevron-double-right" | "chevron-double-up" | "chevron-double-down" | "chevron-circle-up" | "chevron-circle-right" | "chevron-circle-down" | "chevron-circle-left" | "arrow-up" | "arrow-right" | "arrow-down" | "arrow-left" | "panel-control-up" | "angle-double-up" | "panel-control-right" | "angle-double-right" | "panel-control-down" | "angle-double-down" | "panel-control-left" | "angle-double-left" | "download" | "upload" | "internal" | "external" | "undo" | "redo" | "signout" | "signin" | "login" | "sign-in" | "logout" | "sign-out" | "arrow-circle-up" | "arrow-circle-o-up" | "arrow-circle-right" | "arrow-circle-o-right" | "arrow-circle-down" | "arrow-circle-o-down" | "arrow-circle-left" | "arrow-circle-o-left" | "arrow-circle-up-left" | "arrow-circle-down-left" | "arrow-circle-up-right" | "arrow-circle-bottom-right" | "arrow-circle-diameter" | "arrow-circle-divide-horizontal" | "arrow-circle-minimize-horizontal" | "caret-square-o-up" | "toggle-up" | "caret-square-o-down" | "toggle-down" | "caret-square-o-left" | "toggle-left" | "caret-square-o-right" | "toggle-right" | "enter-bottom" | "enter-right" | "enter-top" | "enter-left" | "exit-top" | "exit-right" | "exit-bottom" | "exit-left" | "input-output" | "rotate-right" | "rotate" | "repeat" | "reset" | "rotate-left" | "restore" | "refresh" | "process" | "recycle" | "refresh-exception" | "lock-orientation" | "arrow-dotted-up" | "arrow-dotted-right" | "arrow-advance" | "arrow-dotted-down" | "arrow-dotted-left" | "arrows-dotted-left-right" | "arrows-dotted-up-down" | "up-down-arrows" | "collect" | "merge-horizontal" | "split-horizontal" | "merge-vertical" | "divider" | "split-vertical" | "drag" | "arrows" | "move-step" | "resize-expand" | "arrows-alt" | "expand" | "compress" | "resize-collapse" | "collapse" | "fullscreen" | "fullscreen-exit" | "long-arrow-up" | "long-arrow-right" | "long-arrow-down" | "long-arrow-left" | "arrows-v" | "arrows-h" | "enlarge" | "data-transfer" | "exchange" | "sort-arrow" | "arrows-left-right-diagonal" | "level-up" | "level-down" | "u-turn" | "u-turn-right" | "u-turn-left" | "undo1" | "redo1" | "sort" | "unsorted" | "sort-down" | "sort-desc" | "sort-up" | "sort-asc" | "caret-up" | "caret-right" | "caret-down" | "caret-left" | "squiggly-arrow" | "curly-arrow" | "swap" | "environment" | "shuffle" | "random" | "swipe-up" | "swipe-right" | "swipe-down" | "swipe-left" | "two-finger-swipe-up" | "two-finger-swipe-right" | "two-finger-swipe-down" | "two-finger-swipe-left" | "pinch" | "hospital-o" | "h-square" | "university" | "institution" | "bank" | "ios-themes" | "building" | "building-o" | "apartment" | "department1" | "organization" | "office" | "building-with-rooftop-terrace" | "company" | "warehouse" | "shop" | "work-from-home" | "house" | "dog-house" | "home-automation" | "garage-door" | "depot" | "garage" | "open-garage-door" | "close-garage-door" | "barn" | "bungalow" | "exterior" | "equal-housing-opportunity" | "heating-room" | "mortgage" | "home-safety" | "enterprise-resource-planning" | "travel-agency" | "department-shop" | "book-shelf" | "emergency-exit" | "stairs" | "stairs-down" | "stairs-up" | "temperature-inside" | "treehouse" | "tree" | "water-heater" | "clean" | "magic" | "storage" | "60-degrees" | "120-degrees" | "225-degrees" | "300-degrees" | "360-degrees" | "pie-chart" | "bar-chart" | "bar-chart-o" | "data-account" | "data-decline" | "increase" | "neutral-trading" | "decrease" | "timeline" | "increase-profits" | "combo-chart" | "line-chart" | "graph" | "area-chart" | "sorting-slider" | "sliders" | "hierarchy" | "b2b" | "flow-chart" | "sitemap" | "tree-structure" | "flow" | "stacked-organizational-chart" | "multicast" | "unicast" | "broadcasting" | "genealogy" | "filter" | "conversion" | "clear-filters" | "descending-sorting" | "sort-amount-desc" | "ascending-sorting" | "sort-amount-asc" | "alphabetical-sorting" | "sort-alpha-asc" | "alphabetical-sorting-2" | "sort-alpha-desc" | "data-exchange" | "filing-cabinet" | "database" | "database-administrator" | "data-export" | "data-import" | "grid-off" | "gantt-chart" | "data-grid" | "grid-view" | "grid-on" | "row" | "rows" | "column" | "grid" | "table" | "split-table" | "data-sheet" | "blockchain-technology" | "workflow" | "parallel-workflow" | "mind-map" | "query-inner-join-left" | "sankey" | "creating" | "creativity" | "financial-growth-analysis" | "input" | "omnichannel" | "variable" | "variable-on" | "future" | "time-machine" | "history" | "delivery-time" | "schedule" | "clock" | "clock-o" | "watches-front-view" | "clock1" | "clock11" | "alarm1" | "timer" | "wall-clock" | "alarm-add" | "alarm-on" | "alarm-off" | "calendar" | "calendar-o" | "today" | "calendar-check-o" | "calendar-1" | "calendar-31" | "monday" | "sunday" | "january" | "december" | "edit-calendar" | "view-schedule" | "calendar-add" | "calendar-plus" | "calendar-plus-o" | "calendar-remove" | "calendar-minus" | "calendar-times" | "calendar-minus-o" | "calendar-times-o" | "important-month" | "schedule1" | "sand-watch" | "hourglass-start" | "hourglass-o" | "hourglass-half" | "hourglass-end" | "hourglass" | "hourglass-1" | "hourglass-2" | "hourglass-3" | "timezone-globe" | "timezone" | "timetable" | "day-view" | "month-view" | "week-view" | "year-view" | "thermometer-0" | "thermometer-empty" | "thermometer-3" | "thermometer-three-quarters" | "thermometer-2" | "thermometer-half" | "thermometer-1" | "thermometer-quarter" | "thermometer" | "thermometer-4" | "thermometer-full" | "sensor" | "package" | "packages" | "blockly" | "objects" | "monitoring" | "qr-code" | "online" | "temperature" | "air-conditioner" | "air-shaft" | "fan" | "light" | "light-automation" | "light-off" | "reflector-bulb" | "spiral-bulb" | "mirrored-reflector-bulb" | "light-bulb" | "lightbulb-o" | "light-on" | "plumbing" | "wi-fi-router" | "gas-bottle" | "grater" | "air-quality" | "central-heating" | "light-dimmer" | "radio-station" | "relay-home-automation" | "remote-control" | "tv-off" | "wall-socket" | "washing-machine" | "light-dimming-100-percent" | "light-dimming-10-percent" | "work-light" | "plug" | "electrical" | "water-pipe" | "thermometer-automation" | "fire-extinguisher" | "temperature-sensitive" | "calculator" | "humidity" | "system-information" | "system-report" | "system-task" | "imac-clock" | "imac-exit" | "imac-settings" | "macbook-settings" | "connected" | "disconnected" | "mobile" | "multiple-devices" | "client-management" | "nfc" | "mobile-email" | "empty-battery" | "battery-empty" | "battery-0" | "low-battery" | "battery-quarter" | "battery-1" | "battery-level" | "battery-2" | "battery-half" | "charged-battery" | "battery-3" | "battery-three-quarters" | "full-battery" | "battery-full" | "battery-4" | "battery" | "no-battery" | "charging-battery" | "no-connection" | "low-connection" | "signal" | "factory" | "industry" | "robot" | "bot" | "fork-lift" | "gear-complex" | "cog-complex" | "gears" | "cogs" | "automation" | "automatic" | "electronics" | "gas" | "water" | "tint" | "greentech" | "radio-tower" | "industrial-scales" | "balance-scale" | "iphone" | "mobile-phone" | "smartphone" | "smartphone-approve" | "smartphone-decline" | "phonelink-lock" | "tablet-mac" | "tablet" | "devices" | "imac" | "desktop" | "desktop1" | "monitor" | "tv" | "television" | "laptop" | "checked-laptop" | "laptop-alert" | "laptop-error" | "computer-support" | "programming" | "keyboard" | "keyboard-o" | "video-conference" | "remote-desktop" | "workspace" | "workstation" | "microchip" | "processor" | "smartphone-ram" | "bios" | "micro-sd" | "hdd" | "hdd-o" | "financial-dynamic-presentation" | "presentation" | "room-finder" | "statistics" | "server" | "stack" | "critical-thinking" | "environment1" | "network-card" | "network-cable" | "usb-on" | "ssd" | "asterisk-key" | "asterisk" | "end-button" | "hub" | "individual-server" | "data-center" | "root-server" | "switch" | "nas" | "shutdown" | "power-off" | "hibernate" | "phone-square" | "phone" | "no-idea" | "network" | "centralized-network" | "customer-insights-manager" | "gift" | "small-business" | "pricing" | "free-trial" | "buy1" | "cart-plus" | "cart-arrow-down" | "return-purchase" | "shopping-cart-with-money" | "buying" | "shopping-cart" | "procurement" | "delivery-handcart" | "cheap-21" | "average-2" | "stripe1" | "loyalty-card" | "shopping-check" | "shopping-bag" | "atm" | "bank-card-dollar" | "bank-card-euro" | "contactless-payment" | "qrcode" | "data-matrix-code" | "barcode" | "no-barcode" | "refresh-barcode" | "touch-id" | "redeem" | "card-exchange" | "card-security" | "cash-register" | "cost" | "create-order" | "online-payment1" | "rent1" | "package-settings" | "product-loading" | "purchase-order" | "receipt1" | "scan-stock" | "shipment-logistic" | "shipping-center" | "shipping-centre-loading-belt" | "shopaholic" | "basket" | "shopping-basket" | "add-basket" | "paid" | "text-width" | "text-height" | "paragraph" | "pilcrow" | "text-input" | "unavailable" | "save" | "save-commit" | "delete" | "copy" | "paste" | "more-menu" | "password-hide" | "password-show" | "zoom-in" | "zoom-out" | "buy" | "list" | "list-alt" | "list-ul" | "format-align-justify" | "align-justify" | "format-align-left" | "align-left" | "format-align-center" | "align-center" | "format-align-right" | "align-right" | "radio-button-on" | "dot-circle-o" | "colorize" | "eyedropper" | "brush" | "paint-brush" | "file-create" | "edit" | "email-sign" | "at" | "get-quote" | "quote-right" | "quote-left" | "format-bold" | "bold" | "format-underlined" | "underline" | "strikethrough-s" | "strikethrough" | "title" | "header" | "subscript" | "superscript" | "format-italic" | "italic" | "font-download" | "font" | "questionnaire" | "th-list" | "tasklist" | "communication-sorting" | "todo-list" | "tasks" | "numbered-list" | "list-ol" | "search-in-list" | "table-of-content" | "index" | "tiles" | "edit1" | "pencil" | "pencil-square" | "pencil-square-o" | "edit11" | "no-edit" | "cut" | "scissors" | "coupon" | "crop" | "erase" | "eraser" | "add-white-space" | "blur" | "paint-palette" | "contrast" | "adjust" | "bring-forward" | "snap-background-to-white" | "rename" | "text-cursor" | "i-cursor" | "large-icons" | "comma" | "compare" | "content" | "document-body" | "merge-docunemts" | "unit" | "group" | "group-objects" | "object-group" | "object-ungroup" | "ungroup" | "hexagonal-pattern" | "diagonal-lines" | "line-width" | "long-words" | "indent" | "indent-left" | "indent-decrease" | "dedent" | "dedent-left" | "outdent" | "indent-right" | "dedent-right" | "drag-reorder" | "drag-list-up" | "pull-down" | "page" | "rearrange" | "resize-file" | "resize" | "rich-text-converter" | "select-all" | "select-none" | "ruler" | "length" | "send-backward" | "send-to-back" | "replace" | "separated-lists" | "short-words" | "mix-words" | "line-style" | "design" | "view-stream" | "four-squares" | "th-large" | "thumbnails" | "th" | "view-module" | "top-view" | "orthogonal-view" | "rectangular" | "square" | "view-column" | "file-archive-o" | "file-zip-o" | "file-video-o" | "file-movie-o" | "file-audio-o" | "file-sound-o" | "microsoft-access" | "microsoft-onenote" | "microsoft-outlook" | "microsoft-project" | "microsoft-publisher" | "microsoft-sharepoint" | "microsoft-visio" | "word" | "file-word-o" | "excel" | "file-excel-o" | "ppt" | "file-powerpoint-o" | "create-archive" | "save-archive" | "delete-archive" | "gif" | "gis" | "gpx" | "heic-filetype" | "dmg" | "jpg" | "kmz" | "kml" | "mp3" | "dng" | "nef" | "nmea" | "tar" | "ttf" | "tif" | "obj" | "webp" | "ogg" | "woff" | "xls" | "xps" | "zip" | "wma" | "osm" | "otf" | "dwg" | "png" | "eps" | "ps" | "rar" | "raw" | "psd" | "exe" | "fbx" | "pdf-2" | "3fr" | "aac" | "7zip" | "cr2" | "ai" | "apk" | "wav" | "jp2" | "java-file" | "fff" | "folder-aggregate" | "book" | "package-delivery-logistics" | "cube" | "resume" | "insert-drive-file" | "file" | "file-o" | "sheet-of-paper" | "edit-file" | "documents" | "file-copy" | "files" | "files-o" | "profile" | "pdf" | "file-pdf-o" | "export-pdf" | "file-type-document" | "file-text-o" | "file-text" | "document" | "submit-document1" | "privacy-policy" | "selective-highlighting1" | "brief" | "document-with-code" | "image-file" | "file-image-o" | "file-picture-o" | "file-photo-o" | "image-file-add" | "image-file-checked" | "image-file-remove" | "check-document" | "document-with-a-check-mark" | "delete-file" | "file-delete" | "file-settings" | "file-preview" | "open-document" | "submit-document" | "restore-page1" | "document-exchange" | "import-file" | "share-document" | "idea" | "mark-as-favorite" | "email-document" | "file-view" | "policy-document" | "business-report" | "graph-report" | "edit-graph-report" | "download-graph-report" | "agreement" | "estimates" | "winking-document" | "insert-page" | "note" | "brochure" | "read" | "cashbook" | "price-tag" | "tag" | "add-tag" | "tag1" | "tags" | "open-folder" | "opened-folder" | "folder-open" | "folder-open-o" | "folder" | "folder-o" | "folder-open1" | "add-folder" | "delete-folder" | "search-folder" | "folder-settings" | "extensions-folder" | "private-folder" | "edit-folder" | "e-mail-folder" | "documents-folder" | "downloads-folder" | "favorite-folder" | "user-folder" | "download-from-ftp" | "upload-to-ftp" | "ftp" | "big-parcel" | "open-parcel" | "packing" | "unpacking" | "cardboard-box" | "archive" | "archive-o" | "file-archive-o1" | "box" | "case" | "empty-box" | "box-settings" | "secured-delivery" | "remove-delivery" | "out-of-stock" | "new-product" | "product" | "product-management" | "stacking" | "cv" | "unarchive" | "upload-archive" | "archive-file" | "download-archive" | "cc-stripe" | "google-wallet" | "paypal" | "cc-paypal" | "cc-amex" | "cc-discover" | "cc-visa" | "cc-mastercard" | "try" | "turkish-lira" | "rouble" | "rub" | "ruble" | "krw" | "won" | "inr" | "rupee" | "ils" | "shekel" | "sheqel" | "gbp" | "eur" | "euro" | "cny" | "jpy" | "rmb" | "yen" | "bitcoin" | "btc" | "dollar" | "usd" | "calculator1" | "accounting" | "contract" | "sales-performance" | "bank-safe" | "mobile-payment" | "money-yours" | "online-payment" | "us-dollar-circled" | "credit-card" | "credit-card-alt" | "only-cash" | "credit-control" | "bank-cards" | "check-for-payment" | "paper-money" | "money" | "cash-euro" | "stack-of-money" | "wallet" | "certificate" | "card-security1" | "bill" | "paid-bill" | "token-card-code1" | "receipt" | "add-receipt" | "sign-language" | "signing" | "hand-o-down" | "hand-o-left" | "hand-o-up" | "hand-o-right" | "hand-peace-o" | "hand-pointer-o" | "hand-spock-o" | "hand-lizard-o" | "hand-scissors-o" | "hand-paper-o" | "hand-stop-o" | "hand-grab-o" | "hand-rock-o" | "thumbs-up" | "thumbs-o-up" | "thumbs-down" | "thumbs-o-down" | "do-not-touch" | "hand" | "disclaimer" | "touchpad" | "holding-box" | "recieve" | "sell" | "get-revenue" | "handshake" | "handshake-o" | "partners" | "wearable-technology" | "america" | "globe" | "location" | "globe1" | "compass-north" | "compass" | "marker" | "marker-off" | "find-clinic" | "tesla-supercharger-pin" | "address" | "cab-stand" | "map" | "map-o" | "map-editing" | "map-marker" | "quest" | "waypoint-map" | "anchor-nodes" | "map-pin" | "signpost-tourist" | "map-signs" | "gps" | "near-me" | "location-arrow" | "navigation" | "target1" | "hunt" | "location-off" | "location-update" | "layers" | "journey" | "here" | "street-view" | "parking" | "reply" | "mail-reply" | "forward1" | "mail-forward" | "reply-all" | "mail-reply-all" | "communication" | "multichannel" | "chat" | "topic" | "comment" | "comment-o" | "typing" | "quote" | "delete-message" | "poll" | "popular" | "speaker-notes" | "audio-description" | "comment1" | "comments" | "comments-o" | "speaker-notes-off" | "new-topic" | "ask-question" | "chat-bubble" | "commenting" | "commenting-o" | "mail" | "important-mail" | "envelope" | "envelope-o" | "envelope-open-o" | "envelope-open" | "edit-message" | "received" | "deleted-message" | "group-message" | "subscription" | "unsubscribe" | "send-email" | "read-message" | "inbox" | "add-to-inbox" | "check-inbox" | "remove-from-inbox" | "outbox" | "post" | "envelope-square" | "sheet" | "sticky-note" | "sticky-note-o" | "note1" | "secure" | "retweet" | "rss" | "rss-square" | "feed" | "cancel-subscription" | "link" | "chain" | "link-off" | "chain-broken" | "unlink" | "sent" | "send" | "email-send" | "send-o" | "paper-plane" | "paper-plane-o" | "hashtag" | "podcast" | "headphones" | "volume-control-phone" | "volume-off" | "volume-mute" | "volume-zero" | "volume-low" | "volume-down" | "volume" | "speaker" | "volume-up" | "volume-high" | "sound" | "headset" | "play-circle" | "pause-circle" | "stop-circle" | "skip-previous" | "step-backward" | "fast-rewind" | "rewind" | "fast-rewind1" | "fast-backward" | "backward" | "play-arrow" | "play" | "play-circle1" | "play-circle-o" | "pause" | "stop" | "forward11" | "fast-forward" | "forward111" | "fast-forward1" | "skip-next" | "step-forward" | "no-image" | "local-movies" | "theaters" | "film" | "mic" | "microphone" | "block-microphone" | "microphone-slash" | "music-note" | "music" | "photo-camera-front" | "video-camera" | "camera" | "camera-retro" | "cam" | "image" | "picture" | "picture-o" | "photo" | "photo-gallery" | "albums" | "cubes" | "slides" | "bursts" | "exposure" | "gallery" | "insert-clip" | "memories" | "overwrite-clip" | "selfies" | "facebook" | "instagram" | "linkedin" | "pinterest" | "twitter" | "youtube" | "youtube-play" | "google" | "github" | "cloud" | "cloud-search" | "search-in-cloud" | "cloud-settings" | "cloud-checked" | "cloud-restricted" | "cloud-plus" | "cloud-minus" | "cloud-error" | "cloud-unavailable" | "cloud-upload" | "backup" | "cloud-download" | "cloud-backup-restore" | "cloud-remote-working" | "cloud-bar-chart" | "cloud-binary-code" | "cloud-broadcasting" | "secure-cloud" | "error-cloud" | "cloud-cross" | "dashed-cloud" | "cloud-connection" | "cloud-firewall" | "cloud-link" | "cloud-waiting" | "public-cloud" | "delete-from-cloud" | "cloud-refresh" | "cloud-right-u-arrow" | "cloud-share-symbol" | "cloud-development" | "cloud-sync" | "cloud-user" | "cloud-computing" | "cloud-storage" | "cloud-network" | "computer" | "connected-people" | "connection-sync" | "network-2" | "incoming-data" | "outgoing-data" | "remote-desktop1" | "security-wi-fi" | "server1" | "server-shutdown1" | "ftp-server" | "thin-client" | "wi-fi" | "wifi" | "wireless-network" | "wi-fi-off" | "wi-fi-connected" | "wi-fi-disconnected" | "wi-fi-lock" | "scan-wi-fi" | "bluetooth" | "bluetooth-b" | "bluetooth-symbol" | "decentralized-network" | "light-bulb-outline" | "medkit" | "fax" | "beer" | "department" | "tty" | "target" | "crosshairs" | "accuracy" | "goal" | "bullseye" | "address-book" | "address-book-o" | "contacts-book" | "attract-customers" | "magnet" | "guarantee" | "commercial" | "bullhorn" | "announcement" | "podium" | "time-card" | "change" | "applicant" | "download-resume" | "submit-resume" | "briefcase" | "suitcase" | "new-job" | "job-seeker" | "business-building" | "dossier" | "alarms" | "project" | "important-book" | "important-note" | "name-tag" | "id-badge" | "assignment-return" | "note-taking" | "audit" | "badge" | "vcard" | "vcard-o" | "id-card" | "id-card-o" | "address-card-o" | "address-card" | "drivers-license" | "drivers-license-o" | "new-contact" | "contact-details" | "phone-contact" | "inspection" | "clipboard-with-a-tick" | "survey" | "no-data-available" | "task-planning" | "invoice" | "summary-list" | "study" | "card" | "job" | "print" | "communication-internet" | "language-skill" | "language" | "close-program" | "window-close" | "window-close-o" | "new-slide" | "web-analytics" | "planner" | "rescheduling-a-task" | "resume-website" | "product-documents" | "resume-template" | "rubber-stamp" | "stamp" | "video-projector" | "management1" | "gavel" | "legal" | "user-md" | "wheelchair-alt" | "wheelchair" | "child" | "workspace1" | "male-user" | "user-circle-o" | "user-circle" | "user-plus" | "add-user" | "remove-user" | "user-minus" | "user-times" | "user-account" | "user" | "user-o" | "manager" | "businessman" | "male" | "document-writer" | "supplier" | "search-client" | "account-enable" | "account-disable" | "insurance-agent" | "payroll" | "lawyer" | "complaint" | "appointment-scheduling" | "caretaker" | "guardian" | "batch-assign" | "people" | "users" | "group1" | "management" | "team" | "people-working-together" | "group-task" | "accessibility" | "universal-access" | "pregnant-woman" | "female" | "business-conference-female-speaker" | "organization-chart-people" | "meeting-room" | "permanent-job" | "contact-us" | "voice-recognition" | "collaboration" | "technical-support" | "online-support" | "student-male" | "devops" | "exhibitor" | "env-permission" | "bathtub" | "bath" | "s15" | "hotel" | "local-hotel" | "bed" | "intelligence" | "c8y-aab-icon-model" | "c8y-aab-icon-template-model" | "c8y-accounts" | "c8y-add-user" | "c8y-administration" | "c8y-alarm" | "c8y-alert-idle" | "c8y-alfabet" | "c8y-analytic-model" | "c8y-analytics-builder" | "c8y-apama-epl" | "c8y-apama-machine-learning-workbench" | "c8y-apama-machine-learning" | "c8y-archive" | "c8y-aris" | "c8y-atom" | "c8y-book" | "c8y-bookmark" | "c8y-bulb" | "c8y-business-rules" | "c8y-c8y-c" | "c8y-c8y-data" | "c8y-c8y-support" | "c8y-c8y" | "c8y-calendar" | "c8y-chart" | "c8y-circle-star" | "c8y-cloud-container" | "c8y-cockpit" | "c8y-component" | "c8y-connector-in" | "c8y-connector-out" | "c8y-css" | "c8y-cumulocity-iot" | "c8y-data-broker" | "c8y-data-explorer" | "c8y-data-hub" | "c8y-data-points" | "c8y-design" | "c8y-device-connect" | "c8y-device-control" | "c8y-device-management" | "c8y-device-profile" | "c8y-device-protocols" | "c8y-device" | "c8y-dynamic-mapper" | "c8y-e2e-monitoring" | "c8y-energy" | "c8y-enterprise" | "c8y-event-processing" | "online1" | "c8y-fieldbus" | "c8y-find-map" | "c8y-firmware" | "c8y-grid-off" | "c8y-grid-on" | "c8y-group-add" | "c8y-group-open" | "c8y-group-remote-inactive" | "c8y-group-remote-open" | "c8y-group-remote" | "c8y-group-smart-open" | "c8y-group-smart" | "c8y-group" | "c8y-java" | "c8y-layers" | "c8y-layout" | "c8y-location" | "c8y-machine-portal" | "c8y-management" | "c8y-metering" | "c8y-mft" | "c8y-mobile-add" | "c8y-mobile-config" | "c8y-modules" | "c8y-mycloud" | "c8y-notification" | "c8y-oee" | "c8y-onnx" | "c8y-overviews" | "c8y-parameters-on" | "c8y-parameters" | "c8y-parking" | "c8y-report" | "c8y-reports" | "c8y-rocket" | "c8y-saas" | "c8y-security" | "c8y-shield" | "c8y-simulator" | "c8y-smart-rest" | "c8y-smart-rules" | "c8y-analytics-smart-rules" | "c8y-solution-accelerator" | "c8y-streaming-analytics" | "c8y-sub-tenants" | "c8y-tenant-policies" | "c8y-tools" | "c8y-tracking" | "c8y-usage-statistics" | "c8y-user" | "c8y-users" | "c8y-waste-bin" | "c8y-wm-api" | "c8y-wm-b2b" | "c8y-wm-dynamicapps" | "c8y-wm-integration" | "source-code" | "code" | "html-code" | "code1" | "file-code-o" | "console" | "terminal" | "add-property" | "delete-document" | "urgent-property" | "remove-property" | "edit-property" | "template" | "test" | "property-script" | "show-property" | "search-property" | "timesheet" | "important-property" | "new-property" | "navigation-toolbar-top" | "window-maximize" | "web-application-firewall" | "website-bug" | "bug" | "web-design" | "navigation-toolbar-bottom" | "more-details" | "navigation-pane" | "pin" | "thumb-tack" | "unpin" | "commit-git" | "codefork" | "code-fork" | "merge-git" | "pull-request" | "compare-git" | "share" | "share-alt" | "share-alt-square" | "activity-history" | "rules" | "create-document" | "product-architecture" | "registry-editor" | "rest-api" | "true-false" | "uninstall-programs" | "sheets" | "stages" | "add-stage" | "api" | "blockly-turquoise" | "blockly-blue" | "blockly-pink" | "plugin" | "base-64" | "xml-transformer" | "shield" | "protect" | "warning-shield" | "free-forever" | "identification-documents" | "id-verified" | "fingerprint" | "pin-code" | "password" | "lock" | "unlock" | "privacy" | "lock-outline" | "lock1" | "lock-open" | "unlock1" | "unlock-alt" | "key" | "access" | "lock11" | "realtime" | "smart-home-connection" | "smart-home-checked" | "smart-home-error" | "smart-home-remove" | "smart-home-shield" | "voice-id" | "web-application-firewall1" | "copyright" | "spy" | "user-secret" | "bug1" | "health-examine" | "stethoscope" | "space-shuttle" | "ambulance" | "car" | "automobile" | "local-taxi" | "taxi" | "cab" | "truck" | "file-delivery" | "in-transit" | "bus" | "train" | "directions-subway" | "directions-transit" | "tram" | "delivery-dining" | "scooter" | "pedal-bike" | "bicycle" | "motorcycle" | "airport" | "plane" | "fighter-jet" | "directions-ferry" | "ship" | "deploy" | "rocket" | "wrench1" | "road" | "flag-outline" | "software" | "newspaper-o" | "creative-commons" | "spinner" | "loading" | "busy" | "wheel" | "trademark" | "toggle-on" | "toggle-off" | "ticket" | "spoon" | "sort-numeric-desc" | "sort-numeric-asc" | "snowflake-o" | "shower" | "percent" | "paw" | "mouse-pointer" | "lemon-o" | "leaf" | "diamond" | "braille" | "bomb" | "binoculars" | "eject" | "touch-app" | "soccer" | "football" | "futbol-o" | "soccer-ball-o" | "mood" | "meh-o" | "frown-o" | "smile-o" | "deaf" | "deafness" | "hard-of-hearing" | "assistive-listening-systems" | "american-sign-language-interpreting" | "asl-interpreting" | "cc" | "closed-caption" | "anchor" | "accessibility-settings" | "info" | "info-circle" | "warning" | "report-problem" | "exclamation-triangle" | "exclamation-circle" | "error" | "high-priority" | "spam" | "help" | "question-circle" | "question" | "help-outline" | "question-circle-o" | "approval" | "trophy" | "unverified-account" | "automatic-gearbox-warning" | "exclamation-circle1" | "user-manual" | "stages1" | "menu" | "reorder" | "navicon" | "bars" | "hamburger" | "menu-vertical" | "ellipsis-v" | "app-switcher" | "menu-horizontal" | "ellipsis-h" | "plus-math" | "plus" | "subtract" | "minus" | "clear" | "close" | "remove" | "times" | "equals" | "exclamation" | "check" | "upvote-downvote" | "math" | "less-than1" | "more-than" | "circled-notch" | "circle-o-notch" | "inactive-state" | "storage1" | "lifebuoy" | "life-buoy" | "life-ring" | "life-saver" | "wait" | "block" | "ban" | "copy1" | "clone" | "paste1" | "clipboard" | "search-more" | "search" | "mobile-zoom-in" | "search-plus" | "mobile-zoom-out" | "search-minus" | "product1" | "trash-can" | "trash" | "editing-trash" | "trash-o" | "delete-bin" | "eye" | "visibility-off" | "low-vision" | "eye-slash" | "blind" | "double-tap" | "heart" | "heart-o" | "unheart" | "science" | "flask" | "school" | "graduation-cap" | "mortar-board" | "badge1" | "data-quality" | "brightness-low" | "brightness-5" | "sun-o" | "bedtime" | "moon-o" | "moon" | "add-identity-provider" | "bookmark-outline" | "turned-in-not" | "bookmark-o" | "unbookmark" | "bookmark" | "turned-in" | "check-box" | "check-square" | "check-square-o" | "checkbox-selected" | "add-box" | "plus-square" | "indeterminate-check-box" | "minus-square" | "duplicate" | "check-box-outline-blank" | "square-o" | "checkbox-unselected" | "add-new" | "plus-square-o" | "negative" | "minus-square-o" | "multiplication" | "times-rectangle-o" | "times-rectangle" | "ratio" | "circle" | "contrast1" | "connection-status-on" | "ok" | "check-circle" | "check-circle-o" | "success" | "cross-circle" | "times-circle" | "times-circle-o" | "add" | "plus-circle" | "minus-circle" | "minus-sign" | "radio-button-unchecked" | "circle-o" | "circle-thin" | "add-circle-outline" | "plus-circle-o" | "local-fire-department" | "fire" | "outlined-flag" | "flag-o" | "flag" | "assistant-photo" | "flag-checkered" | "flash-on" | "bolt" | "quick-mode-on" | "flash" | "quick-mode-off" | "videogame-asset" | "gamepad" | "portraits" | "extension" | "puzzle" | "puzzle-piece" | "star-outline" | "star-o" | "unstar" | "star-half" | "star-half-empty" | "star-half-full" | "star-half-o" | "star" | "grade" | "home-page" | "home" | "attach" | "paper-clip" | "paperclip" | "link1" | "unlink1" | "offline" | "notification" | "notifications" | "bell" | "bell-o" | "alarm" | "no-reminders" | "bell-slash" | "bell-slash-o" | "medium-priority" | "sliders1" | "sliders2" | "adjust1" | "tune" | "customize" | "button" | "breadcrumb" | "window-minimize" | "versions" | "pages" | "change-theme" | "window-restore" | "landing-page" | "continuous-mode" | "ruler-pencil" | "header1" | "body" | "footer" | "logs" | "overview" | "tab" | "cursor-in-window" | "advertisement-page" | "share-square-o" | "share-square" | "share1" | "external-link" | "trigger" | "rules1" | "email" | "form" | "language1" | "loading-bar" | "output" | "save1" | "floppy-o" | "single-choice" | "single-page-mode" | "skip" | "support" | "wrench" | "maintenance" | "utility" | "themes" | "book1" | "top-menu" | "user-menu-male" | "hint" | "xlarge-icons1" | "circled-menu" | "keypad" | "cake" | "birthday-cake" | "intelligence1" | "beginner" | "restaurant" | "cutlery" | "local-cafe" | "free-breakfast" | "coffee" | "wine-bar" | "glass" | "espresso-cup" | "broom" | "buy-upgrade" | "speedometer" | "dashboard" | "tachometer" | "palette" | "car-battery" | "magnetic" | "magnet1" | "right-navigation-toolbar" | "tilt" | "clear-symbol" | "cog" | "gear" | "advanced-search" | "heartbeat" | "installing-updates" | "heating-automation" | "impressum" | "sun" | "sunlight" | "cloud1" | "rain" | "winter" | "storm" | "keep-dry" | "umbrella" | (string & {});
        priority: number;
        name: any;
        description: string;
        globalRolesIds: DashboardGlobalRoles;
        c8y_IsNavigatorNode: boolean;
    }, {
        deviceType: boolean;
        icon: "string" | "columns" | "settings" | "export" | "import" | "collapse-arrow" | "angle-up" | "chevron-up" | "forward" | "angle-right" | "chevron-right" | "chevron-breadcrumb" | "expand-arrow" | "angle-down" | "chevron-down" | "caret-back" | "angle-left" | "chevron-left" | "chevron-double-left" | "chevron-double-right" | "chevron-double-up" | "chevron-double-down" | "chevron-circle-up" | "chevron-circle-right" | "chevron-circle-down" | "chevron-circle-left" | "arrow-up" | "arrow-right" | "arrow-down" | "arrow-left" | "panel-control-up" | "angle-double-up" | "panel-control-right" | "angle-double-right" | "panel-control-down" | "angle-double-down" | "panel-control-left" | "angle-double-left" | "download" | "upload" | "internal" | "external" | "undo" | "redo" | "signout" | "signin" | "login" | "sign-in" | "logout" | "sign-out" | "arrow-circle-up" | "arrow-circle-o-up" | "arrow-circle-right" | "arrow-circle-o-right" | "arrow-circle-down" | "arrow-circle-o-down" | "arrow-circle-left" | "arrow-circle-o-left" | "arrow-circle-up-left" | "arrow-circle-down-left" | "arrow-circle-up-right" | "arrow-circle-bottom-right" | "arrow-circle-diameter" | "arrow-circle-divide-horizontal" | "arrow-circle-minimize-horizontal" | "caret-square-o-up" | "toggle-up" | "caret-square-o-down" | "toggle-down" | "caret-square-o-left" | "toggle-left" | "caret-square-o-right" | "toggle-right" | "enter-bottom" | "enter-right" | "enter-top" | "enter-left" | "exit-top" | "exit-right" | "exit-bottom" | "exit-left" | "input-output" | "rotate-right" | "rotate" | "repeat" | "reset" | "rotate-left" | "restore" | "refresh" | "process" | "recycle" | "refresh-exception" | "lock-orientation" | "arrow-dotted-up" | "arrow-dotted-right" | "arrow-advance" | "arrow-dotted-down" | "arrow-dotted-left" | "arrows-dotted-left-right" | "arrows-dotted-up-down" | "up-down-arrows" | "collect" | "merge-horizontal" | "split-horizontal" | "merge-vertical" | "divider" | "split-vertical" | "drag" | "arrows" | "move-step" | "resize-expand" | "arrows-alt" | "expand" | "compress" | "resize-collapse" | "collapse" | "fullscreen" | "fullscreen-exit" | "long-arrow-up" | "long-arrow-right" | "long-arrow-down" | "long-arrow-left" | "arrows-v" | "arrows-h" | "enlarge" | "data-transfer" | "exchange" | "sort-arrow" | "arrows-left-right-diagonal" | "level-up" | "level-down" | "u-turn" | "u-turn-right" | "u-turn-left" | "undo1" | "redo1" | "sort" | "unsorted" | "sort-down" | "sort-desc" | "sort-up" | "sort-asc" | "caret-up" | "caret-right" | "caret-down" | "caret-left" | "squiggly-arrow" | "curly-arrow" | "swap" | "environment" | "shuffle" | "random" | "swipe-up" | "swipe-right" | "swipe-down" | "swipe-left" | "two-finger-swipe-up" | "two-finger-swipe-right" | "two-finger-swipe-down" | "two-finger-swipe-left" | "pinch" | "hospital-o" | "h-square" | "university" | "institution" | "bank" | "ios-themes" | "building" | "building-o" | "apartment" | "department1" | "organization" | "office" | "building-with-rooftop-terrace" | "company" | "warehouse" | "shop" | "work-from-home" | "house" | "dog-house" | "home-automation" | "garage-door" | "depot" | "garage" | "open-garage-door" | "close-garage-door" | "barn" | "bungalow" | "exterior" | "equal-housing-opportunity" | "heating-room" | "mortgage" | "home-safety" | "enterprise-resource-planning" | "travel-agency" | "department-shop" | "book-shelf" | "emergency-exit" | "stairs" | "stairs-down" | "stairs-up" | "temperature-inside" | "treehouse" | "tree" | "water-heater" | "clean" | "magic" | "storage" | "60-degrees" | "120-degrees" | "225-degrees" | "300-degrees" | "360-degrees" | "pie-chart" | "bar-chart" | "bar-chart-o" | "data-account" | "data-decline" | "increase" | "neutral-trading" | "decrease" | "timeline" | "increase-profits" | "combo-chart" | "line-chart" | "graph" | "area-chart" | "sorting-slider" | "sliders" | "hierarchy" | "b2b" | "flow-chart" | "sitemap" | "tree-structure" | "flow" | "stacked-organizational-chart" | "multicast" | "unicast" | "broadcasting" | "genealogy" | "filter" | "conversion" | "clear-filters" | "descending-sorting" | "sort-amount-desc" | "ascending-sorting" | "sort-amount-asc" | "alphabetical-sorting" | "sort-alpha-asc" | "alphabetical-sorting-2" | "sort-alpha-desc" | "data-exchange" | "filing-cabinet" | "database" | "database-administrator" | "data-export" | "data-import" | "grid-off" | "gantt-chart" | "data-grid" | "grid-view" | "grid-on" | "row" | "rows" | "column" | "grid" | "table" | "split-table" | "data-sheet" | "blockchain-technology" | "workflow" | "parallel-workflow" | "mind-map" | "query-inner-join-left" | "sankey" | "creating" | "creativity" | "financial-growth-analysis" | "input" | "omnichannel" | "variable" | "variable-on" | "future" | "time-machine" | "history" | "delivery-time" | "schedule" | "clock" | "clock-o" | "watches-front-view" | "clock1" | "clock11" | "alarm1" | "timer" | "wall-clock" | "alarm-add" | "alarm-on" | "alarm-off" | "calendar" | "calendar-o" | "today" | "calendar-check-o" | "calendar-1" | "calendar-31" | "monday" | "sunday" | "january" | "december" | "edit-calendar" | "view-schedule" | "calendar-add" | "calendar-plus" | "calendar-plus-o" | "calendar-remove" | "calendar-minus" | "calendar-times" | "calendar-minus-o" | "calendar-times-o" | "important-month" | "schedule1" | "sand-watch" | "hourglass-start" | "hourglass-o" | "hourglass-half" | "hourglass-end" | "hourglass" | "hourglass-1" | "hourglass-2" | "hourglass-3" | "timezone-globe" | "timezone" | "timetable" | "day-view" | "month-view" | "week-view" | "year-view" | "thermometer-0" | "thermometer-empty" | "thermometer-3" | "thermometer-three-quarters" | "thermometer-2" | "thermometer-half" | "thermometer-1" | "thermometer-quarter" | "thermometer" | "thermometer-4" | "thermometer-full" | "sensor" | "package" | "packages" | "blockly" | "objects" | "monitoring" | "qr-code" | "online" | "temperature" | "air-conditioner" | "air-shaft" | "fan" | "light" | "light-automation" | "light-off" | "reflector-bulb" | "spiral-bulb" | "mirrored-reflector-bulb" | "light-bulb" | "lightbulb-o" | "light-on" | "plumbing" | "wi-fi-router" | "gas-bottle" | "grater" | "air-quality" | "central-heating" | "light-dimmer" | "radio-station" | "relay-home-automation" | "remote-control" | "tv-off" | "wall-socket" | "washing-machine" | "light-dimming-100-percent" | "light-dimming-10-percent" | "work-light" | "plug" | "electrical" | "water-pipe" | "thermometer-automation" | "fire-extinguisher" | "temperature-sensitive" | "calculator" | "humidity" | "system-information" | "system-report" | "system-task" | "imac-clock" | "imac-exit" | "imac-settings" | "macbook-settings" | "connected" | "disconnected" | "mobile" | "multiple-devices" | "client-management" | "nfc" | "mobile-email" | "empty-battery" | "battery-empty" | "battery-0" | "low-battery" | "battery-quarter" | "battery-1" | "battery-level" | "battery-2" | "battery-half" | "charged-battery" | "battery-3" | "battery-three-quarters" | "full-battery" | "battery-full" | "battery-4" | "battery" | "no-battery" | "charging-battery" | "no-connection" | "low-connection" | "signal" | "factory" | "industry" | "robot" | "bot" | "fork-lift" | "gear-complex" | "cog-complex" | "gears" | "cogs" | "automation" | "automatic" | "electronics" | "gas" | "water" | "tint" | "greentech" | "radio-tower" | "industrial-scales" | "balance-scale" | "iphone" | "mobile-phone" | "smartphone" | "smartphone-approve" | "smartphone-decline" | "phonelink-lock" | "tablet-mac" | "tablet" | "devices" | "imac" | "desktop" | "desktop1" | "monitor" | "tv" | "television" | "laptop" | "checked-laptop" | "laptop-alert" | "laptop-error" | "computer-support" | "programming" | "keyboard" | "keyboard-o" | "video-conference" | "remote-desktop" | "workspace" | "workstation" | "microchip" | "processor" | "smartphone-ram" | "bios" | "micro-sd" | "hdd" | "hdd-o" | "financial-dynamic-presentation" | "presentation" | "room-finder" | "statistics" | "server" | "stack" | "critical-thinking" | "environment1" | "network-card" | "network-cable" | "usb-on" | "ssd" | "asterisk-key" | "asterisk" | "end-button" | "hub" | "individual-server" | "data-center" | "root-server" | "switch" | "nas" | "shutdown" | "power-off" | "hibernate" | "phone-square" | "phone" | "no-idea" | "network" | "centralized-network" | "customer-insights-manager" | "gift" | "small-business" | "pricing" | "free-trial" | "buy1" | "cart-plus" | "cart-arrow-down" | "return-purchase" | "shopping-cart-with-money" | "buying" | "shopping-cart" | "procurement" | "delivery-handcart" | "cheap-21" | "average-2" | "stripe1" | "loyalty-card" | "shopping-check" | "shopping-bag" | "atm" | "bank-card-dollar" | "bank-card-euro" | "contactless-payment" | "qrcode" | "data-matrix-code" | "barcode" | "no-barcode" | "refresh-barcode" | "touch-id" | "redeem" | "card-exchange" | "card-security" | "cash-register" | "cost" | "create-order" | "online-payment1" | "rent1" | "package-settings" | "product-loading" | "purchase-order" | "receipt1" | "scan-stock" | "shipment-logistic" | "shipping-center" | "shipping-centre-loading-belt" | "shopaholic" | "basket" | "shopping-basket" | "add-basket" | "paid" | "text-width" | "text-height" | "paragraph" | "pilcrow" | "text-input" | "unavailable" | "save" | "save-commit" | "delete" | "copy" | "paste" | "more-menu" | "password-hide" | "password-show" | "zoom-in" | "zoom-out" | "buy" | "list" | "list-alt" | "list-ul" | "format-align-justify" | "align-justify" | "format-align-left" | "align-left" | "format-align-center" | "align-center" | "format-align-right" | "align-right" | "radio-button-on" | "dot-circle-o" | "colorize" | "eyedropper" | "brush" | "paint-brush" | "file-create" | "edit" | "email-sign" | "at" | "get-quote" | "quote-right" | "quote-left" | "format-bold" | "bold" | "format-underlined" | "underline" | "strikethrough-s" | "strikethrough" | "title" | "header" | "subscript" | "superscript" | "format-italic" | "italic" | "font-download" | "font" | "questionnaire" | "th-list" | "tasklist" | "communication-sorting" | "todo-list" | "tasks" | "numbered-list" | "list-ol" | "search-in-list" | "table-of-content" | "index" | "tiles" | "edit1" | "pencil" | "pencil-square" | "pencil-square-o" | "edit11" | "no-edit" | "cut" | "scissors" | "coupon" | "crop" | "erase" | "eraser" | "add-white-space" | "blur" | "paint-palette" | "contrast" | "adjust" | "bring-forward" | "snap-background-to-white" | "rename" | "text-cursor" | "i-cursor" | "large-icons" | "comma" | "compare" | "content" | "document-body" | "merge-docunemts" | "unit" | "group" | "group-objects" | "object-group" | "object-ungroup" | "ungroup" | "hexagonal-pattern" | "diagonal-lines" | "line-width" | "long-words" | "indent" | "indent-left" | "indent-decrease" | "dedent" | "dedent-left" | "outdent" | "indent-right" | "dedent-right" | "drag-reorder" | "drag-list-up" | "pull-down" | "page" | "rearrange" | "resize-file" | "resize" | "rich-text-converter" | "select-all" | "select-none" | "ruler" | "length" | "send-backward" | "send-to-back" | "replace" | "separated-lists" | "short-words" | "mix-words" | "line-style" | "design" | "view-stream" | "four-squares" | "th-large" | "thumbnails" | "th" | "view-module" | "top-view" | "orthogonal-view" | "rectangular" | "square" | "view-column" | "file-archive-o" | "file-zip-o" | "file-video-o" | "file-movie-o" | "file-audio-o" | "file-sound-o" | "microsoft-access" | "microsoft-onenote" | "microsoft-outlook" | "microsoft-project" | "microsoft-publisher" | "microsoft-sharepoint" | "microsoft-visio" | "word" | "file-word-o" | "excel" | "file-excel-o" | "ppt" | "file-powerpoint-o" | "create-archive" | "save-archive" | "delete-archive" | "gif" | "gis" | "gpx" | "heic-filetype" | "dmg" | "jpg" | "kmz" | "kml" | "mp3" | "dng" | "nef" | "nmea" | "tar" | "ttf" | "tif" | "obj" | "webp" | "ogg" | "woff" | "xls" | "xps" | "zip" | "wma" | "osm" | "otf" | "dwg" | "png" | "eps" | "ps" | "rar" | "raw" | "psd" | "exe" | "fbx" | "pdf-2" | "3fr" | "aac" | "7zip" | "cr2" | "ai" | "apk" | "wav" | "jp2" | "java-file" | "fff" | "folder-aggregate" | "book" | "package-delivery-logistics" | "cube" | "resume" | "insert-drive-file" | "file" | "file-o" | "sheet-of-paper" | "edit-file" | "documents" | "file-copy" | "files" | "files-o" | "profile" | "pdf" | "file-pdf-o" | "export-pdf" | "file-type-document" | "file-text-o" | "file-text" | "document" | "submit-document1" | "privacy-policy" | "selective-highlighting1" | "brief" | "document-with-code" | "image-file" | "file-image-o" | "file-picture-o" | "file-photo-o" | "image-file-add" | "image-file-checked" | "image-file-remove" | "check-document" | "document-with-a-check-mark" | "delete-file" | "file-delete" | "file-settings" | "file-preview" | "open-document" | "submit-document" | "restore-page1" | "document-exchange" | "import-file" | "share-document" | "idea" | "mark-as-favorite" | "email-document" | "file-view" | "policy-document" | "business-report" | "graph-report" | "edit-graph-report" | "download-graph-report" | "agreement" | "estimates" | "winking-document" | "insert-page" | "note" | "brochure" | "read" | "cashbook" | "price-tag" | "tag" | "add-tag" | "tag1" | "tags" | "open-folder" | "opened-folder" | "folder-open" | "folder-open-o" | "folder" | "folder-o" | "folder-open1" | "add-folder" | "delete-folder" | "search-folder" | "folder-settings" | "extensions-folder" | "private-folder" | "edit-folder" | "e-mail-folder" | "documents-folder" | "downloads-folder" | "favorite-folder" | "user-folder" | "download-from-ftp" | "upload-to-ftp" | "ftp" | "big-parcel" | "open-parcel" | "packing" | "unpacking" | "cardboard-box" | "archive" | "archive-o" | "file-archive-o1" | "box" | "case" | "empty-box" | "box-settings" | "secured-delivery" | "remove-delivery" | "out-of-stock" | "new-product" | "product" | "product-management" | "stacking" | "cv" | "unarchive" | "upload-archive" | "archive-file" | "download-archive" | "cc-stripe" | "google-wallet" | "paypal" | "cc-paypal" | "cc-amex" | "cc-discover" | "cc-visa" | "cc-mastercard" | "try" | "turkish-lira" | "rouble" | "rub" | "ruble" | "krw" | "won" | "inr" | "rupee" | "ils" | "shekel" | "sheqel" | "gbp" | "eur" | "euro" | "cny" | "jpy" | "rmb" | "yen" | "bitcoin" | "btc" | "dollar" | "usd" | "calculator1" | "accounting" | "contract" | "sales-performance" | "bank-safe" | "mobile-payment" | "money-yours" | "online-payment" | "us-dollar-circled" | "credit-card" | "credit-card-alt" | "only-cash" | "credit-control" | "bank-cards" | "check-for-payment" | "paper-money" | "money" | "cash-euro" | "stack-of-money" | "wallet" | "certificate" | "card-security1" | "bill" | "paid-bill" | "token-card-code1" | "receipt" | "add-receipt" | "sign-language" | "signing" | "hand-o-down" | "hand-o-left" | "hand-o-up" | "hand-o-right" | "hand-peace-o" | "hand-pointer-o" | "hand-spock-o" | "hand-lizard-o" | "hand-scissors-o" | "hand-paper-o" | "hand-stop-o" | "hand-grab-o" | "hand-rock-o" | "thumbs-up" | "thumbs-o-up" | "thumbs-down" | "thumbs-o-down" | "do-not-touch" | "hand" | "disclaimer" | "touchpad" | "holding-box" | "recieve" | "sell" | "get-revenue" | "handshake" | "handshake-o" | "partners" | "wearable-technology" | "america" | "globe" | "location" | "globe1" | "compass-north" | "compass" | "marker" | "marker-off" | "find-clinic" | "tesla-supercharger-pin" | "address" | "cab-stand" | "map" | "map-o" | "map-editing" | "map-marker" | "quest" | "waypoint-map" | "anchor-nodes" | "map-pin" | "signpost-tourist" | "map-signs" | "gps" | "near-me" | "location-arrow" | "navigation" | "target1" | "hunt" | "location-off" | "location-update" | "layers" | "journey" | "here" | "street-view" | "parking" | "reply" | "mail-reply" | "forward1" | "mail-forward" | "reply-all" | "mail-reply-all" | "communication" | "multichannel" | "chat" | "topic" | "comment" | "comment-o" | "typing" | "quote" | "delete-message" | "poll" | "popular" | "speaker-notes" | "audio-description" | "comment1" | "comments" | "comments-o" | "speaker-notes-off" | "new-topic" | "ask-question" | "chat-bubble" | "commenting" | "commenting-o" | "mail" | "important-mail" | "envelope" | "envelope-o" | "envelope-open-o" | "envelope-open" | "edit-message" | "received" | "deleted-message" | "group-message" | "subscription" | "unsubscribe" | "send-email" | "read-message" | "inbox" | "add-to-inbox" | "check-inbox" | "remove-from-inbox" | "outbox" | "post" | "envelope-square" | "sheet" | "sticky-note" | "sticky-note-o" | "note1" | "secure" | "retweet" | "rss" | "rss-square" | "feed" | "cancel-subscription" | "link" | "chain" | "link-off" | "chain-broken" | "unlink" | "sent" | "send" | "email-send" | "send-o" | "paper-plane" | "paper-plane-o" | "hashtag" | "podcast" | "headphones" | "volume-control-phone" | "volume-off" | "volume-mute" | "volume-zero" | "volume-low" | "volume-down" | "volume" | "speaker" | "volume-up" | "volume-high" | "sound" | "headset" | "play-circle" | "pause-circle" | "stop-circle" | "skip-previous" | "step-backward" | "fast-rewind" | "rewind" | "fast-rewind1" | "fast-backward" | "backward" | "play-arrow" | "play" | "play-circle1" | "play-circle-o" | "pause" | "stop" | "forward11" | "fast-forward" | "forward111" | "fast-forward1" | "skip-next" | "step-forward" | "no-image" | "local-movies" | "theaters" | "film" | "mic" | "microphone" | "block-microphone" | "microphone-slash" | "music-note" | "music" | "photo-camera-front" | "video-camera" | "camera" | "camera-retro" | "cam" | "image" | "picture" | "picture-o" | "photo" | "photo-gallery" | "albums" | "cubes" | "slides" | "bursts" | "exposure" | "gallery" | "insert-clip" | "memories" | "overwrite-clip" | "selfies" | "facebook" | "instagram" | "linkedin" | "pinterest" | "twitter" | "youtube" | "youtube-play" | "google" | "github" | "cloud" | "cloud-search" | "search-in-cloud" | "cloud-settings" | "cloud-checked" | "cloud-restricted" | "cloud-plus" | "cloud-minus" | "cloud-error" | "cloud-unavailable" | "cloud-upload" | "backup" | "cloud-download" | "cloud-backup-restore" | "cloud-remote-working" | "cloud-bar-chart" | "cloud-binary-code" | "cloud-broadcasting" | "secure-cloud" | "error-cloud" | "cloud-cross" | "dashed-cloud" | "cloud-connection" | "cloud-firewall" | "cloud-link" | "cloud-waiting" | "public-cloud" | "delete-from-cloud" | "cloud-refresh" | "cloud-right-u-arrow" | "cloud-share-symbol" | "cloud-development" | "cloud-sync" | "cloud-user" | "cloud-computing" | "cloud-storage" | "cloud-network" | "computer" | "connected-people" | "connection-sync" | "network-2" | "incoming-data" | "outgoing-data" | "remote-desktop1" | "security-wi-fi" | "server1" | "server-shutdown1" | "ftp-server" | "thin-client" | "wi-fi" | "wifi" | "wireless-network" | "wi-fi-off" | "wi-fi-connected" | "wi-fi-disconnected" | "wi-fi-lock" | "scan-wi-fi" | "bluetooth" | "bluetooth-b" | "bluetooth-symbol" | "decentralized-network" | "light-bulb-outline" | "medkit" | "fax" | "beer" | "department" | "tty" | "target" | "crosshairs" | "accuracy" | "goal" | "bullseye" | "address-book" | "address-book-o" | "contacts-book" | "attract-customers" | "magnet" | "guarantee" | "commercial" | "bullhorn" | "announcement" | "podium" | "time-card" | "change" | "applicant" | "download-resume" | "submit-resume" | "briefcase" | "suitcase" | "new-job" | "job-seeker" | "business-building" | "dossier" | "alarms" | "project" | "important-book" | "important-note" | "name-tag" | "id-badge" | "assignment-return" | "note-taking" | "audit" | "badge" | "vcard" | "vcard-o" | "id-card" | "id-card-o" | "address-card-o" | "address-card" | "drivers-license" | "drivers-license-o" | "new-contact" | "contact-details" | "phone-contact" | "inspection" | "clipboard-with-a-tick" | "survey" | "no-data-available" | "task-planning" | "invoice" | "summary-list" | "study" | "card" | "job" | "print" | "communication-internet" | "language-skill" | "language" | "close-program" | "window-close" | "window-close-o" | "new-slide" | "web-analytics" | "planner" | "rescheduling-a-task" | "resume-website" | "product-documents" | "resume-template" | "rubber-stamp" | "stamp" | "video-projector" | "management1" | "gavel" | "legal" | "user-md" | "wheelchair-alt" | "wheelchair" | "child" | "workspace1" | "male-user" | "user-circle-o" | "user-circle" | "user-plus" | "add-user" | "remove-user" | "user-minus" | "user-times" | "user-account" | "user" | "user-o" | "manager" | "businessman" | "male" | "document-writer" | "supplier" | "search-client" | "account-enable" | "account-disable" | "insurance-agent" | "payroll" | "lawyer" | "complaint" | "appointment-scheduling" | "caretaker" | "guardian" | "batch-assign" | "people" | "users" | "group1" | "management" | "team" | "people-working-together" | "group-task" | "accessibility" | "universal-access" | "pregnant-woman" | "female" | "business-conference-female-speaker" | "organization-chart-people" | "meeting-room" | "permanent-job" | "contact-us" | "voice-recognition" | "collaboration" | "technical-support" | "online-support" | "student-male" | "devops" | "exhibitor" | "env-permission" | "bathtub" | "bath" | "s15" | "hotel" | "local-hotel" | "bed" | "intelligence" | "c8y-aab-icon-model" | "c8y-aab-icon-template-model" | "c8y-accounts" | "c8y-add-user" | "c8y-administration" | "c8y-alarm" | "c8y-alert-idle" | "c8y-alfabet" | "c8y-analytic-model" | "c8y-analytics-builder" | "c8y-apama-epl" | "c8y-apama-machine-learning-workbench" | "c8y-apama-machine-learning" | "c8y-archive" | "c8y-aris" | "c8y-atom" | "c8y-book" | "c8y-bookmark" | "c8y-bulb" | "c8y-business-rules" | "c8y-c8y-c" | "c8y-c8y-data" | "c8y-c8y-support" | "c8y-c8y" | "c8y-calendar" | "c8y-chart" | "c8y-circle-star" | "c8y-cloud-container" | "c8y-cockpit" | "c8y-component" | "c8y-connector-in" | "c8y-connector-out" | "c8y-css" | "c8y-cumulocity-iot" | "c8y-data-broker" | "c8y-data-explorer" | "c8y-data-hub" | "c8y-data-points" | "c8y-design" | "c8y-device-connect" | "c8y-device-control" | "c8y-device-management" | "c8y-device-profile" | "c8y-device-protocols" | "c8y-device" | "c8y-dynamic-mapper" | "c8y-e2e-monitoring" | "c8y-energy" | "c8y-enterprise" | "c8y-event-processing" | "online1" | "c8y-fieldbus" | "c8y-find-map" | "c8y-firmware" | "c8y-grid-off" | "c8y-grid-on" | "c8y-group-add" | "c8y-group-open" | "c8y-group-remote-inactive" | "c8y-group-remote-open" | "c8y-group-remote" | "c8y-group-smart-open" | "c8y-group-smart" | "c8y-group" | "c8y-java" | "c8y-layers" | "c8y-layout" | "c8y-location" | "c8y-machine-portal" | "c8y-management" | "c8y-metering" | "c8y-mft" | "c8y-mobile-add" | "c8y-mobile-config" | "c8y-modules" | "c8y-mycloud" | "c8y-notification" | "c8y-oee" | "c8y-onnx" | "c8y-overviews" | "c8y-parameters-on" | "c8y-parameters" | "c8y-parking" | "c8y-report" | "c8y-reports" | "c8y-rocket" | "c8y-saas" | "c8y-security" | "c8y-shield" | "c8y-simulator" | "c8y-smart-rest" | "c8y-smart-rules" | "c8y-analytics-smart-rules" | "c8y-solution-accelerator" | "c8y-streaming-analytics" | "c8y-sub-tenants" | "c8y-tenant-policies" | "c8y-tools" | "c8y-tracking" | "c8y-usage-statistics" | "c8y-user" | "c8y-users" | "c8y-waste-bin" | "c8y-wm-api" | "c8y-wm-b2b" | "c8y-wm-dynamicapps" | "c8y-wm-integration" | "source-code" | "code" | "html-code" | "code1" | "file-code-o" | "console" | "terminal" | "add-property" | "delete-document" | "urgent-property" | "remove-property" | "edit-property" | "template" | "test" | "property-script" | "show-property" | "search-property" | "timesheet" | "important-property" | "new-property" | "navigation-toolbar-top" | "window-maximize" | "web-application-firewall" | "website-bug" | "bug" | "web-design" | "navigation-toolbar-bottom" | "more-details" | "navigation-pane" | "pin" | "thumb-tack" | "unpin" | "commit-git" | "codefork" | "code-fork" | "merge-git" | "pull-request" | "compare-git" | "share" | "share-alt" | "share-alt-square" | "activity-history" | "rules" | "create-document" | "product-architecture" | "registry-editor" | "rest-api" | "true-false" | "uninstall-programs" | "sheets" | "stages" | "add-stage" | "api" | "blockly-turquoise" | "blockly-blue" | "blockly-pink" | "plugin" | "base-64" | "xml-transformer" | "shield" | "protect" | "warning-shield" | "free-forever" | "identification-documents" | "id-verified" | "fingerprint" | "pin-code" | "password" | "lock" | "unlock" | "privacy" | "lock-outline" | "lock1" | "lock-open" | "unlock1" | "unlock-alt" | "key" | "access" | "lock11" | "realtime" | "smart-home-connection" | "smart-home-checked" | "smart-home-error" | "smart-home-remove" | "smart-home-shield" | "voice-id" | "web-application-firewall1" | "copyright" | "spy" | "user-secret" | "bug1" | "health-examine" | "stethoscope" | "space-shuttle" | "ambulance" | "car" | "automobile" | "local-taxi" | "taxi" | "cab" | "truck" | "file-delivery" | "in-transit" | "bus" | "train" | "directions-subway" | "directions-transit" | "tram" | "delivery-dining" | "scooter" | "pedal-bike" | "bicycle" | "motorcycle" | "airport" | "plane" | "fighter-jet" | "directions-ferry" | "ship" | "deploy" | "rocket" | "wrench1" | "road" | "flag-outline" | "software" | "newspaper-o" | "creative-commons" | "spinner" | "loading" | "busy" | "wheel" | "trademark" | "toggle-on" | "toggle-off" | "ticket" | "spoon" | "sort-numeric-desc" | "sort-numeric-asc" | "snowflake-o" | "shower" | "percent" | "paw" | "mouse-pointer" | "lemon-o" | "leaf" | "diamond" | "braille" | "bomb" | "binoculars" | "eject" | "touch-app" | "soccer" | "football" | "futbol-o" | "soccer-ball-o" | "mood" | "meh-o" | "frown-o" | "smile-o" | "deaf" | "deafness" | "hard-of-hearing" | "assistive-listening-systems" | "american-sign-language-interpreting" | "asl-interpreting" | "cc" | "closed-caption" | "anchor" | "accessibility-settings" | "info" | "info-circle" | "warning" | "report-problem" | "exclamation-triangle" | "exclamation-circle" | "error" | "high-priority" | "spam" | "help" | "question-circle" | "question" | "help-outline" | "question-circle-o" | "approval" | "trophy" | "unverified-account" | "automatic-gearbox-warning" | "exclamation-circle1" | "user-manual" | "stages1" | "menu" | "reorder" | "navicon" | "bars" | "hamburger" | "menu-vertical" | "ellipsis-v" | "app-switcher" | "menu-horizontal" | "ellipsis-h" | "plus-math" | "plus" | "subtract" | "minus" | "clear" | "close" | "remove" | "times" | "equals" | "exclamation" | "check" | "upvote-downvote" | "math" | "less-than1" | "more-than" | "circled-notch" | "circle-o-notch" | "inactive-state" | "storage1" | "lifebuoy" | "life-buoy" | "life-ring" | "life-saver" | "wait" | "block" | "ban" | "copy1" | "clone" | "paste1" | "clipboard" | "search-more" | "search" | "mobile-zoom-in" | "search-plus" | "mobile-zoom-out" | "search-minus" | "product1" | "trash-can" | "trash" | "editing-trash" | "trash-o" | "delete-bin" | "eye" | "visibility-off" | "low-vision" | "eye-slash" | "blind" | "double-tap" | "heart" | "heart-o" | "unheart" | "science" | "flask" | "school" | "graduation-cap" | "mortar-board" | "badge1" | "data-quality" | "brightness-low" | "brightness-5" | "sun-o" | "bedtime" | "moon-o" | "moon" | "add-identity-provider" | "bookmark-outline" | "turned-in-not" | "bookmark-o" | "unbookmark" | "bookmark" | "turned-in" | "check-box" | "check-square" | "check-square-o" | "checkbox-selected" | "add-box" | "plus-square" | "indeterminate-check-box" | "minus-square" | "duplicate" | "check-box-outline-blank" | "square-o" | "checkbox-unselected" | "add-new" | "plus-square-o" | "negative" | "minus-square-o" | "multiplication" | "times-rectangle-o" | "times-rectangle" | "ratio" | "circle" | "contrast1" | "connection-status-on" | "ok" | "check-circle" | "check-circle-o" | "success" | "cross-circle" | "times-circle" | "times-circle-o" | "add" | "plus-circle" | "minus-circle" | "minus-sign" | "radio-button-unchecked" | "circle-o" | "circle-thin" | "add-circle-outline" | "plus-circle-o" | "local-fire-department" | "fire" | "outlined-flag" | "flag-o" | "flag" | "assistant-photo" | "flag-checkered" | "flash-on" | "bolt" | "quick-mode-on" | "flash" | "quick-mode-off" | "videogame-asset" | "gamepad" | "portraits" | "extension" | "puzzle" | "puzzle-piece" | "star-outline" | "star-o" | "unstar" | "star-half" | "star-half-empty" | "star-half-full" | "star-half-o" | "star" | "grade" | "home-page" | "home" | "attach" | "paper-clip" | "paperclip" | "link1" | "unlink1" | "offline" | "notification" | "notifications" | "bell" | "bell-o" | "alarm" | "no-reminders" | "bell-slash" | "bell-slash-o" | "medium-priority" | "sliders1" | "sliders2" | "adjust1" | "tune" | "customize" | "button" | "breadcrumb" | "window-minimize" | "versions" | "pages" | "change-theme" | "window-restore" | "landing-page" | "continuous-mode" | "ruler-pencil" | "header1" | "body" | "footer" | "logs" | "overview" | "tab" | "cursor-in-window" | "advertisement-page" | "share-square-o" | "share-square" | "share1" | "external-link" | "trigger" | "rules1" | "email" | "form" | "language1" | "loading-bar" | "output" | "save1" | "floppy-o" | "single-choice" | "single-page-mode" | "skip" | "support" | "wrench" | "maintenance" | "utility" | "themes" | "book1" | "top-menu" | "user-menu-male" | "hint" | "xlarge-icons1" | "circled-menu" | "keypad" | "cake" | "birthday-cake" | "intelligence1" | "beginner" | "restaurant" | "cutlery" | "local-cafe" | "free-breakfast" | "coffee" | "wine-bar" | "glass" | "espresso-cup" | "broom" | "buy-upgrade" | "speedometer" | "dashboard" | "tachometer" | "palette" | "car-battery" | "magnetic" | "magnet1" | "right-navigation-toolbar" | "tilt" | "clear-symbol" | "cog" | "gear" | "advanced-search" | "heartbeat" | "installing-updates" | "heating-automation" | "impressum" | "sun" | "sunlight" | "cloud1" | "rain" | "winter" | "storm" | "keep-dry" | "umbrella" | (string & {});
        priority: number;
        name: any;
        description: string;
        globalRolesIds: DashboardGlobalRoles;
        c8y_IsNavigatorNode: boolean;
    }, any>;
    get appearanceSettingsForm(): _angular_forms.AbstractControl<{
        widgetMargin: number;
        translateWidgetTitle: boolean;
        translateDashboardTitle: boolean;
        classes: {
            [key: string]: boolean;
        };
        widgetClasses: {
            [key: string]: boolean;
        };
    }, {
        widgetMargin: number;
        translateWidgetTitle: boolean;
        translateDashboardTitle: boolean;
        classes: {
            [key: string]: boolean;
        };
        widgetClasses: {
            [key: string]: boolean;
        };
    }, any>;
    get widgetsForm(): _angular_forms.AbstractControl<{
        children: {
            [id: string]: _c8y_ngx_components.Widget;
        };
    }, {
        children: {
            [id: string]: _c8y_ngx_components.Widget;
        };
    }, any>;
    styling: {
        themeClass: string;
        headerClass: string;
    };
    duplicateWithoutTypeFn: () => Promise<void>;
    previewChangedFn: (dashboardClasses: Pick<ContextDashboard, 'classes' | 'widgetClasses'>) => void;
    revertToDashboardFn: (dashboard: ContextDashboard) => Promise<void>;
    readonly DEFAULT_DASHBOARD_MARGIN = 12;
    readonly DEFAULT_DASHBOARD_ICON = "th";
    readonly DEFAULT_DASHBOARD_PRIORITY = 5000;
    constructor(fb: FormBuilder, translateService: TranslateService, tabsService: TabsService);
    getTabs(): Tab[];
    /**
     * Initializes dashboard details form.
     * @param dashboard Context dashboard object
     * @param isReport True if its report dashboard
     * @param allowTypeDashboard Allow to make dashboard type dashboard
     * @returns Dashboard details form
     */
    initForm(dashboard: ContextDashboard, isReport: boolean, allowTypeDashboard: AllowTypeDashboard): void;
    reset(): void;
    /**
     * Creates dashboard details form divided into two groups- general settings and appearance settings.
     * @param dashboard Context dashboard object
     * @param isReport True if its report dashboard
     * @param allowTypeDashboard Allow to make dashboard type dashboard
     * @returns Dashboard details form
     */
    private createDashboardDetailsForm;
    /**
     * Creates form group for general settings of dashboard.
     * @param dashboard Context dashboard object
     * @param isReport True if its report dashboard
     * @param allowTypeDashboard Allow to make dashboard type dashboard
     * @returns Dashboard general settings form
     */
    private createGeneralSettingsForm;
    /**
     * Creates form group for appearance settings of dashboard.
     * @param dashboard Context dashboard object
     * @returns Dashboard appearance settings form
     */
    private createAppearanceSettingsForm;
    private createWidgetsForm;
    static ɵfac: i0.ɵɵFactoryDeclaration<DashboardDetailService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<DashboardDetailService>;
}

declare class DashboardDetailComponent implements OnInit, OnChanges, OnDestroy {
    private contextDashboardService;
    private translateService;
    private contextRoute;
    private activatedRoute;
    private tabsService;
    private router;
    private inventory;
    private route;
    dashboardDetailService: DashboardDetailService;
    private appState;
    private groupService;
    private modal;
    private gainsightService;
    isCollapsed: boolean;
    currentContext: ContextData;
    currentDashboard: ContextDashboard;
    isReport: boolean;
    deviceType: string;
    context: any;
    mo: ContextDashboardManagedObject;
    dashboard: ContextDashboard;
    isNamedDashboard: boolean;
    hideAvailability: boolean;
    deviceTypeValue: string;
    displayDeviceTypeValue: string;
    icons: string[];
    dashboardDetailsForm: ReturnType<DashboardDetailService['createDashboardDetailsForm']>;
    allowTypeDashboard: AllowTypeDashboard;
    isEdit: boolean;
    tabs: Tab[];
    dashboardSaved: EventEmitter<ContextDashboard>;
    previewChanged: EventEmitter<any>;
    private destroy$;
    readonly TABS_OUTLET_NAME: "dashboardTabs";
    constructor(contextDashboardService: ContextDashboardService, translateService: TranslateService, contextRoute: ContextRouteService, activatedRoute: ActivatedRoute, tabsService: TabsService, router: Router, inventory: InventoryService, route: ActivatedRoute, dashboardDetailService: DashboardDetailService, appState: AppStateService, groupService: GroupService, modal: ModalService, gainsightService: GainsightService);
    ngOnInit(): Promise<void>;
    ngOnChanges(): void;
    ngAfterContentInit(): void;
    ngOnDestroy(): void;
    save(): Promise<void>;
    updateDashboardHistoryDescription(dashboardChanges: string[]): DashboardHistoryDescription;
    cancel(): Promise<void>;
    canDeactivate(omitConfirm?: boolean): Promise<boolean>;
    show(isEdit: boolean): void;
    revertDashboard(dashboard: ContextDashboard): Promise<void>;
    duplicateWithoutType(): Promise<void>;
    private updateAllowTypeDashboard;
    private initForm;
    private confirmClosing;
    private createNewDashboard;
    private onCreateGSEvent;
    private convertStringToHash;
    private createNewReport;
    private updateDashboard;
    private edit;
    private initializeConfiguration;
    private updateReport;
    private cleanupAfterDetailsClose;
    private clearNamedOutletPath;
    private refreshDashboardDetails;
    static ɵfac: i0.ɵɵFactoryDeclaration<DashboardDetailComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<DashboardDetailComponent, "c8y-dashboard-detail", never, { "isReport": { "alias": "isReport"; "required": false; }; "deviceType": { "alias": "deviceType"; "required": false; }; "context": { "alias": "context"; "required": false; }; "mo": { "alias": "mo"; "required": false; }; "dashboard": { "alias": "dashboard"; "required": false; }; "isNamedDashboard": { "alias": "isNamedDashboard"; "required": false; }; "hideAvailability": { "alias": "hideAvailability"; "required": false; }; }, { "dashboardSaved": "dashboardSaved"; "previewChanged": "previewChanged"; }, never, never, true, never>;
}

/**
 * Holds current state of dashboard children during edit mode.
 */
declare class DashboardOriginatorService {
    /**
     * Current dashboard children state name for indicating what change will be undone.
     */
    get currentStateName(): string;
    /**
     * Current dashboard children state.
     * @private
     */
    private state;
    /**
     * Initializes dashboard children state on edit mode start.
     * @param state Dashboard children initial state.
     */
    initState(state: DashboardChildrenState): void;
    /**
     * Updates dashboard children state when it is changed or restored with undo/redo.
     * @param state Dashboard children updated state.
     */
    setState(state: DashboardChildrenState): void;
    /**
     * Returns copy of current state.
     */
    getState(): DashboardChildrenState;
    static ɵfac: i0.ɵɵFactoryDeclaration<DashboardOriginatorService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<DashboardOriginatorService>;
}

/**
 * Caretaker is responsible for undo and redo functionalities.
 */
declare class DashboardCaretakerService {
    private originator;
    /**
     * Current undo stack length for defining undo button disable state.
     */
    get undoStackLength(): number;
    /**
     * Redo stack latest item for defining redo button disable state and its' title.
     */
    get redoStackLastItem(): DashboardChildrenState;
    /**
     * List of dashboard children changes.
     * @private
     */
    private undoStack;
    /**
     * List of dashboard children changes that were undone and can be redone back.
     * @private
     */
    private redoStack;
    constructor(originator: DashboardOriginatorService);
    /**
     * Adds current dashboard children state to undo stack and clears redo stack.
     */
    backup(): void;
    /**
     * Reverts last dashboard children change and puts it in redo stack.
     * @returns Current state of dashboard children after reverting last change.
     */
    undo(): DashboardChildrenState | undefined;
    /**
     * Applies previously undone change.
     * @returns Current state of dashboard children after applying previously undone change.
     */
    redo(): DashboardChildrenState | undefined;
    /**
     * Clears both undo and redo stack, sets current state as initial state and returns initial state.
     * @returns Initial state of dashboard children.
     */
    reset(): DashboardChildrenState;
    static ɵfac: i0.ɵɵFactoryDeclaration<DashboardCaretakerService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<DashboardCaretakerService>;
}

/**
 * Facade for implementation of Memento design pattern (caretaker, originator). Responsible for undo/redo feature
 * during edit mode of dashboard.
 */
declare class DashboardEditModeService {
    private originator;
    private caretaker;
    get undoButtonDisabled(): boolean;
    /**
     * Current dashboard change name for undo button title.
     */
    get changeToUndoName(): string;
    /**
     * Redo stack latest item for defining redo button disable state and its title.
     */
    get redoStackLastItem(): DashboardChildrenState;
    constructor(originator: DashboardOriginatorService, caretaker: DashboardCaretakerService);
    /**
     * Initializes dashboard children state on edit mode start.
     * @param state Dashboard children initial state.
     */
    init(state: DashboardChildrenState): void;
    /**
     * Saves current state for further undo actions and sets new dashboard children state.
     * @param state Dashboard children updated state.
     */
    newState(state: DashboardChildrenState): void;
    /**
     * Returns copy of current state.
     */
    getCurrentState(): DashboardChildrenState;
    /**
     * Reverts last dashboard children change.
     * @returns Current state of dashboard children after reverting last change.
     */
    undo(): DashboardChildrenState;
    /**
     * Applies previously undone change.
     * @returns Current state of dashboard children after applying previously undone change.
     */
    redo(): DashboardChildrenState;
    /**
     * Resets dashboard children state to initial one and returns initial state.
     * @returns Initial state of dashboard children.
     */
    reset(): DashboardChildrenState;
    static ɵfac: i0.ɵɵFactoryDeclaration<DashboardEditModeService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<DashboardEditModeService>;
}

declare class WidgetService {
    private dynamicComponentService;
    private translateService;
    moduleConfig: ContextDashboardConfig | undefined;
    widgets: DynamicComponentDefinition[];
    constructor(dynamicComponentService: DynamicComponentService, translateService: TranslateService, moduleConfig: ContextDashboardConfig | undefined);
    getWidgetDefinition(componentId: any): Promise<DynamicComponentDefinition>;
    getWidgetDefinitions(): any;
    mapLegacy(widget: Partial<Widget>): Promise<Widget>;
    private mapDisplaySettings;
    static ɵfac: i0.ɵɵFactoryDeclaration<WidgetService, [null, null, { optional: true; }]>;
    static ɵprov: i0.ɵɵInjectableDeclaration<WidgetService>;
}

/**
 * The context dashboard is a dashboard which resolves it data from the current context (device or group)
 * it is displayed on. It usually uses the route.data for it, but you can pass
 * a different managedObject to the [mo] input parameter to change that behavior.
 */
declare class ContextDashboardComponent implements OnInit, OnDestroy, CanDeactivateComponent {
    private route;
    private router;
    private contextDashboardService;
    private alert;
    private renderer;
    moduleConfig: ContextDashboardConfig;
    private widgetService;
    private bottomDrawerService;
    private gainsightService;
    private actionBarService;
    private translateService;
    private modal;
    private destroyRef;
    contextDashboardStateService: ContextDashboardStateService<{
        [key: string]: any;
    }>;
    editModeService: DashboardEditModeService;
    name: string;
    childrenClasses: string;
    context: any;
    setTitle: boolean;
    defaultWidgets: Widget[];
    _canCopy: boolean;
    canDelete: boolean;
    isLoading: boolean;
    breadcrumbSettings: BreadcrumbItem;
    showContextHelpButton: boolean;
    /** Whether to translate widget titles. However, dashboard's own setting takes precedence. It does not override dashboard's setting */
    translateWidgetTitle: boolean;
    /** Whether to translate dashboard title. However, dashboard's own setting takes precedence. It does not override dashboard's setting */
    translateDashboardTitle: boolean;
    /**
     * Hides dashboard availability selection.
     */
    hideAvailability: boolean;
    /** Explicitly set the dashboard in `disabled` state, e.g. to create read-only dashboard */
    isDisabled: i0.InputSignal<boolean>;
    class: string;
    dashboardDetails: DashboardDetailComponent;
    widgetsDashboard: WidgetsDashboardComponent;
    isNamedDashboard: boolean;
    get disabled(): boolean;
    widgets: Widget[];
    mo: ContextDashboardManagedObject;
    dashboard: ContextDashboard;
    title: string;
    isCopyDisabled: DashboardCopyPermission;
    isReport: boolean;
    canCopy: boolean;
    readonly dashboardTypeLabel: "Dashboard for \"{{ dashboardType }}\"";
    readonly dashboardTypePopover: "\n  The layout and configuration of this dashboard is used by all other assets of model type\n  <strong>{{ dashboardType }}</strong>. Any changes made to this dashboard instance will be applied to all\n  other instances.";
    private dataSub;
    private hasPermissionToEditDashboard;
    private destroy$;
    constructor(route: ActivatedRoute, router: Router, contextDashboardService: ContextDashboardService, alert: AlertService, renderer: Renderer2, moduleConfig: ContextDashboardConfig, widgetService: WidgetService, bottomDrawerService: BottomDrawerService, gainsightService: GainsightService, actionBarService: ActionBarService, translateService: TranslateService, modal: ModalService, destroyRef: DestroyRef, contextDashboardStateService: ContextDashboardStateService<{
        [key: string]: any;
    }>, editModeService: DashboardEditModeService);
    ngOnInit(): void;
    ngAfterViewInit(): void;
    beforeUnloadHandler($event: BeforeUnloadEvent): Promise<void>;
    /**
     * Applies the current context to the widget
     * @param widget The widget to apply the context to.
     */
    applyDeviceTarget(widget: any): void;
    /**
     * Removes the route listener.
     */
    ngOnDestroy(): void;
    /**
     * Guards component from unintended navigation away or closing tab without saving changes.
     * Navigation continues if true is returned, and navigation is cancelled if returned value is false.
     * @param omitConfirm Omits confirm calls inside method body (without this param, when method is used in
     * on 'beforeunload' event handler, error is thrown in console because confirm is blocked by browser anyway and returns false)
     */
    canDeactivate(omitConfirm?: boolean): Promise<boolean>;
    /**
     * Restores the dashboard widgets to the default widgets.
     */
    restore(): Promise<void>;
    /**
     * Method called on every widgets dimensions or position change but also for adding new widget (because adding
     * widget causes layout changes). It recognizes what type of change has been done and updates current widgets state
     * accordingly.
     * @param child Change object.
     */
    positionOrWidgetDimensionChange(child: DashboardChildChange | DashboardChange): void;
    revertChange(revertType: RevertChangeType): Promise<void>;
    /**
     * Updates all dashboards children's. Useful for position changes on the dashboard.
     * @param child The child to change.
     * @param changeName Name of the change to indicate it on undo/redo button.
     * @param descriptionProp Property to add to dashboard change history.
     * @param widgetsChanged List of changed widgets.
     */
    updateDashboardChildren(child: DashboardChildChange | DashboardChange, changeName: DashboardChildrenState['name'], descriptionProp: keyof DashboardHistoryDescription['widgetChanges'], widgetsChanged: Widget[]): void;
    /**
     * Copies the dashboard and current context to a clipboard.
     */
    copyDashboard(): Promise<void>;
    editDashboard(): void;
    /**
     * Remove the complete dashboard and navigate away.
     */
    deleteDashboard(): Promise<void>;
    get isDeviceTypeDashboard(): boolean;
    /**
     * Edits a widget on the dashboard.
     * @param change The widget change event.
     */
    editWidget(change: WidgetChange): Promise<void>;
    /**
     * Adds a widget to the dashboard.
     * @param selected Define a selected component to switch to edit mode directly.
     */
    addWidget(selected?: DynamicComponentDefinition): Promise<void>;
    saveWidgetsToDashboard(): Promise<void>;
    cancelEditMode(onDeactivate?: boolean): Promise<void>;
    /**
     * Updates a widget or adds a new one if it doesn't exist on
     * the dashboard.
     * @param widget The new widget
     */
    updateWidget(widget: any): Promise<void>;
    /**
     * Removes a widget and rearranges the remaining ones
     * if necessary.
     * @param change The change event.
     */
    deleteWidget(change: WidgetChange): Promise<void>;
    /**
     * This is a workaround to ensure that the dragged-element
     * (which is attached to the body) has the right styling.
     */
    addDashboardClassToBody(): void;
    /**
     * This is a workaround to ensure that the dragged-element
     * (which is attached to the body) has the right styling.
     */
    removeDashboardClassFromBody(): void;
    onLoad(trackExperience?: boolean): Promise<void>;
    dashboardPreview(layoutChanges: ContextDashboard): Promise<void>;
    reloadDashboard(dashboardMo: ContextDashboardManagedObject): Promise<void>;
    private setWidgets;
    private loadContextDashboard;
    /**
     * To enable translation for widgets within the dashboard, the "translateWidgetTitle" flag must be enabled.
     * The property needs to be patched, as the "Sensor App" does not provide this setting.
     */
    private patchSensorPhoneDashboard;
    private loadNamedDashboard;
    private mergeWidgetClasses;
    private componentToWidget;
    private addReportDashboardSettings;
    private getDashboardCopyPermissionState;
    private setNewState;
    private getDescriptionForNewState;
    private mapStateToHistoryDescription;
    private onDeleteGSEvent;
    private onLoadGSEvent;
    private extractDefaultDashboardName;
    private convertStringToHash;
    static ɵfac: i0.ɵɵFactoryDeclaration<ContextDashboardComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<ContextDashboardComponent, "c8y-context-dashboard", never, { "name": { "alias": "name"; "required": false; }; "childrenClasses": { "alias": "childrenClasses"; "required": false; }; "context": { "alias": "context"; "required": false; }; "setTitle": { "alias": "setTitle"; "required": false; }; "defaultWidgets": { "alias": "defaultWidgets"; "required": false; }; "_canCopy": { "alias": "canCopy"; "required": false; }; "canDelete": { "alias": "canDelete"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; "breadcrumbSettings": { "alias": "breadcrumbSettings"; "required": false; }; "showContextHelpButton": { "alias": "showContextHelpButton"; "required": false; }; "translateWidgetTitle": { "alias": "translateWidgetTitle"; "required": false; }; "translateDashboardTitle": { "alias": "translateDashboardTitle"; "required": false; }; "hideAvailability": { "alias": "hideAvailability"; "required": false; }; "isDisabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
}

declare class AppearanceSettingsComponent {
    themeClass: string;
    headerClass: string;
    defaultThemeClass: string;
    defaultHeaderClass: string;
    dashboardSettings: boolean;
    themeClassChange: EventEmitter<string>;
    headerClassChange: EventEmitter<string>;
    onChange: EventEmitter<void>;
    possibleStylingTheme: [{
        readonly label: "Match UI`theme`";
        readonly class: "dashboard-theme-light";
        readonly description: "The dashboard appearance matches the UI appearance.";
    }, {
        readonly label: "Light`theme`";
        readonly class: "dashboard-theme-white";
        readonly description: "The dashboard has light appearance, that is, dark text on light background.";
    }, {
        readonly label: "Dark`theme`";
        readonly class: "dashboard-theme-dark";
        readonly description: "The dashboard has dark appearance, that is, light text on dark background.";
    }, {
        readonly label: "Branded`theme`";
        readonly class: "dashboard-theme-branded";
        readonly description: "The dashboard is styled using the brand palette.";
    }];
    possibleStylingHeader: [{
        readonly label: "Regular`style`";
        readonly class: "panel-title-regular";
        readonly description: "The widget has no border between header and content.";
    }, {
        readonly label: "Border`style`";
        readonly class: "panel-title-border";
        readonly description: "The widget has a small separation border between header and content.";
    }, {
        readonly label: "Overlay`style`";
        readonly class: "panel-title-overlay";
        readonly description: "The widget content overlays the header.";
    }, {
        readonly label: "Hidden`style`";
        readonly class: "panel-title-hidden";
        readonly description: "The widget header is not shown.";
    }];
    columns: 1 | 3;
    dashboardDefaultLabel: "Dashboard default";
    themeClassClick(value: any): void;
    headerClassClick(value: any): void;
    private resetToDefault;
    static ɵfac: i0.ɵɵFactoryDeclaration<AppearanceSettingsComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<AppearanceSettingsComponent, "c8y-appearance-settings", never, { "themeClass": { "alias": "themeClass"; "required": false; }; "headerClass": { "alias": "headerClass"; "required": false; }; "defaultThemeClass": { "alias": "defaultThemeClass"; "required": false; }; "defaultHeaderClass": { "alias": "defaultHeaderClass"; "required": false; }; "dashboardSettings": { "alias": "dashboardSettings"; "required": false; }; "possibleStylingTheme": { "alias": "possibleStylingTheme"; "required": false; }; "possibleStylingHeader": { "alias": "possibleStylingHeader"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; }, { "themeClassChange": "themeClassChange"; "headerClassChange": "headerClassChange"; "onChange": "onChange"; }, never, ["*"], true, never>;
}

declare class TypeDashboardInfoComponent implements OnInit {
    private inventory;
    private alert;
    deviceTypeValue: string;
    displayDeviceTypeValue: string;
    context: ContextDashboardManagedObject;
    deviceTypeInstancesCount: number;
    asyncRenderSuccess: () => void;
    asyncRenderFail: () => void;
    constructor(inventory: InventoryService, alert: AlertService);
    ngOnInit(): Promise<void>;
    private updateDeviceTypeCount;
    static ɵfac: i0.ɵɵFactoryDeclaration<TypeDashboardInfoComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<TypeDashboardInfoComponent, "c8y-type-dashboard-info", never, { "deviceTypeValue": { "alias": "deviceTypeValue"; "required": false; }; "displayDeviceTypeValue": { "alias": "displayDeviceTypeValue"; "required": false; }; "context": { "alias": "context"; "required": false; }; "asyncRenderSuccess": { "alias": "asyncRenderSuccess"; "required": false; }; "asyncRenderFail": { "alias": "asyncRenderFail"; "required": false; }; }, {}, never, never, true, never>;
}

type AssetPropertyMappings = {
    [name: string]: {
        label?: string;
        assetProperty: AssetPropertyType;
    };
};
type AssetPropertyMapping = {
    name: keyof AssetPropertyMappings;
} & AssetPropertyMappings[string];
type AssetPropertyMappingKeyRenamedNotification = {
    type: 'asset-property-mapping-key-renamed';
    oldKey: string;
    newKey: string;
};

/**
 * An escape-hatch notification type for widget config sections that need to broadcast
 * events not covered by the built-in notification variants. The `type` discriminant
 * must be `'custom'`; all additional fields are caller-defined.
 *
 * @example
 * ```ts
 * const n: CustomWidgetConfigNotification = { type: 'custom', action: 'reset' };
 * widgetConfigService.notify$.next(n);
 * ```
 */
type CustomWidgetConfigNotification = {
    type: 'custom';
    [key: string]: unknown;
};
/**
 * Discriminated union of all notifications that can be broadcast through
 * {@link WidgetConfigService.notify$}. New built-in notification types should be
 * added as additional union members here.
 *
 * Currently supported members:
 * - `AssetPropertyMappingKeyRenamedNotification` — emitted when an asset property
 *   mapping key is renamed so that other config sections can update references.
 * - `CustomWidgetConfigNotification` — generic escape-hatch for custom events.
 *
 * Subscribers should switch/narrow on `type` and ignore unknown variants to stay
 * forward-compatible as new notification types are introduced.
 */
type WidgetConfigNotification = AssetPropertyMappingKeyRenamedNotification | CustomWidgetConfigNotification;

/**
 * A hook to add dynamic configurations to any widget configuration.
 * @deprecated Consider using the `hookWidgetConfig` function instead.
 */
declare const HOOK_WIDGET_CONFIG: InjectionToken<WidgetConfigSectionDefinition<any>[]>;
/**
 * An extension HOOK can use either a pure value:
 * ```typescript
 *  { provide: HOOK_X, useValue: { ...hookValue }, multi: true }
 * ```
 *
 * Or an array to directly register multiple:
 * ```typescript
 *  { provide: HOOK_X, useValue: [{ ...hookValue1 }, { ...hookValue2 }], multi: true }
 * ```
 *
 * Or an ExtensionFactory which allows to define a get() function. This function
 * gets called on each navigation with the current route and can return values
 * async (observable or promise).
 * ```typescript
 *  { provide: HOOK_X, useFactory: { get: (route) => doSomethingAsync(route) }, multi: true }
 * ```
 */
type WidgetConfigSectionExtension = WidgetConfigSectionDefinition | WidgetConfigSectionDefinition[] | ExtensionFactory<WidgetConfigSectionDefinition>;
/**
 * A hook to add dynamic components to the UI (e.g. widgets).
 *
 * You can either provide a single `DynamicComponentDefinition` as parameter:
 * ```typescript
 *  hookWidgetConfig(...)
 * ```
 *
 * Or an array to directly register multiple:
 * ```typescript
 *  hookWidgetConfig([...])
 * ```
 *
 * Or you provide an Service that implements `ExtensionFactory<DynamicComponentDefinition>`
 * ```typescript
 *  export class MyDynamicComponentDefinitionFactory implements ExtensionFactory<DynamicComponentDefinition> {...}
 *  ...
 *  hookWidgetConfig(MyDynamicComponentDefinitionFactory)
 * ```
 * A typed alternative to `HOOK_WIDGET_CONFIG`.
 * @param components The `DynamicComponentDefinition`'s or `ExtensionFactory` to be provided.
 * @returns An `Provider` to be provided in your module.
 */
declare function hookWidgetConfig<T = Type<any>>(components: GenericHookType<WidgetConfigSectionDefinition<T>>, options?: Partial<GenericHookOptions>): i0.ValueProvider | i0.ClassProvider | i0.ExistingProvider;
interface WidgetConfigSectionDefinition<T = any> extends WidgetConfigSectionBase<T> {
    /**
     * The dynamic component id this configuration applies to.
     */
    widgetId: string;
    /**
     * The component to load.
     */
    loadComponent: () => Promise<Type<T>>;
}
interface WidgetConfigSection<T = Type<any>> extends WidgetConfigSectionBase<T> {
    /**
     * The component to load.
     */
    component: T;
    providers?: Type<unknown>[];
}
interface WidgetConfigSectionBase<T> {
    /**
     * The label to show as headline of the section
     */
    label: string;
    /**
     * The priority. Default settings from hookWidget will have priority 0.
     */
    priority?: number;
    /**
     * Defines if the section should be by default expanded or collapsed.
     */
    expanded?: boolean;
    /**
     * The initial state.
     */
    initialState?: Partial<T>;
    /**
     * The injector to be used.
     */
    injector?: Injector;
    /**
     * Additional providers to be used only in scope of the configuration. If same Providers are
     * provided multiple times, only one is used.
     */
    providers?: Type<unknown>[] | (() => Promise<Type<unknown>[]>);
    /**
     * An array of validator functions to be applied to the main widget config form.
     * These validators are added when the section is initialized and allow for custom
     * validation logic (useful for cross-section or cross-fields validation).
     *
     * **Note:** Validator must indicate the names of form controls (at least one) whose values affect the validation outcome.
     * This can be done by setting a `controlNames` property on the validator function:
     *
     * @example
     * ```TypeScript
     * const myValidator: ValidatorFn = (formGroup: AbstractControl) => {
     *   // validation logic
     * };
     * (myValidator as any).controlNames = ['control1', 'control2'];
     * ```
     */
    validators?: ValidatorFn[];
    /**
     * Custom validation errors to display.
     * Keys should match the error keys, values are the error messages.
     */
    validationErrors?: Record<string, string>;
}

declare class WidgetConfigSectionService extends ExtensionPointForPlugins<WidgetConfigSectionDefinition> {
    private router;
    private plugins;
    constructor(rootInjector: Injector, router: Router, plugins: PluginsResolveService);
    get state(): Set<WidgetConfigSectionDefinition<any>>;
    add(component: WidgetConfigSectionDefinition): void;
    remove(component: WidgetConfigSectionDefinition): void;
    protected setupItemsObservable(): Observable$1<WidgetConfigSectionDefinition[]>;
    static ɵfac: i0.ɵɵFactoryDeclaration<WidgetConfigSectionService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<WidgetConfigSectionService>;
}

declare class WidgetConfigService {
    private widgetConfigSectionService;
    private _currentConfig$;
    private _assignedCurrentConfig$;
    private _instanceId$;
    private _isDeviceTypeDashboard$;
    /**
     * The unique identifier of the current widget instance.
     */
    instanceId$: Observable$1<string>;
    /**
     * The preview of the currently selected widget. If `null` no preview is shown
     * (except if the selected widget has no configuration).
     */
    preview$: BehaviorSubject<true | DynamicComponentDefinition | TemplateRef<any>>;
    /**
     * The currently selected widget definition.
     */
    selected$: BehaviorSubject<DynamicComponentDefinition>;
    /**
     * The currently selected widget component.
     */
    selectedComponent$: BehaviorSubject<DynamicComponentComponent>;
    /**
     * The current configuration of the selected widget.
     * Only to read the value. Use `updateConfig` to update the configuration.
     **/
    get currentConfig(): ContextWidgetConfig;
    /**
     * Indicates if the selected widget is placed on a device type dashboard.
     */
    isDeviceTypeDashboard$: Observable$1<boolean>;
    /**
     * A bus for broadcasting {@link WidgetConfigNotification} events between independent
     * widget config sections during an active configuration session.
     *
     * **Who emits:** Any config section component (or its service) that needs to
     * inform other sections about a state change — for example,
     * `AssetPropertyMappingsComponent` emits an
     * `AssetPropertyMappingKeyRenamedNotification` whenever a mapping key is renamed
     * so that referencing sections can update their stored keys.
     *
     * **Who subscribes:** Config section components that hold references to data owned
     * by other sections.  Subscribers should filter by `type` and silently ignore
     * unknown variants to stay forward-compatible:
     *
     * ```ts
     * this.widgetConfigService.notify$
     *   .pipe(takeUntil(this.destroy$))
     *   .subscribe(notification => {
     *     if (notification.type === 'asset-property-mapping-key-renamed') {
     *       // handle rename
     *     }
     *     // ignore other types
     *   });
     * ```
     *
     * **Subscription management:** Each subscriber is responsible for unsubscribing
     * (e.g. via `takeUntil(destroy$)` or `DestroyRef`).  The subject itself is never
     * completed by the service — it lives for the lifetime of the service instance.
     *
     * **Unknown notification types:** Because `WidgetConfigNotification` is a
     * discriminated union that may grow over time, always guard with an `if`/`switch`
     * on `type` rather than exhaustive checks, so that future additions do not break
     * existing subscribers.
     */
    notify$: Subject<WidgetConfigNotification>;
    /**
     * The current configuration of the selected widget as observable.
     * Only to read the value. Use `updateConfig` to update the configuration.
     */
    currentConfig$: Observable$1<ContextWidgetConfig>;
    /**
     * An observable that does not emit on each change. Instead the changes are only assigned.
     * This is used for legacy widgets that rely on mutating the config object.
     *
     * @deprecated Use `currentConfig$` instead.
     */
    assignedCurrentConfig$: Observable$1<ContextWidgetConfig>;
    /**
     * Returns all the current sections.
     *
     * A configuration section is a component that can be used to configure a widget.
     * Sections should be added via the `hookWidgetConfig`.
     */
    currentSections$: Observable$1<WidgetConfigSection[]>;
    /**
     * Returns a list of all unique providers used in the current sections.
     */
    providers$: Observable$1<i0.Type<unknown>[]>;
    /**
     * Indicates if the current selected widget has a configuration or not.
     */
    hasConfig$: Observable$1<boolean>;
    /**
     * The view state of the preview. Can be one of:
     * - `noPreview`: No preview is shown and an empty state is shown.
     * - `configPreview`: The preview is shown with the view component of the selected widget.
     * - `templatePreview`: The preview is shown with any template passed with setPreview method.
     */
    previewViewState$: Observable$1<"noPreview" | "templatePreview" | "configPreview">;
    private readonly STASH_CONFIG_DELAY;
    private configChange$;
    private configChangeReset$;
    private beforeSaveCallbacks;
    constructor(widgetConfigSectionService: WidgetConfigSectionService);
    /**
     * Use this function to get a typed configuration of the selected widget.
     * @returns The current configuration of the selected widget or an empty object if no config is defined.
     */
    getWidgetConfig<T>(): Observable$1<T>;
    /**
     * Adds a callback which can check the configuration before saving.
     */
    addOnBeforeSave(callback: (config?: ContextWidgetConfig) => boolean | Promise<boolean> | Observable$1<boolean>): void;
    /**
     * Returns true if the configuration can be saved.
     */
    canSave(): Promise<boolean>;
    /**
     * Updates the configuration of the selected widget.
     * @param change The change to apply to the configuration.
     * @param force If set to true, the configuration will be updated even if no changes are made.
     *              Also concurrency checks are ignored and no change is emitted on the component.
     *              Use with caution and only if you want to reset the configuration to some default.
     */
    updateConfig(change: Partial<ContextWidgetConfig>, force?: boolean): void;
    /**
     * Used to initialize the configuration of the selected widget.
     * @param config The configuration to set.
     */
    initConfig(config: ContextWidgetConfig): void;
    /**
     * Select a widget
     * @param selected The widget to select.
     * @param identifier An optional unique identifier for the widget instance. Only used if the widget is not new.
     * @param isDeviceTypeDashboard Indicates if the selected widget is placed on a device-type dashboard. This is used to determine if the default asset selector should be shown.
     */
    selectWidget(selected: DynamicComponentDefinition, identifier?: string, isDeviceTypeDashboard?: boolean): void;
    /**
     * Deselect the currently selected.
     */
    deselectWidget(): void;
    /**
     * Enables a preview.
     * @param preview If set to true, the view component of the current widget will be taken to render the preview.
     * If set to a DynamicComponentDefinition, the preview will be rendered with the given component.
     * If set to a TemplateRef, the preview will be rendered with the given template.
     */
    setPreview(preview: true | DynamicComponentDefinition | TemplateRef<any>): void;
    /**
     * By default, no sections are added to the configuration. But to ensure
     * backwards compatibility with old plugins, we check if the default asset selector
     * and config section should be shown.
     * @param selectedWidget The currently selected widget.
     * @param config The used widget configuration.
     * @returns The default sections.
     */
    private getWidgetDefaultSections;
    /**
     * Sections should not be added by default anymore. But to ensure backwards compatibility, we
     * check if the default selector should be shown. We assume that a default selector will be shown
     * when:
     * 1. The widget has a dynamic component for configuration (which is also deprecated).
     * OR
     * 2. The widget has not disabled the default selector.
     */
    private isDefaultDeviceSelectorNeeded;
    /**
     * Checks if a default setting section is needed.
     * @param selectedWidget The currently selected widget.
     * @returns true if one is needed.
     */
    private isDefaultSettingSectionNeeded;
    static ɵfac: i0.ɵɵFactoryDeclaration<WidgetConfigService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<WidgetConfigService>;
}

declare class WidgetConfigRootComponent {
    widgetConfigService: WidgetConfigService;
    static ɵfac: i0.ɵɵFactoryDeclaration<WidgetConfigRootComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<WidgetConfigRootComponent, "c8y-widget-config-root", never, {}, {}, never, never, true, never>;
}

declare class WidgetConfigComponent implements AfterContentInit, AfterViewInit, OnDestroy {
    private widgetService;
    private bottomDrawerRef;
    contextDashboardService: ContextDashboardService;
    widgetConfigService: WidgetConfigService;
    private drawerService;
    private cdr;
    searchResult: DynamicComponentDefinition[];
    components: DynamicComponentDefinition[];
    selected: DynamicComponentDefinition;
    searchChange$: Subject<unknown>;
    searchTerm: string;
    context: any;
    componentLabel: string;
    widgetTitle: string;
    mo: ContextDashboardManagedObject;
    identifier: `${string}-${string}-${string}-${string}-${string}`;
    styling: {
        headerClass: string;
        contentClass: string;
    };
    defaultStyling: {
        headerClass: string;
        contentClass: string;
    };
    current: any;
    widgetConfig: ContextWidgetConfig;
    isUpgrade: boolean;
    possibleStyling: {
        WIDGET_HEADER_CLASSES: [{
            readonly label: "Regular`style`";
            readonly class: "panel-title-regular";
            readonly description: "The widget has no border between header and content.";
        }, {
            readonly label: "Border`style`";
            readonly class: "panel-title-border";
            readonly description: "The widget has a small separation border between header and content.";
        }, {
            readonly label: "Overlay`style`";
            readonly class: "panel-title-overlay";
            readonly description: "The widget content overlays the header.";
        }, {
            readonly label: "Hidden`style`";
            readonly class: "panel-title-hidden";
            readonly description: "The widget header is not shown.";
        }];
        WIDGET_CONTENT_CLASSES: [{
            readonly label: "Branded`style`";
            readonly class: "panel-content-branded";
            readonly description: "The widget is styled with the main brand color.";
        }, {
            readonly label: "Match dashboard`style`";
            readonly class: "panel-content-light";
            readonly description: "The widget appearance matches the dashboard appearance.";
        }, {
            readonly label: "Light`style`";
            readonly class: "panel-content-white";
            readonly description: "The widget has light appearance, that is, dark text on light background.";
        }, {
            readonly label: "Dark`style`";
            readonly class: "panel-content-dark";
            readonly description: "The widget has dark appearance, that is, light text on dark background.";
        }, {
            readonly label: "Transparent`style`";
            readonly class: "panel-content-transparent";
            readonly description: "The widget has no background.";
        }];
    };
    WIDGET_CONFIGURATION_GRID_SIZE: typeof WIDGET_CONFIGURATION_GRID_SIZE;
    searchInput?: ElementRef<HTMLInputElement>;
    configForm: NgForm;
    /**
     * Used as wrapper component to inject providers.
     */
    widgetConfigRoot: typeof WidgetConfigRootComponent;
    get isEdit(): boolean;
    get isDeviceTypeDashboard(): boolean;
    result: Promise<Widget>;
    private searchSub;
    private _save;
    private _cancel;
    constructor(widgetService: WidgetService, bottomDrawerRef: BottomDrawerRef<WidgetConfigComponent>, contextDashboardService: ContextDashboardService, widgetConfigService: WidgetConfigService, drawerService: BottomDrawerService, cdr: ChangeDetectorRef);
    onEscapePress(event: Event): Promise<void>;
    ngAfterContentInit(): Promise<void>;
    ngAfterViewInit(): void;
    focusSearchInput(): void;
    isSaveDisabled(): boolean;
    checkIfDeviceRequired(): boolean;
    save(): Promise<void>;
    select(cmp: any, mode?: 'select' | 'config'): void;
    search(): void;
    resetSearch(): void;
    backToWidgetSelection(): void;
    onWidgetTitleChange(newTitle: string): void;
    close(): Promise<void>;
    getStyle(isPreview?: boolean): {};
    ngOnDestroy(): void;
    private setStylings;
    private isDashboardDefaultStyle;
    private setDefaultStyle;
    private composeWidgetConfig;
    private applyTargetIfDeviceDashboard;
    static ɵfac: i0.ɵɵFactoryDeclaration<WidgetConfigComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<WidgetConfigComponent, "c8y-widget-config", never, {}, {}, never, never, true, never>;
}

declare class WidgetPreviewComponent {
    widgetConfigService: WidgetConfigService;
    widgetConfig: WidgetConfigComponent;
    previewClasses: {
        [key: string]: boolean;
    };
    get translateWidgetTitle(): boolean;
    static ɵfac: i0.ɵɵFactoryDeclaration<WidgetPreviewComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<WidgetPreviewComponent, "c8y-widget-preview", never, { "previewClasses": { "alias": "previewClasses"; "required": false; }; }, {}, never, never, true, never>;
}

declare class WidgetConfigSectionComponent implements OnInit {
    section: WidgetConfigSection;
    feedbackTemplate: TemplateRef<any>;
    customValidatorsTouched: i0.WritableSignal<boolean>;
    readonly parentForm: NgForm;
    private readonly destroyRef;
    setFeedbackTemplate(template: TemplateRef<any>): void;
    ngOnInit(): void;
    private initializeCustomValidation;
    private extractControlNames;
    static ɵfac: i0.ɵɵFactoryDeclaration<WidgetConfigSectionComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<WidgetConfigSectionComponent, "c8y-widget-config-section", never, { "section": { "alias": "section"; "required": false; }; }, {}, never, never, true, never>;
}

declare class WidgetPreviewWrapperComponent {
    widgetConfigService: WidgetConfigService;
    set previewSet(template: TemplateRef<any>);
    static ɵfac: i0.ɵɵFactoryDeclaration<WidgetPreviewWrapperComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<WidgetPreviewWrapperComponent, "c8y-widget-preview-wrapper", never, {}, {}, never, ["*"], true, never>;
}

declare class PasteDashboardActionComponent implements OnInit {
    private vcRef;
    private router;
    private contextDashboardService;
    private inventoryService;
    pasteDisabled: boolean;
    templatePaste: any;
    dashboardName: string;
    buttonTitle: string;
    private currentViewContext;
    private currentUrl;
    private contextMO;
    private contextId;
    constructor(vcRef: ViewContainerRef, router: Router, contextDashboardService: ContextDashboardService, inventoryService: InventoryService);
    ngOnInit(): Promise<void>;
    pasteDashboard(): Promise<void>;
    private getContextMo;
    private checkIfPasteIsAllowed;
    static ɵfac: i0.ɵɵFactoryDeclaration<PasteDashboardActionComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<PasteDashboardActionComponent, "c8y-paste-dashboard-action", never, {}, {}, never, never, true, never>;
}

/**
 * Module for the Context Dashboard feature.
 * This module provides components and configurations for managing dashboards,
 * {@link ContextDashboardComponent} is the main component for displaying the dashboard context.
 * {@link WidgetConfigComponent} allows for configuring widgets within the dashboard.
 * {@link DashboardDetailComponent} provides detailed views of individual dashboards.
 */
declare class ContextDashboardModule {
    static config(config?: ContextDashboardConfig): ModuleWithProviders<ContextDashboardModule>;
    static ɵfac: i0.ɵɵFactoryDeclaration<ContextDashboardModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<ContextDashboardModule, never, [typeof _c8y_ngx_components.CoreModule, typeof i2.TooltipModule, typeof i3.PopoverModule, typeof i4.AssetSelectorModule, typeof i5.IconSelectorModule, typeof i6.BsDropdownModule, typeof i7.CollapseModule, typeof i8.RouterModule, typeof AppearanceSettingsComponent, typeof TypeDashboardInfoComponent, typeof WidgetPreviewComponent, typeof WidgetConfigSectionComponent, typeof WidgetPreviewWrapperComponent, typeof ContextDashboardComponent, typeof WidgetConfigComponent, typeof DashboardDetailComponent, typeof AddDashboardComponent, typeof PasteDashboardActionComponent], [typeof ContextDashboardComponent, typeof WidgetConfigComponent, typeof DashboardDetailComponent, typeof TypeDashboardInfoComponent, typeof WidgetConfigSectionComponent, typeof AppearanceSettingsComponent, typeof WidgetPreviewWrapperComponent]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<ContextDashboardModule>;
}

declare abstract class DashboardActionBarFactory implements ActionBarFactory {
    protected abstract targetContext: ViewContext.Device | ViewContext.Group;
    routeChanges$: Observable$1<any>;
    private contextDashboardService;
    get(activeRoute: ActivatedRoute): any[];
}

declare class DeviceInfoDashboardComponent implements CanDeactivateComponent {
    private router;
    private widgetService;
    private translateService;
    private inventoryService;
    isLoading: boolean;
    title: string;
    dashboardName: string;
    widgetsList: Widget[];
    currentContext: ContextData;
    contextSubscription: Subscription;
    widgetsSubscription: Subscription;
    contextDashboard: ContextDashboardComponent;
    protected readonly previewFeatureService: PreviewService;
    protected readonly previewEnabled$: rxjs.Observable<boolean>;
    DEVICE_INFO_WIDGETS: Widget[];
    constructor(router: ActivatedRoute, widgetService: WidgetService, translateService: TranslateService, inventoryService: InventoryService);
    ngOnInit(): void;
    addDeviceTargetForDP(id: string | number, name: string): void;
    filterSupportedSeriesForDP(id: string | number, widgets: Widget[]): Promise<void>;
    ngOnDestroy(): void;
    canDeactivate(): Promise<boolean>;
    static ɵfac: i0.ɵɵFactoryDeclaration<DeviceInfoDashboardComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<DeviceInfoDashboardComponent, "c8y-device-info-dashboard-dashboard", never, {}, {}, never, never, true, never>;
}

declare class DeviceInfoDashboardModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<DeviceInfoDashboardModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<DeviceInfoDashboardModule, never, [typeof i1.CommonModule, typeof _c8y_ngx_components.CoreModule, typeof ContextDashboardModule, typeof DeviceInfoDashboardComponent], never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<DeviceInfoDashboardModule>;
}

declare class DeviceManagementHomeDashboardComponent implements OnInit, CanDeactivateComponent {
    private widgetService;
    widgets: any[];
    dashboardName: string;
    defaultWidgets: Widget[];
    contextDashboard: ContextDashboardComponent;
    constructor(widgetService: WidgetService);
    ngOnInit(): void;
    canDeactivate(): Promise<boolean>;
    static ɵfac: i0.ɵɵFactoryDeclaration<DeviceManagementHomeDashboardComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<DeviceManagementHomeDashboardComponent, "c8y-device-management-home-dashboard", never, {}, {}, never, never, true, never>;
}

declare class DeviceManagementHomeDashboardModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<DeviceManagementHomeDashboardModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<DeviceManagementHomeDashboardModule, never, [typeof i1.CommonModule, typeof _c8y_ngx_components.CoreModule, typeof ContextDashboardModule, typeof DeviceManagementHomeDashboardComponent], never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<DeviceManagementHomeDashboardModule>;
}

declare class WidgetConfigAppearanceComponent {
    widgetConfig: WidgetConfigComponent;
    possibleStyling: {
        WIDGET_HEADER_CLASSES: [{
            readonly label: "Regular`style`";
            readonly class: "panel-title-regular";
            readonly description: "The widget has no border between header and content.";
        }, {
            readonly label: "Border`style`";
            readonly class: "panel-title-border";
            readonly description: "The widget has a small separation border between header and content.";
        }, {
            readonly label: "Overlay`style`";
            readonly class: "panel-title-overlay";
            readonly description: "The widget content overlays the header.";
        }, {
            readonly label: "Hidden`style`";
            readonly class: "panel-title-hidden";
            readonly description: "The widget header is not shown.";
        }];
        WIDGET_CONTENT_CLASSES: [{
            readonly label: "Branded`style`";
            readonly class: "panel-content-branded";
            readonly description: "The widget is styled with the main brand color.";
        }, {
            readonly label: "Match dashboard`style`";
            readonly class: "panel-content-light";
            readonly description: "The widget appearance matches the dashboard appearance.";
        }, {
            readonly label: "Light`style`";
            readonly class: "panel-content-white";
            readonly description: "The widget has light appearance, that is, dark text on light background.";
        }, {
            readonly label: "Dark`style`";
            readonly class: "panel-content-dark";
            readonly description: "The widget has dark appearance, that is, light text on dark background.";
        }, {
            readonly label: "Transparent`style`";
            readonly class: "panel-content-transparent";
            readonly description: "The widget has no background.";
        }];
    };
    static ɵfac: i0.ɵɵFactoryDeclaration<WidgetConfigAppearanceComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<WidgetConfigAppearanceComponent, "c8y-widget-config-appearance", never, {}, {}, never, never, true, never>;
}

declare class WidgetConfigGeneralComponent implements AfterViewInit {
    widgetConfigService: WidgetConfigService;
    definition: DynamicComponentDefinition;
    dynamicComponent: DynamicComponentComponent;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<WidgetConfigGeneralComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<WidgetConfigGeneralComponent, "c8y-widget-config-general", never, { "definition": { "alias": "definition"; "required": false; }; }, {}, never, never, true, never>;
}

declare class WidgetAssetSelectorComponent {
    widgetConfigService: WidgetConfigService;
    sectionComponent: WidgetConfigSectionComponent;
    inventoryService: InventoryService;
    alertService: AlertService;
    /**
     * If set to true, a device must be selected. Default is true.
     */
    isRequired: boolean;
    /**
     * If set to false, unassigned devices will not be shown in the asset selector.
     */
    showUnassigned: boolean;
    /**
     * If set to true, groups will be selectable in the asset selector.
     */
    groupsSelectable: boolean;
    /**
     * For advanced usage, the whole asset-selector-component configuration can be passed.
     */
    assetSelectorConfig: AssetSelectorOptions;
    /**
     * Defines the selected device.
     */
    selectedDevice: IManagedObject;
    /**
     * Template for displaying device names with their IDs.
     * @ignore
     */
    deviceWithIdTpl: "Device {{ id }}";
    /**
     * @ignore
     */
    ngOnInit(): Promise<void>;
    /**
     * Returns true if a context is set.
     * @param value The current configuration of the widget.
     * @returns true if a context is set, false otherwise.
     */
    hasContext(value: ContextWidgetConfig): boolean;
    /**
     * Update the configuration of the widget if the selection was changed.
     * @param $event The change event of the selection.
     */
    selectionChanged($event: AssetSelectionChangeEvent): void;
    selectCurrentContext(): void;
    updateConfig(device: IManagedObject): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<WidgetAssetSelectorComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<WidgetAssetSelectorComponent, "c8y-widget-asset-selector", never, { "isRequired": { "alias": "isRequired"; "required": false; }; "showUnassigned": { "alias": "showUnassigned"; "required": false; }; "groupsSelectable": { "alias": "groupsSelectable"; "required": false; }; "assetSelectorConfig": { "alias": "assetSelectorConfig"; "required": false; }; "selectedDevice": { "alias": "selectedDevice"; "required": false; }; }, {}, never, never, true, never>;
}

declare const newDashboardTab: Tab<string>;
declare class NewDashboardGuard {
    tab: Tab;
    canActivate(route: ActivatedRouteSnapshot): Observable$1<boolean | Tab[]>;
    static ɵfac: i0.ɵɵFactoryDeclaration<NewDashboardGuard, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<NewDashboardGuard>;
}

declare class GlobalContextSectionComponent {
    widgetConfigService: WidgetConfigService;
    /** @deprecated Use `controls` instead */
    widgetControls: WidgetControlsPresetConfig | WidgetControls;
    /** Controls configuration (preset name or full definition) */
    controls: PresetName | PresetDefinition;
    /** Whether to use the new controls-based approach */
    get useControls(): boolean;
    onGlobalContext(event: GlobalContextEvent): void;
    onConfigChange(event: {
        context: GlobalContextState;
        diff: GlobalContextState;
    }): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<GlobalContextSectionComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<GlobalContextSectionComponent, "c8y-global-context-section", never, { "widgetControls": { "alias": "widgetControls"; "required": false; }; "controls": { "alias": "controls"; "required": false; }; }, {}, never, never, true, never>;
}

declare class WidgetConfigFeedbackComponent implements AfterViewInit {
    widgetSection: WidgetConfigSectionComponent;
    template: TemplateRef<any>;
    ngAfterViewInit(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<WidgetConfigFeedbackComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<WidgetConfigFeedbackComponent, "c8y-widget-config-feedback", never, {}, {}, never, ["*"], true, never>;
}

declare class AssetPropertyMappingsService {
    private injector;
    private inventory;
    private moRealtime;
    private assetProperties;
    private computedProperties;
    /**
     * Creates an Observable stream of asset property values that emits updates with realtime changes.
     * Uses realtimeControl$ to enable/disable underlying realtime notifications.
     *
     * @param mappings - The asset property mappings configuration.
     * @param realtimeControl$ - Observable that controls realtime notifications (true = enabled, false = disabled, default = enabled).
     * @returns Observable emitting updated asset property values as they change.
     */
    getValues$(mappings: AssetPropertyMappings, realtimeControl$?: Observable$1<boolean>): Observable$1<Record<string, unknown>>;
    private groupByType;
    private groupByAssetId;
    private getComputedPropertyValues$;
    private getRegularPropertyValues$;
    private getRegularPropertyValue;
    static ɵfac: i0.ɵɵFactoryDeclaration<AssetPropertyMappingsService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AssetPropertyMappingsService>;
}

declare class AssetPropertyMappingsComponent implements OnInit {
    widgetConfigService: WidgetConfigService;
    bottomDrawerService: BottomDrawerService;
    inventory: InventoryService;
    clipboardService: ClipboardService;
    alert: AlertService;
    widgetConfigPath: i0.InputSignal<string[]>;
    initialMappings: i0.InputSignal<AssetPropertyMappings>;
    allowAddingNewMappings: i0.InputSignal<boolean>;
    allowRenamingMappings: i0.InputSignal<boolean>;
    allowRelabellingMappings: i0.InputSignal<boolean>;
    allowEditingMappings: i0.InputSignal<boolean>;
    allowRemovingMappings: i0.InputSignal<boolean>;
    showLabels: i0.InputSignal<boolean>;
    showNames: i0.InputSignal<boolean>;
    showAssets: i0.InputSignal<boolean>;
    showProperties: i0.InputSignal<boolean>;
    showValues: i0.InputSignal<boolean>;
    actionsColumnSpan: i0.InputSignal<number>;
    /**
     * Callback to transform a mapping into the text that gets copied to the clipboard.
     * Exposed as an input so widget config factories can override the default (e.g. to
     * produce a template expression like `${this.c8yProperties?.temperature}`).
     */
    onBeforeCopyMappingToClipboard: i0.InputSignal<(mapping: AssetPropertyMapping) => string>;
    /** Distributes (12 - actionsColumnSpan) columns evenly among visible row-1 columns (label, name). */
    get row1ColumnSpans(): {
        label: number;
        name: number;
    };
    /** Distributes all 12 columns evenly among visible row-2 columns (asset, property, value). */
    get row2ColumnSpans(): {
        asset: number;
        property: number;
        value: number;
    };
    emptyStateTitle: "No asset property mappings";
    emptyStateSubtitle: "Add first asset property mapping.";
    mappings$: rxjs.Observable<AssetPropertyMappings>;
    keys$: rxjs.Observable<string[]>;
    private readonly mappingsSignal;
    private readonly keysSignal;
    readonly isDrawerOpen: i0.WritableSignal<boolean>;
    private readonly labelValidatorCache;
    private readonly nameValidatorCache;
    assetsCache: Map<string | number, IManagedObject>;
    resolvedAssets$: rxjs.Observable<Map<string | number, IManagedObject>>;
    ngOnInit(): Promise<void>;
    getAsset(id: IIdentified['id']): Promise<IManagedObject>;
    addMappings(): Promise<void>;
    editMapping(placeholderName: keyof AssetPropertyMappings, mapping: AssetPropertyMappings[string]): Promise<void>;
    clearMapping(placeholderName: keyof AssetPropertyMappings): Promise<void>;
    copyMappingToClipboard(name: string, mapping: AssetPropertyMappings[string]): Promise<void>;
    removeMapping(name: string): Promise<void>;
    removeAllMappings(): Promise<void>;
    getLabelValidators(key: string): ValidatorFn[];
    getNameValidators(key: string): ValidatorFn[];
    isLabelAlreadyUsed(value: string, key: string, mappings: AssetPropertyMappings | null): boolean;
    isNameAlreadyUsed(value: string, key: string, keys: string[] | null): boolean;
    saveLabel(key: string, newLabel: string): Promise<void>;
    saveName(key: string, newName: string): Promise<void>;
    private distributeColumns;
    static ɵfac: i0.ɵɵFactoryDeclaration<AssetPropertyMappingsComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<AssetPropertyMappingsComponent, "c8y-asset-property-mappings", never, { "widgetConfigPath": { "alias": "widgetConfigPath"; "required": false; "isSignal": true; }; "initialMappings": { "alias": "initialMappings"; "required": false; "isSignal": true; }; "allowAddingNewMappings": { "alias": "allowAddingNewMappings"; "required": false; "isSignal": true; }; "allowRenamingMappings": { "alias": "allowRenamingMappings"; "required": false; "isSignal": true; }; "allowRelabellingMappings": { "alias": "allowRelabellingMappings"; "required": false; "isSignal": true; }; "allowEditingMappings": { "alias": "allowEditingMappings"; "required": false; "isSignal": true; }; "allowRemovingMappings": { "alias": "allowRemovingMappings"; "required": false; "isSignal": true; }; "showLabels": { "alias": "showLabels"; "required": false; "isSignal": true; }; "showNames": { "alias": "showNames"; "required": false; "isSignal": true; }; "showAssets": { "alias": "showAssets"; "required": false; "isSignal": true; }; "showProperties": { "alias": "showProperties"; "required": false; "isSignal": true; }; "showValues": { "alias": "showValues"; "required": false; "isSignal": true; }; "actionsColumnSpan": { "alias": "actionsColumnSpan"; "required": false; "isSignal": true; }; "onBeforeCopyMappingToClipboard": { "alias": "onBeforeCopyMappingToClipboard"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
}

/**
 * Returns a semantically meaningful base key for the given asset property.
 *
 * - Computed properties with a configured data point (e.g. Last measurement):
 *   strips `c8y_` from fragment and series, deduplicates if they resolve to the
 *   same word (e.g. `c8y_Humidity` / `Humidity` → `humidity`), then camelCases.
 * - Nested properties with a keyPath longer than one segment:
 *   uses `camelCase` of the joined, `c8y_`-stripped path segments, e.g. `addressCity`.
 * - All other properties: strips leading `c8y_` and camelCases the name.
 */
declare function getPropertyBaseKey(property: AssetPropertyType): string;
/** Wraps key in quotes for bracket notation, choosing the quote style that requires fewest escapes. */
declare function quoteAndEscape(key: string): string;
/**
 * Replaces all references to `oldKey` via `expressionPrefixes` in the given code string with
 * `newKey`, handling both bracket notation (`prefix?.['key']`, `prefix?.["key"]`) and dot notation
 * (`prefix?.key`, `prefix.key`).
 *
 * Bracket notation matching correctly handles JS string escape sequences (e.g. `['it\'s']`).
 *
 * @param code - Source code to transform.
 * @param oldKey - The property key to rename.
 * @param newKey - The new property key.
 * @param expressionPrefixes - One or more expression prefixes to match against (e.g. `['this.c8yProperties', 'c8yProperties']`).
 */
declare function renamePropertyKeyInCode(code: string, oldKey: string, newKey: string, expressionPrefixes?: string[]): string;

export { ALL_GLOBAL_ROLES_SELECTED, AddDashboardComponent, AddDashboardFactory, AppearanceSettingsComponent, AssetPropertyMappingsComponent, AssetPropertyMappingsService, CONTEXT_DASHBOARD_CONFIG, ContextDashboardComponent, ContextDashboardModule, ContextDashboardService, ContextDashboardType, DASHBOARD_CHILDREN_STATE_NAME, DASHBOARD_DETAILS_OUTLET, DASHBOARD_DETAILS_TABS_OUTLET_NAME, DASHBOARD_SETTINGS_CHANGES, DASHBOARD_THEME_CLASSES, DashboardActionBarFactory, DashboardDetailComponent, DashboardDetailService, DashboardDetailsTabId, DeviceInfoDashboardComponent, DeviceInfoDashboardModule, DeviceManagementHomeDashboardComponent, DeviceManagementHomeDashboardModule, GlobalContextSectionComponent, HOOK_WIDGET_CONFIG, NewDashboardGuard, PRODUCT_EXPERIENCE, PasteDashboardActionComponent, REPORT_DEFAULT_NAVIGATION_NODE_PRIORITY, STYLING_CLASS_PREFIXES, TypeDashboardInfoComponent, WIDGET_CONTENT_CLASSES, WIDGET_HEADER_CLASSES, WidgetAssetSelectorComponent, WidgetConfigAppearanceComponent, WidgetConfigComponent, WidgetConfigFeedbackComponent, WidgetConfigGeneralComponent, WidgetConfigSectionComponent, WidgetConfigSectionService, WidgetConfigService, WidgetPreviewComponent, WidgetPreviewWrapperComponent, WidgetService, getPropertyBaseKey, hookWidgetConfig, newDashboardTab, quoteAndEscape, renamePropertyKeyInCode };
export type { AllowTypeDashboard, AssetPropertyMapping, AssetPropertyMappingKeyRenamedNotification, AssetPropertyMappings, CanDeactivateComponent, ContextDashboard, ContextDashboardConfig, ContextDashboardManagedObject, ContextWidgetConfig, CustomWidgetConfigNotification, DashboardAndWidgetThemeDefinition, DashboardChildrenState, DashboardContext, DashboardCopyClipboard, DashboardDetailsTabs, DashboardGlobalRoles, DashboardHistoryDescription, DashboardMetadata, WidgetConfigNotification, WidgetConfigSection, WidgetConfigSectionBase, WidgetConfigSectionDefinition, WidgetConfigSectionExtension };
//# sourceMappingURL=index.d.ts.map
