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 (