core/panel/styles/Form.module.css
2025-07-01 01:20:48 +03:00

1175 lines
18 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.

.form {
display: flex;
flex-direction: column;
gap: 1.5rem;
}
.form-group {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.form-group label {
font-weight: 500;
color: var(--text-color);
font-size: 0.875rem;
}
.form-group input,
.form-group select,
.form-group textarea {
padding: 0.5rem;
border: 1px solid var(--border-color);
border-radius: 4px;
font-size: 1rem;
background-color: var(--bg-color);
color: var(--text-color);
width: 100%;
}
.form-group input:focus,
.form-group select:focus,
.form-group textarea:focus {
outline: none;
border-color: var(--primary-color);
box-shadow: 0 0 0 2px var(--primary-color-light);
}
.form-group input:disabled,
.form-group select:disabled,
.form-group textarea:disabled {
background-color: var(--disabled-bg);
cursor: not-allowed;
}
.form-group textarea {
min-height: 100px;
resize: vertical;
}
.form-group select {
appearance: none;
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236B7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3E%3C/svg%3E");
background-position: right 0.5rem center;
background-repeat: no-repeat;
background-size: 1.5em 1.5em;
padding-right: 2.5rem;
}
.form-group-horizontal {
flex-direction: row;
align-items: center;
gap: 1rem;
}
.form-group-horizontal label {
flex: 0 0 200px;
}
.form-actions {
display: flex;
justify-content: flex-end;
gap: 1rem;
margin-top: 1rem;
}
.form-error {
color: var(--error-color);
font-size: 0.875rem;
margin-top: 0.25rem;
}
.form-help {
color: var(--text-color-light);
font-size: 0.875rem;
margin-top: 0.25rem;
}
.form-section {
border-bottom: 1px solid var(--border-color);
padding-bottom: 1.5rem;
}
.form-section:last-child {
border-bottom: none;
padding-bottom: 0;
}
.form-section-title {
font-size: 1.125rem;
font-weight: 600;
color: var(--text-color);
margin-bottom: 1rem;
}
.form-section-description {
color: var(--text-color-light);
font-size: 0.875rem;
margin-bottom: 1rem;
}
.checkbox-group {
display: flex;
align-items: center;
gap: 0.5rem;
}
.checkbox-group input[type="checkbox"] {
width: auto;
}
.radio-group {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.radio-option {
display: flex;
align-items: center;
gap: 0.5rem;
}
.radio-option input[type="radio"] {
width: auto;
}
.input-group {
display: flex;
gap: 0.5rem;
}
.input-group input {
flex: 1;
}
.input-group button {
flex: 0 0 auto;
}
/* Placeholder для contenteditable div */
.input[contenteditable="true"]:empty::before {
content: attr(data-placeholder);
color: #6c757d;
font-style: italic;
pointer-events: none;
}
.input[contenteditable="true"]:focus:empty::before {
content: "";
}
/* Стили для улучшенной формы редактирования пользователя */
.section {
margin-bottom: 25px;
}
.field {
margin-bottom: 20px;
}
.label {
display: block;
font-weight: 600;
color: #333;
margin-bottom: 8px;
font-size: 14px;
}
.input {
width: 100%;
padding: 12px 16px;
border: 2px solid #e1e5e9;
border-radius: 8px;
font-size: 14px;
background-color: #fff;
color: #333;
transition: all 0.2s ease;
}
.input:focus {
outline: none;
border-color: #007bff;
box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.1);
}
.input:disabled {
background-color: #f8f9fa;
border-color: #e9ecef;
color: #6c757d;
cursor: not-allowed;
}
.inputError {
border-color: #dc3545;
box-shadow: 0 0 0 3px rgba(220, 53, 69, 0.1);
}
.fieldError {
color: #dc3545;
font-size: 12px;
margin-top: 6px;
font-weight: 500;
}
.fieldHint {
color: #6c757d;
font-size: 12px;
margin-top: 6px;
line-height: 1.4;
}
.error {
background-color: #f8d7da;
color: #721c24;
padding: 12px 16px;
border-radius: 8px;
border: 1px solid #f5c6cb;
font-size: 14px;
}
/* Стили для грида ролей */
.rolesGrid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 12px;
}
.roleCard {
border: 2px solid #e1e5e9;
border-radius: 8px;
padding: 16px;
cursor: pointer;
transition: all 0.2s ease;
background-color: #fff;
display: block;
}
.roleCard:hover {
border-color: #007bff;
background-color: #f8f9ff;
}
.roleCardSelected {
border-color: #007bff;
background-color: #e7f1ff;
}
.roleHeader {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 8px;
}
.roleName {
font-weight: 600;
color: #333;
font-size: 14px;
}
.roleCheckmark {
width: 20px;
height: 20px;
border-radius: 50%;
background-color: #007bff;
color: white;
display: flex;
align-items: center;
justify-content: center;
font-size: 12px;
font-weight: bold;
opacity: 0;
transition: opacity 0.2s ease;
}
.roleCardSelected .roleCheckmark {
opacity: 1;
}
.roleDescription {
color: #6c757d;
font-size: 12px;
line-height: 1.4;
}
/* Широкое модальное окно для переменных среды */
.modal-wide {
width: 100%;
max-width: 800px;
}
/* Улучшенные стили для форм */
.form-label {
display: block;
margin-bottom: 8px;
font-weight: 600;
color: #374151;
}
.form-label-info {
font-size: 0.875rem;
font-weight: 400;
color: #6b7280;
margin-left: 8px;
}
.form-input {
width: 100%;
padding: 12px;
border: 2px solid #e5e7eb;
border-radius: 8px;
font-size: 14px;
transition: border-color 0.2s ease;
}
.form-input:focus {
outline: none;
border-color: #3b82f6;
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
}
.form-input-disabled {
width: 100%;
padding: 12px;
border: 2px solid #e5e7eb;
border-radius: 8px;
font-size: 14px;
background-color: #f9fafb;
color: #6b7280;
cursor: not-allowed;
}
/* Контейнер для textarea с кнопками */
.textarea-container {
position: relative;
}
.form-textarea {
width: 100%;
padding: 12px;
border: 2px solid #e5e7eb;
border-radius: 8px;
font-size: 14px;
font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', monospace;
line-height: 1.5;
resize: vertical;
min-height: 120px;
transition: border-color 0.2s ease;
}
.form-textarea:focus {
outline: none;
border-color: #3b82f6;
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
}
.textarea-actions {
display: flex;
gap: 8px;
margin-top: 8px;
justify-content: flex-end;
}
/* Контейнер для превью кода */
.code-preview-container {
border: 2px solid #e5e7eb;
border-radius: 8px;
overflow: hidden;
background: #1e1e1e;
max-height: 400px;
}
.code-preview-container pre {
margin: 0;
padding: 16px;
background: transparent;
overflow-x: auto;
}
/* Улучшенная справка */
.form-help {
margin-top: 8px;
padding: 12px;
background-color: #f0f9ff;
border: 1px solid #bae6fd;
border-radius: 6px;
font-size: 14px;
color: #0c4a6e;
}
.form-help strong {
color: #075985;
}
/* Ошибки */
.form-error {
margin-top: 8px;
padding: 12px;
background-color: #fef2f2;
border: 1px solid #fecaca;
border-radius: 6px;
font-size: 14px;
color: #dc2626;
}
/* Действия формы */
.form-actions {
display: flex;
gap: 12px;
margin-top: 24px;
justify-content: flex-end;
padding-top: 16px;
border-top: 1px solid #e5e7eb;
}
/* Адаптивность для модального окна */
@media (max-width: 768px) {
.modal-wide {
max-width: 95vw;
margin: 0 auto;
}
.textarea-actions {
flex-direction: column;
}
.form-actions {
flex-direction: column-reverse;
}
}
/* Стили для модального окна слияния топиков */
.checkboxList {
max-height: 300px;
overflow-y: auto;
border: 1px solid #e9ecef;
border-radius: 6px;
padding: 8px;
background: #fafafa;
}
.checkboxItem {
display: flex;
align-items: flex-start;
gap: 12px;
padding: 10px;
margin-bottom: 8px;
border-radius: 4px;
cursor: pointer;
transition: background-color 0.2s ease;
}
.checkboxItem:hover {
background-color: #f0f0f0;
}
.checkboxItem:last-child {
margin-bottom: 0;
}
.checkboxContent {
flex: 1;
}
.topicTitle {
font-weight: 600;
color: #333;
margin-bottom: 4px;
}
.topicInfo {
font-size: 13px;
color: #666;
line-height: 1.4;
}
.optionTitle {
font-weight: 500;
color: #333;
margin-bottom: 2px;
}
.optionDescription {
font-size: 13px;
color: #666;
line-height: 1.4;
}
.summary {
background: #f8f9fa;
border: 1px solid #e9ecef;
border-radius: 6px;
padding: 16px;
margin: 16px 0;
}
.summary h4 {
margin: 0 0 12px 0;
color: #333;
font-size: 14px;
font-weight: 600;
}
.summary ul {
margin: 0;
padding-left: 20px;
}
.summary li {
margin-bottom: 8px;
font-size: 13px;
line-height: 1.4;
}
.summary ul ul {
margin-top: 4px;
}
.summary ul ul li {
margin-bottom: 4px;
color: #666;
}
.section {
margin-bottom: 24px;
}
.sectionTitle {
font-size: 16px;
font-weight: 600;
color: #333;
margin: 0 0 8px 0;
}
.description {
font-size: 14px;
color: #666;
margin: 0 0 12px 0;
line-height: 1.4;
}
/* Стили для управления иерархией топиков */
.hierarchyContainer {
max-width: 800px;
margin: 0 auto;
padding: 20px;
}
.instructions {
background: #f8f9fa;
border: 1px solid #e9ecef;
border-radius: 6px;
padding: 16px;
margin-bottom: 20px;
}
.instructions h4 {
margin: 0 0 12px 0;
color: #495057;
font-size: 14px;
font-weight: 600;
}
.instructions ul {
margin: 0;
padding-left: 20px;
}
.instructions li {
margin-bottom: 4px;
font-size: 13px;
color: #6c757d;
}
.hierarchyTree {
border: 1px solid #e9ecef;
border-radius: 6px;
background: white;
max-height: 400px;
overflow-y: auto;
padding: 8px;
}
.treeNode {
margin-bottom: 2px;
}
.treeItem {
padding: 8px 12px;
border-radius: 4px;
cursor: grab;
transition: all 0.2s ease;
user-select: none;
}
.treeItem:hover {
background-color: #f8f9fa;
}
.treeItem:active {
cursor: grabbing;
}
.dropTarget {
background-color: #e3f2fd !important;
border: 2px dashed #2196f3 !important;
}
.dragHandle {
color: #999;
font-weight: bold;
cursor: grab;
padding: 0 4px;
}
.dragHandle:hover {
color: #666;
}
.topicTitle {
font-weight: 500;
color: #333;
flex: 1;
}
.topicId {
font-size: 12px;
color: #999;
background: #f8f9fa;
padding: 2px 6px;
border-radius: 3px;
}
.treeChildren {
margin-left: 0;
}
.changesSummary {
background: #fff3cd;
border: 1px solid #ffeaa7;
border-radius: 6px;
padding: 16px;
margin: 20px 0;
}
.changesSummary h4 {
margin: 0 0 12px 0;
color: #856404;
font-size: 14px;
}
.changeItem {
padding: 6px 0;
border-bottom: 1px solid #ffeaa7;
font-size: 13px;
color: #856404;
}
.changeItem:last-child {
border-bottom: none;
}
.dropZone {
margin: 20px 0;
}
.rootDropZone {
border: 2px dashed #6c757d;
border-radius: 8px;
padding: 20px;
text-align: center;
color: #6c757d;
background: #f8f9fa;
transition: all 0.2s ease;
cursor: pointer;
}
.rootDropZone:hover {
border-color: #007bff;
color: #007bff;
background: #e3f2fd;
}
/* Дополнительные стили для режима большой модалки */
.modal.large {
max-width: 900px;
width: 90vw;
}
.modal.large .modalContent {
min-height: 600px;
}
/* Адаптивность для мобильных */
@media (max-width: 768px) {
.hierarchyContainer {
padding: 12px;
}
.treeItem {
padding: 6px 8px;
font-size: 14px;
}
.dragHandle {
display: none;
}
.topicTitle {
font-size: 14px;
}
.rootDropZone {
padding: 16px;
font-size: 14px;
}
}
/* Стили для выбора родительской темы */
.parentSelectorContainer {
max-width: 600px;
margin: 0 auto;
padding: 20px;
}
.searchSection {
margin-bottom: 20px;
}
.searchInput {
width: 100%;
padding: 8px 12px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 14px;
}
.currentSelection {
background: #f8f9fa;
border: 1px solid #e9ecef;
border-radius: 6px;
padding: 16px;
margin-bottom: 20px;
}
.currentParent {
margin-top: 8px;
}
.noParent {
color: #6c757d;
font-style: italic;
}
.parentPath {
font-weight: 500;
color: #495057;
}
.parentOptions {
margin-bottom: 20px;
}
.parentsList {
max-height: 300px;
overflow-y: auto;
border: 1px solid #e9ecef;
border-radius: 6px;
background: white;
}
.parentOption {
display: flex;
align-items: flex-start;
padding: 12px;
border-bottom: 1px solid #f1f3f4;
transition: background-color 0.2s ease;
}
.parentOption:last-child {
border-bottom: none;
}
.parentOption:hover {
background-color: #f8f9fa;
}
.parentOption input[type="radio"] {
margin-right: 12px;
margin-top: 4px;
}
.parentOptionLabel {
flex: 1;
cursor: pointer;
display: block;
}
.parentDescription {
margin-top: 4px;
font-size: 12px;
color: #6c757d;
display: flex;
gap: 12px;
align-items: center;
}
.topicId {
background: #e9ecef;
padding: 2px 6px;
border-radius: 3px;
font-weight: 500;
}
.topicSlug {
font-family: monospace;
background: #f8f9fa;
padding: 2px 6px;
border-radius: 3px;
}
.noResults {
padding: 20px;
text-align: center;
color: #6c757d;
font-style: italic;
}
/* Мобильная адаптивность */
@media (max-width: 768px) {
.parentSelectorContainer {
padding: 12px;
}
.parentOption {
padding: 8px;
}
.parentDescription {
flex-direction: column;
align-items: flex-start;
gap: 4px;
}
}
/* Стили для массового редактирования родителей */
.bulkParentContainer {
max-width: 800px;
margin: 0 auto;
padding: 20px;
}
.errorMessage {
background: #f8d7da;
color: #721c24;
border: 1px solid #f5c6cb;
border-radius: 6px;
padding: 12px;
margin-bottom: 20px;
font-size: 14px;
}
.selectedTopicsPreview {
background: #f8f9fa;
border: 1px solid #e9ecef;
border-radius: 6px;
padding: 16px;
margin-bottom: 20px;
}
.selectedTopicsPreview h4 {
margin: 0 0 12px 0;
color: #495057;
font-size: 14px;
}
.topicsList {
max-height: 150px;
overflow-y: auto;
}
.topicPreviewItem {
padding: 8px 12px;
border: 1px solid #e9ecef;
border-radius: 4px;
margin-bottom: 8px;
background: white;
display: flex;
align-items: center;
gap: 12px;
}
.topicPreviewItem:last-child {
margin-bottom: 0;
}
.currentPath {
font-size: 12px;
color: #6c757d;
margin-top: 4px;
width: 100%;
}
.actionSelection {
margin-bottom: 20px;
}
.actionSelection h4 {
margin: 0 0 12px 0;
color: #495057;
font-size: 14px;
}
.actionOptions {
display: flex;
flex-direction: column;
gap: 12px;
}
.actionOption {
display: flex;
align-items: flex-start;
padding: 12px;
border: 1px solid #e9ecef;
border-radius: 6px;
background: white;
transition: background-color 0.2s ease;
}
.actionOption:hover {
background-color: #f8f9fa;
}
.actionOption input[type="radio"] {
margin-right: 12px;
margin-top: 4px;
}
.actionLabel {
flex: 1;
cursor: pointer;
display: block;
}
.actionDescription {
margin-top: 4px;
font-size: 13px;
color: #6c757d;
}
.parentSelection {
margin-bottom: 20px;
}
.parentSelection h4 {
margin: 0 0 12px 0;
color: #495057;
font-size: 14px;
}
.previewSection {
background: #fff3cd;
border: 1px solid #ffeaa7;
border-radius: 6px;
padding: 16px;
margin-bottom: 20px;
}
.previewSection h4 {
margin: 0 0 12px 0;
color: #856404;
font-size: 14px;
}
.previewChanges {
max-height: 200px;
overflow-y: auto;
}
.previewItem {
padding: 8px 0;
border-bottom: 1px solid #ffeaa7;
}
.previewItem:last-child {
border-bottom: none;
}
.previewChange {
margin-top: 4px;
font-size: 13px;
display: flex;
align-items: center;
gap: 8px;
flex-wrap: wrap;
}
.beforeState {
color: #6c757d;
}
.arrow {
color: #007bff;
font-weight: bold;
}
.afterState {
color: #28a745;
font-weight: 500;
}
/* Адаптивность для мобильных */
@media (max-width: 768px) {
.bulkParentContainer {
padding: 12px;
}
.actionOptions {
gap: 8px;
}
.actionOption {
padding: 8px;
}
.topicPreviewItem {
flex-direction: column;
align-items: flex-start;
gap: 4px;
}
.previewChange {
flex-direction: column;
align-items: flex-start;
gap: 4px;
}
}
/* Новые стили для кликабельного интерфейса */
.selectedForMove {
border-color: #007bff !important;
background-color: #e3f2fd !important;
box-shadow: 0 0 8px rgba(0, 123, 255, 0.3);
}
.moveTarget {
border-color: #28a745 !important;
background-color: #d4edda !important;
}
.selectedIcon, .targetIcon, .clickIcon {
font-size: 16px;
margin-right: 4px;
}
.selectedIcon {
animation: pulse 1s infinite;
}
.targetIcon {
animation: bounce 0.8s infinite;
}
.clickIcon {
opacity: 0.6;
}
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.5; }
}
@keyframes bounce {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-2px); }
}
.searchSection {
margin: 20px 0;
padding: 15px;
background: #f8f9fa;
border-radius: 8px;
border: 1px solid #ddd;
}
.searchInput {
width: 100%;
padding: 8px 12px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 14px;
margin-bottom: 8px;
}
.searchResult {
color: #28a745;
font-size: 14px;
padding: 4px 0;
}
.searchNoResult {
color: #dc3545;
font-size: 14px;
padding: 4px 0;
}
.actionZone {
margin: 20px 0;
padding: 20px;
background: #e3f2fd;
border: 2px solid #007bff;
border-radius: 8px;
}
.selectedTopicInfo h4 {
margin: 0 0 10px 0;
color: #007bff;
font-size: 16px;
}
.selectedTopicDisplay {
background: white;
padding: 10px;
border-radius: 4px;
margin-bottom: 15px;
font-weight: 500;
}
.actionButtons {
display: flex;
gap: 10px;
flex-wrap: wrap;
}
.rootButton {
background: #28a745;
color: white;
border: none;
padding: 8px 16px;
border-radius: 4px;
cursor: pointer;
font-size: 14px;
transition: background 0.2s ease;
}
.rootButton:hover {
background: #218838;
}
.cancelButton {
background: #6c757d;
color: white;
border: none;
padding: 8px 16px;
border-radius: 4px;
cursor: pointer;
font-size: 14px;
transition: background 0.2s ease;
}
.cancelButton:hover {
background: #5a6268;
}