@@ -302,7 +302,7 @@ const CreateAppModal = ({ show, onSuccess, onClose }: CreateAppDialogProps) => {
)}
-
+
diff --git a/web/app/components/app/create-from-dsl-modal/index.tsx b/web/app/components/app/create-from-dsl-modal/index.tsx
index f2cf6b97b9..b36f467f21 100644
--- a/web/app/components/app/create-from-dsl-modal/index.tsx
+++ b/web/app/components/app/create-from-dsl-modal/index.tsx
@@ -80,7 +80,7 @@ const CreateFromDSLModal = ({ show, onSuccess, onClose }: CreateFromDSLModalProp
{}}
+ onClose={() => { }}
>
{t('app.createFromConfigFile')}
@@ -93,7 +93,7 @@ const CreateFromDSLModal = ({ show, onSuccess, onClose }: CreateFromDSLModalProp
{isAppsFull &&
}
-
+
)
diff --git a/web/app/components/app/duplicate-modal/index.tsx b/web/app/components/app/duplicate-modal/index.tsx
index 5096fa2cb2..e9710add9e 100644
--- a/web/app/components/app/duplicate-modal/index.tsx
+++ b/web/app/components/app/duplicate-modal/index.tsx
@@ -75,7 +75,7 @@ const DuplicateAppModal = ({
{isAppsFull &&
}
-
+
diff --git a/web/app/components/app/overview/apikey-info-panel/index.tsx b/web/app/components/app/overview/apikey-info-panel/index.tsx
index b91bfd5aaf..52f67eda74 100644
--- a/web/app/components/app/overview/apikey-info-panel/index.tsx
+++ b/web/app/components/app/overview/apikey-info-panel/index.tsx
@@ -44,7 +44,7 @@ const APIKeyInfoPanel: FC = () => {
{t(`appOverview.apiKeyInfo.cloud.${'trial'}.description`)}
)}
diff --git a/web/app/components/base/button/index.tsx b/web/app/components/base/button/index.tsx
index 34f16ad556..d39c69d3ae 100644
--- a/web/app/components/base/button/index.tsx
+++ b/web/app/components/base/button/index.tsx
@@ -1,50 +1,44 @@
-import type { FC, MouseEventHandler, PropsWithChildren } from 'react'
-import React, { memo } from 'react'
+import React from 'react'
+import { type VariantProps, cva } from 'class-variance-authority'
import classNames from 'classnames'
import Spinner from '../spinner'
-export type IButtonProps = PropsWithChildren<{
- type?: string
- className?: string
- disabled?: boolean
+const buttonVariants = cva(
+ 'btn disabled:pointer-events-none',
+ {
+ variants: {
+ variant: {
+ primary: 'btn-primary disabled:btn-primary-disabled',
+ warning:
+ 'btn-warning disabled:btn-warning-disabled',
+ default: 'btn-default disabled:btn-default-disabled',
+ },
+ },
+ defaultVariants: {
+ variant: 'default',
+ },
+ },
+)
+
+export type ButtonProps = {
loading?: boolean
- tabIndex?: number
- onClick?: MouseEventHandler
-}>
+} & React.ButtonHTMLAttributes & VariantProps
-const Button: FC = ({
- type,
- disabled,
- children,
- className,
- onClick,
- loading = false,
- tabIndex,
-}) => {
- let typeClassNames = 'cursor-pointer'
- switch (type) {
- case 'primary':
- typeClassNames = (disabled || loading) ? 'btn-primary-disabled' : 'btn-primary'
- break
- case 'warning':
- typeClassNames = (disabled || loading) ? 'btn-warning-disabled' : 'btn-warning'
- break
- default:
- typeClassNames = disabled ? 'btn-default-disabled' : 'btn-default'
- break
- }
+const Button = React.forwardRef(
+ ({ className, variant, loading, children, ...props }, ref) => {
+ return (
+
+ {children}
+
+
+ )
+ },
+)
+Button.displayName = 'Button'
- return (
-
- {children}
- {/* Spinner is hidden when loading is false */}
-
-
- )
-}
-
-export default memo(Button)
+export default Button
+export { Button, buttonVariants }
diff --git a/web/app/components/base/chat/chat-with-history/config-panel/index.tsx b/web/app/components/base/chat/chat-with-history/config-panel/index.tsx
index 649aa50374..f974eae786 100644
--- a/web/app/components/base/chat/chat-with-history/config-panel/index.tsx
+++ b/web/app/components/base/chat/chat-with-history/config-panel/index.tsx
@@ -93,7 +93,7 @@ const ConfigPanel = () => {
{
setCollapsed(true)
@@ -118,7 +118,7 @@ const ConfigPanel = () => {
diff --git a/web/app/components/base/confirm-ui/index.tsx b/web/app/components/base/confirm-ui/index.tsx
index b43a363134..5ce06470da 100644
--- a/web/app/components/base/confirm-ui/index.tsx
+++ b/web/app/components/base/confirm-ui/index.tsx
@@ -42,7 +42,7 @@ const ConfirmUI: FC = ({
- {confirmText || t('common.operation.confirm')}
+ {confirmText || t('common.operation.confirm')}
{cancelText || t('common.operation.cancel')}
diff --git a/web/app/components/base/confirm/common.tsx b/web/app/components/base/confirm/common.tsx
index 8eba6512b7..a12f823c64 100644
--- a/web/app/components/base/confirm/common.tsx
+++ b/web/app/components/base/confirm/common.tsx
@@ -51,7 +51,7 @@ const ConfirmCommon: FC