import { default as CortexElement } from '../../../base/src/cortex-element.ts';
import { default as CxViewAndSort } from '../../../molecules/src/view-and-sort/view-and-sort.ts';
import { ButtonSize, ButtonVariant } from '../../../types/src/button';
import { Settings, TemplateSwitcherProps } from '../../../types/src/template-switcher';
import { MenuData } from '../../../types/src/view-and-sort';
import { TemplateResult } from 'lit';

/**
 * @class CxTemplateSwitcher
 * @extends CortexElement
 * @summary Custom web component for switching templates in the Cortex application. The component manages various settings and menu configurations for different views, sort orders, and other options.
 *
 * @property {TemplateSwitcherProps} data - The data object containing initial settings and other configurations.
 * @property {boolean | null} forcedSortOrder - Indicates if the sort order is forced.
 * @property {string | null} forcedSortOrderReason - The reason for forcing the sort order.
 * @property {MenuData} _menu - Internal state to store the menu data.
 * @property {Settings} _settings - Internal state to store the settings.
 * @property {boolean} _loading - Internal state to indicate if the component is loading.
 *
 * @event {{ item: MenuItem }} cx-select - Emitted when a menu item is selected.
 */
export default class CxTemplateSwitcher extends CortexElement {
    static readonly dependencies: {
        'cx-view-and-sort': typeof CxViewAndSort;
    };
    private readonly localize;
    viewAndSort: CxViewAndSort;
    data: TemplateSwitcherProps;
    forcedSortOrder: boolean | null;
    forcedSortOrderReason: string | null;
    label: string;
    triggerButtonVariant: ButtonVariant;
    triggerButtonSize: ButtonSize;
    private _loading;
    private _menu;
    get menu(): MenuData;
    private _settings;
    get settings(): Settings;
    private readonly iconMap;
    handleDataChange(): void;
    handleSettingsChange(): void;
    handleAddCortexEvent(eventName: string, value: string, isSetting?: boolean): void;
    handleItemSelect(event: CustomEvent): void;
    render(): TemplateResult;
}
declare global {
    interface HTMLElementTagNameMap {
        'cx-template-switcher': CxTemplateSwitcher;
    }
}
