Android edits could stay pending after pull-to-refresh because content always queued and refresh only pulled. Save online when reachable, force-flush the outbox on refresh and resume, and surface retry/error details so Web sees Android changes again.
Related Issue: #185
Unsynced notes used local temporary IDs while multi-select delete only
called the remote API, so empty notes could not be removed and failed
silently. Delete local-only notes offline, soft-delete remotes after
API success, remap multi-select IDs, and surface delete errors.
Refs #184
Detail preview now uses static HTML WebView instead of Dom TipTap. Stagger
TextInput and editor host mount/teardown for edit, Me, create, and back so
Fabric ShadowNode measure and Hermes GC no longer SIGSEGV on iPadOS 26.5.
Apple rejected 1.10.1 for SIGSEGV in RCTTextLayoutManager and malloc
corruption during WKWebView media TCC probes on iPad. Drop Reanimated
list layout transitions, deny DOM/WebView media capture by default, and
declare required iOS privacy strings with full-screen phone-on-iPad
presentation for the next review build.
Read RN blobs via FileReader instead of missing Blob.arrayBuffer, dismiss
the action sheet before SAF/share UI, surface cancel/errors, and confirm
successful folder exports.
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.
Equalize columns via container-query widths so typical tables wrap in place, and scroll only inside tableWrapper when many columns still overflow. Preview and edit share LocalTiptapEditor styles.
Use MEMO_CONTENT_STYLE (15px / 24 line-height) for the mobile editor and
preview WebView instead of a hardcoded 17px body, and size headings in rem
so notes feel consistent with desktop reading density.
Wide tables and flex attachment rows were expanding the editor shell past
the viewport, so text and cells clipped on the right. Cap the shell/content
to 100%, use content-relative table column widths instead of 100vw, and
scroll wide tables inside their wrappers.
Bind resource actions on the image control itself instead of relying on
ProseMirror handleClick after pointerdown preventDefault, which Android
WebView often suppresses. Also accept resource URLs without a /blob suffix.