import { type IdObjectSkeletonInterface } from '../api/ApiTypes';
import { State } from '../shared/State';
import { ExportMetaData } from './OpsTypes';
export type ThemeSkeleton = IdObjectSkeletonInterface & {
    name: string;
    isDefault: boolean;
    linkedTrees: string[];
};
export type UiThemeRealmObject = IdObjectSkeletonInterface & {
    name: string;
    realm: Map<string, ThemeSkeleton[]>;
};
export declare const THEMEREALM_ID = "ui/themerealm";
export type Theme = {
    /**
     * Create an empty theme export template
     * @returns {ThemeExportInterface} an empty theme export template
     */
    createThemeExportTemplate(): ThemeExportInterface;
    /**
     * Read all themes
     * @param {string} realm realm name
     * @returns {Promise<ThemeSkeleton[]>} a promise that resolves to an array of themes
     */
    readThemes(): Promise<ThemeSkeleton[]>;
    /**
     * Read theme by id
     * @param {string} themeId theme id
     * @param {string} realm realm name
     * @returns {Promise<ThemeSkeleton>} a promise that resolves to a theme object
     */
    readTheme(themeId: string, realm?: string): Promise<ThemeSkeleton>;
    /**
     * Read theme by name
     * @param {string} themeName theme name
     * @param {string} realm realm name
     * @returns {Promise<ThemeSkeleton>} a promise that resolves to a theme object
     */
    readThemeByName(themeName: string, realm?: string): Promise<ThemeSkeleton>;
    /**
     * Export all themes. The response can be saved to file as is.
     * @returns {Promise<ThemeExportInterface>} Promise resolving to a ThemeExportInterface object.
     */
    exportThemes(): Promise<ThemeExportInterface>;
    /**
     * Update theme
     * @param {ThemeSkeleton} themeData theme object
     * @param {string} themeId theme id
     * @param {string} realm realm name
     * @returns {Promise<ThemeSkeleton>} a promise that resolves to a theme object
     */
    createTheme(themeData: ThemeSkeleton, themeId?: string, realm?: string): Promise<ThemeSkeleton>;
    /**
     * Update theme
     * @param {string} themeId theme id
     * @param {ThemeSkeleton} themeData theme object
     * @param {string} realm realm name
     * @returns {Promise<ThemeSkeleton>} a promise that resolves to a theme object
     */
    updateTheme(themeId: string, themeData: ThemeSkeleton, realm?: string): Promise<ThemeSkeleton>;
    /**
     * Update theme by name
     * @param {String} themeName theme name
     * @param {ThemeSkeleton} themeData theme object
     * @param {string} realm realm name
     * @returns {Promise<ThemeSkeleton>} a promise that resolves to a theme object
     */
    updateThemeByName(themeName: string, themeData: ThemeSkeleton, realm?: string): Promise<ThemeSkeleton>;
    /**
     * Update all themes
     * @param {Map<string, ThemeSkeleton>} allThemesData themes object containing all themes for all realms
     * @param {string} realm realm name
     * @returns {Promise<Map<string, ThemeSkeleton>>} a promise that resolves to a themes object
     */
    updateThemes(themeMap: Record<string, ThemeSkeleton>): Promise<Record<string, ThemeSkeleton>>;
    /**
     * Import themes
     * @param {ThemeExportInterface} importData import data
     * @returns {Promise<ThemeSkeleton[]>} a promise resolving to an array of theme objects
     */
    importThemes(importData: ThemeExportInterface): Promise<ThemeSkeleton[]>;
    /**
     * Delete theme by id
     * @param {string} themeId theme id
     * @param {string} realm realm name
     * @returns {Promise<ThemeSkeleton>} a promise that resolves to a themes object
     */
    deleteTheme(themeId: string, realm?: string): Promise<ThemeSkeleton>;
    /**
     * Delete theme by name
     * @param {string} themeName theme name
     * @param {string} realm realm name
     * @returns {Promise<ThemeSkeleton>} a promise that resolves to a themes object
     */
    deleteThemeByName(themeName: string, realm?: string): Promise<ThemeSkeleton>;
    /**
     * Delete all themes
     * @param {string} realm realm name
     * @returns {Promise<ThemeSkeleton[]>} a promise that resolves to an array of themes
     */
    deleteThemes(realm?: string): Promise<ThemeSkeleton[]>;
    /**
     * Get all themes
     * @param {string} realm realm name
     * @returns {Promise<ThemeSkeleton[]>} a promise that resolves to an array of themes
     * @deprecated since v2.0.0 use {@link Theme.readThemes | readThemes} instead
     * ```javascript
     * readThemes(): Promise<ThemeSkeleton[]>
     * ```
     * @group Deprecated
     */
    getThemes(): Promise<ThemeSkeleton[]>;
    /**
     * Get theme by id
     * @param {string} themeId theme id
     * @param {string} realm realm name
     * @returns {Promise<ThemeSkeleton>} a promise that resolves to a theme object
     * @deprecated since v2.0.0 use {@link Theme.readTheme | readTheme} instead
     * ```javascript
     * readTheme(themeId: string, realm?: string): Promise<ThemeSkeleton>
     * ```
     * @group Deprecated
     */
    getTheme(themeId: string, realm?: string): Promise<ThemeSkeleton>;
    /**
     * Get theme by name
     * @param {string} themeName theme name
     * @param {string} realm realm name
     * @returns {Promise<ThemeSkeleton>} a promise that resolves to a theme object
     * @deprecated since v2.0.0 use {@link Theme.readThemeByName | readThemeByName} instead
     * ```javascript
     * readThemeByName(themeName: string, realm?: string): Promise<ThemeSkeleton>
     * ```
     * @group Deprecated
     */
    getThemeByName(themeName: string, realm?: string): Promise<ThemeSkeleton>;
    /**
     * Put theme by id
     * @param {string} themeId theme id
     * @param {ThemeSkeleton} themeData theme object
     * @param {string} realm realm name
     * @returns {Promise<ThemeSkeleton>} a promise that resolves to a theme object
     * @deprecated since v2.0.0 use {@link Theme.updateTheme | updateTheme} or {@link Theme.createTheme | createTheme} instead
     * ```javascript
     * updateTheme(themeId: string, themeData: ThemeSkeleton, realm?: string): Promise<ThemeSkeleton>
     * createTheme(themeData: ThemeSkeleton, themeId?: string, realm?: string): Promise<ThemeSkeleton>
     * ```
     * @group Deprecated
     */
    putTheme(themeId: string, themeData: ThemeSkeleton, realm?: string): Promise<ThemeSkeleton>;
    /**
     * Put theme by name
     * @param {String} themeName theme name
     * @param {ThemeSkeleton} themeData theme object
     * @param {string} realm realm name
     * @returns {Promise<ThemeSkeleton>} a promise that resolves to a theme object
     * @deprecated since v2.0.0 use {@link Theme.updateThemeByName | updateThemeByName} instead
     * ```javascript
     * updateThemeByName(themeName: string, themeData: ThemeSkeleton, realm?: string): Promise<ThemeSkeleton>
     * ```
     * @group Deprecated
     */
    putThemeByName(themeName: string, themeData: ThemeSkeleton, realm?: string): Promise<ThemeSkeleton>;
    /**
     * Put all themes
     * @param {Map<string, ThemeSkeleton>} allThemesData themes object containing all themes for all realms
     * @param {string} realm realm name
     * @returns {Promise<Map<string, ThemeSkeleton>>} a promise that resolves to a themes object
     * @deprecated since v2.0.0 use {@link Theme.updateThemes | updateThemes} instead
     * ```javascript
     * updateThemes(themeMap: Map<string, ThemeSkeleton>): Promise<Map<string, ThemeSkeleton>>
     * ```
     * @group Deprecated
     */
    putThemes(themeMap: Record<string, ThemeSkeleton>): Promise<Record<string, ThemeSkeleton>>;
};
declare const _default: (state: State) => Theme;
export default _default;
export interface ThemeExportInterface {
    meta?: ExportMetaData;
    theme: Record<string, ThemeSkeleton>;
}
/**
 * Create an empty theme export template
 * @returns {ThemeExportInterface} an empty theme export template
 */
export declare function createThemeExportTemplate({ state, }: {
    state: State;
}): ThemeExportInterface;
/**
 * Read all themes
 * @param {string} realm realm name
 * @returns {Promise<ThemeSkeleton[]>} a promise that resolves to an array of themes
 */
export declare function readThemes({ realm, state, }: {
    realm?: string;
    state: State;
}): Promise<ThemeSkeleton[]>;
/**
 * Read theme by id
 * @param {string} themeId theme id
 * @param {string} realm realm name
 * @returns {Promise<ThemeSkeleton>} a promise that resolves to a theme object
 */
export declare function readTheme({ themeId, realm, state, }: {
    themeId: string;
    realm?: string;
    state: State;
}): Promise<ThemeSkeleton>;
/**
 * Read theme by name
 * @param {string} themeName theme name
 * @param {string} realm realm name
 * @returns {Promise<ThemeSkeleton>} a promise that resolves to a theme object
 */
export declare function readThemeByName({ themeName, realm, state, }: {
    themeName: string;
    realm?: string;
    state: State;
}): Promise<ThemeSkeleton>;
/**
 * Export all themes. The response can be saved to file as is.
 * @returns {Promise<ThemeExportInterface>} Promise resolving to a ThemeExportInterface object.
 */
export declare function exportThemes({ state, }: {
    state: State;
}): Promise<ThemeExportInterface>;
/**
 * Create theme
 * @param {string} themeId theme id
 * @param {ThemeSkeleton} themeData theme object
 * @param {string} realm realm name
 * @returns {Promise<ThemeSkeleton>} a promise that resolves to a theme object
 */
export declare function createTheme({ themeData, themeId, realm, state, }: {
    themeData: ThemeSkeleton;
    themeId?: string;
    realm?: string;
    state: State;
}): Promise<ThemeSkeleton>;
/**
 * Update theme
 * @param {string} themeId theme id
 * @param {ThemeSkeleton} themeData theme object
 * @param {string} realm realm name
 * @returns {Promise<ThemeSkeleton>} a promise that resolves to a theme object
 */
export declare function updateTheme({ themeId, themeData, realm, state, }: {
    themeId: string;
    themeData: ThemeSkeleton;
    realm?: string;
    state: State;
}): Promise<ThemeSkeleton>;
/**
 * Update theme by name
 * @param {String} themeName theme name
 * @param {ThemeSkeleton} themeData theme object
 * @param {string} realm realm name
 * @returns {Promise<ThemeSkeleton>} a promise that resolves to a theme object
 */
export declare function updateThemeByName({ themeName, themeData, realm, state, }: {
    themeName: string;
    themeData: ThemeSkeleton;
    realm?: string;
    state: State;
}): Promise<ThemeSkeleton>;
/**
 * Update all themes
 * @param {Map<string, ThemeSkeleton>} allThemesData themes object containing all themes for all realms
 * @param {string} realm realm name
 * @returns {Promise<Map<string, ThemeSkeleton>>} a promise that resolves to a themes object
 */
export declare function updateThemes({ themeMap, realm, state, }: {
    themeMap: Record<string, ThemeSkeleton>;
    realm?: string;
    state: State;
}): Promise<Record<string, ThemeSkeleton>>;
/**
 * Import themes
 * @param {ThemeExportInterface} importData import data
 * @param {string} realm realm name
 * @returns {Promise<ThemeSkeleton[]>} a promise resolving to an array of theme objects
 */
export declare function importThemes({ importData, realm, state, }: {
    importData: ThemeExportInterface;
    realm?: string;
    state: State;
}): Promise<ThemeSkeleton[]>;
/**
 * Delete theme by id
 * @param {string} themeId theme id
 * @param {string} realm realm name
 * @returns {Promise<ThemeSkeleton>} a promise that resolves to a themes object
 */
export declare function deleteTheme({ themeId, realm, state, }: {
    themeId: string;
    realm?: string;
    state: State;
}): Promise<ThemeSkeleton>;
/**
 * Delete theme by name
 * @param {string} themeName theme name
 * @param {string} realm realm name
 * @returns {Promise<ThemeSkeleton>} a promise that resolves to a themes object
 */
export declare function deleteThemeByName({ themeName, realm, state, }: {
    themeName: string;
    realm?: string;
    state: State;
}): Promise<ThemeSkeleton>;
/**
 * Delete all themes
 * @param {string} realm realm name
 * @returns {Promise<ThemeSkeleton[]>} a promise that resolves to an array of themes
 */
export declare function deleteThemes({ realm, state, }: {
    realm?: string;
    state: State;
}): Promise<ThemeSkeleton[]>;
//# sourceMappingURL=ThemeOps.d.ts.map