Closes #10 Reviewed-on: phoenix/textsender#23 Co-authored-by: phoenix <kundeng00@pm.me> Co-committed-by: phoenix <kundeng00@pm.me>
291 lines
4.6 KiB
CSS
291 lines
4.6 KiB
CSS
/* ViewContact.module.css */
|
|
.contactSelection {
|
|
padding: 24px;
|
|
height: 100%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
animation: fadeIn 0.3s ease-out;
|
|
}
|
|
|
|
@keyframes fadeIn {
|
|
from {
|
|
opacity: 0;
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
.selectionHeader {
|
|
margin-bottom: 24px;
|
|
}
|
|
|
|
.searchBox {
|
|
position: relative;
|
|
}
|
|
|
|
.searchInput {
|
|
width: 100%;
|
|
padding: 14px 48px 14px 16px;
|
|
border: 2px solid #e2e8f0;
|
|
border-radius: 12px;
|
|
font-size: 15px;
|
|
background: #f8fafc;
|
|
color: #1e293b;
|
|
transition: all 0.3s ease;
|
|
}
|
|
|
|
.searchInput:focus {
|
|
outline: none;
|
|
border-color: #8b5cf6;
|
|
background: white;
|
|
box-shadow: 0 0 0 4px rgba(139, 92, 246, 0.1);
|
|
}
|
|
|
|
.searchInput::placeholder {
|
|
color: #94a3b8;
|
|
}
|
|
|
|
.searchBox::after {
|
|
content: '🔍';
|
|
position: absolute;
|
|
right: 16px;
|
|
top: 50%;
|
|
transform: translateY(-50%);
|
|
font-size: 18px;
|
|
color: #94a3b8;
|
|
}
|
|
|
|
.contactsList {
|
|
flex: 1;
|
|
overflow-y: auto;
|
|
border-radius: 12px;
|
|
background: white;
|
|
border: 1px solid #e2e8f0;
|
|
}
|
|
|
|
.contactsList::-webkit-scrollbar {
|
|
width: 6px;
|
|
}
|
|
|
|
.contactsList::-webkit-scrollbar-track {
|
|
background: #f1f5f9;
|
|
border-radius: 3px;
|
|
}
|
|
|
|
.contactsList::-webkit-scrollbar-thumb {
|
|
background: #cbd5e1;
|
|
border-radius: 3px;
|
|
}
|
|
|
|
.contactsList::-webkit-scrollbar-thumb:hover {
|
|
background: #94a3b8;
|
|
}
|
|
|
|
.contactItem {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 16px;
|
|
padding: 16px 20px;
|
|
border-bottom: 1px solid #f1f5f9;
|
|
cursor: pointer;
|
|
transition: all 0.2s ease;
|
|
background: white;
|
|
}
|
|
|
|
.contactItem:hover {
|
|
background: #f8fafc;
|
|
transform: translateX(4px);
|
|
}
|
|
|
|
.contactItem.selected {
|
|
background: linear-gradient(90deg, #f0f9ff 0%, #e0f2fe 100%);
|
|
border-left: 4px solid #3b82f6;
|
|
}
|
|
|
|
.contactItem:last-child {
|
|
border-bottom: none;
|
|
}
|
|
|
|
.contactAvatar {
|
|
width: 44px;
|
|
height: 44px;
|
|
border-radius: 50%;
|
|
background: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%);
|
|
color: white;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-weight: 600;
|
|
font-size: 18px;
|
|
flex-shrink: 0;
|
|
box-shadow: 0 4px 12px rgba(139, 92, 246, 0.2);
|
|
}
|
|
|
|
.contactInfo {
|
|
flex: 1;
|
|
min-width: 0; /* Prevents overflow */
|
|
}
|
|
|
|
.contactMainInfo {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
margin-bottom: 6px;
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.contactPhone {
|
|
font-weight: 600;
|
|
color: #1e293b;
|
|
font-size: 15px;
|
|
background: #f1f5f9;
|
|
padding: 4px 10px;
|
|
border-radius: 6px;
|
|
display: inline-block;
|
|
}
|
|
|
|
.contactNickname {
|
|
color: #7c3aed;
|
|
font-size: 14px;
|
|
font-style: italic;
|
|
background: #f3f0ff;
|
|
padding: 4px 10px;
|
|
border-radius: 6px;
|
|
display: inline-block;
|
|
}
|
|
|
|
.contactName {
|
|
color: #475569;
|
|
font-size: 14px;
|
|
margin-bottom: 4px;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.selectedIndicator {
|
|
color: #3b82f6;
|
|
font-size: 12px;
|
|
font-weight: 500;
|
|
background: rgba(59, 130, 246, 0.1);
|
|
padding: 2px 8px;
|
|
border-radius: 4px;
|
|
display: inline-block;
|
|
margin-top: 4px;
|
|
animation: fadeIn 0.3s ease;
|
|
}
|
|
|
|
/* Loading state */
|
|
.loading {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
padding: 60px 20px;
|
|
text-align: center;
|
|
}
|
|
|
|
.spinner {
|
|
border: 4px solid #f1f5f9;
|
|
border-top: 4px solid #8b5cf6;
|
|
border-radius: 50%;
|
|
width: 48px;
|
|
height: 48px;
|
|
animation: spin 1s linear infinite;
|
|
margin-bottom: 16px;
|
|
}
|
|
|
|
@keyframes spin {
|
|
0% {
|
|
transform: rotate(0deg);
|
|
}
|
|
100% {
|
|
transform: rotate(360deg);
|
|
}
|
|
}
|
|
|
|
.loading p {
|
|
color: #64748b;
|
|
font-size: 16px;
|
|
}
|
|
|
|
/* Error state */
|
|
.errorState {
|
|
text-align: center;
|
|
padding: 40px 20px;
|
|
background: #fef2f2;
|
|
border-radius: 12px;
|
|
border: 1px solid #fecaca;
|
|
}
|
|
|
|
.errorState p {
|
|
color: #dc2626;
|
|
margin-bottom: 20px;
|
|
font-size: 15px;
|
|
}
|
|
|
|
.errorState button {
|
|
background: linear-gradient(135deg, #dc2626 0%, #b91c1c 100%);
|
|
color: white;
|
|
border: none;
|
|
padding: 10px 24px;
|
|
border-radius: 8px;
|
|
font-weight: 500;
|
|
cursor: pointer;
|
|
transition: all 0.3s ease;
|
|
}
|
|
|
|
.errorState button:hover {
|
|
transform: translateY(-2px);
|
|
box-shadow: 0 6px 20px rgba(220, 38, 38, 0.3);
|
|
}
|
|
|
|
/* Empty state */
|
|
.emptyState {
|
|
text-align: center;
|
|
padding: 60px 20px;
|
|
color: #64748b;
|
|
}
|
|
|
|
.emptyStateIcon {
|
|
font-size: 48px;
|
|
margin-bottom: 16px;
|
|
opacity: 0.5;
|
|
}
|
|
|
|
.emptyStateTitle {
|
|
font-size: 18px;
|
|
font-weight: 500;
|
|
color: #475569;
|
|
margin-bottom: 8px;
|
|
}
|
|
|
|
.emptyStateDescription {
|
|
font-size: 14px;
|
|
color: #94a3b8;
|
|
}
|
|
|
|
/* Responsive adjustments */
|
|
@media (max-width: 480px) {
|
|
.contactSelection {
|
|
padding: 16px;
|
|
}
|
|
|
|
.contactItem {
|
|
padding: 14px 16px;
|
|
}
|
|
|
|
.contactMainInfo {
|
|
flex-direction: column;
|
|
align-items: flex-start;
|
|
gap: 6px;
|
|
}
|
|
|
|
.contactAvatar {
|
|
width: 40px;
|
|
height: 40px;
|
|
font-size: 16px;
|
|
}
|
|
}
|