input

Displays a form input field or a component that looks like an input field.

PreviousNext

Your API key is encrypted and stored securely.

import { Component } from '@angular/core';

import { ZardFieldImports } from '@/shared/components/field/field.imports';
import { ZardInputComponent } from '@/shared/components/input/input.component';

@Component({
  selector: 'z-demo-input-default',
  imports: [ZardInputComponent, ...ZardFieldImports],
  template: `
    <div z-field class="w-72">
      <label z-field-label for="input-demo-api-key">API Key</label>
      <input z-input id="input-demo-api-key" type="password" placeholder="sk-..." />
      <p z-field-description>Your API key is encrypted and stored securely.</p>
    </div>
  `,
})
export class ZardDemoInputDefaultComponent {}

Installation

Copy
npx zard-cli@latest add input

Usage

import { ZardInputComponent } from '@/shared/components/input/input.component';
Copy
<input z-input type="email" placeholder="Email" />
Copy

Examples

basic

import { Component } from '@angular/core';

import { ZardInputComponent } from '@/shared/components/input/input.component';

@Component({
  selector: 'z-demo-input-basic',
  imports: [ZardInputComponent],
  template: `
    <input z-input placeholder="Enter text" class="w-72" />
  `,
})
export class ZardDemoInputBasicComponent {}

field

Use Field, FieldLabel, and FieldDescription to create an input with a label and description.

Choose a unique username for your account.

import { Component } from '@angular/core';

import { ZardFieldImports } from '@/shared/components/field/field.imports';
import { ZardInputComponent } from '@/shared/components/input/input.component';

@Component({
  selector: 'z-demo-input-field',
  imports: [ZardInputComponent, ...ZardFieldImports],
  template: `
    <div z-field class="w-72">
      <label z-field-label for="input-field-username">Username</label>
      <input z-input id="input-field-username" type="text" placeholder="Enter your username" />
      <p z-field-description>Choose a unique username for your account.</p>
    </div>
  `,
})
export class ZardDemoInputFieldComponent {}

field group

Use FieldGroup to show multiple Field blocks and to build forms.

We'll send updates to this address.

import { Component } from '@angular/core';

import { ZardButtonComponent } from '@/shared/components/button/button.component';
import { ZardFieldImports } from '@/shared/components/field/field.imports';
import { ZardInputComponent } from '@/shared/components/input/input.component';

@Component({
  selector: 'z-demo-input-field-group',
  imports: [ZardInputComponent, ZardButtonComponent, ...ZardFieldImports],
  template: `
    <div z-field-group class="w-72">
      <div z-field>
        <label z-field-label for="fieldgroup-name">Name</label>
        <input z-input id="fieldgroup-name" placeholder="Jordan Lee" />
      </div>
      <div z-field>
        <label z-field-label for="fieldgroup-email">Email</label>
        <input z-input id="fieldgroup-email" type="email" placeholder="name@example.com" />
        <p z-field-description>We'll send updates to this address.</p>
      </div>
      <div z-field zOrientation="horizontal">
        <button z-button type="reset" zType="outline">Reset</button>
        <button z-button type="submit">Submit</button>
      </div>
    </div>
  `,
})
export class ZardDemoInputFieldGroupComponent {}

disabled

Use the disabled prop to disable the input. To style the disabled state, add the data-disabled attribute to the Field component.

This field is currently disabled.

import { Component } from '@angular/core';

import { ZardFieldImports } from '@/shared/components/field/field.imports';
import { ZardInputComponent } from '@/shared/components/input/input.component';

@Component({
  selector: 'z-demo-input-disabled',
  imports: [ZardInputComponent, ...ZardFieldImports],
  template: `
    <div z-field class="w-72" data-disabled="true">
      <label z-field-label for="input-demo-disabled">Email</label>
      <input z-input id="input-demo-disabled" type="email" placeholder="Email" disabled />
      <p z-field-description>This field is currently disabled.</p>
    </div>
  `,
})
export class ZardDemoInputDisabledComponent {}

invalid

Use the aria-invalid prop to mark the input as invalid. To style the invalid state, add the data-invalid attribute to the Field component.

This field contains validation errors.

import { Component } from '@angular/core';

import { ZardFieldImports } from '@/shared/components/field/field.imports';
import { ZardInputComponent } from '@/shared/components/input/input.component';

@Component({
  selector: 'z-demo-input-invalid',
  imports: [ZardInputComponent, ...ZardFieldImports],
  template: `
    <div z-field class="w-72" data-invalid="true">
      <label z-field-label for="input-invalid">Invalid Input</label>
      <input z-input id="input-invalid" placeholder="Error" aria-invalid="true" />
      <p z-field-description>This field contains validation errors.</p>
    </div>
  `,
})
export class ZardDemoInputInvalidComponent {}

file

Use the type="file" prop to create a file input.

Select a picture to upload.

import { Component } from '@angular/core';

import { ZardFieldImports } from '@/shared/components/field/field.imports';
import { ZardInputComponent } from '@/shared/components/input/input.component';

@Component({
  selector: 'z-demo-input-file',
  imports: [ZardInputComponent, ...ZardFieldImports],
  template: `
    <div z-field class="w-72">
      <label z-field-label for="picture">Picture</label>
      <input z-input id="picture" type="file" />
      <p z-field-description>Select a picture to upload.</p>
    </div>
  `,
})
export class ZardDemoInputFileComponent {}

inline

Use Field with orientation="horizontal" to create an inline input. Pair with Button to create a search input with a button.

import { Component } from '@angular/core';

import { ZardButtonComponent } from '@/shared/components/button/button.component';
import { ZardFieldImports } from '@/shared/components/field/field.imports';
import { ZardInputComponent } from '@/shared/components/input/input.component';

@Component({
  selector: 'z-demo-input-inline',
  imports: [ZardInputComponent, ZardButtonComponent, ...ZardFieldImports],
  template: `
    <div z-field zOrientation="horizontal" class="w-80">
      <input z-input type="search" placeholder="Search..." />
      <button type="button" z-button>Search</button>
    </div>
  `,
})
export class ZardDemoInputInlineComponent {}

grid

Use a grid layout to place multiple inputs side by side.

import { Component } from '@angular/core';

import { ZardFieldImports } from '@/shared/components/field/field.imports';
import { ZardInputComponent } from '@/shared/components/input/input.component';

@Component({
  selector: 'z-demo-input-grid',
  imports: [ZardInputComponent, ...ZardFieldImports],
  template: `
    <div z-field-group class="grid min-w-sm grid-cols-2">
      <div z-field>
        <label z-field-label for="first-name">First Name</label>
        <input z-input id="first-name" placeholder="Jordan" />
      </div>
      <div z-field>
        <label z-field-label for="last-name">Last Name</label>
        <input z-input id="last-name" placeholder="Lee" />
      </div>
    </div>
  `,
})
export class ZardDemoInputGridComponent {}

required

Use the required attribute to indicate required inputs.

This field must be filled out.

import { Component } from '@angular/core';

import { ZardFieldImports } from '@/shared/components/field/field.imports';
import { ZardInputComponent } from '@/shared/components/input/input.component';

@Component({
  selector: 'z-demo-input-required',
  imports: [ZardInputComponent, ...ZardFieldImports],
  template: `
    <div z-field class="w-72">
      <label z-field-label for="input-required">
        Required Field
        <span class="text-destructive">*</span>
      </label>
      <input z-input id="input-required" placeholder="This field is required" required />
      <p z-field-description>This field must be filled out.</p>
    </div>
  `,
})
export class ZardDemoInputRequiredComponent {}

badge

Use Badge in the label to highlight a recommended field.

import { Component } from '@angular/core';

import { ZardBadgeComponent } from '@/shared/components/badge/badge.component';
import { ZardFieldImports } from '@/shared/components/field/field.imports';
import { ZardInputComponent } from '@/shared/components/input/input.component';

@Component({
  selector: 'z-demo-input-badge',
  imports: [ZardInputComponent, ZardBadgeComponent, ...ZardFieldImports],
  template: `
    <div z-field class="w-80">
      <label z-field-label for="input-badge">
        Webhook URL
        <z-badge zType="secondary" class="ml-auto">Beta</z-badge>
      </label>
      <input z-input id="input-badge" type="url" placeholder="https://api.example.com/webhook" />
    </div>
  `,
})
export class ZardDemoInputBadgeComponent {}

input group

To add icons, text, or buttons inside an input, use the InputGroup component. See the Input Group component for more examples.

https://
import { Component } from '@angular/core';

import { NgIcon, provideIcons } from '@ng-icons/core';
import { lucideInfo } from '@ng-icons/lucide';

import { ZardFieldImports } from '@/shared/components/field/field.imports';
import { ZardInputComponent } from '@/shared/components/input/input.component';
import { ZardInputGroupImports } from '@/shared/components/input-group/input-group.imports';

@Component({
  selector: 'z-demo-input-input-group',
  imports: [ZardInputComponent, NgIcon, ...ZardInputGroupImports, ...ZardFieldImports],
  template: `
    <div z-field class="w-80">
      <label z-field-label for="input-group-url">Website URL</label>
      <z-input-group>
        <z-input-group-addon>
          <span z-input-group-text>https://</span>
        </z-input-group-addon>
        <input z-input id="input-group-url" placeholder="example.com" />
        <z-input-group-addon zAlign="inline-end">
          <ng-icon name="lucideInfo" />
        </z-input-group-addon>
      </z-input-group>
    </div>
  `,
  viewProviders: [provideIcons({ lucideInfo })],
})
export class ZardDemoInputInputGroupComponent {}

button group

To add buttons to an input, use the ButtonGroup component. See the Button Group component for more examples.

import { Component } from '@angular/core';

import { ZardButtonComponent } from '@/shared/components/button/button.component';
import { ZardButtonGroupComponent } from '@/shared/components/button-group/button-group.component';
import { ZardFieldImports } from '@/shared/components/field/field.imports';
import { ZardInputComponent } from '@/shared/components/input/input.component';

@Component({
  selector: 'z-demo-input-button-group',
  imports: [ZardInputComponent, ZardButtonComponent, ZardButtonGroupComponent, ...ZardFieldImports],
  template: `
    <div z-field class="w-80">
      <label z-field-label for="input-button-group">Search</label>
      <z-button-group>
        <input z-input id="input-button-group" placeholder="Type to search..." />
        <button z-button zType="outline">Search</button>
      </z-button-group>
    </div>
  `,
})
export class ZardDemoInputButtonGroupComponent {}

form

A full form example with multiple inputs, a select, and a button.

We'll never share your email with anyone.

import { Component } from '@angular/core';

import { ZardButtonComponent } from '@/shared/components/button/button.component';
import { ZardFieldImports } from '@/shared/components/field/field.imports';
import { ZardInputComponent } from '@/shared/components/input/input.component';
import { ZardSelectImports } from '@/shared/components/select/select.imports';

@Component({
  selector: 'z-demo-input-form',
  imports: [ZardInputComponent, ZardButtonComponent, ZardSelectImports, ...ZardFieldImports],
  template: `
    <form class="w-full min-w-sm">
      <div z-field-group>
        <div z-field>
          <label z-field-label for="form-name">Name</label>
          <input z-input id="form-name" type="text" placeholder="Evil Rabbit" required />
        </div>
        <div z-field>
          <label z-field-label for="form-email">Email</label>
          <input z-input id="form-email" type="email" placeholder="john@example.com" />
          <p z-field-description>We'll never share your email with anyone.</p>
        </div>
        <div class="grid grid-cols-2 gap-4">
          <div z-field>
            <label z-field-label for="form-phone">Phone</label>
            <input z-input id="form-phone" type="tel" placeholder="+1 (555) 123-4567" />
          </div>
          <div z-field>
            <label z-field-label for="form-country">Country</label>
            <z-select id="form-country" [(zValue)]="country">
              <z-select-item zValue="us">United States</z-select-item>
              <z-select-item zValue="uk">United Kingdom</z-select-item>
              <z-select-item zValue="ca">Canada</z-select-item>
            </z-select>
          </div>
        </div>
        <div z-field>
          <label z-field-label for="form-address">Address</label>
          <input z-input id="form-address" type="text" placeholder="123 Main St" />
        </div>
        <div z-field zOrientation="horizontal">
          <button z-button type="button" zType="outline">Cancel</button>
          <button z-button type="submit">Submit</button>
        </div>
      </div>
    </form>
  `,
})
export class ZardDemoInputFormComponent {
  country = 'us';
}

API Reference

z-input, input[z-input]Component

A form input field. Usable as a component or as a directive on a native input. All native HTML input attributes (placeholder, name, disabled, readonly, aria-invalid, etc.) are supported on the directive form.

PropertyDescriptionTypeDefault
[class] Additional CSS classes ClassValue ''
[(value)] Input value (two-way binding) string ''
[zType] Native input type (z-input only) string 'text'
github iconwhatsapp icondiscord iconX icon

Made with in Brazil. Open source and available on GitHub .