Skip to content

PubInput ​

This is a input component. It is used to display an input field and supports various input types, such as text, password, email, number, and more.

Default Usage ​

vue
<template>
  <div class="grid gap-6 mb-3 md:grid-cols-2 w-full">
    <pub-input
      v-model="formData.first_name"
      name="first_name"
      placeholder="Enter your First Name"
      label="First name"
    />
    <pub-input
      v-model="formData.last_name"
      name="last_name"
      placeholder="Enter your Last Name"
      label="Last name"
    />
    <pub-input
      v-model="formData.company"
      name="company"
      placeholder="Enter your Company"
      label="Company"
    />
    <pub-input
      v-model="formData.phone"
      type="tel"
      name="phone"
      placeholder="Enter your Phone number"
      label="Phone number"
    />
    <pub-input
      v-model="formData.website"
      type="url"
      name="website"
      placeholder="Enter your Website URL"
      label="Website URL"
    />
    <pub-input
      v-model="formData.visitors"
      type="number"
      name="visitors"
      placeholder="Enter number of visitors"
      label="Number of visitors"
    />
    <pub-input
      v-model="formData.email"
      wrapper-class="col-span-2"
      type="email"
      name="email"
      placeholder="Enter your Email address"
      label="Email address"
    />
    <pub-input
      v-model="formData.password"
      wrapper-class="col-span-2"
      type="password"
      name="password"
      placeholder="Enter your Password"
      label="Password"
    />
    <pub-input
      v-model="formData.confirm_password"
      wrapper-class="col-span-2"
      type="password"
      name="confirm_password"
      placeholder="Enter your Confirm Password"
      label="Confirm password"
    />
  </div>
  <pub-button>Submit</pub-button>
</template>

<script lang="ts" setup>
import { reactive } from 'vue'
import { PubButton, PubInput } from 'vuelicity'

const formData = reactive({
    first_name: '',
    last_name: '',
    company: '',
    phone: '',
    email: '',
    website: '',
    visitors: 0,
    password: '',
    confirm_password: '',
})
</script>

Sizes ​

Prop - size Usage ​

The size prop is used to set the size of the input field. It can be one of the following values: sm, md, lg or xl. The default value is md.

vue
<template>
  <pub-input
    v-model="name"
    label="Small"
    placeholder="Enter your name"
    size="sm"
  />
  <pub-input
    v-model="name"
    label="Medium"
    placeholder="Enter your name"
    size="md"
  />
  <pub-input
    v-model="name"
    label="Large"
    placeholder="Enter your name"
    size="lg"
  />
  <pub-input
    v-model="name"
    label="Extra large"
    placeholder="Enter your name"
    size="xl"
  />
</template>

<script lang="ts" setup>
import { ref } from 'vue'
import { PubInput } from 'vuelicity'

const name = ref('')
</script>

Required ​

Prop - required Usage ​

The required prop is used to make the input field required. It can be a boolean value.

vue
<template>
  <pub-input
    v-model="name"
    label="Name"
    placeholder="Enter your name"
    required
  />
</template>

<script lang="ts" setup>
import { ref } from 'vue'
import { PubInput } from 'vuelicity'

const name = ref('')
</script>

Disabled ​

Prop - disabled Usage ​

The disabled prop is used to disable the input field. It can be a boolean value.

vue
<template>
  <pub-input
    v-model="name"
    label="Name"
    placeholder="Enter your name"
    disabled
  />
</template>

<script lang="ts" setup>
import { ref } from 'vue'
import { PubInput } from 'vuelicity'

const name = ref('Felicia')
</script>

Readonly ​

Prop - readonly Usage ​

The readonly prop is used to make the input field readonly. It can be a boolean value.

vue
<template>
  <pub-input
    v-model="value"
    label="Readonly input"
    placeholder="This value cannot be changed"
    readonly
  />
  <pub-input
    v-model="value"
    disabled
    label="Disabled + readonly input"
    placeholder="This value cannot be changed"
    readonly
  />
</template>

<script lang="ts" setup>
import { ref } from 'vue'
import { PubInput } from 'vuelicity'

const value = ref('Prefilled Value')
</script>

Validation ​

Prop - validationStatus and Slot - validationMessage Usage ​

The validationStatus prop is used to set the visual validation state of the input. It can be one of the following values: error, success.

The validationMessage slot is used to display a custom validation message. It can be a string value.

Well done! Username is available!


Oh, snap! Password doesn't contain at least 8 characters and a number.

vue
<template>
  <pub-input
    v-model="formData.username"
    label="Username"
    placeholder="Enter your username"
    required
    validation-status="success"
  >
    <template #validationMessage>
      <span class="font-medium">Well done!</span> Username is available!
    </template>
  </pub-input>
  <hr class="mb-2">
  <pub-input
    v-model="formData.password"
    type="password"
    label="Password"
    placeholder="Enter your password"
    required
    validation-status="error"
  >
    <template #validationMessage>
      <span class="font-medium">Oh, snap!</span> Password doesn't contain at least 8 characters and a number.
    </template>
  </pub-input>
</template>

<script lang="ts" setup>
import { reactive } from 'vue'
import { PubInput } from 'vuelicity'

const formData = reactive({
    username: '',
    password: '',
})
</script>

Input group ​

Slot - prepend and append Usage ​

The prepend and append slots are used to display additional content before and after the input field.

@example.com
vue
<template>
  <pub-input
    v-model="email"
    label="Email"
    placeholder="Enter your email"
  >
    <template #prepend>
      <pub-icon
        name="envelope"
        class="text-grey-800"
      />
    </template>
  </pub-input>
  <pub-input
    v-model="username"
    label="Username"
    placeholder="Enter your username"
  >
    <template #append>
      @example.com
    </template>
  </pub-input>
</template>

<script lang="ts" setup>
import { ref } from 'vue'
import { PubIcon, PubInput } from 'vuelicity'

const email = ref('')
const username = ref('')
</script>

Helper text ​

Slot - helperText Usage ​

The helperText slot is used to display helper text below the input field. It can be a string value.

We'll never share your details. Read our Privacy Policy .

vue
<template>
  <pub-input
    v-model="email"
    label="Name"
    placeholder="Enter your email"
  >
    <template #prepend>
      <pub-icon
        name="envelope"
        class="text-grey-800"
      />
    </template>
    <template #helper>
      We'll never share your details. Read our
      <a
        href="#"
        class="text-blue-600 dark:text-blue-500"
      > Privacy Policy </a>.
    </template>
  </pub-input>
</template>

<script lang="ts" setup>
import { ref } from 'vue'
import { PubIcon, PubInput } from 'vuelicity'

const email = ref('')
</script>

Styling input ​

↣
↢
vue
<template>
  <pub-input
    v-model="name"
    label="Name"
    placeholder="enter your name"
    wrapper-class="border-2 border-amber-700 dark:border-green-400 bg-amber-300 dark:bg-green-800 rounded-lg p-3"
    label-class="text-xl font-bold text-amber-900 dark:text-green-200"
    class="bg-amber-100 dark:bg-green-900 border-2 border-amber-500 has-[input:focus]:border-amber-900 has-[input:focus]:ring-amber-300"
    input-class="text-amber-900 placeholder:text-amber-500"
    prepend-class="bg-amber-200 border-amber-500 text-amber-700 dark:text-green-300"
    append-class="bg-amber-200 border-amber-500 text-amber-700 dark:text-green-300"
  >
    <template #prepend>
      ↣
    </template>
    <template #append>
      ↢
    </template>
  </pub-input>
</template>

<script lang="ts" setup>
import { ref } from 'vue'
import { PubInput } from 'vuelicity'

const name = ref('')
</script>

Search input ​

vue
<template>
  <pub-input
    v-model="searchQuery"
    label="Search"
    placeholder="Type to search..."
  >
    <template #prepend>
      <pub-icon
        name="search"
        class="text-grey-700"
        size="sm"
        type="outline"
      />
    </template>
    <template #append>
      <pub-button
        color="blue"
        size="xs"
        rounded="md"
      >
        Search
      </pub-button>
    </template>
  </pub-input>
</template>

<script lang="ts" setup>
import { ref } from 'vue'
import { PubButton, PubIcon, PubInput } from 'vuelicity'

const searchQuery = ref('')
</script>
vue
<template>
  <pub-input
    v-model="searchQuery"
    placeholder="Search for products, brands and more"
    append-class="bg-blue-500 text-white"
    required
  >
    <template #prepend>
      <pub-dropdown>
        <template #trigger>
          <pub-button
            color="none"
            class="border-e border-grey-200 p-1 gap-0.5"
          >
            <template #prepend>
              <pub-icon
                name="grid"
                size="xs"
                type="outline"
              />
            </template>
            All categories
            <template #append>
              <pub-icon
                name="chevron-down"
                size="xs"
              />
            </template>
          </pub-button>
        </template>
        <nav class="py-2 text-sm text-grey-700">
          <a
            href="#"
            class="block px-4 py-2 hover:bg-grey-100"
          > Dashboard </a>
          <a
            href="#"
            class="block px-4 py-2 hover:bg-grey-100"
          > Settings </a>
          <a
            href="#"
            class="block px-4 py-2 hover:bg-grey-100"
          > Earnings </a>
          <a
            href="#"
            class="block px-4 py-2 hover:bg-grey-100"
          > Sign out </a>
        </nav>
      </pub-dropdown>
    </template>
    <template #append>
      <pub-icon
        name="search"
        size="sm"
        type="outline"
      />
      <!-- <pub-button color="blue" size="xs" square rounded="md">
            </pub-button> -->
    </template>
  </pub-input>
</template>

<script lang="ts" setup>
import { ref } from 'vue'
import { PubButton, PubDropdown, PubIcon, PubInput } from 'vuelicity'

const searchQuery = ref('')
</script>

Reference ​

Properties ​

NameTypeDefaultDescriptionOptions
autocompleteString'off'Controls the autocomplete attribute of the input.'on', 'off', 'email', 'tel', 'name', 'username', 'current-password', 'country', 'postal-code', 'language', 'bday'
classString''Additional classes for the wrapper element.
disabledBooleanfalseDisables the input field when true.
inputClassString''Additional classes for the input element.
labelString''Text label displayed above the input.
labelClassString''Additional classes for the label element.
requiredBooleanfalseMarks the input as required.
sizeString'md'Controls the size of the input.'sm', 'md', 'lg', 'xl'
typeString'text'HTML input type attribute.'button', 'checkbox', 'color', 'date', 'datetime-local', 'email', 'file', 'hidden', 'image', 'month', 'number', 'password', 'radio', 'range', 'reset', 'search', 'submit', 'tel', 'text', 'time', 'url', 'week'
validationStatusStringundefinedVisual validation state of the input.'Error', 'Success'
wrapperClassString''Additional classes for the outer wrapper.
prependClassString''Additional classes for the prepend container element.
appendClassString''Additional classes for the append container element.

Slots ​

NameDescription
prependContent placed before the input element.
appendContent placed after the input element.
validationMessageSlot for custom validation message.
helperSlot for helper text displayed below the input.

Released under the MIT License.