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

tailwind-preset-nye

v1.1.13

Published

A preset that provides linear text and element scaling, grid classes and overlays to help you match Figma comps, and a super simple theming engine.

Downloads

319

Readme

Nye's Tailwind Config

A preset that provides linear text and element scaling, grid classes and overlays to help you match Figma comps, and a super simple theming engine.

🚨 This library is strongly opiniated to how we work, if you don't like it, make ya own

Table of Contents

Upcoming Features

  • [ ] Expand theming options to allow classes and ID's not just data attributes.
  • [ ] Expand grid overlay visual settings to include filled columns, not just outlines

Fluid Typography {#typography}

Example config

fontSize: {
  32: {
    size: 32,
    lineHeight: 1.25,
    letterSpacing: -0.022,
  },
  24: {
    size: 24,
    lineHeight: 1.4,
    letterSpacing: -0.022,
  },
  16: {
    size: 16,
    lineHeight: 1.5,
    letterSpacing: -0.022,
  },
  14: {
    size: 14,
    lineHeight: 1.42,
    letterSpacing: -0.022,
  },
},

Usage

|property|description|default|type| |:--------|:-------|:------|:-----| |size| Pixel value of your font size, will be automatically converted to rems. | null | number |lineHeight| Line height value, it will be a static px value, not a scaled rem value.| .9 |number |letterSpacing| Space between letters.| -.03em |number

Settings

⚙️ Place all settings in your Tailwind config under theme.fluidTypography

|property|description|default|type| |:--------|:-------|:------|:-----| |minFontSize| In each max() function, what size should text never fall beneath to keep things readable. | 12 | number |minScalingFontSize|If a text size is below the number provided here, it will be a static px value, not a scaled rem value.| 10|number

Grid

This plugin creates grid classes that let you match Figma documents very closely. You can independently set gutters, margins, sizes, and columns.

Usage

Place all settings in your Tailwind config under theme.gridOverlay

Grid Devices {#grid-devices}

🚨 WARNING: These devices settings add breakpoints, the screens property should not be used to override this. Use it to add others that do not require their own grid.

Speccing a grid for screen sizes. We recoMmend adding these exactly as-is from Figma into the format below:

|property|description|default|type| |:--------|:-------|:------|:-----| |size| Size of screen from Figma | null | number |columns| Number of columns in pixels | null|number |gutter| Width of gutter in pixels | null|number |margin| Width of margin in pixels | null|number

Max Scaling Width

maxScalingWidth: number will disable scaling at a given screen width. Used best to not let text become HUGE on widescreen monitors

Example Config

maxScalingWidth: 1920
devices: {
  sm: {
    columns: 8,
    size: 390,
    gutter: 10,
    margin: 20
  },
  md: {
    columns: 8,
    size: 768,
    gutter: 16,
    margin: 16
  },
  lg: {
    columns: 18,
    size: 1024,
    gutter: 10,
    margin: 25
  }
}

Grid Classes

Using these devices, we generate a bunch of classes for you to use these measurements in CSS. All standard tailwind classes are still available but can be prefixed with gutter, margin, or cols to use measurements like below:

/* Just a few examples, any Tailwind property can be used like this */
.margin-pr-1 {
  padding-right: calc(var(--margin) * 1);
}

.gutter-my-40 {
  margin-top: calc(var(--gutter) * 40);
  margin-bottom: calc(var(--gutter) * 40);
}

.cols-w-5 {
  width: calc((var(--column) * 5) + (var(--gutter) * 4));
}

Column-specific Rules

Columns use both var(--column) and var(--gutter) to calculate their width. The cols- prefix also allows suffixes of wide,wider,tight, and tighter to modify the gutter value like so:


/* Normal, unmodified class */
.cols-w-3 {
  width: calc((var(--column) * 3) + (var(--gutter) * 2));
}

/* +1 gutter */
.cols-w-3-wide {
  width: calc((var(--column) * 3) + (var(--gutter) * 3));
}

/* +2 gutters */
.cols-w-3-wider {
  width: calc((var(--column) * 3) + (var(--gutter) * 4));
}

/* -1 gutter */
.cols-w-3-tight {
  width: calc((var(--column) * 3) + (var(--gutter) * 1));
}

/* -2 gutters */
.cols-w-3-tighter {
  width: calc((var(--column) * 3) + (var(--gutter) * 0));
}

These suffixes come in handy when setting a width and you don't want to add gutter-pr-1, trust me.

Grid Utilities

The below css class is baked into our config, using it will lock an element when the max scaling width is reached.

.grid-contain {
  max-width: 'var(--max-scaling)',
  margin-left: 'auto',
  margin-right: 'auto'
}

Grid Overlay {#grid-overlay}

⚙️ These settings should be placed in theme.gridOverlay

An SVG background image on the ::before pseudoelement of the body that will show an overlay of your grid on the page. It has a display: var(--grid-visibility) property where var(--grid-visiblity) is defaulted to none, to turn on the grid we recommend using a keypress listener to toggle this variable value to block.

Example Config

gridOverlay: {
  color: 'blue',
  opacity: 1,
  width: .5
}

Settings

|property|description|default|type| |:--------|:-------|:------|:-----| |color| Color of grid lines, any hex, ockh, rgb, hsl, or css color is available here | blue | color |opacity| opacity of grid lines| 1|number |width| Width of grid lines| .5|pixels

Extras {#extras}

We have a couple other useful utilities baked into the config that we use frequently, enjoy:

Easing Values

We use preset easing values similar to js animation libraries:

// In
'quad-in': 'cubic-bezier(0.26, 0, 0.6, 0.2)',
'cubic-in': 'cubic-bezier(0.4, 0, 0.68, 0.06)',
'quart-in': 'cubic-bezier(0.52, 0, 0.74, 0)',
'quint-in': 'cubic-bezier(0.64, 0, 0.78, 0)',
'sine-in': 'cubic-bezier(0.32, 0, 0.6, 0.36)',
'expo-in': 'cubic-bezier(0.66, 0, 0.86, 0)',
'circ-in': 'cubic-bezier(0.54, 0, 1, 0.44)',
'back-in': 'cubic-bezier(0.6, -0.28, 0.735, 0.045)',
// Out
'quad-out': 'cubic-bezier(0.4, 0.8, 0.74, 1)',
'cubic-out': 'cubic-bezier(0.34, 1.02, 0.68, 1)',
'quart-out': 'cubic-bezier(0.26, 1.04, 0.54, 1)',
'quint-out': 'cubic-bezier(0.22, 1.1, 0.48, 1)',
'sine-out': 'cubic-bezier(0.4, 0.64, 0.68, 1)',
'expo-out': 'cubic-bezier(0.16, 1.08, 0.38, 0.98)',
'circ-out': 'cubic-bezier(0, 0.56, 0.46, 1)',
'back-out': 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',
// In Out
'quad-inout': 'cubic-bezier(0.48, 0.04, 0.52, 0.96)',
'cubic-inout': 'cubic-bezier(0.66, 0, 0.34, 1)',
'quart-inout': 'cubic-bezier(0.77, 0, 0.175, 1)',
'quint-inout': 'cubic-bezier(0.84, 0, 0.16, 1)',
'sine-inout': 'cubic-bezier(0.36, 0, 0.64, 1)',
'expo-inout': 'cubic-bezier(0.9, 0, 0.1, 1)',
'circ-inout': 'cubic-bezier(0.88, 0.14, 0.12, 0.86)',
'back-inout': 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',
bounce: 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',

Additional Variants

|variant prefix| css| |:---|:---| |not-first:| not:(:first-child)| |not-last:| not:(:last-child)|

-max Breakpoints

Any device you provide in your devices object will generate an @media (min-width: [size]) breakpoint AND a @media (max-width: [size]) breakpoint that can be used with [deviceName]:max.

Spacing

All spacing values get converted to rems automatically to keep scaling working.

Transition Duration

Values from 50 to 1000 are provided in increments of 50 ex: 50,100,150,200,...

Hover where supported

This is enabled by default in our config, it wraps all hover: variants in media (hover:hover) so that hover effects don't apply on touch devices. Pretty nifty.

  future: {
    hoverOnlyWhenSupported: true,
  },

Utilities

Just beacuse we use it all the time we have a flex-center class that expands to the following

.flex-center {
  display: flex;
  justify-content: center;
  align-items: center;
}

Z-Index

Having only 10,20,30... we think is dumb so we added classes for z-index that go from -50 to 50 and can be used normally z-38 without needing the arbitrary brackets.