0.0.34 • Published 2 years ago

@vinctus/formula v0.0.34

Weekly downloads
-
License
ISC
Repository
-
Last release
2 years ago

formula

GitHub release (latest by date including pre-releases) GitHub (Pre-)Release Date GitHub last commit GitHub

formula is a parser and evaluator for math functions and formulae. It lets you declare variables which function as mutable inputs for expressions that can be re-computed as the inputs are changed.

Documentation

See https://vinctustech.github.io/formula/.

Usage

TypeScript

Install by typing

npm install @vinctus/formula

The typings are built-in. Use the following import in your code:

import { Formulae } from '@vinctus/formula'

Scala

Include the following in your project/plugins.sbt:

addSbtPlugin("com.codecommit" % "sbt-github-packages" % "0.5.3")

Include the following in your build.sbt:

resolvers += Resolver.githubPackages("vinctustech")

libraryDependencies += "io.github.vinctustech" %%% "formula" % "0.0.34"

Use the following import in your code:

import io.github.vinctustech.formula.Formulae

The obligatory "Hello World" example

Although formula is mainly for doing math, it can handle strings and also boolean values in a limited way. For example, you might want a certain text to vary depending on some condition. The following is a vanilla React 18 example.

import React, { FC, useState } from 'react'
import { createRoot } from 'react-dom/client'
import { Formulae } from '@vinctus/formula'

const f = new Formulae(`
    const positive = 'Hello World!'
    const negative = 'Goodbye World!'
    const min = 0
    const max = 100
    const initial = min
    
    var input = initial
    
    def radians = (input - min)/max*pi
    def output = cos(radians)
    def message = output >= 0 ? positive : negative
    `)

export const App: FC = () => {
  const [value, setValue] = useState<number>(f.get('initial'))

  f.set('input', () => value)

  return (
    <div style={{ marginTop: '20px', marginLeft: '20px' }}>
      <h3>{f.formula('message')}</h3>
      <input
        type="range"
        min={f.get('min')}
        max={f.get('max')}
        value={value}
        onChange={(e) => {
          setValue(Number(e.target.value))
        }}
      />
      <p>
        <code>
          cos({f.get('radians')}) = {f.formula('output')}
        </code>
      </p>
    </div>
  )
}

createRoot(document.getElementById('app')!).render(<App />)

License

ISC

0.0.34

2 years ago

0.0.33

2 years ago

0.0.32

2 years ago

0.0.31

2 years ago

0.0.30

2 years ago

0.0.28

2 years ago

0.0.27

2 years ago

0.0.26

2 years ago

0.0.25

2 years ago

0.0.24

2 years ago

0.0.23

2 years ago

0.0.22

2 years ago

0.0.21

2 years ago

0.0.20

2 years ago

0.0.19

2 years ago

0.0.18

2 years ago

0.0.17

2 years ago

0.0.16

2 years ago

0.0.14

2 years ago

0.0.13

2 years ago

0.0.12

2 years ago

0.0.11

2 years ago

0.0.10

2 years ago

0.0.9

2 years ago

0.0.8

2 years ago

0.0.7

2 years ago

0.0.6

2 years ago

0.0.5

2 years ago

0.0.4

2 years ago

0.0.3

2 years ago

0.0.2

2 years ago

0.0.1

2 years ago