diff --git a/.all-contributorsrc b/.all-contributorsrc
new file mode 100644
index 0000000000..9c267144ce
--- /dev/null
+++ b/.all-contributorsrc
@@ -0,0 +1,150 @@
+{
+ "files": [
+ "README.md"
+ ],
+ "imageSize": 100,
+ "commit": false,
+ "contributors": [
+ {
+ "login": "postspectacular",
+ "name": "Karsten Schmidt",
+ "avatar_url": "https://avatars1.githubusercontent.com/u/52302?v=4",
+ "profile": "http://thi.ng",
+ "contributions": [
+ "code",
+ "doc",
+ "maintenance"
+ ]
+ },
+ {
+ "login": "nkint",
+ "name": "Alberto",
+ "avatar_url": "https://avatars3.githubusercontent.com/u/609314?v=4",
+ "profile": "https://github.com/nkint",
+ "contributions": [
+ "code",
+ "example",
+ "bug"
+ ]
+ },
+ {
+ "login": "acarabott",
+ "name": "Arthur Carabott",
+ "avatar_url": "https://avatars1.githubusercontent.com/u/66132?v=4",
+ "profile": "http://www.arthurcarabott.com/",
+ "contributions": [
+ "code",
+ "ideas",
+ "example",
+ "blog"
+ ]
+ },
+ {
+ "login": "andrew8er",
+ "name": "AndrΓ© Wachter",
+ "avatar_url": "https://avatars1.githubusercontent.com/u/179225?v=4",
+ "profile": "http://andrewachter.de",
+ "contributions": [
+ "code",
+ "ideas",
+ "bug"
+ ]
+ },
+ {
+ "login": "gavinpc-mindgrub",
+ "name": "Gavin Cannizzaro",
+ "avatar_url": "https://avatars1.githubusercontent.com/u/29873545?v=4",
+ "profile": "https://github.com/gavinpc-mindgrub",
+ "contributions": [
+ "code",
+ "bug",
+ "ideas"
+ ]
+ },
+ {
+ "login": "loganpowell",
+ "name": "Logan Powell",
+ "avatar_url": "https://avatars1.githubusercontent.com/u/3408191?v=4",
+ "profile": "https://github.com/loganpowell",
+ "contributions": [
+ "doc",
+ "bug",
+ "ideas"
+ ]
+ },
+ {
+ "login": "vorg",
+ "name": "Marcin Ignac",
+ "avatar_url": "https://avatars2.githubusercontent.com/u/171001?v=4",
+ "profile": "http://marcinignac.com",
+ "contributions": [
+ "bug"
+ ]
+ },
+ {
+ "login": "arcticnoah",
+ "name": "arcticnoah",
+ "avatar_url": "https://avatars2.githubusercontent.com/u/7544636?v=4",
+ "profile": "https://github.com/arcticnoah",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "allforabit",
+ "name": "allforabit",
+ "avatar_url": "https://avatars3.githubusercontent.com/u/537189?v=4",
+ "profile": "https://github.com/allforabit",
+ "contributions": [
+ "bug",
+ "code",
+ "ideas"
+ ]
+ },
+ {
+ "login": "IvanWoo",
+ "name": "Yifan Wu",
+ "avatar_url": "https://avatars2.githubusercontent.com/u/15613549?v=4",
+ "profile": "https://yifanwu.studio/",
+ "contributions": [
+ "bug",
+ "doc"
+ ]
+ },
+ {
+ "login": "stwind",
+ "name": "stwind",
+ "avatar_url": "https://avatars0.githubusercontent.com/u/250297?v=4",
+ "profile": "https://pngupngu.com/",
+ "contributions": [
+ "code",
+ "bug"
+ ]
+ },
+ {
+ "login": "evilive3000",
+ "name": "evilive",
+ "avatar_url": "https://avatars1.githubusercontent.com/u/5011293?v=4",
+ "profile": "https://github.com/evilive3000",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "Bnaya",
+ "name": "Bnaya Peretz",
+ "avatar_url": "https://avatars0.githubusercontent.com/u/1304862?v=4",
+ "profile": "https://github.com/Bnaya",
+ "contributions": [
+ "code",
+ "bug",
+ "ideas"
+ ]
+ }
+ ],
+ "contributorsPerLine": 7,
+ "projectName": "umbrella",
+ "projectOwner": "thi-ng",
+ "repoType": "github",
+ "repoHost": "https://github.com"
+}
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000000..d35aa01471
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,7 @@
+* text=auto eol=lf
+*.gif -text
+*.jpg -text
+*.mp4 -text
+*.pdf -text
+*.png -text
+*.gz -text
diff --git a/.gitignore b/.gitignore
index 1d7c0b3e5e..e9bed07f49 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,7 +8,10 @@
*.js
*.log
*.map
+*.o
*.tgz
+*.wasm
+*.wat
*.zip
/.gtm/
build
diff --git a/.prettierrc b/.prettierrc
index 776b96e715..2bbeb7c420 100644
--- a/.prettierrc
+++ b/.prettierrc
@@ -1,4 +1,5 @@
{
"tabWidth": 4,
- "arrowParens": "always"
-}
+ "arrowParens": "always",
+ "endOfLine": "lf"
+}
\ No newline at end of file
diff --git a/README.md b/README.md
index 6f844f6a58..247b337740 100644
--- a/README.md
+++ b/README.md
@@ -1,24 +1,38 @@
# @thi.ng/umbrella
[![Travis status](https://api.travis-ci.org/thi-ng/umbrella.svg?branch=master)](https://travis-ci.org/thi-ng/umbrella)
+[![Code Climate](https://api.codeclimate.com/v1/badges/592940419adb5bf8abaf/maintainability)](https://codeclimate.com/github/thi-ng/umbrella/maintainability)
[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org/)
[![Discord chat](https://img.shields.io/discord/445761008837984256.svg)](https://discord.gg/JhYcmBw)
[![Twitter Follow](https://img.shields.io/twitter/follow/thing_umbrella.svg?label=%40thing_umbrella&style=social)](https://twitter.com/thing_umbrella)
## About
-Mono-repository for almost 100 thi.ng TypeScript/ES6 projects, a wide
+> "A collection of functional programming libraries that can be composed together.
+> Unlike a framework, thi.ng is a suite of instruments and you (the user) must be
+> the composer of. Geared towards versatility, not any specific type of music."
+> — [@loganpowell](https://twitter.com/logantpowell/status/1186334119812304901) via Twitter
+
+Mono-repository for 100+ thi.ng TypeScript/ES6 projects, a wide
collection of largely data transformation oriented packages and building
blocks for:
- Functional programming (composition, memoization, transducers, multi-methods)
+- ES6 iterators
- Stream based, reactive programming, dataflow graphs / pipelines
-- Data structures & data transformations for wide range of use cases
+- WebWorker workflow abstractions
+- Data structures & data transformations for wide range of use cases (list, sets, maps)
+- Value-based equivalence
+- FSM primitives, parser generators
- Data driven UI components, event & side effect handling
-- Immutable data handling
-- Geometry generation, processing & visualization
-- Vector & matrix implementations with optional support for strided layouts
+- Canvas-based Immediate mode GUI components
+- Immutable data handling, state containers, transacted state updates, Undo-Redo history
+- 2D geometry generation, processing, conversion & visualization
+- Vector & matrix implementations with optional support for strided layouts, SIMD etc.
+- Color space conversions, cosine gradients
+- Multi-format pixel buffers, conversions, Porter-Duff alpha-blending operators
- Declarative WebGL 1/2 abstraction layer
+- S-expression parser & runtime infrastructure for custom DSL creation
- DSL for shader functions defined in TypeScript and cross-compilation to GLSL, JS, VEX etc.
- Low-level tooling for binary data, shared memory / WASM / WebGL interop
- etc. (see package overview below)
@@ -49,7 +63,7 @@ Most packages:
## Examples
-There's a steadily growing number (~60) of standalone examples
+There's a steadily growing number (~70) of standalone examples
(different complexities, often combining functionality from several
packages) in the [examples](./examples) directory.
@@ -73,6 +87,12 @@ contribute, please first read [this document](./CONTRIBUTING.md).
## Projects
+### New / unreleased packages in development
+
+(These packages are still unreleased and only available on their feature or `develop` branches)
+
+- [@thi.ng/scenegraph](https://github.com/thi-ng/umbrella/tree/feature/scenegraph/packages/scenegraph) - 2D/3D scenegraph
+
### Fundamentals
| Project | Version | Changelog | Description |
@@ -84,6 +104,7 @@ contribute, please first read [this document](./CONTRIBUTING.md).
| [`@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/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/ecs`](./packages/ecs) | [![version](https://img.shields.io/npm/v/@thi.ng/ecs.svg)](https://www.npmjs.com/package/@thi.ng/ecs) | [changelog](./packages/ecs/CHANGELOG.md) | Entity-Component System |
| [`@thi.ng/equiv`](./packages/equiv) | [![version](https://img.shields.io/npm/v/@thi.ng/equiv.svg)](https://www.npmjs.com/package/@thi.ng/equiv) | [changelog](./packages/equiv/CHANGELOG.md) | Deep value equivalence checking |
| [`@thi.ng/errors`](./packages/errors) | [![version](https://img.shields.io/npm/v/@thi.ng/errors.svg)](https://www.npmjs.com/package/@thi.ng/errors) | [changelog](./packages/errors/CHANGELOG.md) | Custom error types |
| [`@thi.ng/math`](./packages/math) | [![version](https://img.shields.io/npm/v/@thi.ng/math.svg)](https://www.npmjs.com/package/@thi.ng/math) | [changelog](./packages/math/CHANGELOG.md) | Assorted common math functions & utilities |
@@ -98,6 +119,7 @@ contribute, please first read [this document](./CONTRIBUTING.md).
|---------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|----------------------------------|
| [`@thi.ng/csp`](./packages/csp) | [![version](https://img.shields.io/npm/v/@thi.ng/csp.svg)](https://www.npmjs.com/package/@thi.ng/csp) | [changelog](./packages/csp/CHANGELOG.md) | Channel based async ops |
| [`@thi.ng/fsm`](./packages/fsm) | [![version](https://img.shields.io/npm/v/@thi.ng/fsm.svg)](https://www.npmjs.com/package/@thi.ng/fsm) | [changelog](./packages/fsm/CHANGELOG.md) | FSM / parser primitives |
+| [`@thi.ng/grid-iterators`](./packages/grid-iterators) | [![version](https://img.shields.io/npm/v/@thi.ng/grid-iterators.svg)](https://www.npmjs.com/package/@thi.ng/grid-iterators) | [changelog](./packages/grid-iterators/CHANGELOG.md) | 2D grid iterator strategies |
| [`@thi.ng/iterators`](./packages/iterators) | [![version](https://img.shields.io/npm/v/@thi.ng/iterators.svg)](https://www.npmjs.com/package/@thi.ng/iterators) | [changelog](./packages/iterators/CHANGELOG.md) | ES6 generators / iterators |
| [`@thi.ng/sax`](./packages/sax) | [![version](https://img.shields.io/npm/v/@thi.ng/sax.svg)](https://www.npmjs.com/package/@thi.ng/sax) | [changelog](./packages/sax/CHANGELOG.md) | SAX-like XML parser / transducer |
| [`@thi.ng/transducers`](./packages/transducers) | [![version](https://img.shields.io/npm/v/@thi.ng/transducers.svg)](https://www.npmjs.com/package/@thi.ng/transducers) | [changelog](./packages/transducers/CHANGELOG.md) | Composable data transformations |
@@ -151,37 +173,39 @@ contribute, please first read [this document](./CONTRIBUTING.md).
| [`@thi.ng/hiccup-css`](./packages/hiccup-css) | [![version](https://img.shields.io/npm/v/@thi.ng/hiccup-css.svg)](https://www.npmjs.com/package/@thi.ng/hiccup-css) | [changelog](./packages/hiccup-css/CHANGELOG.md) | CSS from nested JS data structures |
| [`@thi.ng/hiccup-markdown`](./packages/hiccup-markdown) | [![version](https://img.shields.io/npm/v/@thi.ng/hiccup-markdown.svg)](https://www.npmjs.com/package/@thi.ng/hiccup-markdown) | [changelog](./packages/hiccup-markdown/CHANGELOG.md) | Hiccup-to-Markdown serialization |
| [`@thi.ng/hiccup-svg`](./packages/hiccup-svg) | [![version](https://img.shields.io/npm/v/@thi.ng/hiccup-svg.svg)](https://www.npmjs.com/package/@thi.ng/hiccup-svg) | [changelog](./packages/hiccup-svg/CHANGELOG.md) | hiccup based SVG vocab |
+| [`@thi.ng/imgui`](./packages/imgui) | [![version](https://img.shields.io/npm/v/@thi.ng/imgui.svg)](https://www.npmjs.com/package/@thi.ng/imgui) | [changelog](./packages/imgui/CHANGELOG.md) | Immediate mode GUI |
| [`@thi.ng/interceptors`](./packages/interceptors) | [![version](https://img.shields.io/npm/v/@thi.ng/interceptors.svg)](https://www.npmjs.com/package/@thi.ng/interceptors) | [changelog](./packages/interceptors/CHANGELOG.md) | Composable event handlers & processor |
| [`@thi.ng/router`](./packages/router) | [![version](https://img.shields.io/npm/v/@thi.ng/router.svg)](https://www.npmjs.com/package/@thi.ng/router) | [changelog](./packages/router/CHANGELOG.md) | Customizable browser & non-browser router |
### 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/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`](./packages/geom-clip) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-clip.svg)](https://www.npmjs.com/package/@thi.ng/geom-clip) | [changelog](./packages/geom-clip/CHANGELOG.md) | 2D convex line/shape 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-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-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/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/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`](./packages/geom-clip) | [![version](https://img.shields.io/npm/v/@thi.ng/geom-clip.svg)](https://www.npmjs.com/package/@thi.ng/geom-clip) | [changelog](./packages/geom-clip/CHANGELOG.md) | 2D convex line/shape 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-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-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/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 |
### WebGL / GPGPU
@@ -193,22 +217,24 @@ contribute, please first read [this document](./CONTRIBUTING.md).
| [`@thi.ng/shader-ast-stdlib`](./packages/shader-ast-stdlib) | [![version](https://img.shields.io/npm/v/@thi.ng/shader-ast-stdlib.svg)](https://www.npmjs.com/package/@thi.ng/shader-ast-stdlib) | [changelog](./packages/shader-ast-stdlib/CHANGELOG.md) | 100+ useful AST shader functions |
| [`@thi.ng/webgl`](./packages/webgl) | [![version](https://img.shields.io/npm/v/@thi.ng/webgl.svg)](https://www.npmjs.com/package/@thi.ng/webgl) | [changelog](./packages/webgl/CHANGELOG.md) | WebGL 1/2 / GPGPU facilities |
| [`@thi.ng/webgl-msdf`](./packages/webgl-msdf) | [![version](https://img.shields.io/npm/v/@thi.ng/webgl-msdf.svg)](https://www.npmjs.com/package/@thi.ng/webgl-msdf) | [changelog](./packages/webgl-msdf/CHANGELOG.md) | MSDF font rendering |
+| [`@thi.ng/webgl-shadertoy`](./packages/webgl-shadertoy) | [![version](https://img.shields.io/npm/v/@thi.ng/webgl-shadertoy.svg)](https://www.npmjs.com/package/@thi.ng/webgl-shadertoy) | [changelog](./packages/webgl-shadertoy/CHANGELOG.md) | Shadertoy-like WebGL setup |
### Low-level, binary, memory management
-| Project | Version | Changelog | Description |
-|---------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------|--------------------------------------------|
-| [`@thi.ng/bencode`](./packages/bencode) | [![version](https://img.shields.io/npm/v/@thi.ng/bencode.svg)](https://www.npmjs.com/package/@thi.ng/bencode) | [changelog](./packages/bencode/CHANGELOG.md) | Bencode binary format encoding |
-| [`@thi.ng/binary`](./packages/binary) | [![version](https://img.shields.io/npm/v/@thi.ng/binary.svg)](https://www.npmjs.com/package/@thi.ng/binary) | [changelog](./packages/binary/CHANGELOG.md) | Assorted binary / bitwise ops, utilities |
-| [`@thi.ng/bitstream`](./packages/bitstream) | [![version](https://img.shields.io/npm/v/@thi.ng/bitstream.svg)](https://www.npmjs.com/package/@thi.ng/bitstream) | [changelog](./packages/bitstream/CHANGELOG.md) | Bitwise input / output streams |
-| [`@thi.ng/dlogic`](./packages/dlogic) | [![version](https://img.shields.io/npm/v/@thi.ng/dlogic.svg)](https://www.npmjs.com/package/@thi.ng/dlogic) | [changelog](./packages/dlogic/CHANGELOG.md) | Digital logic ops / constructs |
-| [`@thi.ng/leb128`](./packages/leb128) | [![version](https://img.shields.io/npm/v/@thi.ng/leb128.svg)](https://www.npmjs.com/package/@thi.ng/leb128) | [changelog](./packages/leb128/CHANGELOG.md) | WASM based LEB128 varint encoder / decoder |
-| [`@thi.ng/malloc`](./packages/malloc) | [![version](https://img.shields.io/npm/v/@thi.ng/malloc.svg)](https://www.npmjs.com/package/@thi.ng/malloc) | [changelog](./packages/malloc/CHANGELOG.md) | Raw & typed array memory pool & allocator |
-| [`@thi.ng/morton`](./packages/morton) | [![version](https://img.shields.io/npm/v/@thi.ng/morton.svg)](https://www.npmjs.com/package/@thi.ng/morton) | [changelog](./packages/morton/CHANGELOG.md) | Z-order-curve / Morton coding |
-| [`@thi.ng/range-coder`](./packages/range-coder) | [![version](https://img.shields.io/npm/v/@thi.ng/range-coder.svg)](https://www.npmjs.com/package/@thi.ng/range-coder) | [changelog](./packages/range-coder/CHANGELOG.md) | Binary data Range encoder / decoder |
-| [`@thi.ng/rle-pack`](./packages/rle-pack) | [![version](https://img.shields.io/npm/v/@thi.ng/rle-pack.svg)](https://www.npmjs.com/package/@thi.ng/rle-pack) | [changelog](./packages/rle-pack/CHANGELOG.md) | Run-length encoding data compression |
-| [`@thi.ng/unionstruct`](./packages/unionstruct) | [![version](https://img.shields.io/npm/v/@thi.ng/unionstruct.svg)](https://www.npmjs.com/package/@thi.ng/unionstruct) | [changelog](./packages/unionstruct/CHANGELOG.md) | Wrapper for C-like structs / unions |
-| [`@thi.ng/vector-pools`](./packages/vector-pools) | [![version](https://img.shields.io/npm/v/@thi.ng/vector-pools.svg)](https://www.npmjs.com/package/@thi.ng/vector-pools) | [changelog](./packages/vector-pools/CHANGELOG.md) | Data structures for memory mapped vectors |
+| Project | Version | Changelog | Description |
+|---------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------|-----------------------------------------------|
+| [`@thi.ng/bencode`](./packages/bencode) | [![version](https://img.shields.io/npm/v/@thi.ng/bencode.svg)](https://www.npmjs.com/package/@thi.ng/bencode) | [changelog](./packages/bencode/CHANGELOG.md) | Bencode binary format encoding |
+| [`@thi.ng/binary`](./packages/binary) | [![version](https://img.shields.io/npm/v/@thi.ng/binary.svg)](https://www.npmjs.com/package/@thi.ng/binary) | [changelog](./packages/binary/CHANGELOG.md) | Assorted binary / bitwise ops, utilities |
+| [`@thi.ng/bitstream`](./packages/bitstream) | [![version](https://img.shields.io/npm/v/@thi.ng/bitstream.svg)](https://www.npmjs.com/package/@thi.ng/bitstream) | [changelog](./packages/bitstream/CHANGELOG.md) | Bitwise input / output streams |
+| [`@thi.ng/dlogic`](./packages/dlogic) | [![version](https://img.shields.io/npm/v/@thi.ng/dlogic.svg)](https://www.npmjs.com/package/@thi.ng/dlogic) | [changelog](./packages/dlogic/CHANGELOG.md) | Digital logic ops / constructs |
+| [`@thi.ng/leb128`](./packages/leb128) | [![version](https://img.shields.io/npm/v/@thi.ng/leb128.svg)](https://www.npmjs.com/package/@thi.ng/leb128) | [changelog](./packages/leb128/CHANGELOG.md) | WASM based LEB128 varint encoder / decoder |
+| [`@thi.ng/malloc`](./packages/malloc) | [![version](https://img.shields.io/npm/v/@thi.ng/malloc.svg)](https://www.npmjs.com/package/@thi.ng/malloc) | [changelog](./packages/malloc/CHANGELOG.md) | Raw & typed array memory pool & allocator |
+| [`@thi.ng/morton`](./packages/morton) | [![version](https://img.shields.io/npm/v/@thi.ng/morton.svg)](https://www.npmjs.com/package/@thi.ng/morton) | [changelog](./packages/morton/CHANGELOG.md) | Z-order-curve / Morton coding |
+| [`@thi.ng/range-coder`](./packages/range-coder) | [![version](https://img.shields.io/npm/v/@thi.ng/range-coder.svg)](https://www.npmjs.com/package/@thi.ng/range-coder) | [changelog](./packages/range-coder/CHANGELOG.md) | Binary data Range encoder / decoder |
+| [`@thi.ng/rle-pack`](./packages/rle-pack) | [![version](https://img.shields.io/npm/v/@thi.ng/rle-pack.svg)](https://www.npmjs.com/package/@thi.ng/rle-pack) | [changelog](./packages/rle-pack/CHANGELOG.md) | Run-length encoding data compression |
+| [`@thi.ng/soa`](./packages/soa) | [![version](https://img.shields.io/npm/v/@thi.ng/soa.svg)](https://www.npmjs.com/package/@thi.ng/soa) | [changelog](./packages/soa/CHANGELOG.md) | Memory mapped data structures & serialization |
+| [`@thi.ng/unionstruct`](./packages/unionstruct) | [![version](https://img.shields.io/npm/v/@thi.ng/unionstruct.svg)](https://www.npmjs.com/package/@thi.ng/unionstruct) | [changelog](./packages/unionstruct/CHANGELOG.md) | Wrapper for C-like structs / unions |
+| [`@thi.ng/vector-pools`](./packages/vector-pools) | [![version](https://img.shields.io/npm/v/@thi.ng/vector-pools.svg)](https://www.npmjs.com/package/@thi.ng/vector-pools) | [changelog](./packages/vector-pools/CHANGELOG.md) | Data structures for memory mapped vectors |
### DSLs
@@ -216,6 +242,7 @@ contribute, please first read [this document](./CONTRIBUTING.md).
|-------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------|-----------------------------------------------|
| [`@thi.ng/pointfree`](./packages/pointfree) | [![version](https://img.shields.io/npm/v/@thi.ng/pointfree.svg)](https://www.npmjs.com/package/@thi.ng/pointfree) | [changelog](./packages/pointfree/CHANGELOG.md) | Stack-based DSL & functional composition |
| [`@thi.ng/pointfree-lang`](./packages/pointfree-lang) | [![version](https://img.shields.io/npm/v/@thi.ng/pointfree-lang.svg)](https://www.npmjs.com/package/@thi.ng/pointfree-lang) | [changelog](./packages/pointfree-lang/CHANGELOG.md) | Forth-like syntax layer for @thi.ng/pointfree |
+| [`@thi.ng/sexpr`](./packages/sexpr) | [![version](https://img.shields.io/npm/v/@thi.ng/sexpr.svg)](https://www.npmjs.com/package/@thi.ng/sexpr) | [changelog](./packages/sexpr/CHANGELOG.md) | S-Expression parser & runtime infrastructure |
## Building
@@ -272,3 +299,33 @@ yarn doc
## License
© 2018 Karsten Schmidt // Apache Software License 2.0
+
+## Contributors β¨
+
+Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
+
+
+
+
+
+
+
+This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
diff --git a/assets/dot/crypto-dflow.dot b/assets/diagrams/crypto-dflow.dot
similarity index 100%
rename from assets/dot/crypto-dflow.dot
rename to assets/diagrams/crypto-dflow.dot
diff --git a/assets/dot/dot-example.dot b/assets/diagrams/dot-example.dot
similarity index 100%
rename from assets/dot/dot-example.dot
rename to assets/diagrams/dot-example.dot
diff --git a/assets/dot/hdom-canvas-shapes.dot b/assets/diagrams/hdom-canvas-shapes.dot
similarity index 100%
rename from assets/dot/hdom-canvas-shapes.dot
rename to assets/diagrams/hdom-canvas-shapes.dot
diff --git a/assets/dot/hdom-v5.xml b/assets/diagrams/hdom-v5.xml
similarity index 100%
rename from assets/dot/hdom-v5.xml
rename to assets/diagrams/hdom-v5.xml
diff --git a/assets/dot/hdom.xml b/assets/diagrams/hdom.xml
similarity index 100%
rename from assets/dot/hdom.xml
rename to assets/diagrams/hdom.xml
diff --git a/assets/dot/iceps-dataflow.xml b/assets/diagrams/iceps-dataflow.xml
similarity index 100%
rename from assets/dot/iceps-dataflow.xml
rename to assets/diagrams/iceps-dataflow.xml
diff --git a/assets/dot/q1.dot b/assets/diagrams/q1.dot
similarity index 100%
rename from assets/dot/q1.dot
rename to assets/diagrams/q1.dot
diff --git a/assets/dot/q2.dot b/assets/diagrams/q2.dot
similarity index 100%
rename from assets/dot/q2.dot
rename to assets/diagrams/q2.dot
diff --git a/assets/dot/rle-layout.dot b/assets/diagrams/rle-layout.dot
similarity index 100%
rename from assets/dot/rle-layout.dot
rename to assets/diagrams/rle-layout.dot
diff --git a/assets/dot/rs-dflow.dot b/assets/diagrams/rs-dflow.dot
similarity index 100%
rename from assets/dot/rs-dflow.dot
rename to assets/diagrams/rs-dflow.dot
diff --git a/assets/dot/rs-dot-example.dot b/assets/diagrams/rs-dot-example.dot
similarity index 100%
rename from assets/dot/rs-dot-example.dot
rename to assets/diagrams/rs-dot-example.dot
diff --git a/assets/dot/rs-query1.dot b/assets/diagrams/rs-query1.dot
similarity index 100%
rename from assets/dot/rs-query1.dot
rename to assets/diagrams/rs-query1.dot
diff --git a/assets/dot/rstream-constructs.xml b/assets/diagrams/rstream-constructs.xml
similarity index 100%
rename from assets/dot/rstream-constructs.xml
rename to assets/diagrams/rstream-constructs.xml
diff --git a/assets/dot/transducers-hdom-dflow.dot b/assets/diagrams/transducers-hdom-dflow.dot
similarity index 100%
rename from assets/dot/transducers-hdom-dflow.dot
rename to assets/diagrams/transducers-hdom-dflow.dot
diff --git a/assets/diagrams/wolfram-dflow.dot b/assets/diagrams/wolfram-dflow.dot
new file mode 100644
index 0000000000..a82eb21c41
--- /dev/null
+++ b/assets/diagrams/wolfram-dflow.dot
@@ -0,0 +1,54 @@
+digraph g {
+rankdir=LR;
+node[fontname=Inconsolata,fontsize=11,style=filled,fontcolor=white];
+edge[fontname=Inconsolata,fontsize=11];
+s0[label="rule\n(Stream)", color="blue"];
+s1[label="xform-2", color="black"];
+s2[label="in-rule", color="black"];
+s3[label="", color="gray"];
+s4[label="wolfram\n(StreamSync)", color="red"];
+s5[label="xform-7", color="black"];
+s6[label="in-sim", color="black"];
+s7[label="", color="gray"];
+s8[label="main\n(StreamSync)", color="red"];
+s9[label="hdom", color="black"];
+s10[label="xform-10", color="black"];
+s11[label="sidetoggle-11", color="black"];
+s12[label="obj export", color="black"];
+s13[label="in-id", color="black"];
+s14[label="", color="gray"];
+s15[label="kernel\n(Stream)", color="blue"];
+s16[label="xform-3", color="black"];
+s17[label="in-kernel", color="black"];
+s18[label="", color="gray"];
+s19[label="in-ksize", color="black"];
+s20[label="", color="gray"];
+s21[label="export trigger", color="blue"];
+s22[label="sub-12", color="black"];
+s23[label="", color="gray"];
+s23 -> s11[label="sidechain"];
+s8 -> s9[label="xform"];
+s7 -> s8[label="xform"];
+s6 -> s7;
+s5 -> s6[label="xform"];
+s11 -> s12[label="xform"];
+s10 -> s11;
+s4 -> s5[label="xform"];
+s4 -> s10[label="xform"];
+s3 -> s4[label="xform"];
+s2 -> s3;
+s1 -> s2[label="xform"];
+s14 -> s8[label="xform"];
+s13 -> s14;
+s0 -> s1[label="xform"];
+s0 -> s13[label="xform"];
+s18 -> s4[label="xform"];
+s17 -> s18;
+s16 -> s17[label="xform"];
+s20 -> s8[label="xform"];
+s19 -> s20;
+s15 -> s16[label="xform"];
+s15 -> s19[label="xform"];
+s22 -> s23;
+s21 -> s22;
+}
\ No newline at end of file
diff --git a/assets/dot/xml-converter.dot b/assets/diagrams/xml-converter.dot
similarity index 100%
rename from assets/dot/xml-converter.dot
rename to assets/diagrams/xml-converter.dot
diff --git a/assets/dot-example.png b/assets/dot/dot-example.png
similarity index 100%
rename from assets/dot-example.png
rename to assets/dot/dot-example.png
diff --git a/assets/screenshots/estuary.jpg b/assets/estuary/estuary.jpg
similarity index 100%
rename from assets/screenshots/estuary.jpg
rename to assets/estuary/estuary.jpg
diff --git a/assets/screenshots/canvas-dial.png b/assets/examples/canvas-dial.png
similarity index 100%
rename from assets/screenshots/canvas-dial.png
rename to assets/examples/canvas-dial.png
diff --git a/assets/examples/cellular-automata.png b/assets/examples/cellular-automata.png
new file mode 100644
index 0000000000..3eea408f63
Binary files /dev/null and b/assets/examples/cellular-automata.png differ
diff --git a/assets/screenshots/commit-table-ssr.png b/assets/examples/commit-table-ssr.png
similarity index 100%
rename from assets/screenshots/commit-table-ssr.png
rename to assets/examples/commit-table-ssr.png
diff --git a/assets/screenshots/crypto-chart.png b/assets/examples/crypto-chart.png
similarity index 100%
rename from assets/screenshots/crypto-chart.png
rename to assets/examples/crypto-chart.png
diff --git a/assets/crypto-dflow.png b/assets/examples/crypto-dflow.png
similarity index 100%
rename from assets/crypto-dflow.png
rename to assets/examples/crypto-dflow.png
diff --git a/assets/screenshots/gesture-analysis.png b/assets/examples/gesture-analysis.png
similarity index 100%
rename from assets/screenshots/gesture-analysis.png
rename to assets/examples/gesture-analysis.png
diff --git a/assets/screenshots/mandelbrot.jpg b/assets/examples/mandelbrot.jpg
similarity index 100%
rename from assets/screenshots/mandelbrot.jpg
rename to assets/examples/mandelbrot.jpg
diff --git a/assets/rs-dflow.png b/assets/examples/rs-dflow.png
similarity index 100%
rename from assets/rs-dflow.png
rename to assets/examples/rs-dflow.png
diff --git a/assets/rs-dot-example.svg b/assets/examples/rs-dot-example.svg
similarity index 100%
rename from assets/rs-dot-example.svg
rename to assets/examples/rs-dot-example.svg
diff --git a/assets/examples/rs-query1.png b/assets/examples/rs-query1.png
new file mode 100644
index 0000000000..d9861ae32b
Binary files /dev/null and b/assets/examples/rs-query1.png differ
diff --git a/assets/rs-query1.svg b/assets/examples/rs-query1.svg
similarity index 100%
rename from assets/rs-query1.svg
rename to assets/examples/rs-query1.svg
diff --git a/assets/screenshots/rstream-grid.png b/assets/examples/rstream-grid.png
similarity index 100%
rename from assets/screenshots/rstream-grid.png
rename to assets/examples/rstream-grid.png
diff --git a/assets/examples/soa-ecs-100k.png b/assets/examples/soa-ecs-100k.png
new file mode 100644
index 0000000000..9413c4c54d
Binary files /dev/null and b/assets/examples/soa-ecs-100k.png differ
diff --git a/assets/screenshots/svg-barchart.png b/assets/examples/svg-barchart.png
similarity index 100%
rename from assets/screenshots/svg-barchart.png
rename to assets/examples/svg-barchart.png
diff --git a/assets/screenshots/svg-waveform.png b/assets/examples/svg-waveform.png
similarity index 100%
rename from assets/screenshots/svg-waveform.png
rename to assets/examples/svg-waveform.png
diff --git a/assets/xml-converter.png b/assets/examples/xml-converter-dflow.png
similarity index 100%
rename from assets/xml-converter.png
rename to assets/examples/xml-converter-dflow.png
diff --git a/assets/screenshots/xml-converter.png b/assets/examples/xml-converter.png
similarity index 100%
rename from assets/screenshots/xml-converter.png
rename to assets/examples/xml-converter.png
diff --git a/assets/geom-isoline.png b/assets/geom/geom-isoline.png
similarity index 100%
rename from assets/geom-isoline.png
rename to assets/geom/geom-isoline.png
diff --git a/assets/geom/geom-isoline.svg b/assets/geom/geom-isoline.svg
new file mode 100644
index 0000000000..072fcc566c
--- /dev/null
+++ b/assets/geom/geom-isoline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/geom-voronoi.jpg b/assets/geom/geom-voronoi.jpg
similarity index 100%
rename from assets/geom-voronoi.jpg
rename to assets/geom/geom-voronoi.jpg
diff --git a/assets/geom/tessel.png b/assets/geom/tessel.png
new file mode 100644
index 0000000000..55c7dcd95c
Binary files /dev/null and b/assets/geom/tessel.png differ
diff --git a/assets/grid-iterators/diagonal2d-small.gif b/assets/grid-iterators/diagonal2d-small.gif
new file mode 100644
index 0000000000..0e4cb761db
Binary files /dev/null and b/assets/grid-iterators/diagonal2d-small.gif differ
diff --git a/assets/grid-iterators/hilbert2d-small.gif b/assets/grid-iterators/hilbert2d-small.gif
new file mode 100644
index 0000000000..5a39e6199e
Binary files /dev/null and b/assets/grid-iterators/hilbert2d-small.gif differ
diff --git a/assets/grid-iterators/interleavecolumns2d-small.gif b/assets/grid-iterators/interleavecolumns2d-small.gif
new file mode 100644
index 0000000000..6f84e1b7f2
Binary files /dev/null and b/assets/grid-iterators/interleavecolumns2d-small.gif differ
diff --git a/assets/grid-iterators/interleaverows2d-small.gif b/assets/grid-iterators/interleaverows2d-small.gif
new file mode 100644
index 0000000000..c1ba6d8bea
Binary files /dev/null and b/assets/grid-iterators/interleaverows2d-small.gif differ
diff --git a/assets/grid-iterators/random2d-small.gif b/assets/grid-iterators/random2d-small.gif
new file mode 100644
index 0000000000..d62c12819f
Binary files /dev/null and b/assets/grid-iterators/random2d-small.gif differ
diff --git a/assets/grid-iterators/spiral2d-small.gif b/assets/grid-iterators/spiral2d-small.gif
new file mode 100644
index 0000000000..607ddd1ea8
Binary files /dev/null and b/assets/grid-iterators/spiral2d-small.gif differ
diff --git a/assets/grid-iterators/zcurve2d-small.gif b/assets/grid-iterators/zcurve2d-small.gif
new file mode 100644
index 0000000000..665b3ca44f
Binary files /dev/null and b/assets/grid-iterators/zcurve2d-small.gif differ
diff --git a/assets/grid-iterators/zigzagcolumns2d-small.gif b/assets/grid-iterators/zigzagcolumns2d-small.gif
new file mode 100644
index 0000000000..8fa5ba3c3e
Binary files /dev/null and b/assets/grid-iterators/zigzagcolumns2d-small.gif differ
diff --git a/assets/grid-iterators/zigzagdiag2d-small.gif b/assets/grid-iterators/zigzagdiag2d-small.gif
new file mode 100644
index 0000000000..20024bb053
Binary files /dev/null and b/assets/grid-iterators/zigzagdiag2d-small.gif differ
diff --git a/assets/grid-iterators/zigzagrows2d-small.gif b/assets/grid-iterators/zigzagrows2d-small.gif
new file mode 100644
index 0000000000..0b3a7a768e
Binary files /dev/null and b/assets/grid-iterators/zigzagrows2d-small.gif differ
diff --git a/assets/hdom-canvas/hdom-canvas-shapes-results.png b/assets/hdom-canvas/hdom-canvas-shapes-results.png
new file mode 100644
index 0000000000..951545536c
Binary files /dev/null and b/assets/hdom-canvas/hdom-canvas-shapes-results.png differ
diff --git a/assets/hdom-canvas-shapes.png b/assets/hdom-canvas/hdom-canvas-shapes.png
similarity index 100%
rename from assets/hdom-canvas-shapes.png
rename to assets/hdom-canvas/hdom-canvas-shapes.png
diff --git a/assets/hdom-dataflow.png b/assets/hdom/hdom-dataflow.png
similarity index 100%
rename from assets/hdom-dataflow.png
rename to assets/hdom/hdom-dataflow.png
diff --git a/assets/screenshots/iges.png b/assets/iges/iges-houdini.png
similarity index 100%
rename from assets/screenshots/iges.png
rename to assets/iges/iges-houdini.png
diff --git a/assets/imgui/imgui-all.png b/assets/imgui/imgui-all.png
new file mode 100644
index 0000000000..30bea6fc37
Binary files /dev/null and b/assets/imgui/imgui-all.png differ
diff --git a/assets/imgui/imgui-demo.png b/assets/imgui/imgui-demo.png
new file mode 100644
index 0000000000..66a002923a
Binary files /dev/null and b/assets/imgui/imgui-demo.png differ
diff --git a/assets/imgui/imgui-layout.drawio b/assets/imgui/imgui-layout.drawio
new file mode 100644
index 0000000000..74788cc390
--- /dev/null
+++ b/assets/imgui/imgui-layout.drawio
@@ -0,0 +1 @@
+7VhNj5swFPw1SO0hK74Tjht2afcQaatIba9OcMCqwdQ4C+mvr41NCAHaVBvotkoOwR4/P5uZ4WGhWX5SfqAgi1ckhFgz9bDUrAfNNB1L5/8COEjAXtgSiCgKJWQ0wBr9gApU86I9CmHeCmSEYIayNrglaQq3rIUBSknRDtsR3F41AxHsAOstwF30CwpZLNGFozf4R4iiuF7Z0NVIAupgBeQxCElxAlmPmuVTQphsJaUPseCu5kXOCwZGjxujMGWXTPiMX7aB++l5/vX+m+tlIXvaoZnK8gLwXt0wBgeyZ3cpLNm792rn7FDTQck+DaHIqGvWsogRg+sMbMVowfXnWMwSzHsGb+5IygKQICy0f1queKpnDEt+WZGUiACEsU8woVVyK+A/3+e42hSkDJaDd2scOeTegySBjB54iJqwUKwf2t2i0dCulYpP9LMVBpRtomPihlneUOT+AdFmh2jNdDFfdZlnIG2R7H7fC09U9M12ir97TcjrgiSr+LEsm1/RJhGkSE4Twel5hJhV/VdSzXKplUiWEpoA3KzGW5G4nukv98hvWW5TxrzSFpOpblh/W3ZrUHahrihIkqVGh+5z0pGIFYTzl3c1kjlH0Mj3g+DRHUejnkfT8OwJNbJvGp1rZNZv6V+K5E4o0rxPJFnr0k2eqVJ3CfQaytUpA2yq2fp1yDbseYtss6dquT1Fy/DGInvx/5JtGs5vyXa8Kck2/pmjwWBNG+1sMGZN61O+t6aNp/zw6WBQ+YvFusI7DPHnj0q1NWfJ2fVtzXkYfpmN4AdKGGCIpLw78/SuQVxXHB+vVYfb/vCcHn/01GF3NH8Mn0xu/pjeHwvzrfnDufnjDfnDsL07ZzKL8G7z7agaO/kAZz3+BA==
\ No newline at end of file
diff --git a/assets/imgui/imgui-layout.png b/assets/imgui/imgui-layout.png
new file mode 100644
index 0000000000..98bcc8b4c7
Binary files /dev/null and b/assets/imgui/imgui-layout.png differ
diff --git a/assets/lsys-0.png b/assets/lsys/lsys-0.png
similarity index 100%
rename from assets/lsys-0.png
rename to assets/lsys/lsys-0.png
diff --git a/assets/lsys-1.png b/assets/lsys/lsys-1.png
similarity index 100%
rename from assets/lsys-1.png
rename to assets/lsys/lsys-1.png
diff --git a/assets/lsys-2.png b/assets/lsys/lsys-2.png
similarity index 100%
rename from assets/lsys-2.png
rename to assets/lsys/lsys-2.png
diff --git a/assets/lsys-3.png b/assets/lsys/lsys-3.png
similarity index 100%
rename from assets/lsys-3.png
rename to assets/lsys/lsys-3.png
diff --git a/assets/lsys-tree.png b/assets/lsys/lsys-tree.png
similarity index 100%
rename from assets/lsys-tree.png
rename to assets/lsys/lsys-tree.png
diff --git a/assets/malloc/compact-01.png b/assets/malloc/compact-01.png
new file mode 100644
index 0000000000..67df49c8af
Binary files /dev/null and b/assets/malloc/compact-01.png differ
diff --git a/assets/malloc/compact-02.png b/assets/malloc/compact-02.png
new file mode 100644
index 0000000000..dad61c01e0
Binary files /dev/null and b/assets/malloc/compact-02.png differ
diff --git a/assets/malloc/compact-03.png b/assets/malloc/compact-03.png
new file mode 100644
index 0000000000..078aae5cf8
Binary files /dev/null and b/assets/malloc/compact-03.png differ
diff --git a/assets/malloc/malloc-layout.png b/assets/malloc/malloc-layout.png
new file mode 100644
index 0000000000..90259f97a8
Binary files /dev/null and b/assets/malloc/malloc-layout.png differ
diff --git a/assets/malloc/split-01.png b/assets/malloc/split-01.png
new file mode 100644
index 0000000000..7039c867ea
Binary files /dev/null and b/assets/malloc/split-01.png differ
diff --git a/assets/malloc/split-02.png b/assets/malloc/split-02.png
new file mode 100644
index 0000000000..d951de6de6
Binary files /dev/null and b/assets/malloc/split-02.png differ
diff --git a/assets/pixel/pixel-basics.png b/assets/pixel/pixel-basics.png
new file mode 100644
index 0000000000..02142f0835
Binary files /dev/null and b/assets/pixel/pixel-basics.png differ
diff --git a/assets/screenshots/poisson.jpg b/assets/poisson/poisson.jpg
similarity index 100%
rename from assets/screenshots/poisson.jpg
rename to assets/poisson/poisson.jpg
diff --git a/assets/poisson/poisson.png b/assets/poisson/poisson.png
new file mode 100644
index 0000000000..a576d311a5
Binary files /dev/null and b/assets/poisson/poisson.png differ
diff --git a/assets/porter-duff-custom.png b/assets/porter-duff/porter-duff-custom.png
similarity index 100%
rename from assets/porter-duff-custom.png
rename to assets/porter-duff/porter-duff-custom.png
diff --git a/assets/porter-duff2.png b/assets/porter-duff/porter-duff2.png
similarity index 100%
rename from assets/porter-duff2.png
rename to assets/porter-duff/porter-duff2.png
diff --git a/assets/rle-layout.png b/assets/rle/rle-layout.png
similarity index 100%
rename from assets/rle-layout.png
rename to assets/rle/rle-layout.png
diff --git a/assets/rstream-merge.png b/assets/rstream/rstream-merge.png
similarity index 100%
rename from assets/rstream-merge.png
rename to assets/rstream/rstream-merge.png
diff --git a/assets/rstream-pubsub.png b/assets/rstream/rstream-pubsub.png
similarity index 100%
rename from assets/rstream-pubsub.png
rename to assets/rstream/rstream-pubsub.png
diff --git a/assets/rstream-sidechain-partition.png b/assets/rstream/rstream-sidechain-partition.png
similarity index 100%
rename from assets/rstream-sidechain-partition.png
rename to assets/rstream/rstream-sidechain-partition.png
diff --git a/assets/rstream-sidechain-toggle.png b/assets/rstream/rstream-sidechain-toggle.png
similarity index 100%
rename from assets/rstream-sidechain-toggle.png
rename to assets/rstream/rstream-sidechain-toggle.png
diff --git a/assets/rstream-sync.png b/assets/rstream/rstream-sync.png
similarity index 100%
rename from assets/rstream-sync.png
rename to assets/rstream/rstream-sync.png
diff --git a/assets/screenshots/pixel-basics.jpg b/assets/screenshots/pixel-basics.jpg
deleted file mode 100644
index 31a74dd963..0000000000
Binary files a/assets/screenshots/pixel-basics.jpg and /dev/null differ
diff --git a/assets/screenshots/shader-ast-01.jpg b/assets/shader-ast/shader-ast-01.jpg
similarity index 100%
rename from assets/screenshots/shader-ast-01.jpg
rename to assets/shader-ast/shader-ast-01.jpg
diff --git a/assets/screenshots/shader-ast-raymarch-compare.jpg b/assets/shader-ast/shader-ast-raymarch-compare.jpg
similarity index 100%
rename from assets/screenshots/shader-ast-raymarch-compare.jpg
rename to assets/shader-ast/shader-ast-raymarch-compare.jpg
diff --git a/assets/screenshots/shader-ast-raymarch-vex-sm.gif b/assets/shader-ast/shader-ast-raymarch-vex-sm.gif
similarity index 100%
rename from assets/screenshots/shader-ast-raymarch-vex-sm.gif
rename to assets/shader-ast/shader-ast-raymarch-vex-sm.gif
diff --git a/assets/transducers/hermite-tx.png b/assets/transducers/hermite-tx.png
new file mode 100644
index 0000000000..70a7603e06
Binary files /dev/null and b/assets/transducers/hermite-tx.png differ
diff --git a/examples/README.md b/examples/README.md
index 197af60cf7..1797321eb6 100644
--- a/examples/README.md
+++ b/examples/README.md
@@ -37,41 +37,45 @@ in touch via PR, issue tracker, email or twitter!
| 26 | [hdom-vscroller](./hdom-vscroller) | virtual scroller component for large tables / lists | hdom | advanced |
| 27 | [hmr-basics](./hmr-basics) | hdom & hot module replacement | hdom, memoize | basic |
| 28 | [hydrate-basics](./hydrate-basics) | hiccup / hdom DOM hydration | hiccup, hdom | intermediate |
-| 29 | [interceptor-basics](./interceptor-basics) | Event handling w/ interceptors and side effects | atom, hdom, interceptors | basic |
-| 30 | [interceptor-basics2](./interceptor-basics2) | Event handling w/ interceptors and side effects | atom, hdom, interceptors | intermediate |
-| 31 | [iso-plasma](./iso-plasma) | 2D contour line extraction & animation | geom, geom-isoline | intermediate |
-| 32 | [json-components](./json-components) | JSON->component transformation, live editor | hdom, transducers | intermediate |
-| 33 | [local-state](./local-state) | Local component state w/o HOF | hdom, paths | basic |
-| 34 | [login-form](./login-form) | Basic SPA without router | atom, hdom | intermediate |
-| 35 | [mandelbrot](./mandelbrot) | Worker-based mandelbrot fractal renderer | rstream, rstream-gestures, transducers-hdom | advanced |
-| 36 | [markdown](./markdown) | Markdown parser & editor w/ live preview | fsm, rstream, transducers-hdom | advanced |
-| 37 | [package-stats](./package-stats) | CLI util to visualize umbrella pkg stats | hiccup-svg, transducers | intermediate |
-| 38 | [pixel-basics](./pixel-basics) | Pixel buffer manipulations | pixel | basic |
-| 39 | [pointfree-svg](./pointfree-svg) | Generate SVG using pointfree DSL | hiccup, hiccup-svg, pointfree-lang | intermediate |
-| 40 | [poly-spline](./poly-spline) | Polygon to cubic curve conversion & visualization | geom, hiccup-svg, hdom, rstream | intermediate |
-| 41 | [porter-duff](./porter-duff) | Port-Duff image compositing / alpha blending | porter-duff, pixel | basic |
-| 42 | [rotating-voronoi](./rotating-voronoi) | Animated Voronoi diagram, cubic splines & SVG download | geom, hdom, hdom-canvas, rstream, transducers | intermediate |
-| 43 | [router-basics](./router-basics) | Complete mini SPA | atom, hdom, interceptors, router | advanced |
-| 44 | [rstream-dataflow](./rstream-dataflow) | Dataflow graph | atom, hdom, rstream, rstream-gestures, rstream-graph, transducers | intermediate |
-| 45 | [rstream-grid](./rstream-grid) | Dataflow graph SVG grid | atom, hdom, hiccup-svg, interceptors, rstream-graph, transducers | advanced |
-| 46 | [rstream-hdom](./rstream-hdom) | rstream based UI updates & state handling | hdom, rstream, transducers | intermediate |
-| 47 | [scenegraph](./scenegraph) | 2D scenegraph & shape picking | geom, hdom, hdom-canvas | intermediate |
-| 48 | [scenegraph-image](./scenegraph-image) | 2D scenegraph & image map based geometry manipulation | geom, hdom, hdom-canvas, pixel | intermediate |
-| 49 | [shader-ast-canvas2d](shader-ast-canvas2d) | 2D canvas shader emulation | shader-ast | basic |
-| 50 | [shader-ast-noise](shader-ast-noise) | HOF shader function composition | shader-ast, webgl | basic |
-| 51 | [shader-ast-raymarch](shader-ast-raymarch) | WebGL & Canvas2D raymarch shader | shader-ast, webgl | intermediate |
-| 52 | [shader-ast-sdf2d](shader-ast-sdf2d) | WebGL & Canvas2D SDF | shader-ast, webgl | basic |
-| 53 | [shader-ast-tunnel](shader-ast-tunnel) | WebGL & Canvas2D textured tunnel shader | shader-ast, webgl | basic |
-| 54 | [svg-barchart](./svg-barchart) | hdom SVG barchart component | hdom, transducers | basic |
-| 55 | [svg-particles](./svg-particles) | hdom SVG generation / animation | hdom, transducers | basic |
-| 56 | [svg-waveform](./svg-waveform) | hdom SVG generation / undo history | atom, hdom, hiccup-svg, interceptors, iterators | intermediate |
-| 57 | [talk-slides](./talk-slides) | Presentation slides from ClojureX 2018 | hdom, rstream, transducers-hdom | intermediate |
-| 58 | [todo-list](./todo-list) | Canonical Todo list with undo/redo | atom, hdom, transducers | intermediate |
-| 59 | [transducers-hdom](./transducers-hdom) | Transducer & rstream based hdom UI updates | hdom, rstream, transducers-hdom | basic |
-| 60 | [triple-query](./triple-query) | Triple store query results & sortable table | atom, hdom, hdom-components, rstream-query, transducers | intermediate |
-| 61 | [webgl-cubemap](./webgl-cubemap) | WebGL cubemap, async texture loading | hdom, webgl, shader-ast | intermediate |
-| 62 | [webgl-gpgpu-basics](./webgl-gpgpu-basics) | Minimal GPGPU example | webgl, shader-ast | basic |
-| 63 | [webgl-grid](./webgl-grid) | WebGL instancing | webgl, hdom | intermediate |
-| 64 | [webgl-msdf](./webgl-msdf) | WebGL MSDF font rendering & particle system | webgl, webgl-msdf, shader-ast, hdom | intermediate |
-| 65 | [webgl-ssao](./webgl-ssao) | WebGL screenspace ambient occlusion | webgl, shader-ast, rstream, hdom | advanced |
-| 66 | [xml-converter](./xml-converter) | XML/HTML/SVG to hiccup conversion as you type | rstream, sax, transducers, transducers-hdom | advanced |
+| 30 | [imgui](./imgui) | Canvas based immediate mode GUI | atom, hdom-canvas, imgui | advanced |
+| 31 | [interceptor-basics](./interceptor-basics) | Event handling w/ interceptors and side effects | atom, hdom, interceptors | basic |
+| 32 | [interceptor-basics2](./interceptor-basics2) | Event handling w/ interceptors and side effects | atom, hdom, interceptors | intermediate |
+| 33 | [iso-plasma](./iso-plasma) | 2D contour line extraction & animation | geom, geom-isoline | intermediate |
+| 34 | [json-components](./json-components) | JSON->component transformation, live editor | hdom, transducers | intermediate |
+| 35 | [local-state](./local-state) | Local component state w/o HOF | hdom, paths | basic |
+| 36 | [login-form](./login-form) | Basic SPA without router | atom, hdom | intermediate |
+| 37 | [mandelbrot](./mandelbrot) | Worker-based mandelbrot fractal renderer | rstream, rstream-gestures, transducers-hdom | advanced |
+| 38 | [markdown](./markdown) | Markdown parser & editor w/ live preview | fsm, rstream, transducers-hdom | advanced |
+| 39 | [package-stats](./package-stats) | CLI util to visualize umbrella pkg stats | hiccup-svg, transducers | intermediate |
+| 40 | [pixel-basics](./pixel-basics) | Pixel buffer manipulations | pixel | basic |
+| 41 | [pointfree-svg](./pointfree-svg) | Generate SVG using pointfree DSL | hiccup, hiccup-svg, pointfree-lang | intermediate |
+| 42 | [poly-spline](./poly-spline) | Polygon to cubic curve conversion & visualization | geom, hiccup-svg, hdom, rstream | intermediate |
+| 43 | [porter-duff](./porter-duff) | Port-Duff image compositing / alpha blending | porter-duff, pixel | basic |
+| 44 | [rotating-voronoi](./rotating-voronoi) | Animated Voronoi diagram, cubic splines & SVG download | geom, hdom, hdom-canvas, rstream, transducers | intermediate |
+| 45 | [router-basics](./router-basics) | Complete mini SPA | atom, hdom, interceptors, router | advanced |
+| 46 | [rstream-dataflow](./rstream-dataflow) | Dataflow graph | atom, hdom, rstream, rstream-gestures, rstream-graph, transducers | intermediate |
+| 47 | [rstream-grid](./rstream-grid) | Dataflow graph SVG grid | atom, hdom, hiccup-svg, interceptors, rstream-graph, transducers | advanced |
+| 48 | [rstream-hdom](./rstream-hdom) | rstream based UI updates & state handling | hdom, rstream, transducers | intermediate |
+| 49 | [rstream-spreadsheet](./rstream-spreadsheet) | Spreadsheet w/ S-expr formula DSL | hdom, rstream-graph, sexpr, transducers | advanced |
+| 50 | [scenegraph](./scenegraph) | 2D scenegraph & shape picking | geom, hdom, hdom-canvas | intermediate |
+| 51 | [scenegraph-image](./scenegraph-image) | 2D scenegraph & image map based geometry manipulation | geom, hdom, hdom-canvas, pixel | intermediate |
+| 52 | [shader-ast-canvas2d](shader-ast-canvas2d) | 2D canvas shader emulation | shader-ast | basic |
+| 53 | [shader-ast-noise](shader-ast-noise) | HOF shader function composition | shader-ast, webgl | basic |
+| 54 | [shader-ast-raymarch](shader-ast-raymarch) | WebGL & Canvas2D raymarch shader | shader-ast, webgl | intermediate |
+| 55 | [shader-ast-sdf2d](shader-ast-sdf2d) | WebGL & Canvas2D SDF | shader-ast, webgl | basic |
+| 56 | [shader-ast-tunnel](shader-ast-tunnel) | WebGL & Canvas2D textured tunnel shader | shader-ast, webgl | basic |
+| 57 | [svg-barchart](./svg-barchart) | hdom SVG barchart component | hdom, transducers | basic |
+| 58 | [svg-particles](./svg-particles) | hdom SVG generation / animation | hdom, transducers | basic |
+| 59 | [svg-waveform](./svg-waveform) | hdom SVG generation / undo history | atom, hdom, hiccup-svg, interceptors, iterators | intermediate |
+| 60 | [talk-slides](./talk-slides) | Presentation slides from ClojureX 2018 | hdom, rstream, transducers-hdom | intermediate |
+| 61 | [todo-list](./todo-list) | Canonical Todo list with undo/redo | atom, hdom, transducers | intermediate |
+| 62 | [transducers-hdom](./transducers-hdom) | Transducer & rstream based hdom UI updates | hdom, rstream, transducers-hdom | basic |
+| 63 | [triple-query](./triple-query) | Triple store query results & sortable table | atom, hdom, hdom-components, rstream-query, transducers | intermediate |
+| 64 | [webgl-cubemap](./webgl-cubemap) | WebGL cubemap, async texture loading | hdom, webgl, shader-ast | intermediate |
+| 65 | [webgl-grid](./webgl-grid) | WebGL instancing | webgl, hdom | intermediate |
+| 66 | [webgl-msdf](./webgl-msdf) | WebGL MSDF font rendering & particle system | webgl, webgl-msdf, shader-ast, hdom | intermediate |
+| 67 | [webgl-multipass](./webgl-multipass) | Minimal multi-pass / GPGPU example | webgl, shader-ast, shader-ast-stdlib | intermediate |
+| 68 | [webgl-shadertoy](./webgl-shadertoy) | Shadertoy-like example | webgl, shader-ast, shader-ast-stdlib | basic |
+| 69 | [webgl-ssao](./webgl-ssao) | WebGL screenspace ambient occlusion | webgl, shader-ast, rstream, hdom | advanced |
+| 70 | [wolfram](./wolfram) | 1D Wolfram automata | rstream, transducers, transducers-hdom | intermediate |
+| 71 | [xml-converter](./xml-converter) | XML/HTML/SVG to hiccup conversion as you type | rstream, sax, transducers, transducers-hdom | advanced |
diff --git a/examples/async-effect/package.json b/examples/async-effect/package.json
index b20a7a9221..35ea028f69 100644
--- a/examples/async-effect/package.json
+++ b/examples/async-effect/package.json
@@ -11,9 +11,9 @@
"start": "yarn prep && parcel index.html -p 8080 --open -d out"
},
"devDependencies": {
- "parcel-bundler": "^1.12.3",
- "terser": "^4.0.0",
- "typescript": "^3.5.3"
+ "parcel-bundler": "^1.12.4",
+ "terser": "^4.3.8",
+ "typescript": "^3.6.4"
},
"dependencies": {
"@thi.ng/api": "latest",
diff --git a/examples/bitmap-font/package.json b/examples/bitmap-font/package.json
index 78729bf554..f97eef3307 100644
--- a/examples/bitmap-font/package.json
+++ b/examples/bitmap-font/package.json
@@ -10,10 +10,10 @@
"start": "parcel index.html -p 8080 --open"
},
"devDependencies": {
- "parcel-bundler": "^1.12.3",
+ "parcel-bundler": "^1.12.4",
"rimraf": "^2.6.3",
- "terser": "^4.0.0",
- "typescript": "^3.5.3"
+ "terser": "^4.3.8",
+ "typescript": "^3.6.4"
},
"dependencies": {
"@thi.ng/api": "latest",
diff --git a/examples/canvas-dial/package.json b/examples/canvas-dial/package.json
index da55003e1e..5f0715d7f7 100644
--- a/examples/canvas-dial/package.json
+++ b/examples/canvas-dial/package.json
@@ -10,9 +10,9 @@
"start": "parcel index.html -p 8080 --open"
},
"devDependencies": {
- "parcel-bundler": "^1.12.3",
- "terser": "^4.0.0",
- "typescript": "^3.5.3"
+ "parcel-bundler": "^1.12.4",
+ "terser": "^4.3.8",
+ "typescript": "^3.6.4"
},
"dependencies": {
"@thi.ng/api": "latest",
diff --git a/examples/cellular-automata/package.json b/examples/cellular-automata/package.json
index 85771d8c1a..626ae12513 100644
--- a/examples/cellular-automata/package.json
+++ b/examples/cellular-automata/package.json
@@ -10,9 +10,9 @@
"start": "parcel index.html -p 8080 --open"
},
"devDependencies": {
- "parcel-bundler": "^1.12.3",
- "terser": "^4.0.0",
- "typescript": "^3.5.3"
+ "parcel-bundler": "^1.12.4",
+ "terser": "^4.3.8",
+ "typescript": "^3.6.4"
},
"dependencies": {
"@thi.ng/hdom": "latest",
diff --git a/examples/commit-table-ssr/package.json b/examples/commit-table-ssr/package.json
index 40f075708d..f47acb7700 100644
--- a/examples/commit-table-ssr/package.json
+++ b/examples/commit-table-ssr/package.json
@@ -12,9 +12,9 @@
"start": "tsc && node build/server/index.js"
},
"devDependencies": {
- "parcel-bundler": "^1.12.3",
- "terser": "^4.0.0",
- "typescript": "^3.5.3"
+ "parcel-bundler": "^1.12.4",
+ "terser": "^4.3.8",
+ "typescript": "^3.6.4"
},
"dependencies": {
"express": "^4.16.3",
diff --git a/examples/crypto-chart/README.md b/examples/crypto-chart/README.md
index 5a4dc6df14..79615ce6aa 100644
--- a/examples/crypto-chart/README.md
+++ b/examples/crypto-chart/README.md
@@ -2,7 +2,7 @@
[Live demo](https://s3.amazonaws.com/demo.thi.ng/umbrella/crypto-chart/index.html)
-![chart](https://raw.githubusercontent.com/thi-ng/umbrella/master/assets/screenshots/crypto-chart.png)
+![chart](https://raw.githubusercontent.com/thi-ng/umbrella/master/assets/examples/crypto-chart.png)
Price data provided by [cryptocompare.com](https://min-api.cryptocompare.com/).
@@ -20,7 +20,7 @@ updates / diffs when there were any relevant upstream value changes.
The diagram below shows a schematic of the dataflow graph used:
-![dataflow](https://raw.githubusercontent.com/thi-ng/umbrella/master/assets/crypto-dflow.png)
+![dataflow](https://raw.githubusercontent.com/thi-ng/umbrella/master/assets/examples/crypto-dflow.png)
## Building
diff --git a/examples/crypto-chart/package.json b/examples/crypto-chart/package.json
index b20dc1c255..73f3ed9453 100644
--- a/examples/crypto-chart/package.json
+++ b/examples/crypto-chart/package.json
@@ -10,9 +10,9 @@
"start": "parcel index.html -p 8080 --open"
},
"devDependencies": {
- "parcel-bundler": "^1.12.3",
- "terser": "^4.0.0",
- "typescript": "^3.5.3"
+ "parcel-bundler": "^1.12.4",
+ "terser": "^4.3.8",
+ "typescript": "^3.6.4"
},
"dependencies": {
"@thi.ng/hdom-components": "latest",
diff --git a/examples/dashboard/package.json b/examples/dashboard/package.json
index 93747e4c32..37b4550b6b 100644
--- a/examples/dashboard/package.json
+++ b/examples/dashboard/package.json
@@ -10,9 +10,9 @@
"start": "parcel index.html -p 8080 --open"
},
"devDependencies": {
- "parcel-bundler": "^1.12.3",
- "terser": "^4.0.0",
- "typescript": "^3.5.3"
+ "parcel-bundler": "^1.12.4",
+ "terser": "^4.3.8",
+ "typescript": "^3.6.4"
},
"dependencies": {
"@thi.ng/hdom": "latest"
diff --git a/examples/devcards/package.json b/examples/devcards/package.json
index 0270f807ce..d451ce3eb7 100644
--- a/examples/devcards/package.json
+++ b/examples/devcards/package.json
@@ -10,9 +10,9 @@
"start": "parcel index.html -p 8080 --open"
},
"devDependencies": {
- "parcel-bundler": "^1.12.3",
- "terser": "^4.0.0",
- "typescript": "^3.5.3"
+ "parcel-bundler": "^1.12.4",
+ "terser": "^4.3.8",
+ "typescript": "^3.6.4"
},
"dependencies": {
"@thi.ng/api": "latest",
diff --git a/examples/geom-convex-hull/package.json b/examples/geom-convex-hull/package.json
index 618dd0c4a9..f151c9ea00 100644
--- a/examples/geom-convex-hull/package.json
+++ b/examples/geom-convex-hull/package.json
@@ -11,9 +11,9 @@
"start": "parcel index.html -p 8080 --open"
},
"devDependencies": {
- "parcel-bundler": "^1.12.3",
+ "parcel-bundler": "^1.12.4",
"terser": "^3.17.0",
- "typescript": "^3.5.3"
+ "typescript": "^3.6.4"
},
"dependencies": {
"@thi.ng/geom": "latest",
diff --git a/examples/geom-convex-hull/src/webpack.d.ts b/examples/geom-convex-hull/src/webpack.d.ts
new file mode 100644
index 0000000000..6e39ca7616
--- /dev/null
+++ b/examples/geom-convex-hull/src/webpack.d.ts
@@ -0,0 +1,3 @@
+declare module "*.jpg";
+declare module "*.png";
+declare module "*.svg";
diff --git a/examples/geom-knn/package.json b/examples/geom-knn/package.json
index 784211b33b..a445b6f7e3 100644
--- a/examples/geom-knn/package.json
+++ b/examples/geom-knn/package.json
@@ -10,9 +10,9 @@
"start": "parcel index.html -p 8080 --open"
},
"devDependencies": {
- "parcel-bundler": "^1.12.3",
- "terser": "^4.0.0",
- "typescript": "^3.5.3"
+ "parcel-bundler": "^1.12.4",
+ "terser": "^4.3.8",
+ "typescript": "^3.6.4"
},
"dependencies": {
"@thi.ng/bench": "latest",
diff --git a/examples/geom-tessel/package.json b/examples/geom-tessel/package.json
index 2c8e9f432b..9a34a6bb5f 100644
--- a/examples/geom-tessel/package.json
+++ b/examples/geom-tessel/package.json
@@ -10,9 +10,9 @@
"start": "parcel index.html -p 8080 --open"
},
"devDependencies": {
- "parcel-bundler": "^1.12.3",
- "terser": "^4.0.0",
- "typescript": "^3.5.3"
+ "parcel-bundler": "^1.12.4",
+ "terser": "^4.3.8",
+ "typescript": "^3.6.4"
},
"dependencies": {
"@thi.ng/compose": "latest",
diff --git a/examples/gesture-analysis/package.json b/examples/gesture-analysis/package.json
index 4965165086..657d9daccb 100644
--- a/examples/gesture-analysis/package.json
+++ b/examples/gesture-analysis/package.json
@@ -10,9 +10,9 @@
"start": "parcel index.html -p 8080 --open"
},
"devDependencies": {
- "parcel-bundler": "^1.12.3",
- "terser": "^4.0.0",
- "typescript": "^3.5.3"
+ "parcel-bundler": "^1.12.4",
+ "terser": "^4.3.8",
+ "typescript": "^3.6.4"
},
"dependencies": {
"@thi.ng/arrays": "latest",
diff --git a/examples/webgl-gpgpu-basics/.gitignore b/examples/grid-iterators/.gitignore
similarity index 100%
rename from examples/webgl-gpgpu-basics/.gitignore
rename to examples/grid-iterators/.gitignore
diff --git a/examples/grid-iterators/README.md b/examples/grid-iterators/README.md
new file mode 100644
index 0000000000..0d69adb255
--- /dev/null
+++ b/examples/grid-iterators/README.md
@@ -0,0 +1,13 @@
+# grid-iterators
+
+[Live demo](http://demo.thi.ng/umbrella/grid-iterators/)
+
+Please refer to the [example build instructions](https://github.com/thi-ng/umbrella/wiki/Example-build-instructions) on the wiki.
+
+## Authors
+
+- Karsten Schmidt
+
+## License
+
+© 2019 Karsten Schmidt // Apache Software License 2.0
diff --git a/examples/webgl-gpgpu-basics/index.html b/examples/grid-iterators/index.html
similarity index 66%
rename from examples/webgl-gpgpu-basics/index.html
rename to examples/grid-iterators/index.html
index 92708882b3..f32d747f32 100644
--- a/examples/webgl-gpgpu-basics/index.html
+++ b/examples/grid-iterators/index.html
@@ -4,7 +4,7 @@
- webgl-gpgpu-basics
+ grid-iterators
- webgl-gpgpu-basics
- Open console to view results...
+
+