import { ByteBuffer } from '@runejs/common';
import type { FileIndex } from '../file-index';
import type { Filestore } from '../filestore';
import type { FileData } from '../file-data';
import type { Archive } from '../archive';
export declare abstract class WidgetBase {
    id: number;
    parentId: number;
    type: number;
    format: number;
    originalX: number;
    originalY: number;
    x: number;
    y: number;
    width: number;
    height: number;
    menuType: number;
    contentType: number;
    opacity: number;
    hidden: boolean;
    targetVerb: string;
    spellName: string;
    clickMask: number;
    hintText: string;
    hoveredSiblingId: number;
    alternateOperators: number[];
    alternateRhs: number[];
    cs1: number[][];
    hasListeners: boolean;
    /**
     * Writes this unpacked widget file to the disk under `./unpacked/widgets/{widgetId}_widget.json`
     */
    writeToDisk(): Promise<void>;
}
export declare class ParentWidget extends WidgetBase {
    children: WidgetBase[];
    constructor(id: number);
}
export declare class ContainerWidget extends WidgetBase {
    type: number;
    scrollHeight: number;
    scrollPosition: number;
    scrollWidth: number;
    children?: WidgetBase[];
}
export declare class TextWidget extends WidgetBase {
    type: number;
    textAlignmentX: number;
    textAlignmentY: number;
    lineHeight: number;
    fontId: number;
    textShadowed: boolean;
    textColor: number;
}
export declare class InteractableItemWidget extends WidgetBase {
    type: number;
    items: number[];
    itemAmounts: number[];
    itemSwapable: boolean;
    isInventory: boolean;
    itemUsable: boolean;
    itemDeletesDraged: boolean;
    itemSpritePadsX: number;
    itemSpritePadsY: number;
    imageX: number[];
    imageY: number[];
    images: number[];
    options: string[];
}
export declare class RectangleWidget extends WidgetBase {
    type: number;
    filled: boolean;
    textColor: number;
    alternateTextColor: number;
    hoveredTextColor: number;
    alternateHoveredTextColor: number;
}
export declare class LinkWidget extends WidgetBase {
    type: number;
    textAlignmentX: number;
    textAlignmentY: number;
    lineHeight: number;
    fontId: number;
    textShadowed: boolean;
    text: string;
    alternateText: string;
    textColor: number;
    alternateTextColor: number;
    hoveredTextColor: number;
    alternateHoveredTextColor: number;
}
export declare class SpriteWidget extends WidgetBase {
    type: number;
    spriteId: number;
    alternateSpriteId: number;
    textureId: number;
    tiled: boolean;
}
export declare class ModelWidget extends WidgetBase {
    type: number;
    modelType: number;
    modelId: number;
    alternateModelType: number;
    alternateModelId: number;
    animation: number;
    alternateAnimation: number;
    modelZoom: number;
    rotationX: number;
    rotationY: number;
    rotationZ: number;
    offsetX: number;
    offsetY: number;
    orthogonal: boolean;
}
export declare class StaticItemWidget extends WidgetBase {
    type: number;
    items: number[];
    itemAmounts: number[];
    isInventory: boolean;
    itemSpritePadsX: number;
    itemSpritePadsY: number;
    options: string[];
    textAlignmentX: number;
    fontId: number;
    textShadowed: boolean;
    textColor: number;
}
export declare class TooltipWidget extends WidgetBase {
    type: number;
    text: string;
}
export declare class LineWidget extends WidgetBase {
    type: number;
    lineWidth: number;
    textColor: number;
}
/**
 * Controls game interface widget file format and storage.
 */
export declare class WidgetStore {
    private fileStore;
    /**
     * The main file index of the widget store.
     */
    readonly widgetFileIndex: FileIndex;
    constructor(fileStore: Filestore);
    /**
     * Writes all unpacked widget files to the disk under `./unpacked/widgets/`
     */
    writeToDisk(): Promise<void>;
    /**
     * Decodes the specified widget file.
     * @param id The numeric ID of the widget file to decode.
     */
    decodeWidget(id: number): WidgetBase;
    /**
     * Decodes the specified widget file, first determining if it is in the new or older widget format.
     * @param id The numeric ID of the widget file to decode.
     * @param widgetFile The file data of the widget file to decode.
     */
    decodeWidgetFile(id: number, widgetFile: FileData | Archive): WidgetBase;
    /**
     * Decodes all widget files within the filestore.
     * @returns The list of decoded WidgetBase objects from the widget store.
     */
    decodeWidgetStore(): WidgetBase[];
    createWidget(widgetType: number): WidgetBase;
    decodeWidgetFormat2(widgetId: number, inputBuffer: ByteBuffer): WidgetBase;
    decodeWidgetFormat1(widgetId: number, inputBuffer: ByteBuffer): WidgetBase;
}
