dify/web/app/components/workflow/block-selector/block-selector-row.tsx
Stephen Zhou a84c2d36a3
style: format with vp fmt (#38803)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-07-12 15:57:46 +00:00

72 lines
1.8 KiB
TypeScript

import type { ButtonHTMLAttributes, HTMLAttributes, ReactNode } from 'react'
import { cn } from '@langgenius/dify-ui/cn'
type SharedProps = {
children: ReactNode
className?: string
disabled?: boolean
hoverable?: boolean
}
type ButtonRowProps = SharedProps &
Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'className' | 'disabled'> & {
as?: 'button'
nativeDisabled?: boolean
}
type DivRowProps = SharedProps &
Omit<HTMLAttributes<HTMLDivElement>, 'className'> & {
as: 'div'
}
type BlockSelectorRowProps = ButtonRowProps | DivRowProps
const rowClassName = (className?: string, disabled = false, hoverable = true) =>
cn(
'flex h-8 w-full items-center rounded-lg pr-2 pl-3',
!disabled && hoverable && 'hover:bg-state-base-hover',
disabled && 'cursor-not-allowed',
className,
)
const buttonClassName = (className?: string, disabled = false, hoverable = true) =>
cn(
rowClassName(className, disabled, hoverable),
!disabled && 'cursor-pointer',
'border-0 bg-transparent text-left focus-visible:ring-1 focus-visible:ring-components-input-border-hover focus-visible:outline-hidden',
)
export function BlockSelectorRow(props: BlockSelectorRowProps) {
if (props.as === 'div') {
const { as: _as, children, className, disabled = false, hoverable, ...rest } = props
return (
<div className={rowClassName(className, disabled, hoverable)} {...rest}>
{children}
</div>
)
}
const {
as: _as,
children,
className,
disabled = false,
hoverable,
nativeDisabled,
type = 'button',
...rest
} = props
return (
<button
type={type}
disabled={nativeDisabled}
className={buttonClassName(className, disabled, hoverable)}
{...rest}
>
{children}
</button>
)
}