[autofix.ci] apply automated fixes

This commit is contained in:
autofix-ci[bot]
2026-01-26 11:24:44 +00:00
committed by GitHub
parent 14828853b1
commit 01a05289e9
688 changed files with 1639 additions and 2998 deletions

View File

@ -2,7 +2,6 @@
import type { Dayjs } from 'dayjs'
import type { FC } from 'react'
import type { TriggerProps } from '@/app/components/base/date-and-time-picker/types'
import { RiCalendarLine } from '@remixicon/react'
import dayjs from 'dayjs'
import { noop } from 'es-toolkit/function'
import * as React from 'react'
@ -53,7 +52,7 @@ const DatePicker: FC<Props> = ({
return (
<div className="flex h-8 items-center space-x-0.5 rounded-lg bg-components-input-bg-normal px-2">
<div className="p-px">
<RiCalendarLine className="size-3.5 text-text-tertiary" />
<span className="i-ri-calendar-line size-3.5 text-text-tertiary" />
</div>
<Picker
value={start}

View File

@ -3,7 +3,6 @@ import type { FC } from 'react'
import type { PeriodParamsWithTimeRange, TimeRange } from '@/app/components/app/overview/app-chart'
import type { Item } from '@/app/components/base/select'
import type { I18nKeysByPrefix } from '@/types/i18n'
import { RiArrowDownSLine, RiCheckLine } from '@remixicon/react'
import dayjs from 'dayjs'
import * as React from 'react'
import { useCallback } from 'react'
@ -46,7 +45,7 @@ const RangeSelector: FC<Props> = ({
return (
<div className={cn('flex h-8 cursor-pointer items-center space-x-1.5 rounded-lg bg-components-input-bg-normal pl-3 pr-2', isOpen && 'bg-state-base-hover-alt')}>
<div className="system-sm-regular text-components-input-text-filled">{isCustomRange ? t('filter.period.custom', { ns: 'appLog' }) : item?.name}</div>
<RiArrowDownSLine className={cn('size-4 text-text-quaternary', isOpen && 'text-text-secondary')} />
<span className={`i-ri-arrow-down-sline ${cn('size-4 text-text-quaternary', isOpen && 'text-text-secondary')}`} />
</div>
)
}, [isCustomRange])
@ -60,7 +59,7 @@ const RangeSelector: FC<Props> = ({
'absolute left-2 top-[9px] flex items-center text-text-accent',
)}
>
<RiCheckLine className="h-4 w-4" aria-hidden="true" />
<span className="i-ri-check-line h-4 w-4" aria-hidden="true" />
</span>
)}
<span className={cn('system-md-regular block truncate')}>{item.name}</span>

View File

@ -2,10 +2,7 @@
import type { FC } from 'react'
import type { AliyunConfig, ArizeConfig, DatabricksConfig, LangFuseConfig, LangSmithConfig, MLflowConfig, OpikConfig, PhoenixConfig, TencentConfig, WeaveConfig } from './type'
import type { TracingStatus } from '@/models/app'
import {
RiArrowDownDoubleLine,
RiEqualizer2Line,
} from '@remixicon/react'
import { useBoolean } from 'ahooks'
import { usePathname } from 'next/navigation'
import * as React from 'react'
@ -256,11 +253,11 @@ const Panel: FC = () => {
<TracingIcon size="md" />
<div className="system-sm-semibold mx-2 text-text-secondary">{t(`${I18N_PREFIX}.title`, { ns: 'app' })}</div>
<div className="rounded-md p-1">
<RiEqualizer2Line className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-equalizer-2-line h-4 w-4 text-text-tertiary" />
</div>
<Divider type="vertical" className="h-3.5" />
<div className="rounded-md p-1">
<RiArrowDownDoubleLine className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-arrow-down-double-line h-4 w-4 text-text-tertiary" />
</div>
</div>
</ConfigButton>
@ -300,7 +297,7 @@ const Panel: FC = () => {
</div>
{InUseProviderIcon && <InUseProviderIcon className="ml-1 h-4" />}
<div className="ml-2 rounded-md p-1">
<RiEqualizer2Line className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-equalizer-2-line h-4 w-4 text-text-tertiary" />
</div>
<Divider type="vertical" className="h-3.5" />
</div>

View File

@ -1,8 +1,6 @@
'use client'
import type { FC } from 'react'
import {
RiEqualizer2Line,
} from '@remixicon/react'
import * as React from 'react'
import { useCallback } from 'react'
import { useTranslation } from 'react-i18next'
@ -96,7 +94,7 @@ const ProviderPanel: FC<Props> = ({
className="flex h-6 cursor-pointer items-center space-x-1 rounded-md border-[0.5px] border-components-button-secondary-border bg-components-button-secondary-bg px-2 text-text-secondary shadow-xs"
onClick={handleConfigBtnClick}
>
<RiEqualizer2Line className="h-3 w-3" />
<span className="i-ri-equalizer-2-line h-3 w-3" />
<div className="text-xs font-medium">{t(`${I18N_PREFIX}.config`, { ns: 'app' })}</div>
</div>
</div>

View File

@ -1,5 +1,4 @@
'use client'
import { RiArrowLeftLine, RiMailSendFill } from '@remixicon/react'
import { useRouter, useSearchParams } from 'next/navigation'
import { useState } from 'react'
import { useTranslation } from 'react-i18next'
@ -66,7 +65,7 @@ export default function CheckCode() {
return (
<div className="flex flex-col gap-3">
<div className="inline-flex h-14 w-14 items-center justify-center rounded-2xl border border-components-panel-border-subtle bg-background-default-dodge text-text-accent-light-mode-only shadow-lg">
<RiMailSendFill className="h-6 w-6 text-2xl" />
<span className="i-ri-mail-send-fill h-6 w-6 text-2xl" />
</div>
<div className="pb-4 pt-2">
<h2 className="title-4xl-semi-bold text-text-primary">{t('checkCode.checkYourEmail', { ns: 'login' })}</h2>
@ -92,7 +91,7 @@ export default function CheckCode() {
</div>
<div onClick={() => router.back()} className="flex h-9 cursor-pointer items-center justify-center text-text-tertiary">
<div className="bg-background-default-dimm inline-block rounded-full p-1">
<RiArrowLeftLine size={12} />
<span className="i-ri-arrow-left-line size-3" />
</div>
<span className="system-xs-regular ml-2">{t('back', { ns: 'login' })}</span>
</div>

View File

@ -1,5 +1,4 @@
'use client'
import { RiArrowLeftLine, RiLockPasswordLine } from '@remixicon/react'
import { noop } from 'es-toolkit/function'
import Link from 'next/link'
import { useRouter, useSearchParams } from 'next/navigation'
@ -71,7 +70,7 @@ export default function CheckCode() {
return (
<div className="flex flex-col gap-3">
<div className="inline-flex h-14 w-14 items-center justify-center rounded-2xl border border-components-panel-border-subtle bg-background-default-dodge shadow-lg">
<RiLockPasswordLine className="h-6 w-6 text-2xl text-text-accent-light-mode-only" />
<span className="i-ri-lock-password-line h-6 w-6 text-2xl text-text-accent-light-mode-only" />
</div>
<div className="pb-4 pt-2">
<h2 className="title-4xl-semi-bold text-text-primary">{t('resetPassword', { ns: 'login' })}</h2>
@ -97,7 +96,7 @@ export default function CheckCode() {
</div>
<Link href={`/webapp-signin?${searchParams.toString()}`} className="flex h-9 items-center justify-center text-text-tertiary hover:text-text-primary">
<div className="inline-block rounded-full bg-background-default-dimmed p-1">
<RiArrowLeftLine size={12} />
<span className="i-ri-arrow-left-line size-3" />
</div>
<span className="system-xs-regular ml-2">{t('backToLogin', { ns: 'login' })}</span>
</Link>

View File

@ -1,5 +1,4 @@
'use client'
import { RiCheckboxCircleFill } from '@remixicon/react'
import { useCountDown } from 'ahooks'
import { useRouter, useSearchParams } from 'next/navigation'
import { useCallback, useState } from 'react'
@ -168,7 +167,7 @@ const ChangePasswordForm = () => {
<div className="flex flex-col md:w-[400px]">
<div className="mx-auto w-full">
<div className="mb-3 flex h-14 w-14 items-center justify-center rounded-2xl border border-components-panel-border-subtle font-bold shadow-lg">
<RiCheckboxCircleFill className="h-6 w-6 text-text-success" />
<span className="i-ri-checkbox-circle-fill h-6 w-6 text-text-success" />
</div>
<h2 className="title-4xl-semi-bold text-text-primary">
{t('passwordChangedTip', { ns: 'login' })}

View File

@ -1,6 +1,5 @@
'use client'
import type { FormEvent } from 'react'
import { RiArrowLeftLine, RiMailSendFill } from '@remixicon/react'
import { useRouter, useSearchParams } from 'next/navigation'
import { useCallback, useEffect, useRef, useState } from 'react'
import { useTranslation } from 'react-i18next'
@ -107,7 +106,7 @@ export default function CheckCode() {
return (
<div className="flex w-[400px] flex-col gap-3">
<div className="inline-flex h-14 w-14 items-center justify-center rounded-2xl border border-components-panel-border-subtle bg-background-default-dodge shadow-lg">
<RiMailSendFill className="h-6 w-6 text-2xl text-text-accent-light-mode-only" />
<span className="i-ri-mail-send-fill h-6 w-6 text-2xl text-text-accent-light-mode-only" />
</div>
<div className="pb-4 pt-2">
<h2 className="title-4xl-semi-bold text-text-primary">{t('checkCode.checkYourEmail', { ns: 'login' })}</h2>
@ -140,7 +139,7 @@ export default function CheckCode() {
</div>
<div onClick={() => router.back()} className="flex h-9 cursor-pointer items-center justify-center text-text-tertiary">
<div className="bg-background-default-dimm inline-block rounded-full p-1">
<RiArrowLeftLine size={12} />
<span className="i-ri-arrow-left-line size-3" />
</div>
<span className="system-xs-regular ml-2">{t('back', { ns: 'login' })}</span>
</div>

View File

@ -1,5 +1,4 @@
'use client'
import { RiContractLine, RiDoorLockLine, RiErrorWarningFill } from '@remixicon/react'
import Link from 'next/link'
import * as React from 'react'
import { useCallback, useEffect, useState } from 'react'
@ -57,8 +56,8 @@ const NormalForm = () => {
<div className="relative">
<div className="rounded-lg bg-gradient-to-r from-workflow-workflow-progress-bg-1 to-workflow-workflow-progress-bg-2 p-4">
<div className="shadows-shadow-lg relative mb-2 flex h-10 w-10 items-center justify-center rounded-xl bg-components-card-bg shadow">
<RiContractLine className="h-5 w-5" />
<RiErrorWarningFill className="absolute -right-1 -top-1 h-4 w-4 text-text-warning-secondary" />
<span className="i-ri-contract-line h-5 w-5" />
<span className="i-ri-error-warning-fill absolute -right-1 -top-1 h-4 w-4 text-text-warning-secondary" />
</div>
<p className="system-sm-medium text-text-primary">{t('licenseLost', { ns: 'login' })}</p>
<p className="system-xs-regular mt-1 text-text-tertiary">{t('licenseLostTip', { ns: 'login' })}</p>
@ -73,8 +72,8 @@ const NormalForm = () => {
<div className="relative">
<div className="rounded-lg bg-gradient-to-r from-workflow-workflow-progress-bg-1 to-workflow-workflow-progress-bg-2 p-4">
<div className="shadows-shadow-lg relative mb-2 flex h-10 w-10 items-center justify-center rounded-xl bg-components-card-bg shadow">
<RiContractLine className="h-5 w-5" />
<RiErrorWarningFill className="absolute -right-1 -top-1 h-4 w-4 text-text-warning-secondary" />
<span className="i-ri-contract-line h-5 w-5" />
<span className="i-ri-error-warning-fill absolute -right-1 -top-1 h-4 w-4 text-text-warning-secondary" />
</div>
<p className="system-sm-medium text-text-primary">{t('licenseExpired', { ns: 'login' })}</p>
<p className="system-xs-regular mt-1 text-text-tertiary">{t('licenseExpiredTip', { ns: 'login' })}</p>
@ -89,8 +88,8 @@ const NormalForm = () => {
<div className="relative">
<div className="rounded-lg bg-gradient-to-r from-workflow-workflow-progress-bg-1 to-workflow-workflow-progress-bg-2 p-4">
<div className="shadows-shadow-lg relative mb-2 flex h-10 w-10 items-center justify-center rounded-xl bg-components-card-bg shadow">
<RiContractLine className="h-5 w-5" />
<RiErrorWarningFill className="absolute -right-1 -top-1 h-4 w-4 text-text-warning-secondary" />
<span className="i-ri-contract-line h-5 w-5" />
<span className="i-ri-error-warning-fill absolute -right-1 -top-1 h-4 w-4 text-text-warning-secondary" />
</div>
<p className="system-sm-medium text-text-primary">{t('licenseInactive', { ns: 'login' })}</p>
<p className="system-xs-regular mt-1 text-text-tertiary">{t('licenseInactiveTip', { ns: 'login' })}</p>
@ -156,7 +155,7 @@ const NormalForm = () => {
<>
<div className="rounded-lg bg-gradient-to-r from-workflow-workflow-progress-bg-1 to-workflow-workflow-progress-bg-2 p-4">
<div className="shadows-shadow-lg mb-2 flex h-10 w-10 items-center justify-center rounded-xl bg-components-card-bg shadow">
<RiDoorLockLine className="h-5 w-5" />
<span className="i-ri-door-lock-line h-5 w-5" />
</div>
<p className="system-sm-medium text-text-primary">{t('noLoginMethod', { ns: 'login' })}</p>
<p className="system-xs-regular mt-1 text-text-tertiary">{t('noLoginMethodTip', { ns: 'login' })}</p>

View File

@ -4,7 +4,6 @@ import type { Area } from 'react-easy-crop'
import type { OnImageInput } from '@/app/components/base/app-icon-picker/ImageInput'
import type { AvatarProps } from '@/app/components/base/avatar'
import type { ImageFile } from '@/types/app'
import { RiDeleteBin5Line, RiPencilLine } from '@remixicon/react'
import * as React from 'react'
import { useCallback, useState } from 'react'
import { useTranslation } from 'react-i18next'
@ -122,12 +121,12 @@ const AvatarWithEdit = ({ onSave, ...props }: AvatarWithEditProps) => {
{hoverArea === 'right' && !onAvatarError
? (
<span className="text-xs text-white">
<RiDeleteBin5Line />
<span className="i-ri-delete-bin-5-line" />
</span>
)
: (
<span className="text-xs text-white">
<RiPencilLine />
<span className="i-ri-pencil-line" />
</span>
)}
</div>

View File

@ -1,5 +1,4 @@
import type { ResponseError } from '@/service/fetch'
import { RiCloseLine } from '@remixicon/react'
import { noop } from 'es-toolkit/function'
import { useRouter } from 'next/navigation'
import * as React from 'react'
@ -205,7 +204,7 @@ const EmailChangeModal = ({ onClose, email, show }: Props) => {
className="!w-[420px] !p-6"
>
<div className="absolute right-5 top-5 cursor-pointer p-1.5" onClick={onClose}>
<RiCloseLine className="h-5 w-5 text-text-tertiary" />
<span className="i-ri-close-line h-5 w-5 text-text-tertiary" />
</div>
{step === STEP.start && (
<>

View File

@ -1,9 +1,7 @@
'use client'
import type { IItem } from '@/app/components/header/account-setting/collapse'
import type { App } from '@/types/app'
import {
RiGraduationCapFill,
} from '@remixicon/react'
import { useState } from 'react'
import { useTranslation } from 'react-i18next'
import { useContext } from 'use-context-selector'
@ -155,7 +153,7 @@ export default function AccountPage() {
{userProfile.name}
{isEducationAccount && (
<PremiumBadge size="s" color="blue" className="ml-1 !px-2">
<RiGraduationCapFill className="mr-1 h-3 w-3" />
<span className="i-ri-graduation-cap-fill mr-1 h-3 w-3" />
<span className="system-2xs-medium">EDU</span>
</PremiumBadge>
)}

View File

@ -1,8 +1,6 @@
'use client'
import { Menu, MenuButton, MenuItem, MenuItems, Transition } from '@headlessui/react'
import {
RiGraduationCapFill,
} from '@remixicon/react'
import { useRouter } from 'next/navigation'
import { Fragment } from 'react'
import { useTranslation } from 'react-i18next'
@ -77,7 +75,7 @@ export default function AppSelector() {
{userProfile.name}
{isEducationAccount && (
<PremiumBadge size="s" color="blue" className="ml-1 !px-2">
<RiGraduationCapFill className="mr-1 h-3 w-3" />
<span className="i-ri-graduation-cap-fill mr-1 h-3 w-3" />
<span className="system-2xs-medium">EDU</span>
</PremiumBadge>
)}

View File

@ -1,5 +1,4 @@
'use client'
import { RiArrowRightUpLine, RiRobot2Line } from '@remixicon/react'
import { useRouter } from 'next/navigation'
import { useCallback } from 'react'
import { useTranslation } from 'react-i18next'
@ -36,9 +35,9 @@ const Header = () => {
</div>
<div className="flex shrink-0 items-center gap-3">
<Button className="system-sm-medium gap-2 px-3 py-2" onClick={goToStudio}>
<RiRobot2Line className="h-4 w-4" />
<span className="i-ri-robot-2-line h-4 w-4" />
<p>{t('account.studio', { ns: 'common' })}</p>
<RiArrowRightUpLine className="h-4 w-4" />
<span className="i-ri-arrow-right-up-line h-4 w-4" />
</Button>
<div className="h-4 w-[1px] bg-divider-regular" />
<Avatar />

View File

@ -167,7 +167,7 @@ export default function OAuthAuthorize() {
const Icon = SCOPE_INFO_MAP[scope]
return (
<div key={scope} className="body-sm-medium flex items-center gap-2 text-text-secondary">
{Icon ? <Icon.icon className="h-4 w-4" /> : <RiAccountCircleLine className="h-4 w-4" />}
{Icon ? <Icon.icon className="h-4 w-4" /> : <span className="i-ri-account-circle-line h-4 w-4" />}
{Icon.label}
</div>
)

View File

@ -2,15 +2,7 @@ import type { Operation } from './app-operations'
import type { DuplicateAppModalProps } from '@/app/components/app/duplicate-modal'
import type { CreateAppModalProps } from '@/app/components/explore/create-app-modal'
import type { EnvironmentVariable } from '@/app/components/workflow/types'
import {
RiDeleteBinLine,
RiEditLine,
RiEqualizer2Line,
RiExchange2Line,
RiFileCopy2Line,
RiFileDownloadLine,
RiFileUploadLine,
} from '@remixicon/react'
import dynamic from 'next/dynamic'
import { useRouter } from 'next/navigation'
import * as React from 'react'
@ -216,7 +208,7 @@ const AppInfo = ({ expand, onlyShowDetail = false, openState = false, onDetailEx
{
id: 'edit',
title: t('editApp', { ns: 'app' }),
icon: <RiEditLine />,
icon: <span className="i-ri-edit-line" />,
onClick: () => {
setOpen(false)
onDetailExpand?.(false)
@ -226,7 +218,7 @@ const AppInfo = ({ expand, onlyShowDetail = false, openState = false, onDetailEx
{
id: 'duplicate',
title: t('duplicate', { ns: 'app' }),
icon: <RiFileCopy2Line />,
icon: <span className="i-ri-file-copy-2-line" />,
onClick: () => {
setOpen(false)
onDetailExpand?.(false)
@ -236,7 +228,7 @@ const AppInfo = ({ expand, onlyShowDetail = false, openState = false, onDetailEx
{
id: 'export',
title: t('export', { ns: 'app' }),
icon: <RiFileDownloadLine />,
icon: <span className="i-ri-file-download-line" />,
onClick: exportCheck,
},
]
@ -247,7 +239,7 @@ const AppInfo = ({ expand, onlyShowDetail = false, openState = false, onDetailEx
? [{
id: 'import',
title: t('common.importDSL', { ns: 'workflow' }),
icon: <RiFileUploadLine />,
icon: <span className="i-ri-file-upload-line" />,
onClick: () => {
setOpen(false)
onDetailExpand?.(false)
@ -267,7 +259,7 @@ const AppInfo = ({ expand, onlyShowDetail = false, openState = false, onDetailEx
{
id: 'delete',
title: t('operation.delete', { ns: 'common' }),
icon: <RiDeleteBinLine />,
icon: <span className="i-ri-delete-bin-line" />,
onClick: () => {
setOpen(false)
onDetailExpand?.(false)
@ -281,7 +273,7 @@ const AppInfo = ({ expand, onlyShowDetail = false, openState = false, onDetailEx
? {
id: 'switch',
title: t('switch', { ns: 'app' }),
icon: <RiExchange2Line />,
icon: <span className="i-ri-exchange-2-line" />,
onClick: () => {
setOpen(false)
onDetailExpand?.(false)
@ -315,7 +307,7 @@ const AppInfo = ({ expand, onlyShowDetail = false, openState = false, onDetailEx
{expand && (
<div className="ml-auto flex items-center justify-center rounded-md p-0.5">
<div className="flex h-5 w-5 items-center justify-center">
<RiEqualizer2Line className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-equalizer-2-line h-4 w-4 text-text-tertiary" />
</div>
</div>
)}
@ -323,7 +315,7 @@ const AppInfo = ({ expand, onlyShowDetail = false, openState = false, onDetailEx
{!expand && (
<div className="flex items-center justify-center">
<div className="flex h-5 w-5 items-center justify-center rounded-md p-0.5">
<RiEqualizer2Line className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-equalizer-2-line h-4 w-4 text-text-tertiary" />
</div>
</div>
)}

View File

@ -1,5 +1,4 @@
import type { JSX } from 'react'
import { RiMoreLine } from '@remixicon/react'
import { cloneElement, useCallback, useEffect, useMemo, useRef, useState } from 'react'
import { useTranslation } from 'react-i18next'
import Button from '@/app/components/base/button'
@ -146,7 +145,7 @@ const AppOperations = ({
className="gap-[1px]"
tabIndex={-1}
>
<RiMoreLine className="h-3.5 w-3.5 text-components-button-secondary-text" />
<span className="i-ri-more-line h-3.5 w-3.5 text-components-button-secondary-text" />
<span className="system-xs-medium text-components-button-secondary-text">
{t('operation.more', { ns: 'common' })}
</span>
@ -181,7 +180,7 @@ const AppOperations = ({
variant="secondary"
className="gap-[1px]"
>
<RiMoreLine className="h-3.5 w-3.5 text-components-button-secondary-text" />
<span className="i-ri-more-line h-3.5 w-3.5 text-components-button-secondary-text" />
<span className="system-xs-medium text-components-button-secondary-text">
{t('operation.more', { ns: 'common' })}
</span>

View File

@ -1,8 +1,5 @@
import type { NavIcon } from './navLink'
import {
RiEqualizer2Line,
RiMenuLine,
} from '@remixicon/react'
import * as React from 'react'
import { useCallback, useRef, useState } from 'react'
import { useTranslation } from 'react-i18next'
@ -68,7 +65,7 @@ const AppSidebarDropdown = ({ navigation }: Props) => {
background={appDetail.icon_background}
imageUrl={appDetail.icon_url}
/>
<RiMenuLine className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-menu-line h-4 w-4 text-text-tertiary" />
</div>
</PortalToFollowElemTrigger>
<PortalToFollowElemContent className="z-[1000]">
@ -91,7 +88,7 @@ const AppSidebarDropdown = ({ navigation }: Props) => {
/>
<div className="flex items-center justify-center rounded-md p-0.5">
<div className="flex h-5 w-5 items-center justify-center">
<RiEqualizer2Line className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-equalizer-2-line h-4 w-4 text-text-tertiary" />
</div>
</div>
</div>

View File

@ -1,5 +1,4 @@
import type { DataSet } from '@/models/datasets'
import { RiMoreFill } from '@remixicon/react'
import { useRouter } from 'next/navigation'
import * as React from 'react'
import { useCallback, useState } from 'react'
@ -120,7 +119,7 @@ const DropDown = ({
>
<PortalToFollowElemTrigger onClick={handleTrigger}>
<ActionButton className={cn(expand ? 'size-8 rounded-lg' : 'size-6 rounded-md')}>
<RiMoreFill className="size-4" />
<span className="i-ri-more-fill size-4" />
</ActionButton>
</PortalToFollowElemTrigger>
<PortalToFollowElemContent className="z-[60]">

View File

@ -1,8 +1,6 @@
import type { NavIcon } from './navLink'
import type { DataSet } from '@/models/datasets'
import {
RiMenuLine,
} from '@remixicon/react'
import * as React from 'react'
import { useCallback, useRef, useState } from 'react'
import { useTranslation } from 'react-i18next'
@ -88,7 +86,7 @@ const DatasetSidebarDropdown = ({
background={iconInfo.icon_background}
imageUrl={iconInfo.icon_url}
/>
<RiMenuLine className="size-4 text-text-tertiary" />
<span className="i-ri-menu-line size-4 text-text-tertiary" />
</div>
</PortalToFollowElemTrigger>
<PortalToFollowElemContent className="z-50">

View File

@ -1,4 +1,3 @@
import { RiArrowLeftSLine, RiArrowRightSLine } from '@remixicon/react'
import * as React from 'react'
import { useTranslation } from 'react-i18next'
import { cn } from '@/utils/classnames'
@ -60,8 +59,8 @@ const ToggleButton = ({
>
{
expand
? <RiArrowLeftSLine className="size-4" />
: <RiArrowRightSLine className="size-4" />
? <span className="i-ri-arrow-left-sline size-4" />
: <span className="i-ri-arrow-right-sline size-4" />
}
</Button>
</Tooltip>

View File

@ -1,5 +1,4 @@
import type { FC } from 'react'
import { RiDeleteBinLine } from '@remixicon/react'
import { useBoolean } from 'ahooks'
import * as React from 'react'
import { useTranslation } from 'react-i18next'
@ -49,7 +48,7 @@ const BatchAction: FC<IBatchActionProps> = ({
</div>
<Divider type="vertical" className="mx-0.5 h-3.5 bg-divider-regular" />
<div className="flex cursor-pointer items-center gap-x-0.5 px-3 py-2" onClick={showDeleteConfirm}>
<RiDeleteBinLine className="h-4 w-4 text-components-button-destructive-ghost-text" />
<span className="i-ri-delete-bin-line h-4 w-4 text-components-button-destructive-ghost-text" />
<button type="button" className="px-0.5 text-[13px] font-medium leading-[16px] text-components-button-destructive-ghost-text">
{t('operation.delete', { ns: 'common' })}
</button>

View File

@ -1,6 +1,5 @@
'use client'
import type { FC } from 'react'
import { RiDeleteBinLine } from '@remixicon/react'
import * as React from 'react'
import { useEffect, useRef, useState } from 'react'
import { useTranslation } from 'react-i18next'
@ -116,7 +115,7 @@ const CSVUploader: FC<Props> = ({
<Button variant="secondary" onClick={selectHandle}>{t('stepOne.uploader.change', { ns: 'datasetCreation' })}</Button>
<div className="mx-2 h-4 w-px bg-divider-regular" />
<div className="cursor-pointer p-2" onClick={removeFile} data-testid="remove-file-button">
<RiDeleteBinLine className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-delete-bin-line h-4 w-4 text-text-tertiary" />
</div>
</div>
</div>

View File

@ -1,6 +1,5 @@
'use client'
import type { FC } from 'react'
import { RiCloseLine } from '@remixicon/react'
import { noop } from 'es-toolkit/function'
import * as React from 'react'
import { useEffect, useState } from 'react'
@ -92,7 +91,7 @@ const BatchModal: FC<IBatchModalProps> = ({
<Modal isShow={isShow} onClose={noop} className="!max-w-[520px] !rounded-xl px-8 py-6">
<div className="system-xl-medium relative pb-1 text-text-primary">{t('batchModal.title', { ns: 'appAnnotation' })}</div>
<div className="absolute right-4 top-4 cursor-pointer p-2" onClick={onCancel}>
<RiCloseLine className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-close-line h-4 w-4 text-text-tertiary" />
</div>
<CSVUploader
file={currentCSV}

View File

@ -1,6 +1,5 @@
'use client'
import type { FC } from 'react'
import { RiDeleteBinLine, RiEditFill, RiEditLine } from '@remixicon/react'
import * as React from 'react'
import { useEffect, useState } from 'react'
import { useTranslation } from 'react-i18next'
@ -22,7 +21,7 @@ type Props = {
export const EditTitle: FC<{ className?: string, title: string }> = ({ className, title }) => (
<div className={cn(className, 'system-xs-medium flex h-[18px] items-center text-text-tertiary')}>
<RiEditFill className="mr-1 h-3.5 w-3.5" />
<span className="i-ri-edit-fill mr-1 h-3.5 w-3.5" />
<div>{title}</div>
<div
className="ml-2 h-px grow"
@ -94,7 +93,7 @@ const EditItem: FC<Props> = ({
setIsEdit(true)
}}
>
<RiEditLine className="mr-1 h-3.5 w-3.5" />
<span className="i-ri-edit-line mr-1 h-3.5 w-3.5" />
<div>{t('operation.edit', { ns: 'common' })}</div>
</div>
)}
@ -117,7 +116,7 @@ const EditItem: FC<Props> = ({
}}
>
<div className="h-3.5 w-3.5">
<RiDeleteBinLine className="h-3.5 w-3.5" />
<span className="i-ri-delete-bin-line h-3.5 w-3.5" />
</div>
<div>{t('operation.delete', { ns: 'common' })}</div>
</div>

View File

@ -2,11 +2,7 @@
import type { FC } from 'react'
import type { AnnotationItemBasic } from '../type'
import { Menu, MenuButton, MenuItems, Transition } from '@headlessui/react'
import {
RiAddLine,
RiDeleteBinLine,
RiMoreFill,
} from '@remixicon/react'
import * as React from 'react'
import { Fragment, useEffect, useState } from 'react'
import { useTranslation } from 'react-i18next'
@ -153,7 +149,7 @@ const HeaderOptions: FC<Props> = ({
onClick={handleClearAll}
className="mx-1 flex h-9 w-[calc(100%_-_8px)] cursor-pointer items-center space-x-2 rounded-lg px-3 py-2 text-red-600 hover:bg-red-50 disabled:opacity-50"
>
<RiDeleteBinLine className="h-4 w-4" />
<span className="i-ri-delete-bin-line h-4 w-4" />
<span className="system-sm-regular grow text-left">
{t('table.header.clearAll', { ns: 'appAnnotation' })}
</span>
@ -167,7 +163,7 @@ const HeaderOptions: FC<Props> = ({
return (
<div className="flex space-x-2">
<Button variant="primary" onClick={() => setShowAddModal(true)}>
<RiAddLine className="mr-0.5 h-4 w-4" />
<span className="i-ri-add-line mr-0.5 h-4 w-4" />
<div>{t('table.header.addAnnotation', { ns: 'appAnnotation' })}</div>
</Button>
<CustomPopover
@ -175,7 +171,7 @@ const HeaderOptions: FC<Props> = ({
position="br"
trigger="click"
btnElement={
<RiMoreFill className="h-4 w-4" />
<span className="i-ri-more-fill h-4 w-4" />
}
btnClassName="btn btn-secondary btn-medium w-8 p-0"
className="!z-20 h-fit !w-[155px]"

View File

@ -4,7 +4,6 @@ import type { QueryParam } from './filter'
import type { AnnotationItem, AnnotationItemBasic } from './type'
import type { AnnotationReplyConfig } from '@/models/debug'
import type { App } from '@/types/app'
import { RiEqualizer2Line } from '@remixicon/react'
import { useDebounce } from 'ahooks'
import * as React from 'react'
import { useEffect, useState } from 'react'
@ -182,7 +181,7 @@ const Annotation: FC<Props> = (props) => {
<div className="flex items-center pl-1.5">
<div className="mr-1 h-3.5 w-[1px] shrink-0 bg-divider-subtle"></div>
<ActionButton onClick={() => setIsShowEdit(true)}>
<RiEqualizer2Line className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-equalizer-2-line h-4 w-4 text-text-tertiary" />
</ActionButton>
</div>
)}

View File

@ -1,7 +1,6 @@
'use client'
import type { FC } from 'react'
import type { AnnotationItem } from './type'
import { RiDeleteBinLine, RiEditLine } from '@remixicon/react'
import * as React from 'react'
import { useCallback, useMemo } from 'react'
import { useTranslation } from 'react-i18next'
@ -116,7 +115,7 @@ const List: FC<Props> = ({
{/* Actions */}
<div className="flex space-x-1 text-text-tertiary">
<ActionButton onClick={() => onView(item)}>
<RiEditLine className="h-4 w-4" />
<span className="i-ri-edit-line h-4 w-4" />
</ActionButton>
<ActionButton
onClick={() => {
@ -124,7 +123,7 @@ const List: FC<Props> = ({
setShowConfirmDelete(true)
}}
>
<RiDeleteBinLine className="h-4 w-4" />
<span className="i-ri-delete-bin-line h-4 w-4" />
</ActionButton>
</div>
</td>

View File

@ -1,6 +1,5 @@
import type { ReactNode } from 'react'
import { Dialog, Transition } from '@headlessui/react'
import { RiCloseLine } from '@remixicon/react'
import { Fragment, useCallback } from 'react'
import { cn } from '@/utils/classnames'
@ -47,7 +46,7 @@ const AccessControlDialog = ({
>
<Dialog.Panel className={cn('relative h-auto min-h-[323px] w-[600px] overflow-y-auto rounded-2xl bg-components-panel-bg p-0 shadow-xl transition-all', className)}>
<div onClick={() => close()} className="absolute right-5 top-5 z-10 flex h-8 w-8 cursor-pointer items-center justify-center">
<RiCloseLine className="h-5 w-5 text-text-tertiary" />
<span className="i-ri-close-line h-5 w-5 text-text-tertiary" />
</div>
{children}
</Dialog.Panel>

View File

@ -1,7 +1,6 @@
'use client'
import type { AccessControlAccount, AccessControlGroup, Subject, SubjectAccount, SubjectGroup } from '@/models/access-control'
import { FloatingOverlay } from '@floating-ui/react'
import { RiAddCircleFill, RiArrowRightSLine, RiOrganizationChart } from '@remixicon/react'
import { useDebounce } from 'ahooks'
import { useCallback, useEffect, useRef, useState } from 'react'
import { useTranslation } from 'react-i18next'
@ -48,7 +47,7 @@ export default function AddMemberOrGroupDialog() {
<PortalToFollowElem open={open} onOpenChange={setOpen} offset={{ crossAxis: 300 }} placement="bottom-end">
<PortalToFollowElemTrigger asChild>
<Button variant="ghost-accent" size="small" className="flex shrink-0 items-center gap-x-0.5" onClick={() => setOpen(!open)}>
<RiAddCircleFill className="h-4 w-4" />
<span className="i-ri-add-circle-fill h-4 w-4" />
<span>{t('operation.add', { ns: 'common' })}</span>
</Button>
</PortalToFollowElemTrigger>
@ -158,7 +157,7 @@ function GroupItem({ group }: GroupItemProps) {
<div className="item-center flex grow">
<div className="mr-2 h-5 w-5 overflow-hidden rounded-full bg-components-icon-bg-blue-solid">
<div className="bg-access-app-icon-mask-bg flex h-full w-full items-center justify-center">
<RiOrganizationChart className="h-[14px] w-[14px] text-components-avatar-shape-fill-stop-0" />
<span className="i-ri-organization-chart h-[14px] w-[14px] text-components-avatar-shape-fill-stop-0" />
</div>
</div>
<p className="system-sm-medium mr-1 text-text-secondary">{group.name}</p>
@ -172,7 +171,7 @@ function GroupItem({ group }: GroupItemProps) {
onClick={handleExpandClick}
>
<span className="px-[3px]">{t('accessControlDialog.operateGroupAndMember.expand', { ns: 'app' })}</span>
<RiArrowRightSLine className="h-4 w-4" />
<span className="i-ri-arrow-right-sline h-4 w-4" />
</Button>
</BaseItem>
)

View File

@ -2,7 +2,6 @@
import type { Subject } from '@/models/access-control'
import type { App } from '@/types/app'
import { Description as DialogDescription, DialogTitle } from '@headlessui/react'
import { RiBuildingLine, RiGlobalLine, RiVerifiedBadgeLine } from '@remixicon/react'
import { useCallback, useEffect } from 'react'
import { useTranslation } from 'react-i18next'
import { useGlobalPublicStore } from '@/context/global-public-context'
@ -78,7 +77,7 @@ export default function AccessControl(props: AccessControlProps) {
<AccessControlItem type={AccessMode.ORGANIZATION}>
<div className="flex items-center p-3">
<div className="flex grow items-center gap-x-2">
<RiBuildingLine className="h-4 w-4 text-text-primary" />
<span className="i-ri-building-line h-4 w-4 text-text-primary" />
<p className="system-sm-medium text-text-primary">{t('accessControlDialog.accessItems.organization', { ns: 'app' })}</p>
</div>
</div>
@ -89,7 +88,7 @@ export default function AccessControl(props: AccessControlProps) {
<AccessControlItem type={AccessMode.EXTERNAL_MEMBERS}>
<div className="flex items-center p-3">
<div className="flex grow items-center gap-x-2">
<RiVerifiedBadgeLine className="h-4 w-4 text-text-primary" />
<span className="i-ri-verified-badge-line h-4 w-4 text-text-primary" />
<p className="system-sm-medium text-text-primary">{t('accessControlDialog.accessItems.external', { ns: 'app' })}</p>
</div>
{!hideTip && <WebAppSSONotEnabledTip />}
@ -97,7 +96,7 @@ export default function AccessControl(props: AccessControlProps) {
</AccessControlItem>
<AccessControlItem type={AccessMode.PUBLIC}>
<div className="flex items-center gap-x-2 p-3">
<RiGlobalLine className="h-4 w-4 text-text-primary" />
<span className="i-ri-global-line h-4 w-4 text-text-primary" />
<p className="system-sm-medium text-text-primary">{t('accessControlDialog.accessItems.anyone', { ns: 'app' })}</p>
</div>
</AccessControlItem>

View File

@ -1,6 +1,5 @@
'use client'
import type { AccessControlAccount, AccessControlGroup } from '@/models/access-control'
import { RiAlertFill, RiCloseCircleFill, RiLockLine, RiOrganizationChart } from '@remixicon/react'
import { useCallback, useEffect } from 'react'
import { useTranslation } from 'react-i18next'
import { AccessMode } from '@/models/access-control'
@ -28,7 +27,7 @@ export default function SpecificGroupsOrMembers() {
return (
<div className="flex items-center p-3">
<div className="flex grow items-center gap-x-2">
<RiLockLine className="h-4 w-4 text-text-primary" />
<span className="i-ri-lock-line h-4 w-4 text-text-primary" />
<p className="system-sm-medium text-text-primary">{t('accessControlDialog.accessItems.specific', { ns: 'app' })}</p>
</div>
</div>
@ -39,7 +38,7 @@ export default function SpecificGroupsOrMembers() {
<div>
<div className="flex items-center gap-x-1 p-3">
<div className="flex grow items-center gap-x-1">
<RiLockLine className="h-4 w-4 text-text-primary" />
<span className="i-ri-lock-line h-4 w-4 text-text-primary" />
<p className="system-sm-medium text-text-primary">{t('accessControlDialog.accessItems.specific', { ns: 'app' })}</p>
</div>
<div className="flex items-center gap-x-1">
@ -86,7 +85,7 @@ function GroupItem({ group }: GroupItemProps) {
}, [group, setSpecificGroups, specificGroups])
return (
<BaseItem
icon={<RiOrganizationChart className="h-[14px] w-[14px] text-components-avatar-shape-fill-stop-0" />}
icon={<span className="i-ri-organization-chart h-[14px] w-[14px] text-components-avatar-shape-fill-stop-0" />}
onRemove={handleRemoveGroup}
>
<p className="system-xs-regular text-text-primary">{group.name}</p>
@ -129,7 +128,7 @@ function BaseItem({ icon, onRemove, children }: BaseItemProps) {
</div>
{children}
<div className="flex h-4 w-4 cursor-pointer items-center justify-center" onClick={onRemove}>
<RiCloseCircleFill className="h-[14px] w-[14px] text-text-quaternary" />
<span className="i-ri-close-circle-fill h-[14px] w-[14px] text-text-quaternary" />
</div>
</div>
)
@ -139,7 +138,7 @@ export function WebAppSSONotEnabledTip() {
const { t } = useTranslation()
return (
<Tooltip asChild={false} popupContent={t('accessControlDialog.webAppSSONotEnabledTip', { ns: 'app' })}>
<RiAlertFill className="h-4 w-4 shrink-0 text-text-warning-secondary" />
<span className="i-ri-alert-fill h-4 w-4 shrink-0 text-text-warning-secondary" />
</Tooltip>
)
}

View File

@ -3,15 +3,9 @@ import type { InputVar, Variable } from '@/app/components/workflow/types'
import type { I18nKeysByPrefix } from '@/types/i18n'
import type { PublishWorkflowParams } from '@/types/workflow'
import {
RiArrowDownSLine,
RiArrowRightSLine,
RiBuildingLine,
RiGlobalLine,
RiLockLine,
RiPlanetLine,
RiPlayCircleLine,
RiPlayList2Line,
RiTerminalBoxLine,
RiVerifiedBadgeLine,
} from '@remixicon/react'
import { useKeyPress } from 'ahooks'
@ -286,7 +280,7 @@ const AppPublisher = ({
disabled={disabled}
>
{t('common.publish', { ns: 'workflow' })}
<RiArrowDownSLine className="h-4 w-4 text-components-button-primary-text" />
<span className="i-ri-arrow-down-sline h-4 w-4 text-components-button-primary-text" />
</Button>
</PortalToFollowElemTrigger>
<PortalToFollowElemContent className="z-[11]">
@ -398,7 +392,7 @@ const AppPublisher = ({
</div>
{!isAppAccessSet && <p className="system-xs-regular shrink-0 text-text-tertiary">{t('publishApp.notSet', { ns: 'app' })}</p>}
<div className="flex h-4 w-4 shrink-0 items-center justify-center">
<RiArrowRightSLine className="h-4 w-4 text-text-quaternary" />
<span className="i-ri-arrow-right-sline h-4 w-4 text-text-quaternary" />
</div>
</div>
{!isAppAccessSet && <p className="system-xs-regular mt-1 text-text-warning">{t('publishApp.notSetDesc', { ns: 'app' })}</p>}
@ -413,7 +407,7 @@ const AppPublisher = ({
className="flex-1"
disabled={disabledFunctionButton}
link={appURL}
icon={<RiPlayCircleLine className="h-4 w-4" />}
icon={<span className="i-ri-play-circle-line h-4 w-4" />}
>
{t('common.runApp', { ns: 'workflow' })}
</SuggestedAction>
@ -425,7 +419,7 @@ const AppPublisher = ({
className="flex-1"
disabled={disabledFunctionButton}
link={`${appURL}${appURL.includes('?') ? '&' : '?'}mode=batch`}
icon={<RiPlayList2Line className="h-4 w-4" />}
icon={<span className="i-ri-play-list-2-line h-4 w-4" />}
>
{t('common.batchRunApp', { ns: 'workflow' })}
</SuggestedAction>
@ -451,7 +445,7 @@ const AppPublisher = ({
handleOpenInExplore()
}}
disabled={disabledFunctionButton}
icon={<RiPlanetLine className="h-4 w-4" />}
icon={<span className="i-ri-planet-line h-4 w-4" />}
>
{t('common.openInExplore', { ns: 'workflow' })}
</SuggestedAction>
@ -461,7 +455,7 @@ const AppPublisher = ({
className="flex-1"
disabled={!publishedAt || missingStartNode}
link="./develop"
icon={<RiTerminalBoxLine className="h-4 w-4" />}
icon={<span className="i-ri-terminal-box-line h-4 w-4" />}
>
{t('common.accessAPIReference', { ns: 'workflow' })}
</SuggestedAction>

View File

@ -1,7 +1,6 @@
import type { FC } from 'react'
import type { ModelAndParameter } from '../configuration/debug/types'
import type { Model, ModelItem } from '@/app/components/header/account-setting/model-provider-page/declarations'
import { RiArrowDownSLine } from '@remixicon/react'
import { useState } from 'react'
import { useTranslation } from 'react-i18next'
import Button from '@/app/components/base/button'
@ -73,7 +72,7 @@ const PublishWithMultipleModel: FC<PublishWithMultipleModelProps> = ({
className="mt-3 w-full"
>
{t('operation.applyConfig', { ns: 'appDebug' })}
<RiArrowDownSLine className="ml-0.5 h-3 w-3" />
<span className="i-ri-arrow-down-sline ml-0.5 h-3 w-3" />
</Button>
</PortalToFollowElemTrigger>
<PortalToFollowElemContent className="z-50 mt-1 w-[288px]">

View File

@ -1,5 +1,4 @@
import type { HTMLProps, PropsWithChildren } from 'react'
import { RiArrowRightUpLine } from '@remixicon/react'
import { cn } from '@/utils/classnames'
export type SuggestedActionProps = PropsWithChildren<HTMLProps<HTMLAnchorElement> & {
@ -25,7 +24,7 @@ const SuggestedAction = ({ icon, link, disabled, children, className, onClick, .
>
<div className="relative h-4 w-4">{icon}</div>
<div className="system-sm-medium shrink grow basis-0">{children}</div>
<RiArrowRightUpLine className="h-3.5 w-3.5" />
<span className="i-ri-arrow-right-up-line h-3.5 w-3.5" />
</a>
)
}

View File

@ -1,6 +1,5 @@
import type { FC } from 'react'
import type { VersionHistory } from '@/types/workflow'
import { RiCloseLine } from '@remixicon/react'
import * as React from 'react'
import { useCallback, useState } from 'react'
import { useTranslation } from 'react-i18next'
@ -78,7 +77,7 @@ const VersionInfoModal: FC<VersionInfoModalProps> = ({
{versionInfo?.marked_name ? t('versionHistory.editVersionInfo', { ns: 'workflow' }) : t('versionHistory.nameThisVersion', { ns: 'workflow' })}
</div>
<div className="absolute right-5 top-5 flex h-8 w-8 cursor-pointer items-center justify-center p-1.5" onClick={onClose}>
<RiCloseLine className="h-[18px] w-[18px] text-text-tertiary" />
<span className="i-ri-close-line h-[18px] w-[18px] text-text-tertiary" />
</div>
</div>
<div className="flex flex-col gap-y-4 px-6 py-3">

View File

@ -1,9 +1,6 @@
'use client'
import type { FC } from 'react'
import {
RiAddLine,
RiEditLine,
} from '@remixicon/react'
import { noop } from 'es-toolkit/function'
import * as React from 'react'
import { useTranslation } from 'react-i18next'
@ -17,8 +14,8 @@ export type IOperationBtnProps = {
}
const iconMap = {
add: <RiAddLine className="h-3.5 w-3.5" />,
edit: <RiEditLine className="h-3.5 w-3.5" />,
add: <span className="i-ri-add-line h-3.5 w-3.5" />,
edit: <span className="i-ri-edit-line h-3.5 w-3.5" />,
}
const OperationBtn: FC<IOperationBtnProps> = ({

View File

@ -2,10 +2,7 @@
import type { FC } from 'react'
import type { ExternalDataTool } from '@/models/common'
import type { PromptRole, PromptVariable } from '@/models/debug'
import {
RiDeleteBinLine,
RiErrorWarningFill,
} from '@remixicon/react'
import { useBoolean } from 'ahooks'
import copy from 'copy-to-clipboard'
import { produce } from 'immer'
@ -151,7 +148,7 @@ const AdvancedPromptInput: FC<Props> = ({
}}
>
<div className="flex items-center pr-2">
<RiErrorWarningFill className="mr-1 h-4 w-4 text-[#F79009]" />
<span className="i-ri-error-warning-fill mr-1 h-4 w-4 text-[#F79009]" />
<div className="text-[13px] font-medium leading-[18px] text-[#DC6803]">{t('promptMode.contextMissing', { ns: 'appDebug' })}</div>
</div>
<Button
@ -191,7 +188,7 @@ const AdvancedPromptInput: FC<Props> = ({
)}
<div className={cn(s.optionWrap, 'items-center space-x-1')}>
{canDelete && (
<RiDeleteBinLine onClick={onDelete} className="h-6 w-6 cursor-pointer p-1 text-text-tertiary" />
<span className="i-ri-delete-bin-line h-6 w-6 cursor-pointer p-1 text-text-tertiary" onClick={onDelete} />
)}
{!isCopied
? (

View File

@ -2,9 +2,7 @@
import type { FC } from 'react'
import type { PromptItem, PromptVariable } from '@/models/debug'
import type { AppModeEnum } from '@/types/app'
import {
RiAddLine,
} from '@remixicon/react'
import { produce } from 'immer'
import * as React from 'react'
import { useTranslation } from 'react-i18next'
@ -161,7 +159,7 @@ const Prompt: FC<IPromptProps> = ({
onClick={handleAddMessage}
className="mt-3 w-full"
>
<RiAddLine className="mr-2 h-4 w-4" />
<span className="i-ri-add-line mr-2 h-4 w-4" />
<div>{t('promptMode.operation.addMessage', { ns: 'appDebug' })}</div>
</Button>
)}

View File

@ -1,7 +1,6 @@
'use client'
import type { FC } from 'react'
import type { InputVarType } from '@/app/components/workflow/types'
import { ChevronDownIcon } from '@heroicons/react/20/solid'
import * as React from 'react'
import { useState } from 'react'
import Badge from '@/app/components/base/badge'
@ -62,7 +61,7 @@ const TypeSelector: FC<Props> = ({
</div>
<div className="flex items-center space-x-1">
<Badge uppercase={false}>{inputVarTypeToVarType(selectedItem?.value as InputVarType)}</Badge>
<ChevronDownIcon className={cn('h-4 w-4 shrink-0 text-text-quaternary group-hover:text-text-secondary', open && 'text-text-secondary')} />
<span className={`i-heroicons-chevron-down-20-solid ${cn('h-4 w-4 shrink-0 text-text-quaternary group-hover:text-text-secondary', open && 'text-text-secondary')}`} />
</div>
</div>

View File

@ -1,6 +1,5 @@
'use client'
import type { FC } from 'react'
import { RiAddLine, RiDeleteBinLine, RiDraggable } from '@remixicon/react'
import * as React from 'react'
import { useState } from 'react'
import { useTranslation } from 'react-i18next'
@ -49,7 +48,7 @@ const ConfigSelect: FC<IConfigSelectProps> = ({
)}
key={index}
>
<RiDraggable className="handle h-4 w-4 cursor-grab text-text-quaternary" />
<span className="handle i-ri-draggable h-4 w-4 cursor-grab text-text-quaternary" />
<input
key={index}
type="input"
@ -77,7 +76,7 @@ const ConfigSelect: FC<IConfigSelectProps> = ({
onMouseEnter={() => setDeletingID(index)}
onMouseLeave={() => setDeletingID(null)}
>
<RiDeleteBinLine className="h-3.5 w-3.5" />
<span className="i-ri-delete-bin-line h-3.5 w-3.5" />
</div>
</div>
))}
@ -89,7 +88,7 @@ const ConfigSelect: FC<IConfigSelectProps> = ({
onClick={() => { onChange([...options, '']) }}
className="mt-1 flex h-9 cursor-pointer items-center gap-2 rounded-lg bg-components-button-tertiary-bg px-3 text-components-button-tertiary-text hover:bg-components-button-tertiary-bg-hover"
>
<RiAddLine className="h-4 w-4" />
<span className="i-ri-add-line h-4 w-4" />
<div className="system-sm-medium text-[13px]">{t('variableConfig.addOption', { ns: 'appDebug' })}</div>
</div>
</div>

View File

@ -1,11 +1,7 @@
'use client'
import type { FC } from 'react'
import type { IInputTypeIconProps } from './input-type-icon'
import {
RiDeleteBinLine,
RiDraggable,
RiEditLine,
} from '@remixicon/react'
import * as React from 'react'
import { useState } from 'react'
import Badge from '@/app/components/base/badge'
@ -42,7 +38,7 @@ const VarItem: FC<ItemProps> = ({
<div className={cn('group relative mb-1 flex h-[34px] w-full items-center rounded-lg border-[0.5px] border-components-panel-border-subtle bg-components-panel-on-panel-item-bg pl-2.5 pr-3 shadow-xs last-of-type:mb-0 hover:bg-components-panel-on-panel-item-bg-hover hover:shadow-sm', isDeleting && 'border-state-destructive-border hover:bg-state-destructive-hover', readonly && 'cursor-not-allowed', className)}>
<VarIcon className={cn('mr-1 h-4 w-4 shrink-0 text-text-accent', canDrag && 'group-hover:opacity-0')} />
{canDrag && (
<RiDraggable className="absolute left-3 top-3 hidden h-3 w-3 cursor-pointer text-text-tertiary group-hover:block" />
<span className="i-ri-draggable absolute left-3 top-3 hidden h-3 w-3 cursor-pointer text-text-tertiary group-hover:block" />
)}
<div className="flex w-0 grow items-center">
<div className="truncate" title={`${name} · ${label}`}>
@ -62,7 +58,7 @@ const VarItem: FC<ItemProps> = ({
className="mr-1 flex h-6 w-6 cursor-pointer items-center justify-center rounded-md hover:bg-black/5"
onClick={onEdit}
>
<RiEditLine className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-edit-line h-4 w-4 text-text-tertiary" />
</div>
<div
data-testid="var-item-delete-btn"
@ -71,7 +67,7 @@ const VarItem: FC<ItemProps> = ({
onMouseOver={() => setIsDeleting(true)}
onMouseLeave={() => setIsDeleting(false)}
>
<RiDeleteBinLine className="h-4 w-4" />
<span className="i-ri-delete-bin-line h-4 w-4" />
</div>
</div>
</div>

View File

@ -1,6 +1,5 @@
'use client'
import type { FC } from 'react'
import { RiSettings2Line } from '@remixicon/react'
import { memo, useState } from 'react'
import { useTranslation } from 'react-i18next'
import Button from '@/app/components/base/button'
@ -27,7 +26,7 @@ const ParamsConfig: FC = () => {
>
<PortalToFollowElemTrigger onClick={() => setOpen(v => !v)}>
<Button variant="ghost" size="small" className={cn('')}>
<RiSettings2Line className="h-3.5 w-3.5" />
<span className="i-ri-settings-2-line h-3.5 w-3.5" />
<div className="ml-1">{t('voice.settings', { ns: 'appDebug' })}</div>
</Button>
</PortalToFollowElemTrigger>

View File

@ -1,7 +1,6 @@
'use client'
import type { FC } from 'react'
import type { AgentConfig } from '@/models/debug'
import { RiSettings2Line } from '@remixicon/react'
import * as React from 'react'
import { useState } from 'react'
import { useTranslation } from 'react-i18next'
@ -27,7 +26,7 @@ const AgentSettingButton: FC<Props> = ({
return (
<>
<Button onClick={() => setIsShowAgentSetting(true)} className="mr-2 shrink-0">
<RiSettings2Line className="mr-1 h-4 w-4 text-text-tertiary" />
<span className="i-ri-settings-2-line mr-1 h-4 w-4 text-text-tertiary" />
{t('agent.setting.name', { ns: 'appDebug' })}
</Button>
{isShowAgentSetting && (

View File

@ -1,7 +1,6 @@
'use client'
import type { FC } from 'react'
import type { AgentConfig } from '@/models/debug'
import { RiCloseLine } from '@remixicon/react'
import { useClickAway } from 'ahooks'
import * as React from 'react'
import { useEffect, useRef, useState } from 'react'
@ -68,7 +67,7 @@ const AgentSetting: FC<Props> = ({
onClick={onCancel}
className="flex h-6 w-6 cursor-pointer items-center justify-center"
>
<RiCloseLine className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-close-line h-4 w-4 text-text-tertiary" />
</div>
</div>
</div>

View File

@ -4,11 +4,7 @@ import type { Collection } from '@/app/components/tools/types'
import type { ToolDefaultValue, ToolValue } from '@/app/components/workflow/block-selector/types'
import type { ToolWithProvider } from '@/app/components/workflow/types'
import type { AgentTool } from '@/types/app'
import {
RiDeleteBinLine,
RiEqualizer2Line,
RiInformation2Line,
} from '@remixicon/react'
import copy from 'copy-to-clipboard'
import { produce } from 'immer'
import * as React from 'react'
@ -226,7 +222,7 @@ const AgentTools: FC = () => {
>
<div className="h-4 w-4">
<div className="ml-0.5 hidden group-hover:inline-block" data-testid="tool-info-tooltip">
<RiInformation2Line className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-information-2-line h-4 w-4 text-text-tertiary" />
</div>
</div>
</Tooltip>
@ -255,7 +251,7 @@ const AgentTools: FC = () => {
onMouseOver={() => setIsDeleting(index)}
onMouseLeave={() => setIsDeleting(-1)}
>
<RiDeleteBinLine className="h-4 w-4" />
<span className="i-ri-delete-bin-line h-4 w-4" />
</div>
</div>
)}
@ -273,7 +269,7 @@ const AgentTools: FC = () => {
setIsShowSettingTool(true)
}}
>
<RiEqualizer2Line className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-equalizer-2-line h-4 w-4 text-text-tertiary" />
</div>
</Tooltip>
)}
@ -290,7 +286,7 @@ const AgentTools: FC = () => {
onMouseLeave={() => setIsDeleting(-1)}
data-testid="delete-removed-tool"
>
<RiDeleteBinLine className="h-4 w-4" />
<span className="i-ri-delete-bin-line h-4 w-4" />
</div>
</div>
)}

View File

@ -2,10 +2,7 @@
import type { FC } from 'react'
import type { Collection, Tool } from '@/app/components/tools/types'
import type { ToolWithProvider } from '@/app/components/workflow/types'
import {
RiArrowLeftLine,
RiCloseLine,
} from '@remixicon/react'
import * as React from 'react'
import { useEffect, useState } from 'react'
import { useTranslation } from 'react-i18next'
@ -181,7 +178,7 @@ const SettingBuiltInTool: FC<Props> = ({
<div className="relative border-b border-divider-subtle p-4 pb-3">
<div className="absolute right-3 top-3">
<ActionButton onClick={onHide}>
<RiCloseLine className="h-4 w-4" />
<span className="i-ri-close-line h-4 w-4" />
</ActionButton>
</div>
{showBackButton && (
@ -189,7 +186,7 @@ const SettingBuiltInTool: FC<Props> = ({
className="system-xs-semibold-uppercase mb-2 flex cursor-pointer items-center gap-1 text-text-accent-secondary"
onClick={onHide}
>
<RiArrowLeftLine className="h-4 w-4" />
<span className="i-ri-arrow-left-line h-4 w-4" />
{t('detailPanel.operation.back', { ns: 'plugin' })}
</div>
)}

View File

@ -1,7 +1,6 @@
'use client'
import type { FC } from 'react'
import type { AgentConfig } from '@/models/debug'
import { RiArrowDownSLine } from '@remixicon/react'
import * as React from 'react'
import { useState } from 'react'
import { useTranslation } from 'react-i18next'
@ -120,7 +119,7 @@ const AssistantTypePicker: FC<Props> = ({
<div className={cn(open && 'bg-gray-50', 'flex h-8 cursor-pointer select-none items-center space-x-1 rounded-lg border border-black/5 px-3 text-indigo-600')}>
{isAgent ? <BubbleText className="h-3 w-3" /> : <CuteRobot className="h-3 w-3" />}
<div className="text-xs font-medium">{t(`assistantType.${isAgent ? 'agentAssistant' : 'chatAssistant'}.name`, { ns: 'appDebug' })}</div>
<RiArrowDownSLine className="h-3 w-3" />
<span className="i-ri-arrow-down-sline h-3 w-3" />
</div>
</PortalToFollowElemTrigger>
<PortalToFollowElemContent style={{ zIndex: 1000 }}>

View File

@ -1,8 +1,6 @@
'use client'
import type { FC } from 'react'
import {
RiSparklingFill,
} from '@remixicon/react'
import * as React from 'react'
import { useTranslation } from 'react-i18next'
import Button from '@/app/components/base/button'
@ -17,7 +15,7 @@ const AutomaticBtn: FC<IAutomaticBtnProps> = ({
return (
<Button variant="secondary-accent" size="small" onClick={onClick}>
<RiSparklingFill className="mr-1 h-3.5 w-3.5" />
<span className="i-ri-sparkling-fill mr-1 h-3.5 w-3.5" />
<span className="">{t('operation.automatic', { ns: 'appDebug' })}</span>
</Button>
)

View File

@ -1,4 +1,3 @@
import { RiArrowDownSLine, RiSparklingFill } from '@remixicon/react'
import { useBoolean } from 'ahooks'
import * as React from 'react'
import { useTranslation } from 'react-i18next'
@ -37,10 +36,10 @@ const PromptToast = ({
<div className={cn('rounded-xl border-[0.5px] border-components-panel-border bg-background-section-burn pl-4 shadow-xs', className)}>
<div className="my-3 flex h-4 items-center justify-between pr-3">
<div className="flex items-center space-x-1">
<RiSparklingFill className="size-3.5 text-components-input-border-active-prompt-1" />
<span className="i-ri-sparkling-fill size-3.5 text-components-input-border-active-prompt-1" />
<span className={cn(s.optimizationNoteText, 'system-xs-semibold-uppercase')}>{t('generate.optimizationNote', { ns: 'appDebug' })}</span>
</div>
<RiArrowDownSLine className={cn('size-4 cursor-pointer text-text-tertiary', isFold && 'rotate-[-90deg]')} onClick={toggleFold} />
<span className={`i-ri-arrow-down-sline ${cn('size-4 cursor-pointer text-text-tertiary', isFold && 'rotate-[-90deg]')}`} onClick={toggleFold} />
</div>
{!isFold && (
<div className="pb-4 pr-4">

View File

@ -1,7 +1,6 @@
'use client'
import type { FC } from 'react'
import type { GenRes } from '@/service/debug'
import { RiClipboardLine } from '@remixicon/react'
import copy from 'copy-to-clipboard'
import * as React from 'react'
import { useTranslation } from 'react-i18next'
@ -57,7 +56,7 @@ const Result: FC<Props> = ({
Toast.notify({ type: 'success', message: t('actionMsg.copySuccessfully', { ns: 'common' }) })
}}
>
<RiClipboardLine className="h-4 w-4 text-text-secondary" />
<span className="i-ri-clipboard-line h-4 w-4 text-text-secondary" />
</Button>
<Button variant="primary" onClick={onApply}>
{t('generate.apply', { ns: 'appDebug' })}

View File

@ -1,4 +1,3 @@
import { RiArrowDownSLine, RiCheckLine } from '@remixicon/react'
import { useBoolean } from 'ahooks'
import * as React from 'react'
import { useCallback } from 'react'
@ -59,7 +58,7 @@ const VersionSelector: React.FC<VersionSelectorProps> = ({ versionLen, value, on
{value + 1}
{isLatest && ` · ${t('generate.latest', { ns: 'appDebug' })}`}
</div>
{moreThanOneVersion && <RiArrowDownSLine className="size-3 " />}
{moreThanOneVersion && <span className="i-ri-arrow-down-sline size-3 " />}
</div>
</PortalToFollowElemTrigger>
<PortalToFollowElemContent className={cn(
@ -91,7 +90,7 @@ const VersionSelector: React.FC<VersionSelectorProps> = ({ versionLen, value, on
{option.label}
</div>
{
value === option.value && <RiCheckLine className="h-4 w-4 shrink-0 text-text-accent" />
value === option.value && <span className="i-ri-check-line h-4 w-4 shrink-0 text-text-accent" />
}
</div>
))

View File

@ -1,10 +1,7 @@
'use client'
import type { FC } from 'react'
import type { DataSet } from '@/models/datasets'
import {
RiDeleteBinLine,
RiEditLine,
} from '@remixicon/react'
import * as React from 'react'
import { useState } from 'react'
import { useTranslation } from 'react-i18next'
@ -79,7 +76,7 @@ const Item: FC<ItemProps> = ({
setShowSettingsModal(true)
}}
>
<RiEditLine className="h-4 w-4 shrink-0 text-text-tertiary" />
<span className="i-ri-edit-line h-4 w-4 shrink-0 text-text-tertiary" />
</ActionButton>
)
}
@ -91,7 +88,7 @@ const Item: FC<ItemProps> = ({
onMouseEnter={() => setIsDeleting(true)}
onMouseLeave={() => setIsDeleting(false)}
>
<RiDeleteBinLine className={cn('h-4 w-4 shrink-0 text-text-tertiary', isDeleting && 'text-text-destructive')} />
<span className={`i-ri-delete-bin-line ${cn('h-4 w-4 shrink-0 text-text-tertiary', isDeleting && 'text-text-destructive')}`} />
</ActionButton>
)
}

View File

@ -1,7 +1,6 @@
'use client'
import type { FC } from 'react'
import type { IInputTypeIconProps } from '@/app/components/app/configuration/config-var/input-type-icon'
import { ChevronDownIcon } from '@heroicons/react/24/outline'
import * as React from 'react'
import { useState } from 'react'
import { useTranslation } from 'react-i18next'
@ -76,7 +75,7 @@ const VarPicker: FC<Props> = ({
</div>
)}
</div>
<ChevronDownIcon className={cn(open && 'rotate-180 text-text-tertiary', 'h-3.5 w-3.5')} />
<span className={`i-heroicons-chevron-down-24-outline ${cn(open && 'rotate-180 text-text-tertiary', 'h-3.5 w-3.5')}`} />
</div>
</PortalToFollowElemTrigger>
<PortalToFollowElemContent style={{ zIndex: 1000 }}>

View File

@ -1,7 +1,6 @@
'use client'
import type { DataSet } from '@/models/datasets'
import type { DatasetConfigs } from '@/models/debug'
import { RiEqualizer2Line } from '@remixicon/react'
import { memo, useEffect, useState } from 'react'
import { useTranslation } from 'react-i18next'
import { useContext } from 'use-context-selector'
@ -122,7 +121,7 @@ const ParamsConfig = ({
}}
disabled={disabled}
>
<RiEqualizer2Line className="mr-1 h-3.5 w-3.5" />
<span className="i-ri-equalizer-2-line mr-1 h-3.5 w-3.5" />
{t('retrievalSettings', { ns: 'dataset' })}
</Button>
{

View File

@ -2,7 +2,6 @@ import type { FC } from 'react'
import type { Member } from '@/models/common'
import type { DataSet } from '@/models/datasets'
import type { RetrievalConfig } from '@/types/app'
import { RiCloseLine } from '@remixicon/react'
import { isEqual } from 'es-toolkit/predicate'
import { useEffect, useMemo, useRef, useState } from 'react'
import { useTranslation } from 'react-i18next'
@ -202,7 +201,7 @@ const SettingsModal: FC<SettingsModalProps> = ({
onClick={onCancel}
className="flex h-6 w-6 cursor-pointer items-center justify-center"
>
<RiCloseLine className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-close-line h-4 w-4 text-text-tertiary" />
</div>
</div>
</div>

View File

@ -2,7 +2,6 @@ import type { FC } from 'react'
import type { DataSet } from '@/models/datasets'
import type { RetrievalConfig } from '@/types/app'
import type { DocPathWithoutLang } from '@/types/doc-paths'
import { RiCloseLine } from '@remixicon/react'
import Divider from '@/app/components/base/divider'
import { AlertTriangle } from '@/app/components/base/icons/src/vender/solid/alertsAndFeedback'
import { ApiConnectionMod } from '@/app/components/base/icons/src/vender/solid/development'
@ -212,7 +211,7 @@ export const RetrievalChangeTip: FC<RetrievalChangeTipProps> = ({
}}
aria-label="close-retrieval-change-tip"
>
<RiCloseLine className="h-4 w-4 text-gray-500" />
<span className="i-ri-close-line h-4 w-4 text-gray-500" />
</button>
</div>
)

View File

@ -1,7 +1,6 @@
import type { FC } from 'react'
import type { ModelAndParameter } from '../types'
import type { FormValue } from '@/app/components/header/account-setting/model-provider-page/declarations'
import { RiArrowDownSLine } from '@remixicon/react'
import { memo } from 'react'
import { useTranslation } from 'react-i18next'
import { AlertTriangle } from '@/app/components/base/icons/src/vender/line/alertsAndFeedback'
@ -108,7 +107,7 @@ const ModelParameterTrigger: FC<ModelParameterTriggerProps> = ({
</div>
)
}
<RiArrowDownSLine className={`h-3 w-3 ${(currentModel && currentProvider) ? 'text-text-tertiary' : 'text-text-accent'}`} />
<span className={`i-ri-arrow-down-sline ${`h-3 w-3 ${(currentModel && currentProvider) ? 'text-text-tertiary' : 'text-text-accent'}`}`} />
{
currentModel && currentModel.status !== ModelStatusEnum.active && (
<Tooltip popupContent={MODEL_STATUS_TEXT[currentModel.status][language]}>

View File

@ -5,11 +5,7 @@ import type { ModelAndParameter } from './types'
import type { ModelParameterModalProps } from '@/app/components/header/account-setting/model-provider-page/model-parameter-modal'
import type { Inputs } from '@/models/debug'
import type { ModelConfig as BackendModelConfig, VisionFile, VisionSettings } from '@/types/app'
import {
RiAddLine,
RiEqualizer2Line,
RiSparklingFill,
} from '@remixicon/react'
import { useBoolean } from 'ahooks'
import { noop } from 'es-toolkit/function'
import { cloneDeep } from 'es-toolkit/object'
@ -405,7 +401,7 @@ const Debug: FC<IDebug> = ({
onClick={() => onMultipleModelConfigsChange(true, [...multipleModelConfigs, { id: `${Date.now()}`, model: '', provider: '', parameters: {} }])}
disabled={multipleModelConfigs.length >= 4}
>
<RiAddLine className="mr-1 h-3.5 w-3.5" />
<span className="i-ri-add-line mr-1 h-3.5 w-3.5" />
{t('modelProvider.addModel', { ns: 'common' })}
(
{multipleModelConfigs.length}
@ -438,7 +434,7 @@ const Debug: FC<IDebug> = ({
popupContent={t('panel.userInputField', { ns: 'workflow' })}
>
<ActionButton state={expanded ? ActionButtonState.Active : undefined} onClick={() => !readonly && setExpanded(!expanded)}>
<RiEqualizer2Line className="h-4 w-4" />
<span className="i-ri-equalizer-2-line h-4 w-4" />
</ActionButton>
</TooltipPlus>
{expanded && <div className="absolute bottom-[-14px] right-[5px] z-10 h-3 w-3 rotate-45 border-l-[0.5px] border-t-[0.5px] border-components-panel-border-subtle bg-components-panel-on-panel-item-bg" />}
@ -538,7 +534,7 @@ const Debug: FC<IDebug> = ({
)}
{!completionRes && !isResponding && (
<div className="flex grow flex-col items-center justify-center gap-2">
<RiSparklingFill className="h-12 w-12 text-text-empty-state-icon" />
<span className="i-ri-sparkling-fill h-12 w-12 text-text-empty-state-icon" />
<div className="system-sm-regular text-text-quaternary">{t('noResult', { ns: 'appDebug' })}</div>
</div>
)}

View File

@ -18,7 +18,6 @@ import type {
TextToSpeechConfig,
} from '@/models/debug'
import type { ModelConfig as BackendModelConfig, UserInputFormItem, VisionSettings } from '@/types/app'
import { CodeBracketIcon } from '@heroicons/react/20/solid'
import { useBoolean, useGetState } from 'ahooks'
import { clone } from 'es-toolkit/object'
import { isEqual } from 'es-toolkit/predicate'
@ -1009,7 +1008,7 @@ const Configuration: FC = () => {
{isMobile && (
<Button className="mr-2 !h-8 !text-[13px] font-medium" onClick={showDebugPanel}>
<span className="mr-1">{t('operation.debugConfig', { ns: 'appDebug' })}</span>
<CodeBracketIcon className="h-4 w-4 text-text-tertiary" />
<span className="i-heroicons-code-bracket-20-solid h-4 w-4 text-text-tertiary" />
</Button>
)}
<AppPublisher {...{

View File

@ -2,11 +2,7 @@
import type { FC } from 'react'
import type { Inputs } from '@/models/debug'
import type { VisionFile, VisionSettings } from '@/types/app'
import {
RiArrowDownSLine,
RiArrowRightSLine,
RiPlayLargeFill,
} from '@remixicon/react'
import * as React from 'react'
import { useEffect, useMemo, useState } from 'react'
import { useTranslation } from 'react-i18next'
@ -113,8 +109,8 @@ const PromptValuePanel: FC<IPromptValuePanelProps> = ({
<div className={cn('px-4 pt-3', userInputFieldCollapse ? 'pb-3' : 'pb-1')}>
<div className="flex cursor-pointer items-center gap-0.5 py-0.5" onClick={() => setUserInputFieldCollapse(!userInputFieldCollapse)}>
<div className="system-md-semibold-uppercase text-text-secondary">{t('inputs.userInputField', { ns: 'appDebug' })}</div>
{userInputFieldCollapse && <RiArrowRightSLine className="h-4 w-4 text-text-secondary" />}
{!userInputFieldCollapse && <RiArrowDownSLine className="h-4 w-4 text-text-secondary" />}
{userInputFieldCollapse && <span className="i-ri-arrow-right-sline h-4 w-4 text-text-secondary" />}
{!userInputFieldCollapse && <span className="i-ri-arrow-down-sline h-4 w-4 text-text-secondary" />}
</div>
{!userInputFieldCollapse && (
<div className="system-xs-regular mt-1 text-text-tertiary">{t('inputs.completionVarTip', { ns: 'appDebug' })}</div>
@ -219,7 +215,7 @@ const PromptValuePanel: FC<IPromptValuePanelProps> = ({
onClick={() => onSend?.()}
className="w-[96px]"
>
<RiPlayLargeFill className="mr-0.5 h-4 w-4 shrink-0" aria-hidden="true" />
<span className="i-ri-play-large-fill mr-0.5 h-4 w-4 shrink-0" aria-hidden="true" />
{t('inputs.run', { ns: 'appDebug' })}
</Button>
</Tooltip>
@ -231,7 +227,7 @@ const PromptValuePanel: FC<IPromptValuePanelProps> = ({
onClick={() => onSend?.()}
className="w-[96px]"
>
<RiPlayLargeFill className="mr-0.5 h-4 w-4 shrink-0" aria-hidden="true" />
<span className="i-ri-play-large-fill mr-0.5 h-4 w-4 shrink-0" aria-hidden="true" />
{t('inputs.run', { ns: 'appDebug' })}
</Button>
)}

View File

@ -1,9 +1,5 @@
import type { ExternalDataTool } from '@/models/common'
import {
RiAddLine,
RiArrowDownSLine,
RiDeleteBinLine,
} from '@remixicon/react'
import copy from 'copy-to-clipboard'
// abandoned
import { useState } from 'react'
@ -103,7 +99,7 @@ const Tools = () => {
}
{
!!externalDataToolsConfig.length && (
<RiArrowDownSLine className={`hidden h-4 w-4 cursor-pointer text-primary-600 group-hover:block ${expanded ? 'rotate-180' : 'rotate-0'}`} />
<span className={`i-ri-arrow-down-sline ${`hidden h-4 w-4 cursor-pointer text-primary-600 group-hover:block ${expanded ? 'rotate-180' : 'rotate-0'}`}`} />
)
}
</div>
@ -130,7 +126,7 @@ const Tools = () => {
className="flex h-7 cursor-pointer items-center px-3 text-xs font-medium text-gray-700"
onClick={() => handleOpenExternalDataToolModal({}, -1)}
>
<RiAddLine className="mr-[5px] h-3.5 w-3.5 " />
<span className="i-ri-add-line mr-[5px] h-3.5 w-3.5 " />
{t('operation.add', { ns: 'common' })}
</div>
</div>
@ -175,7 +171,7 @@ const Tools = () => {
className="group/action hidden h-6 w-6 cursor-pointer items-center justify-center rounded-md hover:bg-[#FEE4E2] group-hover:flex"
onClick={() => setExternalDataToolsConfig([...externalDataToolsConfig.slice(0, index), ...externalDataToolsConfig.slice(index + 1)])}
>
<RiDeleteBinLine className="h-4 w-4 text-gray-500 group-hover/action:text-[#D92D20]" />
<span className="i-ri-delete-bin-line h-4 w-4 text-gray-500 group-hover/action:text-[#D92D20]" />
</div>
<div className="ml-2 mr-3 hidden h-3.5 w-[1px] bg-gray-200 group-hover:block" />
<Switch

View File

@ -1,7 +1,5 @@
'use client'
import type { App } from '@/models/explore'
import { PlusIcon } from '@heroicons/react/20/solid'
import { RiInformation2Line } from '@remixicon/react'
import { useCallback } from 'react'
import { useTranslation } from 'react-i18next'
import { useContextSelector } from 'use-context-selector'
@ -66,12 +64,12 @@ const AppCard = ({
<div className={cn('absolute bottom-0 left-0 right-0 hidden bg-gradient-to-t from-components-panel-gradient-2 from-[60.27%] to-transparent p-4 pt-8 group-hover:flex')}>
<div className={cn('grid h-8 w-full grid-cols-1 items-center space-x-2', isTrialApp && 'grid-cols-2')}>
<Button variant="primary" onClick={() => onCreate()}>
<PlusIcon className="mr-1 h-4 w-4" />
<span className="i-heroicons-plus-20-solid mr-1 h-4 w-4" />
<span className="text-xs">{t('newApp.useTemplate', { ns: 'app' })}</span>
</Button>
{isTrialApp && (
<Button onClick={showTryAPPPanel(app.app_id)}>
<RiInformation2Line className="mr-1 size-4" />
<span className="i-ri-information-2-line mr-1 size-4" />
<span>{t('appCard.try', { ns: 'explore' })}</span>
</Button>
)}

View File

@ -2,7 +2,6 @@
import type { CreateAppModalProps } from '@/app/components/explore/create-app-modal'
import type { App } from '@/models/explore'
import { RiRobot2Line } from '@remixicon/react'
import { useDebounceFn } from 'ahooks'
import { useRouter } from 'next/navigation'
import * as React from 'react'
@ -248,7 +247,7 @@ function NoTemplateFound() {
return (
<div className="w-full rounded-lg bg-workflow-process-bg p-4">
<div className="mb-2 inline-flex h-8 w-8 items-center justify-center rounded-lg bg-components-card-bg shadow-lg">
<RiRobot2Line className="h-5 w-5 text-text-tertiary" />
<span className="i-ri-robot-2-line h-5 w-5 text-text-tertiary" />
</div>
<p className="title-md-semi-bold text-text-primary">{t('newApp.noTemplateFound', { ns: 'app' })}</p>
<p className="system-sm-regular text-text-tertiary">{t('newApp.noTemplateFoundTip', { ns: 'app' })}</p>

View File

@ -1,5 +1,4 @@
'use client'
import { RiStickyNoteAddLine, RiThumbUpLine } from '@remixicon/react'
import { useTranslation } from 'react-i18next'
import Divider from '@/app/components/base/divider'
import { cn } from '@/utils/classnames'
@ -28,7 +27,7 @@ export default function Sidebar({ current, categories, onClick, onCreateFromBlan
</ul>
<Divider bgStyle="gradient" />
<div className="flex cursor-pointer items-center gap-1 px-3 py-1 text-text-tertiary" onClick={onCreateFromBlank}>
<RiStickyNoteAddLine className="h-3.5 w-3.5" />
<span className="i-ri-sticky-note-add-line h-3.5 w-3.5" />
<span className="system-xs-regular">{t('newApp.startFromBlank', { ns: 'app' })}</span>
</div>
</div>
@ -48,7 +47,7 @@ function CategoryItem({ category, active, onClick }: CategoryItemProps) {
>
{category === AppCategories.RECOMMENDED && (
<div className="inline-flex h-5 w-5 items-center justify-center rounded-md">
<RiThumbUpLine className="h-4 w-4 text-components-menu-item-text group-[.active]:text-components-menu-item-text-active" />
<span className="i-ri-thumb-up-line h-4 w-4 text-components-menu-item-text group-[.active]:text-components-menu-item-text-active" />
</div>
)}
<AppCategoryLabel

View File

@ -1,7 +1,6 @@
'use client'
import type { AppIconSelection } from '../../base/app-icon-picker'
import { RiArrowRightLine, RiArrowRightSLine, RiCommandLine, RiCornerDownLeftLine, RiExchange2Fill } from '@remixicon/react'
import { useDebounceFn, useKeyPress } from 'ahooks'
import Image from 'next/image'
@ -130,7 +129,7 @@ function CreateApp({ onClose, onSuccess, onCreateFromTemplate, defaultAppMode }:
description={t('newApp.workflowShortDescription', { ns: 'app' })}
icon={(
<div className="flex h-6 w-6 items-center justify-center rounded-md bg-components-icon-bg-indigo-solid">
<RiExchange2Fill className="h-4 w-4 text-components-avatar-shape-fill-stop-100" />
<span className="i-ri-exchange-2-fill h-4 w-4 text-components-avatar-shape-fill-stop-100" />
</div>
)}
onClick={() => {
@ -160,7 +159,7 @@ function CreateApp({ onClose, onSuccess, onCreateFromTemplate, defaultAppMode }:
onClick={() => setIsAppTypeExpanded(!isAppTypeExpanded)}
>
<span className="system-2xs-medium-uppercase text-text-tertiary">{t('newApp.forBeginners', { ns: 'app' })}</span>
<RiArrowRightSLine className={`ml-1 h-4 w-4 text-text-tertiary transition-transform ${isAppTypeExpanded ? 'rotate-90' : ''}`} />
<span className={`i-ri-arrow-right-sline ${`ml-1 h-4 w-4 text-text-tertiary transition-transform ${isAppTypeExpanded ? 'rotate-90' : ''}`}`} />
</button>
</div>
{isAppTypeExpanded && (
@ -262,7 +261,7 @@ function CreateApp({ onClose, onSuccess, onCreateFromTemplate, defaultAppMode }:
<div className="system-xs-regular flex cursor-pointer items-center gap-1 text-text-tertiary" onClick={onCreateFromTemplate}>
<span>{t('newApp.noIdeaTip', { ns: 'app' })}</span>
<div className="p-[1px]">
<RiArrowRightLine className="h-3.5 w-3.5" />
<span className="i-ri-arrow-right-line h-3.5 w-3.5" />
</div>
</div>
<div className="flex gap-2">
@ -270,8 +269,8 @@ function CreateApp({ onClose, onSuccess, onCreateFromTemplate, defaultAppMode }:
<Button disabled={isAppsFull || !name} className="gap-1" variant="primary" onClick={handleCreateApp}>
<span>{t('newApp.Create', { ns: 'app' })}</span>
<div className="flex gap-0.5">
<RiCommandLine size={14} className="system-kbd rounded-sm bg-components-kbd-bg-white p-0.5" />
<RiCornerDownLeftLine size={14} className="system-kbd rounded-sm bg-components-kbd-bg-white p-0.5" />
<span className="system-kbd i-ri-command-line size-3.5 rounded-sm bg-components-kbd-bg-white p-0.5" />
<span className="system-kbd i-ri-corner-down-left-line size-3.5 rounded-sm bg-components-kbd-bg-white p-0.5" />
</div>
</Button>
</div>

View File

@ -1,7 +1,6 @@
'use client'
import type { MouseEventHandler } from 'react'
import { RiCloseLine, RiCommandLine, RiCornerDownLeftLine } from '@remixicon/react'
import { useDebounceFn, useKeyPress } from 'ahooks'
import { noop } from 'es-toolkit/function'
import { useRouter } from 'next/navigation'
@ -237,7 +236,7 @@ const CreateFromDSLModal = ({ show, onSuccess, onClose, activeTab = CreateFromDS
className="flex h-8 w-8 cursor-pointer items-center"
onClick={() => onClose()}
>
<RiCloseLine className="h-5 w-5 text-text-tertiary" />
<span className="i-ri-close-line h-5 w-5 text-text-tertiary" />
</div>
</div>
<div className="system-md-semibold flex h-9 items-center space-x-6 border-b border-divider-subtle px-6 text-text-tertiary">
@ -299,8 +298,8 @@ const CreateFromDSLModal = ({ show, onSuccess, onClose, activeTab = CreateFromDS
>
<span>{t('newApp.Create', { ns: 'app' })}</span>
<div className="flex gap-0.5">
<RiCommandLine size={14} className="system-kbd rounded-sm bg-components-kbd-bg-white p-0.5" />
<RiCornerDownLeftLine size={14} className="system-kbd rounded-sm bg-components-kbd-bg-white p-0.5" />
<span className="system-kbd i-ri-command-line size-3.5 rounded-sm bg-components-kbd-bg-white p-0.5" />
<span className="system-kbd i-ri-corner-down-left-line size-3.5 rounded-sm bg-components-kbd-bg-white p-0.5" />
</div>
</Button>
</div>

View File

@ -1,9 +1,6 @@
'use client'
import type { FC } from 'react'
import {
RiDeleteBinLine,
RiUploadCloud2Line,
} from '@remixicon/react'
import * as React from 'react'
import { useEffect, useRef, useState } from 'react'
import { useTranslation } from 'react-i18next'
@ -111,7 +108,7 @@ const Uploader: FC<Props> = ({
{!file && (
<div className={cn('flex h-12 items-center rounded-[10px] border border-dashed border-components-dropzone-border bg-components-dropzone-bg text-sm font-normal', dragging && 'border-components-dropzone-border-accent bg-components-dropzone-bg-accent')}>
<div className="flex w-full items-center justify-center space-x-2">
<RiUploadCloud2Line className="h-6 w-6 text-text-tertiary" />
<span className="i-ri-upload-cloud-2-line h-6 w-6 text-text-tertiary" />
<div className="text-text-tertiary">
{t('dslUploader.button', { ns: 'app' })}
<span className="cursor-pointer pl-1 text-text-accent" onClick={selectHandle}>{t('dslUploader.browse', { ns: 'app' })}</span>
@ -135,7 +132,7 @@ const Uploader: FC<Props> = ({
</div>
<div className="hidden items-center pr-3 group-hover:flex">
<ActionButton onClick={removeFile}>
<RiDeleteBinLine className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-delete-bin-line h-4 w-4 text-text-tertiary" />
</ActionButton>
</div>
</div>

View File

@ -1,6 +1,5 @@
'use client'
import type { AppIconType } from '@/types/app'
import { RiCloseLine } from '@remixicon/react'
import { noop } from 'es-toolkit/function'
import * as React from 'react'
import { useState } from 'react'
@ -77,7 +76,7 @@ const DuplicateAppModal = ({
className={cn('relative !max-w-[480px]', 'px-8')}
>
<div className="absolute right-4 top-4 cursor-pointer p-2" onClick={onHide}>
<RiCloseLine className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-close-line h-4 w-4 text-text-tertiary" />
</div>
<div className="relative mb-9 mt-3 text-xl font-semibold leading-[30px] text-text-primary">{t('duplicateTitle', { ns: 'app' })}</div>
<div className="system-sm-regular mb-9 text-text-secondary">

View File

@ -2,7 +2,6 @@
import type { FC } from 'react'
import type { QueryParam } from './index'
import type { I18nKeysByPrefix } from '@/types/i18n'
import { RiCalendarLine } from '@remixicon/react'
import dayjs from 'dayjs'
import quarterOfYear from 'dayjs/plugin/quarterOfYear'
import * as React from 'react'
@ -47,7 +46,7 @@ const Filter: FC<IFilterProps> = ({ isChatMode, appId, queryParams, setQueryPara
<Chip
className="min-w-[150px]"
panelClassName="w-[270px]"
leftIcon={<RiCalendarLine className="h-4 w-4 text-text-secondary" />}
leftIcon={<span className="i-ri-calendar-line h-4 w-4 text-text-secondary" />}
value={queryParams.period}
onSelect={(item) => {
setQueryParams({ ...queryParams, period: item.value })

View File

@ -8,7 +8,6 @@ import {
HandThumbDownIcon,
HandThumbUpIcon,
} from '@heroicons/react/24/outline'
import { RiCloseLine, RiEditFill } from '@remixicon/react'
import dayjs from 'dayjs'
import timezone from 'dayjs/plugin/timezone'
import utc from 'dayjs/plugin/utc'
@ -610,7 +609,7 @@ function DetailPanel({ detail, onFeedback }: IDetailPanel) {
{!isAdvanced && <ModelInfo model={detail.model_config.model} />}
</div>
<ActionButton size="l" onClick={onClose}>
<RiCloseLine className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-close-line h-4 w-4 text-text-tertiary" />
</ActionButton>
</div>
{/* Panel Body */}
@ -974,7 +973,7 @@ const ConversationList: FC<IConversationList> = ({ logs, appDetail, onRefresh })
<Tooltip
popupContent={(
<span className="inline-flex items-center text-xs text-text-tertiary">
<RiEditFill className="mr-1 h-3 w-3" />
<span className="i-ri-edit-fill mr-1 h-3 w-3" />
{`${t('detail.annotationTip', { ns: 'appLog', user: annotation?.account?.name })} ${formatTime(annotation?.created_at || dayjs().unix(), 'MM-DD hh:mm A')}`}
</span>
)}

View File

@ -1,8 +1,6 @@
'use client'
import type { FC } from 'react'
import {
RiInformation2Line,
} from '@remixicon/react'
import * as React from 'react'
import { useTranslation } from 'react-i18next'
import {
@ -84,7 +82,7 @@ const ModelInfo: FC<Props> = ({
open && 'bg-components-button-tertiary-bg-hover',
)}
>
<RiInformation2Line className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-information-2-line h-4 w-4 text-text-tertiary" />
</div>
</PortalToFollowElemTrigger>
<PortalToFollowElemContent className="z-[1002]">

View File

@ -1,9 +1,6 @@
'use client'
import type { FC } from 'react'
import {
RiArrowDownSLine,
RiArrowRightSLine,
} from '@remixicon/react'
import { useBoolean } from 'ahooks'
import * as React from 'react'
import { useState } from 'react'
@ -35,8 +32,8 @@ const VarPanel: FC<Props> = ({
<div className="system-md-medium grow">{t('detail.variables', { ns: 'appLog' })}</div>
{
isCollapse
? <RiArrowRightSLine className="h-4 w-4" />
: <RiArrowDownSLine className="h-4 w-4" />
? <span className="i-ri-arrow-right-sline h-4 w-4" />
: <span className="i-ri-arrow-down-sline h-4 w-4" />
}
</div>
{!isCollapse && (

View File

@ -1,6 +1,5 @@
'use client'
import type { FC } from 'react'
import { RiCloseLine } from '@remixicon/react'
import * as React from 'react'
import { useState } from 'react'
import { useTranslation } from 'react-i18next'
@ -69,7 +68,7 @@ const APIKeyInfoPanel: FC = () => {
onClick={() => setIsShow(false)}
className="absolute right-4 top-4 flex h-8 w-8 cursor-pointer items-center justify-center "
>
<RiCloseLine className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-close-line h-4 w-4 text-text-tertiary" />
</div>
</div>
)

View File

@ -3,15 +3,10 @@ import type { ConfigParams } from './settings'
import type { AppDetailResponse } from '@/models/app'
import type { AppSSO } from '@/types/app'
import {
RiArrowRightSLine,
RiBookOpenLine,
RiBuildingLine,
RiEqualizer2Line,
RiExternalLinkLine,
RiGlobalLine,
RiLockLine,
RiPaintBrushLine,
RiVerifiedBadgeLine,
RiWindowLine,
} from '@remixicon/react'
import { usePathname, useRouter } from 'next/navigation'
@ -328,35 +323,35 @@ function AppCard({
{appDetail?.access_mode === AccessMode.ORGANIZATION
&& (
<>
<RiBuildingLine className="h-4 w-4 shrink-0 text-text-secondary" />
<span className="i-ri-building-line h-4 w-4 shrink-0 text-text-secondary" />
<p className="system-sm-medium text-text-secondary">{t('accessControlDialog.accessItems.organization', { ns: 'app' })}</p>
</>
)}
{appDetail?.access_mode === AccessMode.SPECIFIC_GROUPS_MEMBERS
&& (
<>
<RiLockLine className="h-4 w-4 shrink-0 text-text-secondary" />
<span className="i-ri-lock-line h-4 w-4 shrink-0 text-text-secondary" />
<p className="system-sm-medium text-text-secondary">{t('accessControlDialog.accessItems.specific', { ns: 'app' })}</p>
</>
)}
{appDetail?.access_mode === AccessMode.PUBLIC
&& (
<>
<RiGlobalLine className="h-4 w-4 shrink-0 text-text-secondary" />
<span className="i-ri-global-line h-4 w-4 shrink-0 text-text-secondary" />
<p className="system-sm-medium text-text-secondary">{t('accessControlDialog.accessItems.anyone', { ns: 'app' })}</p>
</>
)}
{appDetail?.access_mode === AccessMode.EXTERNAL_MEMBERS
&& (
<>
<RiVerifiedBadgeLine className="h-4 w-4 shrink-0 text-text-secondary" />
<span className="i-ri-verified-badge-line h-4 w-4 shrink-0 text-text-secondary" />
<p className="system-sm-medium text-text-secondary">{t('accessControlDialog.accessItems.external', { ns: 'app' })}</p>
</>
)}
</div>
{!isAppAccessSet && <p className="system-xs-regular shrink-0 text-text-tertiary">{t('publishApp.notSet', { ns: 'app' })}</p>}
<div className="flex h-4 w-4 shrink-0 items-center justify-center">
<RiArrowRightSLine className="h-4 w-4 text-text-quaternary" />
<span className="i-ri-arrow-right-sline h-4 w-4 text-text-quaternary" />
</div>
</div>
</div>

View File

@ -1,6 +1,5 @@
'use client'
import type { FC } from 'react'
import { ArrowTopRightOnSquareIcon } from '@heroicons/react/24/outline'
import * as React from 'react'
import { useTranslation } from 'react-i18next'
import Button from '@/app/components/base/button'
@ -123,7 +122,7 @@ const CustomizeModal: FC<IShareLinkProps> = ({
)}
>
<span className="text-sm text-text-secondary">{t(`${prefixCustomize}.way2.operation`, { ns: 'appOverview' })}</span>
<ArrowTopRightOnSquareIcon className="ml-1 h-4 w-4 shrink-0 text-text-secondary" />
<span className="i-heroicons-arrow-top-right-on-square-24-outline ml-1 h-4 w-4 shrink-0 text-text-secondary" />
</Button>
</div>
</Modal>

View File

@ -1,8 +1,5 @@
import type { SiteInfo } from '@/models/share'
import {
RiClipboardFill,
RiClipboardLine,
} from '@remixicon/react'
import copy from 'copy-to-clipboard'
import * as React from 'react'
import { useEffect, useState } from 'react'
@ -185,8 +182,8 @@ const Embedded = ({ siteInfo, isShow, onClose, appBaseUrl, accessToken, classNam
<div
onClick={onClickCopy}
>
{isCopied[option] && <RiClipboardFill className="h-4 w-4" />}
{!isCopied[option] && <RiClipboardLine className="h-4 w-4" />}
{isCopied[option] && <span className="i-ri-clipboard-fill h-4 w-4" />}
{!isCopied[option] && <span className="i-ri-clipboard-line h-4 w-4" />}
</div>
</ActionButton>
</Tooltip>

View File

@ -3,7 +3,6 @@ import type { FC } from 'react'
import type { AppIconSelection } from '@/app/components/base/app-icon-picker'
import type { AppDetailResponse } from '@/models/app'
import type { AppIconType, AppSSO, Language } from '@/types/app'
import { RiArrowRightSLine, RiCloseLine } from '@remixicon/react'
import Link from 'next/link'
import * as React from 'react'
import { useCallback, useEffect, useState } from 'react'
@ -233,7 +232,7 @@ const SettingsModal: FC<ISettingsModalProps> = ({
<div className="flex items-center gap-1">
<div className="title-2xl-semi-bold grow text-text-primary">{t(`${prefixSettings}.title`, { ns: 'appOverview' })}</div>
<ActionButton className="shrink-0" onClick={onHide}>
<RiCloseLine className="h-4 w-4" />
<span className="i-ri-close-line h-4 w-4" />
</ActionButton>
</div>
<div className="system-xs-regular mt-0.5 text-text-tertiary">
@ -346,7 +345,7 @@ const SettingsModal: FC<ISettingsModalProps> = ({
{t(`${prefixSettings}.more.privacyPolicyPlaceholder`, { ns: 'appOverview' })}
</p>
</div>
<RiArrowRightSLine className="ml-1 h-4 w-4 shrink-0 text-text-secondary" />
<span className="i-ri-arrow-right-sline ml-1 h-4 w-4 shrink-0 text-text-secondary" />
</div>
)}
{/* more settings */}

View File

@ -1,7 +1,6 @@
'use client'
import type { App } from '@/types/app'
import { RiCloseLine } from '@remixicon/react'
import { noop } from 'es-toolkit/function'
import { useRouter } from 'next/navigation'
import { useEffect, useState } from 'react'
@ -101,7 +100,7 @@ const SwitchAppModal = ({ show, appDetail, inAppDetail = false, onSuccess, onClo
onClose={noop}
>
<div className="absolute right-4 top-4 cursor-pointer p-2" onClick={onClose}>
<RiCloseLine className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-close-line h-4 w-4 text-text-tertiary" />
</div>
<div className="h-12 w-12 rounded-xl border-[0.5px] border-divider-regular bg-background-default-burn p-3 shadow-xl">
<AlertTriangle className="h-6 w-6 text-[rgb(247,144,9)]" />

View File

@ -3,17 +3,7 @@ import type { FC } from 'react'
import type { FeedbackType } from '@/app/components/base/chat/chat/type'
import type { WorkflowProcess } from '@/app/components/base/chat/types'
import type { SiteInfo } from '@/models/share'
import {
RiBookmark3Line,
RiClipboardLine,
RiFileList3Line,
RiPlayList2Line,
RiReplay15Line,
RiSparklingFill,
RiSparklingLine,
RiThumbDownLine,
RiThumbUpLine,
} from '@remixicon/react'
import { useBoolean } from 'ahooks'
import copy from 'copy-to-clipboard'
import { useParams } from 'next/navigation'
@ -236,7 +226,7 @@ const GenerationItem: FC<IGenerationItemProps> = ({
>
{taskId && (
<div className={cn('system-2xs-medium-uppercase mb-2 flex items-center text-text-accent-secondary', isError && 'text-text-destructive')}>
<RiPlayList2Line className="mr-1 h-3 w-3" />
<span className="i-ri-play-list-2-line mr-1 h-3 w-3" />
<span>{t('generation.execution', { ns: 'share' })}</span>
<span className="px-1">·</span>
<span>{taskId}</span>
@ -281,7 +271,7 @@ const GenerationItem: FC<IGenerationItemProps> = ({
)}
{!workflowProcessData && taskId && (
<div className={cn('system-2xs-medium-uppercase sticky left-0 top-0 flex w-full items-center rounded-t-2xl bg-components-actionbar-bg p-4 pb-3 text-text-accent-secondary', isError && 'text-text-destructive')}>
<RiPlayList2Line className="mr-1 h-3 w-3" />
<span className="i-ri-play-list-2-line mr-1 h-3 w-3" />
<span>{t('generation.execution', { ns: 'share' })}</span>
<span className="px-1">·</span>
<span>{`${taskId}${depth > 1 ? `-${depth - 1}` : ''}`}</span>
@ -314,7 +304,7 @@ const GenerationItem: FC<IGenerationItemProps> = ({
{!isInWebApp && (appSourceType !== AppSourceType.installedApp) && !isResponding && (
<div className="ml-1 flex items-center gap-0.5 rounded-[10px] border-[0.5px] border-components-actionbar-border bg-components-actionbar-bg p-0.5 shadow-md backdrop-blur-sm">
<ActionButton disabled={isError || !messageId} onClick={handleOpenLogModal}>
<RiFileList3Line className="h-4 w-4" />
<span className="i-ri-file-list-3-line h-4 w-4" />
{/* <div>{t('common.operation.log')}</div> */}
</ActionButton>
</div>
@ -322,7 +312,7 @@ const GenerationItem: FC<IGenerationItemProps> = ({
<div className="ml-1 flex items-center gap-0.5 rounded-[10px] border-[0.5px] border-components-actionbar-border bg-components-actionbar-bg p-0.5 shadow-md backdrop-blur-sm">
{moreLikeThis && !isTryApp && (
<ActionButton state={depth === MAX_DEPTH ? ActionButtonState.Disabled : ActionButtonState.Default} disabled={depth === MAX_DEPTH} onClick={handleMoreLikeThis}>
<RiSparklingLine className="h-4 w-4" />
<span className="i-ri-sparkling-line h-4 w-4" />
</ActionButton>
)}
{isShowTextToSpeech && !isTryApp && (
@ -343,17 +333,17 @@ const GenerationItem: FC<IGenerationItemProps> = ({
Toast.notify({ type: 'success', message: t('actionMsg.copySuccessfully', { ns: 'common' }) })
}}
>
<RiClipboardLine className="h-4 w-4" />
<span className="i-ri-clipboard-line h-4 w-4" />
</ActionButton>
)}
{isInWebApp && isError && (
<ActionButton onClick={onRetry}>
<RiReplay15Line className="h-4 w-4" />
<span className="i-ri-replay-15-line h-4 w-4" />
</ActionButton>
)}
{isInWebApp && !isWorkflow && !isTryApp && (
<ActionButton disabled={isError || !messageId} onClick={() => { onSave?.(messageId as string) }}>
<RiBookmark3Line className="h-4 w-4" />
<span className="i-ri-bookmark-3-line h-4 w-4" />
</ActionButton>
)}
</div>
@ -362,21 +352,21 @@ const GenerationItem: FC<IGenerationItemProps> = ({
{!feedback?.rating && (
<>
<ActionButton onClick={() => onFeedback?.({ rating: 'like' })}>
<RiThumbUpLine className="h-4 w-4" />
<span className="i-ri-thumb-up-line h-4 w-4" />
</ActionButton>
<ActionButton onClick={() => onFeedback?.({ rating: 'dislike' })}>
<RiThumbDownLine className="h-4 w-4" />
<span className="i-ri-thumb-down-line h-4 w-4" />
</ActionButton>
</>
)}
{feedback?.rating === 'like' && (
<ActionButton state={ActionButtonState.Active} onClick={() => onFeedback?.({ rating: null })}>
<RiThumbUpLine className="h-4 w-4" />
<span className="i-ri-thumb-up-line h-4 w-4" />
</ActionButton>
)}
{feedback?.rating === 'dislike' && (
<ActionButton state={ActionButtonState.Destructive} onClick={() => onFeedback?.({ rating: null })}>
<RiThumbDownLine className="h-4 w-4" />
<span className="i-ri-thumb-down-line h-4 w-4" />
</ActionButton>
)}
</div>
@ -396,7 +386,7 @@ const GenerationItem: FC<IGenerationItemProps> = ({
isMobile ? 'top-[3.5px]' : 'top-2',
)}
>
<RiSparklingFill className="h-3 w-3 text-text-primary-on-surface" />
<span className="i-ri-sparkling-fill h-3 w-3 text-text-primary-on-surface" />
</div>
</div>
)}

View File

@ -1,10 +1,7 @@
'use client'
import type { FC } from 'react'
import type { SavedMessage } from '@/models/debug'
import {
RiClipboardLine,
RiDeleteBinLine,
} from '@remixicon/react'
import copy from 'copy-to-clipboard'
import * as React from 'react'
import { useTranslation } from 'react-i18next'
@ -63,13 +60,13 @@ const SavedItems: FC<ISavedItemsProps> = ({
Toast.notify({ type: 'success', message: t('actionMsg.copySuccessfully', { ns: 'common' }) })
}}
>
<RiClipboardLine className="h-4 w-4" />
<span className="i-ri-clipboard-line h-4 w-4" />
</ActionButton>
<ActionButton onClick={() => {
onRemove(id)
}}
>
<RiDeleteBinLine className="h-4 w-4" />
<span className="i-ri-delete-bin-line h-4 w-4" />
</ActionButton>
</div>
</div>

View File

@ -1,9 +1,6 @@
'use client'
import type { FC } from 'react'
import {
RiAddLine,
RiBookmark3Line,
} from '@remixicon/react'
import * as React from 'react'
import { useTranslation } from 'react-i18next'
import Button from '@/app/components/base/button'
@ -20,7 +17,7 @@ const NoData: FC<INoDataProps> = ({
return (
<div className="rounded-xl bg-background-section-burn p-6 ">
<div className="flex h-10 w-10 items-center justify-center rounded-[10px] border-[0.5px] border-components-card-border bg-components-card-bg-alt shadow-lg backdrop-blur-sm">
<RiBookmark3Line className="h-4 w-4 text-text-accent" />
<span className="i-ri-bookmark-3-line h-4 w-4 text-text-accent" />
</div>
<div className="mt-3">
<span className="system-xl-semibold text-text-secondary">{t('generation.savedNoData.title', { ns: 'share' })}</span>
@ -33,7 +30,7 @@ const NoData: FC<INoDataProps> = ({
className="mt-3"
onClick={onStartCreateContent}
>
<RiAddLine className="mr-1 h-4 w-4" />
<span className="i-ri-add-line mr-1 h-4 w-4" />
<span>{t('generation.savedNoData.startCreateContent', { ns: 'share' })}</span>
</Button>
</div>

View File

@ -1,4 +1,3 @@
import { RiArrowDownSLine, RiCloseCircleFill, RiExchange2Fill, RiFilter3Line } from '@remixicon/react'
import * as React from 'react'
import { useState } from 'react'
import { useTranslation } from 'react-i18next'
@ -50,9 +49,7 @@ const AppTypeSelector = ({ value, onChange }: AppSelectorProps) => {
onChange([])
}}
>
<RiCloseCircleFill
className="h-3.5 w-3.5 text-text-quaternary group-hover:text-text-tertiary"
/>
<span className="i-ri-close-circle-fill h-3.5 w-3.5 text-text-quaternary group-hover:text-text-tertiary" />
</button>
)}
</div>
@ -115,7 +112,7 @@ export const AppTypeIcon = React.memo(({ type, className, wrapperClassName, styl
if (type === AppModeEnum.WORKFLOW) {
return (
<div style={style} className={cn(wrapperClassNames, 'bg-components-icon-bg-indigo-solid')}>
<RiExchange2Fill className={iconClassNames} />
<span className={`i-ri-exchange-2-fill ${iconClassNames}`} />
</div>
)
}
@ -137,9 +134,9 @@ function AppTypeSelectTrigger({ values }: { readonly values: AppSelectorProps['v
'flex h-8 items-center justify-between gap-1',
)}
>
<RiFilter3Line className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-filter-3-line h-4 w-4 text-text-tertiary" />
<div className="system-sm-medium min-w-[65px] grow text-center text-text-tertiary">{t('typeSelector.all', { ns: 'app' })}</div>
<RiArrowDownSLine className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-arrow-down-sline h-4 w-4 text-text-tertiary" />
</div>
)
}

View File

@ -1,6 +1,5 @@
'use client'
import type { FC } from 'react'
import { RiCloseLine, RiPlayLargeLine } from '@remixicon/react'
import { useRouter } from 'next/navigation'
import { useTranslation } from 'react-i18next'
import { useStore } from '@/app/components/app/store'
@ -28,7 +27,7 @@ const DetailPanel: FC<ILogDetail> = ({ runID, onClose, canReplay = false }) => {
return (
<div className="relative flex grow flex-col pt-3">
<span className="absolute right-3 top-4 z-20 cursor-pointer p-1" onClick={onClose}>
<RiCloseLine className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-close-line h-4 w-4 text-text-tertiary" />
</span>
<div className="flex items-center bg-components-panel-bg">
<h1 className="system-xl-semibold shrink-0 px-4 py-1 text-text-primary">{t('runDetail.workflowTitle', { ns: 'appLog' })}</h1>
@ -43,7 +42,7 @@ const DetailPanel: FC<ILogDetail> = ({ runID, onClose, canReplay = false }) => {
aria-label={t('runDetail.testWithParams', { ns: 'appLog' })}
onClick={handleReplay}
>
<RiPlayLargeLine className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-play-large-line h-4 w-4 text-text-tertiary" />
</button>
</TooltipPlus>
)}

View File

@ -2,7 +2,6 @@
import type { FC } from 'react'
import type { QueryParam } from './index'
import type { I18nKeysByPrefix } from '@/types/i18n'
import { RiCalendarLine } from '@remixicon/react'
import dayjs from 'dayjs'
import quarterOfYear from 'dayjs/plugin/quarterOfYear'
import * as React from 'react'
@ -52,7 +51,7 @@ const Filter: FC<IFilterProps> = ({ queryParams, setQueryParams }: IFilterProps)
<Chip
className="min-w-[150px]"
panelClassName="w-[270px]"
leftIcon={<RiCalendarLine className="h-4 w-4 text-text-secondary" />}
leftIcon={<span className="i-ri-calendar-line h-4 w-4 text-text-secondary" />}
value={queryParams.period}
onSelect={(item) => {
setQueryParams({ ...queryParams, period: item.value })

View File

@ -2,7 +2,6 @@
import type { FC } from 'react'
import type { WorkflowAppLogDetail, WorkflowLogsResponse, WorkflowRunTriggeredFrom } from '@/models/log'
import type { App } from '@/types/app'
import { ArrowDownIcon } from '@heroicons/react/24/outline'
import * as React from 'react'
import { useEffect, useState } from 'react'
import { useTranslation } from 'react-i18next'
@ -117,9 +116,7 @@ const WorkflowAppLogList: FC<ILogs> = ({ logs, appDetail, onRefresh }) => {
<td className="whitespace-nowrap bg-background-section-burn py-1.5 pl-3">
<div className="flex cursor-pointer items-center hover:text-text-secondary" onClick={handleSort}>
{t('table.header.startTime', { ns: 'appLog' })}
<ArrowDownIcon
className={cn('ml-0.5 h-3 w-3 stroke-current stroke-2 transition-all', 'text-text-tertiary', sortOrder === 'asc' ? 'rotate-180' : '')}
/>
<span className={`i-heroicons-arrow-down-24-outline ${cn('ml-0.5 h-3 w-3 stroke-current stroke-2 transition-all', 'text-text-tertiary', sortOrder === 'asc' ? 'rotate-180' : '')}`} />
</div>
</td>
<td className="whitespace-nowrap bg-background-section-burn py-1.5 pl-3">{t('table.header.status', { ns: 'appLog' })}</td>

View File

@ -6,7 +6,6 @@ import type { Tag } from '@/app/components/base/tag-management/constant'
import type { CreateAppModalProps } from '@/app/components/explore/create-app-modal'
import type { EnvironmentVariable } from '@/app/components/workflow/types'
import type { App } from '@/types/app'
import { RiBuildingLine, RiGlobalLine, RiLockLine, RiMoreFill, RiVerifiedBadgeLine } from '@remixicon/react'
import dynamic from 'next/dynamic'
import { useRouter } from 'next/navigation'
import * as React from 'react'
@ -381,22 +380,22 @@ const AppCard = ({ app, onRefresh }: AppCardProps) => {
<div className="flex h-5 w-5 shrink-0 items-center justify-center">
{app.access_mode === AccessMode.PUBLIC && (
<Tooltip asChild={false} popupContent={t('accessItemsDescription.anyone', { ns: 'app' })}>
<RiGlobalLine className="h-4 w-4 text-text-quaternary" />
<span className="i-ri-global-line h-4 w-4 text-text-quaternary" />
</Tooltip>
)}
{app.access_mode === AccessMode.SPECIFIC_GROUPS_MEMBERS && (
<Tooltip asChild={false} popupContent={t('accessItemsDescription.specific', { ns: 'app' })}>
<RiLockLine className="h-4 w-4 text-text-quaternary" />
<span className="i-ri-lock-line h-4 w-4 text-text-quaternary" />
</Tooltip>
)}
{app.access_mode === AccessMode.ORGANIZATION && (
<Tooltip asChild={false} popupContent={t('accessItemsDescription.organization', { ns: 'app' })}>
<RiBuildingLine className="h-4 w-4 text-text-quaternary" />
<span className="i-ri-building-line h-4 w-4 text-text-quaternary" />
</Tooltip>
)}
{app.access_mode === AccessMode.EXTERNAL_MEMBERS && (
<Tooltip asChild={false} popupContent={t('accessItemsDescription.external', { ns: 'app' })}>
<RiVerifiedBadgeLine className="h-4 w-4 text-text-quaternary" />
<span className="i-ri-verified-badge-line h-4 w-4 text-text-quaternary" />
</Tooltip>
)}
</div>
@ -441,7 +440,7 @@ const AppCard = ({ app, onRefresh }: AppCardProps) => {
<div
className="flex h-8 w-8 cursor-pointer items-center justify-center rounded-md"
>
<RiMoreFill className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-more-fill h-4 w-4 text-text-tertiary" />
</div>
)}
btnClassName={open =>

View File

@ -1,4 +1,3 @@
import { RiDiscordFill, RiDiscussLine, RiGithubFill } from '@remixicon/react'
import Link from 'next/link'
import * as React from 'react'
import { useTranslation } from 'react-i18next'
@ -33,13 +32,13 @@ const Footer = () => {
<p className="system-sm-regular mt-1 text-text-tertiary">{t('communityIntro', { ns: 'app' })}</p>
<div className="mt-3 flex items-center gap-2">
<CustomLink href="https://github.com/langgenius/dify">
<RiGithubFill className="h-5 w-5 text-text-tertiary" />
<span className="i-ri-github-fill h-5 w-5 text-text-tertiary" />
</CustomLink>
<CustomLink href="https://discord.gg/FngNHpbcY7">
<RiDiscordFill className="h-5 w-5 text-text-tertiary" />
<span className="i-ri-discord-fill h-5 w-5 text-text-tertiary" />
</CustomLink>
<CustomLink href="https://forum.dify.ai">
<RiDiscussLine className="h-5 w-5 text-text-tertiary" />
<span className="i-ri-discuss-line h-5 w-5 text-text-tertiary" />
</CustomLink>
</div>
</footer>

View File

@ -1,14 +1,7 @@
'use client'
import type { FC } from 'react'
import {
RiApps2Line,
RiDragDropLine,
RiExchange2Line,
RiFile4Line,
RiMessage3Line,
RiRobot3Line,
} from '@remixicon/react'
import { useDebounceFn } from 'ahooks'
import dynamic from 'next/dynamic'
import {
@ -125,12 +118,12 @@ const List: FC<Props> = ({
const anchorRef = useRef<HTMLDivElement>(null)
const options = [
{ value: 'all', text: t('types.all', { ns: 'app' }), icon: <RiApps2Line className="mr-1 h-[14px] w-[14px]" /> },
{ value: AppModeEnum.WORKFLOW, text: t('types.workflow', { ns: 'app' }), icon: <RiExchange2Line className="mr-1 h-[14px] w-[14px]" /> },
{ value: AppModeEnum.ADVANCED_CHAT, text: t('types.advanced', { ns: 'app' }), icon: <RiMessage3Line className="mr-1 h-[14px] w-[14px]" /> },
{ value: AppModeEnum.CHAT, text: t('types.chatbot', { ns: 'app' }), icon: <RiMessage3Line className="mr-1 h-[14px] w-[14px]" /> },
{ value: AppModeEnum.AGENT_CHAT, text: t('types.agent', { ns: 'app' }), icon: <RiRobot3Line className="mr-1 h-[14px] w-[14px]" /> },
{ value: AppModeEnum.COMPLETION, text: t('types.completion', { ns: 'app' }), icon: <RiFile4Line className="mr-1 h-[14px] w-[14px]" /> },
{ value: 'all', text: t('types.all', { ns: 'app' }), icon: <span className="i-ri-apps-2-line mr-1 h-[14px] w-[14px]" /> },
{ value: AppModeEnum.WORKFLOW, text: t('types.workflow', { ns: 'app' }), icon: <span className="i-ri-exchange-2-line mr-1 h-[14px] w-[14px]" /> },
{ value: AppModeEnum.ADVANCED_CHAT, text: t('types.advanced', { ns: 'app' }), icon: <span className="i-ri-message-3-line mr-1 h-[14px] w-[14px]" /> },
{ value: AppModeEnum.CHAT, text: t('types.chatbot', { ns: 'app' }), icon: <span className="i-ri-message-3-line mr-1 h-[14px] w-[14px]" /> },
{ value: AppModeEnum.AGENT_CHAT, text: t('types.agent', { ns: 'app' }), icon: <span className="i-ri-robot-3-line mr-1 h-[14px] w-[14px]" /> },
{ value: AppModeEnum.COMPLETION, text: t('types.completion', { ns: 'app' }), icon: <span className="i-ri-file-4-line mr-1 h-[14px] w-[14px]" /> },
]
useEffect(() => {
@ -272,7 +265,7 @@ const List: FC<Props> = ({
role="region"
aria-label={t('newApp.dropDSLToCreateApp', { ns: 'app' })}
>
<RiDragDropLine className="h-4 w-4" />
<span className="i-ri-drag-drop-line h-4 w-4" />
<span className="system-xs-regular">{t('newApp.dropDSLToCreateApp', { ns: 'app' })}</span>
</div>
)}

View File

@ -1,5 +1,4 @@
import type { Meta, StoryObj } from '@storybook/nextjs-vite'
import { RiAddLine, RiDeleteBinLine, RiEditLine, RiMore2Fill, RiSaveLine, RiShareLine } from '@remixicon/react'
import ActionButton, { ActionButtonState } from '.'
const meta = {
@ -49,7 +48,7 @@ type Story = StoryObj<typeof meta>
export const Default: Story = {
args: {
size: 'm',
children: <RiEditLine className="h-4 w-4" />,
children: <span className="i-ri-edit-line h-4 w-4" />,
},
}
@ -67,7 +66,7 @@ export const IconWithText: Story = {
size: 'm',
children: (
<>
<RiAddLine className="mr-1 h-4 w-4" />
<span className="i-ri-add-line mr-1 h-4 w-4" />
Add Item
</>
),
@ -78,35 +77,35 @@ export const IconWithText: Story = {
export const ExtraSmall: Story = {
args: {
size: 'xs',
children: <RiEditLine className="h-3 w-3" />,
children: <span className="i-ri-edit-line h-3 w-3" />,
},
}
export const Small: Story = {
args: {
size: 'xs',
children: <RiEditLine className="h-3.5 w-3.5" />,
children: <span className="i-ri-edit-line h-3.5 w-3.5" />,
},
}
export const Medium: Story = {
args: {
size: 'm',
children: <RiEditLine className="h-4 w-4" />,
children: <span className="i-ri-edit-line h-4 w-4" />,
},
}
export const Large: Story = {
args: {
size: 'l',
children: <RiEditLine className="h-5 w-5" />,
children: <span className="i-ri-edit-line h-5 w-5" />,
},
}
export const ExtraLarge: Story = {
args: {
size: 'xl',
children: <RiEditLine className="h-6 w-6" />,
children: <span className="i-ri-edit-line h-6 w-6" />,
},
}
@ -115,7 +114,7 @@ export const ActiveState: Story = {
args: {
size: 'm',
state: ActionButtonState.Active,
children: <RiEditLine className="h-4 w-4" />,
children: <span className="i-ri-edit-line h-4 w-4" />,
},
}
@ -123,7 +122,7 @@ export const DisabledState: Story = {
args: {
size: 'm',
state: ActionButtonState.Disabled,
children: <RiEditLine className="h-4 w-4" />,
children: <span className="i-ri-edit-line h-4 w-4" />,
},
}
@ -131,7 +130,7 @@ export const DestructiveState: Story = {
args: {
size: 'm',
state: ActionButtonState.Destructive,
children: <RiDeleteBinLine className="h-4 w-4" />,
children: <span className="i-ri-delete-bin-line h-4 w-4" />,
},
}
@ -139,7 +138,7 @@ export const HoverState: Story = {
args: {
size: 'm',
state: ActionButtonState.Hover,
children: <RiEditLine className="h-4 w-4" />,
children: <span className="i-ri-edit-line h-4 w-4" />,
},
}
@ -148,17 +147,17 @@ export const ToolbarActions: Story = {
render: () => (
<div className="flex items-center gap-1 rounded-lg bg-background-section-burn p-2">
<ActionButton size="m">
<RiEditLine className="h-4 w-4" />
<span className="i-ri-edit-line h-4 w-4" />
</ActionButton>
<ActionButton size="m">
<RiShareLine className="h-4 w-4" />
<span className="i-ri-share-line h-4 w-4" />
</ActionButton>
<ActionButton size="m">
<RiSaveLine className="h-4 w-4" />
<span className="i-ri-save-line h-4 w-4" />
</ActionButton>
<div className="mx-1 h-4 w-px bg-divider-regular" />
<ActionButton size="m" state={ActionButtonState.Destructive}>
<RiDeleteBinLine className="h-4 w-4" />
<span className="i-ri-delete-bin-line h-4 w-4" />
</ActionButton>
</div>
),
@ -169,10 +168,10 @@ export const InlineActions: Story = {
<div className="flex items-center gap-2">
<span className="text-text-secondary">Item name</span>
<ActionButton size="xs">
<RiEditLine className="h-3.5 w-3.5" />
<span className="i-ri-edit-line h-3.5 w-3.5" />
</ActionButton>
<ActionButton size="xs">
<RiMore2Fill className="h-3.5 w-3.5" />
<span className="i-ri-more-2-fill h-3.5 w-3.5" />
</ActionButton>
</div>
),
@ -183,31 +182,31 @@ export const SizeComparison: Story = {
<div className="flex items-center gap-4">
<div className="flex flex-col items-center gap-2">
<ActionButton size="xs">
<RiEditLine className="h-3 w-3" />
<span className="i-ri-edit-line h-3 w-3" />
</ActionButton>
<span className="text-xs text-text-tertiary">XS</span>
</div>
<div className="flex flex-col items-center gap-2">
<ActionButton size="xs">
<RiEditLine className="h-3.5 w-3.5" />
<span className="i-ri-edit-line h-3.5 w-3.5" />
</ActionButton>
<span className="text-xs text-text-tertiary">S</span>
</div>
<div className="flex flex-col items-center gap-2">
<ActionButton size="m">
<RiEditLine className="h-4 w-4" />
<span className="i-ri-edit-line h-4 w-4" />
</ActionButton>
<span className="text-xs text-text-tertiary">M</span>
</div>
<div className="flex flex-col items-center gap-2">
<ActionButton size="l">
<RiEditLine className="h-5 w-5" />
<span className="i-ri-edit-line h-5 w-5" />
</ActionButton>
<span className="text-xs text-text-tertiary">L</span>
</div>
<div className="flex flex-col items-center gap-2">
<ActionButton size="xl">
<RiEditLine className="h-6 w-6" />
<span className="i-ri-edit-line h-6 w-6" />
</ActionButton>
<span className="text-xs text-text-tertiary">XL</span>
</div>
@ -220,31 +219,31 @@ export const StateComparison: Story = {
<div className="flex items-center gap-4">
<div className="flex flex-col items-center gap-2">
<ActionButton size="m" state={ActionButtonState.Default}>
<RiEditLine className="h-4 w-4" />
<span className="i-ri-edit-line h-4 w-4" />
</ActionButton>
<span className="text-xs text-text-tertiary">Default</span>
</div>
<div className="flex flex-col items-center gap-2">
<ActionButton size="m" state={ActionButtonState.Active}>
<RiEditLine className="h-4 w-4" />
<span className="i-ri-edit-line h-4 w-4" />
</ActionButton>
<span className="text-xs text-text-tertiary">Active</span>
</div>
<div className="flex flex-col items-center gap-2">
<ActionButton size="m" state={ActionButtonState.Hover}>
<RiEditLine className="h-4 w-4" />
<span className="i-ri-edit-line h-4 w-4" />
</ActionButton>
<span className="text-xs text-text-tertiary">Hover</span>
</div>
<div className="flex flex-col items-center gap-2">
<ActionButton size="m" state={ActionButtonState.Disabled}>
<RiEditLine className="h-4 w-4" />
<span className="i-ri-edit-line h-4 w-4" />
</ActionButton>
<span className="text-xs text-text-tertiary">Disabled</span>
</div>
<div className="flex flex-col items-center gap-2">
<ActionButton size="m" state={ActionButtonState.Destructive}>
<RiDeleteBinLine className="h-4 w-4" />
<span className="i-ri-delete-bin-line h-4 w-4" />
</ActionButton>
<span className="text-xs text-text-tertiary">Destructive</span>
</div>
@ -257,6 +256,6 @@ export const Playground: Story = {
args: {
size: 'm',
state: ActionButtonState.Default,
children: <RiEditLine className="h-4 w-4" />,
children: <span className="i-ri-edit-line h-4 w-4" />,
},
}

View File

@ -1,6 +1,5 @@
import type { FC } from 'react'
import type { IChatItem } from '@/app/components/base/chat/chat/type'
import { RiCloseLine } from '@remixicon/react'
import { useClickAway } from 'ahooks'
import { useEffect, useRef, useState } from 'react'
import { useTranslation } from 'react-i18next'
@ -47,7 +46,7 @@ const AgentLogModal: FC<AgentLogModalProps> = ({
>
<h1 className="text-md shrink-0 px-4 py-1 font-semibold text-text-primary">{t('runDetail.workflowTitle', { ns: 'appLog' })}</h1>
<span className="absolute right-3 top-4 z-20 cursor-pointer p-1" onClick={onCancel}>
<RiCloseLine className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-close-line h-4 w-4 text-text-tertiary" />
</span>
<AgentLogDetail
conversationID={currentLogItem.conversationId}

View File

@ -1,10 +1,7 @@
'use client'
import type { FC } from 'react'
import type { ToolCall } from '@/models/log'
import {
RiCheckboxCircleLine,
RiErrorWarningLine,
} from '@remixicon/react'
import { useState } from 'react'
import { ChevronRight } from '@/app/components/base/icons/src/vender/line/arrows'
import BlockIcon from '@/app/components/workflow/block-icon'
@ -80,10 +77,10 @@ const ToolCallItem: FC<Props> = ({ toolCall, isLLM = false, isFinal, tokens, obs
)}
</div>
{toolCall.status === 'success' && (
<RiCheckboxCircleLine className="ml-2 h-3.5 w-3.5 shrink-0 text-[#12B76A]" />
<span className="i-ri-checkbox-circle-line ml-2 h-3.5 w-3.5 shrink-0 text-[#12B76A]" />
)}
{toolCall.status === 'error' && (
<RiErrorWarningLine className="ml-2 h-3.5 w-3.5 shrink-0 text-[#F04438]" />
<span className="i-ri-error-warning-line ml-2 h-3.5 w-3.5 shrink-0 text-[#F04438]" />
)}
</div>
{!collapseState && (

View File

@ -1,7 +1,3 @@
import {
RiCloseLine,
RiInformation2Fill,
} from '@remixicon/react'
import { cva } from 'class-variance-authority'
import {
memo,
@ -38,7 +34,7 @@ const Alert: React.FC<Props> = ({
<div className={cn('pointer-events-none absolute inset-0 bg-gradient-to-r opacity-[0.4]', bgVariants({ type }))}>
</div>
<div className="flex h-6 w-6 items-center justify-center">
<RiInformation2Fill className="text-text-accent" />
<span className="i-ri-information-2-fill text-text-accent" />
</div>
<div className="p-1">
<div className="system-xs-regular text-text-secondary">
@ -49,7 +45,7 @@ const Alert: React.FC<Props> = ({
className="pointer-events-auto flex h-6 w-6 cursor-pointer items-center justify-center"
onClick={onHide}
>
<RiCloseLine className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-close-line h-4 w-4 text-text-tertiary" />
</div>
</div>
</div>

View File

@ -2,7 +2,6 @@ import type { FC } from 'react'
import type { Area } from 'react-easy-crop'
import type { OnImageInput } from './ImageInput'
import type { AppIconType, ImageFile } from '@/types/app'
import { RiImageCircleAiLine } from '@remixicon/react'
import { noop } from 'es-toolkit/function'
import { useCallback, useState } from 'react'
import { useTranslation } from 'react-i18next'
@ -46,7 +45,7 @@ const AppIconPicker: FC<AppIconPickerProps> = ({
const tabs = [
{ key: 'emoji', label: t('iconPicker.emoji', { ns: 'app' }), icon: <span className="text-lg">🤖</span> },
{ key: 'image', label: t('iconPicker.image', { ns: 'app' }), icon: <RiImageCircleAiLine className="size-4" /> },
{ key: 'image', label: t('iconPicker.image', { ns: 'app' }), icon: <span className="i-ri-image-circle-ai-line size-4" /> },
]
const [activeTab, setActiveTab] = useState<AppIconType>('emoji')

View File

@ -2,7 +2,6 @@
import type { FC } from 'react'
import type { AppIconType } from '@/types/app'
import data from '@emoji-mart/data'
import { RiEditLine } from '@remixicon/react'
import { useHover } from 'ahooks'
import { cva } from 'class-variance-authority'
import { init } from 'emoji-mart'
@ -123,7 +122,7 @@ const AppIcon: FC<AppIconProps> = ({
{
showEditIcon && isHovering && (
<div className={EditIconWrapperVariants({ size, rounded })}>
<RiEditLine className={EditIconVariants({ size })} />
<span className={`i-ri-edit-line ${EditIconVariants({ size })}`} />
</div>
)
}

View File

@ -1,7 +1,3 @@
import {
RiPauseCircleFill,
RiPlayLargeFill,
} from '@remixicon/react'
import { t } from 'i18next'
import * as React from 'react'
import { useCallback, useEffect, useRef, useState } from 'react'
@ -302,10 +298,10 @@ const AudioPlayer: React.FC<AudioPlayerProps> = ({ src, srcs }) => {
<button type="button" className="inline-flex shrink-0 cursor-pointer items-center justify-center border-none text-text-accent transition-all hover:text-text-accent-secondary disabled:text-components-button-primary-bg-disabled" onClick={togglePlay} disabled={!isAudioAvailable}>
{isPlaying
? (
<RiPauseCircleFill className="h-5 w-5" />
<span className="i-ri-pause-circle-fill h-5 w-5" />
)
: (
<RiPlayLargeFill className="h-5 w-5" />
<span className="i-ri-play-large-fill h-5 w-5" />
)}
</button>
<div className={cn(isAudioAvailable && 'grow')} hidden={!isAudioAvailable}>

View File

@ -1,6 +1,5 @@
'use client'
import type { FC } from 'react'
import { RiAddLine } from '@remixicon/react'
import * as React from 'react'
import { cn } from '@/utils/classnames'
@ -15,7 +14,7 @@ const AddButton: FC<Props> = ({
}) => {
return (
<div className={cn(className, 'cursor-pointer select-none rounded-md p-1 hover:bg-state-base-hover')} onClick={onClick}>
<RiAddLine className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-add-line h-4 w-4 text-text-tertiary" />
</div>
)
}

View File

@ -1,6 +1,5 @@
import type { Meta, StoryObj } from '@storybook/nextjs-vite'
import { RocketLaunchIcon } from '@heroicons/react/20/solid'
import { Button } from '.'
const meta = {
@ -100,7 +99,7 @@ export const WithIcon: Story = {
variant: 'primary',
children: (
<>
<RocketLaunchIcon className="mr-1.5 h-4 w-4 stroke-[1.8px]" />
<span className="i-heroicons-rocket-launch-20-solid mr-1.5 h-4 w-4 stroke-[1.8px]" />
Launch
</>
),

View File

@ -1,6 +1,5 @@
'use client'
import type { FC } from 'react'
import { RiRefreshLine } from '@remixicon/react'
import * as React from 'react'
import TooltipPlus from '@/app/components/base/tooltip'
import { cn } from '@/utils/classnames'
@ -19,7 +18,7 @@ const SyncButton: FC<Props> = ({
return (
<TooltipPlus popupContent={popupContent}>
<div className={cn(className, 'cursor-pointer select-none rounded-md p-1 hover:bg-state-base-hover')} onClick={onClick}>
<RiRefreshLine className="h-4 w-4 text-text-tertiary" />
<span className="i-ri-refresh-line h-4 w-4 text-text-tertiary" />
</div>
</TooltipPlus>
)

View File

@ -1,7 +1,5 @@
import type { ConversationItem } from '@/models/share'
import {
RiMenuLine,
} from '@remixicon/react'
import { useCallback, useState } from 'react'
import { useTranslation } from 'react-i18next'
import ActionButton from '@/app/components/base/action-button'
@ -67,7 +65,7 @@ const HeaderInMobile = () => {
<>
<div className="flex shrink-0 items-center gap-1 bg-mask-top2bottom-gray-50-to-transparent px-2 py-3">
<ActionButton size="l" className="shrink-0" onClick={() => setShowSidebar(true)}>
<RiMenuLine className="h-[18px] w-[18px]" />
<span className="i-ri-menu-line h-[18px] w-[18px]" />
</ActionButton>
<div className="flex grow items-center justify-center">
{!currentConversationId && (

Some files were not shown because too many files have changed in this diff Show More