pcp-tgu-ops-ui: вкладка Редактор — план, включения, нижняя панель

- Слева выводим даты начала/конца плана и корректные счётчики
  съёмки/сброса (из plan modes, а не из заглушки-черновика).
- На таймлайне показываем реальные включения плана (read-only): убран
  фейковый «сброс на весь интервал»; вместо линии «сейчас» — маркеры
  начала и конца плана; клик по включению открывает его инфо справа.
- Включения съёмки и сброса разнесены на два ряда (верх/низ) и различаются
  цветом, слева — подписи рядов.
- Нижняя панель: активная дорожка резиновая — примыкает к низу и не
  пустует, при подъёме панели ряды расширяются; высота бара ограничена
  потолком и центрируется в ряду, чтобы узкие включения не вытягивались.
- Время в редакторе парсится/форматируется через utils/utcTime.
This commit is contained in:
Дмитрий Соловьев
2026-06-02 16:54:01 +03:00
parent fb0332a030
commit ac2220d063
7 changed files with 340 additions and 181 deletions
@@ -147,6 +147,25 @@
font-weight: 700;
}
.tgu-editor-rail__plan-dates {
display: grid;
grid-template-columns: auto 1fr;
gap: 0.2rem 0.6rem;
margin: 0;
}
.tgu-editor-rail__plan-dates dt {
color: var(--text-dim);
font-size: 0.66rem;
}
.tgu-editor-rail__plan-dates dd {
margin: 0;
color: var(--text);
font-size: 0.7rem;
text-align: right;
}
.tgu-editor-stats {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
@@ -553,26 +572,34 @@
border-left: 1px solid var(--grid);
}
.tgu-editor-timeline__now {
.tgu-editor-timeline__bound {
position: absolute;
bottom: 0;
z-index: 8;
border-left: 1.5px dashed var(--now);
border-left: 1.5px solid var(--accent);
pointer-events: none;
}
.tgu-editor-timeline__now span {
.tgu-editor-timeline__bound span {
position: absolute;
left: 0.18rem;
top: 0;
border-radius: 3px;
padding: 0 0.24rem;
background: var(--now);
background: var(--accent);
color: var(--bg-base);
font-family: var(--mono);
font-size: 0.55rem;
font-weight: 700;
text-transform: uppercase;
white-space: nowrap;
}
.tgu-editor-timeline__bound--start span {
left: 0.18rem;
}
.tgu-editor-timeline__bound--end span {
right: 0.18rem;
}
.tgu-editor-timeline__lane {
@@ -622,11 +649,15 @@
gap: 0.28rem;
height: calc(100% - 1.5rem);
overflow: hidden;
appearance: none;
border: 1px solid var(--line);
border-left: 3px solid var(--accent);
border-radius: 5px;
padding: 0.25rem 0.45rem;
cursor: grab;
color: inherit;
font: inherit;
text-align: left;
cursor: pointer;
user-select: none;
}
@@ -649,20 +680,43 @@
pointer-events: none;
}
.tgu-editor-work__resize {
/* Активная дорожка разбита на два ряда: верхний — съёмка, нижний — сброс.
Бар центрируется по своему ряду и растёт вместе с ним, но не выше потолка —
чтобы узкие включения не растягивались в непропорционально высокие полоски. */
.tgu-editor-work--shoot,
.tgu-editor-work--downlink {
height: min(56px, calc(50% - 0.55rem));
transform: translateY(-50%);
}
.tgu-editor-work--shoot {
top: 25%;
}
.tgu-editor-work--downlink {
top: 75%;
}
.tgu-editor-timeline__row-hint {
position: absolute;
top: 0;
bottom: 0;
width: 0.45rem;
cursor: ew-resize;
right: 0.65rem;
font-style: normal;
font-size: 0.56rem;
font-weight: 700;
letter-spacing: 0.02em;
text-transform: uppercase;
}
.tgu-editor-work__resize--left {
left: 0;
.tgu-editor-timeline__row-hint--shoot {
top: 25%;
transform: translateY(-50%);
color: var(--t-optical);
}
.tgu-editor-work__resize--right {
right: 0;
.tgu-editor-timeline__row-hint--downlink {
top: 75%;
transform: translateY(-50%);
color: var(--accent);
}
.tgu-editor-work__dot {