diff --git a/README.md b/README.md index 294535cf2f..cf1128a675 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ > the composer of. Geared towards versatility, not any specific type of music." > — [@loganpowell](https://twitter.com/logantpowell/status/1186334119812304901) via Twitter -Mono-repository for 137+ thi.ng TypeScript/ES6 projects, a wide +Mono-repository for 138+ thi.ng TypeScript/ES6 projects, a wide collection of largely data transformation oriented packages and building blocks for: @@ -24,6 +24,13 @@ blocks for: - Reactive programming, stream / transducer based dataflow graphs / pipelines - WebWorker workflow abstractions +- 2D geometry generation, shape primitives, processing, conversion & + visualization +- Canvas abstraction & SVG conversion +- Semi-declarative WebGL 1/2 abstraction layer +- DSL for shader functions defined in TypeScript and cross-compilation + to GLSL, JS, VEX etc. +- Date/time iterators, formatters - Data structures & data transformations for wide range of use cases (list, sets, maps, joins, spatial indexing) - Immutable data handling, state containers, transacted state updates, @@ -34,17 +41,11 @@ blocks for: - PEG-style parser combinators, FSM primitives - Forth-style pointfree DSL for functional composition - S-expression parser & runtime infrastructure for custom DSL creation -- DSL for shader functions defined in TypeScript and cross-compilation - to GLSL, JS, VEX etc. -- 2D geometry generation, shape primitives, processing, conversion & - visualization - Multi-format pixel buffers, conversions, Porter-Duff alpha-blending operators - Color space/format conversions, matrix based color manipulation, cosine gradients -- Canvas abstraction & SVG conversion - Canvas-based Immediate mode GUI components -- Declarative WebGL 1/2 abstraction layer - Low-level tooling for binary data, shared memory/WASM/WebGL interop - etc. (see package overview below) @@ -113,13 +114,10 @@ fairly detailed overview for contributors here: ## Projects -### New / unreleased packages in development + ### Fundamentals @@ -131,6 +129,7 @@ feature or `develop` branches) | [`@thi.ng/colored-noise`](./packages/colored-noise) | [![version](https://img.shields.io/npm/v/@thi.ng/colored-noise.svg)](https://www.npmjs.com/package/@thi.ng/colored-noise) | [changelog](./packages/colored-noise/CHANGELOG.md) | 1D colored noise generators | | [`@thi.ng/compare`](./packages/compare) | [![version](https://img.shields.io/npm/v/@thi.ng/compare.svg)](https://www.npmjs.com/package/@thi.ng/compare) | [changelog](./packages/compare/CHANGELOG.md) | Comparators | | [`@thi.ng/compose`](./packages/compose) | [![version](https://img.shields.io/npm/v/@thi.ng/compose.svg)](https://www.npmjs.com/package/@thi.ng/compose) | [changelog](./packages/compose/CHANGELOG.md) | Functional composition helpers | +| [`@thi.ng/date`](./packages/date) | [![version](https://img.shields.io/npm/v/@thi.ng/date.svg)](https://www.npmjs.com/package/@thi.ng/date) | [changelog](./packages/date/CHANGELOG.md) | Date/time iterators, formatters, rounding | | [`@thi.ng/defmulti`](./packages/defmulti) | [![version](https://img.shields.io/npm/v/@thi.ng/defmulti.svg)](https://www.npmjs.com/package/@thi.ng/defmulti) | [changelog](./packages/defmulti/CHANGELOG.md) | Dynamic multiple dispatch | | [`@thi.ng/dsp`](./packages/dsp) | [![version](https://img.shields.io/npm/v/@thi.ng/dsp.svg)](https://www.npmjs.com/package/@thi.ng/dsp) | [changelog](./packages/dsp/CHANGELOG.md) | DSP utils, oscillators | | [`@thi.ng/dual-algebra`](./packages/dual-algebra) | [![version](https://img.shields.io/npm/v/@thi.ng/dual-algebra.svg)](https://www.npmjs.com/package/@thi.ng/dual-algebra) | [changelog](./packages/dual-algebra/CHANGELOG.md) | Dual number algebra / automatic differentiation | @@ -191,6 +190,7 @@ feature or `develop` branches) | [`@thi.ng/dcons`](./packages/dcons) | [![version](https://img.shields.io/npm/v/@thi.ng/dcons.svg)](https://www.npmjs.com/package/@thi.ng/dcons) | [changelog](./packages/dcons/CHANGELOG.md) | Doubly-linked list | | [`@thi.ng/diff`](./packages/diff) | [![version](https://img.shields.io/npm/v/@thi.ng/diff.svg)](https://www.npmjs.com/package/@thi.ng/diff) | [changelog](./packages/diff/CHANGELOG.md) | Array & object diffing | | [`@thi.ng/dgraph`](./packages/dgraph) | [![version](https://img.shields.io/npm/v/@thi.ng/dgraph.svg)](https://www.npmjs.com/package/@thi.ng/dgraph) | [changelog](./packages/dgraph/CHANGELOG.md) | Dependency graph | +| [`@thi.ng/egf`](./packages/egf) | [![version](https://img.shields.io/npm/v/@thi.ng/egf.svg)](https://www.npmjs.com/package/@thi.ng/egf) | [changelog](./packages/egf/CHANGELOG.md) | Extensible Graph Format | | [`@thi.ng/gp`](./packages/gp) | [![version](https://img.shields.io/npm/v/@thi.ng/gp.svg)](https://www.npmjs.com/package/@thi.ng/gp) | [changelog](./packages/gp/CHANGELOG.md) | Genetic programming helpers / AST gen | | [`@thi.ng/heaps`](./packages/heaps) | [![version](https://img.shields.io/npm/v/@thi.ng/heaps.svg)](https://www.npmjs.com/package/@thi.ng/heaps) | [changelog](./packages/heaps/CHANGELOG.md) | Binary & d-ary heap impls | | [`@thi.ng/idgen`](./packages/idgen) | [![version](https://img.shields.io/npm/v/@thi.ng/idgen.svg)](https://www.npmjs.com/package/@thi.ng/idgen) | [changelog](./packages/idgen/CHANGELOG.md) | Versioned ID generation / free-list | @@ -229,38 +229,39 @@ feature or `develop` branches) ### Geometry & visualization -| Project | Version | Changelog | Description | -|---------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|------------------------------------------| -| [`@thi.ng/color`](./packages/color) | [![version](https://img.shields.io/npm/v/@thi.ng/color.svg)](https://www.npmjs.com/package/@thi.ng/color) | [changelog](./packages/color/CHANGELOG.md) | Color conversions, gradients | -| [`@thi.ng/dgraph-dot`](./packages/dgraph-dot) | [![version](https://img.shields.io/npm/v/@thi.ng/dgraph-dot.svg)](https://www.npmjs.com/package/@thi.ng/dgraph-dot) | [changelog](./packages/dgraph-dot/CHANGELOG.md) | Dependency graph -> Graphviz | -| [`@thi.ng/dot`](./packages/dot) | [![version](https://img.shields.io/npm/v/@thi.ng/dot.svg)](https://www.npmjs.com/package/@thi.ng/dot) | [changelog](./packages/dot/CHANGELOG.md) | Graphviz DOM & export | -| [`@thi.ng/geom`](./packages/geom) | [![version](https://img.shields.io/npm/v/@thi.ng/geom.svg)](https://www.npmjs.com/package/@thi.ng/geom) | [changelog](./packages/geom/CHANGELOG.md) | 2D only geometry types & ops | -| [`@thi.ng/geom-accel`](./packages/geom-accel) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-accel.svg)](https://www.npmjs.com/package/@thi.ng/geom-accel) | [changelog](./packages/geom-accel/CHANGELOG.md) | Spatial indexing data structures | -| [`@thi.ng/geom-api`](./packages/geom-api) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-api.svg)](https://www.npmjs.com/package/@thi.ng/geom-api) | [changelog](./packages/geom-api/CHANGELOG.md) | Shared types & interfaces | -| [`@thi.ng/geom-arc`](./packages/geom-arc) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-arc.svg)](https://www.npmjs.com/package/@thi.ng/geom-arc) | [changelog](./packages/geom-arc/CHANGELOG.md) | 2D elliptic arc utils | -| [`@thi.ng/geom-clip-line`](./packages/geom-clip-line) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-clip-line.svg)](https://www.npmjs.com/package/@thi.ng/geom-clip-line) | [changelog](./packages/geom-clip-line/CHANGELOG.md) | 2D line clipping | -| [`@thi.ng/geom-clip-poly`](./packages/geom-clip-poly) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-clip-poly.svg)](https://www.npmjs.com/package/@thi.ng/geom-clip-poly) | [changelog](./packages/geom-clip-poly/CHANGELOG.md) | 2D convex polygon clipping | -| [`@thi.ng/geom-closest-point`](./packages/geom-closest-point) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-closest-point.svg)](https://www.npmjs.com/package/@thi.ng/geom-closest-point) | [changelog](./packages/geom-closest-point/CHANGELOG.md) | Closest point helpers | -| [`@thi.ng/geom-fuzz`](./packages/geom-fuzz) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-fuzz.svg)](https://www.npmjs.com/package/@thi.ng/geom-fuzz) | [changelog](./packages/geom-fuzz/CHANGELOG.md) | Fuzzy 2D shape drawing / filling | -| [`@thi.ng/geom-hull`](./packages/geom-hull) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-hull.svg)](https://www.npmjs.com/package/@thi.ng/geom-hull) | [changelog](./packages/geom-hull/CHANGELOG.md) | 2D convex hull (Graham scan) | -| [`@thi.ng/geom-io-obj`](./packages/geom-io-obj) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-io-obj.svg)](https://www.npmjs.com/package/@thi.ng/geom-io-obj) | [changelog](./packages/geom-io-obj/CHANGELOG.md) | Wavefront OBJ model parser | -| [`@thi.ng/geom-isec`](./packages/geom-isec) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-isec.svg)](https://www.npmjs.com/package/@thi.ng/geom-isec) | [changelog](./packages/geom-isec/CHANGELOG.md) | Point & shape intersection tests | -| [`@thi.ng/geom-isoline`](./packages/geom-isoline) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-isoline.svg)](https://www.npmjs.com/package/@thi.ng/geom-isoline) | [changelog](./packages/geom-isoline/CHANGELOG.md) | 2D contour line extraction | -| [`@thi.ng/geom-poly-utils`](./packages/geom-poly-utils) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-poly-utils.svg)](https://www.npmjs.com/package/@thi.ng/geom-poly-utils) | [changelog](./packages/geom-poly-utils/CHANGELOG.md) | 2D polygon helpers | -| [`@thi.ng/geom-resample`](./packages/geom-resample) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-resample.svg)](https://www.npmjs.com/package/@thi.ng/geom-resample) | [changelog](./packages/geom-resample/CHANGELOG.md) | nD polyline / curve resampling | -| [`@thi.ng/geom-splines`](./packages/geom-splines) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-splines.svg)](https://www.npmjs.com/package/@thi.ng/geom-splines) | [changelog](./packages/geom-splines/CHANGELOG.md) | nD cubic / quadratic spline ops | -| [`@thi.ng/geom-subdiv-curve`](./packages/geom-subdiv-curve) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-subdiv-curve.svg)](https://www.npmjs.com/package/@thi.ng/geom-subdiv-curve) | [changelog](./packages/geom-subdiv-curve/CHANGELOG.md) | nD iterative subdivision curves | -| [`@thi.ng/geom-tessellate`](./packages/geom-tessellate) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-tessellate.svg)](https://www.npmjs.com/package/@thi.ng/geom-tessellate) | [changelog](./packages/geom-tessellate/CHANGELOG.md) | nD convex polygon tessellators | -| [`@thi.ng/geom-voronoi`](./packages/geom-voronoi) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-voronoi.svg)](https://www.npmjs.com/package/@thi.ng/geom-voronoi) | [changelog](./packages/geom-voronoi/CHANGELOG.md) | 2D iterative delaunay/voronoi | -| [`@thi.ng/iges`](./packages/iges) | [![version](https://img.shields.io/npm/v/@thi.ng/iges.svg)](https://www.npmjs.com/package/@thi.ng/iges) | [changelog](./packages/iges/CHANGELOG.md) | IGES format geometry serialization | -| [`@thi.ng/lsys`](./packages/lsys) | [![version](https://img.shields.io/npm/v/@thi.ng/lsys.svg)](https://www.npmjs.com/package/@thi.ng/lsys) | [changelog](./packages/lsys/CHANGELOG.md) | Extensible L-System architecture | -| [`@thi.ng/matrices`](./packages/matrices) | [![version](https://img.shields.io/npm/v/@thi.ng/matrices.svg)](https://www.npmjs.com/package/@thi.ng/matrices) | [changelog](./packages/matrices/CHANGELOG.md) | Matrix operations | -| [`@thi.ng/pixel`](./packages/pixel) | [![version](https://img.shields.io/npm/v/@thi.ng/pixel.svg)](https://www.npmjs.com/package/@thi.ng/pixel) | [changelog](./packages/pixel/CHANGELOG.md) | Multi-format pixel buffers | -| [`@thi.ng/poisson`](./packages/poisson) | [![version](https://img.shields.io/npm/v/@thi.ng/poisson.svg)](https://www.npmjs.com/package/@thi.ng/poisson) | [changelog](./packages/poisson/CHANGELOG.md) | nD Poisson disk sampling | -| [`@thi.ng/porter-duff`](./packages/porter-duff) | [![version](https://img.shields.io/npm/v/@thi.ng/porter-duff.svg)](https://www.npmjs.com/package/@thi.ng/porter-duff) | [changelog](./packages/porter-duff/CHANGELOG.md) | Alpha blending / compositing ops | -| [`@thi.ng/scenegraph`](./packages/scenegraph) | [![version](https://img.shields.io/npm/v/@thi.ng/scenegraph.svg)](https://www.npmjs.com/package/@thi.ng/scenegraph) | [changelog](./packages/scenegraph/CHANGELOG.md) | Extensible 2D/3D scenegraph | -| [`@thi.ng/simd`](./packages/simd) | [![version](https://img.shields.io/npm/v/@thi.ng/simd.svg)](https://www.npmjs.com/package/@thi.ng/simd) | [changelog](./packages/simd/CHANGELOG.md) | WebAssembly SIMD vector batch processing | -| [`@thi.ng/vectors`](./packages/vectors) | [![version](https://img.shields.io/npm/v/@thi.ng/vectors.svg)](https://www.npmjs.com/package/@thi.ng/vectors) | [changelog](./packages/vectors/CHANGELOG.md) | Fixed & arbitrary-length vector ops | +| Project | Version | Changelog | Description | +|---------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|-----------------------------------------------------| +| [`@thi.ng/color`](./packages/color) | [![version](https://img.shields.io/npm/v/@thi.ng/color.svg)](https://www.npmjs.com/package/@thi.ng/color) | [changelog](./packages/color/CHANGELOG.md) | Color conversions, gradients | +| [`@thi.ng/dgraph-dot`](./packages/dgraph-dot) | [![version](https://img.shields.io/npm/v/@thi.ng/dgraph-dot.svg)](https://www.npmjs.com/package/@thi.ng/dgraph-dot) | [changelog](./packages/dgraph-dot/CHANGELOG.md) | Dependency graph -> Graphviz | +| [`@thi.ng/dot`](./packages/dot) | [![version](https://img.shields.io/npm/v/@thi.ng/dot.svg)](https://www.npmjs.com/package/@thi.ng/dot) | [changelog](./packages/dot/CHANGELOG.md) | Graphviz DOM & export | +| [`@thi.ng/geom`](./packages/geom) | [![version](https://img.shields.io/npm/v/@thi.ng/geom.svg)](https://www.npmjs.com/package/@thi.ng/geom) | [changelog](./packages/geom/CHANGELOG.md) | 2D only geometry types & ops | +| [`@thi.ng/geom-accel`](./packages/geom-accel) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-accel.svg)](https://www.npmjs.com/package/@thi.ng/geom-accel) | [changelog](./packages/geom-accel/CHANGELOG.md) | Spatial indexing data structures | +| [`@thi.ng/geom-api`](./packages/geom-api) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-api.svg)](https://www.npmjs.com/package/@thi.ng/geom-api) | [changelog](./packages/geom-api/CHANGELOG.md) | Shared types & interfaces | +| [`@thi.ng/geom-arc`](./packages/geom-arc) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-arc.svg)](https://www.npmjs.com/package/@thi.ng/geom-arc) | [changelog](./packages/geom-arc/CHANGELOG.md) | 2D elliptic arc utils | +| [`@thi.ng/geom-clip-line`](./packages/geom-clip-line) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-clip-line.svg)](https://www.npmjs.com/package/@thi.ng/geom-clip-line) | [changelog](./packages/geom-clip-line/CHANGELOG.md) | 2D line clipping | +| [`@thi.ng/geom-clip-poly`](./packages/geom-clip-poly) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-clip-poly.svg)](https://www.npmjs.com/package/@thi.ng/geom-clip-poly) | [changelog](./packages/geom-clip-poly/CHANGELOG.md) | 2D convex polygon clipping | +| [`@thi.ng/geom-closest-point`](./packages/geom-closest-point) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-closest-point.svg)](https://www.npmjs.com/package/@thi.ng/geom-closest-point) | [changelog](./packages/geom-closest-point/CHANGELOG.md) | Closest point helpers | +| [`@thi.ng/geom-fuzz`](./packages/geom-fuzz) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-fuzz.svg)](https://www.npmjs.com/package/@thi.ng/geom-fuzz) | [changelog](./packages/geom-fuzz/CHANGELOG.md) | Fuzzy 2D shape drawing / filling | +| [`@thi.ng/geom-hull`](./packages/geom-hull) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-hull.svg)](https://www.npmjs.com/package/@thi.ng/geom-hull) | [changelog](./packages/geom-hull/CHANGELOG.md) | 2D convex hull (Graham scan) | +| [`@thi.ng/geom-io-obj`](./packages/geom-io-obj) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-io-obj.svg)](https://www.npmjs.com/package/@thi.ng/geom-io-obj) | [changelog](./packages/geom-io-obj/CHANGELOG.md) | Wavefront OBJ model parser | +| [`@thi.ng/geom-isec`](./packages/geom-isec) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-isec.svg)](https://www.npmjs.com/package/@thi.ng/geom-isec) | [changelog](./packages/geom-isec/CHANGELOG.md) | Point & shape intersection tests | +| [`@thi.ng/geom-isoline`](./packages/geom-isoline) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-isoline.svg)](https://www.npmjs.com/package/@thi.ng/geom-isoline) | [changelog](./packages/geom-isoline/CHANGELOG.md) | 2D contour line extraction | +| [`@thi.ng/geom-poly-utils`](./packages/geom-poly-utils) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-poly-utils.svg)](https://www.npmjs.com/package/@thi.ng/geom-poly-utils) | [changelog](./packages/geom-poly-utils/CHANGELOG.md) | 2D polygon helpers | +| [`@thi.ng/geom-resample`](./packages/geom-resample) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-resample.svg)](https://www.npmjs.com/package/@thi.ng/geom-resample) | [changelog](./packages/geom-resample/CHANGELOG.md) | nD polyline / curve resampling | +| [`@thi.ng/geom-splines`](./packages/geom-splines) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-splines.svg)](https://www.npmjs.com/package/@thi.ng/geom-splines) | [changelog](./packages/geom-splines/CHANGELOG.md) | nD cubic / quadratic spline ops | +| [`@thi.ng/geom-subdiv-curve`](./packages/geom-subdiv-curve) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-subdiv-curve.svg)](https://www.npmjs.com/package/@thi.ng/geom-subdiv-curve) | [changelog](./packages/geom-subdiv-curve/CHANGELOG.md) | nD iterative subdivision curves | +| [`@thi.ng/geom-tessellate`](./packages/geom-tessellate) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-tessellate.svg)](https://www.npmjs.com/package/@thi.ng/geom-tessellate) | [changelog](./packages/geom-tessellate/CHANGELOG.md) | nD convex polygon tessellators | +| [`@thi.ng/geom-voronoi`](./packages/geom-voronoi) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-voronoi.svg)](https://www.npmjs.com/package/@thi.ng/geom-voronoi) | [changelog](./packages/geom-voronoi/CHANGELOG.md) | 2D iterative delaunay/voronoi | +| [`@thi.ng/iges`](./packages/iges) | [![version](https://img.shields.io/npm/v/@thi.ng/iges.svg)](https://www.npmjs.com/package/@thi.ng/iges) | [changelog](./packages/iges/CHANGELOG.md) | IGES format geometry serialization | +| [`@thi.ng/lsys`](./packages/lsys) | [![version](https://img.shields.io/npm/v/@thi.ng/lsys.svg)](https://www.npmjs.com/package/@thi.ng/lsys) | [changelog](./packages/lsys/CHANGELOG.md) | Extensible L-System architecture | +| [`@thi.ng/matrices`](./packages/matrices) | [![version](https://img.shields.io/npm/v/@thi.ng/matrices.svg)](https://www.npmjs.com/package/@thi.ng/matrices) | [changelog](./packages/matrices/CHANGELOG.md) | Matrix operations | +| [`@thi.ng/pixel`](./packages/pixel) | [![version](https://img.shields.io/npm/v/@thi.ng/pixel.svg)](https://www.npmjs.com/package/@thi.ng/pixel) | [changelog](./packages/pixel/CHANGELOG.md) | Multi-format pixel buffers | +| [`@thi.ng/poisson`](./packages/poisson) | [![version](https://img.shields.io/npm/v/@thi.ng/poisson.svg)](https://www.npmjs.com/package/@thi.ng/poisson) | [changelog](./packages/poisson/CHANGELOG.md) | nD Poisson disk sampling | +| [`@thi.ng/porter-duff`](./packages/porter-duff) | [![version](https://img.shields.io/npm/v/@thi.ng/porter-duff.svg)](https://www.npmjs.com/package/@thi.ng/porter-duff) | [changelog](./packages/porter-duff/CHANGELOG.md) | Alpha blending / compositing ops | +| [`@thi.ng/scenegraph`](./packages/scenegraph) | [![version](https://img.shields.io/npm/v/@thi.ng/scenegraph.svg)](https://www.npmjs.com/package/@thi.ng/scenegraph) | [changelog](./packages/scenegraph/CHANGELOG.md) | Extensible 2D/3D scenegraph | +| [`@thi.ng/simd`](./packages/simd) | [![version](https://img.shields.io/npm/v/@thi.ng/simd.svg)](https://www.npmjs.com/package/@thi.ng/simd) | [changelog](./packages/simd/CHANGELOG.md) | WebAssembly SIMD vector batch processing | +| [`@thi.ng/vectors`](./packages/vectors) | [![version](https://img.shields.io/npm/v/@thi.ng/vectors.svg)](https://www.npmjs.com/package/@thi.ng/vectors) | [changelog](./packages/vectors/CHANGELOG.md) | Fixed & arbitrary-length vector ops | +| [`@thi.ng/viz`](./packages/viz) | [![version](https://img.shields.io/npm/v/@thi.ng/viz.svg)](https://www.npmjs.com/package/@thi.ng/viz) | [changelog](./packages/viz/CHANGELOG.md) | Declarative & functional data visualization toolkit | ### WebGL / GPGPU diff --git a/assets/egf/egf-readme2.png b/assets/egf/egf-readme2.png new file mode 100644 index 0000000000..834594c2f7 Binary files /dev/null and b/assets/egf/egf-readme2.png differ diff --git a/assets/examples/ellipse-proximity.png b/assets/examples/ellipse-proximity.png new file mode 100644 index 0000000000..2c86dad61b Binary files /dev/null and b/assets/examples/ellipse-proximity.png differ diff --git a/examples/README.md b/examples/README.md index a31381d155..dd08570b5e 100644 --- a/examples/README.md +++ b/examples/README.md @@ -1,7 +1,7 @@ # @thi.ng/umbrella examples -This directory contains a growing number (currently 98) of standalone +This directory contains a growing number (currently 99) of standalone example projects, including live online versions, build instructions and commented source code. @@ -19,93 +19,94 @@ in touch via PR, issue tracker, email or twitter! | 007 | | [commit-table-ssr](./commit-table-ssr/) | Filterable commit log UI w/ minimal server to provide commit history | | 008 | | [crypto-chart](./crypto-chart/) | Basic crypto-currency candle chart with multiple moving averages plots | | 009 | | [devcards](./devcards/) | BMI calculator in a devcards format | -| 010 | | [fft-synth](./fft-synth/) | Interactive inverse FFT toy synth | -| 011 | | [geom-convex-hull](./geom-convex-hull/) | Convex hull & shape clipping of 2D polygons | -| 012 | | [geom-fuzz-basics](./geom-fuzz-basics/) | geom-fuzz basic shape & fill examples | -| 013 | | [geom-knn](./geom-knn/) | Doodle w/ K-nearest neighbor search result visualization | -| 014 | | [geom-tessel](./geom-tessel/) | Animated, recursive polygon tessellations | -| 015 | | [geom-voronoi-mst](./geom-voronoi-mst/) | Poisson-disk shape-aware sampling, Voronoi & Minimum Spanning Tree visualization | -| 016 | | [gesture-analysis](./gesture-analysis/) | Mouse gesture / stroke analysis, simplification, corner detection | -| 017 | | [grid-iterators](./grid-iterators/) | Visualization of different grid iterator strategies | -| 018 | | [hdom-basics](./hdom-basics/) | Minimal hdom usage example | -| 019 | | [hdom-benchmark](./hdom-benchmark/) | hdom update performance benchmark (old version) | -| 020 | | [hdom-benchmark2](./hdom-benchmark2/) | hdom update performance benchmark w/ config options | -| 021 | | [hdom-canvas-clock](./hdom-canvas-clock/) | Realtime analog clock demo | -| 022 | | [hdom-canvas-draw](./hdom-canvas-draw/) | Interactive pattern drawing demo using transducers | -| 023 | | [hdom-canvas-particles](./hdom-canvas-particles/) | 2D Bezier curve-guided particle system | -| 024 | | [hdom-canvas-shapes](./hdom-canvas-shapes/) | Various hdom-canvas shape drawing examples & SVG conversion / export | -| 025 | | [hdom-dropdown](./hdom-dropdown/) | Custom dropdown UI component for hdom | -| 026 | | [hdom-dropdown-fuzzy](./hdom-dropdown-fuzzy/) | Custom dropdown UI component w/ fuzzy search | -| 027 | | [hdom-dyn-context](./hdom-dyn-context/) | Using custom hdom context for dynamic UI theming | -| 028 | | [hdom-elm](./hdom-elm/) | Using hdom in an Elm-like manner | -| 029 | | [hdom-inner-html](./hdom-inner-html/) | Higher-order component for rendering HTML strings | -| 030 | | [hdom-local-render](./hdom-local-render/) | Isolated, component-local DOM updates | -| 031 | | [hdom-localstate](./hdom-localstate/) | UI component w/ local state stored in hdom context | -| 032 | | [hdom-skip](./hdom-skip/) | Skipping UI updates for selected component(s) | -| 033 | | [hdom-skip-nested](./hdom-skip-nested/) | Skipping UI updates for nested component(s) | -| 034 | | [hdom-theme](./hdom-theme/) | Example for themed components proposal | -| 035 | | [hdom-toggle](./hdom-toggle/) | Customizable slide toggle component demo | -| 036 | | [hdom-vscroller](./hdom-vscroller/) | Virtual scroller component for large tables / lists | -| 037 | | [hiccup-canvas-arcs](./hiccup-canvas-arcs/) | Animated arcs & drawing using hiccup-canvas | -| 038 | | [hmr-basics](./hmr-basics/) | hdom & hot module replacement | -| 039 | | [hydrate-basics](./hydrate-basics/) | Hiccup / hdom DOM hydration example | -| 040 | | [imgui](./imgui/) | Canvas based Immediate Mode GUI components | -| 041 | | [imgui-basics](./imgui-basics/) | Minimal IMGUI usage example | -| 042 | | [interceptor-basics](./interceptor-basics/) | Event handling w/ interceptors and side effects | -| 043 | | [interceptor-basics2](./interceptor-basics2/) | Event handling w/ interceptors and side effects | -| 044 | | [iso-plasma](./iso-plasma/) | Animated sine plasma effect visualized using contour lines | -| 045 | | [json-components](./json-components/) | Transforming JSON into UI components | -| 046 | | [login-form](./login-form/) | Basic SPA example with atom-based UI router | -| 047 | | [mandelbrot](./mandelbrot/) | Worker based, interactive Mandelbrot visualization | -| 048 | | [markdown](./markdown/) | Minimal Markdown to Hiccup to HTML parser / transformer | -| 049 | | [multitouch](./multitouch/) | Basic rstream-gestures multi-touch demo | -| 050 | | [package-stats](./package-stats/) | CLI util to visualize umbrella pkg stats | -| 051 | | [parse-playground](./parse-playground/) | Parser grammar livecoding editor/playground & codegen | -| 052 | | [pixel-basics](./pixel-basics/) | Pixel buffer manipulations | -| 053 | | [pointfree-svg](./pointfree-svg/) | Generate SVG using pointfree DSL | -| 054 | | [poisson-circles](./poisson-circles/) | 2D Poisson-disc sampler with procedural gradient map | -| 055 | | [poly-spline](./poly-spline/) | Polygon to cubic curve conversion & visualization | -| 056 | | [porter-duff](./porter-duff/) | Port-Duff image compositing / alpha blending | -| 057 | | [ramp-synth](./ramp-synth/) | Unison wavetable synth with waveform editor | -| 058 | | [rdom-basics](./rdom-basics/) | Demonstates various rdom usage patterns | -| 059 | | [rdom-dnd](./rdom-dnd/) | rdom drag & drop example | -| 060 | | [rdom-lissajous](./rdom-lissajous/) | rdom & hiccup-canvas interop test | -| 061 | | [rdom-search-docs](./rdom-search-docs/) | Full umbrella repo doc string search w/ paginated results | -| 062 | | [rdom-svg-nodes](./rdom-svg-nodes/) | rdom powered SVG graph with draggable nodes | -| 063 | | [rotating-voronoi](./rotating-voronoi/) | Animated Voronoi diagram, cubic splines & SVG download | -| 064 | | [router-basics](./router-basics/) | Complete mini SPA app w/ router & async content loading | -| 065 | | [rstream-dataflow](./rstream-dataflow/) | Minimal rstream dataflow graph | -| 066 | | [rstream-event-loop](./rstream-event-loop/) | Minimal demo of using rstream constructs to form an interceptor-style event loop | -| 067 | | [rstream-grid](./rstream-grid/) | Interactive grid generator, SVG generation & export, undo/redo support | -| 068 | | [rstream-hdom](./rstream-hdom/) | rstream based UI updates & state handling | -| 069 | | [rstream-spreadsheet](./rstream-spreadsheet/) | rstream based spreadsheet w/ S-expression formula DSL | -| 070 | | [scenegraph](./scenegraph/) | 2D scenegraph & shape picking | -| 071 | | [scenegraph-image](./scenegraph-image/) | 2D scenegraph & image map based geometry manipulation | -| 072 | | [shader-ast-canvas2d](./shader-ast-canvas2d/) | 2D canvas shader emulation | -| 073 | | [shader-ast-evo](./shader-ast-evo/) | Evolutionary shader generation using genetic programming | -| 074 | | [shader-ast-noise](./shader-ast-noise/) | HOF shader procedural noise function composition | -| 075 | | [shader-ast-raymarch](./shader-ast-raymarch/) | WebGL & JS canvas2D raymarch shader cross-compilation | -| 076 | | [shader-ast-sdf2d](./shader-ast-sdf2d/) | WebGL & JS canvas 2D SDF | -| 077 | | [shader-ast-tunnel](./shader-ast-tunnel/) | WebGL & Canvas2D textured tunnel shader | -| 078 | | [shader-ast-workers](./shader-ast-workers/) | Fork-join worker-based raymarch renderer | -| 079 | | [shader-graph](./shader-graph/) | Minimal shader graph developed during livestream #2 | -| 080 | | [soa-ecs](./soa-ecs/) | Entity Component System w/ 100k 3D particles | -| 081 | | [stratified-grid](./stratified-grid/) | 2D Stratified grid sampling example | -| 082 | | [svg-barchart](./svg-barchart/) | Simplistic SVG bar chart component | -| 083 | | [svg-particles](./svg-particles/) | Basic 2D particle system w/ SVG shapes | -| 084 | | [svg-waveform](./svg-waveform/) | Additive waveform synthesis & SVG visualization with undo/redo | -| 085 | | [talk-slides](./talk-slides/) | hdom based slide deck viewer & slides from my ClojureX 2018 keynote | -| 086 | | [text-canvas](./text-canvas/) | 3D wireframe textmode demo | -| 087 | | [todo-list](./todo-list/) | Obligatory to-do list example with undo/redo | -| 088 | | [transducers-hdom](./transducers-hdom/) | Transducer & rstream based hdom UI updates | -| 089 | | [triple-query](./triple-query/) | Triple store query results & sortable table | -| 090 | | [webgl-cube](./webgl-cube/) | WebGL multi-colored cube mesh | -| 091 | | [webgl-cubemap](./webgl-cubemap/) | WebGL cube maps with async texture loading | -| 092 | | [webgl-grid](./webgl-grid/) | WebGL instancing, animated grid | -| 093 | | [webgl-msdf](./webgl-msdf/) | WebGL MSDF text rendering & particle system | -| 094 | | [webgl-multipass](./webgl-multipass/) | Minimal multi-pass / GPGPU example | -| 095 | | [webgl-shadertoy](./webgl-shadertoy/) | Shadertoy-like WebGL setup | -| 096 | | [webgl-ssao](./webgl-ssao/) | WebGL screenspace ambient occlusion | -| 097 | | [wolfram](./wolfram/) | 1D Wolfram automata with OBJ point cloud export | -| 098 | | [xml-converter](./xml-converter/) | XML/HTML/SVG to hiccup/JS conversion | +| 010 | | [ellipse-proximity](./ellipse-proximity/) | Interactive visualization of closest points on ellipses | +| 011 | | [fft-synth](./fft-synth/) | Interactive inverse FFT toy synth | +| 012 | | [geom-convex-hull](./geom-convex-hull/) | Convex hull & shape clipping of 2D polygons | +| 013 | | [geom-fuzz-basics](./geom-fuzz-basics/) | geom-fuzz basic shape & fill examples | +| 014 | | [geom-knn](./geom-knn/) | Doodle w/ K-nearest neighbor search result visualization | +| 015 | | [geom-tessel](./geom-tessel/) | Animated, recursive polygon tessellations | +| 016 | | [geom-voronoi-mst](./geom-voronoi-mst/) | Poisson-disk shape-aware sampling, Voronoi & Minimum Spanning Tree visualization | +| 017 | | [gesture-analysis](./gesture-analysis/) | Mouse gesture / stroke analysis, simplification, corner detection | +| 018 | | [grid-iterators](./grid-iterators/) | Visualization of different grid iterator strategies | +| 019 | | [hdom-basics](./hdom-basics/) | Minimal hdom usage example | +| 020 | | [hdom-benchmark](./hdom-benchmark/) | hdom update performance benchmark (old version) | +| 021 | | [hdom-benchmark2](./hdom-benchmark2/) | hdom update performance benchmark w/ config options | +| 022 | | [hdom-canvas-clock](./hdom-canvas-clock/) | Realtime analog clock demo | +| 023 | | [hdom-canvas-draw](./hdom-canvas-draw/) | Interactive pattern drawing demo using transducers | +| 024 | | [hdom-canvas-particles](./hdom-canvas-particles/) | 2D Bezier curve-guided particle system | +| 025 | | [hdom-canvas-shapes](./hdom-canvas-shapes/) | Various hdom-canvas shape drawing examples & SVG conversion / export | +| 026 | | [hdom-dropdown](./hdom-dropdown/) | Custom dropdown UI component for hdom | +| 027 | | [hdom-dropdown-fuzzy](./hdom-dropdown-fuzzy/) | Custom dropdown UI component w/ fuzzy search | +| 028 | | [hdom-dyn-context](./hdom-dyn-context/) | Using custom hdom context for dynamic UI theming | +| 029 | | [hdom-elm](./hdom-elm/) | Using hdom in an Elm-like manner | +| 030 | | [hdom-inner-html](./hdom-inner-html/) | Higher-order component for rendering HTML strings | +| 031 | | [hdom-local-render](./hdom-local-render/) | Isolated, component-local DOM updates | +| 032 | | [hdom-localstate](./hdom-localstate/) | UI component w/ local state stored in hdom context | +| 033 | | [hdom-skip](./hdom-skip/) | Skipping UI updates for selected component(s) | +| 034 | | [hdom-skip-nested](./hdom-skip-nested/) | Skipping UI updates for nested component(s) | +| 035 | | [hdom-theme](./hdom-theme/) | Example for themed components proposal | +| 036 | | [hdom-toggle](./hdom-toggle/) | Customizable slide toggle component demo | +| 037 | | [hdom-vscroller](./hdom-vscroller/) | Virtual scroller component for large tables / lists | +| 038 | | [hiccup-canvas-arcs](./hiccup-canvas-arcs/) | Animated arcs & drawing using hiccup-canvas | +| 039 | | [hmr-basics](./hmr-basics/) | hdom & hot module replacement | +| 040 | | [hydrate-basics](./hydrate-basics/) | Hiccup / hdom DOM hydration example | +| 041 | | [imgui](./imgui/) | Canvas based Immediate Mode GUI components | +| 042 | | [imgui-basics](./imgui-basics/) | Minimal IMGUI usage example | +| 043 | | [interceptor-basics](./interceptor-basics/) | Event handling w/ interceptors and side effects | +| 044 | | [interceptor-basics2](./interceptor-basics2/) | Event handling w/ interceptors and side effects | +| 045 | | [iso-plasma](./iso-plasma/) | Animated sine plasma effect visualized using contour lines | +| 046 | | [json-components](./json-components/) | Transforming JSON into UI components | +| 047 | | [login-form](./login-form/) | Basic SPA example with atom-based UI router | +| 048 | | [mandelbrot](./mandelbrot/) | Worker based, interactive Mandelbrot visualization | +| 049 | | [markdown](./markdown/) | Minimal Markdown to Hiccup to HTML parser / transformer | +| 050 | | [multitouch](./multitouch/) | Basic rstream-gestures multi-touch demo | +| 051 | | [package-stats](./package-stats/) | CLI util to visualize umbrella pkg stats | +| 052 | | [parse-playground](./parse-playground/) | Parser grammar livecoding editor/playground & codegen | +| 053 | | [pixel-basics](./pixel-basics/) | Pixel buffer manipulations | +| 054 | | [pointfree-svg](./pointfree-svg/) | Generate SVG using pointfree DSL | +| 055 | | [poisson-circles](./poisson-circles/) | 2D Poisson-disc sampler with procedural gradient map | +| 056 | | [poly-spline](./poly-spline/) | Polygon to cubic curve conversion & visualization | +| 057 | | [porter-duff](./porter-duff/) | Port-Duff image compositing / alpha blending | +| 058 | | [ramp-synth](./ramp-synth/) | Unison wavetable synth with waveform editor | +| 059 | | [rdom-basics](./rdom-basics/) | Demonstates various rdom usage patterns | +| 060 | | [rdom-dnd](./rdom-dnd/) | rdom drag & drop example | +| 061 | | [rdom-lissajous](./rdom-lissajous/) | rdom & hiccup-canvas interop test | +| 062 | | [rdom-search-docs](./rdom-search-docs/) | Full umbrella repo doc string search w/ paginated results | +| 063 | | [rdom-svg-nodes](./rdom-svg-nodes/) | rdom powered SVG graph with draggable nodes | +| 064 | | [rotating-voronoi](./rotating-voronoi/) | Animated Voronoi diagram, cubic splines & SVG download | +| 065 | | [router-basics](./router-basics/) | Complete mini SPA app w/ router & async content loading | +| 066 | | [rstream-dataflow](./rstream-dataflow/) | Minimal rstream dataflow graph | +| 067 | | [rstream-event-loop](./rstream-event-loop/) | Minimal demo of using rstream constructs to form an interceptor-style event loop | +| 068 | | [rstream-grid](./rstream-grid/) | Interactive grid generator, SVG generation & export, undo/redo support | +| 069 | | [rstream-hdom](./rstream-hdom/) | rstream based UI updates & state handling | +| 070 | | [rstream-spreadsheet](./rstream-spreadsheet/) | rstream based spreadsheet w/ S-expression formula DSL | +| 071 | | [scenegraph](./scenegraph/) | 2D scenegraph & shape picking | +| 072 | | [scenegraph-image](./scenegraph-image/) | 2D scenegraph & image map based geometry manipulation | +| 073 | | [shader-ast-canvas2d](./shader-ast-canvas2d/) | 2D canvas shader emulation | +| 074 | | [shader-ast-evo](./shader-ast-evo/) | Evolutionary shader generation using genetic programming | +| 075 | | [shader-ast-noise](./shader-ast-noise/) | HOF shader procedural noise function composition | +| 076 | | [shader-ast-raymarch](./shader-ast-raymarch/) | WebGL & JS canvas2D raymarch shader cross-compilation | +| 077 | | [shader-ast-sdf2d](./shader-ast-sdf2d/) | WebGL & JS canvas 2D SDF | +| 078 | | [shader-ast-tunnel](./shader-ast-tunnel/) | WebGL & Canvas2D textured tunnel shader | +| 079 | | [shader-ast-workers](./shader-ast-workers/) | Fork-join worker-based raymarch renderer | +| 080 | | [shader-graph](./shader-graph/) | Minimal shader graph developed during livestream #2 | +| 081 | | [soa-ecs](./soa-ecs/) | Entity Component System w/ 100k 3D particles | +| 082 | | [stratified-grid](./stratified-grid/) | 2D Stratified grid sampling example | +| 083 | | [svg-barchart](./svg-barchart/) | Simplistic SVG bar chart component | +| 084 | | [svg-particles](./svg-particles/) | Basic 2D particle system w/ SVG shapes | +| 085 | | [svg-waveform](./svg-waveform/) | Additive waveform synthesis & SVG visualization with undo/redo | +| 086 | | [talk-slides](./talk-slides/) | hdom based slide deck viewer & slides from my ClojureX 2018 keynote | +| 087 | | [text-canvas](./text-canvas/) | 3D wireframe textmode demo | +| 088 | | [todo-list](./todo-list/) | Obligatory to-do list example with undo/redo | +| 089 | | [transducers-hdom](./transducers-hdom/) | Transducer & rstream based hdom UI updates | +| 090 | | [triple-query](./triple-query/) | Triple store query results & sortable table | +| 091 | | [webgl-cube](./webgl-cube/) | WebGL multi-colored cube mesh | +| 092 | | [webgl-cubemap](./webgl-cubemap/) | WebGL cube maps with async texture loading | +| 093 | | [webgl-grid](./webgl-grid/) | WebGL instancing, animated grid | +| 094 | | [webgl-msdf](./webgl-msdf/) | WebGL MSDF text rendering & particle system | +| 095 | | [webgl-multipass](./webgl-multipass/) | Minimal multi-pass / GPGPU example | +| 096 | | [webgl-shadertoy](./webgl-shadertoy/) | Shadertoy-like WebGL setup | +| 097 | | [webgl-ssao](./webgl-ssao/) | WebGL screenspace ambient occlusion | +| 098 | | [wolfram](./wolfram/) | 1D Wolfram automata with OBJ point cloud export | +| 099 | | [xml-converter](./xml-converter/) | XML/HTML/SVG to hiccup/JS conversion | diff --git a/examples/ellipse-proximity/.gitignore b/examples/ellipse-proximity/.gitignore new file mode 100644 index 0000000000..5d62218c54 --- /dev/null +++ b/examples/ellipse-proximity/.gitignore @@ -0,0 +1,8 @@ +.cache +out +node_modules +yarn.lock +*.js +*.map +!src/*.d.ts +!*.config.js diff --git a/examples/ellipse-proximity/README.md b/examples/ellipse-proximity/README.md new file mode 100644 index 0000000000..76a9b30914 --- /dev/null +++ b/examples/ellipse-proximity/README.md @@ -0,0 +1,13 @@ +# ellipse-proximity + +[Live demo](http://demo.thi.ng/umbrella/ellipse-proximity/) + +Please refer to the [example build instructions](https://github.com/thi-ng/umbrella/wiki/Example-build-instructions) on the wiki. + +## Authors + +- Karsten Schmidt + +## License + +© 2020 Karsten Schmidt // Apache Software License 2.0 diff --git a/examples/ellipse-proximity/index.html b/examples/ellipse-proximity/index.html new file mode 100644 index 0000000000..c0e00d0186 --- /dev/null +++ b/examples/ellipse-proximity/index.html @@ -0,0 +1,31 @@ + + +
+ + + +