import type React from "react"; import type { ChangeEventHandler, ComponentProps } from "react"; export interface TextInputProps { id?: string; className?: string; inputClassName?: string; labelClassName?: string; name?: string; maxLength?: number; spellCheck?: boolean; placeholder?: string; value?: string; onChange?: ChangeEventHandler; disabled?: boolean; } export interface TextAreaProps { id?: string; className?: string; inputClassName?: string; labelClassName?: string; name?: string; maxLength?: number; spellCheck?: boolean; placeholder?: string; value?: string; disabled?: boolean; rows?: number; cols?: number; onChange?: ChangeEventHandler; } export interface SelectInputProps { placeholder: React.ReactNode; value?: string; onChange?: (newValue: string) => void; disabled?: boolean; children: React.ReactNode; } export interface OptionInputProps { id?: string; className?: string; value: string; disabled?: boolean; children: React.ReactNode; } export type MattrixwvSwitchSize = "none" | "xs" | "sm" | "md" | "lg" | "xl"; export interface MattrixwvSwitchProps { id?: string; className?: string; knobClassName?: string; size?: MattrixwvSwitchSize; wide?: boolean; name?: string; value?: string; defaultChecked?: boolean; checked?: boolean; onChange?: (newChecked: boolean) => void; disabled?: boolean; children?: React.ReactNode; offText?: React.ReactNode; onText?: React.ReactNode; } export interface MattrixwvButtonSwitchProps { id?: string; className?: string; name?: string; value?: string; defaultChecked?: boolean; checked?: boolean; onChange?: (newChecked: boolean) => void; disabled?: boolean; onNode: React.ReactNode; offNode: React.ReactNode; } export interface NumberInputProps { id?: string; className?: string; inputClassName?: string; labelClassName?: string; name?: string; min?: number; max?: number; step?: number; prefix?: string; suffix?: string; value: number; onChange: (newValue: number) => void; disabled?: boolean; children?: React.ReactNode; } export interface NumberSliderProps { id?: string; className?: string; name?: string; min?: number; max?: number; step?: number; value: number; onChange: (newValue: number) => void; disabled?: boolean; ariaLabel?: string; } export interface FileInputProps { id?: string; className?: string; name?: string; ariaLabel?: string; minSize?: number; maxSize?: number; showFileName: boolean; showSize: boolean; onChange?: (newFile: File | undefined) => void; disabled?: boolean; children?: React.ReactNode; } export type CheckboxSize = "none" | "xs" | "sm" | "md" | "lg" | "xl"; export interface CheckboxProps { className?: string; labelClassName?: string; name?: string; size?: CheckboxSize; showBox?: boolean; onChange?: (newChecked: boolean) => void; checked?: boolean; defaultChecked?: boolean; strokeWidth?: number; value?: string; disabled?: boolean; children?: React.ReactNode; } export type RadioButtonSize = "none" | "xs" | "sm" | "md" | "lg" | "xl"; export interface RadioButtonProps { id?: string; className?: string; labelClassName?: string; size?: RadioButtonSize; value: string; disabled?: boolean; children?: React.ReactNode; } export interface RadioListProps { id?: string; className?: string; name?: string; value?: string; onChange?: (value: string) => void; defaultValue?: string; direction?: "vertical" | "horizontal"; children?: React.ReactNode; } export interface DateInputProps extends Omit, "value" | "onChange" | "step">{ step?: number; value: Date | undefined; onChange: (newValue: Date | undefined) => void; }