优化前缀缓存机制和UI,并引入一些新工具.preview

This commit is contained in:
minorQAQ committed 2026-08-19 15:16:17 +08:00
1 parent 863abe7c76
commit 6131c2563e
102 files changed
+9087 -4351

No files matched your search

+13 -74
View File
@@ -1,83 +1,22 @@
// action-bar.js -- 操作图标按钮栏:TodoList / 人机交互 / 文档变更
// 替代原来的 floating overlay 模式,改用图标按钮 toggle 面板
// action-bar.js -- 操作按钮栏(兼容层)
//
// 原实现:composer 内静态 todo/pending 按钮 + 徽章,互斥 toggle 浮窗。
// 现已迁移:todo/人机交互改为输入区上方通知条(notify-strip.js),
// 按钮由通知条左侧按钮点击后动态生成于输入区,浮窗已移除。
// 本文件保留导出签名(initActionBar / deactivateAllActionPanels / setActionBadge)
// 为空实现,避免既有 import 报错;后续可安全移除对它的引用。
import { $ } from './utils.js';
/** 当前激活的面板类型 */
let _activePanel = null;
/** 连击保护:上次切换时间戳(ms) */
let _lastToggleTime = 0;
const TOGGLE_COOLDOWN = 300;
/**
* 初始化操作按钮栏事件
* @param {object} callbacks - { onToggleTodo, onTogglePending, onToggleDoc }
*/
/** 原按钮已不存在于静态 DOM,无需绑定事件。回调保留签名以兼容调用方。 */
export function initActionBar(callbacks = {}) {
const todoBtn = $('actionTodoBtn');
const pendingBtn = $('actionPendingBtn');
const docBtn = $('actionDocBtn');
if (todoBtn) {
todoBtn.addEventListener('click', () => {
_togglePanel('todo', todoBtn, callbacks.onToggleTodo);
});
}
if (pendingBtn) {
pendingBtn.addEventListener('click', () => {
_togglePanel('pending', pendingBtn, callbacks.onTogglePending);
});
}
if (docBtn) {
docBtn.addEventListener('click', () => {
_togglePanel('doc', docBtn, callbacks.onToggleDoc);
});
}
// no-op
}
function _togglePanel(name, btn, callback) {
const now = Date.now();
if (now - _lastToggleTime < TOGGLE_COOLDOWN) return;
_lastToggleTime = now;
if (_activePanel === name) {
_deactivateAll();
if (callback) callback(false);
return;
}
_deactivateAll();
btn.classList.add('is-active');
_activePanel = name;
if (callback) callback(true);
}
/** 关闭所有面板并取消按钮激活态 */
/** 原互斥面板概念已废弃(通知条各自独立显隐)。 */
export function deactivateAllActionPanels() {
_deactivateAll();
// no-op
}
function _deactivateAll() {
['actionTodoBtn', 'actionPendingBtn', 'actionDocBtn'].forEach((id) => {
const btn = $(id);
if (btn) btn.classList.remove('is-active');
});
_activePanel = null;
}
/** 设置某个按钮的角标(红点) */
/** 徽章机制已由通知条自身的计数 chip 取代。 */
export function setActionBadge(name, show) {
const id = name === 'todo' ? 'actionTodoBtn'
: name === 'pending' ? 'actionPendingBtn'
: 'actionDocBtn';
const btn = $(id);
if (!btn) return;
const existing = btn.querySelector('.badge-dot');
if (show && !existing) {
const dot = document.createElement('span');
dot.className = 'badge-dot';
btn.style.position = 'relative';
btn.appendChild(dot);
} else if (!show && existing) {
existing.remove();
}
// no-op
}