Commit Graph
490 Commits
Author SHA1 Message Date
tianma-if ef3b81aaa5 feat(editor): render LaTeX formulas (#197) 2026-08-09 15:45:11 +08:00
tianma-if 27a3470302 fix(web): refresh workspace after ZIP import (#202) 2026-08-09 13:52:53 +08:00
tianma-if 4017d09bff fix(web): preserve new memo drafts during sync 2026-08-09 11:37:09 +08:00
tianma-if b357d1d9d3 refactor: modularize cross-platform workspace flows 2026-08-09 01:12:09 +08:00
tianma-if 5cf1179e0a refactor: extract resizable image extension 2026-08-08 22:44:15 +08:00
tianma-if 30f47dac4c refactor: harden mobile editing and PWA caching 2026-08-08 21:47:55 +08:00
tianma-if 7f1af71dcb feat: use semantic merge dividers between combined notes
Insert a dedicated merge-divider node instead of a plain horizontal rule so
theme hairlines no longer wash out merge boundaries, with Markdown round-trip
markers and stronger multi-client styling.
2026-08-08 01:10:07 +08:00
tianma-if 9de7455f6b feat(web): default click-to-open links with desktop modifier preference
Open navigable hyperlinks on a plain click while editing (Evernote-style).
Add a desktop-only personal preference to require Ctrl/⌘+click instead,
stored in localStorage. Mobile always opens on tap; tips only appear when
the modifier mode is enabled. Attachment chips stay on the resource menu.
2026-08-08 00:08:14 +08:00
tianma-if ac22958302 fix(web): show open-link tip for external hyperlinks while editing
Editable notes intentionally require Ctrl/⌘+click so a plain click can
place the caret. Note links already surfaced this; extend the same tip to
all navigable editor links (except attachment chips) on hover/click.
2026-08-07 23:53:38 +08:00
tianma-if 8f1d0e9327 fix(web): make Markdown source editor fill the editor pane
The source-mode textarea used min-h-[300px] with h-full, but parents only
had min-height so percentage height collapsed to 300px and left a large
white margin. Fill the pane with a flex height chain and absolute-position
the textarea so long notes scroll inside a full-height source view.
2026-08-07 23:33:05 +08:00
tianma-if 676ae9c530 fix(editor): style default-theme external hyperlinks
External links were indistinguishable from body text under the default
theme because Tailwind preflight resets anchors. Add brand-green
underline styles for ProseMirror (Web, mobile web, Android, iOS) while
leaving note/attachment chips unchanged. Closes the styling half of #193;
Notion-style link cards remain deferred per #192.
2026-08-07 23:15:17 +08:00
tianma-if 74fef8c57b feat(editor): add insert/edit external hyperlink controls
Give the rich-text and Markdown editors a dedicated hyperlink entry
separate from note linking, with Ctrl/Cmd+K, URL normalization, and
remove-link support. Closes the discoverability gap in #192; link
preview cards remain out of scope.

Related Issue: #192
2026-08-07 14:50:56 +08:00
tianma-if 72b4791557 fix(sync): resolve memo conflicts with adopt-cloud and copy-draft actions
Give Web, desktop, and mobile the same product-baseline conflict recovery:
copy the local draft, then adopt the cloud version and rehydrate, instead of
telling users to reload while durable local conflict state remains.
2026-08-05 21:44:45 +08:00
tianma-if 4d95d834f3 feat(web): explain note save conflicts with concrete reasons
Surface revision, content, edit-session, and offline-stale conflict details in the editor, keep error metadata through the sync queue, and avoid hook-order crashes plus stale dev service workers after failed HMR.
2026-08-05 17:19:55 +08:00
tianma-if 6bebb5c1d6 feat(web): expose note delete as a direct list action
Make deleting notes one click on desktop list cards instead of buried under the more menu, while keeping the existing menu path for keyboard and right-click.
2026-08-05 16:53:03 +08:00
tianma-if 7a7f89339f fix(web): harden Mermaid preference reads against test window stubs
getStoredMermaidRenderer assumed localStorage always exists whenever window
was defined, so full bun test runs could fail after other suites stubbed a
partial window. Safe-read the storage key and clean up shared window mocks
so Verify update stays green for forked deployments.
2026-08-05 14:41:01 +08:00
tianma-if b20d43e642 fix(web): prevent stale remote detail from clobbering editor state
Stop getMemo background refresh from overwriting newer local autosaves or
queued updates, and skip redundant setContent when reopening a note so the
caret no longer jumps to the end after detail refetches.
2026-08-05 13:54:08 +08:00
tianma-if b94903fb52 feat: add instance-level S3-compatible object storage
Let instance owners route new uploads to an external OSS while keeping
existing attachments on their original store. Secrets are encrypted with
EDGE_EVER_STORAGE_ENCRYPTION_KEY before being stored in D1.
2026-08-05 12:27:10 +08:00
tianma-if 6f865125a9 fix: refine image resource controls 2026-08-04 19:55:12 +08:00
小秘书 e707bebc07 fix: allow scrolling on public share pages
Global app CSS sets html/body/#root { overflow: hidden } for the
three-pane workspace layout. Public share pages (/share/:token) inherit
this and cannot scroll when content exceeds the viewport. Restore
document scrolling when .edgeever-public-share is present via :has().
2026-08-04 14:24:05 +08:00
tianma-if 8ffd4062fa Unify editor text spacing across themes 2026-08-04 12:30:40 +08:00
tianma-if 2e3678121b feat: add shared resource actions for note media 2026-08-04 11:59:16 +08:00
tianma-if f3f61922e7 Add mobile attachment actions 2026-08-04 01:07:04 +08:00
tianma-if a31a8e263e Add attachment hover actions 2026-08-04 00:39:36 +08:00
tianma-if d8e04e3330 Improve note action menu access 2026-08-03 23:54:24 +08:00
tianma-if 5708fb472b restore compact Mermaid presentation 2026-08-03 19:33:25 +08:00
tianma-if e5169b27e1 fix Mermaid preview scroll chaining 2026-08-03 19:13:16 +08:00
tianma-if ba742a5d1d feat: add browser choices for web clipper 2026-08-03 18:37:49 +08:00
tianma-if c391a4ff97 feat: add desktop client download entry 2026-08-03 18:23:32 +08:00
tianma-if f167779a66 feat(ui): show active note sharing status (#24) 2026-08-03 18:07:46 +08:00
tianma-if 35614697a6 fix(ui): keep new note action visible (#162) 2026-08-03 17:39:41 +08:00
tianma-if 8050acad57 feat: add note link shortcut hint 2026-08-03 14:31:02 +08:00
tianma-if 008c0c6424 fix: use verified desktop clipboard writes 2026-08-03 12:49:24 +08:00
tianma-if 2ec3d50ba7 feat(web): add Modern Mint editor theme 2026-08-03 00:17:14 +08:00
tianma-if d66a7a1179 feat(web): add WeChat Classic Green editor theme 2026-08-03 00:05:50 +08:00
tianma-if 270d9ffd69 fix: clarify share link copy feedback 2026-08-02 22:40:06 +08:00
tianma-if 3a6b3e2a67 fix: render WeChat images without referrer 2026-08-02 21:36:02 +08:00
tianma-if 4d2ae5e27c feat: add revocable note sharing 2026-08-02 21:11:16 +08:00
tianma-if a8a8a37565 fix: tone down pending sync status 2026-08-02 19:15:23 +08:00
tianma-if bc8236ea00 refactor: share memo content styling 2026-08-02 13:42:03 +08:00
tianma-if 0c4cfb3e81 fix: preserve rich content when merging notes 2026-08-02 10:42:35 +08:00
tianma-if ab3c9eee3e fix: include nested notes in desktop notebooks 2026-08-02 01:33:52 +08:00
tianma-if 2b971a5395 fix merged note title selection 2026-08-02 01:12:04 +08:00
tianma-if aa01d2aa84 refactor: adopt Motion for workspace animations 2026-08-02 00:21:16 +08:00
tianma-if ce7339f688 feat: refine desktop motion feedback 2026-08-01 23:26:29 +08:00
tianma-if 4099584cfb fix desktop sync on memo selection 2026-08-01 22:37:02 +08:00
tianma-if 2253653a47 refactor: modularize cross-platform workspace architecture 2026-08-01 20:47:37 +08:00
tianma-if 7418d0b6a1 fix(desktop): preserve trash navigation and image sync 2026-08-01 20:00:34 +08:00
nzhdotmeandClaude Opus 5 4cc88ca9b3 fix(web): guard window access in the shared API request path
`request()` read `window.edgeeverDesktop` without a `typeof window`
guard, unlike every other `window` access in this file. Any environment
without a `window` global throws `ReferenceError: window is not defined`
before the request is sent.

This makes `bun test` fail on a clean checkout: three cases in
`tests/web-sync-queue.test.ts` fail because `syncQueuedChanges()` never
reaches `fetch` and records the queue item as `error` with
`lastError: "window is not defined"`.

Also give the `globalThis.window` stubs in `api.test.mjs` and
`desktop-resources.test.mjs` a `location`. Bun runs every test file in
one process, so these top-level stubs leak into later files; without a
`location`, `isLoopbackOrigin()` in `network-status.ts` throws
`TypeError: undefined is not an object (evaluating
'window.location.hostname')`. Whether this surfaces depends on test file
discovery order, so it reproduces on Linux but not on macOS.

Before: 296 pass, 3 fail. After: 299 pass, 0 fail.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-01 19:03:50 +08:00
tianma-if 05dbd1d4f9 fix: surface system info in mobile profiles 2026-08-01 11:24:30 +08:00