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

lit-gauge

v0.1.13

Published

An experimental gauge Web component (lit-gauge)

Downloads

15

Readme

<lit-gauge> npm version License: MIT

Live demo and configuration / style editor

Since this is a Lit 3 web component, this will work inside any SPA framework. Read the React integration docs. Framework-agnostic web components are the future!

Installation

npm i lit-gauge

Usage Examples

Here are examples using declarative inline attributes. These correspond to the gauges displayed in the screenshot. Styling examples are near the bottom of the readme.

<script type="module">
  import {LitGauge} from 'lit-gauge';
</script>
<lit-gauge
  id="lg1" size="150"
  scaleValues="0,8,20,65,80,90,100" 
  scaleColors="#0909FB,#5D73CB,#375a7f,#444,#777,#999"
  ticks="5" minorTicks="5" 
  value="40" valuePrecision="1"
></lit-gauge>

<lit-gauge
  id="lg2" size="250"
  scaleColors="blue,aqua,green,yellow,red"
  fluidcolors="true" ticks="10" minorTicks="5" 
  value="60" label="AMPS"
  valuePrecision="1"
></lit-gauge>

<lit-gauge
  id="lg3" size="250" fluidcolors="true"
  scaleValues="25000,40000,55000,65000,70000,75000"
  scaleColors="#000,#ccc,#D85F03,#a00,#ff7b7b"
  ticks="thresholds" value="60" label="RPM"
  tickLabels="25k,35k,45k,55k,65k,75k"
  valuePrecision="0" setDynamicOuterColor="true"
></lit-gauge>

<lit-gauge
  id="lg4" size="200"
  scaleValues="0,5,20,65,80,90,100" 
  scaleColors="#0909FB,#6BA1FF,#375a7f,#444,#777,#999"
  plain="true" ticks="5" minorTicks="5" 
  value="40" valuePrecision="1"
></lit-gauge> 

Usage with single options object

<lit-gauge />
<script type='module'>
  import {LitGauge} from 'lit-gauge';

  let g = document.querySelector('lit-gauge');
  g.options = {
    scaleValues: [50, 60, 70, 115, 130, 150],
    scaleColors: ['midnightblue','blue','green','yellow','rgba(255,0,0,1)'],
    ticks: 10, minorTicks: 5,
    fluidColors: false, plain: true, 
    valuePrecision: 1
  }
</script>

Attributes

  • size: Number - Sets the height and width of the component. This component is square. It starts to look bad below 150px.
  • scaleValues: String - (scaleValues="0,10,50,90,100") Sets the value ranges that will correspond with the color thresholds.
  • scaleColors: String - (scaleColors="#333,green,yellow,red") Sets the colors that fill each value range. Must be exactly one value less than the scaleValues attrib. If you set a scaleValue=0,10,20,30 then you have created 3 ranges (thresholds) that require a color. scaleColors=#333,#888,#ccc would set 0-10 to #333, 10-20 to #888, and 20-30 to #ccc. Use any valid css color string for each value.
  • fluidColors: Boolean - Shows a fluid gradient instead of hard stops for the color ranges.
  • ticks: String - (ticks="10") Accepts either a numeric divisor (represents the total count of ranges created by the tick marks), or a csv value string representing custom value positions to place ticks (minor ticks will be disabled). Optionally you can enter ticks="thresholds" to place ticks on the scaleValues attrib values. The tick mark total will be one greater than the value you enter since the ranges are bounded on both sizes by marks.
  • minorTicks: Number - (minorTicks="5") Available only when ticks is a numeric value. Subdivides each tick range by the specified value.
  • tickLabels: String - (tickLabels="0%,20%,50%,100%")Override the generated numeric tick values with a CSV string.
  • value: Number - (value=runtimeValue) The runtime value that positions the needle and sets the runtime color value.
  • label: String - (label="Volts") The runtime label to display below the value. If unspecified, the value moves upwards. This should be a short, succinct label.
  • plain: Boolean - Overrides the lighted glassy appearance. Uses a flat look. You can also do this with the css variables shown below.
  • valuePrecision Int - For readability the label displays value.toFixed(decimalPrecision). If you have a suggestion for large numbers, please open an issue and share!

Styling

CSS vars to set custom colors and appearance. Below are the default values. Use the online editor to generate your own theme.

<style>
lit-gauge{
  --font-fam: Roboto, -apple-system, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif;
  --outer-color:#444;//this is the outermost background ring
  /*outer-lighting is the lighting effect on the outer band. Uses a conic semi-opaque gradient overlay.*/
  --outer-lighting-effect:conic-gradient(from 180deg at 50.0% 50.0%,
    rgba(0,0,0,0) 98.00deg,
    rgba(255,255,255,0.3) 103.00deg,
    rgba(255,255,255,0.5) 180.00deg,
    rgba(255,255,255,0.3) 257.00deg,
    rgba(0,0,0,0) 265.00deg
  );
  
  /* styles for the label at the bottom center*/
  --label-bg: #000; /*  the label that shows the current value inside*/
  --label-color:#fff; /*  font color of the label*/
  --label-min-width:3em; /*  customize to your value so the container does not jiggle when updating the value*/
  
  /*  ticks/label styles*/
  --tick-color:#fff; /* the tick line color*/
  --tick-label-color:#fff;/*  the outer numeric tick label colors*/
  --tick-label-shadow:0 1px 1px black;/* shadow to apply to the tick-labels to enhance visibility*/
  
  /* dial styles*/
  --dial-background:rgb(22,22,22);/* the main inner color*/
  --dial-gradient:none;/* you can play with gradients to create your own lighting effect*/
  --dial-shadow: 0 0 1em .25em rgba(122,122,122,.8), inset 0 0 2em #bbb;/* used to enhance the space between the color thresholds.*/
  --dial-border-width: 1px;/* the dial border is where the outer ring meets the color threshold bands*/
  --dial-border-color:#111;
  --hand-color: #ddd; /* the needle color*/
}
</style>

Styling examples

These are the styles used to create the example screenshot in sequence

<link rel="stylesheet"
      href="https://fonts.googleapis.com/css2?family=Mina&family=Jost&family=Outfit&family=Kalam">
<style>    
    #lg1{
      --outer-color: #000;
      --hand-color: white;
      --dial-background: black;
    }
    #lg2{
      --font-fam: Jost;
      --hand-color: #ccc;
      --dial-background: black;
      --dial-shadow:none;
    }
    #lg3{
      --font-fam: Mina;
      --outer-color: #400;
      --dial-background: black;
      --dial-gradient: radial-gradient(200px at 50.0% 10.0%,
        rgba(55, 55, 55, 1) 15%,
        rgba(0, 0, 0, 1) 70%,
        rgba(0, 0, 0, 0) 100%
      );
      --hand-color: #B4080E;
      --dial-border-width: 2px;
      --tick-label-shadow: 0 1px 2px black;
      --dial-shadow: inset 0 -10px 30px #444;
    }
    #lg4{
      --font-fam: Kalam;
      --outer-color: transparent;
      --label-color: black;
      --dial-background: #fff;
      --dial-shadow: none;
      --tick-color: black;
      --tick-label-color: white;
      --hand-color: #333;
      --tick-label-shadow: 0 1px 1px black;
      --label-bg: #ccc;
    }
  </style>

Run local

Uses vite. Will run on node 16+ - but will complain about compatibility if you are stuck on node 16 like me. Ignore this. It's fine.

git clone https://github.com/thewebkid/lit-gauge.git
cd ./lit-gauge
npm i
npm dev