diff options
| author | Adam Mathes <adam@adammathes.com> | 2026-02-14 09:59:56 -0800 |
|---|---|---|
| committer | Adam Mathes <adam@adammathes.com> | 2026-02-14 09:59:56 -0800 |
| commit | 7fbb0c3838e188ba3b810156ff6546239e89923e (patch) | |
| tree | 857f8e86a7796cdb0e1c4c4dac5c1d4ea7bd71b2 | |
| parent | c9c3469ce90f5e1cf624a9a97d66fd6db3aba8cb (diff) | |
| download | neko-7fbb0c3838e188ba3b810156ff6546239e89923e.tar.gz neko-7fbb0c3838e188ba3b810156ff6546239e89923e.tar.bz2 neko-7fbb0c3838e188ba3b810156ff6546239e89923e.zip | |
fix: ensure neko toggle button is always accessible (fixing NK-zvt8hi)
| -rw-r--r-- | .thicket/tickets.jsonl | 4 | ||||
| -rw-r--r-- | frontend/src/App.css | 65 | ||||
| -rw-r--r-- | frontend/src/App.tsx | 9 | ||||
| -rw-r--r-- | frontend/src/components/FeedList.css | 5 |
4 files changed, 32 insertions, 51 deletions
diff --git a/.thicket/tickets.jsonl b/.thicket/tickets.jsonl index 7ea6528..ec21934 100644 --- a/.thicket/tickets.jsonl +++ b/.thicket/tickets.jsonl @@ -17,9 +17,10 @@ {"id":"NK-6b4a2e","title":"v2 frontend BLUE LINKS","description":"Make most of the links BLUE and BOLD like in the old legacy version. Thanks","type":"bug","status":"closed","priority":0,"labels":null,"assignee":"","created":"2026-02-14T00:44:47.147880845Z","updated":"2026-02-14T01:09:26.770086073Z"} {"id":"NK-6o87rr","title":"Vanilla JS: Implement Pagination","description":"Implement 'Load More' or infinite scroll for item list in vanilla JS prototype.","type":"feature","status":"closed","priority":2,"labels":null,"assignee":"","created":"2026-02-14T04:47:40.618957267Z","updated":"2026-02-14T04:47:40.618957267Z"} {"id":"NK-6q9nyg","title":"Refactor HTTP-dependent functions for testability","description":"Several functions use http.Get or external libraries directly (GetFullContent uses goose, ResolveFeedURL uses http.Get + goquery, imageProxyHandler uses http.Client). Refactor these to accept interfaces for HTTP fetching so they can be unit tested with mocks. This is the primary blocker for reaching 90% coverage.","type":"cleanup","status":"closed","priority":3,"labels":null,"assignee":"","created":"2026-02-13T03:54:37.630148644Z","updated":"2026-02-14T02:44:05.328784994Z"} +{"id":"NK-7jh6re","title":"sidebar still ugly","description":"still very ugly, even compared to the original v1 static version\n\neither make it nicer or just copy the v1 version more directly","type":"feature","status":"open","priority":0,"labels":null,"assignee":"","created":"2026-02-14T17:59:17.948112909Z","updated":"2026-02-14T17:59:17.948112909Z"} {"id":"NK-7tzbql","title":"Fix TUI Content View Navigation and Interaction","description":"The TUI content view (reading a single item) is currently non-functional or severely limited. Users cannot easily navigate back, scroll, or interact with the content. This task involves improving the 'viewContent' state in the TUI.","type":"bug","status":"closed","priority":1,"labels":null,"assignee":"","created":"2026-02-13T05:02:57.382793121Z","updated":"2026-02-13T05:06:15.144485446Z"} {"id":"NK-7xuajb","title":"[security] Add HTTP Security Headers","description":"Add middleware to set standard security headers: Content-Security-Policy (restrict sources), X-Content-Type-Options: nosniff, X-Frame-Options: DENY, Referrer-Policy: strict-origin-when-cross-origin.","type":"","status":"closed","priority":2,"labels":null,"assignee":"","created":"2026-02-14T16:35:59.320775688Z","updated":"2026-02-14T17:20:46.397582923Z"} -{"id":"NK-8hu7z1","title":"scrape full text button","description":"add this feature back in to the v2 ui and verify it is still working (not sure if we have any tests)","type":"feature","status":"open","priority":1,"labels":null,"assignee":"","created":"2026-02-14T17:27:49.815938946Z","updated":"2026-02-14T17:27:49.815938946Z"} +{"id":"NK-8hu7z1","title":"scrape full text button","description":"add this feature back in to the v2 ui and verify it is still working (not sure if we have any tests)","type":"feature","status":"closed","priority":1,"labels":null,"assignee":"","created":"2026-02-14T17:27:49.815938946Z","updated":"2026-02-14T17:58:19.083695149Z"} {"id":"NK-8rhpp3","title":"v2 frontend: when selected, don't change style of feed items","description":"Just leave them the same when j/k \"selects\" an item. No blue side thing, no change in background, it's distracting. Just scroll it to the right place.","type":"bug","status":"closed","priority":0,"labels":null,"assignee":"","created":"2026-02-14T00:39:50.01934312Z","updated":"2026-02-14T01:02:54.204739756Z"} {"id":"NK-8s75ec","title":"page size and performance","description":"Do some analysis of page size (css/html/javascript) on the legacy version vs. new version and give me a report. We want it to be small and fast! If the new version is much worse file some tickets to investigate further.","type":"task","status":"closed","priority":0,"labels":null,"assignee":"","created":"2026-02-13T20:16:13.898081788Z","updated":"2026-02-13T21:50:12.004391671Z"} {"id":"NK-9hx0y7","title":"Implement Frontend Login","description":"Create login page and auth logic in the new React frontend. Port functionality from legacy login.html.","type":"","status":"closed","priority":1,"labels":null,"assignee":"","created":"2026-02-13T05:44:01.546395342Z","updated":"2026-02-13T05:50:33.877452063Z"} @@ -88,6 +89,7 @@ {"id":"NK-zl922p","title":"slow scrolling in v2 ui compared to v1","description":"When using j/k to go to the next feed, they appeared instantly, now it feels like a slow scroll. Make it speedy again.","type":"bug","status":"closed","priority":0,"labels":null,"assignee":"","created":"2026-02-14T03:41:02.267766275Z","updated":"2026-02-14T04:27:10.368160216Z"} {"id":"NK-zs9we8","title":"UI Styling: Sidebar (Fixed, Gray Background)","description":"","type":"","status":"closed","priority":2,"labels":null,"assignee":"","created":"2026-02-13T18:05:16.188317572Z","updated":"2026-02-13T18:11:46.213993245Z"} {"id":"NK-zt4e32","title":"Implement Frontend Feed List","description":"Create feed list view in new frontend. Fetch feeds from API.","type":"task","status":"closed","priority":1,"labels":null,"assignee":"","created":"2026-02-13T05:44:01.58866298Z","updated":"2026-02-13T05:59:46.132148641Z"} +{"id":"NK-zvt8hi","title":"neko button always must be visible","description":"once you hide the sidebar with the nekoo button, there's no way to unhide it in the v2 ui after the recent changes","type":"bug","status":"open","priority":0,"labels":null,"assignee":"","created":"2026-02-14T17:58:18.468707709Z","updated":"2026-02-14T17:58:18.468707709Z"} {"id":"NK-d0ghccy","from_ticket_id":"NK-ric1zs","to_ticket_id":"NK-1phdpf","type":"created_from","created":"2026-02-13T04:26:55.875394997Z"} {"id":"NK-d0lgaab","from_ticket_id":"NK-sne5ox","to_ticket_id":"NK-0ppv3f","type":"created_from","created":"2026-02-13T15:05:23.289745853Z"} {"id":"NK-d1q1e8a","from_ticket_id":"NK-wjnczv","to_ticket_id":"NK-chns2b","type":"created_from","created":"2026-02-14T05:13:23.323181359Z"} diff --git a/frontend/src/App.css b/frontend/src/App.css index 97b7d65..7478777 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -16,45 +16,7 @@ body { /* Prevent body scroll */ } -.dashboard-header { - /* Legacy didn't really have a top header, but we need one for settings/logout. - Keeping it minimal/flat or matching sidebar bg if we want to blend in. - For now, let's make it dark gray to stand out less or match legacy dark mode if applicable. - Actually, let's keep it distinct but apply the font styles. */ - background: #222; - color: white; - padding: 0.5rem 1rem; - display: flex; - justify-content: space-between; - align-items: center; - font-weight: bold; -} - -.dashboard-header .logo { - margin: 0; - font-size: 2rem; - cursor: pointer; - line-height: 1; -} - -.nav-link, -.logout-btn { - font-weight: bold; - font-variant: small-caps; - text-transform: lowercase; - font-size: 1rem; - background: transparent; - border: none; - color: #ccc; - cursor: pointer; - margin-left: 1rem; -} - -.nav-link:hover, -.logout-btn:hover { - color: white; - text-decoration: underline; -} +/* Header styles removed as we moved to sidebar navigation */ .dashboard-content { display: flex; @@ -70,8 +32,8 @@ body { display: flex; flex-direction: column; overflow-y: auto; - padding: 1rem; transition: margin-left 0.4s ease; + /* No padding here, handled in FeedList */ } .dashboard-sidebar.hidden { @@ -91,18 +53,21 @@ body { margin: 0 auto; } -.logout-btn { +.fixed-toggle { + position: absolute; + top: 1rem; + left: 1rem; + z-index: 1000; background: transparent; - border: 1px solid rgba(255, 255, 255, 0.3); - color: white; - padding: 0.5rem 1rem; - border-radius: 4px; + border: none; + font-size: 2rem; + line-height: 1; cursor: pointer; - transition: all 0.2s; - font-size: 0.9rem; + padding: 0; + color: var(--text-color); + /* Inherit didn't work well if parent is transparent */ } -.logout-btn:hover { - background: rgba(255, 255, 255, 0.1); - border-color: rgba(255, 255, 255, 0.5); +.fixed-toggle:hover { + transform: scale(1.1); }
\ No newline at end of file diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 732d9ef..74ae89e 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -44,6 +44,15 @@ function Dashboard({ theme, setTheme }: { theme: string; setTheme: (t: string) = className={`dashboard ${sidebarVisible ? 'sidebar-visible' : 'sidebar-hidden'} theme-${theme}`} > <div className="dashboard-content"> + {!sidebarVisible && ( + <button + className="sidebar-toggle fixed-toggle" + onClick={() => setSidebarVisible(true)} + title="Show Sidebar" + > + 🐱 + </button> + )} <aside className={`dashboard-sidebar ${sidebarVisible ? '' : 'hidden'}`}> <FeedList theme={theme} setTheme={setTheme} setSidebarVisible={setSidebarVisible} /> </aside> diff --git a/frontend/src/components/FeedList.css b/frontend/src/components/FeedList.css index 1b83aed..41b8f73 100644 --- a/frontend/src/components/FeedList.css +++ b/frontend/src/components/FeedList.css @@ -9,6 +9,11 @@ margin: 0 0 1rem 0; line-height: 1; cursor: pointer; + position: sticky; + top: 0; + background: var(--sidebar-bg); + z-index: 10; + padding-bottom: 0.5rem; } .search-section { |
