fix: prevent Emmet wrap abbreviation from affecting multiple open editors#208
Closed
lahcenelhadi2001-a11y wants to merge 383 commits intoCortexLM:mainfrom
Closed
fix: prevent Emmet wrap abbreviation from affecting multiple open editors#208lahcenelhadi2001-a11y wants to merge 383 commits intoCortexLM:mainfrom
lahcenelhadi2001-a11y wants to merge 383 commits intoCortexLM:mainfrom
Conversation
…ndexed - Fix search_replace_preview to convert 1-indexed line numbers to 0-indexed array indices (line_num - 1), consistent with replace_in_file_internal - Update 4 test cases from line: 0 to line: 1 to match 1-indexed convention used by search results and the backend conversion logic
…stration TerminalGroupCommands was exported but never mounted in the component tree, so all terminal group commands (split, navigate, group management) were never registered with the command palette. Mount it alongside TerminalToolsCommands in the terminal section of AppCore.
…mDialog and DeleteBranchDialog - DeleteConfirmDialog: add aria-labelledby pointing to title element, add id to modal-title div - DeleteBranchDialog: add aria-modal=true, aria-labelledby pointing to title element, add id to header span
The merge conflict resolution left duplicate Render Characters, Side, Scale, and Show Slider controls. Deduplicated to a single clean set.
Extract TerminalPanel.tsx from 2465 lines to 296 lines (under 300 limit) by splitting into focused modules: - TerminalPanelTypes.ts: Types, constants, and utilities - OutputStreamProcessor.ts: Chunked output processing with flow control - FilePathLinkProvider.ts: Clickable file path links in terminal output - TerminalInstanceManager.ts: Terminal lifecycle, xterm init, events, cleanup - TerminalSuggestionHandler.ts: Suggestion selection logic - TerminalPanelOverlays.tsx: Overlay JSX (dialogs, decorations, split toolbar) - TerminalStyles.ts: CSS styles extracted from inline style block - TerminalEventHandlers.ts: Keyboard and event handler factories Integrate terminal split view using existing useTerminalSplits hook and TerminalSplitView component. Supports horizontal/vertical splits, resizable panes, and Ctrl+Shift+5 keyboard shortcut. Update terminal/index.ts with all new module exports.
…iable definitions Add three missing CSS variable definitions to the :root scope in design-tokens.css: - --jb-text-muted-size: var(--text-xs) — resolves to 11px, referenced 52 times across 21 files for muted/small text sizing - --jb-text-muted-weight: var(--font-normal) — resolves to 400, referenced 2 times alongside --jb-text-muted-size - --jb-border-divider: var(--border-default) — resolves to #2E2F31, referenced 76 times across 27 files for divider borders These variables were used extensively but never defined in the default theme, causing them to fall back to browser defaults or inline fallback values. The high-contrast theme override in high-contrast.css (line 117) continues to work as expected. Fixes #21585, #21543
…consistency Audit all references to zen mode notification silencing across the codebase. The canonical key is zenMode.silenceNotifications (as defined in types/settings.ts, SettingsContext.tsx, SETTINGS_REGISTRY, and JsonSettingsEditor.tsx schema). Fixed mismatches in: - src/components/ZenMode.tsx (interface, default, usage) - src/components/editor/ZenMode.tsx (interface, default, mapping) - src/components/__tests__/ZenMode.test.tsx (interface, default, assertion) Resolves #21917
…ng (#21723, #21683) Fix #21723: Rewrite parseShortcut to split on space first (chord groups), then on + (keys within group). E.g. 'Ctrl+K Ctrl+S' now correctly renders as two separate chord groups instead of merging keys across the space. Fix #21683: Always compute label highlights from the label's own fuzzy match result, even when the category match drives the overall score. Previously, label highlights were set to empty when category scored higher.
…, and workbench - theme.theme: expand enum to include 'high-contrast' and 'high-contrast-light' (#21474) - theme.activityBarPosition: add enum property with 'side', 'top', 'hidden' (#21473) - theme.titleBarStyle: add enum property with 'native', 'custom' (#21483) - theme.auxiliaryBarVisible: add boolean property (#21482) - theme.wrapTabs: add boolean property (#21916) - workbench.editor.wrapTabs: add boolean property in new workbench section (#21916) - terminal.wordSeparators: add string property (#21545) All schema definitions now match runtime types in SettingsContext.tsx.
…h, and terminal - Expand theme.theme enum to include 'high-contrast' and 'high-contrast-light' (#21474) - Add theme.activityBarPosition enum with 'side', 'top', 'hidden' (#21473) - Add theme.titleBarStyle enum with 'native', 'custom' (#21483) - Add theme.auxiliaryBarVisible boolean property (#21482) - Add theme.wrapTabs and workbench.editor.wrapTabs boolean properties (#21916) - Add terminal.wordSeparators string property (#21545) All schema definitions match runtime types in SettingsContext.tsx.
…ent path matching The handleReveal function was normalizing all paths to forward slashes before adding them to expandedPaths and checking directoryCache. However, flattenedItems uses entry.path with native separators (from the Rust backend). On Windows, this caused a mismatch where 'C:/foo' would never match 'C:\foo', so directories wouldn't appear expanded after reveal. Fix: Keep native separators when building paths for expandedPaths and directoryCache lookups. Only use forward-slash normalization for the startsWith comparison and relative path splitting logic. Detect the native separator from rootPath and use it when constructing intermediate directory paths. Also simplified the scroll-to-item findIndex to use direct path equality instead of normalizing both sides, since targetPath now uses native separators matching entry.path.
…-select cut/copy - Fix #21783: Move isSelected, gitDecoration, and isEntering computations from const variables inside the For callback to inline expressions in JSX props, preserving SolidJS reactivity tracking. - Fix #21770: Add a renameCancelled flag in VirtualItem. Set it in the Escape keydown handler before calling onRename, and check it in onBlur to skip the duplicate rename call when Escape was pressed. Reset the flag when entering rename mode and after the blur guard fires. - Fix #21711: Change context menu Cut and Copy handlers to operate on the full selection set (props.selectedPaths) when the right-clicked file is part of the selection, instead of only the single contextMenuTarget path.
Remove duplicate wrapTabs properties that were introduced by parallel batch-1 changes during rebase. Keeps the first occurrence of each.
… theme settings at runtime Issue #21896: Replace all hardcoded hex colors (#141415, #1C1C1D, #2E2F31) in shell layout components with corresponding CSS variables from cortex-tokens.css: - #141415 → var(--cortex-bg-primary) - #1C1C1D → var(--cortex-bg-secondary) - #2E2F31 → var(--cortex-border-default) Affected components: - CortexDesktopLayout.tsx - CortexSidebarContainer.tsx - EditorTabBar.tsx - CortexTitleBar.tsx - CortexEditorTabs.tsx - TitleBarDropdownMenu.tsx - CortexActivityBar.tsx - CortexCodeEditor.tsx - CortexFileExplorer.tsx - ExplorerHeader.tsx - EditorBreadcrumbs.tsx - CortexIDELayout.tsx - EnhancedStatusBar.tsx - CortexNotifications.tsx Issue #21897: Add createEffect in AppCore.tsx AppContent that reads settings.theme.uiFontFamily, settings.theme.uiFontSize, and settings.theme.zoomLevel from SettingsContext and applies them to document.documentElement.style at runtime.
Fix #21906: Add Array.isArray() guards for extension data from invoke() calls in ExtensionsContext.checkForUpdates() and loadExtensions(), and in AppCore's ExtensionCommandRegistrar. Wrap flatMap in try-catch to prevent TypeError from bubbling to users when extensions data is unexpectedly null/undefined. Fix #21908: Move activeSection/activeTab signals to module level in SettingsEditor and SettingsDialog so the selected TOC section persists across component re-mounts caused by editor focus changes. The initialSection prop is only applied on explicit first mount.
…h, and terminal - Expand theme.theme enum to include 'high-contrast' and 'high-contrast-light' (#21474) - Add theme.activityBarPosition enum with 'side', 'top', 'hidden' (#21473) - Add theme.titleBarStyle enum with 'native', 'custom' (#21483) - Add theme.auxiliaryBarVisible boolean property (#21482) - Add theme.wrapTabs and workbench.editor.wrapTabs boolean properties (#21916) - Add terminal.wordSeparators string property (#21545) All schema definitions match runtime types in SettingsContext.tsx.
…terminal.autoReply, and security.trustedWorkspaces - terminal.bell: enum property with values ['none','audible','visual'], default 'none' (#21542) - terminal.autoReply: object property with enabled (boolean) and rules (array of auto-reply rule objects) subproperties matching runtime defaults (#21530) - security.trustedWorkspaces: array property with items of type string, default [] (#21529) All additions cross-referenced with default values in SettingsContext.tsx.
- Document complete project structure with all frontend and backend modules - Verify build baseline: npm install, typecheck, build, cargo check all pass - Catalog 691 component files, 99 context providers, 37 hooks, 231 Rust files - Map all 48+ Rust backend modules with file counts and descriptions - Document pre-existing test failures (3 of 9917 tests) - Record tech stack versions and build/test commands - Note: npm run check does not exist; use npm run typecheck instead
…and fix encoding event name mismatch - Fix #21785: Move useCommands() call from inside createEffect to the JournalProvider component body for proper SolidJS scope. Register commands in onMount and add onCleanup to unregister them, preventing duplicate registrations. - Fix #21680: Change StatusBarContext event listener from 'editor:encoding-change' to 'encoding:changed' to match the event dispatched by EncodingContext. Also update EditorStatusBarItems to dispatch 'encoding:changed' for consistency across the codebase.
- Fix #21560: Parent category shows active highlight when collapsed and a child is the active tab - Fix #21547: Add 'git' to TREE_ID_TO_SECTION mapping for modification detection - Fix #21918: Fix Modified filter by directly comparing effective settings values against defaults with JSON.stringify deep equality, bypassing potential SolidJS store proxy issues
Update PROJECT_STRUCTURE.md to accurately report 2 pre-existing TypeScript errors (duplicate wrapTabs properties in JsonSettingsEditor.tsx) introduced by prior commits.
… theme settings at runtime - Replace #141415 with var(--cortex-bg-primary) across layout components - Replace #1C1C1D with var(--cortex-bg-secondary) across layout components - Replace #2E2F31 with var(--cortex-border-default) across layout components - Replace hardcoded icon/text colors with semantic CSS variables - Add createEffect in AppCore to apply uiFontFamily, uiFontSize, and zoomLevel from SettingsContext to document.documentElement.style - Update tests to match new CSS variable output Closes #21896, #21897
… (#21919, #21719) - Add 'docs' as valid SidebarTab type in layout/types.tsx and types/layout.ts - Create CortexDocumentationPanel component with guides and shortcuts tabs - Wire docs panel into CortexSidebarContainer with lazy loading - Add 'docs' to VALID_SIDEBAR_TABS in CortexDesktopLayout - Add 'Snippets: Open Snippet Manager' command (Ctrl+Alt+S) that dispatches snippets:open event, making SnippetsPanel reachable via command palette - Register Ctrl+Alt+S keybinding in CommandContext keydown handler
Implement a global modal-active state that prevents keyboard shortcuts from firing behind modal dialogs. Escape key is always allowed through so modals can still be closed. Changes: - Add ModalActiveContext with counter-based tracking for multiple modals - CortexModal registers/unregisters with the context on open/close - CommandContext handler skips all shortcuts (except Escape) when modal active - useKeyboard and createKeyboardShortcut check modal state before firing - ModalActiveProvider added as Tier 1 provider in OptimizedProviders
… terminal.autoReply schema These subproperties were present in the TerminalAutoReplySettings interface and DEFAULT_TERMINAL defaults in SettingsContext.tsx but were missing from the JSON schema.
Add AppCore.tsx duplicate identifier errors and note that the error set may shift as concurrent tasks commit to main.
…fix failing tests - CortexHeaderItem: #1C1C1D → var(--cortex-bg-secondary) - CortexDropdown: #1C1C1D/#2E2F31 → var(--cortex-bg-secondary)/var(--cortex-border-default) - CortexSeparator: #2E2F31 → var(--cortex-border-default) - CortexSmallButton: remove fallback #141415 - CortexOpenProjectDropdown: remove fallback #1C1C1D - CortexHeaderItem.test.tsx: update assertions to expect CSS variables - CortexSeparator.test.tsx: update assertion to expect CSS variable - cov-CortexDiffEditor.test.tsx: add missing getProjectPath mock
- Add FactoryManager::initialize() to set persistence base dir and
load previously saved workflows from disk into the in-memory HashMap,
reconciling next_id to avoid ID collisions.
- In factory command handlers (create, update, delete, import), call
persistence().save_workflow() / delete_workflow() after modifying
the in-memory state. Persistence errors are logged as warnings
(non-fatal) to avoid blocking the user.
- In Phase B deferred initialization (app/mod.rs), initialize the
factory persistence with dirs::data_dir().join("Cortex"), consistent
with the rest of the codebase's data directory convention.
Closes #21476
…(#21455, #21454) Issue #21455: Add file save listeners to MultiRepoContext that trigger debounced git status refresh. Listen for both cortex:file-saved DOM events and git:repository-changed Tauri backend events. Uses 1500ms debounce to avoid excessive refreshes. Issue #21454: Add workspace folder selector dropdown to CortexAgentSidebar in Vibe mode. When multiple workspace folders exist, renders a <select> dropdown that allows switching the active project. Reuses WorkspaceContext data source, same as IDE mode.
There was a problem hiding this comment.
Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.
6f75822 to
ca24ed0
Compare
ca24ed0 to
f7e6b92
Compare
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.
Fixes #24600. Added a focus check using editor.hasTextFocus() in EditorEmmet.tsx. This ensures that global Emmet events (wrap/balance) are only processed by the active, focused editor instance, preventing unintended modifications to other open tabs.