feat(web): My Wave button, mood picker and endless wave playback (M4)
- WaveButton: TypeScript port of the prototype's canvas animation (orb and liquid), breathing at rest, pulsing to the track's BPM and energy in the cover palette, following the cursor, pressing with a spring; reduced motion and hidden tabs slow or stop it - home: the wave in the centre with activity and mood chips; changing them while playing rebuilds the upcoming tracks without stopping - player wave mode: asks for the next batch when two tracks are left, sends complete / skip / early skip / like / dislike as feedback and refreshes the queue right after a reaction or an early skip - tracks expose bpm, energy and loudness once analysed; library page shows analysis progress and 7-day wave metrics; wave style setting Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
3908814cda
commit
eaedd1fc62
24 files changed
+1193
-244
No files matched your search
@@ -148,6 +148,16 @@
|
||||
"sources": "Хранилища",
|
||||
"error_files": "Файлы с ошибками",
|
||||
"reindex": "Переиндексировать поиск",
|
||||
"reindex_started": "Переиндексация запущена"
|
||||
"reindex_started": "Переиндексация запущена",
|
||||
"analysis": "Аудиоанализ",
|
||||
"analysis_progress": "Проанализировано {{done}} из {{total}}",
|
||||
"analysis_failed": "Не удалось проанализировать: {{count}}",
|
||||
"analyzer": "Версия анализатора: {{ver}}",
|
||||
"wave": "Моя волна за 7 дней",
|
||||
"wave_served": "Выдано треков",
|
||||
"wave_sessions": "Сессий",
|
||||
"wave_listen": "Дослушано ≥ 50%",
|
||||
"wave_early_skip": "Ранние скипы",
|
||||
"wave_likes": "Лайков на 100"
|
||||
}
|
||||
}
|
||||
@@ -89,7 +89,10 @@
|
||||
"session_current": "Это устройство",
|
||||
"session_last_used": "Активность: {{date}}",
|
||||
"session_end": "Завершить",
|
||||
"logout_all": "Выйти на всех устройствах"
|
||||
"logout_all": "Выйти на всех устройствах",
|
||||
"wave_variant": "Вид волны",
|
||||
"wave_orb": "Сфера",
|
||||
"wave_liquid": "Жидкая"
|
||||
},
|
||||
"form": {
|
||||
"show_password": "Показать пароль",
|
||||
@@ -155,5 +158,31 @@
|
||||
"empty_dislikes": "Треки с дизлайком не попадут в волну. Пока таких нет",
|
||||
"play_all": "Слушать всё",
|
||||
"more": "Показать ещё"
|
||||
},
|
||||
"wave": {
|
||||
"title": "Моя волна",
|
||||
"for_you": "Под ваш вкус",
|
||||
"start": "Запустить «Мою волну»",
|
||||
"pause": "Пауза «Моей волны»",
|
||||
"activity_label": "Занятие",
|
||||
"mood_label": "Настроение",
|
||||
"reset": "Сбросить",
|
||||
"empty": "В библиотеке пока нечего предложить",
|
||||
"fallback": "Рекомендации временно упрощены",
|
||||
"activities": {
|
||||
"running": "Бегаю",
|
||||
"workout": "Тренировка",
|
||||
"waking_up": "Просыпаюсь",
|
||||
"focus": "Работаю",
|
||||
"commute": "В дороге",
|
||||
"chill": "Отдыхаю",
|
||||
"sleep": "Засыпаю"
|
||||
},
|
||||
"moods": {
|
||||
"energetic": "Энергичное",
|
||||
"happy": "Весёлое",
|
||||
"calm": "Спокойное",
|
||||
"sad": "Грустное"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -45,7 +45,9 @@
|
||||
"name_invalid": "Название — от 1 до {{max}} символов",
|
||||
"scan_interval_invalid": "Интервал — не меньше {{min}} минут",
|
||||
"source_type_invalid": "Неизвестный тип хранилища",
|
||||
"query_empty": "Введите запрос"
|
||||
"query_empty": "Введите запрос",
|
||||
"wave_activity_invalid": "Неизвестное занятие",
|
||||
"wave_mood_invalid": "Неизвестное настроение"
|
||||
},
|
||||
"users": {
|
||||
"not_found": "Пользователь не найден",
|
||||
@@ -66,5 +68,8 @@
|
||||
"link_invalid": "Ссылка устарела — обновите страницу",
|
||||
"track_unavailable": "Трек недоступен",
|
||||
"transcode_failed": "Не удалось подготовить трек"
|
||||
},
|
||||
"wave": {
|
||||
"session_not_found": "Сессия волны завершена"
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user