mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-19 06:45:50 +00:00
39 lines
1.2 KiB
TypeScript
39 lines
1.2 KiB
TypeScript
import * as React from 'react';
|
|
import { pathToFileURL } from 'url';
|
|
import { Box, Link, supportsHyperlinks, Text } from '@anthropic/ink';
|
|
import { getStoredImagePath } from '../../utils/imageStore.js';
|
|
import { MessageResponse } from '../MessageResponse.js';
|
|
|
|
type Props = {
|
|
imageId?: number;
|
|
addMargin?: boolean;
|
|
};
|
|
|
|
/**
|
|
* Renders an image attachment in user messages.
|
|
* Shows as a clickable link if the image is stored and terminal supports hyperlinks.
|
|
* Uses MessageResponse styling to appear connected to the message above,
|
|
* unless addMargin is true (image starts a new user turn without text).
|
|
*/
|
|
export function UserImageMessage({ imageId, addMargin }: Props): React.ReactNode {
|
|
const label = imageId ? `[Image #${imageId}]` : '[Image]';
|
|
const imagePath = imageId ? getStoredImagePath(imageId) : null;
|
|
|
|
const content =
|
|
imagePath && supportsHyperlinks() ? (
|
|
<Link url={pathToFileURL(imagePath).href}>
|
|
<Text>{label}</Text>
|
|
</Link>
|
|
) : (
|
|
<Text>{label}</Text>
|
|
);
|
|
|
|
// When this image starts a new user turn (no text before it),
|
|
// show with margin instead of the connected line style
|
|
if (addMargin) {
|
|
return <Box marginTop={1}>{content}</Box>;
|
|
}
|
|
|
|
return <MessageResponse>{content}</MessageResponse>;
|
|
}
|