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

print-button

v1.0.4

Published

A print button web component that allows users to print specific content.

Readme

print-button

Web Component to print only a specific element instead of the whole page (which is what window.print() does by default).

CodePen Demo

Examples

Print a specific element on the page:

<print-button print-target=".element-to-print">
    Print
</print-button>

Print the whole page:

<print-button>Print</print-button>

Multiple print buttons on the same page:

<print-button print-target="#table-1">
    Print the 1st table
</print-button>
<table id="table-1">...</table>

<print-button print-target="#table-2">
    Print the 2nd table
</print-button>
<table id="table-2">...</table>

Just the icon:

<print-button print-target=".element-to-print"></print-button>

Attributes and Content

  • print-target attribute: CSS selector of the element to print. By default (if not provided), it prints the whole page except for the button itself.
  • disabled attribute: setting it on the custom element will disable the button inside.
  • Content: The text content of the button. If left empty, aria-label="Print" is added to the button (which will be a simple icon button).

Including the script

From a local file

Download the print-button.js file and include it in your project.

As a module:

<script type="module" src="print-button.js"></script>

Or as a non-module script tag:

<script defer src="print-button.js"></script>

From a CDN

You can also include the script from a CDN:

<script type="module" src="https://unpkg.com/print-button/print-button.js"></script>

Or, for non-module usage:

<script defer src="https://unpkg.com/print-button/print-button.js"></script>

How it works

The printOnly() method:

  • starts at the target,
  • adds a .dont-print class to its siblings,
  • moves to the parent and adds the class to its siblings,
  • and continues up the DOM recursively adding the .dont-print class to all of the "uncles" (non-ancestors) of the target element.

Other notes

The setTimeout(()=>{...}) wrapping the insides of the connectedCallback() lifecycle method allows the script to be used as a non-module script tag (in addition to the module option) from anywhere on the page, including the header, by adding a ~4ms delay which should be enough for the DOM to be ready. Increase the delay if needed (if your print-target takes longer to load), e.g:

connectedCallback() {
    setTimeout(() => {
        //...
    }, 150);
}

Credits