# Input Form input component with floating label, icons, password toggle, tooltip, and error states. Fully integrated with DaisyUI and Tailwind. ## Tag `Input` ## Props | Prop | Type | Default | Description | | :----------- | :--------------------------- | :--------- | :----------------------------------------------- | | `label` | `string` | `-` | Label text (floating style) | | `type` | `string` | `'text'` | Input type (text, password, email, number, date) | | `value` | `string \| Signal` | `''` | Input value | | `placeholder`| `string` | `' '` | Placeholder text | | `icon` | `string \| VNode \| Signal` | `-` | Icon displayed inside input | | `tip` | `string` | `-` | Help tooltip text | | `error` | `string \| Signal` | `-` | Error message to display | | `disabled` | `boolean \| Signal` | `false` | Disabled state | | `class` | `string` | `''` | Additional CSS classes (DaisyUI + Tailwind) | | `oninput` | `function` | `-` | Input event handler | ## Live Examples ### Basic Input

Live Demo

```javascript const BasicDemo = () => { const name = $(''); return Input({ label: 'Full Name', placeholder: 'Enter your name', value: name, oninput: (e) => name(e.target.value) }); }; Mount(BasicDemo, '#demo-basic'); ``` ### With Icon

Live Demo

```javascript const IconDemo = () => { const email = $(''); return Input({ label: 'Email', type: 'email', icon: Icons.iconMail, value: email, oninput: (e) => email(e.target.value) }); }; Mount(IconDemo, '#demo-icon'); ``` ### Password with Toggle

Live Demo

```javascript const PasswordDemo = () => { const password = $(''); return Input({ label: 'Password', type: 'password', value: password, oninput: (e) => password(e.target.value) }); }; Mount(PasswordDemo, '#demo-password'); ``` ### With Tooltip

Live Demo

```javascript const TooltipDemo = () => { const username = $(''); return Input({ label: 'Username', tip: 'Must be at least 3 characters', value: username, oninput: (e) => username(e.target.value) }); }; Mount(TooltipDemo, '#demo-tooltip'); ``` ### Error State

Live Demo

```javascript const ErrorDemo = () => { const email = $(''); const isValid = $(true); const validate = (value) => { const valid = value.includes('@') && value.includes('.'); isValid(valid); email(value); }; return Input({ label: 'Email', type: 'email', value: email, error: () => !isValid() && email() ? 'Invalid email address' : '', oninput: (e) => validate(e.target.value) }); }; Mount(ErrorDemo, '#demo-error'); ``` ### Disabled State

Live Demo

```javascript const DisabledDemo = () => { return Input({ label: 'Username', value: 'john.doe', disabled: true }); }; Mount(DisabledDemo, '#demo-disabled'); ``` ### All Variants

Live Demo

```javascript const VariantsDemo = () => { const text = $(''); const number = $(0); return Div({ class: 'flex flex-col gap-4' }, [ Input({ label: 'Text Input', placeholder: 'Type something...', value: text, oninput: (e) => text(e.target.value) }), Input({ label: 'Number Input', type: 'number', value: number, oninput: (e) => number(parseInt(e.target.value) || 0) }), Input({ label: 'Date Input', type: 'date', value: $('2024-01-01') }) ]); }; Mount(VariantsDemo, '#demo-variants'); ```