feat(workspace): make hoisted bullet point header editable in zoom mode
MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 58s

This commit is contained in:
sandrodach committed 2026-10-25 01:15:19 +02:00
1 parent 29d202cc4e
commit 5b5b7b1810
1 file changed
+39 -11
@@ -1391,13 +1391,26 @@ export const WorkspaceView: React.FC<WorkspaceViewProps> = ({
</div> </div>
)} )}
{/* If zoomed, show zoomed block as prominent header */} {/* If zoomed, show zoomed block as editable prominent header */}
{zoomedBlock && ( {zoomedBlock && (
<div className="pb-2 border-b border-border"> <div className="pb-2 border-b border-border flex items-center gap-2.5">
<h2 className="text-xl font-bold text-main flex items-center gap-2"> <span className="w-2.5 h-2.5 rounded-pill bg-accent flex-shrink-0" />
<span className="w-2.5 h-2.5 rounded-pill bg-accent" /> <input
<span>{zoomedBlock.content || 'Unbenannter Ast'}</span> type="text"
</h2> value={zoomedBlock.content}
onChange={(e) => updateBlock(zoomedBlock.id, { content: e.target.value })}
onKeyDown={(e) => {
if (e.key === 'Enter') {
e.preventDefault();
const zoomIdx = selectedDoc.blocks.findIndex((b) => b.id === zoomedBlock.id);
if (zoomIdx !== -1) {
insertNewBulletAfter(zoomIdx, (zoomedBlock.level || 0) + 1);
}
}
}}
placeholder="Bullet-Titel bearbeiten… (Enter für Unterpunkt)"
className="w-full bg-transparent text-xl font-bold text-main focus:outline-none placeholder:text-faint"
/>
</div> </div>
)} )}
@@ -1683,11 +1696,26 @@ export const WorkspaceView: React.FC<WorkspaceViewProps> = ({
<button <button
type="button" type="button"
onClick={() => { onClick={() => {
const lastBlock = selectedDoc.blocks[selectedDoc.blocks.length - 1]; if (zoomedBlock) {
insertNewBulletAfter( const lastDescendant = visibleBlocks[visibleBlocks.length - 1];
selectedDoc.blocks.length - 1, if (lastDescendant) {
lastBlock?.level || 0 insertNewBulletAfter(
); lastDescendant.originalIndex,
lastDescendant.block.level || (zoomedBlock.level || 0) + 1
);
} else {
const zoomIdx = selectedDoc.blocks.findIndex((b) => b.id === zoomedBlock.id);
if (zoomIdx !== -1) {
insertNewBulletAfter(zoomIdx, (zoomedBlock.level || 0) + 1);
}
}
} else {
const lastBlock = selectedDoc.blocks[selectedDoc.blocks.length - 1];
insertNewBulletAfter(
selectedDoc.blocks.length - 1,
lastBlock?.level || 0
);
}
}} }}
className="btn-action text-xs flex items-center gap-1.5" className="btn-action text-xs flex items-center gap-1.5"
> >