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

@intoto-dev/bibliotheca-graph

v0.26.6

Published

Explain how to install etc

Downloads

313

Readme

<Graph /> component

Live Demo

Graph allows the user to visualize data in a graph format. It has multiple variations of how to visualise the data which is provided. It supports displaying tooltip information, line charts, bar charts, missing data, predictions, threshold ranges, and mean level.

Example Graph

Installation

Add Graph to your project with the following command:

npm i @intoto-dev/bibliotheca-graph

Basic Usage

There are two properties on the graph component which are mandatory. series is a list of lines or bars to be displayed and their options (more details below). t is the translation function to be used to translate messages and text used in the component, more information below.

import { Graph } from '@intoto-dev/bibliotheca-graph';

const series = []; // Array of series data
const t = translationLibrary; // Load in your preferred translation library

<Graph
  series={series}
  t={t}
/>

What are series?

Series is an array containing information about the data which needs to be plotted in the graph. Each item describes a line or bar, their name, and the data they contain.

This is an example of a series, which is very bare bones and has no options whatsoever. You can use this as a starting point for your own series. Refer to the live demos for some examples of how to make nicer looking series.

const series = [
  {
    key: 'identifier',
    data: [
      { value: 1, date: '2022-05-06T09:00:00.000Z' },
      { value: 2, date: '2022-05-06T09:01:00.000Z' },
      // ... etc
    ],
  },
];

Note that dates are in ISO 8601 format and can contain (and should contain) timezone information. This information is used to render the data points when they happened locally, and not relative to the user. For instance: a data point recorded at 12:00:00 in UTC+0:00 is also shown as 12:00:00 when the user viewing the data is in UTC+02:00. Graph handles the shifting in date for you.

Translation function

The function you provide to t is used to translate messages and text. It gets a string as the first argument and expects a string to be returned. It would look like so in TypeScript:

const t = (key: string) => 'Translated string';

A great library to use for this is i18next, or more specifically in React: react-i18next.

The most basic implementation (also found in Storybook examples) is:

const t = (key: string) => {
    switch (key) {
      case 'updated_at':
        return 'Updated {time} ago';
      case 'missing':
        return 'Missing data';
      case 'mean_level':
        return 'Mean-level';
      default:
        return 'Prediction';
    }
};

This includes all possible translation keys and an example of how {time} is used in updated_at.

API

React Component: <Graph />

import { Graph } from '@intoto-dev/bibliotheca-graph';

| Property | Description | Type | Default | |----------------------|------------------------------------------------------------------------------------------------------------------------|---------------------------|---------| | series * | List of series to be displayed in the graph. | GraphSeries[] | | | t * | Translation function. | (key: string) => string | | | height | Height of the graph in pixels. | number | 200 | | tooltip | Whether to show a tooltip when hovering over a point. | boolean | true | | stacked | Whether to display the series in a stacked manner. Default is merged into a single Y-axis (multiple lines in a graph). | boolean | false | | navigation | Whether to display the navigation bar. This allows zooming of large data sets. | boolean | false | | lang | Language to used for the graph. This is mainly for date formatting. | 'en' or 'nb' | en | | locale | The date-fns locale to use for date formatting. | Locale | en-US | | showCurrent | Draws a line at the current time and shows the current value of the first series at that point. | boolean | false | | lines | A list of extra lines to be drawn in the graph. Useful for mean-level and "now" (helpers available) | GraphLine[] | [] | | onTooltipValueChange | Callback for when the tooltip value changes. Used for external communication. | (value: number) => void | |

Type: GraphSeries

| Property | Description | Type | Default | |--------------------|-----------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|----------------------------| | key * | Unique identifier for the series. | string | | | data * | List of data points to be displayed in the series. | DataPoint[] | | | type | Type of series to be displayed. | 'line' or 'bar' | 'line' | | name | How the series is called and displayed in the legend. | string | | | color | Hexadecimal color code line / bar in the series. | string | | | threshold | The level (value) where the threshold is broken. | number | | | thresholdColor | Hexadecimal color code for the threshold line (normal will be other color). | string | | | thresholdDirection | Direction of where the threshold is calculated from. | 'up' or 'down' | 'up' | | domain | Domain of the series (min and max values). This automatically calculated from the data, but can be overwritten. | [number, number] | | | labelWidth | Width of the label in pixels on the Y-Axis. | number | 44 | | axisHeight | Height of the axis in pixels on the Y-Axis. Defaults to the graph's height. | number | | | barWidth | Width of the bar in a bar chart. This is automatically calculated, but can be overwritten. | number | | | barPadding | Padding between bars in a bar chart. This is automatically calculated, but can be overwritten. | number | | | barOpacity | Opacity of the bar in a bar chart. | number | 1 | | unit | Unit to be appended to the values in the series. | string | | | formatValue | Format function for the values in the series. | (value: number) => string or number | (value: number) => value | | curve | Curve to be used for drawing the line. A list of curves can be found in the visx/curves library. | CurveFactory | curveNatural | | area | Whether to draw a gradient filled area from the drawn line to the bottom. | boolean | false | | bottom | The value which is considered the bottom for the area. Automatically calculated as the lowest value in data. | number | | | tooltipExtra | Pass a React Component or Function Component which accepts point as a property to render extra content in the tooltip on hover. | FunctionComponent<{ point: DatePoint }> or ComponentClass<{ point: DatePoint }> | |

Type: DataPoint

| Property | Description | Type | Default | |------------|---------------------------------------------------------------------------|-----------|---------| | value * | Value of the data point | number | | | date * | Date of the data point (ISO 8601) | string | | | missing | Whether the data point needs to be marked as missing | boolean | false | | prediction | Whether the data point is a prediction | boolean | false | | minValue | When the data point is a prediction, this is the smallest predicted value | number | | | maxValue | When the data point is a prediction, this is the largest predicted value | number | |

Type: GraphLine

A GraphLine is either a HorizontalLine or a VerticalLine.

Type: HorizontalLine

| Property | Description | Type | Default | |-----------|---------------------------------------------------------------------------------------------------------|-----------|---------| | name * | Name of the line. Also the name which will be displayed in the legend | string | | | color * | The color of the line | string | | | value * | The value on the Y-axis where the line needs to be drawn | number | | | width | Stroke width of the line | number | 1 | | dasharray | Stroke dash array of the line | string | '5,3' | | opacity | Stroke opacity | number | 1 | | indicator | Whether to show the name of the line in the legend, also show a small indication arrow head on the axis | boolean | false |

Type: VerticalLine

Same properties as HorizontalLine but with value and date swapped.

| Property | Description | Type | Default | |-----------|---------------------------------------------------------|--------|---------| | date * | The date on the X-axis where the line needs to be drawn | Date | |

Helper: isMissing

import { isMissing } from '@intoto-dev/bibliotheca-graph';

Given a DataPoint object, returns whether the data point is considered missing or not. This is a type guard way of being sure of the MissingDataPoint interface.

function isMissing(dataPoint: DataPoint): boolean;

| Property | Description | Type | Default | |-------------|---------------------|-------------|---------| | dataPoint * | Data point to check | DataPoint | |

Helper: isPredicted

import { isPredicted } from '@intoto-dev/bibliotheca-graph';

Given a DataPoint object, returns whether the data point is a prediction or not. This is a type guard way of being sure of the PredictedDataPoint interface.

function isPredicted(dataPoint: DataPoint): boolean;

| Property | Description | Type | Default | |-------------|---------------------|-------------|---------| | dataPoint * | Data point to check | DataPoint | |

Helper: createYScale

import { createYScale } from '@intoto-dev/bibliotheca-graph';

Creates a d3 and visx compatible scale for the Y-Axis based and the series data and desired height.

function createYScale(series: GraphSeries, height: number, padding: number): ScaleLinear<number, number>;

| Property | Description | Type | Default | |----------|-------------------------------------------------------------|-----------------|---------| | series * | Series to create the Y-scale from | GraphSeries[] | | | height * | Height in pixels of the graph's Y-axis | number | | | padding | Padding in pixels added to the bottom and top of the Y-axis | number | 0 |

Helper: createXScale

import { createXScale } from '@intoto-dev/bibliotheca-graph';

Creates a d3 and visx compatible scale for the X-Axis based on provided dates and the desired width.

function createXScale(dates: GraphSeries, width: number): ScaleTime<number, number>;

| Property | Description | Type | Default | |----------|---------------------------------------------------------------|----------|---------| | dates * | Dates which make up the X-axis. Needs a minimum of two dates. | Date[] | | | width * | Width in pixels of the graph's X-axis | number | |

Helper: shiftDate

import { shiftDate } from '@intoto-dev/bibliotheca-graph';

Get the date from an ISO 8601 compatible date string and shifts the time so that it will display the same time as stated in the date string instead of the relative time (which is default in browsers).

function shiftDate(date: string, direction?: 1 | -1): string;

| Property | Description | Type | Default | |-----------|---------------------------------------------------------------------------------------------------------|-------------|---------| | date * | Date string in ISO 8601 format | string | | | direction | The direction the time is shifted to. Pass -1 to shift the opposite direction of the timezone offset. | 1 or -1 | 1 |

Helper: getTimezoneOffset

import { getTimezoneOffset } from '@intoto-dev/bibliotheca-graph';

Gets the timezone offset (same as Date.getTimezoneOffset()) given an ISO 8601 compatible date string. The result is the amount of minutes the offset is from UTC.

function getTimezoneOffset(date: string): number;

| Property | Description | Type | Default | |----------|--------------------------------|----------|---------| | date * | Date string in ISO 8601 format | string | |

Helper: createMeanLevelLine

import { createMeanLevelLine } from '@intoto-dev/bibliotheca-graph';

Creates a HorizontalLine which is a line which is drawn at the mean level of the series. Creates an object to use in the lines property.

function createMeanLevelLine(name: string, value: number): HorizontalLine;

| Property | Description | Type | Default | |----------|---------------------------------------------------------|----------|---------| | name * | Name of the line which will also be used in the legend. | string | | | value * | The mean level in mASL. | number | |

Helper: createMeanLevelLine

import { createNowLine } from '@intoto-dev/bibliotheca-graph';

Creates a VerticalLine which is a line which is drawn at the given date. Creates an object to use in the lines property.

function createNowLine(date: Date): VerticalLine;

| Property | Description | Type | Default | |----------|----------------------------------------------|----------|---------| | date * | The date where the 'now' line will be drawn. | Date | |

React Hook: useDimensions

import { useDimensions } from '@intoto-dev/bibliotheca-graph';

A React hook which returns a ref binding function and a Dimensions object containing { width: number; height: number }. Use the ref binding function on the element you want to know the dimensions of.

function SomeComponent() {
  const [ref, dimensions] = useDimensions();
  
  return (
    <html>
      <body>
        <main ref={ref}>
          My size is {dimensions.width} x {dimensions.height} 
        </main>
      </body>
    </html>
  );
}

React Hook: useSeriesDates

import { useSeriesDates } from '@intoto-dev/bibliotheca-graph';

A React hook which gets and sorts dates which are present in a list of series.

function useSeriesDates(series: GraphSeries[]): Date[];

| Property | Description | Type | Default | |----------|----------------------------------|-----------------|---------| | series * | Series to get all the dates from | GraphSeries[] | |