diff --git a/packages/app/src/components/content/ContentPanel.vue b/packages/app/src/components/content/ContentPanel.vue index 522075e1..288d82db 100644 --- a/packages/app/src/components/content/ContentPanel.vue +++ b/packages/app/src/components/content/ContentPanel.vue @@ -55,8 +55,9 @@
- @@ -70,8 +71,9 @@ :series="selectedTVSeries" @back="closeTVSeriesDetail" /> - @@ -87,8 +89,9 @@ /> - - getRendererForContentType('film')) +const songRenderer = computed(() => getRendererForContentType('song')) + const { isDark } = useTheme() const { panelOpen, diff --git a/packages/app/src/plugins/index.ts b/packages/app/src/plugins/index.ts index c73669c2..1bdde1ee 100644 --- a/packages/app/src/plugins/index.ts +++ b/packages/app/src/plugins/index.ts @@ -1,4 +1,4 @@ -import { registerPlugin } from '@aiui/core' +import { registerPlugin, registerRenderer } from '@aiui/core' export async function initializePlugins(): Promise { // Register built-in AI provider @@ -20,7 +20,14 @@ export async function initializePlugins(): Promise { }, }) + // Register built-in content renderers + const { filmRenderer } = await import('./renderers/film-renderer') + const { songRenderer } = await import('./renderers/song-renderer') + registerRenderer(filmRenderer) + registerRenderer(songRenderer) + if (import.meta.env.DEV) { console.log('[AIUI] Plugins initialized:', claudeProvider.id) + console.log('[AIUI] Renderers registered: film, song') } } diff --git a/packages/app/src/plugins/renderers/film-renderer.ts b/packages/app/src/plugins/renderers/film-renderer.ts new file mode 100644 index 00000000..db94b182 --- /dev/null +++ b/packages/app/src/plugins/renderers/film-renderer.ts @@ -0,0 +1,12 @@ +import { defineAsyncComponent } from 'vue' +import type { RendererDefinition } from '@aiui/core' + +export const filmRenderer: RendererDefinition = { + id: 'film', + name: 'Film Renderer', + contentType: 'film', + surfaces: ['chat-preview', 'panel-preview', 'panel-play'], + chatPreview: defineAsyncComponent(() => import('@/components/content/FilmGrid.vue')), + panelPreview: defineAsyncComponent(() => import('@/components/content/FilmGrid.vue')), + panelPlay: defineAsyncComponent(() => import('@/components/content/FilmDetail.vue')), +} diff --git a/packages/app/src/plugins/renderers/song-renderer.ts b/packages/app/src/plugins/renderers/song-renderer.ts new file mode 100644 index 00000000..9db90643 --- /dev/null +++ b/packages/app/src/plugins/renderers/song-renderer.ts @@ -0,0 +1,12 @@ +import { defineAsyncComponent } from 'vue' +import type { RendererDefinition } from '@aiui/core' + +export const songRenderer: RendererDefinition = { + id: 'song', + name: 'Song Renderer', + contentType: 'song', + surfaces: ['chat-preview', 'panel-preview', 'panel-play'], + chatPreview: defineAsyncComponent(() => import('@/components/content/SongGrid.vue')), + panelPreview: defineAsyncComponent(() => import('@/components/content/SongGrid.vue')), + panelPlay: defineAsyncComponent(() => import('@/components/content/SongDetail.vue')), +}