"use client"; import { Primitive } from "../../utils/Primitive"; import { type ComponentRef, type ComponentPropsWithoutRef, forwardRef, useCallback, } from "react"; import { useAui, useAuiState } from "@assistant-ui/store"; import { composeEventHandlers } from "@radix-ui/primitive"; // ---- Root ---- export namespace ComposerPrimitiveQuote { export type Element = ComponentRef; export type Props = ComponentPropsWithoutRef; } /** * Renders a container for the quoted text preview in the composer. * Only renders when a quote is set. * * @example * ```tsx * * * × * * ``` */ export const ComposerPrimitiveQuote = forwardRef< ComposerPrimitiveQuote.Element, ComposerPrimitiveQuote.Props >((props, forwardedRef) => { const quote = useAuiState((s) => s.composer.quote); if (!quote) return null; return ; }); ComposerPrimitiveQuote.displayName = "ComposerPrimitive.Quote"; // ---- QuoteText ---- export namespace ComposerPrimitiveQuoteText { export type Element = ComponentRef; export type Props = ComponentPropsWithoutRef; } /** * Renders the quoted text content. * * @example * ```tsx * * ``` */ export const ComposerPrimitiveQuoteText = forwardRef< ComposerPrimitiveQuoteText.Element, ComposerPrimitiveQuoteText.Props >(({ children, ...props }, forwardedRef) => { const text = useAuiState((s) => s.composer.quote?.text); if (!text) return null; return ( {children ?? text} ); }); ComposerPrimitiveQuoteText.displayName = "ComposerPrimitive.QuoteText"; // ---- QuoteDismiss ---- export namespace ComposerPrimitiveQuoteDismiss { export type Element = ComponentRef; export type Props = ComponentPropsWithoutRef; } /** * A button that clears the current quote from the composer. * * @example * ```tsx * × * ``` */ export const ComposerPrimitiveQuoteDismiss = forwardRef< ComposerPrimitiveQuoteDismiss.Element, ComposerPrimitiveQuoteDismiss.Props >(({ onClick, ...props }, forwardedRef) => { const aui = useAui(); const handleDismiss = useCallback(() => { aui.composer().setQuote(undefined); }, [aui]); return ( ); }); ComposerPrimitiveQuoteDismiss.displayName = "ComposerPrimitive.QuoteDismiss";