fulfillment

This commit is contained in:
33333-33333 2026-06-23 11:27:55 +09:00
commit 2e90add2e1
67 changed files with 5427 additions and 690 deletions

View file

@ -44,8 +44,12 @@
const style = document.createElement("style");
style.id = "freezeSystemStyles";
style.textContent = `
.frozen-panel { margin-top: 10px; padding: 10px; border: 1px solid rgba(82, 63, 43, 0.18); border-radius: 14px; background: rgba(244, 249, 255, 0.72); }
.frozen-panel-title { display:flex; align-items:center; justify-content:space-between; gap:8px; font-weight:700; font-size:13px; color:#4f5f70; margin-bottom:8px; }
.frozen-panel { margin-top: 10px; padding: 8px; border: 1px solid rgba(82, 63, 43, 0.18); border-radius: 14px; background: rgba(244, 249, 255, 0.72); }
.frozen-panel-title { display:flex; align-items:center; justify-content:space-between; gap:8px; width:100%; border:0; background:transparent; padding:0; font-weight:700; font-size:13px; color:#4f5f70; margin:0; cursor:pointer; text-align:left; }
.frozen-panel-title::before { content:"▸"; width:14px; color:rgba(79,95,112,.74); }
.frozen-panel:not(.collapsed) .frozen-panel-title::before { content:"▾"; }
.frozen-panel-body { margin-top:8px; }
.frozen-panel.collapsed .frozen-panel-body { display:none; }
.frozen-panel-count { font-size:12px; opacity:.72; }
.frozen-list { display:grid; grid-template-columns: 1fr; gap:7px; }
.frozen-card { display:flex; align-items:center; gap:8px; width:100%; border:1px solid rgba(72, 98, 124, .20); border-radius:12px; padding:7px; background:rgba(255,255,255,.78); cursor:grab; color:#354657; text-align:left; box-shadow: 0 2px 7px rgba(41,53,65,.06); }
@ -64,16 +68,23 @@
function ensurePanel() {
ensureStyles();
let panel = document.getElementById("frozenPanel");
if (panel) return panel;
if (panel) {
const operateBody = document.querySelector('[data-tool-category="operate"] .tool-category-body');
if (operateBody && panel.parentNode !== operateBody) operateBody.appendChild(panel);
return panel;
}
panel = document.createElement("section");
panel.id = "frozenPanel";
panel.className = "frozen-panel";
panel.classList.add("collapsed");
panel.innerHTML = `
<div class="frozen-panel-title"><span>冷凍個体</span><span id="frozenPanelCount" class="frozen-panel-count">0</span></div>
<div id="frozenList" class="frozen-list"></div>
<button class="frozen-panel-title" type="button" aria-expanded="false"><span>冷凍個体</span><span id="frozenPanelCount" class="frozen-panel-count">0</span></button>
<div class="frozen-panel-body"><div id="frozenList" class="frozen-list"></div></div>
`;
const operateBody = document.querySelector('[data-tool-category="operate"] .tool-category-body');
const anchor = global.ui?.toolPalette || document.getElementById("toolPalette");
if (anchor?.parentNode) anchor.parentNode.insertBefore(panel, anchor.nextSibling);
if (operateBody) operateBody.appendChild(panel);
else if (anchor?.parentNode) anchor.parentNode.insertBefore(panel, anchor.nextSibling);
else document.body.appendChild(panel);
return panel;
}
@ -246,6 +257,12 @@
const panel = ensurePanel();
if (panel.dataset.freezeBound !== "1") {
panel.dataset.freezeBound = "1";
panel.addEventListener("click", (e) => {
const title = e.target.closest(".frozen-panel-title");
if (!title) return;
const collapsed = !panel.classList.toggle("collapsed");
title.setAttribute("aria-expanded", collapsed ? "true" : "false");
});
panel.addEventListener("dragstart", (e) => {
const card = e.target.closest(".frozen-card[data-frozen-id]");
if (!card) return;