Beta to main#507
Merged
Merged
Conversation
Main to beta merge
Main to beta
…locks in it Fixes #265
The saved-content snapshot used for dirty-checking was never stripped of uid attrs, while the live editor snapshot was — so any file with real uid values in its blocks (all importer-generated files) or a node that gets its uid backfilled on load (e.g. the title heading) compared unequal from the moment it opened, and could never clear. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
VoidenEditor's content prop is typed as string but docTab.content can legitimately be null (e.g. a fresh tab racing the file read, or a large file still being written) — files:read returns null on ENOENT. The sibling CodeEditor branch two lines below already guards this with `?? ""`; VoidenEditor was missing the same fallback, so `content.length` threw "Cannot read properties of null" on mount. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Every Find keypress is intercepted at the OS input level (before-input-event in apps/electron main process) so the real browser keydown never reaches the renderer — it's replayed via a synthetic KeyboardEvent instead. That synthetic event was missing `code: 'KeyF'` (matchesShortcut() matches on event.code) and set both metaKey and ctrlKey simultaneously (matchesShortcut() compares an exact modifier bitmask, so Meta+Ctrl together never equals the platform's single expected modifier). Both bugs made the replayed event fail to match in every editor that relies on it. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Covers hierarchical request inheritance, preview tabs, plugin update notifications, cURL extenders, and the editor reliability fixes shipped since v2.1.1 (Cmd+F, backspace, huge-line freeze, scroll flicker, GraphQL false-dirty indicator, null-content crash, and more). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The custom Backspace handler for table cells/registered blocks always deleted exactly 1 position backward, correct for plain text but not for atom nodes — fileLink has content: "inline*", so even empty it occupies 2 positions (open + close boundary). Deleting only 1 left the node stuck. Now deletes the full nodeSize when the node before the cursor is an atom.
The check that strips a user-set Content-Type header for multipart requests (so the real FormData boundary is used instead) only matched the exact literal string "multipart/form-data" — no trimming, no case-insensitivity, no tolerance for a stray/stale boundary param. Any deviation (leading space from curl-style header parsing, different casing, a leftover boundary copied from elsewhere) left the wrong header in place alongside the auto-generated multipart body, causing a boundary mismatch that breaks server-side parsing. Now trims and matches case-insensitively with startsWith to catch these cases.
…#491) * feat: add documentation links and helper tooltips to block headers with system browser integration * fix: ensure proper pointer interaction for Whats-New modal and overlay elements * Beta to main merge for 2.2.1 release (#492) * dev : [Feature] Import blocks that don't do anything Fixes #321 * dev : Linked blocks are not visible when linking a file with linked blocks in it Fixes #265 * dev : Suggestion: Add Description Column for Headers, Params, and Options Fixes #261 * dev : fixed app update direct quit prevention and also edit environment change * dev : cursor IDE font aliasing * dev : [Bug] Display Platform-Specific Keyboard Shortcut Fixes #484 * dev : [Bug] Prevent UI Flickering While Scrolling in the Editor Fixes #483 * dev : [Feature] Hierarchical Inheritance for Request Configuration Fixes #469 * swv : pending tabs features * dev : extend curl * dev : Feature Request - Improve discoverability of toggleable headers Fixes #130 * dev : [Enhancement] Notify users when plug-in updates are available Fixes #486 * dev : Electron App Ignores macOS Custom Keyboard Remapping * dev : core changes for voiden editor and code editor * fix: enable request history by default * fix: request history never recorded — read file path from editor.storage.source * dev : seamless navigation arrow up/down on tippy * dev : backspace fix * dev : setting page right panel and plugin update available tab change on left panel * dev : huge line handle in code editor * fix: false unsaved-changes indicator on generator-written .void files The saved-content snapshot used for dirty-checking was never stripped of uid attrs, while the live editor snapshot was — so any file with real uid values in its blocks (all importer-generated files) or a node that gets its uid backfilled on load (e.g. the title heading) compared unequal from the moment it opened, and could never clear. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix: crash opening a .void tab when content is null VoidenEditor's content prop is typed as string but docTab.content can legitimately be null (e.g. a fresh tab racing the file read, or a large file still being written) — files:read returns null on ENOENT. The sibling CodeEditor branch two lines below already guards this with `?? ""`; VoidenEditor was missing the same fallback, so `content.length` threw "Cannot read properties of null" on mount. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix: Cmd/Ctrl+F not working in Voiden editor or code editor Every Find keypress is intercepted at the OS input level (before-input-event in apps/electron main process) so the real browser keydown never reaches the renderer — it's replayed via a synthetic KeyboardEvent instead. That synthetic event was missing `code: 'KeyF'` (matchesShortcut() matches on event.code) and set both metaKey and ctrlKey simultaneously (matchesShortcut() compares an exact modifier bitmask, so Meta+Ctrl together never equals the platform's single expected modifier). Both bugs made the replayed event fail to match in every editor that relies on it. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * docs: add changelog for v2.2.0 Covers hierarchical request inheritance, preview tabs, plugin update notifications, cURL extenders, and the editor reliability fixes shipped since v2.1.1 (Cmd+F, backspace, huge-line freeze, scroll flicker, GraphQL false-dirty indicator, null-content crash, and more). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix: quit no longer silently saves over unsaved tabs * docs: fold quit-confirmation fix into unreleased v2.2.0 changelog * fix: atom nodes (fileLink) undeletable via Backspace in table cells The custom Backspace handler for table cells/registered blocks always deleted exactly 1 position backward, correct for plain text but not for atom nodes — fileLink has content: "inline*", so even empty it occupies 2 positions (open + close boundary). Deleting only 1 left the node stuck. Now deletes the full nodeSize when the node before the cursor is an atom. * fix: harden multipart/form-data content-type header stripping The check that strips a user-set Content-Type header for multipart requests (so the real FormData boundary is used instead) only matched the exact literal string "multipart/form-data" — no trimming, no case-insensitivity, no tolerance for a stray/stale boundary param. Any deviation (leading space from curl-style header parsing, different casing, a leftover boundary copied from elsewhere) left the wrong header in place alongside the auto-generated multipart body, causing a boundary mismatch that breaks server-side parsing. Now trims and matches case-insensitively with startsWith to catch these cases. * fix: CSV file uploads sent with wrong Content-Type in multipart body getFileMimeType()'s hardcoded extension table didn't include .csv, so any CSV attached via multipart-table or a binary body part got sent as application/octet-stream instead of text/csv. APIs that validate the uploaded file's declared content type (e.g. "please provide a valid CSV file") rejected it even though the file bytes were correct — Postman sends the real text/csv type via the OS MIME database, so the same request worked there. Added csv/tsv to the table. * fix: false unsaved-changes indicator from structural JSON asymmetries stripUidAttrs compared a live ProseMirror doc against raw parsed-from-disk JSON, but the two representations differ structurally in ways that don't reflect a real edit: - A live node materializes every schema-declared attr, including ones defaulting to undefined (e.g. gqlquery's importedFrom), while parsed JSON only has keys actually present in the source — now dropped before comparing. - A live node always serializes an empty content array as content:[], while parsed JSON for content-less nodes omits the key entirely — now normalized to omitted on both sides. - gqlvariables.body gets regenerated in query-declaration key order by the GraphQL plugin, which can differ from the source file's original key order — now canonicalized (sorted keys) before comparing so a key-order-only difference never shows as dirty. * fix: add RefreshCw to the dev-mode lucide-react plugin build shim Needed for voiden-graphql's new Resync button icon — this shim list is a separate copy from each plugin's own build.mjs, used specifically by the centralized dev build/watch script. * dev : small bug fixes * dev : mime type change and curl parser and changelog update * dev : updated changelog * dev : table filelink backspace fix * dev : pending tab fix and window os focus fix on pending tab * dev : pending file activation on cmd+enter press * dev : custom dialog for saving file in pending dirty tab close * chore : 2.2.1 release --------- Co-authored-by: phurpa-tsering <Phutsering10923@gmail.com> * refactor: enable dynamic documentation URL resolution in RequestBlockHeader using block-specific attributes and plugin registry lookups. --------- Co-authored-by: Phurpa Tsering <phurpa@apyhub.com> Co-authored-by: phurpa-tsering <Phutsering10923@gmail.com>
* dev : cursor like ui change * dev : new change on the cursor look alike --------- Co-authored-by: phurpa-tsering <Phutsering10923@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.