Skip to content

Upgrade deps + add LayerDisplay component#361

Open
Meserlion wants to merge 20 commits intonickcoutsos:mainfrom
Meserlion:chore/dep-updates-and-layer-display
Open

Upgrade deps + add LayerDisplay component#361
Meserlion wants to merge 20 commits intonickcoutsos:mainfrom
Meserlion:chore/dep-updates-and-layer-display

Conversation

@Meserlion
Copy link
Copy Markdown

Summary

  • axios 0.21 → 1.15, jsonwebtoken 8.5 → 9.0, dotenv 10 → 17
  • npm audit fix resolves all 20 remaining vulnerabilities (0 remaining)
  • New LayerDisplay component: toggle button shows a scaled visual of the active layer, with &trans keys resolved to their effective binding from lower layers

Test plan

  • Run npm audit — should show 0 vulnerabilities
  • Open editor, switch layers, toggle "Show Layer Display" — keys should render correctly
  • &trans keys should show the resolved binding from the layer below, not

🤖 Generated with Claude Code

Meserlion and others added 20 commits December 7, 2025 10:56
Add {, [, ], }, (, ) entries to zmk-keycodes.json keyed by their compound
ZMK form (LA(LC(N7)), LA(LC(N8)), etc.) so they display with the correct
symbol instead of showing modifier names.

Modify parseKeyBinding to treat these compound keycodes as leaf nodes so
hydrateTree can look them up in the keycode index by their full name.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The server's parseKeymap was splitting LA(LC(N7)) etc. into nested
modifier nodes before sending to the frontend, so the frontend's
COMPOUND_KEYCODES guard was never reached. Add the same guard to the
server-side parse function.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- NON_US_BACKSLASH symbol changed from \ to < (DK: key between LShift and Z)
- LS(FSLH) added as compound keycode atom with symbol <
- LS(FSLH) added to COMPOUND_KEYCODES in both client and server parsers

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- macros.json stores macro definitions (modifier+key combos)
- GET/POST /macros API routes
- MacroEditor component shown below keyboard
- Macros auto-registered as behaviors in the key picker
- Save Local writes macros block to .keymap then keymap block

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- combos.json stores combo definitions (positions + binding + optional timeout)
- GET/POST /combos API routes
- ComboEditor component shown below MacroEditor
- Save Local saves combos → macros → keymap in order

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ance ComboEditor and MiniKeyboard components
- Updated Keyboard component to utilize useCallback for performance optimization.
- Simplified search target handling and removed unnecessary memoization.
- Enhanced layer management functions for creating, updating, renaming, and deleting layers.
- Integrated resolved bindings into KeyboardLayout for better key state representation.
- Improved Key component to handle resolved bindings and display appropriate UI for transparent keys.
- Removed static behaviors JSON and replaced with dynamic fetching from API.
- Introduced key-event mapping for better handling of keyboard events and ZMK aliases.
- Updated ComboEditor to support behavior and parameter selection through a modal picker.
- Enhanced ValuePicker for improved search functionality and UI.
- Added styles for new key states and resolved bindings.
- Add CLAUDE.md with project architecture, file guide, and key notes
- Remove cross-env from dev script (silently fails in PowerShell); move ENABLE_DEV_SERVER to .env

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- axios 0.21 → 1.15
- jsonwebtoken 8.5 → 9.0
- dotenv 10 → 17
- npm audit fix: resolved all 20 remaining vulnerabilities

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Shows a scaled-down visual of all key bindings for the active layer,
resolving &trans keys by looking up the nearest active layer beneath.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Collect Get-NetTCPConnection results into an array first, then only
pipe to Stop-Process if the array is non-empty. The pipeline hang
occurred because ForEach-Object waits for input that never arrives
when no ports are listening.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Avoids shell injection by passing git arguments as an array instead of
interpolating them into a shell string. Consistent with how all other
git calls in this file already work.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
If any of keycodes/behaviours/macros/combos/aliases fails to load,
fall back to [] for that resource instead of failing the entire
initialization. The app now loads in a degraded state rather than
showing a blank error screen.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
sessionStorage is cleared when the tab closes and is isolated per tab,
reducing the persistence window for a stolen token. localStorage kept
the token indefinitely across all sessions and tabs on the same origin.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant