Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/kouts/vue-search-input

A search input component for Vue.js 3
https://github.com/kouts/vue-search-input

component input page search slash vue

Last synced: about 15 hours ago
JSON representation

A search input component for Vue.js 3

Awesome Lists containing this project

README

        

# vue-search-input ![](https://img.badgesize.io/kouts/vue-search-input/main/dist/vue-search-input.umd.js.svg) ![](https://img.badgesize.io/kouts/vue-search-input/main/dist/vue-search-input.umd.js.svg?compression=gzip) ![](coverage/badge.svg)

A Vue.js 3 search input component, inspired by the global search input of Storybook and GitHub.

![](.github/vue-search-input.gif)

The `SearchInput` component displays a search input with some additional features built-in.

**Features:**

- **Focus** on the search input at any time by pressing the `/` key on the keyboard.
- Includes a default CSS styling but it's also easy to bring your own styles too.
- Completely customizable icons via `slots`
- Displays an `x` icon on the right side of the search input, used for **clearing** the text when there's a value typed inside.
- The search text gets cleared by pressing the `esc` key when the search input has focus (configurable).

**_Important:_** It is advisable that you include the `SearchInput` component **only once** on each page.
In case multiple `SearchInput` components are present, the first one being displayed will take focus precedence upon the `/` keypress.

**Demo with examples**

https://vue-search-input.vercel.app

## Installation

```bash
npm i vue-search-input
```

## Usage

```html

import { ref } from 'vue'
import SearchInput from 'vue-search-input'
// Optionally import default styling
import 'vue-search-input/dist/styles.css'

const searchVal = ref('')

export default {
components: {
SearchInput
},
setup() {
return {
searchVal
}
}
}

```

## Styling
`vue-search-input` includes default styling (`dist/styles.css`) with that you can use as a base to create your own CSS.
All the component's elements are inside a `div` which acts a wrapper for the icons and the input.
The default class for the wrapper `div` is `search-input-wrapper` you can override it by providing class(es) to the `SearchInput` component.
> Class and styles bound to the `SearchInput` component will be added to the wrapper `div`.

## Events
> Events bound to the `SearchInput` component will be passed to the `input` element.

| Name | Description | Returned value
| :--- | :--- | :--- |
| update:modelValue | The updated bound model | `string`

## Props
| Name | Type | Description | Default
| :--- | :--- | :--- | :--- |
| type | string | The type of the input field. Allowed types are `search` and `text` | `search` |
| modelValue (v-model) | string | The input's value | `''` |
| wrapperClass | string | The default CSS class of the wrapper div | `search-input-wrapper` |
| searchIcon | boolean | Displays the "search" icon | true |
| shortcutIcon | boolean | Displays the "shortcut" icon | true |
| clearIcon | boolean | Displays the "clear text" icon | true |
| hideShortcutIconOnBlur | boolean | Whether to hide the shortcut icon when the input loses focus | true |
| clearOnEsc | boolean | Whether to clear the input field when the `esc` key is pressed | true |
| blurOnEsc | boolean | Whether to takes the focus out of the input field when the `esc` key is pressed | true |
| selectOnFocus | boolean | Selects the input's text upon `/` keypress | true |
| shortcutListenerEnabled | boolean | Enables the functionality for the `/` keypress | true |
| shortcutKey | string | The `key` for the shortcut functionality | `/` |

## Slots

`vue-search-input` includes some default icons but you can also customize them to suit your needs using the available `slots`.

| Name | Description | Default content
| :--- | :--- | :--- |
| search-icon | Slot for the search icon | `` |
| shortcut-icon | Slot for the shortcut icon | `` |
| clear-icon | Slot for the clear icon
`{ clear: () => void }` the function that clears the input | ``|
| append | Adds an item inside the input wrapper, before the search icon | - |
| append-inner | Adds an item inside the input wrapper, after the search icon | - |
| prepend | Adds an item inside the input wrapper directly after the input element | - |
| prepend-outer | Adds an item inside the input wrapper directly after the clear icon | - |