fix
This commit is contained in:
6
build.ts
6
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)) {
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
15
src/App.tsx
15
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={<Navigation activeTab={activeTab()} onTabSelect={setActiveTab} />}
|
||||
>
|
||||
<box style={{ padding: 1 }}>{renderContent()}</box>
|
||||
<box style={{ padding: 1 }}>
|
||||
<ErrorBoundary fallback={(err) => (
|
||||
<box border padding={2}>
|
||||
<text fg="red">
|
||||
Error rendering tab: {err?.message ?? String(err)}{"\n"}
|
||||
Press a number key (1-5) to switch tabs.
|
||||
</text>
|
||||
</box>
|
||||
)}>
|
||||
{renderContent()}
|
||||
</ErrorBoundary>
|
||||
</box>
|
||||
</Layout>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
<box flexDirection="row" justifyContent="space-between" marginTop={props.compact ? 0 : 1}>
|
||||
<box flexDirection="row" gap={1}>
|
||||
<Show when={(props.podcast.categories ?? []).length > 0}>
|
||||
{(props.podcast.categories ?? []).slice(0, 2).map((cat) => (
|
||||
<text fg="yellow">[{cat}]</text>
|
||||
))}
|
||||
<For each={(props.podcast.categories ?? []).slice(0, 2)}>
|
||||
{(cat) => <text fg="yellow">[{cat}]</text>}
|
||||
</For>
|
||||
</Show>
|
||||
</box>
|
||||
|
||||
|
||||
@@ -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,7 +56,8 @@ export function SettingsScreen(props: SettingsScreenProps) {
|
||||
</box>
|
||||
|
||||
<box flexDirection="row" gap={1}>
|
||||
{SECTIONS.map((section, index) => (
|
||||
<For each={SECTIONS}>
|
||||
{(section, index) => (
|
||||
<box
|
||||
border
|
||||
padding={0}
|
||||
@@ -64,10 +65,11 @@ export function SettingsScreen(props: SettingsScreenProps) {
|
||||
onMouseDown={() => setActiveSection(section.id)}
|
||||
>
|
||||
<text fg={activeSection() === section.id ? theme.text : theme.textMuted}>
|
||||
[{index + 1}] {section.label}
|
||||
[{index() + 1}] {section.label}
|
||||
</text>
|
||||
</box>
|
||||
))}
|
||||
)}
|
||||
</For>
|
||||
</box>
|
||||
|
||||
<box border flexGrow={1} padding={1} flexDirection="column" gap={1}>
|
||||
|
||||
@@ -31,7 +31,7 @@ export function TrendingShows(props: TrendingShowsProps) {
|
||||
</Show>
|
||||
|
||||
<Show when={!props.isLoading && props.podcasts.length > 0}>
|
||||
<scrollbox height="100%">
|
||||
<scrollbox height={15}>
|
||||
<box flexDirection="column">
|
||||
<For each={props.podcasts}>
|
||||
{(podcast, index) => (
|
||||
|
||||
@@ -33,4 +33,4 @@ render(() => (
|
||||
</ThemeProvider>
|
||||
</ToastProvider>
|
||||
</RendererSetup>
|
||||
))
|
||||
), { useThread: false })
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user