Spaces:
Runtime error
Runtime error
| import clsx from "clsx"; | |
| import React from "react"; | |
| interface Props extends React.InputHTMLAttributes<HTMLInputElement> { | |
| name: string; | |
| label?: string; | |
| attributes?: { [key: string]: string | number | string[] }; | |
| helpText?: string | React.ReactNode; | |
| icon?: React.ReactNode; | |
| disabled?: boolean; | |
| right?: React.ReactNode; | |
| handleFocusChange?: (focused: boolean) => void; | |
| } | |
| const Input = (props: Props) => { | |
| return ( | |
| <div> | |
| {props.label && ( | |
| <label | |
| htmlFor={props.name} | |
| className="flex items-center gap-2 text-sm font-bold leading-6 text-slate-12" | |
| > | |
| {props.icon} | |
| <span>{props.label}</span> | |
| {props.type == "range" && ( | |
| <span className="text-xs font-medium text-slate-12 lg:text-sm">({props.value})</span> | |
| )} | |
| </label> | |
| )} | |
| <div className="relative flex flex-col gap-1 rounded-md shadow-sm"> | |
| {props.helpText && ( | |
| <p | |
| className="text-xs font-light text-slate-11 lg:text-sm" | |
| id={`${props.name}-description`} | |
| > | |
| {props.helpText} | |
| </p> | |
| )} | |
| <div className="flex flex-grow flex-row items-center gap-1"> | |
| <input | |
| type={props.type} | |
| name={props.name} | |
| id={props.name} | |
| className={clsx( | |
| "placeholder:text-color-tertiary focus:outline-inset block w-full rounded-md border-0 bg-slate-1 p-1.5 text-slate-12 shadow-depth-1 transition-colors sm:text-sm sm:leading-6" | |
| )} | |
| placeholder={props.placeholder} | |
| value={props.value} | |
| onChange={props.onChange} | |
| disabled={props.disabled} | |
| onFocus={() => props.handleFocusChange && props.handleFocusChange(true)} | |
| onBlur={() => props.handleFocusChange && props.handleFocusChange(false)} | |
| {...(props.helpText ? { "aria-describedby": `${props.name}-description` } : {})} | |
| {...props.attributes} | |
| /> | |
| {props.right} | |
| </div> | |
| </div> | |
| </div> | |
| ); | |
| }; | |
| export default Input; | |