import type { ComposerSendOptions } from "@assistant-ui/core/store";
import { type TriggerPopoverAriaProps } from "../primitives/composer/useComposerInputState.js";
/** @deprecated Experimental since 2026-06-23. Not scheduled for removal; the API may change in any release. */
export type Unstable_UseComposerInputOptions = {
    /**
     * Disables the input in addition to the composer's own disabled sources
     * (thread disabled, active dictation). When disabled, `isDisabled` is `true`
     * and `canSend` is `false`.
     */
    disabled?: boolean | undefined;
};
/** @deprecated Experimental since 2026-06-23. Not scheduled for removal; the API may change in any release. */
export type Unstable_ComposerInput = {
    /** Current composer text, or `""` when the composer is not editing. */
    value: string;
    /**
     * Writes `text` into the composer, mirroring `ComposerPrimitive.Input`:
     * a no-op unless the composer is editing; the controlled value stays in
     * sync within the same tick.
     */
    setText(text: string): void;
    /**
     * Sends the current message when `canSend` is `true`; otherwise a no-op.
     * Accepts the same options as the composer send action.
     */
    send(options?: ComposerSendOptions): void;
    /**
     * Whether the input is disabled, combining the `disabled` option with the
     * composer's own disabled sources (thread disabled, active dictation).
     */
    isDisabled: boolean;
    /**
     * Whether a send is currently available. Matches `ComposerPrimitive.Send`
     * gating (non-empty editing composer, not running without queue support) and
     * is additionally `false` while `isDisabled`.
     */
    canSend: boolean;
};
/**
 * Headless bridge to the composer's text value and send action, for building a
 * custom composer input without `ComposerPrimitive.Input`. It is a thin bridge,
 * not a second input: it does not own keyboard behavior, autosize, IME or
 * contentEditable sync, paste/drop attachments, focus management, or rich-text
 * state. Spread `unstable_useTriggerPopoverAriaProps()` onto your element for
 * trigger-popover combobox semantics.
 *
 * @deprecated Experimental since 2026-06-23. Not scheduled for removal; the API may change in any release.
 *
 * @example
 * ```tsx
 * const { value, setText, send, isDisabled, canSend } = unstable_useComposerInput();
 * <textarea
 *   value={value}
 *   disabled={isDisabled}
 *   onChange={(e) => setText(e.target.value)}
 *   onKeyDown={(e) => {
 *     if (e.nativeEvent.isComposing || e.keyCode === 229) return;
 *
 *     if (e.key === "Enter" && !e.shiftKey && canSend) {
 *       e.preventDefault();
 *       send();
 *     }
 *   }}
 * />
 * ```
 */
export declare function unstable_useComposerInput(options?: Unstable_UseComposerInputOptions): Unstable_ComposerInput;
/** @deprecated Experimental since 2026-06-23. Not scheduled for removal; the API may change in any release. */
export type Unstable_TriggerPopoverAriaProps = TriggerPopoverAriaProps;
/**
 * ARIA combobox attributes for the focused element (typically the composer
 * input) describing the open trigger popover, per the WAI-ARIA editable
 * combobox pattern. Returns an empty object outside a `TriggerPopoverRoot` or
 * when no popover is open. Spread these last so they take precedence over any
 * matching ARIA props you set yourself, mirroring `ComposerPrimitive.Input`.
 *
 * @deprecated Experimental since 2026-06-23. Not scheduled for removal; the API may change in any release.
 *
 * @example
 * ```tsx
 * const aria = unstable_useTriggerPopoverAriaProps();
 * <textarea {...aria} />
 * ```
 */
export declare function unstable_useTriggerPopoverAriaProps(): Unstable_TriggerPopoverAriaProps;
//# sourceMappingURL=useComposerInput.d.ts.map