A batch of guide-editor improvements: a live focused-view crop/zoom preview, annotation panel and label cleanup, a richer description editor (links, quotes, newline-preserving export), substep management, snapshot/share-as-file changes, GFM-style alert callouts with PDF export fixes, export ordering fixes, a new global undo/redo that also covers step deletion, a simplified capture-session UI, and a CI trigger restriction.
Changes
Focused view: live crop/zoom preview canvas in the "Focused" controls that mirrors core/raster.jsapplyFocusedView, updating in real time as Zoom/Pan X/Pan Y sliders move; linearized the pan range and flipped Pan Y to feel natural.
Annotations: Backspace deletes the selected annotation; the settings panel now shows only the fields relevant to the selected annotation type and drops the redundant delete button; the Type dropdown, Annotations list, and toolbar use proper display labels ("Rectangle", "Highlight", etc.) instead of abbreviations.
Style-copy buttons: clarified their scope with a heading and more descriptive tooltips.
Sharing & snapshots: replaced the disabled "Local guide" label with a working "Share as file" action; removed the guide-link panel button since Save now keeps linked archives in sync; manual snapshots now prompt for a name before saving.
Substeps: added a "Make substep of…" option to the step context menu, with a hover submenu listing all steps as targets.
Description editor: insert markdown-style [text](url) links from the Link toolbar button (inline placeholder, no prompt), preserve newlines on export, toggle Quote formatting, and highlight active toolbar buttons.
Exports: switched Note/Tip/Warning/Important callouts to GitHub-Flavored Markdown alert syntax with matching quote/callout styling; fixed PDF rendering of rich text, links, special characters, and word spacing; fixed export block ordering plus stale per-step UI and cross-step block loss.
Global undo: the canvas undo/redo stack now also tracks step deletion (single or multi-select). Undo restores the deleted step(s) with their original id, content, and images at their original position (including re-parenting any substeps); redo deletes them again. Backed by a new restoreStep store method and step:restore IPC call. Added Ctrl+Z / Ctrl+Shift+Z to the keyboard shortcuts help.
Capture session UI: removed "Finish capture session" from the editor's capture menu; the top-right capture bar now toggles directly between "Start recording" and "Stop recording".
CI: the test workflow now runs only on pushes to main and on manual workflow_dispatch, instead of on every PR push.
Testing
bash tests/run_test.sh
Manual verification completed
Tests not run
Testing Notes
bash tests/run_test.sh passes end-to-end: click-capture selftest, repo structure, startup smoke, full unit suite (155/155), build/release workflow, and sample-artifacts workflow all OK.
Manually exercised the running app: deleting a step (single and multi-select) and pressing Ctrl+Z/Ctrl+Shift+Z correctly restores/re-deletes the step(s), including images and substep re-parenting, in the right order.
Manually confirmed the capture menu no longer shows "Finish capture session" and the top-right capture bar toggles "Start recording" / "Stop recording".
Screenshots or Recordings
N/A
Deployment / Rollout Notes
No special rollout steps
Documentation only
Other
Notes
None.
Checklist
Scope is limited to the selected area above.
Related docs or comments were updated if needed.
I ran bash tests/run_test.sh.
The PR references a issue number.
Any follow-up work is tracked in TODO.md or an issue.
## Improvement Area
- [ ] Documentation
- [x] Tests
- [x] Git / workflow
- [x] Other
## Issue
- Closes #
<!-- No tracked issue; this PR bundles a series of guide-editor improvements developed together on `guide_editor_changes`. -->
## Summary
A batch of guide-editor improvements: a live focused-view crop/zoom preview, annotation panel and label cleanup, a richer description editor (links, quotes, newline-preserving export), substep management, snapshot/share-as-file changes, GFM-style alert callouts with PDF export fixes, export ordering fixes, a new global undo/redo that also covers step deletion, a simplified capture-session UI, and a CI trigger restriction.
## Changes
- **Focused view**: live crop/zoom preview canvas in the "Focused" controls that mirrors `core/raster.js` `applyFocusedView`, updating in real time as Zoom/Pan X/Pan Y sliders move; linearized the pan range and flipped Pan Y to feel natural.
- **Annotations**: Backspace deletes the selected annotation; the settings panel now shows only the fields relevant to the selected annotation type and drops the redundant delete button; the Type dropdown, Annotations list, and toolbar use proper display labels ("Rectangle", "Highlight", etc.) instead of abbreviations.
- **Style-copy buttons**: clarified their scope with a heading and more descriptive tooltips.
- **Sharing & snapshots**: replaced the disabled "Local guide" label with a working "Share as file" action; removed the guide-link panel button since Save now keeps linked archives in sync; manual snapshots now prompt for a name before saving.
- **Substeps**: added a "Make substep of…" option to the step context menu, with a hover submenu listing all steps as targets.
- **Description editor**: insert markdown-style `[text](url)` links from the Link toolbar button (inline placeholder, no prompt), preserve newlines on export, toggle Quote formatting, and highlight active toolbar buttons.
- **Exports**: switched Note/Tip/Warning/Important callouts to GitHub-Flavored Markdown alert syntax with matching quote/callout styling; fixed PDF rendering of rich text, links, special characters, and word spacing; fixed export block ordering plus stale per-step UI and cross-step block loss.
- **Global undo**: the canvas undo/redo stack now also tracks step deletion (single or multi-select). Undo restores the deleted step(s) with their original id, content, and images at their original position (including re-parenting any substeps); redo deletes them again. Backed by a new `restoreStep` store method and `step:restore` IPC call. Added Ctrl+Z / Ctrl+Shift+Z to the keyboard shortcuts help.
- **Capture session UI**: removed "Finish capture session" from the editor's capture menu; the top-right capture bar now toggles directly between "Start recording" and "Stop recording".
- **CI**: the test workflow now runs only on pushes to `main` and on manual `workflow_dispatch`, instead of on every PR push.
## Testing
- [x] `bash tests/run_test.sh`
- [x] Manual verification completed
- [ ] Tests not run
### Testing Notes
- `bash tests/run_test.sh` passes end-to-end: click-capture selftest, repo structure, startup smoke, full unit suite (155/155), build/release workflow, and sample-artifacts workflow all OK.
- Manually exercised the running app: deleting a step (single and multi-select) and pressing Ctrl+Z/Ctrl+Shift+Z correctly restores/re-deletes the step(s), including images and substep re-parenting, in the right order.
- Manually confirmed the capture menu no longer shows "Finish capture session" and the top-right capture bar toggles "Start recording" / "Stop recording".
## Screenshots or Recordings
N/A
## Deployment / Rollout Notes
- [x] No special rollout steps
- [ ] Documentation only
- [ ] Other
### Notes
None.
## Checklist
- [x] Scope is limited to the selected area above.
- [x] Related docs or comments were updated if needed.
- [x] I ran `bash tests/run_test.sh`.
- [ ] The PR references a issue number.
- [ ] Any follow-up work is tracked in TODO.md or an issue.
The annotation canvas now renders as a viewport into the focused-view
crop region, matching what core/raster.js produces on export. Sliders
update the canvas live; annotation data stays in full-image-normalized
coordinates and remains correctly positioned, sized, and editable.
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
panX/panY now represent 0..1 fractions of the pannable range rather
than absolute image positions, so the slider's full travel always
covers edge-to-edge regardless of zoom level. Pan Y is inverted so
sliding right moves the view up. Updated both the editor canvas and
core/raster.js export so they stay in sync.
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Renamed "Style → step/guide" to "This step"/"Entire guide" under a
heading naming the annotation type, with hover text spelling out that
it overwrites every matching annotation's style in that scope.
The guide panel's link button was a dead disabled control for local
guides. It now shares the guide as a .sfgz archive instead, while
linked guides keep the existing archive-management dialog.
For linked guides, "Save now" now also writes back to the linked
.sfgz archive (reporting a lock conflict if another session holds it),
making the dedicated link/share button in the Guide panel redundant.
The toolbar Share button and More > Linked guide… menu still cover
one-off exports and archive management.
Clicking Snapshot now opens a named-prompt dialog (matching the app's
modal styling) and flushes the current step/guide first, so the
snapshot reflects unsaved edits and is easy to identify later.
Lets a step be re-parented under another step by entering that step's
displayed number, moving it (with its own substeps) to the end of the
target's substeps and updating the numbering accordingly.
Replaces the number-entry prompt with a scrollable side panel (so
large guides don't overflow the screen) listing every eligible step;
clicking one immediately re-parents the step. Context menus now
support submenu items in general via contextMenu().
Previously this wrapped the selection in a real <a> tag via
createLink. Now it inserts literal [text](url) markdown syntax,
using the selection as the link text or prompting for it if nothing
is selected.
- Enter now starts a new <p> (defaultParagraphSeparator) so line breaks
in the description box show up as line breaks in HTML/Markdown/Confluence
exports; htmlToMarkdown also handles <div>-separated paragraphs.
- Clicking Quote while already in a blockquote toggles back to a paragraph.
- Toolbar buttons (Bold, Italic, Bullet, Number, Quote) turn blue to
reflect the formatting state at the current cursor/selection.
Clicking Link no longer pops up "Link text"/"Link URL" dialogs; it
inserts [Text](Link) (or [selectedText](Link)) directly so the
placeholders can be edited in place.
PDF exports now preserve bold/italic/links/lists/blockquotes from the
description editor (via a new HTML block/run parser) instead of flattening
to plain text. Literal "[text](url)" links inserted by the editor's Link
button are converted to real <a> tags before rendering. Tabs and common
"smart typography" characters (smart quotes, dashes, ellipsis, bullet) are
mapped to their WinAnsiEncoding glyphs instead of rendering as "?".
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
writeDescription/emitBlocks rendered each word as a separately positioned
Tj, advancing by our approximate average-glyph-width estimate — which is
much wider than real space/character widths, producing "This is bold"
style gaps. Render each line as one continuous text object instead
(PdfBuilder.textRun), so consecutive Tj operators advance using the
viewer's real font metrics.
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- Description editor: blockquotes get a left accent line and muted color so
it's clear when typing in "quote mode" (matches the existing active Quote
toolbar button highlight).
- Editor block cards: each text block's left border is colored by its level
(info/success/warn/error) so Note/Tip/Warning/Important are distinguishable
at a glance.
- PDF/HTML/DOCX exports: callouts now get a level-specific accent color and
tinted background/shading (blue/green/amber/red), instead of all looking
identical except for the label text.
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Markdown export now emits > [!NOTE]/[!TIP]/[!WARNING]/[!IMPORTANT] for
text-block callouts, giving them the same colored/icon-labeled treatment
as the PDF/HTML/DOCX exports on renderers that support GFM alerts
(GitHub, Azure DevOps wikis, etc.), while degrading gracefully to a
plain blockquote elsewhere.
Tyler
changed title from Make the focused-view crop live in the editor canvas to Mass guide editor changes2026-06-14 04:17:17 +00:00
Exporters now interleave text/code/table blocks in the same order they
appear in the editor's Blocks panel (via a shared stepContentGroups
helper) instead of grouping by kind, so exported docs match the guide
editor's ordering.
selectStep() now also refreshes the Focused View controls and Blocks
panel (previously only done by renderAll), so switching steps no longer
leaves the previous step's blocks/focused-view sliders on screen. It
also flushes any pending edits on the outgoing step before switching, so
a later guide-wide reload (e.g. applying an annotation style to the
whole guide) can't discard unsaved text-block edits on other steps.
The annotation editor's "Type" select used the raw lowercase type id
(e.g. "rect") as its label. Add an ANNOTATION_TYPE_LABELS map so it
shows "Rectangle", "Tooltip", "Number", etc. instead.
The per-annotation list cards and the "Copy this style to every other
... annotation" text/tooltips were still showing raw type ids (rect,
arrow, etc). Use ANNOTATION_TYPE_LABELS for these too.
- The canvas Undo/Redo buttons now also undo/redo step deletion
(single or multi-select), restoring the step's data, images, and
position in the order. Backed by a new step:restore IPC call and
GuideStore.restoreStep().
- Remove "Finish capture session" from the capture menu. The
top-right recording bar in the guide editor is now the only place
to start/stop recording, with its toggle relabeled
"Start recording" / "Stop recording".
Pushes to main (direct commits and merged PRs) and manual
workflow_dispatch now trigger the test job; feature-branch pushes and
PR open/sync no longer do.
Tyler
merged commit e588f93a19 into main2026-06-15 15:37:48 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Improvement Area
Issue
Summary
A batch of guide-editor improvements: a live focused-view crop/zoom preview, annotation panel and label cleanup, a richer description editor (links, quotes, newline-preserving export), substep management, snapshot/share-as-file changes, GFM-style alert callouts with PDF export fixes, export ordering fixes, a new global undo/redo that also covers step deletion, a simplified capture-session UI, and a CI trigger restriction.
Changes
core/raster.jsapplyFocusedView, updating in real time as Zoom/Pan X/Pan Y sliders move; linearized the pan range and flipped Pan Y to feel natural.[text](url)links from the Link toolbar button (inline placeholder, no prompt), preserve newlines on export, toggle Quote formatting, and highlight active toolbar buttons.restoreStepstore method andstep:restoreIPC call. Added Ctrl+Z / Ctrl+Shift+Z to the keyboard shortcuts help.mainand on manualworkflow_dispatch, instead of on every PR push.Testing
bash tests/run_test.shTesting Notes
bash tests/run_test.shpasses end-to-end: click-capture selftest, repo structure, startup smoke, full unit suite (155/155), build/release workflow, and sample-artifacts workflow all OK.Screenshots or Recordings
N/A
Deployment / Rollout Notes
Notes
None.
Checklist
bash tests/run_test.sh.Make the focused-view crop live in the editor canvasto Mass guide editor changes