-
@@ -162,14 +162,14 @@ export default function AccountPage() {
systemFeatures.enable_email_password_login && (
-
{t('common.account.password')}
-
{t('common.account.passwordTip')}
+
{t('common.account.password')}
+
{t('common.account.passwordTip')}
)
}
-
+
{t('common.account.langGeniusAccount')}
{t('common.account.langGeniusAccountTip')}
@@ -181,7 +181,7 @@ export default function AccountPage() {
wrapperClassName='mt-2'
/>
)}
- {!IS_CE_EDITION &&
}
+ {!IS_CE_EDITION &&
}
{
editNameModalVisible && (
@@ -190,7 +190,7 @@ export default function AccountPage() {
onClose={() => setEditNameModalVisible(false)}
className={s.modal}
>
-
{t('common.account.editName')}
+
{t('common.account.editName')}
{t('common.account.name')}
-
{userProfile.is_password_set ? t('common.account.resetPassword') : t('common.account.setPassword')}
+
{userProfile.is_password_set ? t('common.account.resetPassword') : t('common.account.setPassword')}
{userProfile.is_password_set && (
<>
{t('common.account.currentPassword')}
@@ -242,7 +242,7 @@ export default function AccountPage() {
+
{userProfile.is_password_set ? t('common.account.newPassword') : t('common.account.password')}
@@ -261,7 +261,7 @@ export default function AccountPage() {
-
+
{t('common.account.deleteTip')}
{t('common.account.deleteConfirmTip')}
-
{`${t('common.account.delete')}: ${userProfile.email}`}
+
{`${t('common.account.delete')}: ${userProfile.email}`}
>
}
confirmText={t('common.operation.ok') as string}
diff --git a/web/app/account/avatar.tsx b/web/app/account/avatar.tsx
index 544e43ab27f99f..8fdecc07bf867b 100644
--- a/web/app/account/avatar.tsx
+++ b/web/app/account/avatar.tsx
@@ -40,9 +40,9 @@ export default function AppSelector() {
className={`
inline-flex items-center
rounded-[20px] p-1x text-sm
- text-gray-700 hover:bg-gray-200
+ text-text-primary
mobile:px-1
- ${open && 'bg-gray-200'}
+ ${open && 'bg-components-panel-bg-blur'}
`}
>
@@ -60,7 +60,7 @@ export default function AppSelector() {
@@ -78,10 +78,10 @@ export default function AppSelector() {
handleLogout()}>
-
-
{t('common.userProfile.logout')}
+
+
{t('common.userProfile.logout')}
diff --git a/web/app/account/layout.tsx b/web/app/account/layout.tsx
index 5aa8b05cbfd07b..11a6abeab40782 100644
--- a/web/app/account/layout.tsx
+++ b/web/app/account/layout.tsx
@@ -21,7 +21,7 @@ const Layout = ({ children }: { children: ReactNode }) => {
-
+
{children}
diff --git a/web/app/components/base/modal/index.tsx b/web/app/components/base/modal/index.tsx
index 5b8c4be4b824e2..3040cdb00b502a 100644
--- a/web/app/components/base/modal/index.tsx
+++ b/web/app/components/base/modal/index.tsx
@@ -1,6 +1,6 @@
import { Dialog, Transition } from '@headlessui/react'
import { Fragment } from 'react'
-import { XMarkIcon } from '@heroicons/react/24/outline'
+import { RiCloseLine } from '@remixicon/react'
import classNames from '@/utils/classnames'
// https://headlessui.com/react/dialog
@@ -39,7 +39,7 @@ export default function Modal({
leaveFrom="opacity-100"
leaveTo="opacity-0"
>
-
+
{title &&
{title}
}
- {description &&
+ {description &&
{description}
}
{closable
- &&
-
+ {
e.stopPropagation()
onClose()
diff --git a/web/app/components/base/select/index.tsx b/web/app/components/base/select/index.tsx
index c70cf246619c9c..221d70355ffb33 100644
--- a/web/app/components/base/select/index.tsx
+++ b/web/app/components/base/select/index.tsx
@@ -2,7 +2,8 @@
import type { FC } from 'react'
import React, { Fragment, useEffect, useState } from 'react'
import { Combobox, Listbox, Transition } from '@headlessui/react'
-import { CheckIcon, ChevronDownIcon, ChevronUpIcon, XMarkIcon } from '@heroicons/react/20/solid'
+import { ChevronDownIcon, ChevronUpIcon, XMarkIcon } from '@heroicons/react/20/solid'
+import { RiCheckLine } from '@remixicon/react'
import { useTranslation } from 'react-i18next'
import classNames from '@/utils/classnames'
import {
@@ -152,7 +153,7 @@ const Select: FC = ({
'absolute inset-y-0 right-0 flex items-center pr-4 text-gray-700',
)}
>
-
+
)}
>
@@ -210,7 +211,7 @@ const SimpleSelect: FC = ({
{renderTrigger &&
{renderTrigger(selectedItem)}}
{!renderTrigger && (
-
+
{selectedItem?.name ?? localPlaceholder}
{(selectedItem && !notClearable)
@@ -243,13 +244,13 @@ const SimpleSelect: FC = ({
leaveTo="opacity-0"
>
-
+
{items.map((item: Item) => (
classNames(
- `relative cursor-pointer select-none py-2 pl-3 pr-9 rounded-lg hover:bg-gray-100 text-gray-700 ${active ? 'bg-gray-100' : ''}`,
+ 'relative cursor-pointer select-none py-2 pl-3 pr-9 rounded-lg hover:bg-state-base-hover text-text-secondary',
optionClassName,
)
}
@@ -265,10 +266,10 @@ const SimpleSelect: FC = ({
{selected && !hideChecked && (
-
+
)}
>)}
@@ -369,7 +370,7 @@ const PortalSelect: FC = ({
{item.name}
{!hideChecked && item.value === value && (
-
+
)}
))}
diff --git a/web/app/components/header/account-dropdown/index.tsx b/web/app/components/header/account-dropdown/index.tsx
index 14f079c0f29a95..a30ab175acd9cf 100644
--- a/web/app/components/header/account-dropdown/index.tsx
+++ b/web/app/components/header/account-dropdown/index.tsx
@@ -3,7 +3,7 @@ import { useTranslation } from 'react-i18next'
import { Fragment, useState } from 'react'
import { useRouter } from 'next/navigation'
import { useContext } from 'use-context-selector'
-import { RiArrowDownSLine } from '@remixicon/react'
+import { RiArrowDownSLine, RiLogoutBoxRLine } from '@remixicon/react'
import Link from 'next/link'
import { Menu, Transition } from '@headlessui/react'
import Indicator from '../indicator'
@@ -16,7 +16,6 @@ import Avatar from '@/app/components/base/avatar'
import { logout } from '@/service/common'
import { useAppContext } from '@/context/app-context'
import { ArrowUpRight } from '@/app/components/base/icons/src/vender/line/arrows'
-import { LogOut01 } from '@/app/components/base/icons/src/vender/line/general'
import { useModalContext } from '@/context/modal-context'
import { LanguagesSupported } from '@/i18n/language'
import { useProviderContext } from '@/context/provider-context'
@@ -28,8 +27,8 @@ export type IAppSelector = {
export default function AppSelector({ isMobile }: IAppSelector) {
const itemClassName = `
- flex items-center w-full h-9 px-3 text-gray-700 text-[14px]
- rounded-lg font-normal hover:bg-gray-50 cursor-pointer
+ flex items-center w-full h-9 px-3 text-text-secondary system-md-regular
+ rounded-lg hover:bg-state-base-hover cursor-pointer
`
const router = useRouter()
const [aboutVisible, setAboutVisible] = useState(false)
@@ -89,7 +88,7 @@ export default function AppSelector({ isMobile }: IAppSelector) {
@@ -97,13 +96,13 @@ export default function AppSelector({ isMobile }: IAppSelector) {
-
{userProfile.name}
-
{userProfile.email}
+
{userProfile.name}
+
{userProfile.email}
-
{t('common.userProfile.workspace')}
+
{t('common.userProfile.workspace')}
@@ -113,7 +112,7 @@ export default function AppSelector({ isMobile }: IAppSelector) {
href='/account'
target='_self' rel='noopener noreferrer'>
{t('common.account.account')}
-
+
@@ -127,7 +126,7 @@ export default function AppSelector({ isMobile }: IAppSelector) {
href={mailToSupport(userProfile.email, plan.type, langeniusVersionInfo.current_version)}
target='_blank' rel='noopener noreferrer'>
{t('common.userProfile.emailSupport')}
-
+
}
@@ -136,7 +135,7 @@ export default function AppSelector({ isMobile }: IAppSelector) {
href='https://github.com/langgenius/dify/discussions/categories/feedbacks'
target='_blank' rel='noopener noreferrer'>
{t('common.userProfile.communityFeedback')}
-
+
@@ -145,7 +144,7 @@ export default function AppSelector({ isMobile }: IAppSelector) {
href='https://discord.gg/5AEfbxcd9k'
target='_blank' rel='noopener noreferrer'>
{t('common.userProfile.community')}
-
+
@@ -156,7 +155,7 @@ export default function AppSelector({ isMobile }: IAppSelector) {
}
target='_blank' rel='noopener noreferrer'>
{t('common.userProfile.helpCenter')}
-
+
@@ -165,7 +164,7 @@ export default function AppSelector({ isMobile }: IAppSelector) {
href='https://roadmap.dify.ai'
target='_blank' rel='noopener noreferrer'>
{t('common.userProfile.roadmap')}
-
+
{
@@ -174,7 +173,7 @@ export default function AppSelector({ isMobile }: IAppSelector) {
setAboutVisible(true)}>
{t('common.userProfile.about')}
-
{langeniusVersionInfo.current_version}
+
{langeniusVersionInfo.current_version}
@@ -185,10 +184,10 @@ export default function AppSelector({ isMobile }: IAppSelector) {
handleLogout()}>
-
{t('common.userProfile.logout')}
-
+
{t('common.userProfile.logout')}
+
diff --git a/web/app/components/header/account-setting/collapse/index.tsx b/web/app/components/header/account-setting/collapse/index.tsx
index a70dca16e5c938..d0068dabed7810 100644
--- a/web/app/components/header/account-setting/collapse/index.tsx
+++ b/web/app/components/header/account-setting/collapse/index.tsx
@@ -25,18 +25,18 @@ const Collapse = ({
const toggle = () => setOpen(!open)
return (
-
-
+
+
{title}
{
open
- ?
- :
+ ?
+ :
}
{
open && (
-
+
{
items.map(item => (
onSelect && onSelect(item)}>
diff --git a/web/app/components/header/account-setting/data-source-page/index.tsx b/web/app/components/header/account-setting/data-source-page/index.tsx
index c3da977ca4e203..93dc2db8540cf3 100644
--- a/web/app/components/header/account-setting/data-source-page/index.tsx
+++ b/web/app/components/header/account-setting/data-source-page/index.tsx
@@ -12,7 +12,6 @@ export default function DataSourcePage() {
return (
-
{t('common.dataSource.add')}
diff --git a/web/app/components/header/account-setting/data-source-page/panel/config-item.tsx b/web/app/components/header/account-setting/data-source-page/panel/config-item.tsx
index 2a05808e2ae20f..b7fd8193e2d86a 100644
--- a/web/app/components/header/account-setting/data-source-page/panel/config-item.tsx
+++ b/web/app/components/header/account-setting/data-source-page/panel/config-item.tsx
@@ -44,22 +44,22 @@ const ConfigItem: FC
= ({
const onChangeAuthorizedPage = notionActions?.onChangeAuthorizedPage || function () { }
return (
-
+
-
{payload.name}
+
{payload.name}
{
payload.isActive
- ?
+ ?
:
}
-
+
{
payload.isActive
? t(isNotion ? 'common.dataSource.notion.connected' : 'common.dataSource.website.active')
: t(isNotion ? 'common.dataSource.notion.disconnected' : 'common.dataSource.website.inactive')
}
-
+
{isNotion && (
= ({
{
isWebsite && !readOnly && (
-
-
+
+
)
}
diff --git a/web/app/components/header/account-setting/data-source-page/panel/index.tsx b/web/app/components/header/account-setting/data-source-page/panel/index.tsx
index 4a810020b440ed..8d2ec0a8ca4c93 100644
--- a/web/app/components/header/account-setting/data-source-page/panel/index.tsx
+++ b/web/app/components/header/account-setting/data-source-page/panel/index.tsx
@@ -2,7 +2,7 @@
import type { FC } from 'react'
import React from 'react'
import { useTranslation } from 'react-i18next'
-import { PlusIcon } from '@heroicons/react/24/solid'
+import { RiAddLine } from '@remixicon/react'
import type { ConfigItemType } from './config-item'
import ConfigItem from './config-item'
@@ -41,12 +41,12 @@ const Panel: FC
= ({
const isWebsite = type === DataSourceType.website
return (
-
+
-
+
-
{t(`common.dataSource.${type}.title`)}
+
{t(`common.dataSource.${type}.title`)}
{isWebsite && (
{t('common.dataSource.website.with')} { provider === DataSourceProvider.fireCrawl ? '🔥 Firecrawl' : 'Jina Reader'}
@@ -55,7 +55,7 @@ const Panel: FC
= ({
{
!isConfigured && (
-
+
{t(`common.dataSource.${type}.description`)}
)
@@ -81,13 +81,13 @@ const Panel: FC
= ({
<>
{isSupportList &&
-
- {t('common.dataSource.notion.addWorkspace')}
+
+ {t('common.dataSource.connect')}
}
>
)
@@ -98,8 +98,8 @@ const Panel: FC = ({
{isWebsite && !isConfigured && (
= ({
isConfigured && (
<>
-
+
{isNotion ? t('common.dataSource.notion.connectedWorkspace') : t('common.dataSource.website.configuredCrawlers')}
-
+
{
diff --git a/web/app/components/header/account-setting/index.tsx b/web/app/components/header/account-setting/index.tsx
index d829f6b77b0cc9..4be7ec6ab7ee6f 100644
--- a/web/app/components/header/account-setting/index.tsx
+++ b/web/app/components/header/account-setting/index.tsx
@@ -152,14 +152,14 @@ export default function AccountSetting({
wrapperClassName='pt-[60px]'
>
-
-
{t('common.userProfile.settings')}
+
+
{t('common.userProfile.settings')}
{
menuItems.map(menuItem => (
{!isCurrentWorkspaceDatasetOperator && (
-
{menuItem.name}
+
{menuItem.name}
)}
{
@@ -168,7 +168,7 @@ export default function AccountSetting({
key={item.key}
className={`
flex items-center h-[37px] mb-[2px] text-sm cursor-pointer rounded-lg
- ${activeMenu === item.key ? 'font-semibold text-primary-600 bg-primary-50' : 'font-light text-gray-700'}
+ ${activeMenu === item.key ? 'system-sm-semibold text-components-menu-item-text-active bg-state-base-active' : 'system-sm-medium text-components-menu-item-text'}
`}
title={item.name}
onClick={() => setActiveMenu(item.key)}
@@ -185,7 +185,7 @@ export default function AccountSetting({
-
+
{activeItem?.name}
{
activeItem?.description && (
@@ -193,8 +193,8 @@ export default function AccountSetting({
)
}
diff --git a/web/app/components/header/account-setting/language-page/index.tsx b/web/app/components/header/account-setting/language-page/index.tsx
index fc8db8681359af..7d3e09fc2103ae 100644
--- a/web/app/components/header/account-setting/language-page/index.tsx
+++ b/web/app/components/header/account-setting/language-page/index.tsx
@@ -13,7 +13,7 @@ import { timezones } from '@/utils/timezone'
import { languages } from '@/i18n/language'
const titleClassName = `
- mb-2 text-sm font-medium text-gray-900
+ mb-2 system-sm-semibold text-text-secondary
`
export default function LanguagePage() {
diff --git a/web/app/components/header/account-setting/members-page/index.tsx b/web/app/components/header/account-setting/members-page/index.tsx
index 03d65af7a45147..c2b722b4a7af65 100644
--- a/web/app/components/header/account-setting/members-page/index.tsx
+++ b/web/app/components/header/account-setting/members-page/index.tsx
@@ -85,32 +85,32 @@ const MembersPage = () => {
-
-
{t('common.members.name')}
-
{t('common.members.lastActive')}
-
{t('common.members.role')}
+
+
{t('common.members.name')}
+
{t('common.members.lastActive')}
+
{t('common.members.role')}
{
accounts.map(account => (
-
+
-
+
{account.name}
- {account.status === 'pending' && {t('common.members.pending')}}
- {userProfile.email === account.email && {t('common.members.you')}}
+ {account.status === 'pending' && {t('common.members.pending')}}
+ {userProfile.email === account.email && {t('common.members.you')}}
-
{account.email}
+
{account.email}
-
{dayjs(Number((account.last_active_at || account.created_at)) * 1000).locale(locale === 'zh-Hans' ? 'zh-cn' : 'en').fromNow()}
+
{dayjs(Number((account.last_active_at || account.created_at)) * 1000).locale(locale === 'zh-Hans' ? 'zh-cn' : 'en').fromNow()}
{
((isCurrentWorkspaceOwner && account.role !== 'owner') || (isCurrentWorkspaceManager && !['owner', 'admin'].includes(account.role)))
?
- :
{RoleMap[account.role] || RoleMap.normal}
+ :
{RoleMap[account.role] || RoleMap.normal}
}
diff --git a/web/app/components/header/header-wrapper.tsx b/web/app/components/header/header-wrapper.tsx
index 52728bea875e6a..dd0ec77b8218a9 100644
--- a/web/app/components/header/header-wrapper.tsx
+++ b/web/app/components/header/header-wrapper.tsx
@@ -11,7 +11,7 @@ const HeaderWrapper = ({
children,
}: HeaderWrapperProps) => {
const pathname = usePathname()
- const isBordered = ['/apps', '/datasets', '/datasets/create', '/tools', '/account'].includes(pathname)
+ const isBordered = ['/apps', '/datasets', '/datasets/create', '/tools'].includes(pathname)
return (
{
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [selectedSegment])
return (
-