flare / flare-ui /src /app /components /chat /chat.component.scss
ciyidogan's picture
Upload 118 files
9f79da5 verified
.chat-container {
height: 100%;
padding: 24px;
max-width: 900px;
margin: 0 auto;
}
.start-wrapper {
display: flex;
justify-content: center;
align-items: center;
min-height: 400px;
mat-card {
max-width: 500px;
width: 100%;
}
.project-select {
width: 100%;
margin-bottom: 16px;
}
.tts-checkbox {
margin-bottom: 8px;
}
.tts-hint {
color: #666;
font-size: 12px;
margin-bottom: 16px;
}
}
.locale-select {
width: 100%;
margin-bottom: 16px;
}
.chat-card {
height: calc(100vh - 200px);
display: flex;
flex-direction: column;
mat-card-header {
background-color: #f5f5f5;
padding: 16px;
.spacer {
flex: 1;
}
.tts-indicator {
color: #4caf50;
margin-right: 8px;
}
}
}
.waveform-container {
background-color: #f0f0f0;
padding: 8px;
display: flex;
justify-content: center;
align-items: center;
min-height: 116px;
canvas {
border-radius: 4px;
background-color: #f0f0f0;
}
}
.chat-history {
flex: 1;
overflow-y: auto;
padding: 16px;
background: #fafafa;
min-height: 300px;
}
.msg-row {
display: flex;
align-items: flex-start;
margin: 12px 0;
gap: 8px;
&.me {
justify-content: flex-end;
flex-direction: row-reverse;
.bubble {
background: #3f51b5;
color: white;
border-bottom-right-radius: 4px;
}
.msg-icon {
color: #3f51b5;
}
}
&.bot {
justify-content: flex-start;
.bubble {
background: #e8eaf6;
color: #000;
border-bottom-left-radius: 4px;
}
.msg-icon {
color: #7986cb;
}
}
.msg-icon {
margin-top: 4px;
}
.msg-content {
display: flex;
align-items: flex-start;
gap: 8px;
max-width: 70%;
.bubble {
padding: 12px 16px;
border-radius: 16px;
line-height: 1.5;
word-wrap: break-word;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
animation: slideIn 0.3s ease-out;
}
.play-button {
margin-top: 4px;
mat-icon {
font-size: 20px;
width: 20px;
height: 20px;
}
}
}
}
@keyframes slideIn {
from {
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.input-row {
display: flex;
padding: 16px;
gap: 12px;
align-items: flex-start;
background-color: #fff;
.flex-1 {
flex: 1;
}
.send-button {
margin-top: 8px;
}
}
// Loading state
.loading-spinner {
display: flex;
justify-content: center;
padding: 20px;
}
// Error state
.error-message {
color: #f44336;
padding: 16px;
text-align: center;
background-color: #ffebee;
border-radius: 4px;
margin: 16px;
}
// Scrollbar styling
.chat-history::-webkit-scrollbar {
width: 8px;
}
.chat-history::-webkit-scrollbar-track {
background: #f1f1f1;
}
.chat-history::-webkit-scrollbar-thumb {
background: #888;
border-radius: 4px;
}
.chat-history::-webkit-scrollbar-thumb:hover {
background: #555;
}
.stt-hint {
font-size: 12px;
color: #666;
margin-top: 4px;
font-style: italic;
}
.stt-checkbox {
margin-top: 16px;
&[disabled] {
opacity: 0.5;
}
}
.realtime-button {
margin-left: 16px;
background-color: #4caf50 !important;
&:hover {
background-color: #45a049 !important;
}
mat-icon {
margin-right: 8px;
}
}
// Real-time indicator animation
@keyframes pulse {
0% {
transform: scale(1);
opacity: 1;
}
50% {
transform: scale(1.1);
opacity: 0.7;
}
100% {
transform: scale(1);
opacity: 1;
}
}
.realtime-indicator {
color: #4caf50;
animation: pulse 2s infinite;
}
// STT/TTS selection styling
.tts-checkbox, .stt-checkbox {
display: block;
margin-bottom: 8px;
&[disabled] {
opacity: 0.5;
}
}
.tts-hint, .stt-hint {
font-size: 12px;
color: #666;
margin-bottom: 16px;
margin-left: 32px; // Align with checkbox text
font-style: italic;
}
// Highlight when STT is enabled
.stt-checkbox.mat-mdc-checkbox-checked + .stt-hint {
color: #4caf50;
font-weight: 500;
}
// Button states
.mat-mdc-raised-button[disabled] {
opacity: 0.6;
&.realtime-button {
opacity: 0.4;
}
}