{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "composer", "title": "Composer", "description": "A flexible prompt input with keyboard submission.", "dependencies": [ "lucide-react@^1.28.0" ], "registryDependencies": [ "@manner/utils", "@manner/manner-theme", "@manner/button", "@manner/textarea" ], "files": [ { "path": "registry/manner/ai/composer.tsx", "content": "\"use client\"\n\nimport { ArrowUp, Plus } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"@/lib/cn\"\nimport { Button } from \"@/registry/manner/ui/button\"\nimport { Textarea } from \"@/registry/manner/ui/textarea\"\n\ntype ComposerProps = Omit, \"onSubmit\"> & {\n value: string\n onValueChange: (value: string) => void\n onSubmit: (value: string) => void\n placeholder?: string\n disabled?: boolean\n contextAction?: React.ReactNode\n}\n\nfunction Composer({ value, onValueChange, onSubmit, placeholder = \"Ask Manner…\", disabled, contextAction, className, ...props }: ComposerProps) {\n return (\n { event.preventDefault(); if (value.trim()) onSubmit(value.trim()) }}\n {...props}\n >\n onValueChange(event.target.value)}\n onKeyDown={(event) => { if ((event.metaKey || event.ctrlKey) && event.key === \"Enter\") event.currentTarget.form?.requestSubmit() }}\n placeholder={placeholder}\n disabled={disabled}\n className=\"min-h-24 resize-none border-0 bg-transparent px-1 shadow-none focus-visible:shadow-none\"\n />\n \n \n )\n}\n\nexport { Composer, type ComposerProps }\n", "type": "registry:ui" } ], "type": "registry:ui" }