Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
55bd5b6
feat(utils): add publication-export module and canvas limits
t03i Mar 20, 2026
b8544dc
refactor(utils): slim export-utils to protein IDs; drop html2canvas-pro
t03i Mar 20, 2026
785b824
feat(core): publication export UI and shared WebGL canvas limits
t03i Mar 20, 2026
7ac2a13
feat(app): wire Explore demo to publication export
t03i Mar 20, 2026
3542249
docs: describe publication figure export in Explore guide
t03i Mar 20, 2026
4596dee
chore(utils): add @chenglou/pretext dependency for legend text wrap
t03i Apr 7, 2026
a369474
refactor(utils): replace FigurePresetId+LegendPlacement with FigureLa…
t03i Apr 7, 2026
24ea2c8
refactor(utils): flatten MAX_LEGEND_ITEMS to FigureLayoutId record
t03i Apr 7, 2026
df81a15
refactor(utils): layout engine takes FigureLayout, supports 'top' pla…
t03i Apr 7, 2026
a7096b2
refactor(utils): legend slice takes FigureLayoutId
t03i Apr 7, 2026
ed879f3
refactor(utils): wrapLabelToTwoLines uses @chenglou/pretext for scrip…
t03i Apr 7, 2026
3dac2e9
feat(utils): column-major legend grid renderer with overflow footer
t03i Apr 7, 2026
5591a7e
refactor(utils): publication-export façade takes layoutId; composer i…
t03i Apr 7, 2026
f9b5a6c
refactor(utils): export FigureLayoutId / FIGURE_LAYOUTS from utils ba…
t03i Apr 7, 2026
47541f1
refactor(utils): persistence migration to PublicationFigureLayoutId
t03i Apr 7, 2026
f2eb5fb
refactor(core): control-bar helpers and persistence read/write layoutId
t03i Apr 7, 2026
088c9bc
feat(core): single Layout selector replaces preset+placement controls
t03i Apr 7, 2026
f926934
feat(app): main.ts publication export takes layoutId
t03i Apr 7, 2026
a33ffb5
docs: describe four-layout publication export grammar
t03i Apr 7, 2026
34b5fd8
chore(utils): recalibrate MAX_LEGEND_ITEMS for new grid geometry
t03i Apr 7, 2026
f23cc28
Merge remote-tracking branch 'origin/main' into t03i/issue177
t03i Apr 7, 2026
4a3ab87
chore: fix formatting/ linting
t03i Apr 8, 2026
1ee6306
docs: publication export styling design spec
t03i Apr 14, 2026
7c35453
chore: update precommit script to remove test step
t03i Apr 14, 2026
d1bb0ef
chore: remove outdated query builder filter and design spec files
t03i Apr 14, 2026
756165e
feat(utils): add publication-style constants module
t03i Apr 14, 2026
841cf41
fix(utils): legend cell proportions, symbol alignment, subordinate co…
t03i Apr 14, 2026
2cac648
feat(utils): viewportAspect overrides preset scatterAspect in layout …
t03i Apr 14, 2026
e6cf7ba
feat(app): pass live viewport aspect ratio to publication export
t03i Apr 14, 2026
da3800d
feat(core): u_desatFactor uniform desaturates unselected points in pu…
t03i Apr 14, 2026
ad28ab3
feat: wire desaturateUnselected through capture pipeline to WebGL ren…
t03i Apr 14, 2026
f81e4a7
feat(utils): scatter-only layout presets with dynamic figure height
t03i Apr 14, 2026
5e3173f
fix(utils): tighten legend line spacing, increase cell gap, scale dow…
t03i Apr 14, 2026
bcc3818
feat(utils): add scatter-only IDs to PublicationFigureLayoutId
t03i Apr 14, 2026
27e9b01
feat(core): add scatter-only layout options to export UI
t03i Apr 14, 2026
ab3724a
feat: use plot area aspect ratio for publication export
t03i Apr 14, 2026
cb6b96a
docs: publication export studio spec and implementation plan
jcoludar Apr 20, 2026
dbef479
feat(scatter-plot): add annotation type definitions for indicators, i…
jcoludar Apr 20, 2026
02bde87
feat(explore): add annotation controller for indicators and insets
jcoludar Apr 20, 2026
c3b39a2
feat(scatter-plot): add right-click context menu component
jcoludar Apr 20, 2026
4e83c45
feat(scatter-plot): add indicator layer for zoom-invariant arrows
jcoludar Apr 20, 2026
14e2d78
feat(scatter-plot): wire context menu and indicator layer into render
jcoludar Apr 20, 2026
5010406
feat(explore): wire annotation controller and context menu events int…
jcoludar Apr 20, 2026
17ff9e0
feat(scatter-plot): add inset tool component with frame-snap-position…
jcoludar Apr 20, 2026
963bda7
feat(export-studio): add modal shell with preview area and controls p…
jcoludar Apr 20, 2026
25b1217
feat(explore): wire export studio into runtime, route PNG/PDF export …
jcoludar Apr 20, 2026
1030a98
feat(export-studio): add live preview with publication-export composi…
jcoludar Apr 21, 2026
b7dd1fa
feat(export-studio): add native and freeform layout presets
jcoludar Apr 21, 2026
5795350
test(e2e): add Playwright tests for context menu, indicators, and exp…
jcoludar Apr 21, 2026
fc1445c
feat(export-studio): interactive annotations, lens inset tool, style …
jcoludar Apr 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
<h2>Publication Export: Overall Workflow</h2>
<p class="subtitle">Before we dive into individual features, let's align on how these tools should fit together</p>

<p>You described 5 capabilities: <strong>preview</strong>, <strong>indicate</strong>, <strong>insets/lens</strong>, <strong>legend tuning</strong>, and <strong>column presets</strong>. The key question is: where does the user do all this?</p>

<div class="options">
<div class="option" data-choice="a" onclick="toggleSelect(this)">
<div class="letter">A</div>
<div class="content">
<h3>Export Studio (Modal Panel)</h3>
<p>Click "Export" → opens a dedicated <strong>full-screen modal</strong> with a live preview canvas on the left and controls on the right. You add indicators, position insets, adjust legend, pick layout preset — all in one place. The preview updates in real-time. When happy, hit "Download PNG/PDF".</p>
<div class="pros-cons">
<div class="pros"><h4>Pros</h4><ul>
<li>Clear separation: explore mode vs. publication mode</li>
<li>Preview matches final output exactly (WYSIWYG)</li>
<li>No clutter in the main exploration UI</li>
<li>Can show the figure at actual print dimensions</li>
</ul></div>
<div class="cons"><h4>Cons</h4><ul>
<li>Context switch — you leave the exploration view</li>
<li>If you want to change the data view, you have to go back</li>
<li>More code to build and maintain</li>
</ul></div>
</div>
</div>
</div>

<div class="option" data-choice="b" onclick="toggleSelect(this)">
<div class="letter">B</div>
<div class="content">
<h3>Inline Tools + Side Preview</h3>
<p>Tools (indicate, lens/inset) are available directly on the canvas during exploration. A <strong>collapsible side panel</strong> shows a live publication preview at chosen dimensions. You annotate on the canvas, and the preview reflects it. Toggle between explore and "pub mode" without leaving the page.</p>
<div class="pros-cons">
<div class="pros"><h4>Pros</h4><ul>
<li>Fluid — no context switch</li>
<li>Can explore data + build figure simultaneously</li>
<li>Annotations (arrows, insets) live on the canvas</li>
</ul></div>
<div class="cons"><h4>Cons</h4><ul>
<li>UI gets complex — more toolbar buttons, modes</li>
<li>Preview panel fights for screen space with legend/structure viewer</li>
<li>Harder to show true print dimensions inline</li>
</ul></div>
</div>
</div>
</div>

<div class="option" data-choice="c" onclick="toggleSelect(this)">
<div class="letter">C</div>
<div class="content">
<h3>Hybrid: Inline Annotate → Export Studio Finalize</h3>
<p>Add indicators and define inset regions <strong>directly on the canvas</strong> while exploring. When ready to export, click "Export" to open a focused <strong>Export Studio</strong> that shows the composed figure with legend, insets, and annotations already placed — you fine-tune positioning, pick layout/column preset, and download.</p>
<div class="pros-cons">
<div class="pros"><h4>Pros</h4><ul>
<li>Best of both: annotate in context, finalize in dedicated UI</li>
<li>Annotations feel natural (part of exploration)</li>
<li>Export Studio is simpler (just layout + polish)</li>
<li>Preview shows true output dimensions</li>
</ul></div>
<div class="cons"><h4>Cons</h4><ul>
<li>State must bridge between explore and studio</li>
<li>Two places where annotation state lives</li>
</ul></div>
</div>
</div>
</div>
</div>

<p style="margin-top: 1.5rem; color: #888; font-size: 0.9rem;">
<strong>My recommendation:</strong> Option C (Hybrid). Annotating while you can see your data in context is more natural. The export studio then becomes a focused "compose & export" step — not a full editing suite. It's also the most incremental to build: inline tools first, studio later.
</p>
Loading
Loading