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 🙏

© 2025 – Pkg Stats / Ryan Hefner

@lit-labs/observers

v2.0.6

Published

A set of reactive controllers that facilitate using the platform observer objects.

Readme

@lit-labs/observers

Reactive controllers that make it easy to use the web platform observer classes with Lit.

Build Status Published on npm Join our Discord Mentioned in Awesome Lit

@lit-labs/observers includes reactive controllers for:

  • MutationObserver
  • ResizeObserver
  • IntersectionObserver
  • PerformanceObserver

[!WARNING]

This package is part of Lit Labs. It is published in order to get feedback on the design and may receive breaking changes or stop being supported.

Please read our Lit Labs documentation before using this library in production.

Give feedback: https://github.com/lit/lit/discussions/3355

Overview

The modern web platform provides a number of observer helpers that can be used to detect changes to which web applications may want to react. By managing one of these observers with a reactive controller, changes can be easily integrated into the Lit reactive update lifecycle. The controller can also help manage observer cleanup and rendering in response to changes.

Installation

From inside your project folder, run:

$ npm install @lit-labs/observers

Usage

IntersectionController

IntersectionController attaches a IntersectionObserver to the host and requests updates whenever the IntersectionObserver observes changes to the intersection state of the targets.

The controller can also compute and store an arbitrary value each time changes occur.

Import

import {IntersectionController} from '@lit-labs/observers/intersection-controller.js';

Constructor

constructor(
  host: ReactiveControllerHost & Element,
  {target, config, callback, skipInitial}: IntersectionControllerConfig<T>
)

Config

  • config: IntersectionObserverInit: Configuration object for the IntersectionObserver.
  • target?: Element | null: The element to observe. In addition to configuring the target here, the observe method can be called to observe additional targets. When not specified, the target defaults to the host. If set to null, no target is automatically observed. Only the configured target will be re-observed if the host connects again after unobserving via disconnection.
  • callback?: IntersectionValueCallback<T>: The callback used to process detected changes into a value stored in the controller's value property.
  • skipInitial?: boolean: By default the callback is called without changes when a target is observed. This is done to help manage initial state, but this setup step can be skipped by setting this to true.

Properties and Methods

  • value?: T: The result of processing the observer's changes via the callback function passed to the config.
  • observe(target: Element): Observe the target element. The controller's target is automatically observed when the host connects.
  • unobserve(target: Element): Unobserve the target element.
  • disconnect(): Disconnects the observer. This is done automatically when the host disconnects.

MutationController

MutationController attaches a MutationObserver to the host and requests updates whenever the MutationObserver observes changes to the DOM.

The controller can also compute and store an arbitrary value each time changes occur.

Example

import {MutationController} from '@lit-labs/observers/mutation-controller.js';
// ...

class MyElement extends LitElement {
  private _observer = new MutationController(this, {
    config: {attributes: true},
  });

  render() {
    return html` ${this._observer.value ? `Attributes set!` : ``} `;
  }
}

Import

import {MutationController} from '@lit-labs/observers/mutation-controller.js';

Constructor

new MutationController<T = unknown>(
  host: ReactiveControllerHost & Element,
  {target, config, callback, skipInitial}: MutationControllerConfig<T>
)

The type parameter <T> is the type of the value property and the return type of the callback option.

MutationControllerConfig

  • config: MutationObserverInit: Configuration object for the MutationObserver.
  • target?: Element | null: The element to observe. In addition to configuring the target here, the observe method can be called to observe additional targets. When not specified, the target defaults to the host. If set to null, no target is automatically observed. Only the configured target will be re-observed if the host connects again after unobserving via disconnection.
  • callback?: MutationValueCallback<T>: The callback used to process detected changes into a value stored in the controller's value property.
  • skipInitial?: boolean: By default the callback is called without changes when a target is observed. This is done to help manage initial state, but this setup step can be skipped by setting this to true.

Properties and Methods

  • value: The result of processing the observer's changes via the callback function passed to the config.
  • observe(target: Element): Observe the target element. The controller's target is automatically observed when the host connects.
  • disconnect(): Disconnects the observer. This is done automatically when the host disconnects.

PerformanceController

PerformanceController attaches a PerformanceObserver to the host and requests updates whenever the PerformanceObserver observes receives new performance metrics.

Import

import {PerformanceController} from '@lit-labs/observers/performance-controller.js';

Constructor

constructor(
  host: ReactiveControllerHost,
  {config, callback, skipInitial}: PerformanceControllerConfig<T>
)

PerformanceControllerConfig

  • config: PerformanceObserverInit: Configuration object for the MutationObserver.
  • callback?: PerformanceValueCallback<T>: The callback used to process detected changes into a value stored in the controller's value property.
  • skipInitial?: boolean: By default the callback is called without changes when a target is observed. This is done to help manage initial state, but this setup step can be skipped by setting this to true.

Properties and Methods

  • value: The result of processing the observer's changes via the callback function passed to the config.
  • observe(target: Element): Observe the target element. The controller's target is automatically observed when the host connects.
  • disconnect(): Disconnects the observer. This is done automatically when the host disconnects.

ResizeController

ResizeController attaches a ResizeObserver to the host and requests updates whenever the ResizeObserver detects size changes to its targets. The controller can also compute and store an arbitrary value each time changes occur.

Import

import {ResizeController} from '@lit-labs/observers/resize-controller.js';

Constructor

constructor(
  host: ReactiveControllerHost & Element,
  {target, config, callback, skipInitial}: ResizeControllerConfig<T>
)

ResizeControllerConfig

  • config?: ResizeObserverOptions: Configuration object for the ResizeController.
  • target?: Element | null: The element to observe. In addition to configuring the target here, the observe method can be called to observe additional targets. When not specified, the target defaults to the host. If set to null, no target is automatically observed. Only the configured target will be re-observed if the host connects again after unobserving via disconnection.
  • callback?: ResizeValueCallback<T>: The callback used to process detected changes into a value stored in the controller's value property.
  • skipInitial?: boolean: By default the callback is called without changes when a target is observed. This is done to help manage initial state, but this setup step can be skipped by setting this to true. }

Properties and Methods

  • value?: T: The result of processing the observer's changes via the callback function passed to the config.
  • observe(target: Element): Observe the target element. The controller's target is automatically observed when the host connects.
  • unobserve(target: Element): Unobserve the target element.
  • disconnect(): Disconnects the observer. This is done automatically when the host disconnects.

Contributing

Please see CONTRIBUTING.md.