NapCatQQ/packages/napcat-webui-frontend/src/components/switch_card.tsx
手瓜一十雪 84f0e0f9a0 Refactor UI for network cards and improve theming
Redesigned network display cards and related components for a more modern, consistent look, including improved button styles, card layouts, and responsive design. Added support for background images and dynamic theming across cards, tables, and log views. Enhanced input and select components with unified styling. Improved file table responsiveness and log display usability. Refactored OneBot API debug and navigation UI for better usability and mobile support.
2025-12-22 12:27:56 +08:00

49 lines
1.5 KiB
TypeScript

import { Switch } from '@heroui/switch';
import clsx from 'clsx';
import React, { forwardRef } from 'react';
export interface SwitchCardProps {
label?: string;
description?: string;
value?: boolean;
onValueChange?: (value: boolean) => void;
name?: string;
onBlur?: React.FocusEventHandler;
disabled?: boolean;
onChange?: React.ChangeEventHandler<HTMLInputElement>;
}
const SwitchCard = forwardRef<HTMLInputElement, SwitchCardProps>(
(props, ref) => {
const { label, description, value, onValueChange, disabled } = props;
const selectString = value ? 'true' : 'false';
return (
<Switch
classNames={{
base: clsx(
'inline-flex flex-row-reverse w-full max-w-full bg-default-100/50 dark:bg-white/5 hover:bg-default-200/50 dark:hover:bg-white/10 items-center',
'justify-between cursor-pointer rounded-xl gap-2 p-4 border border-transparent transition-all duration-200',
'data-[selected=true]:border-primary/50 data-[selected=true]:bg-primary/5 backdrop-blur-md'
),
}}
{...props}
ref={ref}
isDisabled={disabled}
isSelected={value}
value={selectString}
onValueChange={onValueChange}
>
<div className='flex flex-col gap-1'>
<p className='text-medium'>{label}</p>
<p className='text-tiny text-default-400'>{description}</p>
</div>
</Switch>
);
}
);
SwitchCard.displayName = 'SwitchCard';
export default SwitchCard;