import { STATE, removeBookmark } from '../../core/State.js'; let updateCallback = null; /** * Build the Bookmarks list card. * @param {import('../types.js').PanelContext} ctx * @returns {HTMLDivElement} */ export function buildBookmarksPanel(ctx) { const card = document.createElement('div'); card.className = 'section-card'; card.innerHTML = `
📌 Navigation Bookmarks
`; updateCallback = () => { const ul = card.querySelector('#bookmarks-list-ul'); if (!ul) return; ul.innerHTML = ''; if (!STATE.bookmarks || STATE.bookmarks.length === 0) { ul.innerHTML = `
  • No bookmarks yet. Point at a relief and press 'B' to save
  • `; return; } STATE.bookmarks.forEach(bm => { const li = document.createElement('li'); li.className = 'list-item'; li.style.cssText = 'cursor: pointer; display: flex; justify-content: space-between; align-items: center; gap: var(--spacing-xs);'; // User name, metadata badges (chunk index, dimension), and a delete icon. li.innerHTML = `
    ${bm.name} ${bm.docId}
    Chunk: ${bm.chunkIndex} Dim: ${bm.dimIndex} Val: ${bm.value.toFixed(4)}
    `; // Click handlers li.onclick = (e) => { // If clicked on delete button, do not navigate if (e.target.closest('.btn-delete')) return; // On click on the item body: Set STATE.comparisonMode = 'C', set STATE.reliefInspectDim = dimIndex, // and open the fullscreen Mode C inspector, focusing directly on the marked dimension. STATE.comparisonMode = 'C'; STATE.reliefInspectDim = bm.dimIndex; // Add the dimension to comparison dims if not already there if (!STATE.reliefInspectDims) STATE.reliefInspectDims = []; if (!STATE.reliefInspectDims.some(d => d.dim === bm.dimIndex)) { STATE.reliefInspectDims.push({ dim: bm.dimIndex, visible: true }); } // Call applyComparison if (typeof ctx.applyComparison === 'function') { ctx.applyComparison(); } else if (typeof window.applyComparison === 'function') { window.applyComparison(); } }; const btnDelete = li.querySelector('.btn-delete'); if (btnDelete) { btnDelete.onclick = (e) => { e.stopPropagation(); removeBookmark(bm.id); updateBookmarksUI(); }; } ul.appendChild(li); }); }; // Register refresh ctx.refresh.bookmarks = updateCallback; // Render initially setTimeout(() => { updateBookmarksUI(); }, 0); return card; } export function updateBookmarksUI() { if (typeof updateCallback === 'function') { updateCallback(); } }