-
+
+
{{ row.task.title }}
- {{ statusLabel(row.task.status) }}
-
- {{ row.task.project.name }}
-
-
- P{{ row.task.priority }}
-
-
- ≈ {{ formatMinutes(row.task.estimated_minutes) }}
-
-
- {{ recurrenceLabel(row.task) || t('taskui.recur.recurring') }}
-
-
- {{ deadlineLabel(row.task) }}
-
-
- {{ budgetBadge(row.task) }}
-
- {{ tag.name }}
-
-
- setStatus(row.task, s)"
- />
-
-
+
+
+
+
+
+
+
+
@@ -182,33 +212,55 @@
flex-direction: column;
gap: 0.4rem;
}
-.node-row {
- display: flex;
- gap: 0.4rem;
- align-items: center;
+.tree-skeleton {
+ margin-bottom: 1rem;
+}
+.node {
border: 1px solid var(--border, #333);
border-radius: 8px;
padding: 0.4rem 0.6rem;
background: var(--surface, transparent);
}
+.node-main {
+ display: flex;
+ gap: 0.4rem;
+ align-items: center;
+}
+.node-meta {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.3rem;
+ align-items: center;
+ margin-top: 0.35rem;
+ /* выравнивание по заголовку (после каретки) */
+ padding-left: 2.4rem;
+}
.leaf-space {
width: 2rem;
flex: none;
}
-.node-row .title {
+.node-main .title {
+ flex: 1;
+ min-width: 0;
font-weight: 500;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
-.node-row .title.done {
+.node-main .title.done {
text-decoration: line-through;
color: var(--text-muted, #888);
}
-.spacer {
- flex: 1;
+.node-menu {
+ flex: none;
}
-.status-select {
- min-width: 9rem;
+/* метаданные переносятся на свою строку, мобильной вёрстке ничего не грозит */
+@media (max-width: 480px) {
+ .node {
+ margin-left: 0 !important;
+ }
+ .node-meta {
+ padding-left: 0;
+ }
}
\ No newline at end of file