35 lines
971 B
TypeScript
35 lines
971 B
TypeScript
/**
|
|
* @license
|
|
* Copyright 2025 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import React from 'react';
|
|
import { Text } from 'ink';
|
|
import Spinner from 'ink-spinner';
|
|
import type { SpinnerName } from 'cli-spinners';
|
|
import { useStreamingContext } from '../contexts/StreamingContext.js';
|
|
import { StreamingState } from '../types.js';
|
|
|
|
interface GeminiRespondingSpinnerProps {
|
|
/**
|
|
* Optional string to display when not in Responding state.
|
|
* If not provided and not Responding, renders null.
|
|
*/
|
|
nonRespondingDisplay?: string;
|
|
spinnerType?: SpinnerName;
|
|
}
|
|
|
|
export const GeminiRespondingSpinner: React.FC<
|
|
GeminiRespondingSpinnerProps
|
|
> = ({ nonRespondingDisplay, spinnerType = 'dots' }) => {
|
|
const streamingState = useStreamingContext();
|
|
|
|
if (streamingState === StreamingState.Responding) {
|
|
return <Spinner type={spinnerType} />;
|
|
} else if (nonRespondingDisplay) {
|
|
return <Text>{nonRespondingDisplay}</Text>;
|
|
}
|
|
return null;
|
|
};
|