feat: update branding (#19719)

Co-authored-by: twwu <twwu@dify.ai>
This commit is contained in:
Nite Knite
2025-05-15 12:38:20 +08:00
committed by GitHub
parent b292990075
commit dc75a10989
19 changed files with 122 additions and 67 deletions

View File

@@ -16,7 +16,7 @@ import List from '@/app/components/base/chat/chat-with-history/sidebar/list'
import MenuDropdown from '@/app/components/share/text-generation/menu-dropdown'
import Confirm from '@/app/components/base/confirm'
import RenameModal from '@/app/components/base/chat/chat-with-history/sidebar/rename-modal'
import LogoSite from '@/app/components/base/logo/logo-site'
import DifyLogo from '@/app/components/base/logo/dify-logo'
import type { ConversationItem } from '@/models/share'
import cn from '@/utils/classnames'
@@ -141,14 +141,14 @@ const Sidebar = ({ isPanel }: Props) => {
<div className='shrink-0'>
{!appData?.custom_config?.remove_webapp_brand && (
<div className={cn(
'flex shrink-0 items-center gap-1.5 px-2',
'flex shrink-0 items-center gap-1.5 px-1',
)}>
<div className='system-2xs-medium-uppercase text-text-tertiary'>{t('share.chat.poweredBy')}</div>
{appData?.custom_config?.replace_webapp_logo && (
<img src={appData?.custom_config?.replace_webapp_logo} alt='logo' className='block h-5 w-auto' />
)}
{!appData?.custom_config?.replace_webapp_logo && (
<LogoSite className='!h-5' />
<DifyLogo size='small' />
)}
</div>
)}

View File

@@ -11,7 +11,7 @@ import Tooltip from '@/app/components/base/tooltip'
import ActionButton from '@/app/components/base/action-button'
import Divider from '@/app/components/base/divider'
import ViewFormDropdown from '@/app/components/base/chat/embedded-chatbot/inputs-form/view-form-dropdown'
import LogoSite from '@/app/components/base/logo/logo-site'
import DifyLogo from '@/app/components/base/logo/dify-logo'
import cn from '@/utils/classnames'
export type IHeaderProps = {
@@ -89,7 +89,7 @@ const Header: FC<IHeaderProps> = ({
<img src={appData?.custom_config?.replace_webapp_logo} alt='logo' className='block h-5 w-auto' />
)}
{!appData?.custom_config?.replace_webapp_logo && (
<LogoSite className='!h-5' />
<DifyLogo size='small' />
)}
</div>
)}
@@ -132,7 +132,7 @@ const Header: FC<IHeaderProps> = ({
return (
<div
className={cn('flex h-14 shrink-0 items-center justify-between rounded-t-2xl px-3')}
style={Object.assign({}, CssTransform(theme?.backgroundHeaderColorStyle ?? ''), CssTransform(theme?.headerBorderBottomStyle ?? '')) }
style={Object.assign({}, CssTransform(theme?.backgroundHeaderColorStyle ?? ''), CssTransform(theme?.headerBorderBottomStyle ?? ''))}
>
<div className="flex grow items-center space-x-3">
{customerIcon}

View File

@@ -19,7 +19,7 @@ import Loading from '@/app/components/base/loading'
import LogoHeader from '@/app/components/base/logo/logo-embedded-chat-header'
import Header from '@/app/components/base/chat/embedded-chatbot/header'
import ChatWrapper from '@/app/components/base/chat/embedded-chatbot/chat-wrapper'
import LogoSite from '@/app/components/base/logo/logo-site'
import DifyLogo from '@/app/components/base/logo/dify-logo'
import cn from '@/utils/classnames'
const Chatbot = () => {
@@ -118,7 +118,7 @@ const Chatbot = () => {
<img src={appData?.custom_config?.replace_webapp_logo} alt='logo' className='block h-5 w-auto' />
)}
{!appData?.custom_config?.replace_webapp_logo && (
<LogoSite className='!h-5' />
<DifyLogo size='small' />
)}
</div>
)}

View File

@@ -0,0 +1,45 @@
'use client'
import type { FC } from 'react'
import { WEB_PREFIX } from '@/config'
import classNames from '@/utils/classnames'
import useTheme from '@/hooks/use-theme'
export type LogoStyle = 'default' | 'monochromeWhite'
export const logoPathMap: Record<LogoStyle, string> = {
default: '/logo/logo.svg',
monochromeWhite: '/logo/logo-monochrome-white.svg',
}
export type LogoSize = 'large' | 'medium' | 'small'
export const logoSizeMap: Record<LogoSize, string> = {
large: 'w-16 h-7',
medium: 'w-12 h-[22px]',
small: 'w-9 h-4',
}
type DifyLogoProps = {
style?: LogoStyle
size?: LogoSize
className?: string
}
const DifyLogo: FC<DifyLogoProps> = ({
style = 'default',
size = 'medium',
className,
}) => {
const { theme } = useTheme()
const themedStyle = (theme === 'dark' && style === 'default') ? 'monochromeWhite' : style
return (
<img
src={`${WEB_PREFIX}${logoPathMap[themedStyle]}`}
className={classNames('block object-contain', logoSizeMap[size], className)}
alt='Dify logo'
/>
)
}
export default DifyLogo

View File

@@ -1,22 +0,0 @@
'use client'
import type { FC } from 'react'
import { WEB_PREFIX } from '@/config'
import classNames from '@/utils/classnames'
type LogoSiteProps = {
className?: string
}
const LogoSite: FC<LogoSiteProps> = ({
className,
}) => {
return (
<img
src={`${WEB_PREFIX}/logo/logo.png`}
className={classNames('block w-[22.651px] h-[24.5px]', className)}
alt='logo'
/>
)
}
export default LogoSite

View File

@@ -2,7 +2,7 @@
@layer components {
.premium-badge {
@apply shrink-0 relative inline-flex justify-center items-center rounded-md box-border border border-transparent text-white shadow-xs hover:shadow-lg bg-origin-border overflow-hidden;
@apply shrink-0 relative inline-flex justify-center items-center rounded-md box-border border border-transparent text-white shadow-xs hover:shadow-lg bg-origin-border overflow-hidden transition-all duration-100 ease-out;
background-clip: padding-box, border-box;
}
.allowHover {

View File

@@ -10,7 +10,7 @@ import {
RiLoader2Line,
RiPlayLargeLine,
} from '@remixicon/react'
import LogoSite from '@/app/components/base/logo/logo-site'
import DifyLogo from '@/app/components/base/logo/dify-logo'
import Switch from '@/app/components/base/switch'
import Button from '@/app/components/base/button'
import Divider from '@/app/components/base/divider'
@@ -246,7 +246,7 @@ const CustomWebAppBrand = () => {
<div className='system-2xs-medium-uppercase text-text-tertiary'>POWERED BY</div>
{webappLogo
? <img src={`${webappLogo}?hash=${imgKey}`} alt='logo' className='block h-5 w-auto' />
: <LogoSite className='!h-5' />
: <DifyLogo size='small' />
}
</>
)}
@@ -305,7 +305,7 @@ const CustomWebAppBrand = () => {
<div className='system-2xs-medium-uppercase text-text-tertiary'>POWERED BY</div>
{webappLogo
? <img src={`${webappLogo}?hash=${imgKey}`} alt='logo' className='block h-5 w-auto' />
: <LogoSite className='!h-5' />
: <DifyLogo size='small' />
}
</>
)}

View File

@@ -7,7 +7,7 @@ import Modal from '@/app/components/base/modal'
import Button from '@/app/components/base/button'
import type { LangGeniusVersionResponse } from '@/models/common'
import { IS_CE_EDITION } from '@/config'
import LogoSite from '@/app/components/base/logo/logo-site'
import DifyLogo from '@/app/components/base/logo/dify-logo'
import { noop } from 'lodash-es'
type IAccountSettingProps = {
@@ -28,21 +28,21 @@ export default function AccountAbout({
onClose={noop}
className='!w-[480px] !max-w-[480px] !px-6 !py-4'
>
<div className='relative pt-4'>
<div className='absolute -right-4 -top-2 flex h-8 w-8 cursor-pointer items-center justify-center' onClick={onCancel}>
<div>
<div className='absolute right-4 top-4 flex h-8 w-8 cursor-pointer items-center justify-center' onClick={onCancel}>
<RiCloseLine className='h-4 w-4 text-text-tertiary' />
</div>
<div>
<LogoSite className='mx-auto mb-2' />
<div className='mb-3 text-center text-xs font-normal text-text-tertiary'>Version {langeniusVersionInfo?.current_version}</div>
<div className='mb-4 text-center text-xs font-normal text-text-secondary'>
<div className='flex flex-col items-center gap-4 py-8'>
<DifyLogo size='large' className='mx-auto' />
<div className='text-center text-xs font-normal text-text-tertiary'>Version {langeniusVersionInfo?.current_version}</div>
<div className='flex flex-col items-center gap-2 text-center text-xs font-normal text-text-secondary'>
<div>© {dayjs().year()} LangGenius, Inc., Contributors.</div>
<div className='text-text-accent'>
{
IS_CE_EDITION
? <Link href={'https://github.com/langgenius/dify/blob/main/LICENSE'} target='_blank' rel='noopener noreferrer'>Open Source License</Link>
: <>
<Link href='https://dify.ai/privacy' target='_blank' rel='noopener noreferrer'>Privacy Policy</Link>,<span> </span>
<Link href='https://dify.ai/privacy' target='_blank' rel='noopener noreferrer'>Privacy Policy</Link>,&nbsp;
<Link href='https://dify.ai/terms' target='_blank' rel='noopener noreferrer'>Terms of Service</Link>
</>
}
@@ -51,7 +51,7 @@ export default function AccountAbout({
</div>
<div className='-mx-8 mb-4 h-[0.5px] bg-divider-regular' />
<div className='flex items-center justify-between'>
<div className='text-xs font-medium text-text-primary'>
<div className='text-xs font-medium text-text-tertiary'>
{
isLatest
? t('common.about.latestAvailable', { version: langeniusVersionInfo.latest_version })
@@ -59,7 +59,7 @@ export default function AccountAbout({
}
</div>
<div className='flex items-center'>
<Button className='mr-2'>
<Button className='mr-2' size='small'>
<Link
href={'https://github.com/langgenius/dify/releases'}
target='_blank' rel='noopener noreferrer'
@@ -69,7 +69,7 @@ export default function AccountAbout({
</Button>
{
!isLatest && !IS_CE_EDITION && (
<Button variant='primary'>
<Button variant='primary' size='small'>
<Link
href={langeniusVersionInfo.release_notes}
target='_blank' rel='noopener noreferrer'

View File

@@ -13,7 +13,7 @@ import ExploreNav from './explore-nav'
import ToolsNav from './tools-nav'
import { WorkspaceProvider } from '@/context/workspace-context'
import { useAppContext } from '@/context/app-context'
import LogoSite from '@/app/components/base/logo/logo-site'
import DifyLogo from '@/app/components/base/logo/dify-logo'
import WorkplaceSelector from '@/app/components/header/account-dropdown/workplace-selector'
import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints'
import { useProviderContext } from '@/context/provider-context'
@@ -60,8 +60,8 @@ const Header = () => {
{
!isMobile
&& <div className='flex shrink-0 items-center gap-1.5 self-stretch pl-3'>
<Link href="/apps" className='flex h-8 w-8 shrink-0 items-center justify-center gap-2'>
<LogoSite className='object-contain' />
<Link href="/apps" className='flex h-8 w-[52px] shrink-0 items-center justify-center gap-2'>
<DifyLogo />
</Link>
<div className='font-light text-divider-deep'>/</div>
<div className='flex items-center gap-0.5'>
@@ -76,7 +76,7 @@ const Header = () => {
{isMobile && (
<div className='flex'>
<Link href="/apps" className='mr-4 flex items-center'>
<LogoSite />
<DifyLogo />
</Link>
<div className='font-light text-divider-deep'>/</div>
{enableBilling ? <PlanBadge allowHover sandboxAsUpgrade plan={plan.type} onClick={handlePlanClick} /> : <LicenseNav />}

View File

@@ -36,7 +36,7 @@ import Toast from '@/app/components/base/toast'
import type { VisionFile, VisionSettings } from '@/types/app'
import { Resolution, TransferMethod } from '@/types/app'
import { useAppFavicon } from '@/hooks/use-app-favicon'
import LogoSite from '@/app/components/base/logo/logo-site'
import DifyLogo from '@/app/components/base/logo/dify-logo'
import cn from '@/utils/classnames'
const GROUP_SIZE = 5 // to avoid RPM(Request per minute) limit. The group task finished then the next group.
@@ -635,7 +635,7 @@ const TextGeneration: FC<IMainProps> = ({
<img src={customConfig?.replace_webapp_logo} alt='logo' className='block h-5 w-auto' />
)}
{!customConfig?.replace_webapp_logo && (
<LogoSite className='!h-5' />
<DifyLogo size='small' />
)}
</div>
)}
@@ -664,7 +664,7 @@ const TextGeneration: FC<IMainProps> = ({
showResultPanel()
}}
>
<div className='h-1 w-8 cursor-grab rounded bg-divider-solid'/>
<div className='h-1 w-8 cursor-grab rounded bg-divider-solid' />
</div>
)}
{renderResWrap}