diff options
| author | Jacob Richman <[email protected]> | 2025-05-28 18:17:19 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-05-28 11:17:19 -0700 |
| commit | 05a49702d888bee912682f78c3993d98f7f9d628 (patch) | |
| tree | ea200621adc0d83ba8251dc86cf8aac4a3a41c8f /packages/cli/src/ui/components/GeminiRespondingSpinner.tsx | |
| parent | 98dcf43214da5f03055213f02f999b047a5f00d4 (diff) | |
Refactor: Add GeminiRespondingSpinner to make use of streamingState idiomatic (#583)
Diffstat (limited to 'packages/cli/src/ui/components/GeminiRespondingSpinner.tsx')
| -rw-r--r-- | packages/cli/src/ui/components/GeminiRespondingSpinner.tsx | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/packages/cli/src/ui/components/GeminiRespondingSpinner.tsx b/packages/cli/src/ui/components/GeminiRespondingSpinner.tsx new file mode 100644 index 00000000..57f5dd30 --- /dev/null +++ b/packages/cli/src/ui/components/GeminiRespondingSpinner.tsx @@ -0,0 +1,34 @@ +/** + * @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; +}; |
