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

@hydro-g/graph

v0.3.13

Published

``` npm i @hydro-g/graph ```

Downloads

101

Readme

Graph

Установка

npm i @hydro-g/graph

Создание

import { GraphElement, defineGraph } from '@hydro-g/graph'

defineGraph()

const graphElement = new GraphElement({
  // 'x' | 'y' | 'xy' | 'none'
  autoGrid: 'xy',

  // Названия осей
  xName: 'Q, м3/c',
  yName: 'H, см',

  // Названия осей в подсказке движения курсора
  tooltipXName: 'Q',
  tooltipYName: 'H',

  // Ручная настройка сетки
  xValueMin: 0,
  yValueMin: 0,
  xValueMax: 100,
  yValueMax: 100,
  columns: 10,
  rows: 10,
  maxMult: 1.25,
  roundingX: 100,
  roundingY: 100,

  // 'left' | 'right' | 'none'
  yAxisSide: 'left',
  // 'bottom' | 'top' | 'none'
  xAxisSide: 'bottom',

  // Ручные отступы вокруг сетки
  paddingTop: 0,
  paddingRight: 0,
  paddingBottom: 0,
  paddingLeft: 0,
})

document.body.appendChild(graphElement)

Свойства

Название текущей редактируемой кривой безье

graphElement.editedBezierCurveName

Название текущей редактируемой косинусоиды

graphElement.editedCosineCurveName

Методы

Создание статичной кривой безье

graphElement.createStaticBezierCurve('name', {
  // Данные точек
  data: [
    {
      x: 50,
      y: 50,
    },
    {
      x: 100,
      y: 100,
    },
  ],

  // Цвет кривой
  color: 'black',

  // Цвет выделения кривой
  selectColor: 'black',

  // Размер поинта
  pointSize: 0.005,

  // Если указано, разбивает линию на сегменты
  lineDash: 5,
})

Создание изменяемой кривой безье

graphElement.createEditableBezierCurve('name', {
  data: [
    {
      x: 50,
      y: 50,
    },
    {
      x: 100,
      y: 100,
    },
  ],

  // Цвет кривой
  color: 'black',

  // Цвет выделения кривой
  selectColor: 'black',

  // Размер поинта
  pointSize: 0.005,

  // Если указано, разбивает линию на сегменты
  lineDash: 5,

  // Красит кривую в этот цвет если она построена правильно
  goodColor: 'green',

  // Красит кривую в этот цвет если она построена неверно
  badColor: 'red',

  // Показывается ли редактируемая кривая в том положении в котором был включен режим редактирвания
  previousVisible: true,
})

Включение режима редактирования для кривой безье

graphElement.enableBezierCurveEditing('name')

Обновления данных кривой безье

graphElement.updateBezierCurve(
  'name',

  // Новые точки
  [
    {
      x: 60,
      y: 60,
    },
    {
      x: 120,
      y: 120,
    },
  ]
)

Применение изменённых значений кривой безье

graphElement.applyBezierCurveChanges()

Выключение режима редактирования кривой безье

graphElement.disableBezierCurveEditing()

Скрытие кривой безье

graphElement.hideBezierCurve('name')

Открытие кривой безье

graphElement.showBezierCurve('name')

Получение текущих значений кривой безье

graphElement.getBezierCurveData('name')

Удаление кривой безье

graphElement.deleteBezierCurve('name')

Проверка на существование кривой безье

graphElement.hasBezierCurve('name')

Получение всех названий кривых безье

graphElement.getAllBezierCurvesNames()

Включение выделения кривой безье

// selectColor должен отличаться от color
graphElement.selectBezierCurve('name')

Выключение выделения кривой безье

// selectColor должен отличаться от color
graphElement.unselectBezierCurve('name')

Переименование кривой безье

graphElement.renameBezierCurve('oldName', 'newName`)

Создание косинусоиды

graphElement.createCosineCurve('name', {
  // 'symmetrical-left' | 'symmetrical-right' | 'two-branches'
  type: 'two-branches',

  // Цвет кривой
  color: 'black',

  // Цвет выделения кривой
  selectColor: 'black',

  // Размер поинта
  pointSize: 0.005,

  // Если указано, разбивает линию на сегменты
  lineDash: undefined,
})

Удаление косинусоиды

graphElement.deleteCosineCurve('name')

Включение режима редактирования косинусоиды

graphElement.enableCosineCurveEditing('name')

Выключение режима редактирования косинусоиды

graphElement.disableCosineCurveEditing()

Скрытие косинусоиды

graphElement.hideCosineCurve('name')

Открытие косинусоиды

graphElement.showCosineCurve('name')

Включение выделения косинусоиды

// selectColor должен отличаться от color
graphElement.selectCosineCurve('string')

Выключение выделения косинусоиды

graphElement.unselectCosineCurve('name')

Получение текущих значений косинусоиды

graphElement.getCosineCurveData(name)

Переименование косинусоиды

graphElement.renameCosineCurve('oldName', 'newName')

Проверка на существование косинусоиды

graphElement.hasCosineCurve('name')

Получение всех названий косинусоид

graphElement.getAllCosineCurvesNames()

Создание облака точек

graphElement.createPointCloud(
  'name',
  {
    // Массив точек.
    // Если для точки указано свойство info,
    // то при наведении на неё будет показываться подсказка
    // !Значениями x и y могут быть Date
    data: [
      { x: 20, y: 20, info: ['x: 20', 'y: 20'] },
      { x: 40, y: 50 },
      { x: 80, y: 80 },
    ],

    // Форма поинта. 'circle' | 'square' | 'triangle' | 'star'
    pointShapeType: 'circle',

    // Цвет закрашивая поинта
    pointFill: 'lightblue',

    // Цвет обводки поинта
    pointStroke: 'red',

    // Размер поинта
    pointSize: 0.005,
  },
  // Участвует ли облако в поиске ближайшей точки при добавлении ограничений
  false
)

Обновление данных облака точек

graphElement.updatePointCloud('name', [
  {
    x: 20,
    y: 20,
  },
  {
    x: 50,
    y: 50,
  },
])

Скрытие облака точек

graphElement.hidePointCloud('name')

Открытие облака точек

graphElement.showPointCloud('name')

Удаление облака точек

graphElement.deletePointCloud('name')

Проверка на существование облака точек

graphElement.hasPointCloud('name')

Получение всех названий облаков точек

graphElement.getAllPointCloudsNames()

Включение возможности добавлять ограничения

graphElement.enableLimits()

Выключение возможности добавлять ограничения

graphElement.disableLimits()

Удаление все ограничения

graphElement.clearLimits()

Скрытие всех ограничей(не отрисывываются на канвасе)

graphElement.hideLimits()

Открытие всех ограничей

graphElement.showLimits()

Создание интервалов

graphElement.createRanges('name', {
  data: [
    {
      // Дата стартовой линии
      from: new Date('2021-04-15'),

      // Дата конечной линии
      to: new Date('2021-06-15'),

      // Если указано, показывается при наведении
      fromInfo: ['2021-04-15'],

      // Если указано, показывается при наведении
      toInfo: ['2021-06-15'],
    },
    {
      ...
    },
    {
      ...
    },
  ],

  // Цвет между промежутками при наведении
  fillColor: '#4c6ef5',

  // Цвет стартовой линии
  fromColor: '#37A31D',

  // Цвет конечной линии
  toColor: '#9F6205',
})

Удаление интервалов

graphElement.removeRanges('name')

Обновление интервалов

graphElement.updateRanges('name', [
  {
    // Дата стартовой линии
    from: new Date('2021-04-15'),

    // Дата конечной линии
    to: new Date('2021-06-15'),

    // Если указано, показывается при наведении
    fromInfo: ['2021-04-15'],

    // Если указано, показывается при наведении
    toInfo: ['2021-06-15'],
  },
  {
    ...
  },
  {
    ...
  },
])

Скрытие интервалов

graphElement.hideRanges('name')

Открытие интервалов

graphElement.showRanges('name')

Проверка на существование интервалов

graphElement.hasRanges('name')

Получение всех названий интервалов

graphElement.getAllRangesNames()

Events

Подписка на изменения точек кривой безье

const curveDataChangeListener = ((event: CurveDataChangeEvent) => {
  console.log(event.detail.curveName, event.detail.data)
}) as EventListener

graphElement.addEventListener('curve-data-change', curveDataChangeListener)

Подписка на изменения точек косинусоиды

Тоже самое что и у кривой безье, но нужно сдвинуть данные по оси X на один день

import { shiftDataByOneDay } from '@hydro-g/graph'

const curveDataChangeListener = ((event: CurveDataChangeEvent) => {
  console.log(event.detail.curveName, shiftDataByOneDay(event.detail.data))
}) as EventListener

graphElement.addEventListener('curve-data-change', curveDataChangeListener)

Подписка на изменения ограничений

const limitsDataChangeListener = ((event: LimitsDataChangeEvent) => {
  console.log(event.detail.data)
}) as EventListener

graphElement.addEventListener('limits-data-change', limitsDataChangeListener)

Разное

Размер шрифта и семейство можно задать в css для x-graph

x-graph {
  width: 100%;
  height: 100%;
  font-size: 1vmin;
  font-family: sans-serif;
}

Создание таймлайна

import { getTimelineAxisParts, GraphElement } from '@hydro-g/graph'

const timelineAxisParts = getTimelineAxisParts(
  // Нужен ли январь или нет
  false
)

const graphElement = new GraphElement({
  ...timelineAxisParts.graphParameters,
  yName: 'y',
})

graphElement._isDrawXMark = timelineAxisParts.isDrawXMark
graphElement._getXMarkValue = timelineAxisParts.getXMarkValue
graphElement._getXPointerValue = timelineAxisParts.getXPointerValue