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

@nycopportunity/pattern-navigation

v1.1.5

Published

The Navigation Pattern is a responsive nav that contains the main links for navigating different views and button elements for site features (such as translation).

Downloads

14

Readme

Navigation Pattern

Read more about Navigation Pattern in the readme file.

It is recommended to use a maximum three items such as the logo, translate button, and menu button. Additional navigation items should be displayed in a different pattern, such as the Menu Pattern.

Usage

Installation

$ npm install @nycopportunity/pattern-navigation

Styles

The Navigation Pattern includes three stylesheets. One that sets default design tokens and display properties using CSS Custom Properties, one that applies the tokens to the navigation CSS selectors, and one that adds some utilities for spacing (described below). The tokens can be used as is or overridden.

@forward '@nycopportunity/pattern-navigation/src/tokens.css';
@forward '@nycopportunity/pattern-navigation/src/navigation.css';
@forward '@nycopportunity/pattern-navigation/src/utilities.css';

Markup

Below is the minimum required markup for the Navigation Pattern. It includes some possible navigation items and menu button options. This markup uses an aria-label attribute to ensure the navigation is unique to screen readers as well as the role attribute to signify this element includes a major set of links for the website or application.

<!--{ @aria-label  Use "Primary Navigation" to identify the nav as a unique and major landmark }-->
<!--{ @class       Add "o-navigation-fixed" can be added to production layouts to fix the navigation to the bottom of the screen for the mobile viewport }-->
<!--{ @data-js     "navigation" is used as a JavaScript element selector. It is primarily used to set get the client height of the element to add padding to the bottom of the body. This prevents the mobile view of the element from covering the bottom of the page. }-->
<nav aria-label="Primary Navigation" class="o-navigation " data-js="navigation">
  <a class="o-navigation__home o-navigation__menu-item" href="#">
    <svg class="o-navigation__svg" fill="none" height="26" role="img" viewBox="0 0 456 152" width="78" xmlns="http://www.w3.org/2000/svg">
      <title>New York City Logo</title>
      <path d="M446.505 66.3803L456 57.0104V28.5052L427.495 0H332.505L304 28.5052V9.51562L294.505 0H256.505L247.01 9.51562V28.5052L228 47.5156L209.01 28.5052V9.51562L199.495 0H161.495L152 9.51562L142.505 0H104.505L95.0104 9.51562V47.5156L47.4948 0H9.49479L0 9.51562V142.505L9.49479 152H47.4948L57.0104 142.505V104.505L104.505 152H142.505L152 142.505V66.5052L199.495 114V142.505L209.01 152H247.01L256.505 142.505V114L304 66.5052V123.516L332.505 152H427.495L456 123.516V95.0104L446.505 85.4948H398.99V95.0104H361.01V57.0104H398.99V66.3803H446.505Z" fill="currentColor"></path>
      <path d="M449.233 6.41315C450.128 6.41315 450.899 6.32986 450.899 5.28876C450.899 4.41424 450.045 4.31013 449.337 4.31013H447.9V6.41315H449.233ZM447.921 10.4942H446.734V3.31068H449.462C451.19 3.31068 452.085 3.91452 452.085 5.37205C452.085 6.68383 451.294 7.20438 450.211 7.32931L452.231 10.4942H450.899L449.045 7.4126H447.942V10.4942H447.921ZM449.191 1.41589C446.38 1.41589 444.194 3.62301 444.194 6.78794C444.194 9.74466 446.11 12.16 449.191 12.16C451.981 12.16 454.168 9.9737 454.168 6.78794C454.168 3.62301 451.981 1.41589 449.191 1.41589ZM449.191 13.2844C445.464 13.2844 442.799 10.4942 442.799 6.78794C442.799 2.87342 445.756 0.291504 449.191 0.291504C452.585 0.291504 455.542 2.87342 455.542 6.78794C455.563 10.6816 452.606 13.2844 449.191 13.2844Z" fill="currentColor"></path>
    </svg>
  </a>
  <!--{ View navigation link item }-->
  <a class="o-navigation__item " href="#">Navigation</a>
  <!--{ Search site feature item }-->
  <button aria-controls="aria-c-search" aria-expanded="false" class="o-navigation__item" data-js="search">
    <svg class="o-navigation__menu-icon icon-ui">
      <use href="#feather-search"></use>
    </svg>
    <span class="o-navigation__menu-label">Search</span>
  </button>
  <!--{ Theme toggling site feature item }-->
  <button class="o-navigation__item" data-js="themes">
    <svg class="o-navigation__menu-icon icon-ui">
      <use data-js-themes="icon" href="#feather-moon"></use>
    </svg>
    <span class="sr-only">Toggle&nbsp;</span>
    <span class="o-navigation__menu-label" data-js-themes="label">Theme</span>
  </button>
  <!--{ Language translation site feature item }-->
  <label class="o-navigation__menu-item desktop:m-0" for="js-custom-language-selector">
    <svg class="o-navigation__menu-icon icon-ui">
      <use href="#icon-nyco-translate"></use>
    </svg>
    <div class="o-navigation__menu-label">
      <select id="js-custom-language-selector">
        <option disabled="true" selected="true" value="restore">Languages</option>
        <option value="es">Español</option>
        <option value="ru">Русский</option>
        <option value="ko">한국어</option>
        <option value="ar">العربية</option>
        <option value="ht">Kreyol</option>
        <option value="zh-CN">繁體中文</option>
        <option value="fr">Français</option>
        <option value="pl">polski</option>
        <option value="ur">اردو</option>
        <option value="bn">বাংলা</option>
      </select>
    </div>
  </label>
</nav>

Possible Menu Items

The navigation menu items to not have functionality embedded. Functionality can be added depending on the use case. The examples in the markup include the Menu Pattern and the Google Translate Element from the Patterns Scripts library.

Breakpoints

The table below describes the primary breakpoint values used in the token and main stylesheets.

Intended Device Type | Pixel Width ---------------------|- Tablet | 768px Desktop | 1112px

Spacers

It is recommended to add padding to the bottom of the body to prevent the mobile view of the Navigation Pattern from covering the bottom of the page. Additionally, a bottom utility class for elements that use sticky or fixed positioning to the bottom of the view may also need help appearing above the menu.

The utilites.css file includes the following utilties.

body, .o-navigation-spacing {
  padding-bottom: var(--o-navigation-height);
}

.o-navigation-spacing-bottom {
  bottom: var(--o-navigation-height);
}

@media screen and (min-width: 768px) {
  body, .o-navigation-spacing {
    padding-bottom: 0;
  }

  .o-navigation-spacing-bottom {
    bottom: 0;
  }
}

The --o-navigation-height property value for both the padding and bottom position should be the height of the menu which can vary depending on the customization of the menu. By default it's set to 10 times the --o-navigation-grid-base (8px) which is 80px. This property can be set via JavaScript and updated on the load() and resize() events.