diff --git a/frontend/src/components/ChatInterface.tsx b/frontend/src/components/ChatInterface.tsx
index 7338e90..f4c85ac 100644
--- a/frontend/src/components/ChatInterface.tsx
+++ b/frontend/src/components/ChatInterface.tsx
@@ -801,6 +801,231 @@ export function ChatInterface() {
);
};
+ const ChatInputPanel = ({
+ menuSide,
+ menuOffsetClass,
+ recordingWaveKeyPrefix,
+ showDisclaimer = false,
+ }: {
+ menuSide: "top" | "bottom";
+ menuOffsetClass: string;
+ recordingWaveKeyPrefix: string;
+ showDisclaimer?: boolean;
+ }) => {
+ return (
+
+
+ {renderFileCard()}
+ {renderActiveSelections()}
+
+
+
+
+
+
+
+
+
+
+
+ {t('knowledgeBase')}
+
+
+ {availableKnowledgeBases.length > 0 ? (
+ availableKnowledgeBases.map((kb) => (
+
+ ))
+ ) : (
+
+
+
{t('noKnowledgeBases')}
+
+ )}
+ {selectedKnowledgeBaseId ? (
+
+
+
+ ) : null}
+
+
+
+
+
+
+ {t('dataSource')}
+
+
+ {availableDataSources.length > 0 ? (
+ availableDataSources.map((ds) => (
+
+ ))
+ ) : (
+
+
+
{t('noDataSources')}
+
+ )}
+ {selectedDataSource ? (
+
+
+
+ ) : null}
+
+
+
+
+
+
+
+ {isRecording ? (
+ <>
+
+
+
+
+ {Array.from({ length: 30 }).map((_, idx) => {
+ const dynamic = Math.abs(Math.sin(Date.now() / 180 + idx * 0.85));
+ const height = Math.max(4, Math.round((4 + dynamic * 18) * (0.45 + recordingLevel)));
+ return (
+
+ );
+ })}
+
+
+
+
+
+
+
+ >
+ ) : (
+ <>
+
+
setSlashQuery(null)}
+ />
+
+
+
+
+
+ >
+ )}
+
+
+ {showDisclaimer && (
+
+
+ {t('dataClawDisclaimer')}
+
+
+ )}
+
+ );
+ };
+
useEffect(() => {
const fetchSkills = async () => {
try {
@@ -1156,218 +1381,14 @@ export function ChatInterface() {
{/* Input Area */}
-
-
-
- {renderFileCard()}
- {renderActiveSelections()}
-
-
-
-
-
-
-
-
- {/* Left Column: Knowledge Base */}
-
-
-
-
- {t('knowledgeBase')}
-
-
- {availableKnowledgeBases.length > 0 ? (
- availableKnowledgeBases.map((kb) => (
-
- ))
- ) : (
-
-
-
{t('noKnowledgeBases')}
-
- )}
- {selectedKnowledgeBaseId ? (
-
-
-
- ) : null}
-
-
-
-
- {/* Right Column: Data Source */}
-
-
-
-
- {t('dataSource')}
-
-
- {availableDataSources.length > 0 ? (
- availableDataSources.map((ds) => (
-
- ))
- ) : (
-
-
-
{t('noDataSources')}
-
- )}
- {selectedDataSource && (
-
-
-
- )}
-
-
-
-
-
-
-
-
- {isRecording ? (
- <>
-
-
-
-
- {Array.from({ length: 30 }).map((_, idx) => {
- const dynamic = Math.abs(Math.sin(Date.now() / 180 + idx * 0.85));
- const height = Math.max(4, Math.round((4 + dynamic * 18) * (0.45 + recordingLevel)));
- return (
-
- );
- })}
-
-
-
-
-
-
-
- >
- ) : (
- <>
-
-
setSlashQuery(null)}
- />
-
-
-
-
-
- >
- )}
-
-
-
- {/* Common Questions or suggestions could go here */}
-
+
+
+
+ {/* Common Questions or suggestions could go here */}
@@ -1615,214 +1636,12 @@ export function ChatInterface() {
{/* Floating Input for Chat State */}
{messages.length > 0 && (
-
-
- {renderFileCard()}
- {renderActiveSelections()}
-
-
-
-
-
-
-
-
-
-
-
- {t('knowledgeBase')}
-
-
- {availableKnowledgeBases.length > 0 ? (
- availableKnowledgeBases.map((kb) => (
-
- ))
- ) : (
-
-
-
{t('noKnowledgeBases')}
-
- )}
- {selectedKnowledgeBaseId ? (
-
-
-
- ) : null}
-
-
-
-
-
-
- {t('dataSource')}
-
-
- {availableDataSources.length > 0 ? (
- availableDataSources.map((ds) => (
-
- ))
- ) : (
-
-
-
{t('noDataSources')}
-
- )}
- {selectedDataSource ? (
-
-
-
- ) : null}
-
-
-
-
-
-
-
- {isRecording ? (
- <>
-
-
-
-
- {Array.from({ length: 30 }).map((_, idx) => {
- const dynamic = Math.abs(Math.sin(Date.now() / 180 + idx * 0.85));
- const height = Math.max(4, Math.round((4 + dynamic * 18) * (0.45 + recordingLevel)));
- return (
-
- );
- })}
-
-
-
-
-
-
-
- >
- ) : (
- <>
-
-
setSlashQuery(null)}
- />
-
-
-
-
-
- >
- )}
-
-
-
-
- {t('dataClawDisclaimer')}
-
-
-
+
)}