Skip to content

dev → main: fullscreen touch fix, ESLint, commands split, deps - #310

Merged
pountzas merged 25 commits into
mainfrom
dev
Oct 20, 2026
Merged

pountzas merged 25 commits into
mainfrom
dev

Conversation

@pountzas

Copy link
Copy Markdown
Owner

Summary

Promote current dev into main (since #235 / v0.17.0). Includes:

Commit message

fix: promote dev — touch fullscreen, ESLint, commands split

Related issue

Closes #299 (via #307). Closes #305 (via #306).

Accessibility impact

Fixes a regression where touch after a Normal↔Focus switch could force near-fullscreen keyboard height — important for motor-disability / touch-first use.

Test plan

  • npm run typecheck / npm run lint / npm test
  • npm run tauri:dev — no updater package version mismatch
  • Touch after mode switch does not jump keyboard to full height
  • Smoke Settings / Teaching / Focus on Windows

Screenshots (if UI changed)

N/A — behavior and tooling; no intentional UI redesign.

dependabot Bot and others added 25 commits October 13, 2026 23:30
Bumps the npm-minor-and-patch group with 2 updates: [@tauri-apps/api](https://github.com/tauri-apps/tauri) and [@tauri-apps/cli](https://github.com/tauri-apps/tauri).


Updates `@tauri-apps/api` from 2.12.2 to 2.12.3
- [Release notes](https://github.com/tauri-apps/tauri/releases)
- [Commits](https://github.com/tauri-apps/tauri/compare/@tauri-apps/api-v2.12.2...@tauri-apps/api-v2.12.3)

Updates `@tauri-apps/cli` from 2.12.1 to 2.12.2
- [Release notes](https://github.com/tauri-apps/tauri/releases)
- [Commits](https://github.com/tauri-apps/tauri/compare/@tauri-apps/cli-v2.12.1...@tauri-apps/cli-v2.12.2)

---
updated-dependencies:
- dependency-name: "@tauri-apps/api"
  dependency-version: 2.12.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm-minor-and-patch
- dependency-name: "@tauri-apps/cli"
  dependency-version: 2.12.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
…with 5 updates

Bumps the cargo-minor-and-patch group with 5 updates in the /src-tauri directory:

| Package | From | To |
| --- | --- | --- |
| [tauri](https://github.com/tauri-apps/tauri) | `2.12.1` | `2.12.2` |
| [serde_json](https://github.com/serde-rs/json) | `1.0.151` | `1.0.154` |
| [uuid](https://github.com/uuid-rs/uuid) | `1.26.1` | `1.28.0` |
| [tokio](https://github.com/tokio-rs/tokio) | `1.53.1` | `1.53.2` |
| [tauri-build](https://github.com/tauri-apps/tauri) | `2.7.1` | `2.7.2` |



Updates `tauri` from 2.12.1 to 2.12.2
- [Release notes](https://github.com/tauri-apps/tauri/releases)
- [Commits](tauri-apps/tauri@tauri-v2.12.1...tauri-v2.12.2)

Updates `serde_json` from 1.0.151 to 1.0.154
- [Release notes](https://github.com/serde-rs/json/releases)
- [Commits](serde-rs/json@v1.0.151...v1.0.154)

Updates `uuid` from 1.26.1 to 1.28.0
- [Release notes](https://github.com/uuid-rs/uuid/releases)
- [Commits](uuid-rs/uuid@v1.26.1...v1.28.0)

Updates `tokio` from 1.53.1 to 1.53.2
- [Release notes](https://github.com/tokio-rs/tokio/releases)
- [Commits](tokio-rs/tokio@tokio-1.53.1...tokio-1.53.2)

Updates `tauri-build` from 2.7.1 to 2.7.2
- [Release notes](https://github.com/tauri-apps/tauri/releases)
- [Commits](tauri-apps/tauri@tauri-build-v2.7.1...tauri-build-v2.7.2)

---
updated-dependencies:
- dependency-name: serde_json
  dependency-version: 1.0.152
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo-minor-and-patch
- dependency-name: tauri
  dependency-version: 2.12.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo-minor-and-patch
- dependency-name: tauri-build
  dependency-version: 2.7.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo-minor-and-patch
- dependency-name: tokio
  dependency-version: 1.53.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo-minor-and-patch
- dependency-name: uuid
  dependency-version: 1.28.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: cargo-minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Move IPC handlers out of the god-file so feature PRs stop conflicting, with shared pick_file and typed TeachingPdfEntry. Closes #242.

Co-authored-by: Cursor <cursoragent@cursor.com>
Skip invalid stored entries and default missing title/lastOpenedAt so typed TeachingPdfEntry does not regress the old frontend filter.

Co-authored-by: Cursor <cursoragent@cursor.com>
refactor: split lib.rs Tauri commands into commands modules
…-minor-and-patch-3b26397cd4

chore(deps): bump the npm-minor-and-patch group with 2 updates
Bumps the cargo-minor-and-patch group in /src-tauri with 4 updates: [tauri-plugin-opener](https://github.com/tauri-apps/plugins-workspace), [tauri-plugin-updater](https://github.com/tauri-apps/plugins-workspace), [tokio](https://github.com/tokio-rs/tokio) and [tauri-build](https://github.com/tauri-apps/tauri).


Updates `tauri-plugin-opener` from 2.7.1 to 2.7.2
- [Release notes](https://github.com/tauri-apps/plugins-workspace/releases)
- [Commits](tauri-apps/plugins-workspace@fs-v2.7.1...dialog-v2.7.2)

Updates `tauri-plugin-updater` from 2.13.3 to 2.14.0
- [Release notes](https://github.com/tauri-apps/plugins-workspace/releases)
- [Commits](tauri-apps/plugins-workspace@updater-v2.13.3...updater-v2.14.0)

Updates `tokio` from 1.53.2 to 1.53.3
- [Release notes](https://github.com/tokio-rs/tokio/releases)
- [Commits](tokio-rs/tokio@tokio-1.53.2...tokio-1.53.3)

Updates `tauri-build` from 2.7.2 to 2.7.3
- [Release notes](https://github.com/tauri-apps/tauri/releases)
- [Commits](tauri-apps/tauri@tauri-build-v2.7.2...tauri-build-v2.7.3)

---
updated-dependencies:
- dependency-name: tauri-plugin-opener
  dependency-version: 2.7.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo-minor-and-patch
- dependency-name: tauri-plugin-updater
  dependency-version: 2.14.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: cargo-minor-and-patch
- dependency-name: tokio
  dependency-version: 1.53.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo-minor-and-patch
- dependency-name: tauri-build
  dependency-version: 2.7.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo-minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Enable typed linting (strictTypeChecked + stylisticTypeChecked), React Hooks,
React Refresh, and jsx-a11y strict so Agent and CI catch React/TS issues early.
Wire npm run lint into the Build workflow and clean up existing violations.

Co-authored-by: Cursor <cursoragent@cursor.com>
…cargo-minor-and-patch-428e95e853

chore(deps): bump the cargo-minor-and-patch group in /src-tauri with 4 updates
Exclude windowHeightRatio from pointer-kind layout swaps, harden mouse detection, strip stale 1.0 snapshots on load/save, ignore mirrored monitors for Normal full-work-area, and always release modifiers after SendInput failures.

Co-authored-by: Cursor <cursoragent@cursor.com>
Ignore non-left/guarded mouse instead of treating as touch; repair persisted flat 1.0 when snapshots were stale; always release Shift in type_text and surface modifier key-up errors; log layout IPC on Focus and other paths.

Co-authored-by: Cursor <cursoragent@cursor.com>
Remove the stray brace that broke tsc, and reinstate exhaustive StackableSectionId handling plus drop the ignored undoFrom option from review feedback.

Co-authored-by: Cursor <cursoragent@cursor.com>
…o-full-screen

fix: stop keyboard jumping to full screen on touch after mode switch
Resolve layoutProfiles conflict: keep #307 excluding windowHeightRatio
from pointer-kind swaps; keep #306 readonly keyof type style.

Co-authored-by: Cursor <cursoragent@cursor.com>
chore: add strict ESLint for React and TypeScript
Vite warned that the NPM package lagged the tauri-plugin-updater crate.

Co-authored-by: Cursor <cursoragent@cursor.com>
chore: align plugin-updater npm with Rust 2.14.0
@coderabbitai

coderabbitai Bot commented Oct 19, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 197 files, which is 97 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: cfa88557-b54a-4ff2-88aa-a5bd8917956a
📥 Commits

Reviewing files that changed from the base of the PR and between 1221604 and d260730.

⛔ Files ignored due to path filters: 2
  • package-lock.json is excluded by !**/package-lock.json
  • src-tauri/Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing: 197
  • .github/workflows/build.yml
  • .gitignore
  • .vscode/extensions.json
  • .vscode/settings.json
  • eslint.config.js
  • package.json
  • src-tauri/src/commands/dictation.rs
  • src-tauri/src/commands/files.rs
  • src-tauri/src/commands/input_preview.rs
  • src-tauri/src/commands/keyboard.rs
  • src-tauri/src/commands/library.rs
  • src-tauri/src/commands/mod.rs
  • src-tauri/src/commands/mouse.rs
  • src-tauri/src/commands/prediction.rs
  • src-tauri/src/commands/profiles.rs
  • src-tauri/src/commands/system.rs
  • src-tauri/src/commands/teaching_pdf.rs
  • src-tauri/src/commands/window.rs
  • src-tauri/src/input/keyboard/send.rs
  • src-tauri/src/lib.rs
  • src-tauri/src/window/layout.rs
  • src-tauri/src/window/mod.rs
  • src-tauri/tauri.conf.json
  • src/App.tsx
  • src/components/common/ConfirmDialog.test.tsx
  • src/components/common/ConfirmDialog.tsx
  • src/components/common/ErrorBanner.tsx
  • src/components/common/ErrorBoundary.tsx
  • src/components/common/HeaderIconToggleGroup.tsx
  • src/components/common/HoverTooltip.tsx
  • src/components/common/IconActionButton.tsx
  • src/components/common/ModeToggle.tsx
  • src/components/common/SectionIcons.tsx
  • src/components/common/ToolWindowHeader.tsx
  • src/components/common/UpdatePrompt.tsx
  • src/components/keyboard/DictationButton.tsx
  • src/components/keyboard/DictationOverlay.tsx
  • src/components/keyboard/DictationVisualizer.test.tsx
  • src/components/keyboard/DictationVisualizer.tsx
  • src/components/keyboard/InputPreview.test.tsx
  • src/components/keyboard/KeyButton.perf.test.tsx
  • src/components/keyboard/KeyButton.tsx
  • src/components/keyboard/Keyboard.perf.test.tsx
  • src/components/keyboard/Keyboard.tsx
  • src/components/keyboard/KeyboardKey.tsx
  • src/components/keyboard/KeyboardSection.tsx
  • src/components/keyboard/LanguagePicker.tsx
  • src/components/keyboard/LanguageSwitchLabel.tsx
  • src/components/keyboard/OctaveCountSwitch.tsx
  • src/components/keyboard/PianoRangeControl.tsx
  • src/components/keyboard/PreviewSuggestionsRow.test.tsx
  • src/components/keyboard/PreviewSuggestionsRow.tsx
  • src/components/keyboard/SpecialKeyLabel.tsx
  • src/components/keyboard/SynthVolumeControl.tsx
  • src/components/keyboard/Synthesizer.tsx
  • src/components/keyboard/keyboardUtils.ts
  • src/components/keyboard/useKeyboardKeyPress.ts
  • src/components/keyboard/useSynthKeyPress.ts
  • src/components/layout/AppShell.tsx
  • src/components/layout/CollapsedFab.test.tsx
  • src/components/layout/CollapsedFab.tsx
  • src/components/layout/DockedSection.test.tsx
  • src/components/layout/DockedSection.tsx
  • src/components/layout/FloatingSection.test.tsx
  • src/components/layout/FloatingSection.tsx
  • src/components/layout/FocusModeShell.test.tsx
  • src/components/layout/FocusModeShell.tsx
  • src/components/layout/ModeMenu.tsx
  • src/components/layout/ResizableSplitPane.tsx
  • src/components/layout/SectionCanvas.test.tsx
  • src/components/layout/SectionCanvas.tsx
  • src/components/layout/TeachingKeyboardHeaderControls.tsx
  • src/components/mouse/MouseButtonIcons.tsx
  • src/components/mouse/MouseSpeedIcons.tsx
  • src/components/mouse/MouseSpeedSwitch.tsx
  • src/components/mouse/NumKeypad.tsx
  • src/components/mouse/Trackpad.tsx
  • src/components/music/MusicLessonPanel.tsx
  • src/components/music/PartitureView.tsx
  • src/components/settings/AboutSection.tsx
  • src/components/settings/AccessibilityMonitorSection.tsx
  • src/components/settings/AnimatedToggle.test.tsx
  • src/components/settings/AnimatedToggle.tsx
  • src/components/settings/AppearanceSection.tsx
  • src/components/settings/CompanionSection.tsx
  • src/components/settings/GeneralSettingsSection.tsx
  • src/components/settings/KeyboardSettingsSection.tsx
  • src/components/settings/ModesSection.tsx
  • src/components/settings/MouseSettingsSection.tsx
  • src/components/settings/ProfileSection.tsx
  • src/components/settings/SettingsPanel.tsx
  • src/components/settings/SettingsSection.tsx
  • src/components/settings/TaskbarSection.tsx
  • src/components/settings/ToolsMaintenanceSection.tsx
  • src/components/settings/VisibleSectionsSection.tsx
  • src/components/settings/settingsControls.tsx
  • src/components/settings/settingsPanelUtils.ts
  • src/components/settings/settingsSubscription.perf.test.tsx
  • src/components/teaching/FreeWriteNotepad.tsx
  • src/components/teaching/FreeWritePdfAnnotationOverlay.test.tsx
  • src/components/teaching/FreeWritePdfAnnotationOverlay.tsx
  • src/components/teaching/FreeWritePdfExportDialog.tsx
  • src/components/teaching/FreeWritePdfPane.tsx
  • src/components/teaching/LanguageLessonPanel.tsx
  • src/components/teaching/NewLanguageListForm.tsx
  • src/components/teaching/TeachingLessonPanel.tsx
  • src/components/teaching/TeachingSubjectTabs.tsx
  • src/components/teaching/freeWritePdfCanvasSize.ts
  • src/hooks/useCompanionTabletEnabled.ts
  • src/hooks/useContainerSize.ts
  • src/hooks/useFlipLayoutTransition.ts
  • src/hooks/useFreeWritePhysicalKeyboard.ts
  • src/hooks/useGroqDailyQuota.ts
  • src/hooks/useKeyRepeat.ts
  • src/hooks/useLanguageLessonPhysicalKeyboard.ts
  • src/hooks/usePressableButton.ts
  • src/hooks/useTeachingKeyboardFocusRestore.test.ts
  • src/hooks/useWindowHeightDrag.ts
  • src/i18n/index.ts
  • src/lib/appInfo.ts
  • src/lib/appModeLayout.test.ts
  • src/lib/appModeLayout.ts
  • src/lib/autostart.test.ts
  • src/lib/autostart.ts
  • src/lib/colorProfiles.ts
  • src/lib/companionSession.ts
  • src/lib/dictateKey.test.ts
  • src/lib/dictationOverlayWindow.ts
  • src/lib/dictationOverlayWindow.visibility.test.ts
  • src/lib/flipLayout.ts
  • src/lib/focusMode.ts
  • src/lib/focusModeSettingsMigration.ts
  • src/lib/groqDailyQuota.ts
  • src/lib/keyRepeat.ts
  • src/lib/keyboardCharacterInput.test.ts
  • src/lib/keyboardCharacterInput.ts
  • src/lib/keyboardLayouts.ts
  • src/lib/language/customPacks.test.ts
  • src/lib/language/greekCompose.ts
  • src/lib/language/isLanguageLessonActive.ts
  • src/lib/language/normalize.ts
  • src/lib/language/packs.ts
  • src/lib/language/types.ts
  • src/lib/languagePickerPosition.ts
  • src/lib/layoutKeyTranslation.ts
  • src/lib/layoutProfiles.test.ts
  • src/lib/layoutProfiles.ts
  • src/lib/logIpc.ts
  • src/lib/motion.ts
  • src/lib/mouseSpeed.ts
  • src/lib/music/importTypes.ts
  • src/lib/music/parseJsonSong.ts
  • src/lib/music/parseMidiSong.ts
  • src/lib/music/parseMusicFile.ts
  • src/lib/music/parseMusicXmlSong.ts
  • src/lib/music/partiture.ts
  • src/lib/music/pianoKeys.ts
  • src/lib/music/songs.ts
  • src/lib/pointerDrag.ts
  • src/lib/sectionRegistry.ts
  • src/lib/sectionStack.ts
  • src/lib/teaching/isFreeWriteCaptureActive.ts
  • src/lib/teaching/pdfAnnotations.ts
  • src/lib/teaching/pdfExportRange.ts
  • src/lib/teaching/pdfLibrary.ts
  • src/lib/teaching/teachingKeyboardMinimize.ts
  • src/lib/teachingInputHelpers.ts
  • src/lib/toolWindows.ts
  • src/lib/types.ts
  • src/lib/updater.ts
  • src/lib/windowHeightDrag.ts
  • src/main.tsx
  • src/stores/appStore.focusLayout.test.ts
  • src/stores/appStore.modeMenu.test.ts
  • src/stores/appStore.suggestions.test.ts
  • src/stores/appStore.ts
  • src/stores/lib/restoreStack.ts
  • src/stores/lib/suggestionMerge.ts
  • src/stores/lib/teachingSuggestions.ts
  • src/stores/lib/windowLayoutArgs.test.ts
  • src/stores/lib/windowLayoutArgs.ts
  • src/stores/slices/dictationSlice.ts
  • src/stores/slices/focusModeSlice.ts
  • src/stores/slices/freeWritePdfPointer.test.ts
  • src/stores/slices/languagePacksSlice.ts
  • src/stores/slices/partituresSlice.ts
  • src/stores/slices/pdfAnnotationUndo.test.ts
  • src/stores/slices/pdfSlice.ts
  • src/stores/slices/pianoRangeSlice.test.ts
  • src/stores/slices/profileSlice.ts
  • src/stores/slices/suggestionsSlice.test.ts
  • src/stores/slices/suggestionsSlice.ts
  • src/stores/slices/typingSlice.ts
  • src/stores/slices/windowSlice.ts
  • src/stores/storeFlags.ts
  • src/stores/storeShared.ts
  • src/stores/types.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@pountzas pountzas left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No code changes needed. This promotion is good to merge once the manual test plan is done.

What I checked on d260730:

  1. CI: the Build run (check and build-windows) passed. Typecheck, the new npm run lint step, vitest, Rust cargo test and the Windows bundle all went green. ESLint left 6 warnings: 3 react-hooks/exhaustive-deps in useFlipLayoutTransition.ts, NewLanguageListForm.tsx and Synthesizer.tsx, and 3 jsx-a11y/no-static-element-interactions in FocusModeShell.tsx, CollapsedFab.tsx and AppShell.tsx. All of them are in dependency arrays and handlers that already exist on main, so they aren't regressions.
  2. #307 / #299 follow-ups are all in: pointerKindFromEvent returns null for non-left, non-primary, unknown and guarded mouse events, and handlePointerInputEvent skips those. loadProfileData runs the one-time repairStaleFullscreenFlatHeight and persists the result. type_text_with_sender always releases Shift, and release_modifiers returns the first key-up error. Both have mock-sender tests. logLayoutIpc now wraps every cmd_apply_window_layout / cmd_animate_window_layout call site (boot, Focus, live height, collapse/expand, settings patch).
  3. #306 follow-ups are all in: the exhaustive satisfies never switches are back in FloatingSection.handleClose and SectionCanvas.isSectionVisibleId, and so is the drag.id !== id guard. The menu and tablist containers use tabIndex={-1}, windowMinMidi uses _octaveCount, CompanionSection uses rest-destructure, the dead undoFrom option is removed, and mouseSpeed uses an own-property check.
  4. #295 split: the generate_handler! list is identical to main (75 commands, none added or dropped).
  5. #308 / deps: npm @tauri-apps/plugin-updater 2.14.0 matches tauri-plugin-updater 2.14.0 in Cargo.lock. The other Tauri packages are aligned on major.minor.
  6. Release flow: dev is 0 commits behind main, so the v0.17.0 release commits are already in. Versions stay at 0.17.0 because Release Please bumps package.json, tauri.conf.json, Cargo.toml and Cargo.lock after merge. A merge commit (as with #235) keeps dev and main history aligned.

Before merge (non-code):

  1. PR description: run and tick the manual test plan. That means touch after a Normal↔Focus switch staying at normal height on single, extended and mirrored monitors, plus the Settings / Teaching / Focus smoke test on Windows. CI can't cover the touch path.

@pountzas
pountzas merged commit 4d16462 into main Oct 20, 2026
4 checks passed
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.

Add strict ESLint for React and TypeScript Fix keyboard jumping to full screen on touch after a mode switch (Normal and Focus)

1 participant