From d28c497ff6273ca65b5110070d5d75c88e3f7ba9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E5=91=98=E9=98=BF=E6=B1=9F=28Relakkes?= =?UTF-8?q?=29?= Date: Thu, 15 Oct 2026 22:03:31 +0800 Subject: [PATCH] feat(desktop): show the Modelflare logo on its provider preset --- .../pages/settings/ProviderSettings.test.tsx | 3 +++ desktop/src/pages/settings/ProviderSettings.tsx | 10 ++++++++-- docs/images/sponsors/modelflare-logo.png | Bin 0 -> 22863 bytes 3 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 docs/images/sponsors/modelflare-logo.png diff --git a/desktop/src/pages/settings/ProviderSettings.test.tsx b/desktop/src/pages/settings/ProviderSettings.test.tsx index 4d32d592a5..9e536daeab 100644 --- a/desktop/src/pages/settings/ProviderSettings.test.tsx +++ b/desktop/src/pages/settings/ProviderSettings.test.tsx @@ -195,6 +195,9 @@ describe('active sponsor providers', () => { expect(sponsor.nextElementSibling).toBe(dialog.getByRole('button', { name: 'Atlas Cloud' })) expect(within(sponsor).getByText('New')).toBeInTheDocument() expect(within(sponsor).getByLabelText('Sponsor')).toBeInTheDocument() + expect(sponsor.querySelector('img')?.getAttribute('src')).toContain('modelflare-logo') + expect(dialog.getByRole('button', { name: 'AruHub' }).querySelector('img')?.getAttribute('src')).toContain('aruhub-logo') + expect(dialog.getByRole('button', { name: 'Atlas Cloud' }).querySelector('img')).toBeNull() expect(dialog.queryByRole('button', { name: 'ApiSmart' })).not.toBeInTheDocument() fireEvent.click(sponsor) diff --git a/desktop/src/pages/settings/ProviderSettings.tsx b/desktop/src/pages/settings/ProviderSettings.tsx index edc58ef515..d13d04035a 100644 --- a/desktop/src/pages/settings/ProviderSettings.tsx +++ b/desktop/src/pages/settings/ProviderSettings.tsx @@ -30,6 +30,7 @@ import { Wrench, } from 'lucide-react' import aruhubLogo from '../../../../docs/images/sponsors/aruhub-logo.png' +import modelflareLogo from '../../../../docs/images/sponsors/modelflare-logo.png' import { useSettingsStore } from '../../stores/settingsStore' import { useProviderStore } from '../../stores/providerStore' import { useUIStore } from '../../stores/uiStore' @@ -69,6 +70,11 @@ import { getDesktopHost } from '../../lib/desktopHost' import { API_KEY_JSON_PLACEHOLDER, maskSettingsJsonSecrets, restoreSettingsJsonSecrets, stripProviderSettingsJsonEnv } from '../../lib/providerSettingsJson' import { cx } from '@/lib/cx' +const SPONSOR_LOGOS: Record = { + aruhub: aruhubLogo, + modelflare: modelflareLogo, +} + /** Section label inside the provider dialog — the same 13px label as a settings section. */ const FORM_SECTION_LABEL = 'block text-[13px] font-semibold text-[var(--color-text-secondary)]' /** Field label matching `Input`'s own, for the fields that cannot use `Input` directly. */ @@ -1730,9 +1736,9 @@ function ProviderFormModal({ open, onClose, mode, provider, presets, browserMode selected={selectedPreset.id === preset.id} onClick={() => handlePresetChange(preset)} > - {preset.id === 'aruhub' && } + {SPONSOR_LOGOS[preset.id] && } {presetLabel(preset)} - {(preset.id === 'aruhub' || preset.id === 'modelflare') && } + {SPONSOR_LOGOS[preset.id] && } {preset.isNew && ( {t('settings.providers.new')} diff --git a/docs/images/sponsors/modelflare-logo.png b/docs/images/sponsors/modelflare-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..05613790d6a009c78f7c1f348a374372f7c99cd4 GIT binary patch literal 22863 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 Z>BJyaM)XcZT|?8iVA>)P>Sd$zTg$$*a< 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