visual-novel-web/src/app/(main)/character/[id]/chat/Right/index.tsx

165 lines
4.4 KiB
TypeScript
Raw Normal View History

2025-10-28 07:59:26 +00:00
'use client';
import Form, { FormItem } from '@/components/ui/form';
import React from 'react';
import { cn } from '@/lib';
import { Select, Switch, Number, FontSize } from '@/components/ui/inputs';
import Background from './Background';
import { AddIcon, DeleteIcon } from '@/assets/common';
import { ModelSelectDialog } from '@/components';
const Title: React.FC<
{
text?: string;
children?: React.ReactNode;
} & React.HTMLAttributes<HTMLDivElement>
> = (props) => {
const { text, children, ...rest } = props;
return (
<div className="mt-10 flex flex-col gap-2.5">
<div {...rest} className={cn('font-bold', rest.className)}>
{text}
</div>
{children}
</div>
);
};
const SettingForm = React.memo(() => {
console.log('SettingForm');
const options = [
{
label: 'Model 1',
value: 'model1',
},
{
label: 'Model 2',
value: 'model2',
},
{
label: 'Model 3',
value: 'model3',
},
{
label: 'Model 4',
value: 'model4',
},
];
return (
<div className="flex h-full flex-col">
<div
className="flex items-center text-lg font-black"
style={{ height: 83 }}
>
Setting
</div>
<div className="flex-1 overflow-y-auto pr-10">
<Form>
<Title text="Switch Model">
<FormItem
name="name"
render={({ value, onChange }) => (
<ModelSelectDialog value={value} onChange={onChange} />
)}
/>
<FormItem
name="name1"
render={({ value, onChange }) => (
<Switch
icon={'/character/model_long_text.svg'}
text="Short Text Mode"
value={value}
onChange={onChange}
/>
)}
/>
</Title>
<Title text="Sound">
<FormItem
name="name12"
render={({ value, onChange }) => (
<Select.View
icon={'/character/voice_actor.svg'}
text="Voice Actor"
/>
)}
/>
<FormItem
name="name12"
render={({ value, onChange }) => (
<Switch
icon={'/character/play_dialogue_only.svg'}
text="Play dialogue only"
value={value}
onChange={onChange}
/>
)}
/>
</Title>
<Title text="Maximum number of response tokens">
<FormItem
name="name13"
render={({ value, onChange }) => (
<Number value={value} onChange={onChange} />
)}
/>
</Title>
<Title text="Appearance">
<FormItem
name="fontSize"
render={() => {
return <FontSize />;
}}
/>
<FormItem
name="name12"
render={({ value, onChange }) => (
<Select
placeholder="Chat Mode"
icon={'/character/chat_mode.svg'}
options={[
{ label: 'Chat Mode', value: 'chat_mode' },
{ label: 'Chat Bubble', value: 'chat_bubble' },
]}
/>
)}
/>
<FormItem
name="name12"
render={({ value, onChange }) => (
<Select.View
icon={'/character/chat_bubble.svg'}
text="Chat Bubble"
/>
)}
/>
</Title>
<Title text="Background">
<FormItem
name="background"
render={({ value, onChange }) => (
<Background value={value} onChange={onChange} />
)}
/>
</Title>
</Form>
<div className="mt-12.5 mb-10 flex flex-col gap-5">
<div className="tk-button border-1 border-[#E2503D] text-[rgba(255,59,48,1)] hover:bg-[rgba(255,59,48,0.1)]">
<DeleteIcon /> Delete
</div>
<div className="tk-button border-text-color/80 border-1 hover:bg-white hover:text-[rgba(0,102,255,1)]">
<AddIcon /> START NEW CHAT
</div>
</div>
</div>
</div>
);
});
export default SettingForm;