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

@quilted/react-auto-headings

v0.2.1

Published

A set of components for automatically incrementing heading levels based on React context. These components help you create an accessible document outline in a complex web application without the headache.

Downloads

99

Readme

@quilted/react-auto-headings

A set of components for automatically incrementing heading levels based on React context. These components help you create an accessible document outline in a complex web application without the headache.

Installation

$ yarn add @quilted/react-auto-headings

Usage

There are two key components exported by this library. AutoHeadingGroup creates a nested heading context, which increments all headings inside that component by one relative to their surrounding context. AutoHeading uses that context to render a the right heading element based on context.

import {AutoHeading, AutoHeadingGroup} from '@quilted/react-auto-headings';

export function App() {
  return (
    <AutoHeadingGroup>
      <AutoHeading>
        This will be an <code>h1</code>
      </AutoHeading>
      <AutoHeadingGroup>
        <AutoHeading>
          This will be an <code>h2</code>
        </AutoHeading>
        <p>Some content</p>
        <AutoHeading>
          This will be another <code>h2</code>
        </AutoHeading>
        <p>Some more content</p>
      </AutoHeadingGroup>
    </AutoHeadingGroup>
  );
}

The AutoHeading component will use a p element instead of a heading if it is not nested in an AutoHeadingGroup, or if you pass the accessibilityRole="presentation" prop.

import {AutoHeading, AutoHeadingGroup} from '@quilted/react-auto-headings';

export function App() {
  return (
    <>
      <AutoHeading>
        This will be a <code>p</code>
      </AutoHeading>
      <AutoHeadingGroup>
        <AutoHeading accessibilityRole="presentation">
          This will also be a <code>p</code>
        </AutoHeading>
      </AutoHeadingGroup>
    </>
  );
}

The AutoHeading also accepts all props accepted by a p or hx tag. This makes it easy to compose this component inside heading elements of a component library, as you can rely on these components to maintain document structure while passing all the properties you need to the rendered DOM elements.

import {AutoHeading, AutoHeadingGroup} from '@quilted/react-auto-headings';
import styles from './Heading.css';

export function Heading({children}) {
  return <AutoHeading className={styles.Heading}>{children}</AutoHeading>;
}

export function Subheading({children}) {
  return <AutoHeading className={styles.Subheading}>{children}</AutoHeading>;
}

export function App() {
  return (
    <AutoHeadingGroup>
      <Subheading>
        Subheading first is probably bad design-wise, but at least accessibility
        is maintained: this will be an <code>h1</code>!
      </Subheading>
      <AutoHeadingGroup>
        <Heading>
          This will look weird, but it’s an (accessible) <code>h2</code>
        </Heading>
      </AutoHeadingGroup>
    </AutoHeadingGroup>
  );
}

If you want to use the current heading level for your own purposes, you can access it with the useAutoHeadingLevel() hook. Keep in mind that this value can be undefined, as your component may not have any AutoHeadingGroup ancestor.

import {useAutoHeadingLevel} from '@quilted/react-auto-headings';

export function CustomHeading({children}) {
  const level = useAutoHeadingLevel();
  const Element = level ? `h${level}` : 'p';
  return <Element>{children}</Element>;
}

If you need the document outline to start at a different heading level, you can use the level prop on AutoHeadingGroup. If you try to set the heading level to a "higher" heading level (e.g., from heading level 2 to heading level 1), the component will throw an error.

import {AutoHeading, AutoHeadingGroup} from '@quilted/react-auto-headings';

export function App() {
  return (
    <AutoHeadingGroup level={3}>
      <AutoHeading>
        This will be an <code>h3</code>
      </AutoHeading>
    </AutoHeadingGroup>
  );
}