/* * Copyright (c) 2021 - 2024, Ludvig Lundgren and the autobrr contributors. * SPDX-License-Identifier: GPL-2.0-or-later */ import { JSX } from "react"; import { Field as FormikField } from "formik"; import Select from "react-select"; import { Field, Label, Description } from "@headlessui/react"; import type { FieldProps, FieldValidator } from "formik"; import { classNames } from "@utils"; import { useToggle } from "@hooks/hooks"; import { EyeIcon, EyeSlashIcon } from "@heroicons/react/24/solid"; import { SelectFieldProps } from "./select"; import { DocsTooltip } from "@components/tooltips/DocsTooltip"; import { Checkbox } from "@components/Checkbox"; import { DropdownIndicator, ErrorField, IndicatorSeparator, RequiredField, SelectControl, SelectInput, SelectMenu, SelectOption } from "@components/inputs/common.tsx"; interface TextFieldWideProps { name: string; label?: string; help?: string; placeholder?: string; defaultValue?: string; required?: boolean; disabled?: boolean; autoComplete?: string; hidden?: boolean; tooltip?: JSX.Element; validate?: FieldValidator; } export const TextFieldWide = ({ name, label, help, placeholder, defaultValue, required, disabled, autoComplete, tooltip, hidden, validate }: TextFieldWideProps) => ( ); interface PasswordFieldWideProps { name: string; label?: string; placeholder?: string; defaultValue?: string; help?: string; required?: boolean; autoComplete?: string; defaultVisible?: boolean; tooltip?: JSX.Element; validate?: FieldValidator; } export const PasswordFieldWide = ({ name, label, placeholder, defaultValue, help, required, autoComplete, defaultVisible, tooltip, validate }: PasswordFieldWideProps) => { const [isVisible, toggleVisibility] = useToggle(defaultVisible); return (
{({ field, meta }: FieldProps) => (
{!isVisible ?
)}
{help && (

{help}

)}
); }; interface NumberFieldWideProps { name: string; label?: string; help?: string; placeholder?: string; defaultValue?: number; required?: boolean; tooltip?: JSX.Element; } export const NumberFieldWide = ({ name, label, placeholder, help, defaultValue, tooltip, required }: NumberFieldWideProps) => (
{({ field, meta, form }: FieldProps) => ( { form.setFieldValue(field.name, parseInt(e.target.value)); }} className={classNames( meta.touched && meta.error ? "border-red-500 focus:ring-red-500 focus:border-red-500" : "border-gray-300 dark:border-gray-700 focus:ring-blue-500 dark:focus:ring-blue-500 focus:border-blue-500 dark:focus:border-blue-500", "block w-full shadow-sm sm:text-sm rounded-md border py-2.5 bg-gray-100 dark:bg-gray-850 dark:text-gray-100" )} onWheel={(event) => { if (event.currentTarget === document.activeElement) { event.currentTarget.blur(); setTimeout(() => event.currentTarget.focus(), 0); } }} placeholder={placeholder} /> )} {help && (

{help}

)}
); interface SwitchGroupWideProps { name: string; label: string; description?: string; defaultValue?: boolean; className?: string; tooltip?: JSX.Element; } export const SwitchGroupWide = ({ name, label, description, tooltip, defaultValue }: SwitchGroupWideProps) => ( ); export const SelectFieldWide = ({ name, label, optionDefaultText, tooltip, options }: SelectFieldProps) => (
{({ field, form: { setFieldValue } }: FieldProps) => (