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 🙏

© 2026 – Pkg Stats / Ryan Hefner

@adaptive-debounce/vue

v0.1.0

Published

Vue integration for adaptive-debounce.

Readme

@adaptive-debounce/vue

Install adaptive debounce once for a Vue application. Every component shares one learned typing profile, while each debounced callback keeps its own timer, arguments, promise, and cancellation.

Install

npm install [email protected] @adaptive-debounce/[email protected]

Set up once

import { createApp } from 'vue'
import { createAdaptiveDebouncePlugin } from '@adaptive-debounce/vue'
import App from './App.vue'

createApp(App)
  .use(createAdaptiveDebouncePlugin())
  .mount('#app')

Observation is enabled by default. Persistence is not. Enable same-origin localStorage explicitly:

app.use(createAdaptiveDebouncePlugin({ persistence: true }))

The built-in provider loads when the runtime starts and saves one second after learned timing changes. It stores timing metadata only, never input values.

Calling runtime.persistence.clear() resets learning without stopping observation. If startup is still loading a profile, that profile is discarded and observation starts when the load settles.

Use anywhere

import { useAdaptiveDebouncedFn, useAdaptiveDelay } from '@adaptive-debounce/vue'

const delayMs = useAdaptiveDelay() // Readonly ref; templates unwrap it automatically.
const saveDraft = useAdaptiveDebouncedFn(async (draft: Draft) => {
  await api.saveDraft(draft)
})

void saveDraft(draft)

Component teardown cancels that component's pending callback. It does not flush it. Other components keep their own pending work. Call and await saveDraft.flush() before navigation when a pending save must finish first.

Install the plugin above the router to keep one learner across client-side routes. Enable persistence to restore the timing profile after a hard reload; without it, learning lasts only for that application instance. Neither mode reads or stores input text.

SSR

Importing and installing the plugin is SSR-safe. Automatic startup waits until app.mount() returns, including functional roots, keeping the initial root hydration state deterministic even when startup awaits router readiness. Browser observation and opted-in localStorage loading then start once for that app. Set autoStart: false to own startup explicitly through runtime.start() after hydration. Each Vue application receives a separate runtime, so server requests do not share learned state. No module-global runtime is created.

For Nuxt, use @adaptive-debounce/nuxt instead of wiring client lifecycle hooks yourself.