+ {messages.length === 0 ? (
+
+
{t('common.aiAssistant.emptyState', 'How can I help you today?')}
+
+ ) : (
+ messages.map((message) => (
+
+ ))
+ )}
+
+ );
+};
+
+export default ChatContainer;
\ No newline at end of file
diff --git a/frontend/src/common/components/Chat/ChatInput.scss b/frontend/src/common/components/Chat/ChatInput.scss
new file mode 100644
index 00000000..4793cf29
--- /dev/null
+++ b/frontend/src/common/components/Chat/ChatInput.scss
@@ -0,0 +1,46 @@
+.chat-input-container {
+ padding: 0.5rem 1rem 1rem;
+ background: transparent;
+ position: relative;
+ width: 100%;
+ z-index: 2;
+
+ .input-wrapper {
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ min-height: 3.5rem;
+
+ .message-input {
+ flex: 1;
+ width: 100%;
+ background-color: var(--ion-color-light);
+ --padding-start: 1rem;
+ --padding-end: 1rem;
+ --padding-top: 0.75rem;
+ --padding-bottom: 0.75rem;
+ --placeholder-color: var(--ion-color-medium);
+ --placeholder-opacity: 0.8;
+ border-radius: 1.5rem;
+ margin-right: 3.5rem;
+ }
+
+ .send-fab {
+ right: 0;
+
+ .send-button {
+ --background: var(--ion-color-primary);
+ --ion-color-base: var(--ion-color-primary);
+ width: 3rem;
+ height: 3rem;
+ margin: 0;
+ }
+
+ ion-icon {
+ font-size: 1.25rem;
+ color: white;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/frontend/src/common/components/Chat/ChatInput.tsx b/frontend/src/common/components/Chat/ChatInput.tsx
new file mode 100644
index 00000000..6685941c
--- /dev/null
+++ b/frontend/src/common/components/Chat/ChatInput.tsx
@@ -0,0 +1,84 @@
+import { IonFab, IonFabButton, IonIcon, IonInput } from '@ionic/react';
+import { paperPlaneOutline } from 'ionicons/icons';
+import React, { useRef, useState } from 'react';
+import { useTranslation } from 'react-i18next';
+import './ChatInput.scss';
+
+interface ChatInputProps {
+ onSendMessage: (message: string) => void;
+ testid?: string;
+ className?: string;
+ placeholder?: string;
+}
+
+/**
+ * ChatInput component for entering and sending chat messages.
+ * Can be used in both modal and page contexts.
+ */
+const ChatInput: React.FC