import { TNode, Value, Signal } from '@tempots/dom';
/**
 * Layout mode for list item controls (move/remove buttons).
 *
 * - `'aside'` - Controls are rendered in a column to the right of each item
 * - `'below'` - Controls are rendered in a row below each item
 */
export type ListControlsLayout = 'below' | 'aside';
/**
 * Configuration options for {@link ListItemControls}.
 */
export type ListItemControlsOptions = {
    /** Callback to move the item up or down */
    onMove: (direction: 'up' | 'down') => void;
    /** Signal indicating the item cannot be moved up */
    cannotMoveUp: Signal<boolean>;
    /** Signal indicating the item cannot be moved down */
    cannotMoveDown: Signal<boolean>;
    /** Callback to remove the item */
    onRemove: () => void;
    /**
     * Whether to show the move buttons.
     * @default true
     */
    showMove?: Value<boolean>;
    /**
     * Whether to show the remove button.
     * @default true
     */
    showRemove?: Value<boolean>;
    /** When true, disables the remove button instead of hiding it */
    removeDisabled?: Value<boolean>;
    /**
     * Whether to show move buttons (e.g., when list has more than 1 item).
     * @default true
     */
    showMoveButtons?: Value<boolean>;
    /**
     * Layout mode for the controls.
     * @default 'aside'
     */
    layout?: Value<ListControlsLayout>;
};
/**
 * Renders reusable move/remove controls for a list item.
 *
 * Wraps content with move up/down and remove buttons, positioned either
 * beside (`'aside'`) or below the content depending on the layout mode.
 *
 * @param options - Configuration options for the controls
 * @param content - The list item content to wrap
 * @returns A TNode with the content and its controls
 *
 * @example
 * ```ts
 * ListItemControls({
 *   onMove: dir => payload.move(dir),
 *   cannotMoveUp: payload.cannotMove('up'),
 *   cannotMoveDown: payload.cannotMove('down'),
 *   onRemove: payload.remove,
 *   layout: 'aside',
 * }, myItemContent)
 * ```
 */
export declare function ListItemControls(options: ListItemControlsOptions, content: TNode): TNode;
