From 68c0a3df9bf9c2d97faf5fee9da90ed93a65f2a0 Mon Sep 17 00:00:00 2001 From: shiva raj badu Date: Thu, 2 Apr 2026 12:51:36 +0545 Subject: [PATCH] feat: Providers logs and UI display --- .../Components/DashboardSidebar.tsx | 12 ++++++++- .../(dashboard)/settings/PrivacySettings.tsx | 4 +-- .../(dashboard)/settings/SettingSideBar.tsx | 10 ++++++-- .../nextjs/public/providers/claude-color.svg | 1 + .../nextjs/public/providers/comfyui-color.svg | 1 + .../nextjs/public/providers/gemini-color.svg | 1 + .../nextjs/public/providers/ollama.svg | 1 + .../{image-provider.png => pexel.png} | Bin .../nextjs/public/providers/pixabay.png | Bin 0 -> 17448 bytes .../servers/nextjs/utils/providerConstants.ts | 24 +++++++++--------- .../modern/IntroSlideLayout.tsx | 2 +- 11 files changed, 38 insertions(+), 18 deletions(-) create mode 100644 electron/servers/nextjs/public/providers/claude-color.svg create mode 100644 electron/servers/nextjs/public/providers/comfyui-color.svg create mode 100644 electron/servers/nextjs/public/providers/gemini-color.svg create mode 100644 electron/servers/nextjs/public/providers/ollama.svg rename electron/servers/nextjs/public/providers/{image-provider.png => pexel.png} (100%) create mode 100644 electron/servers/nextjs/public/providers/pixabay.png 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 0000000000000000000000000000000000000000..c1962f58e2703178f74c269a5d1fbac54f792d92 GIT binary patch literal 17448 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�HaC}J~x0Nwx5_*Aj) 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 = { 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", }),