Input component for DarkSnow UI
npm install @darksnow-ui/inputA flexible and customizable Input component for React applications.
``bash`
pnpm add @darksnow-ui/input
`tsx
import { Input } from "@darksnow-ui/input"
import "@darksnow-ui/input/styles.css"
function App() {
return
}
`
| Prop | Type | Default | Description |
| --------- | ----------------------------------- | ----------- | --------------------------------------- |
| variant | 'default' \| 'error' \| 'success' | 'default' | Visual variant of the input |'sm' \| 'md' \| 'lg'
| size | | 'md' | Size of the input |ReactNode
| leftIcon | | - | Icon to display on the left side |ReactNode
| rightIcon | | - | Icon to display on the right side |boolean
| isLoading | | false | Whether the input is in a loading state |boolean
| focusRing | | true | Whether to show focus ring |InputHTMLAttributes
| ...props | | - | All native input attributes |
`tsx`
`tsx
import { Label } from "@darksnow-ui/label"
$3
`tsx
import { Input } from '@darksnow-ui/input'
import { Search, Mail } from 'lucide-react'// Left icon
leftIcon={ }
placeholder="Search..."
/>
// Right icon
rightIcon={ }
placeholder="Email"
type="email"
/>
`$3
`tsx
// Default
// Error
// Success
`$3
`tsx
`$3
`tsx
// Disabled
// Loading
// Without focus ring
`$3
`tsx
`$3
`tsx
import { Button } from "@darksnow-ui/button"
`$3
`tsx
import { Button } from "@darksnow-ui/button"
import { Label } from "@darksnow-ui/label"
`$3
`tsx
import { Search, X } from "lucide-react"
type="search"
placeholder="Search..."
leftIcon={ }
rightIcon={ }
className="pr-10"
/>
`CSS Variables
You can customize the appearance using CSS variables:
`css
:root {
--darksnow-input-border: #e5e7eb;
--darksnow-input-bg: #ffffff;
--darksnow-input-color: #111827;
--darksnow-input-border-hover: #d1d5db;
--darksnow-input-border-focus: #3b82f6;
--darksnow-input-focus-ring: rgba(59, 130, 246, 0.15);
--darksnow-input-placeholder: #9ca3af;
--darksnow-input-icon-color: #6b7280;
--darksnow-input-radius: 0.375rem; / Error variant /
--darksnow-input-error-border: #ef4444;
--darksnow-input-error-border-hover: #dc2626;
--darksnow-input-error-focus-ring: rgba(239, 68, 68, 0.15);
/ Success variant /
--darksnow-input-success-border: #10b981;
--darksnow-input-success-border-hover: #059669;
--darksnow-input-success-focus-ring: rgba(16, 185, 129, 0.15);
}
``