Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 3 additions & 0 deletions .work/todo.jsonl
Original file line number Diff line number Diff line change
Expand Up @@ -305,3 +305,6 @@
{"actor":"unknown","ev":"01M1PMWVS4Y84XCEVRHZ9QTNW1","item":"01M1PMS8ZBVHA4KDG1W0AX5CHM","op":"update","set":{"status":"in_progress"},"ts":"2026-09-04T16:44:11Z"}
{"actor":"unknown","ev":"01M1PMXW2DFK433MTPNSCT0SDK","item":"01M1PMS8ZBVHA4KDG1W0AX5CHM","op":"close","set":{"resolution":"v0.6.4 changelog, Cargo.toml / Cargo.lock / tauri.conf bump, roadmap snapshot, index plane re-rendered. Tag and GitHub release after merge.","status":"done"},"ts":"2026-09-04T16:44:45Z"}
{"actor":"richardhightower","ev":"01M1QN6CE0YV9CWFNA4BF0E0ZS","git":"95b9bae","item":"01M1QN6CE0P31CYJZFG7K9D3K7","op":"create","set":{"body":"Three releases shipped a frontend drag fix that could not work. Tauri 2 gates startDragging() behind core:window:allow-start-dragging, and core:default does not include it: core:window:default is 26 read-only queries plus allow-internal-toggle-maximize. Every drag call was rejected by the access control list and swallowed by an empty catch, so nothing was logged. The OS title bar that used to provide dragging for free went away when titleBarStyle became Overlay. Fix: grant allow-start-dragging and allow-toggle-maximize in the capability file, replace the empty catches with a one-time warning, and unit-test the grants.","discovered_during":"01M1MVB300KXXJPZ2XACH7A64K","kind":"bug","level":"task","milestone":"v0.6.4","priority":"P1","status":"todo","title":"Grant the window capability the overlay title bar needs for dragging","unplanned":true},"ts":"2026-09-05T02:08:38Z"}
{"actor":"unknown","ev":"01M23KYWDKPNTDM17MN8V6PX5B","item":"01M23KYWDKJPH89J1M3TSRM0DB","op":"create","set":{"body":"The format toolbar and the app header ride along when a long note scrolls. Lock the shell to the window, keep the toolbar (and find/Ask AI chrome) above the document, and scroll only the editor surface. Header and sidebar stay put. E2E: a tall note scrolls; toolbar and header Y do not change; window.scrollY stays 0.","discovered_during":"01M1MVB2ZZGP7FHW2TX6CNA6BE","kind":"bug","level":"task","milestone":"v0.6.5","priority":"P1","status":"todo","title":"Keep the format toolbar fixed while the note scrolls","unplanned":true},"ts":"2026-09-09T17:37:57Z"}
{"actor":"unknown","ev":"01M23KYYGPJ964ZQHPNMHYQHWN","item":"01M23KYWDKJPH89J1M3TSRM0DB","op":"update","set":{"status":"in_progress"},"ts":"2026-09-09T17:37:59Z"}
{"actor":"unknown","ev":"01M23M9Q6BPQ24HEJ2G8FRSZX3","item":"01M23KYWDKJPH89J1M3TSRM0DB","op":"close","set":{"resolution":"Shell locked to the viewport. Header and format toolbar stay put; only .editor-zoom scrolls. E2E asserts Y and window.scrollY.","status":"done"},"ts":"2026-09-09T17:43:52Z"}
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@ All notable changes to Motion are recorded here. Dates are UTC.

## Unreleased

### Fixed

- **Format toolbar stays put.** A long note used to grow the window, so the
header and the Bold/Italic toolbar scrolled away with the document. The
shell is locked to the viewport; only the editor surface scrolls.

## 0.6.4 — 2026-09-04

Editor fills the window; zoom scales notes not chrome; icon toolbar; header drag
Expand Down
21 changes: 21 additions & 0 deletions docs/.index/_graph.json
Original file line number Diff line number Diff line change
Expand Up @@ -905,6 +905,16 @@
"to": "release/v0.6.4",
"type": "targets"
},
{
"from": "item/01M23KYWDKJPH89J1M3TSRM0DB",
"to": "pr/60",
"type": "lands-in"
},
{
"from": "item/01M23KYWDKJPH89J1M3TSRM0DB",
"to": "release/v0.6.5",
"type": "targets"
},
{
"from": "plan/2026-07-26-motion-next-phase",
"to": "item/01KYFZ6RBH4J746JDANTQKYVSN",
Expand Down Expand Up @@ -2114,6 +2124,11 @@
"status": "todo",
"title": "Grant the window capability the overlay title bar needs for dragging"
},
"item/01M23KYWDKJPH89J1M3TSRM0DB": {
"doc_type": "item",
"status": "done",
"title": "Keep the format toolbar fixed while the note scrolls"
},
"plan/2026-07-26-motion-next-phase": {
"doc_type": "plan",
"source": "docs/plans/2026-07-26-motion-next-phase.md",
Expand Down Expand Up @@ -2201,6 +2216,9 @@
"pr/58": {
"doc_type": "pr"
},
"pr/60": {
"doc_type": "pr"
},
"release/v0.1.0": {
"doc_type": "release"
},
Expand All @@ -2222,6 +2240,9 @@
"release/v0.6.4": {
"doc_type": "release"
},
"release/v0.6.5": {
"doc_type": "release"
},
"roadmap": {
"doc_type": "roadmap",
"source": "docs/roadmap.md",
Expand Down
4 changes: 2 additions & 2 deletions docs/.index/_inventory.json
Original file line number Diff line number Diff line change
Expand Up @@ -207,10 +207,10 @@
{
"canonical_key": "roadmap",
"doc_type": "roadmap",
"generated_at": "2026-09-05T02:08:38Z",
"generated_at": "2026-09-09T17:43:52Z",
"slug": "roadmap",
"source": "docs/roadmap.md",
"source_hash": "c2f509fd",
"source_hash": "e089aeff",
"title": "Roadmap",
"truth_state": "current",
"wiki": "https://github.com/SpillwaveSolutions/motion/wiki/Roadmap",
Expand Down
2 changes: 2 additions & 0 deletions docs/.index/item/01M23KYWDKJPH89J1M3TSRM0DB.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
code:
- {pr: 60}
36 changes: 33 additions & 3 deletions docs/.index/publish-manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
"frozen": false,
"page_name": "Index-Traceability",
"render": "as-is",
"render_hash": "50595a2f3ed5",
"render_hash": "eeeace256963",
"source": "docs/.index/rendered/traceability.md",
"title": "Traceability Index",
"truth_state": "current",
Expand Down Expand Up @@ -220,6 +220,16 @@
"truth_state": "not tracked",
"wiki_key": "pr/58"
},
{
"frozen": false,
"page_name": "PR-60",
"render": "as-is",
"render_hash": "0fdc515063ea",
"source": "docs/.index/rendered/prs/60.md",
"title": "PR #60",
"truth_state": "not tracked",
"wiki_key": "pr/60"
},
{
"frozen": false,
"page_name": "Release-v0.1.0+dogfood",
Expand Down Expand Up @@ -290,6 +300,16 @@
"truth_state": "shipped",
"wiki_key": "release/v0.6.4"
},
{
"frozen": false,
"page_name": "Release-v0.6.5",
"render": "as-is",
"render_hash": "50c218fec82e",
"source": "docs/.index/rendered/releases/v0.6.5.md",
"title": "Release v0.6.5",
"truth_state": "shipped",
"wiki_key": "release/v0.6.5"
},
{
"frozen": false,
"page_name": "Ticket-01KYDZ4A5HN1AZ7BN8Q2WV3XVN",
Expand Down Expand Up @@ -1580,6 +1600,16 @@
"truth_state": "open",
"wiki_key": "item/01M1QN6CE0P31CYJZFG7K9D3K7"
},
{
"frozen": false,
"page_name": "Ticket-01M23KYWDKJPH89J1M3TSRM0DB",
"render": "as-is",
"render_hash": "431ad35d7186",
"source": "docs/.index/rendered/tickets/01M23KYWDKJPH89J1M3TSRM0DB.md",
"title": "Keep the format toolbar fixed while the note scrolls",
"truth_state": "done",
"wiki_key": "item/01M23KYWDKJPH89J1M3TSRM0DB"
},
{
"banner": "> **Current** \u2014 this is the living version; regenerated at 2026-07-29T23:00:00Z. Historical snapshots are linked from [[Index-Releases]].",
"frozen": false,
Expand Down Expand Up @@ -1669,11 +1699,11 @@
"wiki_key": "plan/2026-09-03-editor-surface-zoom-layout-icons"
},
{
"banner": "> **Current** \u2014 this is the living version; regenerated at 2026-09-05T02:08:38Z. Historical snapshots are linked from [[Index-Releases]].",
"banner": "> **Current** \u2014 this is the living version; regenerated at 2026-09-09T17:43:52Z. Historical snapshots are linked from [[Index-Releases]].",
"frozen": false,
"page_name": "Roadmap",
"render": "doc+banner",
"render_hash": "02417f3f7604",
"render_hash": "c0a79b7afa57",
"source": "docs/roadmap.md",
"title": "Roadmap",
"truth_state": "current",
Expand Down
13 changes: 13 additions & 0 deletions docs/.index/rendered/prs/60.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# PR #60

`pr/60` · status: **not tracked**

Changed files: not tracked. Test/Review status: not tracked (see the deferred PR live-metadata sync item).

## Linked Tickets

- [[Ticket-01M23KYWDKJPH89J1M3TSRM0DB]] Keep the format toolbar fixed while the note scrolls — The format toolbar and the app header ride along when a long note scrolls.

## Related Releases

- [[Release-v0.6.5]]
17 changes: 17 additions & 0 deletions docs/.index/rendered/releases/v0.6.5.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Release v0.6.5

`release/v0.6.5` · **shipped**

1 item(s) shipped.

## Change Log

- [[Ticket-01M23KYWDKJPH89J1M3TSRM0DB]] Keep the format toolbar fixed while the note scrolls — The format toolbar and the app header ride along when a long note scrolls.

## Release Tree

- [[Ticket-01M23KYWDKJPH89J1M3TSRM0DB]] Keep the format toolbar fixed while the note scrolls (task)

## Related PRs

- [[PR-60]]
13 changes: 13 additions & 0 deletions docs/.index/rendered/tickets/01M23KYWDKJPH89J1M3TSRM0DB.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Keep the format toolbar fixed while the note scrolls

`01M23KYWDKJPH89J1M3TSRM0DB` · task/bug · **done**

The format toolbar and the app header ride along when a long note scrolls.

## Linked PRs

- [[PR-60]]

## Release

- [[Release-v0.6.5]]
5 changes: 5 additions & 0 deletions docs/.index/rendered/traceability.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@

_The evidence chain: plan → item → ticket → code → release, forward and backward. Generated from `docs/.index/_graph.json`; do not edit._

### Keep the format toolbar fixed while the note scrolls
`01M23KYWDKJPH89J1M3TSRM0DB` · status: done
- lands-in: pr/60
- targets: release/v0.6.5

### Grant the window capability the overlay title bar needs for dragging
`01M1QN6CE0P31CYJZFG7K9D3K7` · status: todo
- targets: release/v0.6.4
Expand Down
4 changes: 2 additions & 2 deletions docs/roadmap.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
wiki_key: roadmap
doc_type: roadmap
truth_state: current
source_hash: c2f509fd
generated_at: 2026-09-05T02:08:38Z
source_hash: e089aeff
generated_at: 2026-09-09T17:43:52Z
---

<!-- GENERATED by worklog roadmap-render. DO NOT EDIT. -->
Expand Down
38 changes: 38 additions & 0 deletions e2e/layout.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -102,3 +102,41 @@ test("mousedown on the logo does not start a text selection", async ({ page }) =
const selected = await page.evaluate(() => window.getSelection()?.toString() ?? "");
expect(selected).toBe("");
});

test("scrolling a long note leaves the header and format toolbar in place", async ({ page }) => {
await gotoApp(page);
await page.setViewportSize({ width: 1200, height: 560 });
const editor = page.locator(".ProseMirror");
await expect(editor).toBeVisible();
await editor.click();
await page.keyboard.insertText(
Array.from({ length: 48 }, (_, i) => `Pad line ${i} so the note is taller than the window.`).join("\n\n"),
);

const header = page.locator(".app-header");
const toolbar = page.locator(".editor-toolbar");
const surface = page.getByTestId("editor-scroll");
await expect(toolbar).toBeVisible();
await expect(surface).toBeVisible();

const headerBefore = await header.boundingBox();
const toolbarBefore = await toolbar.boundingBox();
expect(headerBefore).toBeTruthy();
expect(toolbarBefore).toBeTruthy();

await expect
.poll(async () => surface.evaluate((el) => el.scrollHeight - el.clientHeight))
.toBeGreaterThan(200);

await surface.evaluate((el) => {
el.scrollTop = 360;
});

await expect.poll(async () => surface.evaluate((el) => el.scrollTop)).toBeGreaterThan(200);

const headerAfter = await header.boundingBox();
const toolbarAfter = await toolbar.boundingBox();
expect(headerAfter!.y).toBeCloseTo(headerBefore!.y, 0);
expect(toolbarAfter!.y).toBeCloseTo(toolbarBefore!.y, 0);
expect(await page.evaluate(() => window.scrollY)).toBe(0);
});
8 changes: 4 additions & 4 deletions src/components/Editor/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -994,7 +994,7 @@ function Editor({
{toolbar}
{findBar}
{askAiPanel}
<div className="editor-zoom">
<div className="editor-zoom" data-testid="editor-scroll">
<MarkdownSource
textareaRef={markdownRef}
value={rawMarkdown}
Expand Down Expand Up @@ -1024,7 +1024,7 @@ function Editor({
className="split-panes"
style={{ gridTemplateColumns: `${left} 6px ${right}` }}
>
<div className="editor-zoom">
<div className="editor-zoom" data-testid="editor-scroll">
<EditorContent editor={editor} />
</div>
<PaneResizeHandle
Expand All @@ -1046,7 +1046,7 @@ function Editor({
return true;
}}
/>
<div className="editor-zoom">
<div className="editor-zoom" data-testid="editor-scroll">
<MarkdownPreview value={rawMarkdown} />
</div>
</div>
Expand All @@ -1061,7 +1061,7 @@ function Editor({
{askAiPanel}
{slashMenuPopup}
{askAiBubble}
<div className="editor-zoom">
<div className="editor-zoom" data-testid="editor-scroll">
<EditorContent editor={editor} />
</div>
</div>
Expand Down
Loading
Loading