diff --git a/public/BlackLogo.png b/public/BlackLogo.png deleted file mode 100644 index f3d495d..0000000 Binary files a/public/BlackLogo.png and /dev/null differ diff --git a/public/WhiteLogo.png b/public/WhiteLogo.png deleted file mode 100644 index 4309156..0000000 Binary files a/public/WhiteLogo.png and /dev/null differ diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100755 index 0000000..af87991 Binary files /dev/null and b/public/apple-touch-icon.png differ diff --git a/public/favicon-96x96.png b/public/favicon-96x96.png new file mode 100755 index 0000000..74a255a Binary files /dev/null and b/public/favicon-96x96.png differ diff --git a/public/favicon.ico b/public/favicon.ico old mode 100644 new mode 100755 index f384885..d036e4f Binary files a/public/favicon.ico and b/public/favicon.ico differ diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100755 index 0000000..cc98383 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100755 index 0000000..ccf313a --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1,21 @@ +{ + "name": "MyWebSite", + "short_name": "MySite", + "icons": [ + { + "src": "/web-app-manifest-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "/web-app-manifest-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} \ No newline at end of file diff --git a/public/web-app-manifest-192x192.png b/public/web-app-manifest-192x192.png new file mode 100755 index 0000000..181a24a Binary files /dev/null and b/public/web-app-manifest-192x192.png differ diff --git a/public/web-app-manifest-512x512.png b/public/web-app-manifest-512x512.png new file mode 100755 index 0000000..91f9d33 Binary files /dev/null and b/public/web-app-manifest-512x512.png differ diff --git a/src/app.css b/src/app.css index 8fc463b..a43a2b8 100644 --- a/src/app.css +++ b/src/app.css @@ -236,7 +236,6 @@ body { background-color: var(--color-text); vertical-align: text-bottom; margin-left: 2px; - position: absolute; } /* Block cursor when done typing */ @@ -247,7 +246,6 @@ body { vertical-align: text-bottom; animation: blink 1s infinite; margin-left: 2px; - position: absolute; } @keyframes blink { diff --git a/src/app.tsx b/src/app.tsx index d661ae6..7cd973f 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -106,11 +106,10 @@ function AppLayout(props: { children: any }) { }); }); - // Swipe gestures to reveal bars + // Global swipe gestures to reveal/hide bars onMount(() => { let touchStartX = 0; let touchStartY = 0; - const EDGE_THRESHOLD = 100; const SWIPE_THRESHOLD = 100; const handleTouchStart = (e: TouchEvent) => { @@ -129,21 +128,22 @@ function AppLayout(props: { children: any }) { if (Math.abs(deltaX) > Math.abs(deltaY)) { // Mobile: Only left bar if (isMobile) { - // Swipe right from left edge - reveal left bar - if (touchStartX < EDGE_THRESHOLD && deltaX > SWIPE_THRESHOLD) { + // Swipe right anywhere - reveal left bar + if (deltaX > SWIPE_THRESHOLD) { setLeftBarVisible(true); } + // Swipe left anywhere - hide left bar + else if (deltaX < -SWIPE_THRESHOLD) { + setLeftBarVisible(false); + } } else { // Desktop: Both bars - // Swipe right from left edge - reveal left bar - if (touchStartX < EDGE_THRESHOLD && deltaX > SWIPE_THRESHOLD) { + // Swipe right anywhere - reveal left bar + if (deltaX > SWIPE_THRESHOLD) { setLeftBarVisible(true); } - // Swipe left from right edge - reveal right bar - else if ( - touchStartX > window.innerWidth - EDGE_THRESHOLD && - deltaX < -SWIPE_THRESHOLD - ) { + // Swipe left anywhere - reveal right bar + else if (deltaX < -SWIPE_THRESHOLD) { setRightBarVisible(true); } } diff --git a/src/components/Bars.tsx b/src/components/Bars.tsx index 4b5501c..994c2e6 100644 --- a/src/components/Bars.tsx +++ b/src/components/Bars.tsx @@ -164,8 +164,6 @@ export function LeftBar() { useBars(); let ref: HTMLDivElement | undefined; let actualWidth = 0; - let touchStartX = 0; - let touchStartY = 0; const [recentPosts, setRecentPosts] = createSignal( undefined @@ -191,10 +189,8 @@ export function LeftBar() { }; onMount(() => { - // Mark as mounted to avoid hydration mismatch setIsMounted(true); - // Setup ResizeObserver FIRST (synchronous) - this allows bar sizing to happen immediately if (ref) { const updateSize = () => { actualWidth = ref?.offsetWidth || 0; @@ -212,30 +208,6 @@ export function LeftBar() { }); resizeObserver.observe(ref); - // Swipe-to-dismiss gesture on sidebar itself (mobile only) - const handleTouchStart = (e: TouchEvent) => { - touchStartX = e.touches[0].clientX; - touchStartY = e.touches[0].clientY; - }; - - const handleTouchEnd = (e: TouchEvent) => { - const isMobile = window.innerWidth < 768; - if (!isMobile) return; // Only allow dismiss on mobile - - const touchEndX = e.changedTouches[0].clientX; - const touchEndY = e.changedTouches[0].clientY; - const deltaX = touchEndX - touchStartX; - const deltaY = touchEndY - touchStartY; - - // Only trigger if horizontal swipe is dominant - if (Math.abs(deltaX) > Math.abs(deltaY)) { - // Swipe left to dismiss (at least 50px) - if (deltaX < -50 && leftBarVisible()) { - setLeftBarVisible(false); - } - } - }; - // Focus trap for accessibility on mobile const handleKeyDown = (e: KeyboardEvent) => { const isMobile = window.innerWidth < 768; @@ -270,14 +242,10 @@ export function LeftBar() { } }; - ref.addEventListener("touchstart", handleTouchStart, { passive: true }); - ref.addEventListener("touchend", handleTouchEnd, { passive: true }); ref.addEventListener("keydown", handleKeyDown); onCleanup(() => { resizeObserver.disconnect(); - ref?.removeEventListener("touchstart", handleTouchStart); - ref?.removeEventListener("touchend", handleTouchEnd); ref?.removeEventListener("keydown", handleKeyDown); }); } @@ -348,17 +316,17 @@ export function LeftBar() { return (