e.stopPropagation()}
>
@@ -30,19 +30,19 @@ export function FileSearchBar(props: {
props.onInput(e.currentTarget.value)}
onKeyDown={(e) => props.onKeyDown(e as KeyboardEvent)}
/>
- {props.count() ? `${props.index() + 1}/${props.count()}` : "0/0"}
+ {props.count ? `${props.index + 1}/${props.count}` : "0/0"}
- {loaded()} • {session().title || session().id} • {state.messages.length} message
+ {loaded()} • {session.title || session.id} • {state.messages.length} message
{state.messages.length === 1 ? "" : "s"}
@@ -2048,7 +2050,7 @@ function Playground() {
{(msg) => (
- {reducedMotion() && (
+
- )}
+
{/* Matches context-tool-group-trigger layout from message-part.tsx */}
{
return (
- {samples.map((item) => (
-
- ))}
+ {(item) => }
)
},
diff --git a/packages/tui/src/mini/mono.ts b/packages/tui/src/mini/mono.ts
index 62205eba66..9760996e28 100644
--- a/packages/tui/src/mini/mono.ts
+++ b/packages/tui/src/mini/mono.ts
@@ -91,7 +91,6 @@ function monoRenderable(renderable: Renderable): void {
function monoCode(renderable: CodeRenderable): void {
const onChunks = renderable.onChunks
- const prose = renderable.filetype === "markdown" && onChunks !== undefined
renderable.onChunks = async (chunks, context) => monoChunks((await onChunks?.(chunks, context)) ?? chunks)
renderable.treeSitterClient = monoTreeSitter(renderable.treeSitterClient)
@@ -112,11 +111,11 @@ function monoCode(renderable: CodeRenderable): void {
configurable: true,
get: contentGetter,
set(value: string) {
- if (!prose || !isStyledText(Reflect.get(renderable, "_initialStyledText"))) {
+ if (renderable.filetype !== "markdown" || !isStyledText(Reflect.get(renderable, "_initialStyledText"))) {
renderable.drawUnstyledText = true
renderable.initialStyledText = stringToStyledText(value)
}
- contentSetter(value)
+ contentSetter(renderable.filetype === "markdown" ? value : monoText(value))
},
})
diff --git a/packages/tui/src/prompt/directory-completion.ts b/packages/tui/src/prompt/directory-completion.ts
index 5fe04a37c4..cacbb2d7bf 100644
--- a/packages/tui/src/prompt/directory-completion.ts
+++ b/packages/tui/src/prompt/directory-completion.ts
@@ -52,7 +52,7 @@ export function directoryAutocompleteResultValue(
directory: string,
search: ReturnType,
) {
- return (search.prefix || "./") + directory.replace(/^[\\/]+/, "")
+ return search.prefix + directory.replace(/^[\\/]+/, "")
}
export function directoryAutocompleteExactValue(value: string, search: ReturnType) {
diff --git a/packages/tui/src/routes/session/index.tsx b/packages/tui/src/routes/session/index.tsx
index 014fe3438a..49df39cdd4 100644
--- a/packages/tui/src/routes/session/index.tsx
+++ b/packages/tui/src/routes/session/index.tsx
@@ -2089,7 +2089,7 @@ function UserMessage(props: { message: SessionMessageUser }) {
function QueuedPromptDock(props: { prompts: { id: string; text: string }[]; onOpen: () => void }) {
const theme = useTheme("elevated")
- const next = createMemo(() => props.prompts[0]?.text)
+ const next = createMemo(() => props.prompts[0]?.text.replaceAll("\n", " "))
return (
{
})
describe("directoryAutocompleteResultValue", () => {
- test("marks current-directory results as relative", () => {
- const search = directoryAutocompleteSearch("", "/project", "/home/user")
- expect(directoryAutocompleteResultValue("src/", search)).toBe("./src/")
- expect(directoryAutocompleteResultValue("/src/", search)).toBe("./src/")
- expect(directoryAutocompleteResultValue("/", search)).toBe("./")
- })
-
test("preserves explicit roots", () => {
expect(
directoryAutocompleteResultValue("projects/", directoryAutocompleteSearch("~/", "/project", "/home/user")),
diff --git a/packages/ui/src/components/app-icon.stories.tsx b/packages/ui/src/components/app-icon.stories.tsx
index 24460b6da2..66e516e422 100644
--- a/packages/ui/src/components/app-icon.stories.tsx
+++ b/packages/ui/src/components/app-icon.stories.tsx
@@ -1,4 +1,5 @@
// @ts-nocheck
+import { For } from "solid-js"
import { iconNames } from "./app-icons/types"
import * as mod from "./app-icon"
import { create } from "../storybook/scaffold"
@@ -58,12 +59,14 @@ export const AllIcons = {
"grid-template-columns": "repeat(auto-fill, minmax(72px, 1fr))",
}}
>
- {iconNames.map((id) => (
-
- ))}
+
+ {(id) => (
+
+ )}
+
),
}
diff --git a/packages/ui/src/components/card.tsx b/packages/ui/src/components/card.tsx
index 917644348f..da82d4f457 100644
--- a/packages/ui/src/components/card.tsx
+++ b/packages/ui/src/components/card.tsx
@@ -1,4 +1,4 @@
-import { type ComponentProps, splitProps } from "solid-js"
+import { type ComponentProps, Show, splitProps } from "solid-js"
import { Icon, type IconProps } from "./icon"
type Variant = "normal" | "error" | "warning" | "success" | "info"
@@ -80,11 +80,11 @@ export function CardTitle(props: CardTitleProps) {
[split.class ?? ""]: !!split.class,
}}
>
- {show() ? (
+
- ) : null}
+
{split.children}
)
diff --git a/packages/ui/src/components/file-icon.stories.tsx b/packages/ui/src/components/file-icon.stories.tsx
index 937328502f..e49a43be11 100644
--- a/packages/ui/src/components/file-icon.stories.tsx
+++ b/packages/ui/src/components/file-icon.stories.tsx
@@ -1,4 +1,5 @@
// @ts-nocheck
+import { For } from "solid-js"
import * as mod from "./file-icon"
import { create } from "../storybook/scaffold"
@@ -82,12 +83,14 @@ export const Samples = {
"grid-template-columns": "repeat(auto-fill, minmax(120px, 1fr))",
}}
>
- {items.map((node) => (
-