import { FormEvent } from "react" import { useToggle } from "react-use" import { useStore } from "@/lib/states" import { Switch } from "./ui/switch" import { Label } from "./ui/label" import { NumberInput } from "./ui/input" import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue, } from "./ui/select" import { Textarea } from "./ui/textarea" import { SDSampler } from "@/lib/types" import { Separator } from "./ui/separator" import { ScrollArea } from "./ui/scroll-area" import { Sheet, SheetContent, SheetHeader, SheetTrigger } from "./ui/sheet" import { ChevronLeft, ChevronRight, Upload } from "lucide-react" import { Button, ImageUploadButton } from "./ui/button" import useHotKey from "@/hooks/useHotkey" import { Slider } from "./ui/slider" import { useImage } from "@/hooks/useImage" import { INSTRUCT_PIX2PIX, PAINT_BY_EXAMPLE } from "@/lib/const" const RowContainer = ({ children }: { children: React.ReactNode }) => (
{children}
) const SidePanel = () => { const [ settings, windowSize, paintByExampleFile, isProcessing, updateSettings, showSidePanel, runInpainting, updateAppState, ] = useStore((state) => [ state.settings, state.windowSize, state.paintByExampleFile, state.getIsProcessing(), state.updateSettings, state.showSidePanel(), state.runInpainting, state.updateAppState, ]) const [exampleImage, isExampleImageLoaded] = useImage(paintByExampleFile) const [open, toggleOpen] = useToggle(true) useHotKey("c", () => { toggleOpen() }) if (!showSidePanel) { return null } const onKeyUp = (e: React.KeyboardEvent) => { // negativePrompt 回车触发 inpainting if (e.key === "Enter" && e.ctrlKey && settings.prompt.length !== 0) { runInpainting() } } const renderConterNetSetting = () => { if (!settings.model.support_controlnet) { return null } return (
{ updateSettings({ enableControlnet: value }) }} />
updateSettings({ controlnetConditioningScale: vals[0] / 100 }) } /> { updateSettings({ controlnetConditioningScale: val }) }} />
) } const renderLCMLora = () => { if (!settings.model.support_lcm_lora) { return null } return ( <> { updateSettings({ enableLCMLora: value }) }} /> ) } const renderFreeu = () => { if (!settings.model.support_freeu) { return null } return (
{ updateSettings({ enableFreeu: value }) }} />
{ updateSettings({ freeuConfig: { ...settings.freeuConfig, s1: value }, }) }} />
{ updateSettings({ freeuConfig: { ...settings.freeuConfig, s2: value }, }) }} />
{ updateSettings({ freeuConfig: { ...settings.freeuConfig, b1: value }, }) }} />
{ updateSettings({ freeuConfig: { ...settings.freeuConfig, b2: value }, }) }} />
) } const renderNegativePrompt = () => { if (!settings.model.need_prompt) { return null } return (