/**
 * IGXA is the native catalog format description for the web.
 */
export interface IGXA_Object {
    /** Catalog Title */
    Title: string;
    /** Catalog Image either as full qualified URL or as relative path */
    Image?: string;
    FormatVersion: number;
    ContentVersion?: string;
    Items: TItems;
    HeadData?: IHeadDataItem;
}
export declare const CURRENT_VERSION = 1;
export declare type TItemText = string | string[] | {
    [langid: string]: string | string[];
};
export declare enum EItemType {
    Folder = 0,
    ArticleGfx = 1,
    ArticleCom = 2,
    MultiArticle = 3,
    Impression = 4,
    Set = 5,
    Catalog = 6,
    HeadData = 7,
    Wizard = 8
}
export declare enum EItemVisibility {
    Always = 0,
    OnlySearch = 1,
    OnlyAddables = 2,
    OnlyMultiArticles = 3,
    None = 4
}
export declare type TAnyItem = IFolderItem | IArticleItem | IMultiArticleItem | IImpressionItem | ISetItem | IHeadDataItem;
export declare type TItems = TAnyItem[];
export interface Tag {
    Identifier: string;
    Caption?: TItemText;
    SortIndex?: number;
}
export interface IBaseItem {
    ID: string;
    Type: EItemType | string;
    Caption: TItemText;
    Description?: TItemText;
    Image?: string;
    /**
     * Name of the item. Should be displayed instead of ID when present
     *
     * @type {string}
     */
    Name?: string;
    /**
     * Item shall be displayed, but not be interacted with
     *
     * @type {boolean}
     */
    Disabled?: boolean;
    Tags?: Tag[];
}
export interface IFolderItem extends IBaseItem {
    Type: EItemType.Folder;
    SubItems: TItems;
    FolderData?: any;
}
export interface IMultiArticleItem extends IBaseItem {
    Type: EItemType.MultiArticle;
    MultiArticleId: string;
    SubItems: TItems;
    FolderData?: any;
}
export interface IHeadDataItem extends IBaseItem {
    Type: EItemType.HeadData;
    VariantCode?: string;
    Visibility?: EItemVisibility | string;
    Addables?: string[];
    Source?: string;
    SourceData?: any;
    ArticleData?: any;
}
export interface IArticleItem extends IBaseItem {
    Type: EItemType.ArticleCom | EItemType.ArticleGfx;
    VariantCode?: string;
    Visibility?: EItemVisibility | string;
    Addables?: string[];
    Source?: string;
    SourceData?: any;
    ArticleData?: any;
}
export interface IImpressionItem extends IBaseItem {
    Type: EItemType.Impression;
    Source: string;
}
export interface ISetItem extends IBaseItem {
    Type: EItemType.Set;
    Source: string;
}
export interface ICatalogItem extends IBaseItem {
    Type: EItemType.Catalog;
    ManufacturerName: string;
    CatalogName: string;
}
export interface IWizardItem extends IBaseItem {
    Type: EItemType.Wizard;
}
export declare type TArticleLikeItem = IArticleItem | IHeadDataItem | IImpressionItem | ISetItem;
export declare const extractLocalizedText: (text: TItemText, language?: string) => string[];
export interface TagGroup<T extends IBaseItem> {
    Identifier: string;
    Caption?: TItemText;
    Items: T[];
    Rest?: boolean;
    SortIndex?: number;
}
export declare enum TagGroupSortMode {
    none = "none",
    alphabetically = "alphabetically",
    byIndex = "byIndex",
    byIndexOrAlphabetically = "byIndexOrAlphabetically"
}
export declare const createTagGroups: <T extends IBaseItem>(items: T[], sortMode?: TagGroupSortMode, language?: string | undefined) => TagGroup<T>[];
