From 8c72d279df9102de3faf3c3f243c1d9fcb8cde5d Mon Sep 17 00:00:00 2001 From: Shantur Rathore Date: Tue, 2 Dec 2025 23:17:14 +0000 Subject: [PATCH] add mobile overlay for instance info --- .../src/components/instance-welcome-view.tsx | 82 +++++++++++++++++-- 1 file changed, 77 insertions(+), 5 deletions(-) diff --git a/packages/ui/src/components/instance-welcome-view.tsx b/packages/ui/src/components/instance-welcome-view.tsx index f76503a6..f3fa3f89 100644 --- a/packages/ui/src/components/instance-welcome-view.tsx +++ b/packages/ui/src/components/instance-welcome-view.tsx @@ -16,6 +16,7 @@ const InstanceWelcomeView: Component = (props) => { const [isCreating, setIsCreating] = createSignal(false) const [selectedIndex, setSelectedIndex] = createSignal(0) const [focusMode, setFocusMode] = createSignal<"sessions" | "new-session" | null>("sessions") + const [showInstanceInfoOverlay, setShowInstanceInfoOverlay] = createSignal(false) const parentSessions = () => getParentSessions(props.instance.id) const newSessionShortcut = createMemo(() => { @@ -47,6 +48,9 @@ const InstanceWelcomeView: Component = (props) => { } }) + const openInstanceInfoOverlay = () => setShowInstanceInfoOverlay(true) + const closeInstanceInfoOverlay = () => setShowInstanceInfoOverlay(false) + function scrollToIndex(index: number) { const element = document.querySelector(`[data-session-index="${index}"]`) if (element) { @@ -55,6 +59,14 @@ const InstanceWelcomeView: Component = (props) => { } function handleKeyDown(e: KeyboardEvent) { + if (showInstanceInfoOverlay()) { + if (e.key === "Escape") { + e.preventDefault() + closeInstanceInfoOverlay() + } + return + } + const sessions = parentSessions() if ((e.metaKey || e.ctrlKey) && e.shiftKey && e.key.toLowerCase() === "n") { @@ -124,6 +136,31 @@ const InstanceWelcomeView: Component = (props) => { }) }) + onMount(() => { + const mediaQuery = window.matchMedia("(min-width: 1024px)") + const handleMediaChange = (matches: boolean) => { + if (matches) { + closeInstanceInfoOverlay() + } + } + + const listener = (event: MediaQueryListEvent) => handleMediaChange(event.matches) + + if (typeof mediaQuery.addEventListener === "function") { + mediaQuery.addEventListener("change", listener) + onCleanup(() => { + mediaQuery.removeEventListener("change", listener) + }) + } else { + mediaQuery.addListener(listener) + onCleanup(() => { + mediaQuery.removeListener(listener) + }) + } + + handleMediaChange(mediaQuery.matches) + }) + function formatRelativeTime(timestamp: number): string { const seconds = Math.floor((Date.now() - timestamp) / 1000) const minutes = Math.floor(seconds / 60) @@ -178,15 +215,29 @@ const InstanceWelcomeView: Component = (props) => {

No Previous Sessions

Create a new session below to get started

+ } >
-

Resume Session

-

- {parentSessions().length} {parentSessions().length === 1 ? "session" : "sessions"} available -

+
+
+

Resume Session

+

+ {parentSessions().length} {parentSessions().length === 1 ? "session" : "sessions"} available +

+
+ +
@@ -274,13 +325,34 @@ const InstanceWelcomeView: Component = (props) => {
-
+
+ +
+
event.stopPropagation()} + > +
+ +
+
+ +
+
+
+
+