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

eang-layout

v0.0.6

Published

Compiles CSS for EANG components using SASS and PostCSS and supports themes. The output is copied into a directory defined by the `dir` option. By default it creates the following structure.

Readme

ngn-layout

Compiles CSS for EANG components using SASS and PostCSS and supports themes. The output is copied into a directory defined by the dir option. By default it creates the following structure.

<dir>
    +-- src
        +-- assets
        |   +-- themes   <-- <destThemesDir>
        |       |-- default.css
        |       |-- <theme1>.css
        |       |-- <theme2>.css
        |       |-- ...
        |-- favicon.ico

Installation

npm install

Requires gulp

npm install -g gulp

Usage

Run with gulp [TASK] [OPTIONS...]

Just running gulp will execute the task you registered called default. If there is no default task gulp will error.

Tasks

| Task | Description | | ------------- |-------------| | default | executes [saas, copy] and watches for changes | | sass | Allows you to import many sass or scss files in a single import statement. Enables PostCSS plugins. Pushes into /dist. defaults to default| | copy | Copies in the current favicon and style sheet for the selected theme. defaults to default|

Options

| Option | Description | | ------------- |-------------| | --theme=[name] | name of the theme. defaults to default | | --dir=[folder name] | dir to write files to. defaults to ./dist | | --prod | if set, compiles prod output (minified, no sourcemaps, etc.) | | --url [url] | if set, sends css change event to deploy endpoint | | --watch | if set, watches for file changes and re-runs |

PostCSS Plugins

Currently used plugins which can be found in gulpfile.js

Fonts

  • font-magician - Font Magician is a PostCSS plugin that magically generates all of your @font-face rules. Never write a @font-face rule again. Just use the font and font-family properties as if they were magic.

  • Responsive-Font - Set responsive min/max font-sizes within viewport ranges... Adds a new declaration that requires 4 values.

Grids

  • lost-grid - LostGrid makes use of calc() to create stunning grids based on fractions you define without having to pass a lot of options.

SVG

  • SVGo - Optimise inline SVG with PostCSS.
  • Postcss-inline-svg - plugin to reference an SVG file and control its attributes with CSS syntax.

Enhanced CSS

  • Cssnano - A modular minifier, built on top of the PostCSS ecosystem.

  • Css-Next - PostCSS-cssnext is a PostCSS plugin that helps you to use the latest CSS syntax today. It transforms CSS specs into more compatible CSS so you don’t need to wait for browser support.

  • Rucksack - CSS Superpowers - Rucksack makes CSS development fun again, with features the language should have come with out of the box. It's built on PostCSS, it's modular, it doesn't add any bloat, and it's lightning fast.

Additional plugins can be found at postcss.parts.

Mixins

A mixin lets you make groups of CSS declarations that you want to reuse throughout your site. You can even pass in values to make your mixin more flexible. We use these to create pre-defined layouts that we reuse for components. A good example is the flight-block-row.

@mixin <name of mixin>(<variable>) {}

@mixin flex-block-row() {
//TODO - LostGrid mixin example

}

Components

UAL semantic html breakdown

Flight Search

ual-flight-search

This is the parent element of all the styles specific to this component. The ual-flight-search element is set to display:flex and flex-direction:column to set all of the children elements into a column.

The width is set to 385px and the background set to $UnitedBlue variable.

Two properties: color:white, and font-weight:700 applies to all of the nested elements in this style sheet, so the color of all children p and label elements will be white with a weight of 700.

ual-flight-search {
  ...
}

.form

The search inputs are all located in the form element. The form is set to display:flex and flex-direction:row. The form also has a padding:12px; to push other elements off the edge of the component.

The flex-wrap: wrap property makes it so that elements that overflow the width of the component will be placed on a new line. Without this, elements will overflow over the edge of the componenet. The position:relative is a rule that is used for absolute positioning used at a different portion of the application we revisit.

ual-flight-search {
      form {
         ...
      }
    }

.form-group {

The form-group is the parent class of the input fields for the search. We set the width at width:160px for the .form-group.

We also set the margin at 1rem on both left and bottom to give the different search input fields equal spaceing between each other.

input

The input fields have a width:100%. This forces the input field to stretch to fit the width of it's parent .form-group which is 160px. The fact that we set the input to 100% and no width on the label causes the element to be forced on top of the input since the width of the input takes up all available space.

Flight Block List

ul

As the name suggests, the flight blocks all exist in an unordered list.

li.ual

The li has a class .ual that we use to style the individual rows of the flight results. This has a list-style:none and a set width & height at 880px and 95px respectively.

ual-flight-block-row

The component renders as ual-flight-block-row which has the following properties:

display: flex to have all children element display flex.

font-size: 12px - to set all the children text elements at this font size.

position:relative - which allows for children elemtns positions absolutly to have a references.

height: 100% to fill the height of the parent li element.