core/panel/styles/Table.module.css
Untone 82111ed0f6
All checks were successful
Deploy on push / deploy (push) Successful in 7s
Squashed new RBAC
2025-07-02 22:30:21 +03:00

562 lines
9.0 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

.table-container {
width: 100%;
overflow-x: auto;
margin: 0.5rem 0;
}
.table {
width: 100%;
border-collapse: collapse;
}
.table th,
.table td {
padding: 0.75rem;
text-align: left;
border-bottom: 1px solid var(--border-color);
}
.table th {
background-color: var(--bg-color-dark);
font-weight: 600;
color: var(--text-color);
white-space: nowrap;
}
.table td {
color: var(--text-color);
}
.badge-container {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
}
.badge {
display: inline-block;
padding: 0.25rem 0.5rem;
border-radius: 4px;
font-size: 0.75rem;
line-height: 1;
white-space: nowrap;
}
.role-badge {
background-color: var(--primary-color-light);
color: var(--primary-color-dark);
}
.author-badge {
background-color: var(--success-color-light);
color: var(--success-color-dark);
}
.topic-badge {
background-color: var(--info-color-light);
color: var(--info-color-dark);
}
.actions {
display: flex;
gap: 0.5rem;
justify-content: flex-end;
}
.table-empty {
text-align: center;
padding: 2rem;
color: var(--text-color-light);
}
.table-loading {
position: relative;
min-height: 200px;
}
.table-loading::after {
content: "";
position: absolute;
top: 50%;
left: 50%;
width: 2rem;
height: 2rem;
margin: -1rem;
border: 2px solid var(--primary-color);
border-right-color: transparent;
border-radius: 50%;
animation: table-loading 0.75s linear infinite;
}
@keyframes table-loading {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
/* Базовые стили для таблицы и контейнера */
.container {
padding: 10px;
}
.header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
}
/* Стили для TableControls */
.tableControls {
margin-bottom: 15px;
}
.controlsContainer {
display: flex;
justify-content: space-between;
align-items: center;
gap: 12px;
flex-wrap: nowrap;
}
.controlsRight {
display: flex;
align-items: center;
gap: 10px;
flex-shrink: 0;
}
.searchContainer {
display: flex;
align-items: center;
flex: 1;
max-width: 400px;
}
.searchInput {
padding: 8px 12px;
border: 1px solid #ddd;
border-radius: 4px 0 0 4px;
font-size: 14px;
color: #333;
flex-grow: 1;
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
transition: border-color 0.2s ease;
border-right: none;
}
.searchInput:focus {
outline: none;
border-color: #4f46e5;
box-shadow: 0 0 0 2px rgba(79, 70, 229, 0.2);
}
.searchInput::placeholder {
color: #aaa;
}
.searchButton {
padding: 8px 16px;
background-color: #4f46e5;
color: white;
border: none;
border-radius: 0 4px 4px 0;
cursor: pointer;
font-size: 14px;
transition: background-color 0.2s ease;
white-space: nowrap;
}
.searchButton:hover {
background-color: #4338ca;
}
.table {
width: 100%;
border-collapse: collapse;
margin: 0;
font-size: 14px;
}
.table th,
.table td {
padding: 12px 15px;
text-align: left;
border-bottom: 1px solid #ddd;
}
.table th {
background-color: #f8f9fa;
font-weight: 600;
color: #333;
}
.table tbody tr {
transition: background-color 0.2s ease;
}
/* Стили для кнопок */
.button {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 0.5rem;
border: none;
border-radius: 8px;
font-weight: 500;
cursor: pointer;
transition: all 0.2s ease;
position: relative;
user-select: none;
outline: none;
padding: 0.75rem 1.5rem;
font-size: 1rem;
background-color: #f8f9fa;
color: #6c757d;
border: 1px solid #dee2e6;
}
.button:hover:not(:disabled) {
background-color: #6c757d;
color: white;
border-color: #6c757d;
transform: translateY(-1px);
}
.button:active:not(:disabled) {
transform: translateY(0);
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.1);
}
.button:disabled {
opacity: 0.6;
cursor: not-allowed;
}
.primary {
background-color: #4f46e5;
color: white;
border: none;
}
.primary:hover:not(:disabled) {
background-color: #4338ca;
}
.secondary {
background-color: #f8f9fa;
color: #6c757d;
border: 1px solid #dee2e6;
}
.secondary:hover:not(:disabled) {
background-color: #6c757d;
color: white;
}
.danger {
background-color: #dc3545;
color: white;
border: none;
}
.danger:hover:not(:disabled) {
background-color: #c82333;
}
/* Стили для действий */
.action-button {
font-size: 12px;
padding: 6px 12px;
margin: 0 2px;
}
/* Стили для предупреждающих сообщений */
.warning-text {
color: #e74c3c;
font-weight: 500;
margin: 10px 0;
font-size: 14px;
}
/* Стили для модальных действий */
.modal-actions {
display: flex;
gap: 10px;
justify-content: flex-end;
margin-top: 20px;
padding-top: 15px;
border-top: 1px solid #eee;
}
.clickable-row:hover {
background-color: #f8f9fa;
transition: background-color 0.2s ease;
}
.delete-button {
background: none;
border: none;
color: #6c757d;
font-size: 18px;
font-weight: bold;
cursor: pointer;
padding: 4px 8px;
border-radius: 4px;
transition: all 0.2s ease;
line-height: 1;
min-width: 24px;
height: 24px;
display: flex;
align-items: center;
justify-content: center;
}
.delete-button:hover {
background-color: #dc3545;
color: white;
transform: scale(1.1);
}
.delete-button:active {
transform: scale(0.95);
}
/* Стили для чекбоксов и пакетного удаления */
.checkbox-column {
width: 40px;
text-align: center;
}
.checkbox {
cursor: pointer;
width: 18px;
height: 18px;
}
.batch-actions {
display: flex;
gap: 10px;
margin-bottom: 10px;
}
.selected-count {
display: flex;
align-items: center;
font-size: 14px;
color: #666;
margin-right: 10px;
}
.select-all-container {
display: flex;
align-items: center;
margin-right: 15px;
}
.select-all-label {
margin-left: 5px;
font-size: 14px;
cursor: pointer;
}
/* Кнопка пакетного удаления */
.batch-delete-button {
background-color: #dc3545;
color: white;
border: none;
padding: 6px 12px;
border-radius: 4px;
font-size: 14px;
cursor: pointer;
display: flex;
align-items: center;
gap: 5px;
transition: background-color 0.2s;
}
.batch-delete-button:hover {
background-color: #c82333;
}
.batch-delete-button:disabled {
background-color: #e9a8ae;
cursor: not-allowed;
}
/* Новые стили для улучшенной панели поиска */
.searchSection {
background: #f8f9fa;
border: 1px solid #e9ecef;
border-radius: 8px;
padding: 16px;
margin-bottom: 20px;
}
.searchRow {
margin-bottom: 12px;
}
.fullWidthSearch {
width: 100%;
padding: 12px 16px;
border: 1px solid #ced4da;
border-radius: 6px;
font-size: 14px;
background: white;
transition:
border-color 0.2s ease,
box-shadow 0.2s ease;
}
.fullWidthSearch:focus {
outline: none;
border-color: #4f46e5;
box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.1);
}
.fullWidthSearch::placeholder {
color: #6c757d;
font-style: italic;
}
.filtersRow {
display: flex;
gap: 12px;
align-items: center;
flex-wrap: wrap;
}
.statusFilter {
padding: 8px 12px;
border: 1px solid #ced4da;
border-radius: 4px;
font-size: 14px;
background: white;
color: #495057;
cursor: pointer;
min-width: 140px;
height: 38px;
}
.statusFilter:focus {
outline: none;
border-color: #4f46e5;
}
/* Стили для сортируемых заголовков */
.sortableHeader {
cursor: pointer;
user-select: none;
transition: all 0.2s ease;
position: relative;
background-color: var(--bg-color-dark, #f8f9fa);
}
.sortableHeader:hover {
background-color: #e9ecef !important;
transform: translateY(-1px);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.sortableHeader:active {
transform: translateY(0);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
}
.headerContent {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
gap: 8px;
padding: 0.25rem 0;
}
.sortIcon {
font-size: 14px;
color: #6c757d;
margin-left: auto;
min-width: 18px;
text-align: center;
opacity: 0.6;
transition: all 0.2s ease;
font-weight: bold;
}
.sortableHeader:hover .sortIcon {
opacity: 1;
color: #495057;
transform: scale(1.1);
}
.sortableHeader[data-active="true"] .sortIcon {
color: #4f46e5;
opacity: 1;
font-weight: bold;
transform: scale(1.2);
}
.disabledHeader {
cursor: not-allowed;
opacity: 0.6;
}
.disabledHeader:hover {
background-color: var(--bg-color-dark, #f8f9fa) !important;
transform: none;
box-shadow: none;
}
/* Улучшенные адаптивные стили */
@media (max-width: 768px) {
.filtersRow {
flex-direction: column;
align-items: stretch;
}
.statusFilter {
min-width: auto;
}
.headerContent {
font-size: 12px;
}
.sortIcon {
font-size: 10px;
}
}
@media (max-width: 480px) {
.searchSection {
padding: 12px;
}
.fullWidthSearch {
padding: 10px 12px;
font-size: 13px;
}
.filtersRow {
gap: 8px;
}
}
/* Улучшения существующих стилей */
.controls {
display: flex;
gap: 12px;
align-items: center;
flex-wrap: wrap;
}
/* Стиль для ячейки с body топика */
.bodyCell {
background-color: #f8f9fa;
transition: background-color 0.2s ease;
}