diff --git a/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/Components/DashboardSidebar.tsx b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/Components/DashboardSidebar.tsx index bc1c6f50..1e0fbf9f 100644 --- a/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/Components/DashboardSidebar.tsx +++ b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/Components/DashboardSidebar.tsx @@ -6,6 +6,9 @@ import { usePathname } from "next/navigation"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { trackEvent, MixpanelEvent } from "@/utils/mixpanel"; +import { useSelector } from "react-redux"; +import { RootState } from "@/store/store"; +import { IMAGE_PROVIDERS, LLM_PROVIDERS } from "@/utils/providerConstants"; @@ -28,6 +31,10 @@ const DashboardSidebar = () => { const activeTab = pathname.split("?")[0].split("/").pop(); const router = useRouter(); + const { llm_config } = useSelector((state: RootState) => state.userConfig) + const textProviderIcon = LLM_PROVIDERS[llm_config.LLM as keyof typeof LLM_PROVIDERS]?.icon + const imageProviderIcon = IMAGE_PROVIDERS[llm_config.IMAGE_PROVIDER as keyof typeof IMAGE_PROVIDERS]?.icon || '/providers/pexel.png' + @@ -114,7 +121,10 @@ const DashboardSidebar = () => { aria-label={itemLabel} title={itemLabel} > - +
+ image provider + text provider +
{itemLabel} ); diff --git a/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/settings/PrivacySettings.tsx b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/settings/PrivacySettings.tsx index fb84a5c5..51c31173 100644 --- a/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/settings/PrivacySettings.tsx +++ b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/settings/PrivacySettings.tsx @@ -68,8 +68,8 @@ const PrivacySettings = () => {

When enabled, Presenton collects anonymous usage data to help us - understand how the app is used and improve your experience. No - personal information or presentation content is ever collected. + understand how the app is used and improve your experience. No + personal information or presentation content is ever collected.

diff --git a/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/settings/SettingSideBar.tsx b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/settings/SettingSideBar.tsx index 8f6ff0f5..84ea55de 100644 --- a/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/settings/SettingSideBar.tsx +++ b/electron/servers/nextjs/app/(presentation-generator)/(dashboard)/settings/SettingSideBar.tsx @@ -1,7 +1,13 @@ import React from 'react' import { Shield } from 'lucide-react' +import { IMAGE_PROVIDERS, LLM_PROVIDERS } from '@/utils/providerConstants' +import { useSelector } from 'react-redux' +import { RootState } from '@/store/store' const SettingSideBar = ({ mode, setMode, selectedProvider, setSelectedProvider }: { mode: 'nanobanana' | 'presenton', setMode: (mode: 'nanobanana' | 'presenton') => void, selectedProvider: 'text-provider' | 'image-provider' | 'privacy', setSelectedProvider: (provider: 'text-provider' | 'image-provider' | 'privacy') => void }) => { + const { llm_config } = useSelector((state: RootState) => state.userConfig) + const textProviderIcon = LLM_PROVIDERS[llm_config.LLM as keyof typeof LLM_PROVIDERS]?.icon + const imageProviderIcon = IMAGE_PROVIDERS[llm_config.IMAGE_PROVIDER as keyof typeof IMAGE_PROVIDERS]?.icon || '/providers/pexel.png' return (

FILTER BY:

@@ -40,13 +46,13 @@ const SettingSideBar = ({ mode, setMode, selectedProvider, setSelectedProvider } diff --git a/electron/servers/nextjs/public/providers/claude-color.svg b/electron/servers/nextjs/public/providers/claude-color.svg new file mode 100644 index 00000000..62dc0db1 --- /dev/null +++ b/electron/servers/nextjs/public/providers/claude-color.svg @@ -0,0 +1 @@ +Claude \ No newline at end of file diff --git a/electron/servers/nextjs/public/providers/comfyui-color.svg b/electron/servers/nextjs/public/providers/comfyui-color.svg new file mode 100644 index 00000000..554a3bb5 --- /dev/null +++ b/electron/servers/nextjs/public/providers/comfyui-color.svg @@ -0,0 +1 @@ +ComfyUI \ No newline at end of file diff --git a/electron/servers/nextjs/public/providers/gemini-color.svg b/electron/servers/nextjs/public/providers/gemini-color.svg new file mode 100644 index 00000000..f1cf3575 --- /dev/null +++ b/electron/servers/nextjs/public/providers/gemini-color.svg @@ -0,0 +1 @@ +Gemini \ No newline at end of file diff --git a/electron/servers/nextjs/public/providers/ollama.svg b/electron/servers/nextjs/public/providers/ollama.svg new file mode 100644 index 00000000..cc887e3d --- /dev/null +++ b/electron/servers/nextjs/public/providers/ollama.svg @@ -0,0 +1 @@ +Ollama \ No newline at end of file diff --git a/electron/servers/nextjs/public/providers/image-provider.png b/electron/servers/nextjs/public/providers/pexel.png similarity index 100% rename from electron/servers/nextjs/public/providers/image-provider.png rename to electron/servers/nextjs/public/providers/pexel.png diff --git a/electron/servers/nextjs/public/providers/pixabay.png b/electron/servers/nextjs/public/providers/pixabay.png new file mode 100644 index 00000000..c1962f58 Binary files /dev/null and b/electron/servers/nextjs/public/providers/pixabay.png differ diff --git a/electron/servers/nextjs/utils/providerConstants.ts b/electron/servers/nextjs/utils/providerConstants.ts index d4fb7e6d..4dfc6c4b 100644 --- a/electron/servers/nextjs/utils/providerConstants.ts +++ b/electron/servers/nextjs/utils/providerConstants.ts @@ -31,7 +31,7 @@ export const IMAGE_PROVIDERS: Record = { value: "pexels", label: "Pexels", description: "Free stock photo and video platform", - icon: "/icons/pexels.png", + icon: "/providers/pexel.png", requiresApiKey: true, apiKeyField: "PEXELS_API_KEY", apiKeyFieldLabel: "Pexels API Key", @@ -40,7 +40,7 @@ export const IMAGE_PROVIDERS: Record = { value: "pixabay", label: "Pixabay", description: "Free images and videos", - icon: "/icons/pixabay.png", + icon: "/providers/pixabay.png", requiresApiKey: true, apiKeyField: "PIXABAY_API_KEY", apiKeyFieldLabel: "Pixabay API Key", @@ -49,7 +49,7 @@ export const IMAGE_PROVIDERS: Record = { value: "dall-e-3", label: "DALL-E 3", description: "OpenAI's image generation model", - icon: "/icons/dall-e.png", + icon: "/providers/openai.png", requiresApiKey: true, apiKeyField: "OPENAI_API_KEY", apiKeyFieldLabel: "OpenAI API Key", @@ -58,7 +58,7 @@ export const IMAGE_PROVIDERS: Record = { value: "gpt-image-1.5", label: "GPT Image 1.5", description: "OpenAI's image generation model", - icon: "/icons/gpt.png", + icon: "/providers/openai.png", requiresApiKey: true, apiKeyField: "OPENAI_API_KEY", apiKeyFieldLabel: "OpenAI API Key", @@ -67,7 +67,7 @@ export const IMAGE_PROVIDERS: Record = { value: "gemini_flash", label: "Gemini Flash", description: "Google's fast image generation model", - icon: "/icons/google.png", + icon: "/providers/gemini-color.svg", requiresApiKey: true, apiKeyField: "GOOGLE_API_KEY", apiKeyFieldLabel: "Google API Key", @@ -76,7 +76,7 @@ export const IMAGE_PROVIDERS: Record = { value: "nanobanana_pro", label: "NanoBanana Pro", description: "Google's advanced image generation model", - icon: "/icons/google.png", + icon: "/providers/gemini-color.svg", requiresApiKey: true, apiKeyField: "GOOGLE_API_KEY", apiKeyFieldLabel: "Google API Key", @@ -85,7 +85,7 @@ export const IMAGE_PROVIDERS: Record = { value: "comfyui", label: "ComfyUI", description: "Use your local ComfyUI server with custom workflows", - icon: "/icons/comfyui.png", + icon: "/providers/comfyui-color.svg", requiresApiKey: false, apiKeyField: "COMFYUI_URL", apiKeyFieldLabel: "ComfyUI Server URL", @@ -97,34 +97,34 @@ export const LLM_PROVIDERS: Record = { value: "codex", label: "ChatGPT", description: "ChatGPT Plus/Pro via OAuth", - icon: "/icons/chatgpt.png", + icon: "/providers/openai.png", }, openai: { value: "openai", label: "OpenAI", description: "OpenAI's latest text generation model", url: "https://api.openai.com/v1", - icon: "/icons/openai.png", + icon: "/providers/openai.png", }, google: { value: "google", label: "Google", description: "Google's primary text generation model", url: "https://api.google.com/v1", - icon: "/icons/google.png", + icon: "/providers/gemini-color.svg", }, anthropic: { value: "anthropic", label: "Anthropic", description: "Anthropic's Claude models", url: "https://api.anthropic.com/v1", - icon: "/icons/anthropic.png", + icon: "/providers/claude-color.svg", }, ollama: { value: "ollama", label: "Ollama", description: "Ollama's primary text generation model", - icon: "/icons/ollama.png", + icon: "/providers/ollama.svg", }, custom: { value: "custom", diff --git a/servers/nextjs/app/presentation-templates/modern/IntroSlideLayout.tsx b/servers/nextjs/app/presentation-templates/modern/IntroSlideLayout.tsx index 235e8449..56f92b42 100644 --- a/servers/nextjs/app/presentation-templates/modern/IntroSlideLayout.tsx +++ b/servers/nextjs/app/presentation-templates/modern/IntroSlideLayout.tsx @@ -28,7 +28,7 @@ const introPitchDeckSchema = z.object({ .meta({ description: "Optional intro card shown below description" }), image: ImageSchema.default({ __image_url__: - "https://images.unsplash.com/photo-1500530855697-b586d89ba3ee?q=80&w=1600&auto=format&fit=crop", + "", __image_prompt__: "Abstract business background", }),