diff --git a/packages/ai/src/ChatComposer.tsx b/packages/ai/src/ChatComposer.tsx index 38e0ef1..6921541 100644 --- a/packages/ai/src/ChatComposer.tsx +++ b/packages/ai/src/ChatComposer.tsx @@ -88,7 +88,7 @@ export function ChatComposer({ }} placeholder={placeholder} rows={2} - className="text-ink placeholder:text-ink-faint block w-full resize-none border-0 bg-transparent text-sm leading-6 outline-none focus:border-0 focus:outline-none focus:ring-0" + className="text-ink placeholder:text-ink-faint block w-full resize-none rounded-md border-0 bg-transparent text-sm leading-6 outline-none focus:border-0 focus:outline-none focus:ring-0 focus-visible:ring-2 focus-visible:ring-accent" />
@@ -139,7 +139,11 @@ export function ChatComposer({ {toolbarExtra} {onOpenVoice && ( - + )} diff --git a/packages/ai/src/Markdown.tsx b/packages/ai/src/Markdown.tsx index 7085ba9..f0f15b9 100644 --- a/packages/ai/src/Markdown.tsx +++ b/packages/ai/src/Markdown.tsx @@ -1,6 +1,5 @@ import ReactMarkdown from 'react-markdown'; import remarkGfm from 'remark-gfm'; -import rehypeRaw from 'rehype-raw'; import { clsx } from 'clsx'; import { forwardRef } from 'react'; @@ -18,7 +17,6 @@ const Markdown = forwardRef( > {content} diff --git a/packages/ai/src/MessageBubble.tsx b/packages/ai/src/MessageBubble.tsx index e53e509..2ebf094 100644 --- a/packages/ai/src/MessageBubble.tsx +++ b/packages/ai/src/MessageBubble.tsx @@ -45,6 +45,9 @@ export function MessageBubble({ onCopy(content)} + aria-label={ + isStreaming ? 'Copy Streaming Message' : 'Copy Message' + } title={ isStreaming ? 'Copy streaming message' : 'Copy message' } diff --git a/packages/ai/src/TaskCreateForm.tsx b/packages/ai/src/TaskCreateForm.tsx index 9794400..cfe3d94 100644 --- a/packages/ai/src/TaskCreateForm.tsx +++ b/packages/ai/src/TaskCreateForm.tsx @@ -1,6 +1,6 @@ import { Button, Select, SelectOption } from "@spacedrive/primitives"; import clsx from "clsx"; -import { useCallback, useState } from "react"; +import { useCallback, useId, useState } from "react"; import type { TaskPriority } from "./types"; import { TASK_PRIORITY_LABEL } from "./types"; @@ -31,6 +31,8 @@ export function TaskCreateForm({ const [title, setTitle] = useState(""); const [description, setDescription] = useState(""); const [priority, setPriority] = useState(defaultPriority); + const titleInputId = useId(); + const descriptionInputId = useId(); const canSubmit = title.trim().length > 0 && !isSubmitting; @@ -45,7 +47,11 @@ export function TaskCreateForm({ return (
+ setTitle(e.target.value)} @@ -54,7 +60,7 @@ export function TaskCreateForm({ if (e.key === "Escape") onCancel?.(); }} placeholder="Task title..." - className="min-w-0 flex-1 bg-transparent px-2 py-1.5 text-sm text-ink placeholder:text-ink-faint focus:outline-none" + className="min-w-0 flex-1 rounded-md bg-transparent px-2 py-1.5 text-sm text-ink placeholder:text-ink-faint focus:outline-none focus-visible:ring-2 focus-visible:ring-accent" disabled={isSubmitting} autoFocus /> @@ -79,12 +85,16 @@ export function TaskCreateForm({ Create
+