From c833f1036ba659fd9b8ed0dcccafa08cabb3e19b Mon Sep 17 00:00:00 2001 From: Jack Kingsman Date: Tue, 24 Mar 2026 21:01:49 -0700 Subject: [PATCH 1/7] Test scroll fix for mobile browsers --- frontend/src/components/SecurityWarningModal.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/SecurityWarningModal.tsx b/frontend/src/components/SecurityWarningModal.tsx index 27fa4a6..c4c022b 100644 --- a/frontend/src/components/SecurityWarningModal.tsx +++ b/frontend/src/components/SecurityWarningModal.tsx @@ -69,7 +69,7 @@ export function SecurityWarningModal({ health }: SecurityWarningModalProps) { event.preventDefault()} onInteractOutside={(event) => event.preventDefault()} > From 137f41970dcba07962ae0c5e33efd8750b086ffa Mon Sep 17 00:00:00 2001 From: Jack Kingsman Date: Tue, 24 Mar 2026 21:07:20 -0700 Subject: [PATCH 2/7] Fix some places where we used vh instead of dvh for modal sizing --- frontend/src/components/PathModal.tsx | 2 +- frontend/src/components/RawPacketDetailModal.tsx | 2 +- frontend/src/components/SecurityWarningModal.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/components/PathModal.tsx b/frontend/src/components/PathModal.tsx index 4a2456f..aef5ba1 100644 --- a/frontend/src/components/PathModal.tsx +++ b/frontend/src/components/PathModal.tsx @@ -68,7 +68,7 @@ export function PathModal({ return ( !isOpen && onClose()}> - + {hasPaths diff --git a/frontend/src/components/RawPacketDetailModal.tsx b/frontend/src/components/RawPacketDetailModal.tsx index cc33a0d..ba72f50 100644 --- a/frontend/src/components/RawPacketDetailModal.tsx +++ b/frontend/src/components/RawPacketDetailModal.tsx @@ -784,7 +784,7 @@ export function RawPacketInspectorDialog({ return ( - + {title} {description} diff --git a/frontend/src/components/SecurityWarningModal.tsx b/frontend/src/components/SecurityWarningModal.tsx index c4c022b..d2e2a61 100644 --- a/frontend/src/components/SecurityWarningModal.tsx +++ b/frontend/src/components/SecurityWarningModal.tsx @@ -69,7 +69,7 @@ export function SecurityWarningModal({ health }: SecurityWarningModalProps) { event.preventDefault()} onInteractOutside={(event) => event.preventDefault()} > From 2d943dedc5059913e545ce6d94f8bba8496eb42a Mon Sep 17 00:00:00 2001 From: Luke Date: Wed, 25 Mar 2026 15:09:32 +0000 Subject: [PATCH 3/7] Update Sidebar.tsx --- frontend/src/components/Sidebar.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/Sidebar.tsx b/frontend/src/components/Sidebar.tsx index 178937e..8a716de 100644 --- a/frontend/src/components/Sidebar.tsx +++ b/frontend/src/components/Sidebar.tsx @@ -844,7 +844,7 @@ export function Sidebar({
setSearchQuery(e.target.value)} From b63153b3a121d0dd6aace710ad1176c1bef12d9e Mon Sep 17 00:00:00 2001 From: jkingsman Date: Wed, 25 Mar 2026 08:23:21 -0700 Subject: [PATCH 4/7] Initial swipe work --- frontend/package-lock.json | 14 ++++++++++++-- frontend/package.json | 1 + frontend/src/components/AppShell.tsx | 14 +++++++++++++- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index b760184..497af69 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "remoteterm-meshcore-frontend", - "version": "2.7.9", + "version": "3.6.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "remoteterm-meshcore-frontend", - "version": "2.7.9", + "version": "3.6.0", "dependencies": { "@codemirror/lang-python": "^6.2.1", "@codemirror/theme-one-dark": "^6.1.3", @@ -29,6 +29,7 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "react-leaflet": "^4.2.1", + "react-swipeable": "^7.0.2", "sonner": "^2.0.7", "tailwind-merge": "^3.4.0", "tailwindcss-animate": "^1.0.7", @@ -5695,6 +5696,15 @@ } } }, + "node_modules/react-swipeable": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/react-swipeable/-/react-swipeable-7.0.2.tgz", + "integrity": "sha512-v1Qx1l+aC2fdxKa9aKJiaU/ZxmJ5o98RMoFwUqAAzVWUcxgfHFXDDruCKXhw6zIYXm6V64JiHgP9f6mlME5l8w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.3 || ^17 || ^18 || ^19.0.0 || ^19.0.0-rc" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 6aeaae4..bbb596c 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -37,6 +37,7 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "react-leaflet": "^4.2.1", + "react-swipeable": "^7.0.2", "sonner": "^2.0.7", "tailwind-merge": "^3.4.0", "tailwindcss-animate": "^1.0.7", diff --git a/frontend/src/components/AppShell.tsx b/frontend/src/components/AppShell.tsx index 84b6ed2..33ae39d 100644 --- a/frontend/src/components/AppShell.tsx +++ b/frontend/src/components/AppShell.tsx @@ -1,4 +1,5 @@ import { lazy, Suspense, useRef, type ComponentProps } from 'react'; +import { useSwipeable } from 'react-swipeable'; import { StatusBar } from './StatusBar'; import { Sidebar } from './Sidebar'; @@ -89,6 +90,17 @@ export function AppShell({ contactInfoPaneProps, channelInfoPaneProps, }: AppShellProps) { + const swipeHandlers = useSwipeable({ + onSwipedRight: ({ initial }) => { + if (initial[0] < 30 && !sidebarOpen && window.innerWidth < 768) { + onSidebarOpenChange(true); + } + }, + trackTouch: true, + trackMouse: false, + preventScrollOnSwipe: false, + }); + const searchMounted = useRef(false); if (conversationPaneProps.activeConversation?.type === 'search') { searchMounted.current = true; @@ -153,7 +165,7 @@ export function AppShell({ ); return ( -
+
Date: Wed, 25 Mar 2026 08:34:21 -0700 Subject: [PATCH 5/7] Change room finder to be channels not rooms --- frontend/src/components/CrackerPanel.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/CrackerPanel.tsx b/frontend/src/components/CrackerPanel.tsx index d965906..d6c15ab 100644 --- a/frontend/src/components/CrackerPanel.tsx +++ b/frontend/src/components/CrackerPanel.tsx @@ -505,7 +505,7 @@ export function CrackerPanel({ ? 'GPU Not Available' : !wordlistLoaded ? 'Loading dictionary...' - : 'Find Rooms'} + : 'Find Channels'} {/* Status */} From b0f5930e0144b9cea94196c52a6ff2009d7cff45 Mon Sep 17 00:00:00 2001 From: jkingsman Date: Wed, 25 Mar 2026 08:42:40 -0700 Subject: [PATCH 6/7] Swipe away --- frontend/src/components/AppShell.tsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/AppShell.tsx b/frontend/src/components/AppShell.tsx index 33ae39d..4a96ee7 100644 --- a/frontend/src/components/AppShell.tsx +++ b/frontend/src/components/AppShell.tsx @@ -98,6 +98,13 @@ export function AppShell({ }, trackTouch: true, trackMouse: false, + preventScrollOnSwipe: true, + }); + + const closeSwipeHandlers = useSwipeable({ + onSwipedLeft: () => onSidebarOpenChange(false), + trackTouch: true, + trackMouse: false, preventScrollOnSwipe: false, }); @@ -208,7 +215,7 @@ export function AppShell({ Navigation Sidebar navigation -
{activeSidebarContent}
+
{activeSidebarContent}
From 26b740fe3cdf598e3c7f6b0bf58b451678bd00ae Mon Sep 17 00:00:00 2001 From: jkingsman Date: Wed, 25 Mar 2026 08:57:43 -0700 Subject: [PATCH 7/7] Fix lint --- frontend/src/components/AppShell.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/AppShell.tsx b/frontend/src/components/AppShell.tsx index 4a96ee7..e72ede6 100644 --- a/frontend/src/components/AppShell.tsx +++ b/frontend/src/components/AppShell.tsx @@ -215,7 +215,9 @@ export function AppShell({ Navigation Sidebar navigation -
{activeSidebarContent}
+
+ {activeSidebarContent} +