/
h0tnanny
/
IotPlatform
Обзор
Документация
Войти
/
h0tnanny
/
IotPlatform
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
client/src/components/WorkflowEditor/ExecutionPanel.module.scss
227 строк
4 KB
h0tnanny
pop-up окно для логов, а также скрытие окна состояние выполнения
09 мар 2026, 22:59
09 мар 2026, 22:59
1a449ca
Код
Авторство
О чём код?
.panel { position: fixed; bottom: 1rem; right: 1rem; width: 400px; background: var(--bg-primary); border: 2px solid var(--border-color-focus); border-radius: 12px; box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15); z-index: 100; animation: slideUp 0.3s ease-out; // Переменные для светлой темы --bg-primary: #ffffff; --bg-secondary: #f9fafb; --text-primary: #111827; --text-secondary: #6b7280; --border-color-focus: #3b82f6; --success-color: #10b981; --warning-color: #f59e0b; // Темная тема :global(body.dark) & { --bg-primary: #1f2937; --bg-secondary: #111827; --text-primary: #f9fafb; --text-secondary: #d1d5db; --border-color-focus: #60a5fa; --success-color: #34d399; --warning-color: #fbbf24; } @keyframes slideUp { from { transform: translateY(100%); opacity: 0; } to { transform: translateY(0); opacity: 1; } } &.collapsed .header { border-bottom: none; } @media (max-width: 768px) { width: calc(100% - 2rem); right: 1rem; left: 1rem; } } .header { display: flex; justify-content: space-between; align-items: center; padding: 1rem; border-bottom: 1px solid var(--border-color-focus); cursor: pointer; user-select: none; transition: background 0.15s; &:hover { background: var(--bg-secondary); } h3 { margin: 0; font-size: 1rem; font-weight: 600; color: var(--text-primary); } } .headerLeft { display: flex; align-items: center; gap: 10px; } .headerRight { display: flex; align-items: center; gap: 8px; } .collapsedInfo { font-size: 0.75rem; color: var(--text-secondary); font-weight: 500; } .collapseBtn { display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: 6px; border: none; background: transparent; color: var(--text-secondary); cursor: pointer; transition: all 0.15s; &:hover { background: rgba(0, 0, 0, 0.08); color: var(--text-primary); } } .statusRunning, .statusCompleted { display: flex; align-items: center; gap: 0.375rem; padding: 0.25rem 0.75rem; border-radius: 6px; font-size: 0.75rem; font-weight: 600; } .statusRunning { background: var(--warning-color); color: white; animation: pulse 1.5s ease-in-out infinite; @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.7; } } } .statusCompleted { background: var(--success-color); color: white; } .content { padding: 1rem; max-height: 300px; overflow-y: auto; } .currentNode { display: flex; align-items: flex-start; gap: 0.75rem; padding: 0.75rem; background: var(--bg-secondary); border-radius: 8px; margin-bottom: 1rem; svg { flex-shrink: 0; color: var(--warning-color); margin-top: 0.125rem; } } .label { font-size: 0.75rem; font-weight: 600; color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 0.25rem; } .value { font-size: 0.875rem; font-weight: 600; color: var(--text-primary); font-family: 'Courier New', monospace; } .executedNodes { margin-bottom: 1rem; } .nodesList { display: flex; flex-direction: column; gap: 0.375rem; margin-top: 0.5rem; } .nodeItem { display: flex; align-items: center; gap: 0.5rem; padding: 0.375rem; background: var(--bg-secondary); border-radius: 6px; font-size: 0.75rem; font-family: 'Courier New', monospace; color: var(--text-primary); svg { flex-shrink: 0; color: var(--success-color); } } .executionPath { padding: 0.75rem; background: var(--bg-secondary); border-radius: 8px; .pathText { margin-top: 0.5rem; padding: 0.5rem; background: var(--bg-primary); border-radius: 6px; font-size: 0.75rem; font-family: 'Courier New', monospace; color: var(--text-primary); word-break: break-all; line-height: 1.6; } }