feat(assistant): админ-тумблер, расширенный FAQ, подсказки «что спросить»
- Отдельный фича-флаг 'assistant' (вместо reuse 'pet'): админ может включать/ выключать помощника в Управление → фичи, независимо от питомца. Дефолт ON. - FAQ расширен (~50 -> ~60): профиль/пароль, колоды/массовый импорт/SRS, прогресс по предмету, поиск, экзамен9, питомец, «без класса», «о чём спросить». - В «Спроси Квантика» — чипы с примерами вопросов (что можно спросить). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
{ key: 'biochem', label: 'Биохимия', desc: 'Молекулярный редактор, задачи на построение молекул и реакции', icon: 'flask-conical' },
|
||||
{ key: 'live_quiz', label: 'Живая викторина', desc: 'Синхронная викторина в реальном времени для всего класса', icon: 'radio' },
|
||||
{ key: 'classroom', label: 'Онлайн-уроки (classroom)', desc: 'Синхронные онлайн-уроки с доской и видео', icon: 'video' },
|
||||
{ key: 'assistant', label: 'Помощник «Квантик»', desc: 'Плавающий помощник: подсказки по разделам, напоминания и «Спроси Квантика»', icon: 'sparkles' },
|
||||
];
|
||||
|
||||
const FS_FEATURES = [
|
||||
|
||||
@@ -293,6 +293,9 @@
|
||||
'.asst-ans-link{display:inline-block;margin-top:4px;color:#9B5DE5;font-weight:700;font-size:.78rem;text-decoration:none;}',
|
||||
'.asst-ans-sec{font-size:.66rem;font-weight:800;color:#8a94a6;text-transform:uppercase;letter-spacing:.03em;margin:12px 0 2px;}',
|
||||
'.asst-ans-box{max-height:46vh;overflow:auto;}',
|
||||
'.asst-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:6px;}',
|
||||
'.asst-chip{border:1px solid #e2e8f0;background:#f8fafc;border-radius:99px;padding:5px 10px;font:600 .72rem Manrope,sans-serif;color:#475569;cursor:pointer;text-align:left;}',
|
||||
'.asst-chip:hover{border-color:#9B5DE5;color:#9B5DE5;}',
|
||||
'.asst-empty{font-size:.82rem;color:#8a94a6;padding:6px 0;}',
|
||||
// на мобиле сайдбар — выезжающая шторка, контент во всю ширину → к левому краю
|
||||
'@media(max-width:768px){.asst-root,.app-layout ~ .asst-root,.app-layout.sb-collapsed ~ .asst-root{left:12px;bottom:18px;}.asst-fab{width:48px;height:48px;}}',
|
||||
@@ -351,10 +354,22 @@
|
||||
}
|
||||
|
||||
/* ── «Спроси Квантика» ───────────────────────────────────────────────── */
|
||||
var SUGGESTIONS = [
|
||||
'Как вырезать кусок учебника?',
|
||||
'Как создать карточки?',
|
||||
'Как начать тест?',
|
||||
'Как сохранить доску себе?',
|
||||
'Где мои домашние задания?',
|
||||
'Как включить тёмную тему?',
|
||||
];
|
||||
function openAsk() {
|
||||
var chips = '<div class="asst-chips">' +
|
||||
SUGGESTIONS.map(function (q) { return '<button class="asst-chip" type="button">' + esc(q) + '</button>'; }).join('') +
|
||||
'</div>';
|
||||
openBubble(
|
||||
'<div class="asst-name">Спроси Квантика</div>' +
|
||||
'<input class="asst-ask-in" type="text" placeholder="Например: как сохранить кусок учебника" maxlength="200" />' +
|
||||
chips +
|
||||
'<div class="asst-ans-box"></div>', {});
|
||||
var inp = bubble.querySelector('.asst-ask-in');
|
||||
var box = bubble.querySelector('.asst-ans-box');
|
||||
@@ -362,6 +377,9 @@
|
||||
var t = null;
|
||||
inp.addEventListener('input', function () { clearTimeout(t); t = setTimeout(function () { runAsk(inp.value, box); }, 350); });
|
||||
inp.addEventListener('keydown', function (e) { if (e.key === 'Enter') { clearTimeout(t); runAsk(inp.value, box); } });
|
||||
bubble.querySelectorAll('.asst-chip').forEach(function (c) {
|
||||
c.addEventListener('click', function () { inp.value = c.textContent; runAsk(c.textContent, box); inp.focus(); });
|
||||
});
|
||||
}
|
||||
function runAsk(q, box) {
|
||||
q = (q || '').trim();
|
||||
|
||||
Reference in New Issue
Block a user