feat: add download + copy file content to context menus and editor
FlowDeck CI / lint (push) Successful in 45s
FlowDeck CI / test (push) Successful in 4m8s
FlowDeck CI / docker (push) Successful in 38s

- Add /api/pages/{id}/download and /api/pages/{id}/file-content endpoints
- Add Download + Copy content to shared context menu (_ctx_menu.html)
- Wire handlers in local-workspace and library context menus
- Add Download + Copy content to editor '...' menu for file pages
- Multi-block selection copy/cut/paste with Ctrl+C/X/V shortcuts
- Align page title with blocks start (CSS pseudo-element offset)
This commit is contained in:
2026-09-12 12:53:17 -04:00
parent 3bb17eb984
commit 7a6c66a609
9 changed files with 297 additions and 9 deletions
+26
View File
@@ -2213,6 +2213,7 @@ button.breadcrumb-current { max-width: 260px; }
display: flex;
align-items: flex-start;
gap: 8px;
position: relative;
}
.page-icon-emoji {
@@ -2296,6 +2297,24 @@ button.breadcrumb-current { max-width: 260px; }
border-radius: 3px;
fill: var(--text-dim);
}
/* Align page title content with blocks (accounting for drag handle offset) */
.page-title-block::before {
content: '';
position: absolute;
left: -40px;
width: 24px;
height: 24px;
}
.page-title-block .page-icon-emoji {
margin-left: 8px;
}
.page-title-block .page-title-input {
padding-left: 4px;
}
.block-handle.visible {
opacity: 1;
}
@@ -3550,6 +3569,7 @@ button.breadcrumb-current { max-width: 260px; }
.page-cover-area { padding: 32px 32px 8px; }
.blocks-container { padding: 8px 32px 80px; }
.block-handle { left: -32px; }
.page-title-block::before { left: -32px; }
.page-title-input { font-size: 32px; }
.kanban-column { min-width: 240px; max-width: 300px; }
@@ -3629,6 +3649,9 @@ button.breadcrumb-current { max-width: 260px; }
.blocks-container { padding: 8px 16px 96px; }
.block-handle { display: none; }
.block-actions { display: none; }
.page-title-block::before { display: none; }
.page-title-block .page-icon-emoji { margin-left: 0; }
.page-title-block .page-title-input { padding-left: 0; }
.editor-statusbar { left: 0; }
/* ── View Tabs ── */
@@ -3738,6 +3761,9 @@ button.breadcrumb-current { max-width: 260px; }
.page-title-input { font-size: 22px; }
.blocks-container { padding: 6px 12px 80px; }
.page-icon-emoji { font-size: 28px; }
.page-title-block::before { display: none; }
.page-title-block .page-icon-emoji { margin-left: 0; }
.page-title-block .page-title-input { padding-left: 0; }
.kanban-column {
min-width: 92vw;