diff --git a/VERSION b/VERSION
index 6b9255c..cf79bf9 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-6.9.2
+6.10.0
diff --git a/play-life-web/package.json b/play-life-web/package.json
index d1e2a4b..0ab6acc 100644
--- a/play-life-web/package.json
+++ b/play-life-web/package.json
@@ -1,6 +1,6 @@
{
"name": "play-life-web",
- "version": "6.9.2",
+ "version": "6.10.0",
"type": "module",
"scripts": {
"dev": "vite",
diff --git a/play-life-web/src/components/TaskForm.css b/play-life-web/src/components/TaskForm.css
index 4eb991a..233e0ec 100644
--- a/play-life-web/src/components/TaskForm.css
+++ b/play-life-web/src/components/TaskForm.css
@@ -227,23 +227,24 @@
}
.add-subtask-button {
- padding: 0.375rem;
- background: #6366f1;
- color: white;
- border: none;
+ padding: 0.5rem;
+ background: white;
+ color: #3498db;
+ border: 1px dashed #bae6fd;
border-radius: 0.375rem;
cursor: pointer;
transition: all 0.2s;
display: flex;
align-items: center;
justify-content: center;
- flex-shrink: 0;
- min-width: 2rem;
- height: 2rem;
+ width: 100%;
+ height: 2.5rem;
+ margin-top: 0.5rem;
}
.add-subtask-button:hover {
- background: #4f46e5;
+ background: #e0f2fe;
+ border-color: #3498db;
}
.subtask-form-item {
@@ -311,9 +312,9 @@
}
.remove-subtask-button {
- padding: 0.5rem;
- background: #ef4444;
- color: white;
+ padding: 0.25rem;
+ background: none;
+ color: #9ca3af;
border: none;
border-radius: 0.375rem;
cursor: pointer;
@@ -322,12 +323,12 @@
align-items: center;
justify-content: center;
flex-shrink: 0;
- min-width: 2.5rem;
- height: 2.5rem;
+ min-width: 2rem;
+ height: 2rem;
}
.remove-subtask-button:hover {
- background: #dc2626;
+ color: #ef4444;
}
.error-message {
@@ -459,13 +460,23 @@
padding: 1rem;
}
-.test-config-section > label {
+.test-config-section > label,
+.test-config-section > .subtasks-header > label {
font-size: 1rem;
font-weight: 600;
color: #3498db;
margin-bottom: 1rem !important;
}
+.test-config-section > .subtasks-header {
+ margin-bottom: 0.5rem;
+}
+
+.test-config-section .subtask-form-item {
+ background: white;
+ border-color: #bae6fd;
+}
+
.test-config-fields {
display: grid;
grid-template-columns: 1fr 1fr;
diff --git a/play-life-web/src/components/TaskForm.jsx b/play-life-web/src/components/TaskForm.jsx
index e84ede9..01b77cc 100644
--- a/play-life-web/src/components/TaskForm.jsx
+++ b/play-life-web/src/components/TaskForm.jsx
@@ -920,6 +920,148 @@ function TaskForm({ onNavigate, taskId, wishlistId, isTest: isTestFromProps = fa
/>
+ {/* Subtask-specific fields (regular task) */}
+ {!isTest && !isPurchase && !wishlistInfo && (
+
+
Настройки задачи
+
+ Прогрессия
+ setProgressionBase(e.target.value)}
+ placeholder="Базовое значение"
+ className="form-input"
+ />
+
+ Оставьте пустым, если прогрессия не используется
+
+
+
Подзадачи
+ {subtasks.map((subtask, index) => (
+
+
+
+
handleMoveSubtaskUp(index)}
+ className="move-subtask-button"
+ disabled={index === 0}
+ title="Переместить вверх"
+ >
+
+
+
+
+
handleMoveSubtaskDown(index)}
+ className="move-subtask-button"
+ disabled={index === subtasks.length - 1}
+ title="Переместить вниз"
+ >
+
+
+
+
+
+
handleSubtaskChange(index, 'name', e.target.value)}
+ placeholder="Название подзадачи"
+ className="form-input subtask-name-input"
+ />
+
handleRemoveSubtask(index)}
+ className="remove-subtask-button"
+ title="Удалить подзадачу"
+ >
+
+
+
+
+
+
+
+ ))}
+
+
+
+
+
+
+
+ )}
+
{/* Информация о связанном желании */}
{wishlistInfo && (
@@ -939,7 +1081,7 @@ function TaskForm({ onNavigate, taskId, wishlistId, isTest: isTestFromProps = fa
Общая
- {rewardPolicy === 'personal'
+ {rewardPolicy === 'personal'
? 'Задача выполняется только если вы сами завершили желание. Если другой пользователь завершит желание, задача будет удалена.'
: 'Задача выполняется если кто-либо (неважно кто) отметил желание завершённым.'}
@@ -948,29 +1090,6 @@ function TaskForm({ onNavigate, taskId, wishlistId, isTest: isTestFromProps = fa
)}
- {!isTest && !wishlistInfo && (
-
- Прогрессия
- {
- if (!wishlistInfo) {
- setProgressionBase(e.target.value)
- }
- }}
- placeholder="Базовое значение"
- className="form-input"
- disabled={wishlistInfo !== null}
- />
-
- {wishlistInfo ? 'Задачи, привязанные к желанию, не могут иметь прогрессию' : 'Оставьте пустым, если прогрессия не используется'}
-
-
- )}
-
{/* Test-specific fields */}
{isTest && (
@@ -1242,136 +1361,6 @@ function TaskForm({ onNavigate, taskId, wishlistId, isTest: isTestFromProps = fa
)}
- {!isTest && !isPurchase && (
-
-
- Подзадачи
-
-
-
-
-
-
-
- {subtasks.map((subtask, index) => (
-
-
-
-
handleMoveSubtaskUp(index)}
- className="move-subtask-button"
- disabled={index === 0}
- title="Переместить вверх"
- >
-
-
-
-
-
handleMoveSubtaskDown(index)}
- className="move-subtask-button"
- disabled={index === subtasks.length - 1}
- title="Переместить вниз"
- >
-
-
-
-
-
-
handleSubtaskChange(index, 'name', e.target.value)}
- placeholder="Название подзадачи"
- className="form-input subtask-name-input"
- />
-
handleRemoveSubtask(index)}
- className="remove-subtask-button"
- title="Удалить подзадачу"
- >
-
-
-
-
-
-
-
-
-
-
- ))}
-
- )}
-
{/* Показываем ошибку валидации только если это ошибка валидации, не ошибка действия */}
{error && (error.includes('обязательно') || error.includes('должны быть заполнены') || error.includes('нельзя одновременно')) && (
{error}