summaryrefslogtreecommitdiff
path: root/packages/cli/src/ui/components/messages/GeminiMessageContent.tsx
blob: fb025231c477df95131901304fff6d5020d1de2e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/**
 * @license
 * Copyright 2025 Google LLC
 * SPDX-License-Identifier: Apache-2.0
 */

import React from 'react';
import { Box } from 'ink';
import { MarkdownRenderer } from '../../utils/MarkdownRenderer.js';

interface GeminiMessageContentProps {
  text: string;
}

/*
 * Gemini message content is a semi-hacked component. The intention is to represent a partial
 * of GeminiMessage and is only used when a response gets too long. In that instance messages
 * are split into multiple GeminiMessageContent's to enable the root <Static> component in
 * App.tsx to be as performant as humanly possible.
 */
export const GeminiMessageContent: React.FC<GeminiMessageContentProps> = ({
  text,
}) => {
  const originalPrefix = '✦ ';
  const prefixWidth = originalPrefix.length;
  const renderedBlocks = MarkdownRenderer.render(text);

  return (
    <Box flexDirection="column" paddingLeft={prefixWidth}>
      {renderedBlocks}
    </Box>
  );
};