From 03e69d04dc97a4fd88361f9eec7176e237ba30e0 Mon Sep 17 00:00:00 2001 From: Michael Freno Date: Thu, 5 Feb 2026 18:29:05 -0500 Subject: [PATCH] fix --- build.ts | 6 ++- package.json | 2 +- src/App.tsx | 15 ++++++- src/components/PodcastCard.tsx | 8 ++-- src/components/SettingsScreen.tsx | 28 +++++++------ src/components/TrendingShows.tsx | 2 +- src/index.tsx | 2 +- tasks/podcast-tui-app/README.md | 68 +++++++++++++++---------------- 8 files changed, 74 insertions(+), 57 deletions(-) diff --git a/build.ts b/build.ts index 2e0eaa8..53bcd6a 100644 --- a/build.ts +++ b/build.ts @@ -30,7 +30,11 @@ const platformKey = `${platform}-${arch}` const platformPkg = platformMap[platformKey] if (platformPkg) { - const libName = platform === "win32" ? "opentui.dll" : "libopentui.dylib" + const libName = platform === "win32" + ? "opentui.dll" + : platform === "darwin" + ? "libopentui.dylib" + : "libopentui.so" const srcPath = join("node_modules", `@opentui/core-${platformPkg}`, libName) if (existsSync(srcPath)) { diff --git a/package.json b/package.json index 3f232cb..e7331cb 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@opentui/solid": "^0.1.77", "babel-preset-solid": "1.9.9", "date-fns": "^4.1.0", - "solid-js": "^1.9.11", + "solid-js": "^1.9.9", "uuid": "^13.0.0", "zustand": "^5.0.11" } diff --git a/src/App.tsx b/src/App.tsx index 9e49145..c985d55 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,4 +1,4 @@ -import { createSignal } from "solid-js"; +import { createSignal, ErrorBoundary } from "solid-js"; import { Layout } from "./components/Layout"; import { Navigation } from "./components/Navigation"; import { TabNavigation } from "./components/TabNavigation"; @@ -191,7 +191,18 @@ export function App() { } footer={} > - {renderContent()} + + ( + + + Error rendering tab: {err?.message ?? String(err)}{"\n"} + Press a number key (1-5) to switch tabs. + + + )}> + {renderContent()} + + ); } diff --git a/src/components/PodcastCard.tsx b/src/components/PodcastCard.tsx index 678501e..ee82b33 100644 --- a/src/components/PodcastCard.tsx +++ b/src/components/PodcastCard.tsx @@ -2,7 +2,7 @@ * PodcastCard component - Reusable card for displaying podcast info */ -import { Show } from "solid-js" +import { Show, For } from "solid-js" import type { Podcast } from "../types/podcast" type PodcastCardProps = { @@ -54,9 +54,9 @@ export function PodcastCard(props: PodcastCardProps) { 0}> - {(props.podcast.categories ?? []).slice(0, 2).map((cat) => ( - [{cat}] - ))} + + {(cat) => [{cat}]} + diff --git a/src/components/SettingsScreen.tsx b/src/components/SettingsScreen.tsx index 3a0e8c7..969df48 100644 --- a/src/components/SettingsScreen.tsx +++ b/src/components/SettingsScreen.tsx @@ -1,4 +1,4 @@ -import { createSignal } from "solid-js" +import { createSignal, For } from "solid-js" import { useKeyboard } from "@opentui/solid" import { SourceManager } from "./SourceManager" import { useTheme } from "../context/ThemeContext" @@ -56,18 +56,20 @@ export function SettingsScreen(props: SettingsScreenProps) { - {SECTIONS.map((section, index) => ( - setActiveSection(section.id)} - > - - [{index + 1}] {section.label} - - - ))} + + {(section, index) => ( + setActiveSection(section.id)} + > + + [{index() + 1}] {section.label} + + + )} + diff --git a/src/components/TrendingShows.tsx b/src/components/TrendingShows.tsx index 367ce7d..06ca81e 100644 --- a/src/components/TrendingShows.tsx +++ b/src/components/TrendingShows.tsx @@ -31,7 +31,7 @@ export function TrendingShows(props: TrendingShowsProps) { 0}> - + {(podcast, index) => ( diff --git a/src/index.tsx b/src/index.tsx index 654fe92..428e4a9 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -33,4 +33,4 @@ render(() => ( -)) +), { useThread: false }) diff --git a/tasks/podcast-tui-app/README.md b/tasks/podcast-tui-app/README.md index 0eb514b..7fd7ee0 100644 --- a/tasks/podcast-tui-app/README.md +++ b/tasks/podcast-tui-app/README.md @@ -74,11 +74,11 @@ Status legend: [ ] todo, [~] in-progress, [x] done ## Phase 6: Search Functionality 🔍 **Implement multi-source search interface** -- [ ] 06 — Implement multi-source search interface → `06-search.md` -- [ ] 33 — Create search interface → `33-search-interface.md` -- [ ] 34 — Implement multi-source search → `34-multi-source-search.md` -- [ ] 35 — Add search results display → `35-search-results.md` -- [ ] 36 — Build search history with persistent storage → `36-search-history.md` +- [x] 06 — Implement multi-source search interface → `06-search.md` +- [x] 33 — Create search interface → `33-search-interface.md` +- [x] 34 — Implement multi-source search → `34-multi-source-search.md` +- [x] 35 — Add search results display → `35-search-results.md` +- [x] 36 — Build search history with persistent storage → `36-search-history.md` **Dependencies:** 05 -> 06 -> 07 -> 08 -> 09 -> 10 -> 11 -> 12 @@ -87,11 +87,11 @@ Status legend: [ ] todo, [~] in-progress, [x] done ## Phase 7: Discover Feed 🌟 **Build discover page with popular shows** -- [ ] 07 — Build discover feed with popular shows → `07-discover.md` -- [ ] 37 — Create popular shows data structure → `37-popular-shows.md` -- [ ] 38 — Build discover page component → `38-discover-page.md` -- [ ] 39 — Add trending shows display → `39-trending-shows.md` -- [ ] 40 — Implement category filtering → `40-category-filtering.md` +- [x] 07 — Build discover feed with popular shows → `07-discover.md` +- [x] 37 — Create popular shows data structure → `37-popular-shows.md` +- [x] 38 — Build discover page component → `38-discover-page.md` +- [x] 39 — Add trending shows display → `39-trending-shows.md` +- [x] 40 — Implement category filtering → `40-category-filtering.md` **Dependencies:** 06 -> 07 -> 08 -> 09 -> 10 -> 11 -> 12 @@ -100,11 +100,11 @@ Status legend: [ ] todo, [~] in-progress, [x] done ## Phase 8: Player Component 🎵 **Create player UI with waveform visualization** -- [ ] 08 — Create player UI with waveform visualization → `08-player.md` -- [ ] 41 — Create player UI layout → `41-player-layout.md` -- [ ] 42 — Implement playback controls → `42-playback-controls.md` -- [ ] 43 — Build ASCII waveform visualization → `43-waveform-visualization.md` -- [ ] 44 — Add progress tracking and seek → `44-progress-tracking.md` +- [x] 08 — Create player UI with waveform visualization → `08-player.md` +- [x] 41 — Create player UI layout → `41-player-layout.md` +- [x] 42 — Implement playback controls → `42-playback-controls.md` +- [x] 43 — Build ASCII waveform visualization → `43-waveform-visualization.md` +- [x] 44 — Add progress tracking and seek → `44-progress-tracking.md` - [ ] 45 — Implement audio integration (system/external player) → `45-audio-integration.md` **Dependencies:** 07 -> 08 -> 09 -> 10 -> 11 -> 12 @@ -114,11 +114,11 @@ Status legend: [ ] todo, [~] in-progress, [x] done ## Phase 9: Settings & Configuration ⚙️ **Build settings screen and preferences** -- [ ] 09 — Build settings screen and preferences → `09-settings.md` -- [ ] 46 — Create settings screen → `46-settings-screen.md` -- [ ] 47 — Add source management UI → `47-source-management-ui.md` -- [ ] 48 — Build user preferences → `48-user-preferences.md` -- [ ] 49 — Implement data persistence (localStorage/file-based) → `49-data-persistence.md` +- [x] 09 — Build settings screen and preferences → `09-settings.md` +- [x] 46 — Create settings screen → `46-settings-screen.md` +- [x] 47 — Add source management UI → `47-source-management-ui.md` +- [x] 48 — Build user preferences → `48-user-preferences.md` +- [x] 49 — Implement data persistence (localStorage/file-based) → `49-data-persistence.md` **Dependencies:** 08 -> 09 -> 10 -> 11 -> 12 @@ -127,14 +127,14 @@ Status legend: [ ] todo, [~] in-progress, [x] done ## Phase 10: Theme System 🎨 **Implement theming with Catppuccin, Gruvbox, Tokyo, Nord, and custom themes** -- [ ] 59 — Create theme system architecture → `59-theme-system.md` -- [ ] 60 — Implement default theme (system terminal) → `60-default-theme.md` -- [ ] 61 — Add Catppuccin theme → `61-catppuccin-theme.md` -- [ ] 62 — Add Gruvbox theme → `62-gruvbox-theme.md` -- [ ] 63 — Add Tokyo theme → `63-tokyo-theme.md` -- [ ] 64 — Add Nord theme → `64-nord-theme.md` +- [x] 59 — Create theme system architecture → `59-theme-system.md` +- [x] 60 — Implement default theme (system terminal) → `60-default-theme.md` +- [x] 61 — Add Catppuccin theme → `61-catppuccin-theme.md` +- [x] 62 — Add Gruvbox theme → `62-gruvbox-theme.md` +- [x] 63 — Add Tokyo theme → `63-tokyo-theme.md` +- [x] 64 — Add Nord theme → `64-nord-theme.md` - [ ] 65 — Implement custom theme editor → `65-custom-theme.md` -- [ ] 66 — Add theme selector in settings → `66-theme-selector.md` +- [x] 66 — Add theme selector in settings → `66-theme-selector.md` **Dependencies:** 09 -> 59 -> 60 -> 61 -> 62 -> 63 -> 64 -> 65 -> 66 -> 10 @@ -143,11 +143,11 @@ Status legend: [ ] todo, [~] in-progress, [x] done ## Phase 11: State Management & Data Layer 🗄️ **Create global state store and data layer** -- [ ] 10 — Create global state store and data layer → `10-state-management.md` -- [ ] 50 — Create global state store (Signals) → `50-global-state-store.md` -- [ ] 51 — Implement API client for podcast sources → `51-api-client.md` -- [ ] 52 — Add data fetching and caching → `52-data-fetching-caching.md` -- [ ] 53 — Build file-based storage for sync → `53-file-based-storage.md` +- [x] 10 — Create global state store and data layer → `10-state-management.md` +- [x] 50 — Create global state store (Signals) → `50-global-state-store.md` +- [x] 51 — Implement API client for podcast sources → `51-api-client.md` +- [x] 52 — Add data fetching and caching → `52-data-fetching-caching.md` +- [x] 53 — Build file-based storage for sync → `53-file-based-storage.md` **Dependencies:** 66 -> 10 @@ -160,8 +160,8 @@ Status legend: [ ] todo, [~] in-progress, [x] done - [ ] 54 — Set up testing framework (snapshot testing) → `54-testing-framework.md` - [ ] 55 — Write component tests → `55-component-tests.md` - [ ] 56 — Add keyboard interaction tests → `56-keyboard-tests.md` -- [ ] 57 — Implement error handling → `57-error-handling.md` -- [ ] 58 — Add loading states and transitions → `58-loading-states.md` +- [x] 57 — Implement error handling → `57-error-handling.md` +- [x] 58 — Add loading states and transitions → `58-loading-states.md` **Dependencies:** 10 -> 11