export default TinyInventoryTrader;
export type InventoryMetadata = import("./TinyInventory.mjs").InventoryMetadata;
export type AddItemResult = import("./TinyInventory.mjs").AddItemResult;
/**
 * - Transfer configuration.
 */
export type TransferItemCfg = {
    /**
     * - Sender slot index.
     */
    slotIndex?: number | undefined;
    /**
     * - Receiver slot index (optional).
     */
    receiverSlotIndex?: number | undefined;
    /**
     * - Sender special slot ID.
     */
    specialSlot?: string | undefined;
    /**
     * - Quantity to transfer.
     */
    quantity?: number | undefined;
    /**
     * - Whether to force addition even if space is limited.
     */
    forceSpace?: boolean | undefined;
    /**
     * - If true, transfer will throw if not all items can fit.
     */
    strict?: boolean | undefined;
};
/** @typedef {import('./TinyInventory.mjs').InventoryMetadata} InventoryMetadata */
/** @typedef {import('./TinyInventory.mjs').AddItemResult} AddItemResult */
/**
 * @typedef {Object} TransferItemCfg - Transfer configuration.
 * @property {number} [slotIndex] - Sender slot index.
 * @property {number} [receiverSlotIndex] - Receiver slot index (optional).
 * @property {string} [specialSlot] - Sender special slot ID.
 * @property {number} [quantity=1] - Quantity to transfer.
 * @property {boolean} [forceSpace=false] - Whether to force addition even if space is limited.
   @property {boolean} [strict=false] - If true, transfer will throw if not all items can fit.
 */
/**
 * Class responsible for managing item transfers between two TinyInventory instances.
 */
declare class TinyInventoryTrader {
    /**
     * Manages item transfers between two TinyInventory instances.
     * @param {TinyInventory} [sender] - Inventory to remove items from.
     * @param {TinyInventory} [receiver] - Inventory to add items to.
     */
    constructor(sender?: TinyInventory, receiver?: TinyInventory);
    /** @param {TinyInventory} value Sets the sender inventory. */
    set sender(value: TinyInventory);
    /** @returns {TinyInventory|null} The currently connected sender inventory. */
    get sender(): TinyInventory | null;
    /** @param {TinyInventory} value Sets the receiver inventory. */
    set receiver(value: TinyInventory);
    /** @returns {TinyInventory|null} The currently connected receiver inventory. */
    get receiver(): TinyInventory | null;
    /**
     * Connects the sender and receiver inventories for trading.
     * @param {TinyInventory} sender - Inventory to remove items from.
     * @param {TinyInventory} receiver - Inventory to add items to.
     */
    connect(sender: TinyInventory, receiver: TinyInventory): void;
    /**
     * Disconnects the sender and receiver inventories, preventing further transfers.
     */
    disconnect(): void;
    /**
     * Inverts the sender and receiver roles.
     * Useful when performing bidirectional transfers.
     */
    invert(): void;
    /**
     * Transfers an item from sender to receiver.
     *
     * @param {TransferItemCfg} options - Transfer configuration.
     * @returns {Partial<AddItemResult>} Remaining quantity that could NOT be transferred.
     * @throws {Error} If sender or receiver is not connected, item does not exist in sender,
     * or if strict mode is enabled and receiver has no space for full transfer.
     */
    transferItem({ slotIndex, specialSlot, quantity, receiverSlotIndex, forceSpace, strict, }: TransferItemCfg): Partial<AddItemResult>;
    /**
     * Transfers multiple items at once.
     * @param {TransferItemCfg[]} items - Array of transfer configs (see transferItem options).
     * @returns {Partial<AddItemResult>[]} Array of remaining quantities for each item.
     */
    transferMultiple(items: TransferItemCfg[]): Partial<AddItemResult>[];
    #private;
}
import TinyInventory from './TinyInventory.mjs';
//# sourceMappingURL=TinyInventoryTrader.d.mts.map