A lightweight, customizable React + TypeScript library for building dynamic forms with SCSS-based styling.
Install the package via npm:
npm i @avarock/react-form
- Pre-styled, customizable form and input components.
- Supports both browser-based and in-built form validation.
- Custom themes (
light
anddark
). - Flexible styling with support for
className
andstyle
props.
Here’s an example of how to use the components:
import {
Form,
InputText,
InputTextAnimated,
InputSelect,
InputTextArea,
InputCheckBox,
InputRadio,
} from "@avarock/react-form";
import "@avarock/react-form/dist/styles.css";
function App() {
function handleSubmit(formState: Record<string, any>) {
console.log(formState);
}
return (
<div>
<Form
style={{ gridTemplateColumns: "1fr 1fr", maxWidth: "40rem" }}
onSubmit={handleSubmit}
theme="light"
HTMLValidate={false}
showSubmitBtn={true}
>
<InputText
label="Name"
name="name"
placeholder="Enter your name"
required
/>
<InputText
label="Age"
name="age"
placeholder="Enter your age"
type="number"
required
/>
<InputTextAnimated type="email" label="Email" name="email" required />
<InputTextAnimated
type="password"
label="Password"
name="password"
required
/>
<InputSelect
label="City"
name="city"
options={[
{ label: "Jaipur", value: "jaipur" },
{ label: "Mumbai", value: "mumbai" },
{ label: "Hyderabad", value: "hyderabad" },
]}
initialOptionLabel="Select City"
required
/>
<InputTextArea
label="Bio"
name="bio"
placeholder="Enter your bio"
maxLength={80}
required
/>
<InputCheckBox
style={{ alignSelf: "end" }}
label="Allow Cookies"
name="isCookieEnabled"
/>
<InputRadio
name="gender"
label="Gender"
options={[
{ label: "Male", value: "male" },
{ label: "Female", value: "female" },
{ label: "Other", value: "other" },
]}
required
/>
</Form>
</div>
);
}
export default App;
- Import the library styles:
import "@avarock/react-form/dist/styles.css";
- You can also use the
className
orstyle
props to apply custom styles.
-
Props:
-
style
: Inline styles for custom layout. -
onSubmit(formState: Record<string, any>)
: Callback function triggered on form submission with form data. -
HTMLValidate
: Enable browser-based validation (true
) or use the library's validation (false
).
Note: Currently, library validation only supportsrequired
,type="email"
, andtype="password"
. -
showSubmitBtn
: Show/hide the submit button. -
theme
: Choose between"light"
and"dark"
themes. - Custom submit button or other elements can be passed as children.
-
-
Props:
-
name
(required): Register the field in the form. -
label
(required): Display field label. -
type
:"text" | "password" | "email" | "number"
. Default:"text"
. -
togglePasswordVisibility
: Show/hide toggle button for password visibility (iftype="password"
). - Any valid
HTMLInputElement
attributes.
-
- Similar to
InputText
with the following differences:- No
placeholder
prop (uses animation instead). - Styles for transition and animation.
- No
-
Props:
-
name
(required): Register the field in the form. -
label
(required): Display field label. -
options
(required): Array of objects{ label: string; value: string }
to generate<option>
elements. -
initialOptionLabel
: Placeholder for the dropdown (Default:"Select"
). Becomes hidden on user toggle, ifrequired
is set. - Any valid
HTMLSelectElement
attributes.
-
-
Props:
-
name
(required): Register the field in the form. -
label
(required): Display field label. -
maxLength
: Sets the limit and also displays an overlay showing the number of characters typed. - Custom scrollbars for better UX.
- Any valid
HTMLTextareaElement
attributes.
-
- A custom
<input type="checkbox" />
element. -
Props:
-
name
(required): Register the field in the form. -
label
(required): Display field label. - Any valid
HTMLInputElement
attributes, excepttype
, which is set to"checkbox"
.
-
- A group of
<input type="radio" />
elements. -
Props:
-
name
(required): Register the field in the form. -
label
(required): Display field label. -
options
(required): Array of objects{ label: string; value: string }
to generate radio buttons. - Any valid
HTMLInputElement
attributes, excepttype
(set to"radio"
) andvalue
(derived fromoptions
).
-