npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@tresinternet/vue3-autocomplete

v0.4.1

Published

Input-field that autocompletes from a given list on input

Downloads

13

Readme

@tresinternet/vue3-autocomplete

Table of contents

Installation

Using npm

npm install @tresinternet/vue3-autocomplete

Usage

Load the component locally into your component.

<script setup lang="ts">
import Autocomplete from '@tresinternet/vue3-autocomplete'
// Optional: Import default CSS
import '@tresinternet/vue3-autocomplete/dist/style.css'
</script>

Use the component into your template.

<template>
	<Autocomplete
			@on-input="updateAutocompleteItems"
			:results="items"
	></Autocomplete>
</template>

Properties

| Property | Type | Description | Required | Default | | :----------------------------- | :--------- | :-------------------------------------------------------------------- | :------: | :------------------------------------------------------------------------------------------------------------------------------------------------ | | auto-select-first-result | Boolean | If true, selects the first item in the list when pressing 'Enter'-key | No | false | | debounce | Integer | Time to wait before each call to the @input event | No | 0 | | display-item | Function | Describes how to render each item in results | No | return typeof item === 'string' ? item as any : item.name - If the item type is a string, it returns this string. Otherwise, return item.name | | display-value | String | The property to display in the input field | No | `` | | input-class | Array | Override input default classes | No | [] | | max | Integer | Define a render limit for results items | No | 10 | | placeholder | String | Default input placeholder | No | '' | | results-container-class | Array | Override results container default classes | No | [] | | results-item-class | Array | Override results item default classes | No | [] | | results | Array | Items to display in the results list | No | [] | | use-html-for-results | Boolean | If true, displayItem method will display results as html | No | false |

Events

| Event | Description | Parameters | | :---------------------- | :------------------------------------------------------------------------------- | --------------- | | @on-cancel | Triggered when the user cancels the input by pressing the Escape key | | | @on-clear-input | Triggered when the user clicks the clear button | | | @on-input | Triggered on user input, should update the local results list | query: string | | @on-invalid-input | Triggered when the user clicks the return-key but no valid results are available | | | @on-select | Triggered when user click on a list item and return the selected item | item: unknown |

Public functions

| Function | Description | | :--------------------------- | :--------------------------------------------------------------------- | | setText(query: string) | Manually set the text of the input-field of the autocomplete component |

Available slots

| Slot | Description | | :--------------- | :--------------------------------------------------------------------- | | clearInput | The contents of the clear-button. Defaults to an SVG-element with an × |

Examples

To correctly use the component, you need to provide a list of items to display in the results list. You can do this by using the results property. This list needs to be filtered by the user input. You can do this by using the @input event. This event is triggered on user input and should update the local results list. Also sorting the results list is a good idea.

<script setup lang="ts">
import Autocomplete from '@tresinternet/vue3-autocomplete'
// Optional: Import default CSS
import '@tresinternet/vue3-autocomplete/dist/style.css'

// Define a ref to the autocomplete component
const autocomplete = ref()

// Define the initial list of items
const items: Ref<{ value: string; name: string }[]> = ref([])
// Define the list of items to display in the results list
const filteredItems: Ref<{ value: string; name: string }[]> = ref([])

// Store the current value of the autocomplete field
const currentValue = ref('')

/**
 * Update the filtered items based on the search query
 * Triggered when the user types in the autocomplete
 * @param query The query to filter the items on
 */
function updateAutocompleteItems(query: string) {
	// Filter the items based on the query
	filteredItems.value = items.value.filter((item) =>
		item.label.toLowerCase().includes(query.toLowerCase()))

	// Sort the items, starting with the ones that start with the query, and sort them alphabetically
	// Sort the rest of the items alphabetically
	// This is just an example, you can sort the items however you want
	filteredItems.value.sort((a, b) => {
		if (a.label.toLowerCase().startsWith(query.toLowerCase())) {
			if (b.label.toLowerCase().startsWith(query.toLowerCase())) {
				return a.label.localeCompare(b.label)
			}
			return -1
		}
		if (b.label.toLowerCase().startsWith(query.toLowerCase())) {
			return 1
		}
		return a.label.localeCompare(b.label)
	})
}

/**
 * Select an item from the autocomplete.
 * Triggered when the user selects an item from the autocomplete
 * @param item The selected item
 */
function selectAutocompleteItem(item: { value: number; name: string }) {
	// Do something with the selected item
	...

	// Trigger the `updateAutocompleteItems` function to update the filtered items list with the selected item
	updateAutocompleteItems(item.name)
}


/**
 * Cancel the autocomplete
 */
function cancelAutocomplete() {
	// If there is no initial value, clear the filtered items and clear the text
	// (in that case, the input should revert to an empty value)
	// Otherwise, revert the text to the initial value
	// The `currentValue` variable should be replaced with your own variable / check
	if (!currentValue) {
		autocomplete.value?.setText('')
		updateAutocompleteItems('')
	}
	else {
		autocomplete.value?.setText(currentValue)
		updateAutocompleteItems(currentValue)
	}
}

/**
 * Clear the autocomplete
 */
function clearAutocomplete() {
	// Clear the currently selected item
	...

	// Trigger the `updateAutocompleteItems` function with an empty string to clear the filtered items list
	updateAutocompleteItems('')
}

</script>
<Autocomplete
	ref="autocomplete"
	:results="filteredItems"
	:auto-select-first-result="true"
	:display-value="currentValue"
	@on-input="updateAutocompleteItems"
	@on-select="selectAutocompleteItem"
	@on-cancel="cancelAutocomplete"
	@on-clear-input="clearAutocomplete"
/>

Todo

  • [ ] Fix inline documentation and add Typescript support

Origin

This code was initially written by Takachi67 and can be found on https://github.com/Takachi67/vue3-autocomplete

License

MIT