# 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({ 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({ type: 'email', icon: "✉️", value: email, oninput: (e) => email(e.target.value) }); }; $mount(IconDemo, '#demo-icon'); ``` ### Password with Toggle

Live Demo

```javascript const PasswordDemo = () => { const password = $(''); return Input({ 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({ 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 = $(''); return Div({ class: 'w-full max-w-md' }, [ Input({ type: 'email', value: email, placeholder: 'Enter your email', icon: 'icon-[lucide--mail]', validate: (value) => { if (!value) return ''; if (!value.includes('@')) return 'Email must contain @'; if (!value.includes('.')) return 'Email must contain .'; return ''; }, oninput: (e) => email(e.target.value) }) ]); }; $mount(ErrorDemo, '#demo-error'); ``` ### Disabled State

Live Demo

```javascript const DisabledDemo = () => { return Input({ 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({ placeholder: 'Type something...', value: text, oninput: (e) => text(e.target.value) }), Input({ type: 'number', value: number, oninput: (e) => number(parseInt(e.target.value) || 0) }), Input({ type: 'date', value: $('2024-01-01') }), Input({class: 'input-primary',value:"Primary"}), Input({class: 'input-secondary', value:"Secondary"}), Input({class: 'input-accent', value:"Accent"}), Input({class: 'input-ghost', value:"Ghost"}), Input({class: 'input-link', value:"Link"}), Input({class: 'input-info', value:"Info"}), Input({class: 'input-success', value:"Success"}), Input({class: 'input-warning', value:"Warning"}), Input({class: 'input-error', value:"Error"}), ]); }; $mount(VariantsDemo, '#demo-variants'); ```