"use client"; import { forwardRef } from "react"; import type { ActionButtonProps } from "../../utils/createActionButton"; import { useEscapeKeydown } from "@radix-ui/react-use-escape-keydown"; import { Primitive } from "../../utils/Primitive"; import { composeEventHandlers } from "@radix-ui/primitive"; import { useActionBarStopSpeaking as useActionBarStopSpeakingBehavior } from "@assistant-ui/core/react"; const useActionBarStopSpeaking = () => { const { disabled, stopSpeaking } = useActionBarStopSpeakingBehavior(); if (disabled) return null; return stopSpeaking; }; export namespace ActionBarPrimitiveStopSpeaking { export type Element = HTMLButtonElement; export type Props = ActionButtonProps; } export const ActionBarPrimitiveStopSpeaking = forwardRef< ActionBarPrimitiveStopSpeaking.Element, ActionBarPrimitiveStopSpeaking.Props >((props, ref) => { const callback = useActionBarStopSpeaking(); // TODO this stops working if the user is not hovering over an older message useEscapeKeydown((e) => { if (callback) { e.preventDefault(); callback(); } }); return ( { callback?.(); })} /> ); }); ActionBarPrimitiveStopSpeaking.displayName = "ActionBarPrimitive.StopSpeaking";