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

@sti-uff/autocomplete

v1.0.0

Published

Wrapper para @tarekraafat/autocomplete.js

Downloads

3

Readme

Sti Autocomplete

Wrapper para @tarekraafat/autocomplete.js com padrões sanos
A intenção deste projeto é tornar mais fácil a utilização da biblioteca citada acima,
diminuindo a quantidade de opções e permitindo alteração de padrões globais.

Instalação

  npm i @sti-uff/autocomplete

ou

  yarn add @sti-uff/autocomplete

Exemplos de Uso Básico

O autocomplete pode ser usado de diversas formas.
Dentre elas, temos os seguintes exemplos:

Busca em Client Side

  <%= f.text_field :id_orgaopai, placeholder: f.object.orgaopai.desc_orgao %>
  import autoComplete from '@sti-uff/autocomplete'

  autoComplete({
    input: '#orgao_id_orgaopai',
    cache: true, // a função src será chamada somente uma vez
    searchKeys: ['desc_orgao', 'sigla'], // a primeira chave preencherá o placeholder ao selecionar um valor
    valueKey: 'id_orgao', // o valor desta chave será enviado ao servidor pelo formulário
    src: async() => {
      const response = await fetch('/api/orgaos')
      return response.json()
    }
  })

Busca em Server Side

  <input type="text" id="autocomplete-alunos">
  import autoComplete from '@sti-uff/autocomplete'

  interface Aluno {
    id: number
    nome: string
    matricula: string
    iduff: string
    idCurso: number
  }

  autoComplete({
    input: '#autocomplete-alunos',
    cache: false, // a função src será chamada em toda busca
    searchKeys: ['nome', 'matricula', 'iduff'], // a primeira chave preencherá o placeholder ao selecionar um valor
    valueKey: 'id', // o valor desta chave será enviado ao servidor pelo formulário
    src: async query => {
      const response = await fetch(`/api/alunos?q=${query}`) // passamos a query adiante ao server
      return response.json() as Aluno[]
    }
  })

Carregando um autoComplete que já possua um valor preenchido

Para trazer um autoComplete já preenchido, garanta que:

  • O value do input esteja preenchido com o atributo definido em valueKey
  • O placeholder do input esteja preenchido com o primeiro atributo definido em searchKeys

Estilização

Segue um html simplificado mostrando a estrutura do autocomplete:

<div class="autoComplete_wrapper">
  <input type="search">
  <ul class="autoComplete_results">
    <span>
      <p>Mostrando <strong>15</strong> de <strong>5360</strong> resultados</p>
      <button type="button" class="autoComplete_clear">Limpar Seleção</button>
    </span>
    <li role="option"><mark>Leonar</mark>do Gurgel</li>
    {...}
  </ul>
</div>
<input type="hidden">

Uso com tipagem

Essa bilioteca é completamente tipada para facilitar a utilização.
Portanto, é possível utilizá-la com TypeScript. Diversas interfaces estão disponíveis para importação

  import autoComplete, { AutoCompleteEvent } from '@sti-uff/autocomplete'

  interface Aluno {
    id: number
    nome: string
    matricula: string
    iduff: string
    idCurso: number
  }

  const input = document.getElementById('autocomplete-alunos') as HTMLInputElement

  autoComplete<Aluno>({
    input,
    cache: false,
    valueKey: 'id',
    searchKeys: ['nome', 'matricula', 'iduff'],
    src: async query => {
      const response = await fetch(`/api/alunos?q=${query}`)
      return response.json()
    }
  })

  input.addEventListener('select', (event: AutoCompleteEvent<Aluno>) => {
    console.log('nome do aluno: ', event.detail.selection.value.nome)
    atualizaLista()
  })

  function atualizaLista() {
    // ...
  }

Api Reference

Para todos as anotações abaixo, T é o tipo dos objetos retornados

export interface AutoCompleteOptions<T>

export interface AutoCompleteResult<T>

export class AutoComplete<T>