From 222f5c39f47d4e65c29099f02025d59cc2801eb2 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Tue, 22 Dec 2020 23:31:05 +0000 Subject: [PATCH 01/51] docs(fuzzy): update readme (fix docstrings/links) --- packages/fuzzy/README.md | 5 +++-- packages/fuzzy/src/strategies/maxima.ts | 4 ++-- packages/fuzzy/tpl.readme.md | 5 +++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/fuzzy/README.md b/packages/fuzzy/README.md index bc551c3f72..090ff86796 100644 --- a/packages/fuzzy/README.md +++ b/packages/fuzzy/README.md @@ -140,6 +140,7 @@ const temp = variable( } ); +// evaluate all fuzzy sets for given domain value evaluate(temp, 18) // { // freezing: 2.220446049250313e-16, @@ -237,8 +238,8 @@ Using `instrumentStrategy()` from the upcoming package, we can also visualize the final, transformed fuzzy sets used to compute crisp results and highlight the position of the crisp result value. -Here is the ASCII art output for the [COG -strategy](https://github.com/thi-ng/umbrella/blob/develop/packages/fuzzy/src/strategy/centroid.ts) +Here is the ASCII art output for the +[`centroidStrategy`](https://github.com/thi-ng/umbrella/blob/develop/packages/fuzzy/src/strategies/centroid.ts) and using `tnormMin` (the default) to transform each rule's output set(s): ```ts diff --git a/packages/fuzzy/src/strategies/maxima.ts b/packages/fuzzy/src/strategies/maxima.ts index 684cd0b0d8..65600f2791 100644 --- a/packages/fuzzy/src/strategies/maxima.ts +++ b/packages/fuzzy/src/strategies/maxima.ts @@ -103,7 +103,7 @@ export const firstOfMaximaStrategy = ( }; /** - * Higher-order function. Returns First-of-Maxima defuzzification strategy, + * Higher-order function. Returns Last-of-Maxima defuzzification strategy, * yielding the approx. final position of the maximum region of a given fuzzy * set. * @@ -115,7 +115,7 @@ export const firstOfMaximaStrategy = ( * @example * ```ts * lastOfMaximaStrategy()(trapezoid(0,1,5,6), [0,6]) - * // 1.02 + * // 4.98 * * // ......▁██████████████████████████|▁..... * // ......███████████████████████████|█..... diff --git a/packages/fuzzy/tpl.readme.md b/packages/fuzzy/tpl.readme.md index 9888ca4570..81587da030 100644 --- a/packages/fuzzy/tpl.readme.md +++ b/packages/fuzzy/tpl.readme.md @@ -115,6 +115,7 @@ const temp = variable( } ); +// evaluate all fuzzy sets for given domain value evaluate(temp, 18) // { // freezing: 2.220446049250313e-16, @@ -212,8 +213,8 @@ Using `instrumentStrategy()` from the upcoming package, we can also visualize the final, transformed fuzzy sets used to compute crisp results and highlight the position of the crisp result value. -Here is the ASCII art output for the [COG -strategy](https://github.com/thi-ng/umbrella/blob/develop/packages/fuzzy/src/strategy/centroid.ts) +Here is the ASCII art output for the +[`centroidStrategy`](https://github.com/thi-ng/umbrella/blob/develop/packages/fuzzy/src/strategies/centroid.ts) and using `tnormMin` (the default) to transform each rule's output set(s): ```ts From 1f2d35b306c30bfecd168f25abd0ead18e2fdf2a Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Wed, 23 Dec 2020 16:17:22 +0000 Subject: [PATCH 02/51] feat(text-canvas): add ANSI256 & HTML_565 formatters --- packages/text-canvas/src/ansi.ts | 19 ++++++++++++++ packages/text-canvas/src/html.ts | 45 ++++++++++++++++++++++++++++---- 2 files changed, 59 insertions(+), 5 deletions(-) diff --git a/packages/text-canvas/src/ansi.ts b/packages/text-canvas/src/ansi.ts index d1d87704c5..0e522b409f 100644 --- a/packages/text-canvas/src/ansi.ts +++ b/packages/text-canvas/src/ansi.ts @@ -26,3 +26,22 @@ export const FMT_ANSI16: StringFormat = { prefix: ANSI_RESET, suffix: "\n", }; + +export const FMT_ANSI256: StringFormat = { + start: (x: number) => `\x1b[38;5;${x & 0xff};48;5;${x >>> 16}m`, + end: ANSI_RESET, + prefix: ANSI_RESET, + suffix: "\n", +}; + +/** + * Takes 2 ANSI256 values and returns a combined 16bit format ID. + * + * @remarks + * https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit + * + * @param fg + * @param bg + */ +export const format256 = (fg: number, bg = 0) => + ((bg & 0xff) << 8) | (fg & 0xff); diff --git a/packages/text-canvas/src/html.ts b/packages/text-canvas/src/html.ts index e13ae932f1..7474eace59 100644 --- a/packages/text-canvas/src/html.ts +++ b/packages/text-canvas/src/html.ts @@ -1,8 +1,10 @@ import { memoize1 } from "@thi.ng/memoize"; +import { U8 } from "@thi.ng/strings"; import type { HtmlFormatOpts, StringFormat } from "./api"; /** - * Constructs an HTML formatter using given config options. + * Constructs an HTML formatter using given config options and for use w/ + * default format IDs only. * * @param opts */ @@ -34,8 +36,8 @@ export const formatHtml = ({ }); /** - * Preset HTML string formatter, generating `` elements with - * inline CSS. + * Preset HTML string formatter for use w/ default format IDs, generating + * `` elements with inline CSS. */ export const FMT_HTML_INLINE_CSS = formatHtml({ colors: [ @@ -66,8 +68,8 @@ export const FMT_HTML_INLINE_CSS = formatHtml({ }); /** - * Preset HTML formatter, generating `` elements with Tachyons CSS - * classes. + * Preset HTML formatter for use w/ default format IDs, generating `` + * elements with Tachyons CSS classes. */ export const FMT_HTML_TACHYONS = formatHtml({ colors: [ @@ -96,3 +98,36 @@ export const FMT_HTML_TACHYONS = formatHtml({ dim: "o-50", underline: "underline", }); + +const S5 = 255 / 31; +const S6 = 255 / 63; + +/** + * Higher order custom HTML formatter for 16bit (RGB565) colors (without + * additional formatting flags). By default assigns text color, but can be + * assigned to any CSS property via given `prop` argument. + * + * @param prop + */ +export const FMT_HTML_565 = (prop = "color"): StringFormat => ({ + start: memoize1( + (x) => + `` + ), + end: "", + prefix: "", + suffix: "
", +}); + +/** + * Takes normalized RGB values ([0..1] range) and converts them into an RGB565 + * value. Does NOT perform clipping. + * + * @param r + * @param g + * @param b + */ +export const format565 = (r: number, g: number, b: number) => + ((r * 0x1f) << 11) | ((g * 0x3f) << 5) | (b * 0x1f); From 34037ad4ec87027779c72b683c3a4194f1995e79 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Wed, 23 Dec 2020 16:24:02 +0000 Subject: [PATCH 03/51] feat(text-canvas): add imageRaw(), update image() - add imageRaw() for direct use of pixels as format data (e.g. for FMT_HTML_565) - update ImageOpts.format to allow functions - update Canvas ctor, initial clear value to include format --- packages/text-canvas/src/api.ts | 8 +++-- packages/text-canvas/src/canvas.ts | 2 +- packages/text-canvas/src/image.ts | 55 +++++++++++++++++++++++++----- 3 files changed, 53 insertions(+), 12 deletions(-) diff --git a/packages/text-canvas/src/api.ts b/packages/text-canvas/src/api.ts index 624a33b509..0206c2051b 100644 --- a/packages/text-canvas/src/api.ts +++ b/packages/text-canvas/src/api.ts @@ -1,4 +1,4 @@ -import type { Fn, NumOrString } from "@thi.ng/api"; +import type { Fn, FnN, NumOrString } from "@thi.ng/api"; export enum Align { LEFT, @@ -40,9 +40,11 @@ export interface ImageOpts { */ chars: NumOrString[]; /** - * Format to apply to all chars. + * Format to apply to each pixel. If a function is given, it will be called + * for each pixel value, normalized to [0..1] interval (and after gamma + * correction). The function MUST return a valid format ID. */ - format: number; + format: number | FnN; /** * Gamma correction value / exponent. All source pixel values will * be raised by this exponent. diff --git a/packages/text-canvas/src/canvas.ts b/packages/text-canvas/src/canvas.ts index a0b8b5e4fa..20395aa028 100644 --- a/packages/text-canvas/src/canvas.ts +++ b/packages/text-canvas/src/canvas.ts @@ -21,8 +21,8 @@ export class Canvas { ) { this.width = width; this.height = height; - this.buf = new Uint32Array(width * height).fill(0x20); this.format = this.defaultFormat = format; + this.buf = new Uint32Array(width * height).fill(charCode(0x20, format)); this.styles = [style]; this.clipRects = [ { x1: 0, y1: 0, x2: width, y2: height, w: width, h: height }, diff --git a/packages/text-canvas/src/image.ts b/packages/text-canvas/src/image.ts index bea6f0d463..7d2d1ec827 100644 --- a/packages/text-canvas/src/image.ts +++ b/packages/text-canvas/src/image.ts @@ -1,4 +1,5 @@ import { peek } from "@thi.ng/arrays"; +import { isNumber } from "@thi.ng/checks"; import { ImageOpts, SHADES_BLOCK } from "./api"; import { Canvas } from "./canvas"; import { charCode, intersectRect } from "./utils"; @@ -115,6 +116,7 @@ export const image = ( bits: 8, ...opts, }; + const fmt = isNumber(format) ? () => format : format; const max = (1 << bits) - 1; const mask = invert ? max : 0; const norm = 1 / max; @@ -123,14 +125,51 @@ export const image = ( let sidx = sx + yy * w; let didx = x1 + dy * width; for (let xx = sx, dx = x1; dx < x2; xx++, dx++) { - buf[didx++] = charCode( - chars[ - (Math.pow((pixels[sidx++] ^ mask) * norm, gamma) * num + - 0.5) | - 0 - ], - format - ); + const col = Math.pow((pixels[sidx++] ^ mask) * norm, gamma); + buf[didx++] = charCode(chars[(col * num + 0.5) | 0], fmt(col)); + } + } +}; + +/** + * Optimized version of {@link image}, which only uses a single char for all + * pixels and applies pixel values directly as formatting data (for each pixel). + * + * @param canvas + * @param x + * @param y + * @param w + * @param h + * @param pixels + * @param char + */ +export const imageRaw = ( + canvas: Canvas, + x: number, + y: number, + w: number, + h: number, + pixels: ArrayLike, + char = "█" +) => { + x |= 0; + y |= 0; + w |= 0; + h |= 0; + const { buf, width } = canvas; + const { x1, y1, x2, y2, w: iw, h: ih } = intersectRect( + { x1: x, y1: y, x2: x + w, y2: y + h, w, h }, + peek(canvas.clipRects) + ); + if (!iw || !ih) return; + const sx = Math.max(0, x1 - x); + const sy = Math.max(0, y1 - y); + const code = char.charCodeAt(0); + for (let yy = sy, dy = y1; dy < y2; yy++, dy++) { + let sidx = sx + yy * w; + let didx = x1 + dy * width; + for (let xx = sx, dx = x1; dx < x2; xx++, dx++) { + buf[didx++] = code | ((pixels[sidx++] & 0xffff) << 16); } } }; From 07c9e7716d15057fac8952937145c63f96cb5dfc Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Wed, 23 Dec 2020 16:34:56 +0000 Subject: [PATCH 04/51] feat(examples): add text-canvas-image demo --- examples/text-canvas-image/.gitignore | 6 +++ examples/text-canvas-image/README.md | 13 +++++ examples/text-canvas-image/package.json | 30 +++++++++++ examples/text-canvas-image/public/index.html | 35 ++++++++++++ examples/text-canvas-image/snowpack.config.js | 29 ++++++++++ examples/text-canvas-image/src/index.ts | 45 ++++++++++++++++ examples/text-canvas-image/src/static.d.ts | 51 ++++++++++++++++++ examples/text-canvas-image/src/test.png | Bin 0 -> 8459 bytes examples/text-canvas-image/tsconfig.json | 8 +++ 9 files changed, 217 insertions(+) create mode 100644 examples/text-canvas-image/.gitignore create mode 100644 examples/text-canvas-image/README.md create mode 100644 examples/text-canvas-image/package.json create mode 100644 examples/text-canvas-image/public/index.html create mode 100644 examples/text-canvas-image/snowpack.config.js create mode 100644 examples/text-canvas-image/src/index.ts create mode 100644 examples/text-canvas-image/src/static.d.ts create mode 100644 examples/text-canvas-image/src/test.png create mode 100644 examples/text-canvas-image/tsconfig.json diff --git a/examples/text-canvas-image/.gitignore b/examples/text-canvas-image/.gitignore new file mode 100644 index 0000000000..211b157174 --- /dev/null +++ b/examples/text-canvas-image/.gitignore @@ -0,0 +1,6 @@ +build +dev +node_modules +yarn.lock +!snowpack.config.js +!*.d.ts diff --git a/examples/text-canvas-image/README.md b/examples/text-canvas-image/README.md new file mode 100644 index 0000000000..f65afd4f91 --- /dev/null +++ b/examples/text-canvas-image/README.md @@ -0,0 +1,13 @@ +# text-canvas-image + +[Live demo](http://demo.thi.ng/umbrella/text-canvas-image/) + +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/text-canvas-image/package.json b/examples/text-canvas-image/package.json new file mode 100644 index 0000000000..2c8b20b59b --- /dev/null +++ b/examples/text-canvas-image/package.json @@ -0,0 +1,30 @@ +{ + "name": "textcanvas-image", + "version": "0.0.1", + "description": "TODO", + "repository": "https://github.com/thi-ng/umbrella", + "author": "Karsten Schmidt ", + "license": "Apache-2.0", + "scripts": { + "clean": "../../node_modules/.bin/rimraf build node_modules/.cache", + "start": "../../node_modules/.bin/snowpack dev", + "build": "../../node_modules/.bin/snowpack build" + }, + "devDependencies": { + "@thi.ng/snowpack-env": "^2.3.3" + }, + "dependencies": { + "@thi.ng/pixel": "latest", + "@thi.ng/text-canvas": "latest" + }, + "browserslist": [ + "last 3 Chrome versions" + ], + "browser": { + "process": false + }, + "thi.ng": { + "readme": true, + "screenshot": "examples/text-canvas-image.png" + } +} diff --git a/examples/text-canvas-image/public/index.html b/examples/text-canvas-image/public/index.html new file mode 100644 index 0000000000..c3e990ab86 --- /dev/null +++ b/examples/text-canvas-image/public/index.html @@ -0,0 +1,35 @@ + + + + + + + text-canvas-image + + + + + +

+        
+        
+    
+
diff --git a/examples/text-canvas-image/snowpack.config.js b/examples/text-canvas-image/snowpack.config.js
new file mode 100644
index 0000000000..194cfe1778
--- /dev/null
+++ b/examples/text-canvas-image/snowpack.config.js
@@ -0,0 +1,29 @@
+/** @type {import("snowpack").SnowpackUserConfig } */
+module.exports = {
+    mount: {
+        public: "/",
+        src: "/_dist_",
+    },
+    plugins: [
+        "@snowpack/plugin-typescript",
+        [
+            "@snowpack/plugin-webpack",
+            {
+                extendConfig: (config) => {
+                    config.node = {
+                        process: false,
+                        setImmediate: false,
+                        util: "empty",
+                    };
+                    return config;
+                },
+            },
+        ],
+    ],
+    installOptions: {
+        installTypes: true,
+    },
+    buildOptions: {
+        baseUrl: "/umbrella/text-canvas-image",
+    },
+};
diff --git a/examples/text-canvas-image/src/index.ts b/examples/text-canvas-image/src/index.ts
new file mode 100644
index 0000000000..59e25f12cc
--- /dev/null
+++ b/examples/text-canvas-image/src/index.ts
@@ -0,0 +1,45 @@
+import { imagePromise, PackedBuffer, RGB565 } from "@thi.ng/pixel";
+import { canvas, FMT_HTML_565, setAt, toString } from "@thi.ng/text-canvas";
+import IMG from "./test.png";
+
+// text canvas size
+const W = 64;
+const H = 48;
+
+(async () => {
+    const el = document.getElementById("app")!;
+    const img = await imagePromise(IMG);
+    const iw = img.width;
+    const ih = img.height;
+    // create 16bit color buffer from image
+    const buf = PackedBuffer.fromImage(img, RGB565);
+    // create text canvas
+    const c = canvas(W, H, 0xffff);
+    // define 16bit formatter
+    const fmt = FMT_HTML_565();
+    // precalc charcode for each pixel
+    const char = "▓".charCodeAt(0);
+
+    let start = 0;
+
+    const update = (time: number) => {
+        if (!start) start = time;
+        const t = (time - start) * 0.001;
+        for (let y = 0; y < H; y++) {
+            const v = y / H;
+            for (let x = 0; x < W; x++) {
+                // compute texture coordinates
+                const u = x / W;
+                const uu = (u + 0.1 * Math.cos(u + 20 * v - 8 * t)) * iw;
+                const vv = (v + 0.1 * Math.sin(v + 20 * u + 8 * t)) * ih;
+                // set pixel w/ color from image
+                setAt(c, x, y, char, buf.getAt(uu, vv) || 0xffff);
+            }
+        }
+        // format text canvas as HTML spans
+        el.innerHTML = toString(c, fmt);
+        requestAnimationFrame(update);
+    };
+
+    requestAnimationFrame(update);
+})();
diff --git a/examples/text-canvas-image/src/static.d.ts b/examples/text-canvas-image/src/static.d.ts
new file mode 100644
index 0000000000..67d9623753
--- /dev/null
+++ b/examples/text-canvas-image/src/static.d.ts
@@ -0,0 +1,51 @@
+/* Use this file to declare any custom file extensions for importing */
+/* Use this folder to also add/extend a package d.ts file, if needed. */
+
+/* CSS MODULES */
+declare module "*.module.css" {
+    const classes: { [key: string]: string };
+    export default classes;
+}
+declare module "*.module.scss" {
+    const classes: { [key: string]: string };
+    export default classes;
+}
+declare module "*.module.sass" {
+    const classes: { [key: string]: string };
+    export default classes;
+}
+declare module "*.module.less" {
+    const classes: { [key: string]: string };
+    export default classes;
+}
+declare module "*.module.styl" {
+    const classes: { [key: string]: string };
+    export default classes;
+}
+
+/* CSS */
+declare module "*.css";
+declare module "*.scss";
+declare module "*.sass";
+declare module "*.less";
+declare module "*.styl";
+
+/* IMAGES */
+declare module "*.svg" {
+    const ref: string;
+    export default ref;
+}
+declare module "*.gif" {
+    const ref: string;
+    export default ref;
+}
+declare module "*.jpg" {
+    const ref: string;
+    export default ref;
+}
+declare module "*.png" {
+    const ref: string;
+    export default ref;
+}
+
+/* CUSTOM: ADD YOUR OWN HERE */
diff --git a/examples/text-canvas-image/src/test.png b/examples/text-canvas-image/src/test.png
new file mode 100644
index 0000000000000000000000000000000000000000..06c075bef35418bf762cca822b709f6fe5763991
GIT binary patch
literal 8459
zcmY*25*PK!%%r-K!DcNx66yE_ye+$ru1QoMyiad)RU6nAdlbIy0Z
zd-FUy+1XiHYw!HYk0eT2Q5u9sf(8HpK(aDYs((kZe+&iqx2Hqji~2jjxu{A@0BXia
z5B^S2on&-e007K^e+(}5J?7iL03C?BwyU1l80;3D8DO#Lr}z+eBLFdH@HzaXx*!qnOd%9N6h&K8tBtlX^Z)FNnAlpAH
zY#glYZ2#r{yH)6)sDP3)#Nw~=Kl~ybLjOYkpV)tNgxLNO|6j@cyV8F}|CTC(CdBsN
zV-rF9)W@I$08q%wN{OpmBUXE(`jX9hoh@4CbsWgGC)4RP(AGAglI-MT#Z&nXUU1Wrn&+p^!-3hCnbib?*hbdi2xCvo
z;6amET&A<XzRhl=@tXCqesT|E}wyq6O?d)JY{mY(X>cnL^|VTfo6?N-5ef}9Q;{+eqAB&YVIp`%J5AK+kHYDveD=C
zS&c+Bs!3W+RAz!+9M(Ym6dXEL*-+RgoL?$$II%9pk|LLoxGpe$mzbi-W=Cf+?$~@*
zqXXsX(yvgM=Mkb7i)v(w@O?I};xOFje;ge2=f=K>+4n)(ZZuUoav@ci58&OLt|WR2
z(a7X=`fO1f6RrEPpDs3p@43susl=RG{2etme)5lG+DK=3YqeZnI_jt$O
z)nkA}RZ2uFYPUU>;|&-^nP$~cA1;v@wB?2CvpqZcVw8-J%7Jh}9cz|~qU~1)fcZ0P
zGrEe_`>rah-A_zBmvETC$QFfv9h@cITQnC>qoXR~fW+BpbtQf+$ge20wOq@8q$Z}r
zja%xANT|YM_;?TXtPvF)bkQKEU>fOAp^zvUNoQNSYj4)l|7LT|PuZ68^;T8RNGc)?
zs8klY6#o@ZW<&>-StL#j89k*xex~^_wSLON<4ENjn5T
z*HU2t8l?+bPAsbg$%v{yP#EOCOc5|1c={QYmeIWV6XAZ^R$^xeK0iKS+p`j}mkg0o?t+3X~;%@>93
zbVFG87@Yio;ggur9`}@5;+UfJvODS2xc7WSJ&~Wp^wqnJDbN{>!9P+Z)EK)Lm>(==Qp`hB
zdAMuYu&8JFID%Xyjg0RpwW{bF;UpQu{ecxVfybP4ruMpK<^!u_B_Vi(tX4X@&l5Ai
z{^yle$r7y{Ruoa6+zcV>n;L|ZxSMCB#f
zl=Jm?bzofhyYN^-@VKT~uW=u-{|jIT^w?tpSg-H>Qv1hdq00dQMGC
zPy4dZv-E$&yl>}0{;|yVS6#Da~CZqQu=i0kGh&&
zjH3QfZ+pb)A6>*gMt1&dQ(8unya>LqpB;Y5mnF>ED_YF212aiX!z8rr+;Kff6ljMi
zD3m)YrfHfvqMom(d28;E^Nw8y@PSBsC4TNg?AogXzZ>&}`;a(h@iwF1d^CshOzV}*
zV)UMT4V2!;Zm=b0=g^;#b4p}FIi@Z6#4*4F#=s*{&xpU(lS=XSF~CZn&?T1b~R1q`J^wiYVLKXz%qCh3#?8B~8P20bkTG%7d(<
zsp0(dzfPD#i)ak`<16jbb<-xCp_((9Bb3!j8co|iSM@%>kT~lhj0Gd~+5|yuy^_-r
zBF#Y}+OmumzNZMJaJWop
zJ;9YN55|^--{LV4iAe&LY>KzhKOkAQc^t(e5m=VW#KX
z7(hszNG5+WEQJG1^|Be?f0ct};lixOW({I=1+>*I{7Gjx}|V4?(o0`eTl}JU@~}_yE)>^5LJ3c3sxw?
zgl;zipCUK|&CX}a`~jy`sc$f8IcSSHFtDlKY|6eT>#@KHg=f=>CnH#v9H~A4nJaXJ
zBOPHTA-54@0&L7c4B?PHxkj)hNbi9yQ+}SLaa}u7MzZX9m
zM<%0Agi@5*7rjV`1+z++=;doQ;sC99R6GzJTORpfQzM-$bmo6Y*q(=S+Qrx9d{J1&_N5tg7{oKF&%)k?ajv-a9_r)2Tw=W(Q$
zI1)bki84(O2j$^jZRRZYd6wI|h%y~BbwwKV)-3O}
zIxE)~C;Bh5T=SYT<1`FK0pA)sD}A@1U6(HDs~iMRM;;Ca9{1w2)BV%*!S2epgE#v_
z=1Nhwrb5F!!Z^T0%|oOOtZo7!1ARXE`9$OLF@4-Gi^s&pRy(;AS^Sl`T%|5QGAf5LMe#qN{+ZVuQ?Ye$
z3k*(VB<|
zUU=7Aa)gijqIp4D_Pt)y0CLjrFyz!82O{y^&>4L$6&5w$eyXC{I!>=F`x&Pwy@XYl
zv)^6LXAB-Ehk}=%!u7G2rO>wsQpzUO=wg3_YmV#AR{1Z{F_4LTm+Du>?`}z-P1F;=
zuVI0?JfA+x=LwC01H1;JLbTFM@lf^SWqWZ-CVyOsEl?8Hfle`Gvw>#BU4L$tRMrM3xr(H}(aNKBb>`b?
zVIO~pbm_VM8Ri48I#T+e0}qFibAJl0bg?-9=!eNaf8HpV5(cX3{o*p6kvh?3s8+|;
zLTbV2=X4rCX~I=z>NQiXh2R5FBDw1?xOy>7(-PcJzsMw4~{g6;R)U9Ff#EfY3MdBwa|
z9oXX**tz&Mgap}AT=ksgGsJj4lF8B0;89p6gUheb_?|+W<3X8u*;^Fs0!6a^D`H9`
zI1SP72FAf@N4Ry7l!*wup!IiA5#X6c5J*fus
z8YPQDPf!4uG&8F9^;q1Qj94F50biIMQbQcEXj@`UOH888
z*FT}9c8R7DI^IiMxu2CRiKst%XW#X65B!Q
zC&3}g2jdY2!;8d?H^p%
zM;%XgeB5J_s^){9Rl%+VGK0V*gA~+p*iHQ}KbL93yw5f!M!Z*@eZP`xnkz0`Oz?nQ
zsBmChK#OuqkV{~n7+D84w&7KS(#2uNbI|LoN>hg?f`*{YJH~qmY7iETV3>A>b*SXc
zBrQ^CrPV3h+-qp9|8mQx8XOlq>S5~yL|b*#sZ}+E=$dY_2D*zCue$#UzqL{M$3}r#LW>1B{q>GlQk((OxXc-
zyx2jSO?NP#t%nVzHCX?o4G869M{3|c-`0Oynt$b-%0U;brB^^e5#JGtp7x3`Wsz0yfC9P=*PrGhg
z($lMDM?6wSKLNNKLm3(m*ziNkK|y*!xQ?Y!Pjt=@f6?CjV@mNg`ugPk(&$94{3Hi6F%lm7sz{1akQdN1
z4af=KPHjP!<$XPZscROa!dx&0E
zvTi(CW1p%q{|D>UMXS+coNV-we&_0sXE%A|sk17S^aRQi4qaPZ+pQUrE=K!`{=^{b
z;Y67)U}|(X3qw89+ciy_p6<(1F0XcfN!^jy7Az8hUUtx!D12z5E50BUnglXKQFCN>
zWbyKJH-w$f8FfYccjCKCTYdLjgd04M?pmdzW0VSdij^BpL++8T8F3SDdWQ2u!<~yf
zO{sJ_D96Hga}@%aYHx--$0Wt
zTZ?pEQG1LzKyzg|OsnA8^aEVq;EL(u+<`DU`0@oUvw{;Ke4#e$99kWEKZu6`DGd?r
z%Y-F(sN%7TrHdzZ_LH6!*gD(8WN^$UcHZc==dRv4oDbf47b>mg>Wh4U?0i9qGYHaw
z_lUp)o&;3dLYkfMY(7>^$`p0|=+oH~^kb-LcX~vGAH+WsBFNjN5=3d@xAW@59*`Ja
zyY-R3nYV3&l;$<<9OxH6ghXVw)qqOIKb;k{9j&WdHM~#4;=aK!kKq@tXGw&a*ed7|
z3Mh|5(gNS?kg$^G7x{VKi@~6{aQw^|%4cXUgYbt*gYkwh!-lQyTjvq$9P?Lg*0@}K
z6@oe7Ip+N-nR$Qzd$>AWOb~)>A78xH_JhpneppTf`ViCLBAV3(b3MDKHOdCPUt?Nb
zr`3m#FVf9p7GFNk7f|ONR`FaYWP_mX=`OUwwQFiT&^-KgOteYWK9IZ%C|gtMO~c>u`ZgkI4>#;A{B`ou@g*h_F45!`F~VkUXBT}O=G`k}lr{II
z1U;L&NFff78!F!v`Id@vHN?Hm{2HWC8yAOAfdc@GD$~d>RExe@t0j3qRy}QPD|tmp
z3Y>M&O)?k|!-E?NOhH{0RQ7~Aes64Bn#|pKLo-H|8lc+1U-B_&tT+u4@;goS1g&A7RBayF@|ehE}@0V(COSpAhcBzGGt{Fe7z&kjmN4l-+JsyWw$MmwoD(#HajbG3RB{46dn-aj*l5AUxx8R9Zyg7K-1B?udDWX)|Ec
z_{m}Oy}>KIRmWM0uRz~-emC!SjxUf$cN|r?IgSGqwA+N89cKMVmkG_
z6#w8uKn~R)bbThvMYkmFj?8hu081dV+w2N~>f?S1u72!SeAA?TP5g!#Vh%ZS;Dn3ki2IkKt^Lm&p9Q|gPfHtiJr9=58_dF}QBa`S
zaklTG@mEIHvF`#>+lt1YI^>{SI<0eD6D|1@IYne~cJ}!f&s;VtM&{{2wl4roxyOgA
zf&=#VIW3cs?0GgIgIXf+cTUB{2lZaI9S@dA>1?d9>Koh
z_ndj71EO{BwMN=C(1$)v5a~GGnDTG^!SP_(r&rTYcb*JX2QW)se#A|lsw6kzSuM|a
zsFHt2tTP(Mg}I)E-d^2*bbpKflts?MGaGAP{i5i$%rN$dfX(2-*lO^z|d!%*KC&wpcJ$9VV`xF0c
zsf*C^UttXCB#z{An(~9;vSE=pJAJMSN`ZsD0InctAcUc=mU-qn9HQ>(hg3XXXhZ*%
z|J|<-gu0E}1P@*HH@k7VdUtA44GV$ph>O3l^?S3>JQ$eA#;2wW6V3JLn
zXzQ6w>L>+=feeXlLddKb!Fg6*yh3UjZr5PlTI{rgbwVzCFokH)Kx-yrDLTH6%foTk
z5IrGHy2kRraJhav*JD}>-2f$q{R!PGD?G0;IN0RnH*}(p8(k=e*6D1^Qezakf-lu)
zno{7ol^Umt$}1z%S+|6C&w{i?W9^+KK7IGUai*US7(9j@Ai2`J>VGu
z88?X1l;e}zZ48vc+L+;iVl%rw=pmAW4>x{m1zJhJzV`G6XOSctJz=wOowSqvl2_*v
zn45f-f-I7L$Umu};-Q1BZ}YOfbvv4MC)#fvX+r9^1O0*zL`Bp_MB}ZGjl?kf8AmH(
zDPWZ;Iaov%Alk%lW=RAky7ld*Te$4IZR>jp=c<#pJq6tV*n7^}-Okej>m|Y~zN4K%
zP8%NK`-Rj}E~>8S(3z@eJLsd&jqg2}dLTQSD)G^!9T#?PQuZyCX&(DQh)QRZ@&t__k8hqYKfV&g#
z=F-E=E)(}z0k>?TaHR1L0JqT9I#rR-td}Oz7byj+hfD?gCz_qZZkfvF@jP<}X2u_G;nRidYdPE%
zE{%=Fw*6N0=c@Np>k`P(%9h4-V{B@sXdIE+p3Cq-DGSN4YK6FGAJ47N?2V8{=hK~{
zha33)sK;-}uk8<&m?JEuxV*+L2o~9O83!Efc2IJ5nkfuEd^!1WSJG08?J+@3KRb3&
zjPZ!hKFz$g3!0M>##p-%&or6t+fCni)%KuOYP6eTVKKD+X>K~IS!JL-1Ie@VOzVbE
z_=C%9)cZ?C-rTj*RP?#6U1%I_ge6Hh+<{yvva*I*v>8$z!P=%tRAs?*u-1%$k={)L
z+tD({Mac*jK8B{BiPG?7?+vn-%KOl|ldUJ9x=7Fvr?qK*bQuI~icYzWU!S)uOYN=o
z@+j|D`M2Z(_6fHZ=;u(7@_u{pz53EFd`;jwKxe?@3B#2jc7e+C`VJ)ze7BI0{<3b{
zZirbpCXa=DV2jUY2&X#gpKdRLn(^UOJ2GAh@(#`_+!by%_~+1;0#|Octd3ECT(yDk
zuS%WY%OPHkRzjH=)4A{uKJc(_2;~GHY3SgYY`BF`eG8zHmiHky=W+IDdNyqEI=M;Y
z@zc?d$ShA>?Im5wXbJ+4^+=tcQ{q44A(x6-Q_tLG6X%*A{$%7+Hhj2j6J*_~eNZ3l
z@KK&;axDz6Z1i*|7}Zp+t}u=!co2(~p(L3tY3Co(tR1V?HL0QQiD(9+ZSao^ebCrQ
zXod?9F5qARZLE;sjZuCxpd)vBH^JvcUrS^f9LafB`RKyvB+_;PFMLn#ROhg?9`~R|
zteOv8j3>C8y^6BJ#-K9_q@{&)!Ay*Z68~5B%n8TzvXKoh^
zG@W~6VLBgntz37aX3(k+GbWP(pb$=&qMM2@1{UyhCE1#K7{czyul$14uUr`)j?aE4
z1lY&C-nXtlX3ZR!3|mfrw8gK4PeO0h5)-V?of$O;ODin>$yjKa^qvLv*M?t>%U3ZkfFk>#3-rw>23JG!rwgB4xjzefmYQU=^9fc)Ib
zOvusDMu}}FA-Y}zlCLwb1TmSU)?L2^$Is}G(G9Lu@dIyJiI}Q~0FmM_zr}}5`L#9^
zyXD-k9j(b{BBX`(F6&N9RTAal!uGX;6GonfrI@>3JvT!<$iRP}fDg>hx=|e%r1};p2E(Qt?&ur=
zOPgWfg-r`~KHoLJ8&cJ`>wfK4&pY^U6&>35Zc>>-A+N1$PrsimvSWT5yiO?^c@qFX
zQ#wlgk$wNBlVrJ1y}Akt#hcM-BeHK}>PK$2P71$@5ganJs_xjz33$0s3V3iI3o0m`
zsP9P)*tnU=>Im2{*bB%#oLPZi4jG?3zEgTyQiy+T~ovEl%&ey{NvJe8y-Wz^0*`F*JgP6
nvPU!TR%Q;oGG;S~cts*YfK~$DJhJ}tLqYbVqEwB9aq#~DBGdtX

literal 0
HcmV?d00001

diff --git a/examples/text-canvas-image/tsconfig.json b/examples/text-canvas-image/tsconfig.json
new file mode 100644
index 0000000000..48d558b4f8
--- /dev/null
+++ b/examples/text-canvas-image/tsconfig.json
@@ -0,0 +1,8 @@
+{
+    "extends": "../tsconfig.json",
+    "include": ["src"],
+    "compilerOptions": {
+        "baseUrl": "./",
+        "paths": { "*": ["web_modules/.types/*"] }
+    }
+}

From d0c3c5916085c49c6fe030c92e68988c652e8d07 Mon Sep 17 00:00:00 2001
From: Karsten Schmidt 
Date: Wed, 23 Dec 2020 16:36:14 +0000
Subject: [PATCH 05/51] docs(text-canvas): update readme & pkg meta

---
 packages/text-canvas/README.md     | 62 ++++++++++++++++++++++++++----
 packages/text-canvas/package.json  |  4 ++
 packages/text-canvas/tpl.readme.md | 51 ++++++++++++++++++++++--
 3 files changed, 107 insertions(+), 10 deletions(-)

diff --git a/packages/text-canvas/README.md b/packages/text-canvas/README.md
index 62cd222ace..56d9c63b1d 100644
--- a/packages/text-canvas/README.md
+++ b/packages/text-canvas/README.md
@@ -21,6 +21,8 @@ This project is part of the
     - [Variations](#variations)
     - [Combined formats](#combined-formats)
   - [String conversion format presets](#string-conversion-format-presets)
+  - [256 color ANSI format](#256-color-ansi-format)
+  - [16bit color HTML format](#16bit-color-html-format)
   - [Stroke styles](#stroke-styles)
   - [Clipping](#clipping)
   - [Drawing functions](#drawing-functions)
@@ -56,7 +58,7 @@ yarn add @thi.ng/text-canvas
 
 ```
 
-Package sizes (gzipped, pre-treeshake): ESM: 5.35 KB / CJS: 5.66 KB / UMD: 5.41 KB
+Package sizes (gzipped, pre-treeshake): ESM: 5.59 KB / CJS: 5.91 KB / UMD: 5.69 KB
 
 ## Dependencies
 
@@ -77,9 +79,10 @@ directory are using this package.
 
 A selection:
 
-| Screenshot                                                                                                         | Description                | Live demo                                         | Source                                                                         |
-| ------------------------------------------------------------------------------------------------------------------ | -------------------------- | ------------------------------------------------- | ------------------------------------------------------------------------------ |
-|  | 3D wireframe textmode demo | [Demo](https://demo.thi.ng/umbrella/text-canvas/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/text-canvas) |
+| Screenshot                                                                                                               | Description                | Live demo                                              | Source                                                                              |
+| ------------------------------------------------------------------------------------------------------------------------ | -------------------------- | ------------------------------------------------------ | ----------------------------------------------------------------------------------- |
+|        | 3D wireframe textmode demo | [Demo](https://demo.thi.ng/umbrella/text-canvas/)      | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/text-canvas)      |
+|  | TODO                       | [Demo](https://demo.thi.ng/umbrella/textcanvas-image/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/textcanvas-image) |
 
 ## API
 
@@ -96,7 +99,7 @@ const c = canvas(width, height, format?, style?);
 The text canvas stores all characters in a `Uint32Array` with the lower
 16 bits used for the UTF-16 code and the upper 16 bits for **abitrary**
 formatting data. The package [provides its own format
-IDs](https://github.com/thi-ng/umbrella/blob/develop/packages/text-canvas/src/api.ts#L144)
+IDs](https://github.com/thi-ng/umbrella/blob/develop/packages/text-canvas/src/api.ts#L146)
 which are tailored for the bundled ANSI & HTML formatters, but users are
 free to choose use any other system (but then will also need to
 implement a custom string formatter impl).
@@ -108,7 +111,16 @@ The default format ID layout is as shown:
 Most drawing functions accept an optional `format` arg, but a default
 format can also be set via `setFormat(canvas, formatID)`.
 
-List of built-in format IDs:
+The following built-in format IDs are only compatible with these formatters:
+
+- `FMT_ANSI16`
+- `FMT_HTML_INLINE_CSS`
+- `FMT_HTML_TACHYONS`
+
+Custom formatters are discussed further below:
+
+- [`FMT_ANSI256`](#256-color-ansi-format)
+- [`FMT_HTML_565`](#16bit-color-html-format)
 
 #### Colors
 
@@ -150,10 +162,11 @@ setFormat(canvas, FG_BLACK | BG_LIGHT_CYAN | BOLD | UNDERLINE);
 
 Canvas-to-string conversion is completely customizable via the
 [`StringFormat`
-interface](https://github.com/thi-ng/umbrella/blob/develop/packages/text-canvas/src/api.ts#L76)
+interface](https://github.com/thi-ng/umbrella/blob/develop/packages/text-canvas/src/api.ts#L78)
 and the following presets are supplied:
 
 - `FMT_ANSI16` - translate built-in format IDs to 4bit ANSI escape sequences
+- `FMT_ANSI256` - uses all 16 format bits for fg & bg colors (ANSI esc sequences)
 - `FMT_ANSI_RAW` - verbatim use of format IDs to ANSI sequences
 - `FMT_HTML_INLINE_CSS` - HTML `` elements with inline CSS
 - `FMT_HTML_TACHYONS` - HTML `` elements with [Tachyons
@@ -162,12 +175,47 @@ and the following presets are supplied:
 ```ts
 // Terminal
 console.log(toString(canvas, FMT_ANSI16));
+// or
+console.log(toString(canvas, FMT_ANSI256));
 
 // Browser
 const el = document.createElement("pre");
 el.innerHTML = toString(canvas, FMT_HTML_TACHYONS);
 ```
 
+### 256 color ANSI format
+
+If targeting this output format, all 16 bits available for formatting
+information are used to encode 2x 8bit foreground/background colors. Therefore,
+none of the above mentioned preset color names and/or any additional formatting
+flags (e.g. bold, underline etc.) **cannot be used**. Instead, use the
+`format256()` function to compute a format ID based on given FG, BG colors.
+
+```ts
+// deep purple on yellow bg
+textLine(canvas, 1, 1, "hello color!", format256(19, 226));
+```
+
+![ANSI256 color pallette](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/text-canvas/ansi256.png)
+
+Source: [Wikipedia](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit)
+
+### 16bit color HTML format
+
+Similar to the above custom ANSI format, here all available 16 bits are used to
+store color information, in the standard RGB565 format (5bits red, 6bits green,
+5bits blue). This also means, only either the text or background color can be
+controlled and no other formatting flag (bold, underline etc.) are available.
+
+```ts
+const el = document.createElement("pre");
+// format and assign text colors
+el.innerHTML = toString(canvas, FMT_HTML_565());
+
+// assign bg colors
+el.innerHTML = toString(canvas, FMT_HTML_565("background"));
+```
+
 ### Stroke styles
 
 Built-in style presets:
diff --git a/packages/text-canvas/package.json b/packages/text-canvas/package.json
index bbc573c0f1..dc78dc2478 100644
--- a/packages/text-canvas/package.json
+++ b/packages/text-canvas/package.json
@@ -68,13 +68,17 @@
         "array",
         "ascii",
         "binary",
+        "bitmap",
+        "blit",
         "canvas",
         "circle",
         "datastructure",
         "drawing",
         "format",
+        "image",
         "line",
         "rect",
+        "rgb",
         "table",
         "text",
         "theme",
diff --git a/packages/text-canvas/tpl.readme.md b/packages/text-canvas/tpl.readme.md
index 8a81236798..5ce79dbd95 100644
--- a/packages/text-canvas/tpl.readme.md
+++ b/packages/text-canvas/tpl.readme.md
@@ -48,7 +48,7 @@ const c = canvas(width, height, format?, style?);
 The text canvas stores all characters in a `Uint32Array` with the lower
 16 bits used for the UTF-16 code and the upper 16 bits for **abitrary**
 formatting data. The package [provides its own format
-IDs](https://github.com/thi-ng/umbrella/blob/develop/packages/text-canvas/src/api.ts#L144)
+IDs](https://github.com/thi-ng/umbrella/blob/develop/packages/text-canvas/src/api.ts#L146)
 which are tailored for the bundled ANSI & HTML formatters, but users are
 free to choose use any other system (but then will also need to
 implement a custom string formatter impl).
@@ -60,7 +60,16 @@ The default format ID layout is as shown:
 Most drawing functions accept an optional `format` arg, but a default
 format can also be set via `setFormat(canvas, formatID)`.
 
-List of built-in format IDs:
+The following built-in format IDs are only compatible with these formatters:
+
+- `FMT_ANSI16`
+- `FMT_HTML_INLINE_CSS`
+- `FMT_HTML_TACHYONS`
+
+Custom formatters are discussed further below:
+
+- [`FMT_ANSI256`](#256-color-ansi-format)
+- [`FMT_HTML_565`](#16bit-color-html-format)
 
 #### Colors
 
@@ -102,10 +111,11 @@ setFormat(canvas, FG_BLACK | BG_LIGHT_CYAN | BOLD | UNDERLINE);
 
 Canvas-to-string conversion is completely customizable via the
 [`StringFormat`
-interface](https://github.com/thi-ng/umbrella/blob/develop/packages/text-canvas/src/api.ts#L76)
+interface](https://github.com/thi-ng/umbrella/blob/develop/packages/text-canvas/src/api.ts#L78)
 and the following presets are supplied:
 
 - `FMT_ANSI16` - translate built-in format IDs to 4bit ANSI escape sequences
+- `FMT_ANSI256` - uses all 16 format bits for fg & bg colors (ANSI esc sequences)
 - `FMT_ANSI_RAW` - verbatim use of format IDs to ANSI sequences
 - `FMT_HTML_INLINE_CSS` - HTML `` elements with inline CSS
 - `FMT_HTML_TACHYONS` - HTML `` elements with [Tachyons
@@ -114,12 +124,47 @@ and the following presets are supplied:
 ```ts
 // Terminal
 console.log(toString(canvas, FMT_ANSI16));
+// or
+console.log(toString(canvas, FMT_ANSI256));
 
 // Browser
 const el = document.createElement("pre");
 el.innerHTML = toString(canvas, FMT_HTML_TACHYONS);
 ```
 
+### 256 color ANSI format
+
+If targeting this output format, all 16 bits available for formatting
+information are used to encode 2x 8bit foreground/background colors. Therefore,
+none of the above mentioned preset color names and/or any additional formatting
+flags (e.g. bold, underline etc.) **cannot be used**. Instead, use the
+`format256()` function to compute a format ID based on given FG, BG colors.
+
+```ts
+// deep purple on yellow bg
+textLine(canvas, 1, 1, "hello color!", format256(19, 226));
+```
+
+![ANSI256 color pallette](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/text-canvas/ansi256.png)
+
+Source: [Wikipedia](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit)
+
+### 16bit color HTML format
+
+Similar to the above custom ANSI format, here all available 16 bits are used to
+store color information, in the standard RGB565 format (5bits red, 6bits green,
+5bits blue). This also means, only either the text or background color can be
+controlled and no other formatting flag (bold, underline etc.) are available.
+
+```ts
+const el = document.createElement("pre");
+// format and assign text colors
+el.innerHTML = toString(canvas, FMT_HTML_565());
+
+// assign bg colors
+el.innerHTML = toString(canvas, FMT_HTML_565("background"));
+```
+
 ### Stroke styles
 
 Built-in style presets:

From 1261879bbd9c53b617902e2d1f76b61ea5fd0e23 Mon Sep 17 00:00:00 2001
From: Karsten Schmidt 
Date: Wed, 23 Dec 2020 16:37:34 +0000
Subject: [PATCH 06/51] assets(examples): add screenshot

---
 assets/examples/text-canvas-image.png | Bin 0 -> 418684 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 assets/examples/text-canvas-image.png

diff --git a/assets/examples/text-canvas-image.png b/assets/examples/text-canvas-image.png
new file mode 100644
index 0000000000000000000000000000000000000000..15ea027667a5a50e85c82ab69ca568e5eacdd208
GIT binary patch
literal 418684
zcmZ^}1CS?CvoH8>+tapf+wN)Gwrz9Twr$(CZFAao?|k>ZeeZ7UZbh7mQBZwqYk%b}&2vq8j5(I=I7zxAI;!RMsJH!1u3Mz^I
z)PTh`8`4J_y3x|3DXXpw2f`(@Q|48kcDwEP%}jmW&+_l;F}YpC0z8{}%2^PWAqeyo
z38ceeO`_$b&EoNZK;!%wF`#+ez1x#;@$o_OV0nHh?P`RrDAcx;wRdBG)EE&VkG%nL
z?%~W}j=p?DAAmmTH$@E~fQVjMYqlLbP&JfZ>#(NjFr@MMSiaVdDKtcaR`ipp2uG2$zarY}
zHMMmJr2Z`2U+z6D-DL`F5hc|nLbwOt-!X!;Lk1h{XKd9=3rRMx>B&&iLjInc@u8fK
zT-`WSHqb4SvID7a?_yBkMn|CXhfy4i9hHJPNMvz1NayTgyvuOEB|-$@Ab_p&2X2vJ
zKs^FDc)2;Te->j#0C)&M)&(H9nlb_~%P)|iE>Q#-Utx#{;}B+GRAQk8377n^mMlHl
zPV{v+gNS$EPrX$vfV{>0tRiTKo()Uujn*_S307d$
z*O02fI{k4K_xn{ICA$BBcafGIj)(9Z+U@Jux-7C(9{I;dt*!vZV%!Dmfb`ee|H;J^ddk$Y@u%hQvm`JzQ4bN^qlAM0c&P(
z0F^hV+8#;n>nR7>Z!3St1&T##K7WgTcsAJoYqP?sP85@=r^HXKBf08S=U
z1+D*y24u0Hh5AX^{792}yb(H=SrBDIgz9=j$-_7?WhpFIyj
z5D{5O93!04Fl3FmCLH1*5|nUX0ye?Fh!9hPjY#m<7>zNIVnCHZMSQdb?>)66fHO2p
zlq*ha%%=#(Bf?vNF)0))AFT|83;0QN-JB&OSXQWU-ol(w^ADY1_813hrT;Lmek2#>9Zh8eTO<#n45acm?|BlsXOh@5s)fNLE0jJ$qYV
z;jM92tlZ$~UgVvnH}+0&ZeQ)*%N^b)bAT)Zc^mR4l=gtT5Ssy4ew4iAn$VgY2h?tf
z>;N`V{1^!rvd`XTn%ETK3<(`s4e>P*9;quLKC+i2Ndo0~@-K-$#CH;4MNA8t3-Aj_
z3nq%>=eQbS)}qe@;&F@P$c|9$30>LVY2N9d!CT_&o%V_KN$JPR`-hOfI9I%`8{X+bncfeQ3uP
znAMK1WLBwFsg<{?-4y7y@`>&W<`&K_<`(J|`U(7m`qlys>K6%S3HJ0G23>)h!R25j
zz~aIV!hwYrhi1aYV)Gg6!)k$t^_$V?TbpJXJ7Xb5<3zWKaf+deaYt`Ndq%-Ui({5z
zpkuCL;4`T*F_wTNPEHxonOqy_n)zZFG6wUCa2U_WjS!}Wb+KYvA{!F1P_nO^I8Gl0
zQBJaKv8+0`TQr{QFmFu_TW761H$It?Pj`f2!NFln;A`?Z&(85rDLA1&fIg(3WKPki
zy=bayifBsEu4v-4p0yZjhN_>a*EH~0ubT|lK{p_4RX1=MK9NtR4Vxa$JY!P_*%}X|z^bZ&`m{(^!vg&NNxoe+lCq-dWW(?j8AV
z`qF|B4^s}q$IZaa;mY7}#Erzo#<}5`&koEk;auj_aUtXS;5y~1b?P|^>~L=n*S6HA
z>nNz%sWDu2slgqD9Q+KG3|)rn+!u2)>O}2eZQI75!NFthGIoEsJte*rD~eU;J9rGA
zz1F?UHVNQx~g7_
z-@Vbr=keh_*@fNR>3!+VTp_liT4!}H-REPySbt1miWfHin_wY_i*Uq(zPRFZ)9r>o87P7=SK;KRE6pY4j4ckAlC@cpl--9g)pt1
zx<&?zq!QgWjA_&SBqFCW6Q0@JYTK%A|MDpJ=)50)!+e7v2~E%*k0?)3iY#%J&?z=i
zJZAZ^s4RUND=^VI3inRvD(-{CTcfAQ`o&LijSh~w@~bB^hsnn-UNFAsYydVDGt!iY
zGKS*Ygp4ndztJY;sp_rqde(GyhXW!#k+amM=4xx9J^O*^)Fx9dJD25{Wfe2A8W#S(%6LE7xvX*P{=#q-Qa_0R@4gJhYmd{x6;10tm?Hbt@m|H
zj@Yl_z1&Z7CE>YvM|zc>m@bi~vxmq1tpydF`i~lqHm9q}BGpR8y-KZ`oQ6+}qw;Ym
z>k{i9)`^O=ij-zotJLZ*b=ry^RTRy}%9Soxg{w`MK$q0juqwMP{rY^v!LZz6{@pE%
z_WJUf{2E6T2c`Xz(M%<_-0$I+)OT7_Evgpp4XX8ut(3Yek#0GkFV}}FY3w<0QQ_5?
z2yVJ7*v<8Yvz0anbSJf8+d8fKk6Art-|ilAPq|Iq-R|g*%a`SAvrBqAp$t=&Czi;J
zWLgVaT!;}Ib1OLW?Vrut-4?tiK6R(D*SUqkrNQE`kJw-M=e$(B8$L82YlAJ6Hm$L-
z{Ju{^Z75gdg>pHZs16se7SHFzX27#JJb(S3`#5)!F^>VDj6cVAk)TG@3T
z+t(b&ZxpRY&te8sgXr-)kzJ3MRIZmFRt;-iwB>qyA4Z0-Co%&wdn^4~?{nU|JN!6*tWp=WJkEUAzF-iL@wa@({9Z5PKj%kh7DgXOljW*%miV9C
zJ?p3o{x0OAd|!H#`K+w!Jg4^SHP2?}+@OoW)uLfgC`6Kj)Ns!733j+
zrA4PY3(=h8^ZfmSer$w&9lsxH7=T1Iz&qjT<)!-X%}*01xEG9n;Ude6bTZ=p_TDKX
zYKJLN8bnXLA4nakU$4z3^1{E~0?J-O!wCRDBmK_+l2jzQ{nvJYTPUkLtN)haGP1Lw
zGcdL@G@*01vHvFx0PwhT{hQjDI2#bS+gRH=ak=vn{g(vSzxjX2^h5;zCE{$wOQil=
zo%nL9h%bJ5egxw+A~G1J*On$a_I
za&po$FwrwH(f*U5b@H%vHgKo4bt3+6CI7b`5fdjPM+V@uf1Bg^k1{TK
z3wIN14G{|)6I-W$uJJK3GBEJ`m!1C?>;HKAKcMRW2g=OM_WywX57z&H{>K+CIY$eV
ze_{GhF!&gG=>K1||0T~u|DQ0+2@^steJf@dTBW@70pB1*Y1|LT3Vy#OsKTV^s1Y4*6wBU!o9!nw_hT=ZBAtixJk2m$};Bh
z`xbY;_HNHDm9uw?#>D!3lXK_Mysp_;Yx-k#<8q<5&PkI-E}gVVHmgThq;MlwW3Ea$
z0=mb`6|@epd-X^6fzD702v=66^sx^^1=Ta;Yz7OYo%*f0}5v)>W10lSTfh4&HoKgw^f2tVrf
zC#&-?AI|YRt;BO5VgMu&Xy@x*$5x*AT0QzNKND@sI^$-jxc*JDf@Io
zFKjX+c#z0|8aBeQ4=a&&Dj&>;R=xINa2fp>{IZ*X8^y)&K(BglBTY7{|CkviK6MQeDAH4=(V{jbK^H15=vw
z#4pqFsu?TeJ8d(8uSYWvCTec}uYk~iTf*{1QBO1CI7w3(1ljbLFv5{?iIe{NRF5Q1
z{j^htnC1t7(K%0s8nZYMH0Cnj9L0Vr6p(>w%xZUmH>+U+`2)ey6SK7bLdQZ1EU4e!
zCIdz!$aN;^T`M;e?LNaEJAzsHx|fG)$*^yNDhh#Xzl}aA!!i>g6JjL9L&KNTY!bA3
z#USEa@U5`$-=kR=a6?`!xv5rtSH9`k-){O*oVl|n$C0@|g?mklhlz^x=*LI51Z|^&
z7y~q2Z|{}I-<7#x1{kTsseB-d@=|tfa6I*m72qabcC}dp=71^_pa*?u9e{YW*rB7N
zvvLi;3-Jp*AD!5qm3SVy&@Wt3hab2*`G7@+#&@CqM6a?F6KIY8fe8>p#jj$1*hUjFW0aLO
zM35D(`jjb`>u@)N08_g>l#z)R=Qi+}^-V_T=X&0tnt&_YXsMeKwnOT8GrV9*s1|!>
z{qNUp6=YB+?4q?3N=XL#I;tnL7-|7QC^5*c-A`w7)wE6Mw3^vA!FEN)mw`5!F#AxE
z0vO^y0`yK9&q<2z^t;c)6Bcsg5HFW{Iju<7$1X_=*^a{Q!X3%3SLCtqIp-ME
z5^S2_CHtyME)V@&6imbD=Mk6zea`-OfAu68&YnJw-w^zoKG&sl=?4jsnfID|n^jVz
z{>01BqDML&Z#3VZJ;V7TOq_x2>Xnc~6o(}Z+(7rKdCrS(kP$q;2Q8G&fX!A54D{Q4
z`nvzxE{f?nm)>&93O&7i9Y`j~zh
zE`$dNE*T)JQy?E-PAJF9@7@F8GgOM5iN-QKsW|>(od?_;v|574yYBS&l;$R73d5>0
zV0J}YV(m^o8w0e}TN;t`2aV+^zFK0>`3=J!Lqf{1N<#O?WLMeB3k9aUdl8v1ilh!q
z8ncShW&fvT6a*
zbzoVLiQ{$`>XdpV+Bv74ro2ZP;@Ll;^^Xv%s+PN-^xhk_ExCW67tm~$ob;he2wmFa
zD5$%Z`&7V~lbTI_WLDB|PN?axBK3;M?LarmzdO)Ta15MdW8p!}o{+Vtb}hNUW-_eO
zPtVsi(tpeL50~wzzDztm7QyOspgmB&cv{!Jd(gGboGRGmo!Dj=Jy3kB6*$EI`^vDR
z``DGus$gbhGq&Y^HYAjzDu53v()5Vn?OoYFiYqBFbnKd`QGgcxeFS~x%4mXpUYwUr
z5bG_W!p%=1kJ?sV;04My5mn=gg58H_cs&gfOC%IsMxen(ErO6iMQ06w&mvu6QC%T{
zdn^-33k)63pi4x@g&sX5V5qEdgV9^k*0zJW^eHiQ)OxP&VX3_%0jJi;7h{6@PM
zIP)
z&mlPq7+{%72d#wK-4!M&wzla~}_#YmZ+WCvaqQ0gCAL(iWoLRBeD_
z$CDl^{-%IslvivbQm4bQ`g0uLx5e7p7EJCrY|R-+4^=Vb
z9J7v>n>tqahxn4fb<+H$oQac<>Y*`_iM#!#fbyk6!Qw6y#>Vif=DMyfE(DahUDONM=+f~E2STT4R~w=C|u@PoqJT}d_Q|$7`mP#
zNZryM(lLreXizFHS70rq@=9mZ{1S94IWj7qiX^}|neEY?4ivZWHW#|JQ237gn#3!k-t-i0{mL>okzYxyeSj+~7W~1YgRm#$YLKC?
z-7KgTAuu6OM4N!1abO0ec7uIt)Eb*fgw|A$`!%gdks^tC{P^lH%f(0t{(iGIpS*R=
zfPvKG#osKn*3At}xRr?t6iTu++S0xFGhSPC*8Q9rv^#%MURsiVTl-5)!e6M9APJLL
zh>sRFylf$`EwE651|@%wxUR2thfdF7NDg7l#?W2}Bj^7KvfH0+5yv*#se4E>ICgvX
zS$vC(eOZDO*gm^i?F$hwQv5}BG$G+$Du#;m!W!PphUDNfSRh|Ob)W>DcV}>kPBL@-
zIQ%!3BIuVsDGJcSuX;^`H2An1rkB_1&Z04;B55C7L{Dp+IHDu16M;!j#rq^K3N|z(
zrC4{K1jumTOXiu4=S!Z7#NrzNB^~06nk0DjRGG-JEi(K(agkA7$~Sums{VS$zoq@)l?GSpqTTgfhpCF7CQAsFhE{w6F_&aw&?VBu4Teiz2N+!BjP9H3U4F|fw|aO!!w
zpvXwTYpBcG7Fyg;o5eG%gmHH)wZizs27@ycCN?o%Pl3r{-61bT?TuAFMYKBM*!oR_
zY{n3qH(g--Hg?l_tuJ&vJ&DA9I3$b+v@@R(SF=kSs+fVZ
zPe(@_BMBR#V=}K-VpBK6k4-q+ejp{lh2#6+wz*~u_^dUvdoCE!lr{OYJ+B7()$tqW
z$Aypos-HP=GzaY>B{E#+TuUZ?tdIK2uk#zD7kawfPo%T2dA}dIf=Ru$PE`^qJSh>lg)*p_c9+0l;EH9GZu#VS~)*su#X}tGcqfT#V6mR&H
zsNlxT`VE8H<_u{5A!*#TxTI=4tHO4u?ueqT9#FQx-s!TFf}G{D@!|}pI>n%ER7$Db
z-J}oe=dgg;?k0<@@HI<@*1dhx9E(alqrpRNKx$x4sGT+Xx$)vG7UgbHq)sfmv1T_t
z&iyv&&1LnM<7w`I3`O={j-;3fs^ne{TMM6Ov30jQ<=78!I=j(h_G?s9k|YPGuQK09
z=8skQjec85K9TJu;_dpsvqaa24lUiU9(-DAeR=(}iKsuBpHAPetDHto4i6aPeSiXZ
zreADKtx2oR*{67T-BMMdJ{v$~s?rV&W&yu
z1VcIqREL(ahaNPhC*5C=udM3?aSZg|C|*>b3^?0fkn2J{5s%mfq!@E^2$li+O1npo
zdEO_h-@0$xco&GuWQ~i5k302GxE~VCCk#}652@dYYpU))MBRR3d2TnkJ2a!U*Fk#%
zaRdfNcqC;Bowu8jOhPv}*x+{!iokB$8&u}Ab72HT&?}zW-41owFQU#Gu;C-`?|imn
zuz)Yb4R^XWDH$TEI9nh_DkNFcCnFrsJ)-EhG228mC)A$B|m
z(n|RfBKS}j^r8H&-JK{Ju2HNH7_acsRi?NiQAj3~e%{FvLsFe4h1|X_
z*Lb}6>?sNKvAQqsK27~fCv9E|n7ts?HaKqp{kYoiP_G9uA6zoggFF$bnzd7l*mAkt
zBaajoN3y~Bt;WcKn5a0|sUv6TvvGpBc>epqWhgNz6mjqpzB~$
z4mug5ZU5BIrSyl%`-VYLhXHtcN3)eFLh2L*f*vjX?q_eBF^0}xl9oYl&tJfGtZ-+7GvQ{5}R}d+v&kz0>71zIpZy?)4v`J>|WMIc#d5x>&j>r%
zCG^sxpxFTS-NIG1X@%6?A3xt_oE=}t#>RfHjut9I&~1S~-imm>Z*CL2pR?ba42b6=
zV6TjPH@QoTV*0PZ5}F}VJQqx)vpQNJwTOnQ{!^l^VM~oOR+FLo
zw}P8U%kO;1&VKjmVa?G&;P}(L=zm^<#w;3*cB{0=0{=EGR~0@I7T8=&IDvyAtEso@
zRWP{6UP5E?SE^Jr%(Tjm%5+8}3Oyd6pU+|fLBuIXV;&)ajKl8~)fd1P7Wk3!mLxMo
zh)~`hjKK{3vLZ{JWo>q4%BpqAu>lk!^*~kfi39OJBz7#o`4VUmONWNskGp;QTi?SP
zgTZ8thCE3iP#AOaZ(x-t;SbnlCeT;4v{qa)U1@s}gV9Xc+1=qq{3fFDnB1-6?X}uR
z7uLi4tf?8}+f+4zLqFf-1|A5rVA&Zt+2dkFYXO0oBu$XfwpJy;x`LsCWK2uq43vL}
zyG3R&3Jk6onq{oRWvCHPt$-k>%P~(%PM2S(YyRR1y<`GgiYO|CIMnLbr=UDT7&(6I
z$K+^9HUvT-aM@EVDGt!WJjS%mZ7E&$da%*+m)$Eb*$tYf`zq>XfD=@m7TVvKK5nqS
z=KcN6TJ%e7(D-nqk++EO2{)Wr^VY8lX&SAamY_4Ka?U0X
zbiET0d~K9>-1y6q)^NVr@#freC8eb;MjG4FTkik!TUc;RV~OpG_ujkrp(Vo&ZI=CS
zm*5T>++BgY?ra+HpQ%OXP5F=F?cpf%v_H(K|C-cZchCwOS3!a`23Ugiz#~C2!{W8o
zar;x!LkL5gwjkF!B^R%4rpTFDwNkR(H))Z{QKnVV2e`{;!4VOed=Z#lZ*~)7jCk|<
zP~axt8hpOq!Qr>&p+d^_rX2#ueVPi9T$|1-=F^Ce4)#uXm2xl|9VOTRSGarLOg!-h)=VM|e~0i17%>GhA<*?83F>&r
zJKN10y8)5B80;wVGAFoQzlnH)!}6LXjL^9xp`VpEL#w*&Jn?0Ho^n8&zV~9omrZTbwIS
zdo+zpKK^Vomq&EAq^0T^o(@_SCU}s?zhm8B43`iccU({zh3JjU;_G^b|4Vc!6RgNH
zHoGbzg}~sWyl6m#7slm;;DSM7OG-Bl-*?P~2@26)l9+B|!`?I1<+n69Q9hS)Xd3
zsFC{Q5m&jvukphU1$qv!Bm`n9zMqFxsY;QPYn=5t_Lo(idv=?MS2c!Ov(LjnesHi{
zwFY?IFy1e!;UV4dhBnmo2rc5!wHtg=^?h->?Jcz5XqV4btAAZ|>6p-(V5g>|LWn*e
zayTG*o5iTAc5A#8U&i*c@cwOgKbhv4q3`$US91kwWc
zUPci;yB%)R;ylt^lhD%iAp?v`Jsoe_ru?tU#bQqG^@3cxX+R^w5NuO6+5IBDQYm!u
znFO)}p!YA2fUq+pIlW&^cqqb;0U#&`wVEd1aSgyYtOX5c&$l&$y29fUa8CR9>QUa7
zpb;qQxb$8Cg!JxMMA$`uiR?Ho
z``RFrPPs8uYSfi+H;1d4scAjn;#GAFy8!8+>Ay%}BKGrM*Lq$}x;x@FdZvP+LRY(*
zD&l%zfx#t+jBO|r&?&iG(#5lRdF71Zy{GONo7jFHPCF^;{x(lkuG&QwNENo;%=RtGk>!vjNqOK`pcMGxp{6fU}EWT9WbFW
zVQF)H^TMNO(ujoj#mSI7tN|L+!@~rhQ6(D6&BXtn73bq2x%^K2{Aa?*BqMMX>xyNf&n$tp9gn0s~_Y7GF5SrmbFEBcx7c00O{iT
zOd%5>p!UQO3Ru%yShbE~h)XhHuyCv2(^17c0S4CUPup_exAgF@9wrM-Pb?JQg7_ZJ
z?%Ru&`+T~e;Q!%)1#>a4@{Qk7Bc4l)qmO|~tjH%3pr}`Ag{BS_G-OpNKV5yegt=1zaMp1!t`xBWF3)w=6rXZ5RZt*9MVQl+D+lZ*V8^VJe^;38@(;M
z-)pyc=Zq_?c`sz&B4gd8c?XjTc3E-|FvJb=DzRn>!UNR|$Octh4uB2r&xID*nOk%4
zkwHp_Ba3lHT#1umcMuhm#0c#2`*Cyc6OSXE3MOOv@i%lOps_XM6evHiB#Btfe=aL6xn4T=b#;fP$()Jf-#+oJ1Pu`1?r>w?h^in
z?x|D4?-~;Hkg>^=nW0r`#27hipbavTo;OHj6EYy+ZJL+?TlcgJ+0A7KwB97f0GL^g
zN9|B>KkI|r$+QdngvNea+o~zkBdH7qyU%?V(!9v&1W5j>Pk=iU^}Pc=0g|zCdBYx9
zD&G<6Fp6X{+k{IbU<<|8Ker4x1S;Jeq4J>vC_D76g}w^v744$LPJ2`CZ}`UC_gxOt
z1-P%YCD**Rp11F&xBw!GFDyGRh7KJ_cwO+y+pZ~~oWk_h$w8CA$psVfs
zhIk)fsg0Q0VNQo*qicS4IH;+@A_uN7BsQZ0);?D<2kqqMJ9TSm&Dd
zlze=VyHUJ1i32t+!MURfVo%v^Y8`V2hn8n0E1Geu4LZ@Eo8Kq*_w7>9d>%nv45&+D
z*Eo>0O^8TP;vey)cqbOBKoy<*8lzM)x}sSVdAcRcT~~XrRkbzl6N=-8b;`!gGoNMr
z!#@}#5@Q!C2rl3Phx4m+{+hhmkO@2yHU3j?b_$GD41H16Lq2Fq_MFskhCRv`x1kB}
zDN$6Qh()>>2X0sMRa)+qAs!2k7csgeJ%<@<c|ZOEvAd9;=Teq!e}Tk3
zuq}OHiM_lZvFdse!U0|c^ZOW2V2aSiP^F{n9<~Y3WTS2YE=#k^;2dft>O3?1+NEoF
z`yx0u;@y|dhmfDMQWt%qdDKjPqWMecV3{l)oO<74CuhG0
zdLbGIH9P!!`-VP_3(f2^4!J)}>~ZzM`gmoi-n{``192s%=ULZnZ}f!E?pE=JVENa`
z&l@0ZDc4)c#uN$y8}h~Ef(-VIIWFWcQ|0#9fX}Fqj?BC)mCAodV$Cd
zIRS0H@tcRt26D0Q3spju(Vj$SiEz*$SSq4QF@%l{9aq_0G$L%VxfY|k2PI8@LXiDE+eROQ47kW@v``8}^^gkg!F;Z%#%wALrapYX)+c5uh!tXL
zhE+fn`E+B!HLxjW(y-Ukoievl9sk_y!#d3i!|WpdDsyg2Q{1PxFSU2F8$AX3`dSPl;Q*Mjs5r&2HqV$BcU-pk!<+pbgCerSt4Jt!TA;>wI|R>4`bNyG;8HwZS!Adf%Zs-zBLlhBiHGK5
zC{a|@sP9J>9$IWj_lmI58{#!CS%Gd?cM3)GSJfKlgupQ(V>;>kdFL1;sYHqy2jV#M
ze&0HyDY+${4W_=;aGLB*gO96#_m^FYHx%N~2Ul~go<&jdW@hjvy2clL)gA-lI<%1Rs=B48F%gvs9Kw+r1k%V
zs5ce2@NpKFejyc0<&CSCaW5i%mMd9yZMxgvXw)!914f^z_j?w_=sz)BZp>|g$a>3B
z?ROijl1HzI`FzIgtl>qN?U(@$+FI46#Fo)L#3kRDZtFUP-hn`XCNJW%jaO0z(Sg8q
z*F>5W#9$~W3R)w+O;P_m(T*;|J?~jT2{}lv>?WqD>nsMqRBC*&j<_R
zB5OdvvX-<*&%#zZbN=}+#hUXFHiR8zq)C4OiW2PM?^40bnBdz=JPapFL8A5hQn}^W
zk{ie>Q@~_{FAVxAvs$@GZp8E9O#>jHPXNNRopSQ6YIz?-KJ19m@j>=GML}dCM~&h|
zAff<^>@)1Y`3mb*H#*+@P{ea@1GS%iear&X{jM{jwnS!bG6V~YsdHi7To!4-NO=D1
z!{7qJsz_y)Ad;f^z&9Q7@}Yu&(@{u;P7oJQEZYh7JWu(BIEonU3)=i&eIWIQN`#I@
zGeq^OTUK5~Vnq--#gM_JHTdORdATPFWa3_nyI@r51U5M?`=m=vQBi(P$3U7-KowX+
z6QRqp{3_YEsXVeTJi^{tjqFX^<{#%6BJV=kr966z=(&<*)wyl%dsh0iQe^(OT5$?Ngi&
z6WNQ@m5!|)FhZ+|z+wbOza=M}=XtT)F6N)B9qm1_4X~$jMF0^4@(zr<*n`>kCr8Ol
zFKeFr(0dy=h7kxvczJewIXnb^KEOYTE%`NZ4tx2B54O_)iI{i5Wz6y50iD&+)LVxl
z+GV3rOgcjt1L)RX9+t1(Z)5jCCNbPfGxzq4_vA)MQAt^Lm($X)q6lUV>URT8R$Qh9tjrN49uY_OIo58?U)TU5Th=P_#Z8JlvoCMB1ts=
zZ5gv@xYE)a?|pJVsgL#E@8nqROOw<%SfToC{=huEj}E_h8G@$y8J6K6!Z$6KK@CW8
zweRJgPcJ&&`ym=WQIcgD>tjc^r`TDl0fhQp^&e>f1sLcN00t;VeWW2(0sm4gHzoT`
zCUR<6R?;LZP>NfMX?c8Yf=eQ1RUu(eYq@2}m$<2V4uKkW15*Zn=C>@!hLI8>#+Of2
z)xxiqN(2Ab@}vTrT3_5ixv+z51JslG63I*o(hU#z6B3yyF2@g{`)*6b`^zXcJl2~&
zO(0j-?xFg+J%fz
zE5rl3P_s3DXa7o0$X{s1S(gjwk3GmgZ_qyM39Vq!FPx}oxtR^p6njV)QD7d&^2+dr
ztQ^o7^?D8im-kJuPw>EKRtK_=TxIa*H~ws94~I;{3*WV~-`h+YF$NU+bXu&MC`IA#
z`eI(v+SRxq=@#Fjnxw7%8FGdR!9Eb9197jAjeYKYB*lC;ouO+qkTKJmF4mNbd^_8s
zyya5z7O?D_o8=o+PQt7Uq7#rfMw4>^uLz8)%9?W`xWhJ$#QETQc@?kGv!A$og32MZ
zAiGSMzOfFaSxmXY`Zk>V61Muo9Pl$&b>drLq@X;n_rB}??PVQWGMv_QY{=4kj($II
z`pDe%;*pLabt|YM-NNBkDwbvtFNC*!l=f>tE5Tntp{Xt0dIzFR`~})pA7T`{wy|vp
zeI<&?$H0_>QiIdD??r;AqpF_WluHj3z
z{d#_2;=xX99r0!F%=cbpzORQ`7KS3olHqFS^7d19=_8`<7qPt3zws8dLdk3FkU^Ls
z-!3%_qm+X)@)jW?szP)&%E>@(Q=awmu8G%=jV6Z4xUxAw;||1P
zmKL*S6jY^n!Q>D7yx)PZ6f?C>#%rH@p^ET{SMq`#TSQY^?8>Z7gW1`X?^Yj1idd4}
zj1v!ED_>1I3A4s#Vn%9*2c}vnnj!p&D+dOUQ-^nJMaoa~jwIpS`ho*1Tv&5@X}K+kZ5+HKq0b?bTveg%d}IR$as#P;nxO>wN=-zCy~
z=KgL74?sQ2QG^~Lx?bBtyB>7zGiQx1GIZJ)3L3co_xe5RKjYMv(SXW+bKAo~J62sd
zT6m+5)(a>NbFODs!&$;E1_q$8(ZEPix&>U)FOaKcsLy%RE^au8hzNR!1FM#MzVQ=8m{L
zt_ZY?ULGMI4bz6|9mgyG!LHtd-fea1?L4xNrQ?Ln2SZ#sO!Re05
zKp0XEd+P?&9_;DviQO_kjK}lADHmcHh*LapX2weMmy*M}odTRGcz`Ic5paLZ|?1*)`qpr%j8h#9+nSPK=1_4}J?)h>N#ZHHo4wlIeg%(1$inj#v2Y4ZOsg7L1vL
zO1LrZ;U#p>^AdcX@rKs3qV(iSX{9Lovc^Kz7(l6I`EHqLT;*p^OJ}?#%@
zCzxkJ8Eao2CXT+k*iDT;UoBFGIv9`oM=ca%*m3OaALD*CR#3T
z!9KB|umE>iTZA8)eQNGoQ@)96+h!EoF;a@_;c$J@qG1>c86g|v{NCvP8D$KHFd|s03}gho(YSevYP6r{9ZZf;TqoN9*TAB
z93skfa3F3E@8lZK?5g*tK*b2B8c#m8w>yZVZ2`|{>14ZvULtD??tWD`s!N20*Ra&J
zrQt9p_J09RK(W6Ju=hPKT{VY~0H;3NFlpp*-HlC!$DB81nu@H9
zlt%ehigS@N0#o2f0`A!p&XMY{3@)EaxhA-t|H;kI#=d4BRe^IS<0vv2<3>3_oiXZ8
zII8;|%qX}NiGlMz?BRg{EKE^JR14q`n*@+Xo;4nXl8!U?^2gWm!MFN
z`{t8(Bg&@z#m+;+Vx<)GliTIxfA$Yie_ZA_vNdcrR!CQdn|r8NUZo=^<+DsmX2%ssW!BLrP}U6Q
zKzBU*lIJ8!mf;=jXN}HzL0?iOV~{r5wdnPT^GD|Rdh6fcy@VKCV?R|EIW&p)gt?JJ
zZ}MO^K*;fgVaK9`Vny()gIC`w*RFgdbFjwS_VP(fGFsc8*eQ?x$%DXAbp0F78}KE=
zg}ZN`o!IIb!Z3ZzWPqBh7bbUNw@TNSgBgUsr8xdiqkU(TV;c&m#4FR?lTw6?Eu0&fSD-E>t%26
z`^p)16V|Q7Lj%s?U=QN10q|DYB4cs*AUJo4jg3co=LApXVbr^F(Er_rTHd>j2z*VP(^q&K+EH%hwE4z^)1|LG@86l%a8F0I1g
z=zD)rluW({kbzIJu~Cx1F97wJ7W0zD-Va<3)JB&b>sGvV14N&F?KAT$`#7zlPji0&$Z_#l@cHGhN8B&-H;O8kaabZWH7
z#%_W-YzHJ5UA90Zf>LCyDuWaYa*-bZsW`S{_+kE=8fL?~xVCN2J`f1G6^4iRiV>xK
zadE?hsLJbT8^ODsyJ-5(Fc2=DiU3kB8siN_{Ofy@pYfodjn0{RtdsXoTaHC5-Kca$
zbmwe!60>I^ta&hP1f-wCtiF0sIgKPe!@^X
zmLQmA;J|$o$TslE5MeQhZ5jxVIdWVWQ{l+qI;$z)z-8?`Fkz8a3A@xc1IaBRq#m2?
zZcR?3IdYjgK*EdBqMR)EnJR4}K(4WAU~bsyEert+@%OwGpfKxTL49ZJs$yWt^K%IT
z@Tsfbk~+?iV9Yt~a0w9r{bqN$%#M*T$u;dzZthjvo9
z=}l8{?lqV1_fI`2ls-6*KnKIy;F@N*giXAI*u86SHbuInE2Z%wEH{AAi&r$lts(B(
zj?DpZhqsT{kLO}6fE&a~7()W%nRg8IzHtb{wRq{POM;PW3OY+vYv{jk2r!d|mFF?!@4hkJw}Li`@4OD4d6
zGCsw)6+Tz9&~>e&V&5{M!r3jy6GL}bMV5?R`bm2$2vGuGQD-5J#%Pb7H_1Ld$;qAW
z0u@g8s>WKtkj$wJf>I)2%6}r#xJE%Xz
zb*mwa8AN+90C^&b=o7eVeyV{N_2HedKq%q)E}I-^WF1N%CLmt>GOLbIf8fTC+4bf~01>f&TRhXlHFJT*yLr3?M8cz)kuG4UHbo>oa(xBa$~)>l%3Sw$XzLNr
zZkKIrDd0hXE8Y?CF;(=rR_6jBRY*s470vpfk%qwrcDQaBQQlcbRpyEm350ntHzIO6
z6Dd8e;CdL9(;o28
zHOmS$#+7UaM%zU7Jh($>?T?q8JyeFkP&(#FwJ`Nn-`>AS@2L^!%@y&Jmaz{2?`k^$
zkQ*GQYn%swVtEI#yvQk=B!CiYdPQj>lsSOjVOPD>MG@jm47Nrcz;jV&05mnn$7VO*
zbJs>=9_?uo;TtPLc!n#H*2_#}R|;gUFz9p<&?6)ol!J&QTBLw@SC>DY*Ffw6dBm=$
zkw%2^nY0X$&`Ea64XMdUh0(uLp0L?^d{}>&4hp89GES;9=%*I$=G)Ke7(~H)#+}u%
zP-=lLK2jM&a3d+Hu0oOM!vfuOg=!;ejS2nIK#*#be#}{z9=jd}i2I4HA!5duuzm&C
ztuNmyPd{Y@Jo+W3ctVq^osDNV%gGfP8>;x@BCDNB=A8_a%pkk>-T(u~5j!YiOz4I;C3LSuRibIIpw$6rn{!bfoxa*g
z2H0&m`NN)vDiIR`i}V9R2cLEk`wEi)@MfR$1e73PRevNf$nvnMZ-rTbq
zA0SK?zc8gpYM20E1!=YOR>j4T9tR9?CFrLqO_SNbqXJcqj6
zKfCKbr|dGfT~%X9(N3m~n&9rqE5R#$JR!PB+eX+OoKjwRS>h6^>(Nl#10}W{;yXaa
zXGE2p0*kt6f=OTmI655I9iaBW#IZcO`x$U{6J)BYh_H$sgxy>q!I({MHMrBY1oNwU
zVm{N=6Z7B0mw@>>kuE<7C}9A~c_7nMj!J+zJ%02>-m@3*6ze;4olM6iM@t$kCN1PvqZ&n0I0{M!Wd3n>^I3iSxixfRPa4s@BjQ
zFzrZPWH2Bu;zA&tKJksTAkq=-D>P=5ji#qH1gCly?%P0AJeM;%A~7Ks0;flX=X`V}
zJdA^X2kAyniH7T&6`>@;AXJe=V9()#7pZsA@jo6XLPn$dSikIk
z_!;^`dapAOj=5Osn%(sT9ssVE9X=ohCRwT`smrdsw
zREa6hTC$VF)tnDuD&8H`$8(FVW+!J%e`AgG2yZ<3E9c($1Arc`
zn22^K_|ZqFi+)+8wzKttvKOFqnj3?)ZpGnCh>Zt`kay6FM-rjF#je9F4`3WNU>b%X
z5;5)$x583T0rBJloNFw$rf2BONx&foZ`g3g={+Lw30M*(@z+iW$NC{-3m9p9Q
z)|NrSwYF!=B!VNyX9>Y=SngqY@EW#5;zbOG2jk~>
z{TGpB5Mb@_9?$HRXFv4eyk8iIHC*w&>lFOF{&DgBo*99j`r#N+fpDEqk#K%XC0z&D
zHPjgViA-u3i<;fHkp*M;1|nOE%-!8UXcP0Gl}G^PKqx@$Gg#fn$WY?!PE!%8$sLfp
zBopU}RxuXr0NK!`iP?P*7eiBbcR8d4NmPnEHqFtoMpARWlgjm10r$`~eAIbFM+N%d;J}ondf1
zBg6XRaY0=x&P-53(ovGZ`!SNSCDEItnp3BJgu%+8OPn~m#6`-)8|VA$K4iE=RNo}~
z>&pLS-S`XoCzACP)a64MGnj%%pECEt1aO0ZOt{b}Rltk^twGGRQNZ3rDTKB&%D!Y8
z0+-mfM3O;#iKs^$q;0?q?+H}T(K8!pDqc3gXJR=}=d$mS%NT)y#k#06=Ijjnh-|fq
z7_pmEw5+@i@{S}5aj_m82H-(-Hu2QN%JSMoVCaT%nt3(EK@0l{E}+`kcmS7yr_^Ih
zZ1lvKVRi3;Ob{zl(TRZV5zDE|q%
zCqZ2}N4&F3(hWt%I`0U+0UkQc{e$DiD6)_0Kx17EaOc<(ObL>LHTS=B&u0lf5C
zqaHPGS`bXjcDkNais)|vlPJ7^Tj>J
z7WkUa1PaFWX%HUL3iZ1S7!P+X?xw!{6cIqLvEw6BC~}{2hD6HUA&v}ynuo(paMQfS
zbGlfbAn*d=G1l(###qHqv2j?j^E+6Iq)~Y=ku{C%VCUd5$s_WP=XVh2V!W31frz?~
zh!~k_ZcFal>V4Kj!HsBGf70Tcl}yT*b~ks*N1pr0`P;4U2Vj{K(c|}g{1?k_-o9O~3`RL|
z^Mv(3M=EOYGNn--5NG7lZ6v|_5MQMfGxKi*o4v?0eKSc9v#jzLsS{Sw@mW_X@-pP0!hXY
z^+^YBkzOPWz#uBQnFhwVAXlhkKt4!Wf$wA13=GDiCcS&6PGyd
z$t=OD&=8HgE92QF&&qs=FF5c+j-__@*|>IcKYgM27^vmv0wXw$_A*8=LcWt_vTJ77
zt;A*qqF5c1r?IF^3g1D
z!azdI(K*jS7!WU1t5K;T7(h+MutE$Edi&+qKlZEadVm9V{sWCx8PXAP9nRcg(ay>C
z%VjorfY^8s}_9;7}q)0
z10&(B1$a^qpZPvaOAp3FNyK8+bW{;{7gti51f>ob_3(`y1SF%!J){2_HhYSC#4|Ju
zSgMpPhNOz+C^^L7(r4L6mS>kQlpkFDa3mbAPy1?nt|eL~`enELK>5KiNv>W0XTheQ
zyse1UlSZ|A^PY>rL|wwWOj(jlv};2tp?OKnDexO9MGmmzrcAB%@LxDq5~=(3)~B8>
zSAHJCYW3^Kn@XOz&k5`O#M3XCe~CXM$2(^9GmjIbUcdaie^L%LjwNYK8W8b@+NdBR39fO|17A>`eg*kiU(-JyG+!Nh
zk}JjEJ_l0HHDxethRV11+x+BFC+mS%YZ0gQ`;Jz}S3Vqzv}^lRERIK=F@buP0DlrYMrCC@e~#~4*t6baal&D95oPZu_iP3?E$!BGPs0=j@AS#pK)y;e$+Cg8<-VL0`g%
zb6;1y%qO2i7#V8HZ>3xAHnnq*fQ*nJFibqhSoxxK#`mB`O7IQC5vzIYwk?d5;F}mD
zTID)nx*0Q<=Y3eW@q~UiaT`QsjFIE!fRL1Cfi21|WA+fW#faTDY*;(~z$ETh*?Y+n!wrJ1rMlvh3sXbE0lHqaf
zn7GY7zngr2o0{C_+Ryg(+cz$*zT+bxIgE}tVXxQC35?8=2q8yXD<5(a%?IGz;dKyw
z=DZC6Ofj>$8pW9p%;$MU(|rtXx-TH6hG@FO2~rdCP3?>~2(0~az7Y8>0$fAS;}3Y9
z&hV9D{CMm+0XpXaaIbls-@&++YumNF*Zzqtc^~U=p#^Z)_sMn*3DiE4#CL!^rMZ&~
z-p}t`yTGX{b&&5OO)=~6e)FB183cZVl$UQ#OaJHb%a*W0QQW<&0?}qeTan)PY?ZV7
z2j_J)&%e7q^ZImYcnJg{vjl9oQ;nOhj29{Q7?RErW5#=B+?XHXC$QkRXp$f9*d4t!
zL6hOrjnj!ABBj_`5>c;*lN<<`nh<87OrR6`&v!whv(*sZPNPKYY32nP05uvh(vZ{a
z*n%WeCGAnh>f0Bw$4=iGWcm5^DP`>?&+&Iox0~0^J!Uxl`z0NPLw$5>e+2-0D5LlSv}_tv>hxhw?d56O^4R>TrfQXuYV5G>`b!}d0w0Uy7`
z^;7(87|^D^re3Hr7t9@fY{A-J+#}hc_A
zMsEah2rw=T#ZLb2Z4Sz#*WW6O&mdC!8Fr;=BtSd@t4WxvwyBR^$OS7YaAAh1^E100
zdeQ-~vU9hLjEc!^8*Nxz#IO1xFl@GETsJZY?w08H(%?_F>ki69UPQKDOC=;&Vrbui
z|1sL+f~WmiRv_4=B3`fA1*b0S_rLKdczB6TMc$A5Mxr!j_f4Bh6qXoTYSd>ys;m#{
zR6Z&3T;kQyeGUVv-+n;!O1wERUNx>k7o_g-=h{(B{_g#<`?o%wdb4A<{dZY%4jjV6
zuiP*5FR=^Z1XvA7b=f2*y;Yi1;bnsgzpU;vhk8|jpO$zhB7P=+kuPI1#Fg%h05{Iv3GS2A<%5V)HNqSrVm(&8%D+d5
zZm)s7Ca54f!1M}nvO718%RCIJkq9i=lUWT(iy
z%Dm90rQ%`6WyUF=8ldR~vi{TCLuTfU@-n9NNQt7dGhfiQ
zi0TaHZABE;f&r_ZN(P`YIvEuD-nLr%FR
z<=n{CwBH3jI*)z_1I=f7p1DaK;2Mptgh*hd3tkenWuN5pNCg_sgpLA>T_tPcRzx2f
zU5cpf2RBf4w34_Pwibrp)`ADmBOs91AP?z5txAsIYRlyveyiT*R8fpHRf%Y~G)H|n
z+Ipe9@zVc-wBjl@4VOjTcy|!S=jcsTCgXDd<^Q*Q;wS$;W)~ykSpb7Pr@AhN!gNjg
zqo-EaBiCEdiJbtuSBXi01ja(6v94lf
zM6KDKTbtRGY4ou$CL1WqMRIs=_zDtpk(@}-q#@a|jV76$uz8l_U)lsGuJDXd)E=EM
zd9FO)UuMH`+B_zboGzqRDC1xo{7+v%z{6eqrO}bb^8!Y|??eDJR5#G=yLLJGu0x!N
zxRA<-QKpe&Qx6pz65G(tw%dU*vfb)3?*?WW{;kX9=;b@5{L~L{KfSOg@2=E#YwLrT
zOYZ}62~3pI26nZXcV03!A23h5FR*K7jC63064eox2Up57yU&;I&I+q_3@aJ4Qw+9bCWbHrdT%^)d8ZuqZUYAF)IoyUBkYxH
z^g_M#7=#9*9DTGriXT3G3*r^=?_f!fu^6s+r{x|9ta&l}vOx?9JurqCvYpHx;TCEj
zs74gKnXuOe7Q%*wco5E`41;sKNq^6{XFm;%ErVgdBrbd1%h(Ko@X;Onoc$26x-bcw
z-D@x>$|JTR2#A;ENcb<~W9V-6@jVP~C%CTetaczSJZnD2dXWk!)slJD!(%QZ(Gvcs
z)EfAsi)czJ$D
z-}5zq-OHDL48}*#6JQ${ons*E38J0O2Y4;w!VI70jE%;9dXBrPWyae#B8j;1v45*P
zy!#r4)Zjb8h0Ni?dtXIz$$j%~p2ZA?|_&HoqBqBUr?qlue6lz5OX68fExk+vK|-*+f&k#`iQ1j>!BdCZ=KjX=;|5T
zpqnQW3nK@L_&adqk$fQ5T)c6Hk(C4K@bY{*ouBWXk4z4)dW^x9UMYIjz+mP5B*f0U
z#7EJ$!|U90-*?Qp7mQIY6Da^NZvHtAp6aQ)u>{yUoFm=i&hV1Z-bSyNo@zIC+}3F{
zLFZ&uoiGh&VHn&kN_1!Jw%mESi@!uLo{6rOw5YP65A&gGrV@Y|5`;5cbbG{7$vo4x
zhjN*(bfFbY!KyhcWVht419P>WIE!*VpG?SYsqb&8IB$Q
zy^JBG>%n#Ff4`j@rF-7b^UOmY<+oI_txG0c_zOH!-8#=X)LZK7aEfJ~&=h!FuS14p
zJ-*(OnK}d?5f(UF3CABu&d~N5&jhK0sa+yP0(-&yS%K)p$f%UFJWF6E65$?I0yB6l
zG4@I$7L-vE0(Xs~fvA_#}4om$pG+BY3K`s(Daivh0RVkUKzAa
zJ2DI%V5tdvjUgzEvQiH!BaaZ=8rCW{q^WKX#zJO;-+EfiPc*!g(4&siJ(abj-GiaA
zJwwAYH)dx@E$}EZ6uoQJ5Zo0oes=Ua49d^bKO_)gUeY8VO=|ERc+~fOEHxw6yiRUA
zNEhk5Is%W$H{V&iF*ICHoZsu~z$Acv1VY?l0YFSbY*Fc}@6Sq-fMR)6jX?Zbcq{T|
zafOJpKny6Qi>L>1DF&9ZN5}zSR(!~Z_um5`jUl}dZPO(5L;t6C2
zB}1Y|g>IecFCPH1<->d!q>6fi9EDPeA8v;cSwf(UvYCF$7_exvI|G3lb&`V+5btVz
zPZ7k&3A4S?wC72kUBWJhK2ks(a>8EYsn9v1F5lTj;(zWL^Ps!UP7`%TM;Aj}t%g?-
zt-lA-{0Kt2c?bc{sfc>aJuR6|br91^*m9Uq8S4-v(9Mz}Nt
zcipYaW{qnbT;~D_pF1>-(-w%St#65eTNl0a0Nrwj{<4z7pf^k=ZL-c7aqddsf$b0l
z--i1#%t{Z1Ybr~;4Xz_ybSJ7Jm1#4kU9i4NNlGi3NKKxU&VL0n?4ewXrSP~@&Sp()3j4RhJ7heal
zf+fMGh-|483@Cx&(2e;TeIhOea6FqngyCRfVS;5IHaLxQG9ffOfPgC>aNLIxclU!N
zZ-a2z3;-pd(Ydx&wKJ=C
z#>Nez{oDbWyF-*1vl3Rsg$Qu4qp1(!MlVCa2_bA=Bn0d@T}-Qec5qxSz)Pw#B=QM+
zZ8P^QLY?Ykaiu~{7vv~mQAMDQM35+LM!X7gTOt9F0f;2wAwX@Oh(MwR^w$_RChDd;
zVE(7Cwgu9xP5@x)75PUjA4Ds%AU&X;j6rpo#YMZz^RU+-_o<8!7y%^UIU@^#!Wa_U
z2$lXB!82%xJc*3wlqjvK52%xIs9_x934(4^kB|K?yiuO})W@24v+Z|VYUh6QS==cO
znA<~LSGn1aXSxgWG`w_j#ww};)pWQM!lDM5LVGBB3|5g|LOtzlh`a0NYDu?vy`I5X&z97=_K
z#3q4&?xND@mU}0+KvK+)p{8M0HWT)mZnLw#$1%sNF3fPK1ZNxc2~Q2-UK;k=Q#?7Q
zTP8wS+Ugtjnoz<>JI)sP+G7ye*V-LB0@WE4-0M_nOpQyyQ$3^+3*K3E2DWq5L4YdG
z(@-q+X!@1(vxk0pvD_&yu3ikR3-@bApbA3gH}H6LwqN#YTv;QnpbDeVf{2Cx=44P{
z-?$s3*fFphjO0O)3RMWqM#)?n(NjjBzeo#texWS{?o`Q%x~QS^$_m?HQ6C`
zXy+gTQ=Q?NKM(dl8!1BtgIeJRWnd|0k$Z$;pT0#n2e6QvG8p3?@lO^6QIqhWo_rc}VI8m%`AFP!q~H&EW`UMB1FotkdHP27ZN9ZrFW_lRb|(
zivv43R4hj@+ZAi6Ld8;X#>|_qe7=0|$N%NLr&5~W@Acr)8^hN7r+c^Qv8?6?H)vk8
zeUZM4BhYgZG&`1e)@qQ9&@47_75V2XVTyI_JG+B#{56QQJ9!DO7WtO91hD`bNrXrZ
zLc;OSibB`O&od1qzy_nLP5~T47;?T
z(Q3>U?KEMpS)h79*l!ciS3ONVTBggGG+P02c>|dmk3x{TzJrno`f0oZpR=FHzGEO*
z4&5!YJ0=UB8_t{SZThcG2Fyhdgpp^^{~KRI50^+CJPgcn6EP7sIp;yhm>`i@?jw#Q
zT=U}2r0jj{8459W-{QQbl5ge1acPI{tEy@5pS*RzdxPkdvdF9%AH?|~UzpMMV~!+Z
z_+iiz`3Vk2_SzFAHZmi2<%CpkWx>vLY-g%Hc4oMUP9fIA%K#HZU+KjLM{*kta!X0X
z1W5#Av>ZHQXSWk~&IO{|O_1sV0iPrQb5tIex2_S$XCGw$9Np_<@32))6C?_wF9^Qn
zu5LUFv2S+RVMKtLZpX0KhOpk`nYSeojtO!F5auS5hD!vb+D0XUWP=^0|3-+8jsH;B
z*O7wkAoX|{$pcTYle-_u$5wScgFEh_YN0PR&t9Hx5&jsJ1}Yp?h>DMmCMdisiEyX5
zt);s$C~Qgirj7c(D>pv)G3wl)y*5rn3#W85;AGo9Bo*t_
zj8^-LAA+2(dy&4oBk=Z&yu)?{RA7yikMpnG0SLMt^mCUj)))jN0fyK{5AG9OyUSl)
zV)w3m*lWeB>dRbd>cW*)cxt1eqb2T2J!oqk(z=m^067p3JCb~^BW=JQ!|(Kr9f84~
zIti9TUp#d)5)=_E$kb=q{ePpd*T$q!O;NL}*1$b+4k7`e9h&VZ{gB|RdPvx7u0gQ2
zSAj@8_FJ`#&*>j6W06qd>#)}#--wENGtVIL;4Tri;j*h!>TKV`_nsYUS^X|Z-(<0_
zk*anC^*+dscMcPw4M>Y5GpBJ`?3MXF>^~U)sBRRQL&Wrki+2lwc9cZ8>y|NFFiu^>
z=}XFB3=Z!AqTXWyP>0P3Mz%x@sx5@l2*0)L?r$zp6C5K+GMWCIbgI-YH(AHzauA_Tiz%V$*
zG7gE+0@hZAqcPB!_ir>yRTc?*joQpfS^|GL^CO0pGT|_!FuDd?
zOH@i2)r8sBmVzU`QD#I+;d^WAV0)@W<}lSt2kr2JKyQo1LtvC6z%ihVO$43SFnGp6
zU8*aLSUKm=usLfhb`wZKrl=r=>A(`JM$i)^15Erd&m+>msU(7u%?SF;Mfz@yz_-ps
z;Ck3$S9qS*GtajKe)IdUlpDYN{lJ0K3q;6{H&>Z(5#sUZ3CsE_XArP6S4bl@B6@G1&E`8U!J+j5LRGY^WJa%B#lU{q^pU@lb-pozi`AqdfY<*UReX
zeze)`<&FPxK8|nRFE{`GXUp&kmfW5<;(MALGNdjuLRwEM{J!ru;{tWd&e!qG>5*iZI~kgj*(o7<
z8KVQ{p;w_sLPa8zux;31XOL$_z_7I-p*_kB2sP}n-{_0S<8lbn1Z)r}!AJrV8-&EJ
z>P^%km&)zg%ZP=UAErW8$ruTO252H%nF0+oVQql!3Q)QX&q-fF?x%#=?r0H@u^R?0
zv`1e+t}+qFoR83j@XMs|D5?&u=9QMgyv#t{G9EQ5j|DKaL4WUK9Qws_vmDNDhnT41
zk!cyzzt~q`A^)Y*FP1I(toMeZ@(m;tx||MI8|4ta^tI|*`KiH=Fb2*M9zrmxt`P&F
zHP~9_0M(3)KCl|MP8oS&ke3g`VPLPoDew<`CLRmf&R+))n(6Ha<>7C<+%UziKT?{e|~g?O%4_}{GRd7GMG)!
zC0FfBgRJcltUOmnN}g#7RQk!c;vi6-EJ^Pc;#SQ
zgT53{6RuEMC|N^Ypj2Z1)|&(@MV&`K3@Ft_LZ;#G5_e~fGM7Z6j3>o#3{l6PVZIOi
z8TR^^`Y_G}u4Q!l91=D=euKWitgjAGQxiyQcpYY#(?%~pP0xTQVnAqoxj?;G8}kGk
zF%UHd%Ggj~-xK5Hf(H^(mJWEbM(wkE<;TlQFa1V&`HMGUJn;Cy+ekp~a|)_<5Obnf
z&WK95UPG_s>0QBM19|~c
z%AjfpcI1&T29{+JMl8!CD|GNNY?IhoMzJDo=NWLR1gZkSMR>LoKl%00q+NEMN6ijV
zB%6MMOjDPJoZNCZJjW}+_gbNv$-9b-VFL8FSU_x#;LP>0_nsnn84JH-H{rW`0GHA3
zU`QMXr6e_~4o^%y{p~yD6aV;cmluET#~Q>;JAYZ}rT^;xEcgDWe^v$`#Ym9zKcar|
zpf<;fZn4oojOjr0F5Htz%UCl`+Rs$mh;cD?k!kRONQ`(UgofYMi1RQw^k;%WAzK&5
z(|Mt&Fadti;PKJMe)*Lj{k3uo126y~_Cc&Y5RUc`XYSOUzwrUPFANiU>I%5gPt2kp6u}_g7@&GX=64UJ4j(hI|=I;BDqLE&`oz>b}B^9
z9o(F(JBNAERt<4kD9zxBYs+VWLn*vFO!~;!N+3p@&2S4Awxh)N7Sl5cndbH>@2xYw)0`xth20L?jzx`k9nR3A}K_&7#Lu^
zX(;^6fAqsqkMQ(+K8ZdZBZtHBG_9}a?41AZSH2wP)jZ+RvR?byLrwL?JKgfi|Igl=
z{MvTi`F;EJ%{{kyJs&Ab6e&eTSyh!(sSsBIjxz|57|6s45ZlPa|A8k#0K?PFgA5GA
z8D&rjkOT-aNdwsF?W9n4p{itCE;Xdsh5~sU$>rNHN;p-GZ-iLLL#Gv>ozzzuVybkVaYK5L^{tB5+OoT4x)p%{@bcL
z|6@1;mc?6B;){A9Rqid@mQHTbU7*NW35t>{vdSS-bF+kx7WbvPJbrCpfIfH
zjkH@Pe#1pvAX4z;wI5)q^YR{^qK>pZP}bcd{Av4eIpTh
z&$WjBkG>{4-Q()yJ$%31`}Jzhg=OOzqP}5`n&&SlrP&c
zrV}3uANT%4i9Y}G=Q;vEwN6BqOgnQvn;=dRptHbKA_DmUjY4>v0^pGlfPIZpVeO{t
zDsp2^;N%mcBddbVl$UNGmfcO)Ln_jhs!F&ppZ-smstQ1f(Z-5th}tN$UHL}#k3Q2GbA*!Ca5nadb~IE
z*?9Y&F72N{NKl8v&u$8eU$p8Fp<9}L;~dJ+(su7Y;PU`|8@+T2N?R6;9sxB~9g*f>
z`!Ym~gpMUU#-(1rIYl7~(opL+2|dW-NO1)YO-!1+&z$*!c$;gUX71wEQn)s4)-+}D
z%r)=8ft)CHERx4Me@=s4HU!3fI$jw(zBJ=EV4TmuRf;k)AY>9gl9$OS!~@zY5Y}aG
znD?e&XV}|Yd&)Wtya!4XBa}@PR*9D(U
zn|0-rxVXL6|GbqM%UXhDA*C>glc~-j=?d;u^l|C-8ltq{-H%u%06}&w&!RUXT-cWW
z9m<=NhyDP^;U=gz##nWM;qgA)+XeS-a3~v1@ZrLr&ZRW_oZPxY{pe+2%0E#rB0y{V
zo8SkkX-B1f{rU5g9|1&bKjpBuvv~Dskp&Z#%@Ty~q6%;UZ0(|pi($Y(Cp8;54YJxU
zLx99`$jVVKFaoAaHJ2EVc;8WGmj#l|Cj}&RQ&jmZODw=|GblU#ZU8Zm*A9d4ve0-o
zVYi%$)}Uxl(f0GUwK%iMB*MuplwHdCpC%+`3z8uq{8I
z;S!J0{2v*=W^6_ff9k&gks%VAsY?#g3bc2^<+$?A5lMDFY!SOg#0rsNCFXatFM)BD
z@YMQ8;xcp67SJXk4dQ}A;Izbr`AZp>|Cy}I^+T*sl8}z^IbWN1C8qh$yQHywc?c^pYJ3AF9Z*eChM^@Traf$4Bb>X$D@1xSUNsH)UNG3Eari)cPV?TE
z)1nLEDs%A^B+0S@=?KhQ6zb$0NB{>BS&2wVf|#|V|A#GvL{9ZQ3P*ta)O9J()sn+i
zYkS+j)W^G=q(FK^Nr+fH2RQyYI87d&id;++afWf(ok*@YgZDM!jCh;0-EdaoSQkun*}!r+tJW)j?~W0nzkPn`s*R
zsfEY?%Xcb-xK+J}43>V!JvUY)A%fna2eKE!At+-Q%NtskA$2Sv7`Kk6@Zopo(lH}}
zbKV`o{vTyp8I1&-Cgc-+dtUQ;P{mMT;h`{`!49R9&
zbPk9^IZJ|eg?`ErCXE}e|L(96OW+OQKzJFKTmZQSI|!M5@}{A5Mb5xd1;qpiVB)-;
zku4(WH#+yRHI${uLJmU28FXX`qLf9fb1GXJnKbo;{VZD;(T1ZDx7PraEMfuCli+-V
ziR$J7aj=;=$*H8drX6~|)H#*rp~LzM<|dDz&JB~e`{pc&HpRGlSiM=jH2JHXOxeU~
zZ@6vtfqI19=HKNSDW_BCP9WsBS+|<-748smE&Nk}^W>CoHK9f%m(S!@Y1TCu36LU7
zEDpynHoi_$F^PUogJ$6&BzR^#uk^F2pfnIz{>iE@lOoFn3Ap|oUYylPKB#>J)xlkJUJ<@ncW-@k}fb0X=JLS
zxJ!i+(ZGv(TyhNzDq702m0Mwj#qG6y0e2w=L5rN%+|X%0#1WceZWX7Yo3z2{mFvpM
z*AInvW=Q131vhY0FLjFz2T`JjH6X62(fbiEcUZ>{-ukE2=J>a9Sr4Ir50s0C_rr0P
z2moS0oxeK!&iATc{hNQYy7S`Qv@=e=@~QmGSTHnsUU~od$4`C)n8}~AlH~t!g_L)_
z3G65=6>i$rA*m>LyF?oHzT0aEws3*WCk&Pc%3`E#Gl-#zs;cZVid2hVHCvgJc
z_HIHCxoEP{Q-%o3)mT;@K#KfbeFeTpPr?&l<*8mt+{c!!U{s6xV`2y2JsV_uutmK9B{i}5DqyRHg#iC??c}M-tf7@5@v*wUrb`1U&bt_TXjS*7xmoq
z0!ov=e)KA$4)hyv2kjWo)h-8#W!gd1Q*G=!x{*ewg-u+MfrN%Xnr3#H&k@!g&teis
zI~rnO%3O&c_c50{**yX&+5tfh$4|J#*6sC}{HG|Ose_@SneexdY1|xStG>fUc
zyXz76Vz>s@Sb%Uel&z`2=8x)K6S<&fyi8y>+pai@>IjQb_2d*3I
zdpN^%8vGy!LQcfu)mJeGJ+7WSd|2JMeLMABjy)x`qu)Mx^?CS|M!;?TlL^giy1~aD
z-S2@`mq8Qwo<-p%Es_p5fjF_C!PZG2yW)grPw<6c4tvxCp#*j@{Y*)TS1cT|USc3f
zkaR2nRs$Ou08L#nQ4?8ORih{wn|VbEauO0}WRs5t?Pdo_pE7j~oA#0-WpN6CY-A005%87>MGmd{GeJG#Y$?9a-wfV
z+Ui^Qw;;XdpSGt
zUO+5ts6#GBkN)h)t7~q}M7x|?y_-R>v~CF?%TvKp%b*3^mWc{w5&+gE@xUor
zH`%$}{7^oQ||
zj|@DFW}a!>7CXT1kB%aoQsZ@DO#<-)TmLu
z>v=<$Skrl;!#&1REpnYrsiZa3#2Dn)g~;2(Y0U<<>>j3WXYtiQS$aq1-iZUuIoA*t
z`*5|MdNB~?sXf0pguBB@>!5SMob<`NhxLXo7->s53g{c)Vp?Lru#(+NQ{0$GC}xh>
z=*J+$SV>6L8bH<)-Cm=8KSdexT+RY{_k
z-;-lUk`T|$y7p|~+VXba1it?w2Z@3;^E_spe2NoX_Xar=+0j1A)C=%p{9`*4Cw
z>{)dR*FiVf!m+0Dx4-yGHJO$}lh#xKB&Ai0Jh>3~(kNic!P
z&R>C4y$GE?N#?^Qa5Hn?mRRuwwS5;Yeokmx-isu6tylvBL;`{pD$VTrNnByslJ1!A
zB1$$?Ju~WX$IVrzQ9Yddw8W0eW%UIo1gtZ{n%C_$M9$U$vEP)g`|h105nX=6_D`Hd
zk!^ukIsVprxV`=c2;R>93_^AkZs7b^UaB7c=YPaLq8n=D`CcJJ|2*MKsL9^myulfY
zaoOs!+hY<0MFIrd3b)q1+vp3t$tfBF$&+dq!mzl#W}ct3Ay05fqf-Lo5NB+hJKbJ0
z#yZI9qrkVk#e5uK4vJpJInI`J{p;X}kR>igZ0zgaMRkm6t>O&fNiTt(;HGS@kItTf
z)avRB`fQ#L=MOlOm6KiB+z}JVtzct6VI!ZwzW0RX&>RfBsk6Af
zR&=q&sg}2es!LGB8Rrpc$d$;Q1L!#DH{u9_LU93SSNZ`!F`|za-=|E86=cwC-c(qf
zaqoddN`20vpcfNv4Rue^qv_N6+kiD=Bs`ICqB~+tU0r8qi#Mt_>+e-x8NR@G(zq^x
z=g7h#3JOKRn6Vk;hFRf}4ahXc?J!SH2RZ5L!$ds}^>~P4O%~!Q#CGb2D}zI@d^9@)
z6KfsO~BI!k(AxeY8wR%u>B@kf>bb(dfUauvjDevs!d(?ucwsV9&7iPy0
z_>09O8dg`QXWwE95mVq<^*L5n)6o}!Ev%z(Lbb$s+ZvIDFs|rC|13j@`4z6&=X2a%
zBkDWB8J%XSl0xGtzFP*%>W%;H|3bME(aLm&gSi=p1-K;OnC0{1>f8VDf36>
zdI1;~rUbCh!_RyKK5%N!GiSHEJKG-)~Pb2z6&lDbYv61
zgyR#vOp?yH_9O=MdpxK*_?nQ#o_c9x+5AddoS}O2@^RIH5YKTZm$np#Y)R4Ly__L)c!S-qUIrnhGcvt>IyMGxtRqy%cRb;bnSa6&~3OWx{
z|D%VA?27B%`&@zDA-$dDycSMG7ouT6na5Zg439XeP-YK2X5~Zx06+jqL_t(SWQ-U?
z;zEwZc{mXT29_YU+vo*&;ns``h@Ro9SHBN(B5v$)qUT4-@RL2kyQ@B75wQjGatK>w?!IS!i*i7+(!jkA~%FJl13$dUqN6zPj
zj03mAd9
z@#+l7CW{j&Tg=sW@vJAuKye46GV>)poP+oo03k+<;RQA|b8;pP$Al0xDuQLTiUf(*b+sIU5Fu<@x@wNtq^SpNz-GzmjI{Cghc`;a8!DhF
zj!<;5m6+j(5l@vY8vErv9npz!F~NJRKXGp4_x`yxWqo^CPYR*Pt)miYK4ZoX-?y0hq)$2QFK(70j?F?tpyy2B_e{I
z+Up`+#2ZWA)re)(f6&dgz9QT>BrFz)8B~PSVngLh%ju&GIU`P&zFt|XyK4ZJCpr&&
zR)nF3JIxHiz|K%zbdezwZ=5V_?di`~u(0*SO2=#ZKZMh=p?pn1&sUGC(;mp&i|*t^
zsK3Lwx(;P!v~I68m)4{??FWuf%lf>S|Yz}>F7T=V(l7c
zqs+Q-%}Erp9)705e*bAp=+BboCv?JXS`=~y?D^RPi!frbaw6m?tx@2bGk%IWyqwFh
zVhq>Jfg{ufUFc6_O+LedbVV1!vfx|seZWb5g+4;f=C8Z!6~u2WcBoa+1GT`3I;LDa
zP;PW>jRG%lleq&%i`#3QNUb6If%!f#Tmw_;I!Jh{>wxb|L>(6>I&)YOewgD8mM6w3
z8qt0Ab|XPg8+3b3|I~$8v95|v1Y^P4UB>P8!??m;L4bJCmsUzc#2i~F&}Tn<7p~$d
z+(Eb@bKsl%a3uKW$Iq)L_uh{fWJG^IF0|b3kB!ghJN19sPEsqX*%?^Ye;=-bC^R5U!gY5+8(
zco3eR@>qpM0nh9b35o%rxV?|VtBmzw5c#@yFL)Xg7y-~+bIj(ye$0DC-ikMfQjbAO
zKCZOk?%_8!w@G?$L$2|TTWa2emsz3iSlrb>8MG_97XuLmZ2?J#t3i8~+~3?LSxvru`r#pC17tCt6GNI)zDT!`QQ2X9sv_fVDs;dpusTTf93
z$RxxOr~NJV)SA7f9U^NHw{7Cb6XW0j_994s!zLZmOoF&sJRs|W}8kv)6Z<*Qea#
zi89xS4JB-Rfl&?+Ngab4u~iQwLW?qnLx>gcxKPJo!~G;(PFMSQDSiF^Z&W?3R+ezH
zG-q3+4>p6bBo?r1)fpYhPGva1TIyZ0a@hqWPO*
zgBkK=-3cqUT0t;u;5zlm$LP_f0~lVM(kXMXdI&;AF%n?hAP(8bi4WKmZT)??6%b!(
zCvLhq^(l*nmf=)*y?VU-e#&tDI2HrqHX!zz>&~lsRQ=)NdyHw}at!d(uwhPn%&lfXM>CtWDrC@a$m$(TsXTxh2$fVHu7wzwC~Ip;-9P_L849
z;sz`}Ah6;4dgs*_zVx7);%w}Ujhhzc
zy(xwaRtFe4JbDiCfD3rIt+qs>04*I_#2iB;=*{%(P4Z13O1VsK3x^CL12BL$Rb9JN
z-*BI~mOxP95qR`gP9PIPRLdoZXzV|{kfwt?b$~9;&KqbUNY*IiZU!n!B2oj6daMTk
zhdyve2XU*u+>L{XQpU3*%EgDnikn
zd-vc3cHqRZW=1Gj4sn$|frB<2qpQT49U;~^-~OQbAO5@Ftp*DSAmB|A;RtWCYYq?t
z($AltRR=F0Rj>Rzzryq~zx;TojCfB)X`hbo7rU>*`O~xA=V6H#T<+e=i{@y!P|78}2ttD9y0eM`=Kqc}#^Yaw>xtTTVJ|Ys{chJ%g
zq7s4F1dvm>8kR>HH79AsD!^FE$W5J=k?*{kv5DUxtNjQEqNGb()a9TJ8~n&`SkM7h
z%FKo=67-jR8&26L?;tx@S(Nv2z(ZSA3e?ooHm@$Q6i{EIb$e|b1dfHMZ_#Jt?tBT)
zl}}mNDrTZvpg6!FqVFDnSQk({;QyGBihPX|vEtNAypQ8&$|0+A>N%$?VmS?N5f3n~16a8tIuZ;(Sn4RO$*h@VOgcw!
zJIXKy87a1C;cx)5?s2M@jq52>-wn<`t%zu%b$h)Q#RUBEomsIE8)t?VkiU@ZsRb*-;DMiDN=t
zhm;q`NVS_05yttvj4K6hP*k;D39fqw*C#|V9fh#Pyw*KU?iK4*;y7#D41CNx#gw*F
zqQZI%#wo(&kT5!gG*i))v7)3zhdU^-3;cHPvRS^4sh|V`^`|V`X`ml|pFw0q5jvA?
zgcUVqkw*f04bfWaC+;$x-R8i+c>Ucs-YU0ll8u_uRZCF^qK0eKyZH|CiwCSF;0XA(
ztZaS~49rny$XdMlF0cKe-7ajNTL@&YnfLSYKmNUH@x!;FW4T0z_r=vTcGtvhAVg-;E?!mT#LCV$$0Ao
z>84x%Bq3kOGbsqek3_+p)j(?Qd28Amz7Q%R3LBj2-B8GA#SwEmvQtR
zzp`gV-nP;Ayt_Qnw0#%p62%dMQyJxu#nXnCCvH?JpZ<6Dnm7lHJvoRweIUOK9pZbO
z%1!UMY!MZNpdw15Kz$B5GGX^~1-S}sp57$3jH~(HhltSHMZ^&O4~UzH8YGTPPq}Wk
z=8fnixK
zy+nYVGm+f{U5Oxa(t(yk1f*}2;e8q%STHIq%7qa4;_!+%T0uKd2DL321g13Y1R>Lw
zIIp5?I-YqZxxWw^UQzCe3{R&!kTsi*G^KMZ2O@2uT{JZH*?tvyfq*i8Da9`YlO!-7
zVsHjE*?h;mm^U+Jd9GvM`>%~_-ut=>;jA+<+ZYZRjmr9$pj9*p{B&7sImJp?5N~!f
zxGW+vb3r@D%yr;Vc;MHy>{w@=aS9cG1RkuI&u%R7py@#P-S^EuyOoOUn0+97X=D;y
zrfWN%(;IcAZI)wVe(kowc1%II7Zjv^RQtZflGI|i5M0rB0C`v;iR4TfR9aND)P<1d
zgKrp4<48pRA$chSqH}aeU7oCk4+u^-q)C0I
zVK7R0Qtkk!b(ZlV(hnx$zeq&{W2A{VSvFBk+W}+{7Q}N2slbm-8MZ^nc7X`E?bAYt
zOR;RSo|Yp@pmg+`77WVXic5k_*EE9+e6~Q#^d)e?f17?alv!-w
zOC3qkeKb{*!vYeRcb*xKQbp=0(ZuAP-Da#E>D;eNg^r|By%}m1uA(i7R?WHV!AY!oyCo~`OuaxA+%l9VYMfvqh6RxzQ
zjcW&mr-Z8qhrk1K5k+YIs;D!g*o-yerlmzn;8A&v>(k#5|MUogH^j5~g-baMcGg6Q
zPv|7?AriGhq0EG|g|x!H#D_4&nDMQN<}-Z{eDK~oKKg9NS*dLzQ<{%IIX3Bo1K^l6
zX?*Y|^vfY@=Mj23A#8{c^im%2!uMu{^01C=wi2eLouwG+;Jw854niYDgm9cnAo_*d
zz%eI!M8-M9v=yg-(l2pRF1ZVAly;T>r4|ZIiRxsm9ZUOhC8S6@WAK?ZW7*|psf8%p
zl6OK~^RX=|`A8YOV14$Dmnq!Dr4(_d@514vy`~9nw>ZVmBb>S2J>oJhJa8hW71vD;
zxn3Nx=LqiA`X)R!E*i5m$4BBBGA5rP*;9{K()pv3@-KUEuDdA8)`(Ueu?&CapK)*C
zYlfA~aL56MbR&p~6&JB7#_;K0wE?z2aZW@QC5VYuWfFbnV>5$pe!51D(v^rpfHUw>
z#YImg^EdFc=Vld4jX-2hLO@v-PxK=c5s2#zo|1x4_zd1uUK@V_ewGNZ0WK=2Rx9*>
zjn4>?kgQsX{)ilmXhN4w*$aeB9C3zqHw#n!17~0-`_$9C`7hf-bqld;2HL!S>Z=YeAFsoL_IBi*h;7(e^LY?G`I0HGA
z{w};SI}0Qip+I)
z&0ry)<_c!?G}McL>`EER`*hS)#2L084fsBU6ek;lRQoyrmv7`^qY}ROO6w^TLd+lP
z(Icg}+qnsM
zrHC`YvRqZ~iIs7nF}a9LQwfHQ7|fQropBCl0s?b|uD}|HVD`@O5V=ERaB9XRk*Az7
zVbQ$lm|bOTePQ3iMY;n2A;8I!jlpRuRB+&e=J4IP{NoF-2Mp0kry%vf)G9EDygaav
zPKr7>xu}cHKJL*;YDl%<1mP))*Ww5}%x~h*OHygM(`U@MW**k%t&sF
zQAWfWBy%m(=dx+jPsT)VyMads!nRsT`H)XFM26{8Kb5EdCL;vShXk7^gV=zd6_Rc3KY&b!5Qln(S-Gg+}qBUG|OuK=m~ld=s`(rP>1E{
zfXtvXDgBOg;YtagECKMy$Y^a0u$a4D%x;M{SBT3^mu&>$wuBrXN}@A+C_y
z!3uC)xlS}4-g>u-Ye_C2Wfa%$B3|@>@N_9>Zh&x+#hNkJGo}EtLFBPQe+Q(&Rpj)M
z@zl&TR&|c8BHqnw)uVs$K4%8%MI=?jwK#wBj6)O7uJAo__D4^vga7E?uxGRtPRAut
z=D2~Mc+V{|pA!&HD8cz(do6E1yKtQ*N2$c=H{`+N2i4j6DV~4vpL4-JOdfGh{EVO?
zaIk+3i1-vjyU0_O>(F3J+coJblWp0?B>{_p6NX{-7p_&OuRN{>Uj(_Ja3_Kl$bbqq
zKai293i9vHd_kP6)sM=%iBoY>BBDkQz_x@K5hq$7e{OcVT3umEDR4$?V#OgiNFa+0
zq}TUkZ<*9BaT9%u2HAQ@=whnZVSz@86Svk0v?J|fBkt3d{TGq<%H{_NX7PCiue0C^
z=68r)v_1er36e&FNW2lnHT5J|-!3wbwEr5A>th!DpX0e$KALaKjMmT
zBCLb{^$*F*n8f7tB{cuh1&K}rqJ?Y-M|7Nxw0{?cP6-jm);NF%Ex&4qZdFf5Pv=W
z@Xiz9WrJADd6Z~dqf9tb{N4u4{`q4)NZsk6iX9A!%cIh6`bS+F1_Cyt59P
z*VC~Z?Nqm-G=%ynN2hYO-Ej=NfIcMfz2#~eSEKXLlam2#mU#b@$Mig0YaK5wF`Dlw
zFa0WGB1h*-%dJuAY3YvB)qldCRVr*~%wexZ{H}_J!-x_
zas##^y`?JlqRRAV`qIBzJwL`9DMXK(au*otRCkC}gn$_~UMnYTs2}J$NKBK4HmM(B
zySs|JYV~a-9E2%|PFffRNt7t3v)d6Htnh&{9p1*m>6D@C17A9BvpfzcC}vJj95c>x
z*7!n6JB1foabx-ystes-gYVbLFN@qb99{vxizU7zPR_}v(=`-1iPKU8t
zjvDcDBuE?N1ES2P=Eg{*!;^z2r(YEy#Z=)c%3c%60h+1L8Bq2wN5t}sB1mj-#4HHT
z4gNW(L#~DFTiZfEaygmGW4w>cXmCZ$B;)p4q)VKAk!Un8o13RJS4GWV$IcR*@JM487BP!X}W1u_&nO8eIAElp7@xf
zXu3OuEKv!X=up^Bk*&HIcAP^Hy-Jx|WU8Ik@`E-CZ#iLN9iTV5+D(Enh;olO(sAYK
z@R_g6$vL;0GLIeROCWcCRIJqF9CUl3)*(bO@T{w9{4VCp<<H2F+%smJ%gn^j8;
z{hk~?p9H(
zwEec3^-X#pipE$b2QAi(?0?5k-e#PX!|%^UDkM)1dNHp%wO^^dU=w>rknKju7N@|5ee
z#8SrbmSEe#wW#G-@!9=B`0Ar8@rmn1{4}!?T08@mm?}mGggofj+N}U6n
z%p58<(8-kdZ}`-IMGCVwOkPhN5z?Ek^PIAR#K~v>aQw8x9I69Ru+^=%h!8Hf$gvBD
z!INH>lUTP$dsSGqjUX*QXQQ+)<+W+iRZq{jePpOp#gBe%)So^%J489SsfAm8-<&9gYy5
zN%dN(_{r1C0A9TE)B!NEVw`RNZoG!8Fy;~?%sC+%4lq-Cy40izxFYQoc^`~mPJ4Lq
z<7W!;y5RJl`XE45BGUIm-<#10D~JU9D54#KJpCJ!N4*OPivm#kgg|t_>2XTEXPlzo
z#nK+ejUkwTJe@~58qaYUH6lOUcl=FY_7=C-%rAt(0i1+0ZZuRLd8X+bb!nBMBIN{*
zM|;6nr^}ri%*O~$M<4D;X=mYr$kEj`_pEcBQ`|L7=Hx@re*e?A9ZIEEi
z7l}t;RWs}mq=_U-!WY=EY_r6Vh3_PUEL#HGdJT@R;ta%U-6`cF#!7wUG=&_la3zFg
z%t%w8z+=3y$@`+XTiU6~sxWlfSUx8Bj^LWg82N?lD$q6`Q==Q1Mw|PL>C&`BN<5fq
zkMW+9e#F?X-H3r{Va+gsOQ82jbLbOc$GUJLfLOMA#4!Bmo@|NPr{l2VCeYDnh6wU{
zwT38}V8VQ{d3f1|KHQS=;1=I?Z4DP~qibs>kNV{v40^DnAuiq9e+dWTL8y8scH!!-Ea%zBiyqua8|V=y(iw$5NB(n8`+qq
zTpD+_xS!z_9^}v-?7djcA&SO0g*(HGY&I_j%;(|WUCclC(BlGk04tiPJN_FuJwq<)
zQa@t<#!=QWWg7~ld`a*{B<(E7NhbpLx0?a`u_J{#d)L|y0
zj02&Rj*FOx#~e%3&791^t{&XvzQ*k}xL&>Ket9Cv~vS
zlGe7Ummr5gmLZipC5i!jS3P9YVOC-dftg>FQS>k2W(ifTABCW}%nRrN!Db=;dayB9M+$r3*iJYiKq2Gw{mU~b#(N>5Pb*w14qU&?H*7D90!##OFNr5
zc6x~;b>Zqaa6m&lKhEv-;05Lrlh<|*y+cIqh@ukBTI1!Dv9~^N@zm{g&oNP)!PxfT
zhw31MjrZp%v!77o4&@
zRgFMgMVwJY9p{{|bbuviNnZe(z0I`hV9dGPJA{K1aew)?6CWbL`Rj7pI$3dpB10Xy
zHgS5r6cNaFf3$obB2hLF35eU{1?GAVC63qA!hd6SRAr3+#2nYB{FpnD^{w@kvinr!5NK_k0
z0?P$CHgLjthpxZijphiGDNkab{3g(>SzM=2
zkpb?^C3HU2PV1-M&N194Pq2JVKG(SKji*rCvw>STy7Uv_`wxP;Q;JzyE=OWY<|dI`
z1D(0{sy9*mn*wtxvwDYyLvqR*^{VeF1b=@7T#|Yrfl4?*=fI#i;|zVDLo=W=A(6_N
z9auCyuY_XC?68LC?>vD42%O@;?1ZuDh3M5c1+qu-9nb$6a01tX3$8kF9wN@5pK>Ku
z^#gL-yb
zH2H_u<6vqD@hca^S<~&c{gYF&!0FYTE5SE-$b6nKlRPws@H
zdU|%k?751va6WrO+BR)*@0?8p#04VhadoaC+y*%UAer4M2nfowcb$%aPcARsVvu%T
zsO1G&5CmPW+>NgT5f&Sr8&#B<$R>B9_X?*iIT&udZ15S^2B9dE?}9*C**R^AA;9}V
zl5!%l$#RnG>Mq;1cx^a8IjMUxqAj_3@&T+qbs0#LK5!DVeX{A?z-6RsKb>}Za${rN
zJ_E64W1yXGY_B0BSC2sx&&Hj!VT5Mw~Ik?X_&N-j`r)ii{E_2)6XVZl1
zFz1A-Lm+oD^+Wp1n;Yt|TT!2t*i`R-(PqUUK@vFF8sRAD#^9Ce&hksu1QWS6{dL~^DyVYW
z9taWIn
ziz&2l%v{B?fy@zg@C?_&wG7uK?zCCQ(kdTtGRS8-VbX&GKp0&e2@1<>xQ5|GpjZi=
z2cVU>5495l2`UO$2kvZJI3cC}h%&6iI#{3m32TVH2MB!MhUQf`5p3f0qNFix`NrrX
zQiGZ~g$TRFTGYvu^U-=+REZV37SD``%^(&eil?4*C}OO)R5=m68{uzd*L_B*z&H8v
zt`a!H@i|*=;Y6H2Mdtz^5jq^x^jD75e9a|Wq?g@4VtpNrz8(U=O?lv9
z_!#@}
z7r48&_i{CTdaW9~vY+{p17TkA`fxg~_O4y8?tJx&Y-$Df3gga0;XE+cgek<;=LAHC
zBJ=x!-v`&1J60aRGZ4pG)Y+6ul_SI!IjoREPJ||(mz)R_f7U~sF>%`O9zs=uAna)e
z;=q%)B98Q&*NNk62Qf$DJT;q!jo+Ie^?)bRia5h^h*PW`M8$i(VMeoCBBIHcvEj4k
zoi&P;(PQuwB_i|m!*5*sdO{v?!ctto@hAETv@<6%;&h=cJ23KI-rE-C{afSk?C8@4
zu|uc9jn_6N%>{&l+U6hv>$IUOk87U{F}Ds4u&mlU>p@iY&;>-Hbo+O&-7MLU1M(<
z3*I8}5fk%{cCDQw%2~lp@abv1CjTj$t*39@VxNJi79d(TF*n`|L`GXQ;Lo`<$nWQ9
zxocrDWCxSz@G9d4M2AXg<|uBjM-gi%hh5;*267@qgvyTI?5P8(Ei7ckCl_qu*1dxx
zpg2M|*&E{G_BwSjJ`hTvT~1qU(rg|}2mpGWa{TP|Sz=cCV
ze`&m5LcB)ThBQD@+Mwvjpm}BV7bFHbU6Yvp(q~h#$xHZpVlGeDBz3w`lb580aHK5#
zB7{(Z!xJtSaMiBORumRagl%%&q-@HOfZ$!)Y+IP~E%KqBI!Xk&9@K>BggD#GuLMnq
z2HIiBXFsM<_P6vIGArdK5#ySP$v+eFl@2%`i6}*t_twXEuV_EvL{AGZH+5ST3m|>O
zNYsEg`Vid_hY=T-(QLXZmpaC7i8fkuMgRM!a;0!3@wJ76v&0cp4Lq*ds8vE-!|76~
zF}@o}f5GWrci3x`C*@*!|BB7ly>-nRTEy);a18wQ5yhECJqKY+orVd7$-+7yq7_xF
zd8eNT-E1#`Mcbt5n^%WN7l*ZDUM(!lAKV5vZHepb(s$Y!ZpB527Ii0t+4J-FAa?MA
zxx@`TWf$?BoQR9+`R@H{vgFoX-R;BK(lk-G*!qd^a5sN?T%DahrzOBOKN1hjVm>=R
z{zyP4uAC4V*B=cn82o6=FV>q7Zva88u^QOUJjqRF5W;Z=z7|UlB*L%osMr=f8=~0p
zfT;K^4@+5`Rdw{6uwlPiPJ;Bzc9*}hj?;x_zxN0)ifl-9x}UKu{lFr^vELxt+S;Ggo$E__rHD*Vxq8+m&~oFH*KTk
z4jjNycz^pnVC09iQ*=(72RQcuL28{b?;InCrau4pIY5MP2EtRmy?~2=L?sB@g=$;{
z;uNi2uuDSjfF$j+Csef2X|d*b8$=dv5OPSMGdbD8k>R4GJ@huT_z;M7Ijo}H1R|#k
zk+H`q^!+nVpA4-*ggHf??TNF89K425d9(MO>i+0n5c<*V7E^$X9FEfI0y#K!ueyus
zSC0RBb>s9JuCm!2;Z7-fh{G^pgtalaPMxuXGA&&8hi+1&1m>c!HI*hHlld|xgNJWUQ;RN85EWjY?y*P}qi-nd1
zw6JJ>j8Dz@Z_zxD{}W(?stcS$sDv1Y^S4CYR(qI8ffmX~33Y<=xp*XjCGgTe*1s@i
zNS&msC1kMraSfC>+F}~YE5uH(x^d^*)yehmR^ys0u-TlK%)3?=E*ee^L#DlVbbbQ`N!x@(S4)aN2XT3!U(Q#podMoD<1cAB$iaupGcR>OY55mQ$
ze}l~$6VTHWh(qC0C1YTl&7PG2{Bt=R9F5^l(ZeSwN
zn!O1gg+E?A?l(VaNRLu!fSD=p$O`
zK|o9gw*j1otO(fSIHXd?XGj}IxY-tl7jPRiAAPpFS3SOX0v8Qj2u?fNe+hbW4p(nm
zJ-q&Y^(X)PA5@2{>yB>Lu=mlp-q$*@64n5$!{2(b+S@^PLEU#XkSxS@r0Dd@sa6THW-gWtEzC3Bt?iM;sA^PZ1)V
z27+>N7GeW%X$IT+S^(k`h^|}BzJXg=hAQnbU+|4>;4^h)cMFoDj_6)MkYqeW
ztcXVRH(-cpMuN$DNUP34%7NnFA!|)v&@V_oAYw$uX$zaJ&RBG_9R#k4X4=U@)>4Kn
z1I8!pW?0jfBl0bJAXE%;mGFsDsG=jy6Ly(gA1YcghYnKgKb)&Ke7UT{9I#!VJj7TsPE9DEy8CFj;#@gMCZb>
zVG-xnShx|MYUgY?HNGI?_L>psAu3xT>L_lnpE4eLw1m*6?*`3Pb?0uo>~EiYJs$lD
zoCY23F{c}d_08&jK)~zBpIsbRfAuf_o$B@1|26PEhZKf7^G#a!IC1Cf_Vwyl{>pEs
zd`F|1u6(i{zaQcn7#kP9{rDibf8s<0l>;(AF=YL@&OQ>d=IQS{Z@*Ff?tk&0AwmL1
zNuwBI;~X+D5)qE!AAaZeAOx^#fiPG?5HdT$zmB$S&uDSH3OwzdlaJpGq
zrvIc5IGN=IeNdmn#tQIBlcSmC^M{WLFY8iK(s8i=?DZwi1ZHXTnE(;%2kyYB4K}g}
zQhfq&ea5w;-v`^>)LGodS~d&!h_*WJX(wsq$cTunmrbR#uW6@a?t9xQLBi*-Y9#>N
z*yx*tQ{sJRxw^fUKr$cM+0n|>S#+~G_zcmeLofTxAO_hp=wW|bu9iBKnf;S;GQO0_
zXyGbcmOUFkEOJ&31rYEM?G2n=4nJT-y>AmrKQ}3tCXwG$ebxu3(XFRq2aSdfSiLsa
zY;r9`kZCyIRg^T1vA&le@vHLbA9Z`J_=0E(QVGmWN#Y~yMN05)49mA4ty^qcX@Rne
z{j7cj)UkTQn)CZfJ)x7_JEeV(A%{xg7R`!O8G2&M6*(
zq7xVDWzZx>L%>LE&`u|`*F|4~r)?GnbkA;GQf~eJ9p2Ff3J+WXrxF~Ri1vFosY5OW
z>z*A_9AH~)N2hu@V4+B_lr0X?l1QaY%A!8k#b`W>oZh+9MfYg*8ucK8LBukEh=|fD
z!yy+s1SPOmz#{{ja;#VL^1v^pC)kE&-IVcbBdq;{P)6m0@1Oc78`Ctx$JMrdv@Ik2
zI~*LSUuEYCJjz7~2MHp=F}QyC0^|RTxk1mW=CFmOm?E(ux?6gs)ECcc3+tLSKkjg4
zyoVm(O*|vfEAjZ5Hu210(RpRXT76pK1(pA8mv=0#-QWo^Wc*05+BQ%7NeJ-0`3;3ox1sHuyuSQb%D7re8+E0WOvaV(
zsl%E|u+Qn6I6qa{hLYa@BH$?}EamEMW(YtaAwcZ>;AMjUAPZ#MYc3m`z@pc=QQB>j
zn}N_t&=xPLrKP3pruHN%{cbb(%0?xMXZyk8NMo|{FOT-C&$ivBNEu0QenV37;MpSm
zk3^ZIEb&rW$=CdEvfGy~9J=TcCBN&69!Qj0Ht?aCGbI?GaiwL#jlblTOJOkD^p3m4
zN80E<3VUaGajV)LK4QH>Fi7#o=Yt!)$=JvgUD}TTEajEoCY}d~9=lxXXEV+&&%1Ul
zyN(fuX@V&k68KKej4+?dGx{ht(tfoejsDL}dD`!!*3h__moWlb1!q
z-h=))FSKmcN?===X8UV<>_))C*r!?$Sjn0g*j*#2y0$aK5WpEQ^;r3u*
zFCW61#j3(9s58M$zDvL$lLvIuXJ#((IRND5&ilC0Wnvt-7AoxJ)FI?MTg@X$sbljLIrbaKkwH$0wVJF2B#+lVQBrXoB6v-2((rbp>JPs}G^(IF}5f=|QHSttT(^H(m
zMzMxbmDB2k_RLfWWO1mxDEB~@(pIZ|`)G&;c{Tvr2_j#I*swKDAKR~N
zbAl&G1PuA?My<7nvPNB6D+gC8QxebjB0W#FD$|)(Wv~^SfrvOKQ`+GTpl<$As8csZ
znKnq%G|H#tnnb=%8c%0>r9`oCr4EX1st{NtYmH5@X(
z$d)e|jRU6n^J$=48T;f(;k!wtC-3ekU}9L=jWSvJHX467fBiJYh@C%RUNr96o5`e0R^9{qDZ
zGlN|Si8QEi9Uxyxgu)u)0%1&84VQz)ejv`Et_!Z>KD%FVf{>E=FY77<2y?C<2oDu;
zGfi&cLq*_>D`jg!+={szkBA85a1zSKk8(BN9j2{B4G>q#a+5|uNf<__K-cSzVU3Q2
zkZ)dD+Wtj6CU*=NWdX9`E0QA)ydaU|{OhGMHa92aMKyyPA>JD3
zof2`z0*ea?sFRZ?)uZEkm~iUl6vcJs>DkFUa2K#3gjnlrM~E|SVE+Ct(6SL;Z6}mf0_`8(#2Lnm*!4FH-1Lrf@~~(GAX(lk
ztQPF9NFx2VZ2sJIb}B=fPK4xX#NdYIN7DP*4NP;zw8zcewEprZFiPQhV$exV?)@NZ
zL6F457ShCX_E&J;qV(18$n;?PQ>z_mzwB}n==(KXQf7z$^->kw$@Ib`G2Je47Eyn1W~
zJxxN1^VBYp))FJu)kh4{)5O+3P=4Y_7xuXhp%lBQ0WSiBI7$2D^qbyx@*H2^$KMBi
zk$|CXF}sCG>FN|n{}h_3wwn@8!X%hX8{Zma@w)OFZF8J6FpjpJI7Kdk2A@H9Y<}oX
zoL^%~LDWhb>f`FzAOMFBVp
zwX6%0)!hA}Kgb@kenn*ZfbhNjaDH?77i(cK{Z;CcC}dY;C)F#Y8*m4BqEXoLAEHnV
z%n(;|LJXmSsH3=zMuD)4&j$1_w!mW#SYp6f({ALfkTMy(Q{Tbzz#o(wor>rqsBZ&|
z@8Rm2HR7f}9^PUzQrWWTG`N-}I_d#>ImE42_*`NAtvC8!VZqr}+If8+Cs=deNl=hq
z{f^GdY0nU4W&KJlv9u^w8OR)&5Itr}tQ60d+v@OFU$5@JjSF`<3Bdi{>@QLu+_TAk
zHGTB0YTef=1tAWKzoyCMQV=pe0Ya48B`&y6WP-kngspQG*zluYm}-8CnP|Q?Z_8)@
z3+kVEuqjvC_G9a_9i_=XHu~nx+trI-_zD&;I;@j}2uwm8^qX-}vGT^VJ3tzy<-D)q
zmhDYmi$diDv(D4gr&%Mnj=s#A0L|`w6U9mtUrBqhK)IDN&*o1VtDlF!KxNban6}1j
zGD=M*G%X3~bV4)XIjpldfyx3j5(*78gcuN>L}H%iBoHjm;DbNk#gvl8VZIV;WyX=l
z`cfx(TPRB$WlDtb*@o#1r|X>(*<5)^o$+hosoZ3qh}rN(e)8vHVIo2`PQrr|j*f+-
zB!eI||MZ7!ao__dBBylN(HtDYJyk&`X(W_5p{l9N!InJK;bB$fG5V#~&usXlcOiD%
zkQHHqSXqBD7uCcQY?WI?MXX8R#6`Emc0weGa}407^sczQ&bX^@
zV!iawCoM`otyIE&alc|t!trn}ASOK3sB0kclsGp%=AyU}ry=&5TN1S+@7orV=I#yC
zGuXWao8F6k?B7kxSdiZRMNWhkDc*BnTwg_2c84G{R?{k{d`vi%7ZW5BfY{b;p
zCr(QsW#DU0ox04<35tF>m*qk)>%+WG0@CrM9u@7(bB?UaL+dacAR
z5Q0m5?>l~T7!V&g4z|fMP3Lz5uwUx7eZL
zp`0Mctdy-Xt`KAYyg$SfyqudR$Zlp&#_6-aa)7>Esi
zPb?p`VE$07lsJw>5pWHWu!X4YqEKyo591wq^vHDEses
zgX7SC_WRY(es4gvOR@j`=OenYQ8p#V=@q#P@xr^EelQe4kWVU8
zL@9gUi@aQnT6c8PPV%^s!vgE*5}S5vZK3x{5oTcD4gLu5a=*}#75U7Qz_W)p%#@)M
zG0XBU5jL~P;vojQoJMs@_DvY8>NEev(U6Lh;>WeDJQ>kw9H{5WScOruCV1E==S;qlh3%lhG@|l
zk5(7Dwx*|8uk6QVwpJXcY$7A-&}W3_eJ|e9*_7qYX^WhXJ)HjZaceEu>tDjB60H&S
zVMGVZ7ezE!#u0NkXl!VDyi~l<2QlBkHTLKkM8!U}V~LUZaXy6|6>#ZK#u4~*Q=wAE
zonl77ieB#+c3rgtz#wZQD8~~!@IeL$6TX{B%Of^V-{lJLM6wPf4lEOR%@~u+{EFr5
ziy?XooX+u%l=Kp=S#QSi=f!gIucF11G@h_!Ta1&4mUy?Fa;0cP`e;*F+liwsd4>}~
zJY{H^C0yl_ItR3AFNH@*IigmHTDdl9sGBR_HC4vb-yRoetvb$?!Y|e?B}^IXImEyO
zO?Syko8-LGS`^sebSa9Wp#yN7TXKPOv?}oMDB2t13~GU=NjKiU{bX(i{p)PtaB_OM
zq24^;CGDVKW{;Ekop2EbEQaL@m)OmK?qE|7`nNgFLxd8y#yhL)x{ngBo6QI_VcFcM
z1*2rgg!EZ2mJ9sIv9K)zU}(t(GoY^$J1S<%SrBIo(ehtnvaDEQ1MV8aA#L4W>mci5
zexLLdNs0|{JRM;oisLH@hWVwlDc}yS$82(^+Vsz>>s-2}jDLxHY(^RD7c5l9dngfp
zu{t`u84g4^qIRCLW8UZ(Qp<1;Ry;mcvZ?ajx4yRx;Q;Xg=;cka=9vUeTGEuXCE`>3
zZzG#Fa2tL=EVIWRp+(1N
zFso+!h}#Abz~H7dfU%x%SsDuwc-X7$Se^FbY5hmz+`KK_sQOM
z%zm)x?=4tZKhEv7PN~$JAYV>S9M!V`+5B}uUFlnb=Tmh{K(-!)(ffb`CobADW5ZRZs$Rt@C#eaD*psI7zt6&2aB5mI9&#S2748OO%!$c3
zU1DEwl2hd2hFjveEfnhtFT*Kruc2;$yL-5?Hb{^t57rLzWUaSBPN(|H;AaYq+2Ba6Rk4SN*%y
z!2`-1LKr$PjX0x5KfqgAS5w-22jw*C*a4?HCEFoha~Vhgl)8aGMG*$uZLA^-6G8mO
zzXTknHnj7f^`sbtH5eys!h-9Jby&C)V)}^wP
zZ8z;h^^~(XqM-+e{|s;8n8ML!2{_BaD4ltOQ?$m!cKA}ri1rrGQ@96)zU{-bc*sdw
zXJzJH;Ui+B2!i#izJeUGeucMHh{k1&nIvV}(k>zr*Pya%EsLI?|31UZc*;3I!B)Qx
zHdwL6a(y3@@?09)tle_hj{wb3S`J8_cCn&M==Kv?*E_F+wc5Zb#uy%qpZ(}
zGdy{77^rzF5^~)x(KFG*rR&DIa=!g_J-NQu;9OK<6GwF7u08>?Pd~JEwojX7n}NBH
z3)ipTj4z0j6Z}B1HWmNaDRm>{_UMUn&CRKA-TyY@kC``PINQ4gaaLRvoSZ%Y->}Z6
z=p3?d9?rhN99)FpJj2td8U;_@{2oyD3lQ84HS5zmqe0@K6-R{44I&Ei0ofEz1Wz|0
zH$j6q*FBe$bJ&+6lB=8u5Q3-h+z@A3auy^o_yeDZ2(g~{p@2ejX5;69qQj*KCxQjb
zqSQ-d^eS)}eaVS{Wt3~o+1b`ZHgvcMrio}pj)eC}Sf2r;*MAk3pSlX3x^%82q9xcz
zFW{=#@YO!vq2u65EZip`u8T`-``o9#4V!c>uOgpDg4y`dEod(j(;xPt}5rQ2({
z4iFSN0_;<+*Qr7<15Lb8D}Dm)Ht%24=5oSoEx%KCZpt
z(81XOAwB0ikl)4e*8Gbs82WJwwtj{R7`YIZXvI*pz{-gj
z!!;Pw<~aHhNsEXaa^BB&Q}kTrM4-sT=|^NWh5+$hO`UrnYrSd4?KN<7yhR2{nb$_w
zf*=k!;i(@Hx7Wy-M{EE$uuIJaTx<>(AY$9H0Lg2fc60b5W6B)bzJ?RA#AD_VL_8UA
zQ4abekTwx23KAhloKgp{k*{N;KbymsB`Pmdn?=j1Mdn-Z7UF
z>6S%^o&)c9Y+_QdVxLR4fPXV&`&s8(p(`(C3q<-
zoCUZg(TM=Fx|YL@kz1jDQGy+Zkmdro;0$q2I1#+IXv*2_vuWXW{d(tB=tbs;iiX~4
z!FWz^HND`LzcEghl)#&3+=vxMz@lO?$7le@MSobi6pJbcxI`yAum`sRcv0*y)KM2h
zHSXOFq2Tr3%k?9>PD6k?h|h!RZy^5C9{^rV6X#k4uGxqO{hQz}^l^w=$IpYrhcL)|
z<5)^gL>F_^EdSB3^>?z}4LlsZ0i^U^p9b
zd;KMd2t*HDz;)5Oy$0EcgKu5`4Ty|Wh!F_x1(68&BveAj%UxFLbT!bA6*oK#Div=;^><3SEs5E$LE!o
z{&o6PyotIt`dGLO;ZVp8nqAW}4V(c1=~!<$Na?OzF~$(W<7+Sf+rJn@L^e^m0-nSf
zEDapo0G(}tMHZ+lDt;hX7WZScnd}2Lut_?hJ+;Cm@LrMiPKC
z!hbwG*7{D$RM|E~ex5
znp3SB&0!nU7MU2dEaDQKM44aWN9D!nL@;I|Pj*|znmEdh+iTg*ZXULWE^nWZ9wpLk
z>-O5yC`09@u)*K|POBTej5=PF6ApxCv?^0N)*w*5P-df%sPb|qITPgHc}gZunQksO
z1JlNhIOEZsgY2^*F#dgX6fWQ^Gxl=i^cl5P*MsKwnWN4rzn$ywxZ4$FPTd=Hqf
z4e?&{Jy*8c<5UI5L5m29hZV@%Q_GT*zE^^K;hBq42T{fCHM$eZ5%C@<@mS+XN*#y=
z$a=#`$LqxBG)BD!-Cj@FIMys|$8Sj*5x6d^{j7LHXH<^MJZ`VMxaY=s6>*AFEK9wU
zb54bE8%{^`G2!il9N*GszOl;Na1$YQiC92eo(6SeEb
zlZZ}>YAjm@a5l2@a+nYkRnJ)%8w2I3#V
z8DPvdSR_DY({C0lvAl8F@ZKAAfJfmC_;EyN1jE3(hD)KmdJS>7jZOsV5mo8svqqk+
zdvv)75kW{K#gYMio8|qy+xVR{T2Ij0eBN#!1s2vD2nFgWZm)qs+PH?=lDjcLL=xB9
zLqc7MH5WSF
zBaI4{i2TT>vntzZ8Lqbl`0L3dxN3+yH^}ZsBTSXq7|}SYj*q{OG9bPpju;EL6Y&K>
zU5aI#Lt&(=wToOFP7#)8+01G{j0Al5fBVeW_I2~+N4{RZ|3p5NrhHIo`~A;Q*#Ot}
z?nxJ1pkqpkogm6Gv0g?FJr!r5X
zKyK53^2j3M)&5;rkY?a7Fl;&ldCY(E_<8mAfA!s5ck316>H~N>^Q2KuS#C&Zal3&^
zym(rJTVX#`+5|^Nrqy#J=ai-Xgja%xz<_{JoYBYI;8sop0M*||sS0EjaSOM4My~_J
zEkajJR8t4I6oQBH7@KepY^!<>A&87K4RLH_j#+mf;DvjlxMQaroDJI(X*A{;Hu-@A_b5+pgSQnjMU20-!w!Txw+=-k3lSw^4Q1WB!9L=KPdN`FsoXDs&j3$7
z!iKkoQe~7WkGZN@<;UnQc+zCCBDkogD2Xl*SI}vQ7&Z}}BQ7`^Kr!l4`-H2LrI!ov
z@2WjKA@)JOV>lj9U_*LK=*anC)4Dai!(AF`(RaC%-~m}U(c%B|PiAi*{e}gOsHe{b
zTM~_K%2b6&XItHdu>0Byr$Oo*uxVtGF=hZGjrT;&kNPzd7K9*b0SJU9jOb@&3lh%+
zn7~1!ETwiKzRgG9eVx1#1Hz-kI|HR?B5TJqv|ZvNgfc{9i2bZ52Z3OmFvUinc1obQ
zb|F5x%yHN2=Hsc6wCy^i9_zL~mRL0xM-Ue?Vv6yQ>e_dGc^AtYUqW04*EHkCG+
z-`hHQO@CjgCI`r&(M1^oc%WwH)*NzffD6R|Ke)#{US~-Z-2upe%$2$gTk1I2!14$7
z6lHkYUvmRy2clI4Rm+%iy|7%zE%3BKVYVw=L6o{_3~^Mogvg)cDjL=u4fN{f|ChZp
z`SmQx?)v@Bzu%kkqX8e5jdv;oU(V8sF!ERetwUa)0_Sg=C=2fSmC
z#D>8_MzTRNxNW-KZg<&KRo9f6mBY(7{Kk8Kd_Lc}_q~_dnbqwsyXmU#`-VHjbRy!!
zIVVn>IN_27>*R!QvK%q5CRp%md!v!0b_|}**`Up8wz$|01;z%hl&r|T
z#TI4F_|jdPe-7TI@8|Krw`W})Prr8kX7zXf-am{0CCy3RBsN@{WB+~m=xE-W#~Pg{tazl2KLGHB4Qh}cdf7gcpI
z9vEqsHSDF!7q1?3J-;I%po})3%&>%$aN+poZ+x|S@E_Q6^GOXGfem;);@sR^)89^+
z+3zVtmc9TIFx?R`-~cZc>KR;UJ7D@&z}+py?KO^B(s8UII|Iyj*PiJo{?t|wJIrG35(Gc-
zLJ6$y&M-f8J=B$h!A{tcDRVFn1Q>~+3`v2*8SZ%D!jxB8I$NWuC=Cjn2q|NYCFysC
zk2RVJN(y0>sn~u~Jk$N+d%uFJn$uSiFs-jRW*a!GIb~+~3#^O2k`qx8EHd6`1#yQi
z0tl9An7!`G;P_?(B?B7M@ku`Z#$~91hC3Jx^ShtObB*AtY-tvW4i4w3jRVjGB5`@0
zr)~4gxH2CiJ5IS3IJtuxp@00V5iD1z=o8kKTj&URCK2dQeCGZktfVF`#Q}?8j5sgm
z%}>v(Z~PdJdPHG<&JAmYi}#VXRiF8f*d*vmnzTr|h%bb>H-`o{|2Mx?t?zw{HZ-JY
zBnH?Q=mWyzNY
zm*7l|Ak@QFLtg?pzXMG|&8$^}%LOythHbCfIS8ZLkc~n${o%P7y$!HzS?*B)qaW*>
zGXtF>JTA1^vb;It+!|>Dm$PZhwN~aao^dMf8}C=EuY!j?=WTK&B93ejja3
z#HEHzLx>0Y<6nr0El2CvXfW4=8AasryE7zy!OB8Rh)1ggw~{r_UNIh1t%=H0=T;{1
z%ALH-&P!|LPQ_~WUX~St+CB?sSH90~={%2PhhVqBLM3_gBV#pl-vt-Oxut`%EF&?q
zj#Mi|yc8CJ$s}=qtE0KrIV+G
z@DNV|O};ijW{ZYp;1kB@R|Tr{#v8009K
zhQ=!lP!E<+SX&_jD?y%ellB6Hwtanq@x$EA!OMQ_gbLN!6PR_v2zDUKpiJX8S8d&X
zr$9mLSPYEb7zKY6EaJwRF#A&h!nT*7#%BO&8<$SRnN-l`bSqX{28k3#0y*^@vu>Wg
zqeNjTeh5$jGfN-nG8G~rTkGoLX_Wd7QHY8lm+_TamOk>)Hl^$^W{dR_SpT~C-f81R
zP8g3}7(sq2cUUJfgBtkai7M|~MsBOtK+q{FpRHgF<0v
zya=%pz}G|N*XyCBNZW%m;dWLK;lw2n^6w9Cb63g(KX}(QwuZJ0aO@;r%r{%A;1$av
z)|+sJhXOlr!jMY;iube?R@97^Xuh(;LrYb@X_V>ZH@mNghH=f(s$C@DJ=%>xN`nD1
zbMB94)eySn*3|w@gd+tXwO~Xaz3>vgf;47bqcLX5j&J4S$(OVNx5O@=5}vR&s?jbU
zzvn06zbOCDkj+!Dd{9c;RmPu*9O-O(zuE5LBhYNyO#2k;+>M8X6UQ*OiE8|tjcmgNaq`}M
z?BW&R?Fd!7vEB|5G>=P7$Fs~`Rd}{Tx?bB|c3PWltvZ&=4ioN3eE<>|_%;IZxA%zr
zs*&0PxceyamKh1Fq{1g?R}h2HQXSsQH$SxL{N@N0B)
zY%Y@rdZC+jc+)Xc`Ck#l>?=8zM
zX_8ebuVjOeplY}+w*~FIeVl!d*367p4$w{^zVnU5)s_OVs^-(urF~0q8;9U@tg!>t
zrO>Az&Dgek*7ZSQmSOcI#O?E?EJ{jBPn-F6ado-oP9EY#cRdY>@2~*c%bBhbWqH=A
z#I$}25p$RP*bp0>NjzRJ6_hqiL2ZFunNJjGSeuU9d9$=}x+G7;G2Z1XjUqy~iQ3ym
zln$tiFPEPjL75!*F|a%t-#3@Hx?b&I>h8*uvpHvDAV_2hjyfwy2$69d_U{ZNtuEwsp@Kkw}=IS9eb?ezz9wm9X;&e3ZDf<1Pj9YVdi2^4_&2Zx{I+-&b$6
zm)<)|IzF^viI5DTuLvv>vJNkeTXJv?w5j&k;`w;O?iK`|!5)sb=D25Oov>lMsw|3B09m&ff!97giuSFR*?6(6_Ga?rw&{a=HEd*1_VlVZMLB
zrGU3$-6^&aZ35{;d_}sv$v_8LK0KA(fGh;hNW@Q}z
z`#yq#Vc90(MaWsDsf|q%ds{Y)s>~>Ek+_ax{n=d03eK
z0PF|;ghirVF5sk{u+Ay42?uSW4~+DQX-JwGt4RopA+6Iz2!ysO;Hk4
z>#C3h3=Ne2lq0kyaxpX|UuShSuq#~lj(XMUPaRc{I5T3m!Ke%ZHe>*)RapV6AZai;
z#W>T3AUPm0m?Dw!33!U5D2+0OohoJK27LTz7olOMuBn}66}Q*Gz&Dp940k!h`784Q
zmOW4-`$jlLoiArN>(p3H<4FD08(+;tSz2*@ow6D9LubWpU%Q3NEpz39S)o=|?Ji+)
zIYWm*mL+o(Ok`7vs)WW{uXUuGF&9cqm77d0%w0wiM%w=C%dFW2#
ztd}xO+frzosf7EGMkT%#%)j#5yCzTb0N!jnrQO_i*`S%xSTf~O
z|Aw_i@kNWA*nhdKNbYKH8g?JKOlLjHQqBP|=m1ON0G<$LJ?$?0X@m#Hd;j+vRsSx6
z8TJv|Klvlt9q93sFgUzgoqqL?svrNGzgit!VF{EUHI0|A@+y*;d-u=Md4Dphp&#lB
zj&(U$fLC|-+44T9%nu4PeJ*^C%v?Guh_41AlUCMrwS8z1aL+I_o#<(q{KP%mMcQP0
zDl8n}2V#OfOs9!3tdW>@qy#3MwLxY-_wQzcrFz_#7Gj(2eS2?4^cNZG#o(Y*K@
zXpA^By#$3I!~AD2q`ZE0{g+;>mh4;@;hOrgt7#dwTSA%IK;T*HL!b!U!jbemxFdmq
zIdprfOCS7XyJPGFEQ+!a9;R$%U9lH9F0HSE2nZ6fX}IL}dI*dIx4dGksUce8C>-%C
z*ynDqtt}dw2nB`-r~WM1b~dyzwR3QpLO5ma#DUYMK_=H=+z&7mG+)|On+=y-w6oBt
zRJYf$q6hBykZ|`0ec8Fa9+GZnjT)GpBKb!C#Xh2xhk~=Z&H8-BUS~BDH3nZT{Ry0d
z&#*z1ebGO6@N)G&J`-f>A@#t$!$9-=jC~A;&U64acHev%TssiK70U_kwm4z-ILdNU
zS@+(#6%;mIXA%z(EHiU*w}iOBw+v%(#}o?O-eHQW
zw#|d>E2(z`Q6m{g+a7U|Hp?=e--#ML%VdJ@2u9tms00(PM^lH16OI{WE*w)PRdBL;
zw5_0wa1eJL!Sh`_J!uOgLsIA9onQJyVodvOUSO|2HUu0yt{ZCwyLhdne;g}Q93<7p
z*sJK2sphCS^AGxX??wSIxpKZK)tgWKy)n4l4=ohxj^J2?VAg+q34Q^&{niIOoqzyN-Wyk2?0U^G(yLD-FHT0p3T?m
zBkpXf)W!c2x&h6~KhcTCB==R!K?YFs;
zrXC6d62K5V2(g|ZLpaS7_+>t(>&Vm!W
z2&fgjpdhS~=>j53bAd{wER8DH0HP6HUx2uZ@S(_}1_SH)0BRZ-3$rvW@x7L48a%4l
zWdkL8w{B|us1E@9Wy#qH?wax0%kV8TJmHEqBi7{L39x7kiK$!gzyr1P6_K)N;3Al?
z4GTfV#%@NR21+2g3?m}>MmyKmJ7d$t;vLPdP>`%mV|@GB
zFuo=o_~iJr&Q!ce3
z7zm=i9Ll*E2zc7S(7y^D&e)NL=u2n#+7Tdh#z0a505{YKx_)y^Y3x`d$YM6ipLuEr
zBcm=`mW&%XgKN%Q^>(PjS`Dfx(3&9}csLepn*7i@klwAKUbSwo$-ihDG@@jyrk2dq
z)ima>Yiq1>E`~Z1rt41Mj&H+s9CAi!sQ2A
z0zT0*)%xgBwK~P;0q10-FX_A4HN3L2l;PF!jJ$lG|FxJ`N`2zx5+HW^hrCipX=(ED
z|C5EuXI!EvG^3*(<*wGkGf0f%Fn-?ku`#TCUIn}FwcZY4qM5zRJT;JPXHp$9X?&?M
zqnZn~4sFXPi-BGkqn_v022G=uPRUj?nMw$oVRls8>WM-pa);EFKJ2~`U$T=W3ka{l
z>&MJ`4^dgOvq9S@om@4j-KC}G>EO_{^_H!UI-4>e#EsA`v#7YH##k`|L$nAKrtm=C
zJzN*71=#8`nth1_T}YFsLZ%L-)F8x2F>bF3GmWZFG$0PlIHJPKruHT>^UQ|S0ytyT
z=Hw9qgB49W!sF7KJjlDc!L6?$FrVwGrw6-DeYI~C1AP5Tjf3P|EQkGk^
zQJ@Z)(Xvf1TL+Q2qIHp&P>;TzK%xAbp>Cv+rgbU=v1d|_9}b?)@{E7`sAz%XfW~&9
zsDU^|jb}Z25WXSs%$U`UB&OuI>KCcqEq0yT>xp(Sz*g7SS!8jSV|9-S&<;1sK%OS2f9tUjNE-{9~*Qi6$SPn_96xF7Hp0=BlX8h^y3-ldh0!K&71+YX@0i3kY
z&fbgQ5a-b1Uq%L}p9q_KLt78EDM4V-WyI{3a5AoKXeu#2(1r)$hcs6|@k$P$64L*#
zm#}#ibout@^5sMQ@0K76PIg&Ypv_VM@NQc^ePvA0xC(1t#(OfKixeLlO~gf&p8e!W
zpNltC6En1&ox}}XY0%h8@V(~j2irC-qiNU7dWqt!WBmZ)iysB;BGRDd6VaTzMkr)i
zGxIO&brjQfQU^_D)}%4d%*ZSU$=KOa<}HFkXYRhtX^g*lHw;go4hjwE;vpz>qRf#v
zt2dFpUGvvzzI_ZG^O9)hh+^QSloH0E&5jGFQtuNE5$#`xfs^+Jhg1D)Xf;?m7_bDA
zr3;d27vVnl0ZScmg^g#&vV=e$!lDp?kQ2Apc+AYy9j1C2PSvsXo2*yT)=g{`NT;e;
zxPVWe7Ngs^qkc#0Y4R6I^)I01HQoqa&Vc_?C&M62Ft#|G(gBsrHCE4b82&Wu8_#kJ
zb$Y_>H8Z)%{^ROF4Y4CXmigslX)oazx^43;1|qqfVY&PGXm~*UHU1zX
zl+xdO5ON(!)!>P4uXmWKZqHc8BCq`kd+2dpykeF(clH@Ni)8NZ6~C#K
z@=`0IW26C9?M>ftfAXkk2Ji*5)HVV@j@N(8U4e10It7QX
zS9pn}P1GFe2O@5-Vak1v>82iTv(&f3YV$t0z^q@#Yn=6>jfGw%39ODD{Wj$(93v$5
z%We?cPp!mi`4%>v)Qw+viYRC(a44Y6&%Q?8=hz#(ia{c{b2MZq&ofQzgq1gScK+8=(ESZ&lk9o3%oqPo__Ydi+3LByMO2e
zfFewoQ7PcEFyOPhRl0B9Z5L^Z=@yFxzCZBQ@d54BvY+oBu#alY)qN0CqeB?vR@Jr)
zEo<|opCljywpS`JBrKW;8s4^tW9cG#s67OY*|lec4En_xn8s@HW|_X?U!f%>y>a-I
zJ?3;ymqF-F2pX{P-NADD?qjwhF)O|Sk(7|BiQqhpXd7T68v2cHpz2ezLVfhId9H~7
z_C7~u4`HTEox@lqvhcw&VDvHx(Nq)BdyE=uuT|?&t}{5@Vn^$Mjl>AxB)kK*fW}s#
z)kMUVHrW@q*TC%dN|#M^iH#6e7#MJnesGgnmR>E@@OUnVGfghn*@xFqY0?k<7rDzM
z$RllQ9JLV6Zt=UJ$Dhnr)9&T_c87AQ!^S08ptsVks>hiatC!9Y2G-RrJm1NWW(W^wZg~QxdDN=g>c&iM#tj+~O+>p?;S5RP
zV8YCQ%50VzLFcW5vrH%Fg$_*^wN?cxcZ6kAvv{PB0Pza!}qHO?{XcPGsBijzAzRm45axB8Ad3QS(GG4@ETSa>#wGQGZ
z_~){mc%>$yM!0co4_GEVyMir>uD^+|GqELoYMXlr{)G6*ZL}6^^XzINH*n0YjB2Xz
zwCGM3=*)b8BP9BEhWlwVpAN1guxY1)J&fKcS?kyD1v5TCE^ev#(9}=
zP9{GMQwL6$J9-E{(L^X3Lx&Jj6&j4|@!x(;nb^z>&)r_5iHM-Vat1=v7(5?OUO|XJ
zlQ%iQwYAy?aD#*mb|Z&3{wnY>Ch$eF#Q9V=OCHpWr@fcyxM_8G6CsH9*6XG1-N*B*
znusxHLAZ2x@P%u@Su_ziLc(d@K{b2f1@OLCee#Q6i~tchyUq&K-{*g&sc2Km?Vc}#
z;P)1nE`R>BJa?K1ajWD-JA*@=pkQ9UyPVNI=YfA}5^dvYG>;|T^8|?>n&pfzTnP@G
zB8&z#r8Ac_E{$bJMpX&1=n-%BC_;gG#2-Q%eaMV*;~5kPIS~|`T}!xtJ3v$#d2dJ~
zlT;vzeE`HUHUkPq5?F+V8jq63_ax8;B9wJR4Hr*U-KqkmiU<}uv(mM7j3>|36p#mC
zD^%$cyQijrbbZQ<+iW?p0t_H2{M0!+gGMnAz6VZVXdW@U=Q!}@A({vo1#NtO?g47g
zY^O!#oOO8#xJH+mEftk=9|0mpm&{t?1ySt;{iZEMALlx1T$~m6cVL;!1~n*U!UDmi
zU3qpQs>7@;ZoYNte1d8ewuC!rZ3!U6Fm9brv5Ai`GQeSwl`4jg5L+aYEsWH&G?uhE
zb4&hU4hR*xs#ZwQKH>}}9&Hky3iaG)SlnI{wqVw%1F8j`6}Q(cSuk?Ro7pWty3f|G
z!IM4p3(>&P<`EdUw{EXJ)pJ80eVDb&8=Xqt_;Gt}UI4bFtQCY9JvYP@wXw{Edey+b
zrW`eB6Bt`uVC&|aM9yU5`$QZ?0MNbg8M_ViZ4lojw3}C4yVHNs2!Nje6uTGkq=x`e
z#u8(SvSMVbPyw;`$~QF$5PO-dctEeE|07_48vxmkHxiJC`MK6$`=`;xIrH|{aB)do
z%NT6aTbOy1SF{?&MevV3kf0z4M36U`ctPF#9G@)4rA&p3z-w_Xv#~qq%~+D`MZR<=U-b2?QjqPfiw=Q>N{w#
zTyi5H@Y0h#8|-tkL!^Ey@q1`5R>U!XwHxtAf`cdp3=fynCPH)=BEZPpgx5y9it1g)<@M_HF-Dy(
zb0LTf@e83BO@>?Qyg|cx`Ysv}aASUvQ~_|?TL?X2)i|Ii-Y-Dm#{`%YI8LB3P0k8-$;$EY5&)8OQN
z+{Jq0BQyMH5g-@}0}2@EkgFQiy6VjsP!blSK^qswDG_)Gf@-h8=ndoQn6?G@JYt=H
zd>!>0*~ysfI0;IKlbR1QIsFDc>^VW
zf~J7@r~nbvvsSA?p+<{YlO}1ltSKDH+}+9HFP%I=Ql$llSXrJ2ig_|*+RP;n>rNf+RWDWz
z$JNHrlzMDPV{yXiZ1B;G$JIAq`CYsUdISLmd?-9r{0y<4o
z$egOl+deb?yUx;LAV--DtQ}O(y2PGBh*ubYHI&6Bj$Bun*`GzV-N)WR+k-Vuq9Ax!
zt{)DsM)M$p_Ph%{5~9dWoo1+}En)=GJi_g@PJZxjO1o$a;Tp3V42&u9Tq$C0Ao3#A
zH0#nMc4u6z-dVpNh9;BL4fhTjh9S!a5g0hsXam#iu>?aXYT>IH0}2nSfn9D>-TnI2
zKZMY0{DxpN-e-4$=P)4D!kiy4^F5sXmFm;uFM~rA?+n5hhekmUsTwDGZ1;G}VP1HI)jMV5
zQW%18ypW<<7_)3ut?#1J*X=bLD?EyNHpURVv5hylx87>di@RymgVb#oT)PgQJz!{i
z&IHRREO(8aks|mhgpGG@@{G2K`mWja;|aDp%j$z`JDi}osPEC%)Pv;=w}lQ6PTVOn
zLSx~XDEwpm>Z#K4h~|rWOx-QCVY_Sdh@~Hv7HPZz!m7JABu;Atwk`HUDHo5Ko}tqh
z|FNCe0LO?O7-uJUfM3IB$K9aXy>T7W88udThJDNq8F1k3uYINZqd)jcb^Qh1WfPA+
zReK{{p&+6()fKjb9$r`D1Fq$}z3}7(I_>do2mk;;07*naRFEHkCiA-d>^tAZ&F5VS
zdrtV%Sv@b0@AO>_gG&+J^{o2L*aE7?;&MHG?u3X=OK~~8%dfjb6CGV2^NSk3`|rPA
zEnZ{0k7{=b9z?b2odl)eItY|o=CG~&@V=(+Ou{?2b!
z@4oP-)n1J&VfXD*ku!*xKp^{6934_^_E=-3L)ApMbdUp(Xlq4BS<8$)=N&Ck04QE4
z0}bG4w1!dKnE1|kApQ}#VnI%!?fuu;ZZ
z(vx4@RKwWg_8Ouai)sjSTwW`T@T1T%Lb$YlE!}jRSnq=qHW^DALj*PjOl^M3c0rjU
z%XDFIcBajYH9HdG5`ygvwwtl;4{lX|y8XTCUl0CG^`+hy(4sh-Eq%{J`c2_&MH`$d
zIDnhxC*EiFE&}r#_|)-d0MY06|78+n+mX(wxss+$%l8BlVX>hdcrAJRy@X|HkNhGu
z3x}7maAhny_W4tQJ!84dvM$3JP*P@9{r*osuI^%ZJ4G`VH|gR`TZt{(hWod_i9OB#
z0|off2YLID10@awJxzs=B!4On;fxNgL~k}ftd_9}t|
z0_oucI#$5ImvUYPdC+fa6l|%5u8S!vOGx0A_8!_Xh`~60K~QHW!wS0OMSb1rAhDs9
zlAkWB7q%7sogE(t6}qlApKP%tk$yu~nNTpcF#7C#K=cqu#E}Mp*|FZ#2(oCj6e@bu
z!)=^y5tTVF5rX3O8bLelK)Q{BQOae>rqVE2+la!{bcxO2254K=BLxnk{X}Xn^)G?
zhhwWoNuT=s7vf)m$7f!_S%ruXxMCyw0pZ_|ppLai0I+-0N+P`d&bYih?w$jXaWc-I
z6Yl394#P^?ZNRL$BN#rU{Um-~PIh31jG2P35FKcA5Y^y}Md>ALq%2^AaP){t#a#X*
zPBLHf@AjD|jNoWIyu;j#Gk6ikscIi2w7kr$$XBDo(y@d=Y=Wo|yBLhw@BS%Rz)W3!
zh@c{I6b=jK*EAuXd`dWZGWG(a@TlsBG8Nka>#87vQz+{vWB1)<3omJW5Bm!9izb23
z5lRdsY>U8QnHu28JYrnh5^ENGi9?-Q^>H#+NRc;sk;bx|xn@bkbbPYS)ks)&1ib*J
znwvkgCutL+QYf@VqemDggtpNJ!g>+UgURe%o5gbXaoPG1fBnM^#LOiKtetra+RsoRv}L$n|v6__x6}Mkb*z0%u)9T=yW>nOOrf>4(PW$1;*G
zUoDNfAG2bKwYcM5l{%#$&$1Ry8%)U8yd!X$2eV9$`C{n>qOQE5?TUr?NBr_o>X~uG
zmt5k950=A2p2M(Alg}m0=X|;J&nPAFlYwcs64;He^Hk!N$xJ8Cc`u)WcjBsH!Eceo
zcW%MSHp~w)`q`RZq3w0jrIyb=X8pIMCsLE80g={$?D#KuV|MmUun-N5hQfVpZ3<$O
z2_d$HF7g#lbl4QP&-8<#W%-NmG-TQg<5@Z>>4dHHr3fD^XU2|(L)^Av86-qS80L*U
z&=6o)yHOjH+@)UfOZUMyWyhvLA
z!RV#LA%q}mqQEYGlJ|gJCq>gDjsw5A;h;C2yPp`>Y6ToK#*Z6#jYrMP_O##8)am%j
zvc%&)_9K?#y1%&IM`gnh=Lw0F
zWgDcN@_PQ?qAy=*hsz&$w)vip_f(YUzJ8dr&&bqvySU18_pQ5Mg#X!}+GhK+C;Z5y
zXxndi00DOpw2UseVJGJg!T^I0(J|askpPA9c_*4op7-2g`Z!5KSIat$Z@?OZA{E
z2VgFOEW1lnK9crw<$X3E>+QY00&~LJkKWop%T68%D$Jn^OFq^$Wf;*6iI}wB+pzLz
zV7c1xfS$AvmdxA;PFT5@aGwc>$tF(n%qOBs5K0o8e|Cx?A|LvyzL~*f7RXk$0hDIS
zQi;1qTfSqZ3M}Rlio$ys1h=j~O63zb{y=zFkjP-@&^=Rx@h|<9M3!Y(
ziC41PqAtwI~Gt5JEqNOuv(*_mu{6dB6Nu
zzKR2ZBT|ED+W7enx>E^-f)w>+P`(+qi(6|)QeVN=xZsCNWCPyEj`cOnRxL#E#W364_cA4GwkYuIMVl281APAUdyh!#B(?5H^TIkmIg^OON?Z
zm}8=RD|Ns4PXvE6wt48Tl*3C~o*~q*gm%%&$1X*C=Obwn*GJP(_&IKx-!rZbwl3Y1
zMYU-8>;-wCi)Q*;_QKIllkIbI#TClXFozIXZNoUw@XD#rX
zmFd`-<`Jb_9o%`j^sg)W{8JY(0etn|eLIizjE64H)AwgY{a!zH#+4mC3Eh$Y@MqZh
z_eN-0(X@`v?cyp>T=i>smO|x7{qr5$Fs`%!4RsXvo56ivSE%*I2vD
zP9|Qhy@Zd31xtN_MBs11EollEwT6dsr52&$a{{Dwy}da>rTvF^UUL>_QkO>fQJ6r-
z9>cBSRo0AIYRD1-d2}$_*%Go^`vV7t`SUM!8Oh8t`RK&RS%+c3V)Z&9BK{f#m^?}y
zNT|(%S;=uD6fqcGKA{d-(gC!xpWZupw#O<9xd27@5>C>`w}#(sW3(oH>m^M5X6q$k
z!egVA{r|j3Q2kf
z>AzBq2n?#NyUW>ovG8}UME{@}Au4~eV#4S^XNhVa%+qrHmOo;2OCuV%>A%608sM3U
z+6hyc^P1(5Rs2D)M;>5wIwS)sF16`HW>0;LAJf<5QkGp*ThnId#f;AhR-aj(28A2c
z&%Cv;=)4G>PJdC|+rEZp0xaq=zOmeLvLrC|@ivHc{tLZZc2C+S!m5?E3rjJyIjNlB
zrCVtQ`^&!N*DK&S_Hq&C_x!aHB>3%P05?MSE@w}4#u*wX`{X=*n`N{hM9XB-4)MAa
zmWc%68*s(ppCJA@rb19nL#E#D9AX$q;ht6-Z5(jNwKZXLfE?`H1CMDZj3Q&h6zx!f
zF~k>5Mjaz*Y!w`H8zX6mH|B4{xP0OdcTk6S(pXsbYs}eTr<00MuOYiV7P$0p?y)R5!jSSE5Ro~XTg8Vr
zZe_di;q@CVi;VD3;c^dsn?|8Th=z>QCYtRCgKgv6w_oQt_jFL{`T|ez|LF)%y?5C^
z@BUQu@8z{yig=1{0sW
z2JA+deCY~?m6Q`2PCR!~sLd!^yNbgJnDH@4AXu@zaJ-lwQDn*^nCXiB+Kw&9Qs}XD
zxdi9-gf-_7KH>;3f&v^TmpeTM*J%U%2Q<37#vzpU3K0;xW5HFk%8)R++-juB0PEaJ
zOS`Pr2**`J+L6}Ejt}&_RzJ^0?3kSm5;X~n1aInEF3f+IT?`MKyR@^E*ha>%
zlJ#s|O^--_0uh`r!yITd%I_|!XSY{MJl%a^8U;zWwC%HHQ^!!YUx`CIg{f%dc^d(d
zt!m_Xsy%{mC?-JcCobv=CorAVk4hWL4EUP`mKxs`xV^64p}pxh+Soem;*e;``nPVc
zPcR%EV|=z97Utr%&iT39YY8)r$F0O857!neDmPg5q%p2I=}NykJHEWDRI=s(F8DE-uZ4@#G|Q#HtDkqi1g=#jonbe
zA-`FkIL0;JrGFIq0Xyl=CkNz8IT}WK?;J!W5z%Qf`a^pY@doB8E$|W$uHYhVC-Hq5
zOj%5^5n(Au@1@$!=-S#{KO+o%>*hAeaH@m=ps)p%;Vy$O!lVNIVE-z+g)m}d<~xEx
zYKx*zj>PD5P6@`VZhI_SHZlH_kt;YVK(L#^EsA>wYCK2*u32^sev}!xy}~wQ`e}KJ
zodT+S-BlL`E*uyDv(<7nJ*t-YOVHjy8wZi8xRowUTzAqv3~zfZDa1zR-0d}X4#44V
zkG(6O!w-eKD)bX^i`hCyY=ie}3^TCZuXur0!%a_<2D67H;_ln&RzaOrymj4@s<
zpT|I{ZlSv^&XC2Emzj!IWk@|4_I-SNmQe6P#fLUi|I7Ceir{_?iGM6xCcbW*KaFSQPL5wqf
zcfH?gJ2Nzb!V3AsUADU$NSE@ACkK`>7)OBvDuA&!ZNsB=r;g_y{|MF+8!Ad()KMV@
z<`5!peJC^enNFls;A-Ja8&m&21YE0p!@>mgGvK6y`gymyjDE_1*-(M4LWzQtaH_I|
zsWvQ0)DR%oB+BfU@`w(vh48_IiF*bUaE?FXV5lCEWG-&qq!@f8VTr9@{b&}*lT!7?
zpsAt^+)a2(EWHQxE5M`;A)_!9Tw8Mwks(Cwg$Hn%%J_x?UKq3X6B;>s&E3*TS`8=l
zFgYg7cLfe-RdHPn=TUs{(hc=0(k8Pwt`7jNRuSg
z^hOev_R;2wi}NHdVfL{&X)DHW3$KD*kJpMC<>qoxZmOGaOzpn3={B=$QAz4
z!rDDQegB}U{BUR@=+s*8j4jX{#pi(x``n#0d7qFQ;4m&3?EL8}
z8XpX5PO{yRU`yPXm#1;UNaM!=`cjrh7zpNx^QUa}bk@n1RN=^y17oarATuW(apV-v
z(n=kGTR#jC;=rT>E4eXncxvQ1oWRsKPx6YFPuF-!=kkcorkKuCh&gh>xYC}sopGM!
z_S!bo!If>s7B2fCi_Wx}zKYiLSA>;hTiQFjPi%8FKXYswFkEBwLsWs7ZweEJ_1THw
zlE!vtj)G%W9q@65Ds>Nosv``uENV@C-LAQUiK=n1HT3h~&I1S00tw66=MEW6c?u@i^PfVm93Lgq3JIq`M?tkYhZm(&3`axl2
zf;M8p@=r5Xq*7gNS7AU2laNPD*vcyLJmuub8EWBEG#3gbV~IMjT^+xOx6E~Qm93;(
z-F_;}*@#>@FwL!deADBo_w%JC@m~R%s1Y&=bGv8yoV3}!BQOXT;&Hx%$DPnoO5nTS
zEDK?_RGKmrU{fyN+HsdL(F&|F&{M0%Sn-Ol7{@o!HNdsJflDNOFt6egn>#-Ww;Ogz
z+3(XZEF5#eo#rstT;Ro)!^~!=*gc*`SLF+q$HXB^Q{_HknPc0~C(eXXyQ@7=b71&v
zaGR}=N5tVBXHy#g#q%WNZZfz*e7D`Q;|sf#e&4i=O$60J>-Ktxqo)m9dS&d=6}LkU
z$2VZo2+X>gUcA$SNoi>0raLbYAN(5OkO`j=5ypj+J|E#Qs_wCKO;4;kf1?9%7gZNhhBGKHw@dn{i8nKr0p9r5k6}b^
z6Gd={YTjI!P)8D$SZKY4jfT4^8dV8|fzesc(8z23cB{=`&o@*HB1HKD0t|h;FzO4!
z?PJg@>P8uAFpR)hj?3uVFd8KB2v+#Lh(o9)kx3U=S(1@B_X+c)Pdz(kIirIU=DRs$
z<=)*F2o6PyLwVMLpBSA&MC)$>ry3sGDsZZ?u>hGnZ8o|EV|^QjEu&F@aZ9K^AP^n`
z+l(0oTi2*eJa_7RYp`Ut#L@-PVVJ0f*)QMhPw_oK999pqOiXbUpR+NBcW+e3dtYY{
zK6Wt>+#Y@p+|MtupF)`KlWw-Vtsb!-UX{KFYzd{pgidPqAx`%pkos&88T?TQPy^s>
z^Msku2@C|t({?U(xRq0ZLf6*LI&&}_av80*#|nOmbv?AM{&iU3FT4*yNkg8oQKkep~bR~#R2h7
z<{lw}bozkEE+27CErv!S42v$Y*TxKyj_D4mDKB^_?{Odf4i-
zLIEcq{Re#DqE`>R*g4`nj2q~q7>8Q5SggWoiYMpo*q9v?DdR
zvtfzAPux<)`);}62Eop^Vkepd-c9A#+&!caYa@LRMgb%?NX1$YXb
zGX8S@EtV>Z{;SWnYQ0+Oi$Xhxvy-nf1|L?tSALc_=-=3iETdmDj?@%v@F&3nE3m?-
zApvDMgLip24X`_?Ws27{C@KvaM^)zSY)N4Qp`=E2Si>Ye65Kp{Y_E*!RM*it*b2PM
zPA7-}29`0D)1xE;Me?N{HN<4_65Ep`pfLMJjY%jsun?xhCS76onf-K{h-ela5FV1{
zOpNks+)xX*11Cs;mW8Qr(MUv?Kq8=d2JRvu&&(KQ^5pHH8B(u4<-t*@A24WZ0-Pbv
zl;t|k;N=f;dkt}57SyLM(F7?}If!8haLp{CteG(kI41GJ?KRKZqX55Jhs6T5E_M@I
z+6yOqKbnYWB(y0+IN030j|zUTx`JElHM6u`984WCvr=GKqej1m3+5GDBd12rQsmwahIQCgs&p0O8v{%Q)?X`zxsfm!O
zsfiHlt`2Z}y+gn8vW}|T2|DY$XhkLvT{RKgsS7cM=_4jZ6R|hC7JVndA!FKB65|n-Fc9!luGU8J+~w=L!m){}l4ypt%~VSyKogFPGB-3-&Zc
zqrfY;ZkXB$uZ$Ps+hztStavb6;!tL`K=YdMits%@K>I+??_ke?m`*!l=K|A-=r4{7r28%;M?e
z$>@eqVxM&lfdac2G!av9Wq`GdOL&$$z%{mQ<4k|Uc_=hsY!!y|?`ZT2j1>oF+Cg~8
zRw^wtIJ7$aas&efgw^s6u+TX|0<#`*9z_oZJ3#%nTI%*14U|ls9LCcxwVDXDXBc>n
z(PWj3S!!X-j3+m9Uwdu^XQn8O;*F}q*
zKz;JEp)Y^)J&pflw2$kXV(iENqC=etg}9&@h&x&^I>wLowligrpyu!v8R8blL1KKC
z0zot=GDs(uK+Mougz-!0WTO6Zm#G)VZjs(5$DLWHOB
zVYnFYoG=~pa@ioBJaKz1y#BciVV&aESQRl_-U5p?bm<2#c`muc-a$Bxqgq)Zz^Xo^
zP1>_FY{MtrUSn(EQq2Qq4GIp6a44|Q*3=`r=!mz5
z(8{oCoM!bgs;sH&09y>*UweY(_H0n9!m?ZkX2v&RRwZHcM{R|dS_#8l!Z1F38z#mYGH{%6;FrgUD}cma0)b5R
zcx@j*lv5rI$T-Mzz;T9Ff!P&CxoS{6Gh?Z{VDP%Qy>^Y7c1IZUU7H)1GIYTl9~uY%
z59&9o$9NR1FtFrba7|nf!`H4sW+1LRX6#SyS#F?=xSDnhfy2dvq!?1Nq0y7hdYR61
zF*3cETEpm*r_bgC6G^`Gr=Ki4I7e{`JH7|k$x8fJ0O^dJqtOsPvXr6wJ)UI+1K5)n
zVRR3+LZoG#VvTQf=Ne!#ZE3&Bd;p7Q?RDk|U5NPbcyL(_fCG6_7oO|wyYw4|-VFGm!fJ4%*gmLnh}&v#u*dUEfT))Of`?tHWsCzS!fdiF8m1aU
z>22cyTr5}V{u~X1f`S?cckV2h#m7ap%TuJ&36z)d8&1;HrM0#Ov26gCj1!|ugeL7I
zhAcg-@Tl1^e)M*!uZE`4o2AEov-DyeXwL!5W1g-lL)IO2++GtW3>j_AYK5V03^cL5
zh&N1aE7ZEU{HNx_L%q;CxO@U0x=dpw-5oODzK1x3XG)ADUEa`6V#paAF~)?3Gzi?w
z6O51VLOU>a9q;1y`jqm3YrRyH2>Q|bE1Y|c&@`x#D?C8F0q;a8u5MX_4-`!UKXv)3
z#B2kec;VaA?@y)wxV?TP3@g`1r`6H_{u7uE9Um9AZ8tEm*em5IiZh%rHG0@?kLoUJ
zQo@)iZ61NFxH#UzG-QMgGoJ|K5kasDE+R*RSFP(0RpQ8%B*sjm&Bj4a@Y^MGbDzoyR%4Cyn%({^aPhJpnT7n8RU^29)d#IQ5{2s
z8~)TzFzO>*I4CVw&CQ&d$Kyu_XcHX7WKG+;hg(BG5A!-MF`WaNJh2Tvzx4{UvnEOqXK!(Zy#ulAU=PI1j$++O1@xUd?uENVxz
z*T8OrV~`)BvJRZ&JZ7G}tJ5fc_J)VmdsDO)ay;5wpAT2iFsP9jqY^%XaL33`yav)k
z+##Pq#5D@_BvKahXit_v(Aq3u0wd}%V>x7jVP3Qv)ad}2-|4;2VPGr+uoNJ!1;1gq
zG;Fj1!6U{~jbH^><&T^0r`;y$^2Em7HIdMToR&%$?G7WTT_RENj^Il=gvS^h!uj1X
zB%WC4MzkfGLP?f96jE($!W0Jj2*(3EkCCvEAj2d3g#
zDu{iBWx8a+p=?X~R|7+rJNg4OZS=W2BPJf^g%B}kIm?;5Iu&8@kS_CBvsAZrNdve>
zY~$_0=tooBMRT;bMvq%uUh7q|xR*x86YmJ$x~vG^uh53{z-@&Rg~z=aJ2%j%F~ZT1
z!0a{LBrNW^r`L+`#Zn%NHms;Bq-#%vri^rp`Cam(JltL*szFcCMB?^ZVaU~3m-)sl
z;jAH^9%1e{8llbDBDnX_G%ikX!Oe1Wa|Nt|-b`M&1-)dci08$_q6xZl|0^8eb-lXz
z!ppQ3ILaj&6-+F6&>cEO!3qDie|)CdKlpl1(hpAb(G2~;c6-ghwj&?@&u>)6UwH%O
ztiIZz4uV10qhg0(IzwdvQVNmyQGLo#?MRqXd=eZ(B=q#?tk)b!XZr49%tI8#4k;gZ
zXDsGtmSKX#KQoL=Ers9B-#-l$$!hJIA+zU5-KChQ-^1L6nat`3tY=E>WVSGW#&KZE
z49ns?%2?|_1t7tJ2*zc!MFW0~gk7W7wO))|=uk@_4L46T4-1aR7VZc?mL
zT%w7VBOldH7^W&&;Yq;>qU*+rOu;(Mg5VIAwkGeMS`X_;dC411kJ=40%kl<>ojv+X
zNk46^0OBQ_v~dq2f9LV1AbuDM^6o?i%QWgv6oiT~8j)}OjnnG4K5+)~bVmhoh$o}g
zXb-z@tmm1Hzxv-HMgU8@j9{x8IJ%VJl7xh8c$JwFR`&W_5L^Y6mG%e}wV|DNn341+
zEbZ{UFbEi=ngjmS3P@aLH*Zs>9VK{b9BjLCnaZtds(_6j?S+Uz{v}V^%-JUduwz6?
zV>*7^?O_9Mv1O=X=3W{}+Wg*SZ3;8a${M!S4I!9fl3|(A%8+b7?gNhN=8?;paM`ut
zo7d1a<~g{@vF0+j8ir#BW@iRO-o5@dif1U$!qgFgido&BA~Fl{h{+
z;4Oe+v7K?-tq7A2E!&??N9M1K`GQvONXm(zCqj2|IGNI
z5X56#@I5;k=)ut=7(SDvEoX-Jd;7$pwOMk|)1pUX+s5^R6Fse{%uL$VN1vGB09>=JOvbdFWtlb5?Idt!+^ptDU$4IOi~qFxwSV>Nq%ZhqQt5TdG}HDy4?p_%UA4eRLKD&70b!Yi
z=ak2m@t4^*s0KlCaEE9~Fhm3i7=IyPGBIXNJyq`t8W~0qfr35dmCxWbNZAH6#B!Mr
zSK=nVZ+s)JNbaD_l>x{T0*c5P*d&}@!lB?|UVMvznd_Tvrr}2x+(wTfB7Gb3jZHR=-y+!^AJt>#?<{6>DH03YCj9L+w4TMKx&6;o+53eESs>6w%
zf7n1I4iSV?p(J1up`80cJj?S}!N)xPZR=aq$H3wDtm$(1GQNb~HPkt6LzqKaI%hfZ
zGna8DEJ<((r$>okTL4j^5#$|qv+Cq2M2v$k5E@k9LpW#*;n20UCT_+>wg4ow45StM
zLZA#K3?k-?Sn;AbmLeaB9kKW#gOtely(EqCwW|>TN1m-d0)Q>cKNuyDC-Kr_mP!nxf;SC}vJnR@*tGOP*D9q&
z2yvo7Ue35#ALIjZiLW4MoGsg&`>g+08YYSl38in{H3EZoybsYRnJ&0veSN04ix3B1
zph3tircJFjqg$@<3=Ft_S;9?;z@o6BDzS}UZqEI|cMTb%7A*_V0I_N~eCeVd;y;=Qu}Zqw$9^Pqf;t7asfR+9mJ)rI*CfCiGb_x91O*m_
zA1}++CWNicPLk~Sw5u+-?Q8o|m}r}fM=*Kv$-p9H8c|B3&K^HPaA6s6jNoKn*p|tw
zy;I6}wZ&7Ay33}rUw%k0N5>ERHM)Z2%FMh!1(BKY>gPZtlKA+ZFbojG#KXw>&fr!3
z@87`X1(yY61nF$iiYpX|XYaOzA4P~f_|pBgkIr($JK{^^OdkZ~S%g#_F9Xdoh_ka6
z7KvQZoPel`^KH52RmwAc`)nE>6UPUMs9^idzev!QYy7+uVBn=^qn1ocoaE7dG}%Rd
zL^FTGl81o>q>$-0-$Y2964f~0maYv?KGrvs+?ZTlKBhQftR
zfnrksJkzLtZ<%Weqkr;4P$H6svbGSQk~klsXWacGQi)fd6DLH_cN1EmIeMAb#kclj
z!V~Pjz*1tLfAb-Ew6Iv9@9m$@=2aMs#Q7qu%hx*dHNPxO~}-2kR2!%8O*r
ze+pi-!Cm2g>;9gf@?#hBk?<2Se+z>l)L0j*4-hf7w7IsPbyC&fth0)34%S$Nvwm8;
zX3MnI(#Mwcf1ars38p`c-T#$|S9uG%j^`N+CtAYq8rxW#40NLpv=!emTr
zG0IbcDN7D*L&XTv&k{Cr@3AYy3hFB&S_v|6yQCR~00LhGAOtRnZeyFKJ^AOIe6m!*
z=Q!~(PnSQ0fcj|gm>Mc5XQwOrmU%!>LxUdpT?3iEMI743nQYvr$Mu~B8+kfR&U`%2@XX*BiM-~w+>X>
zit@tU@7^qr`9OecacV*%6h~BG5B<2&kQ!0j
zOZYmYN#DC=1+w9ise-F4V_mqtRx`o!7RwbeD&={DZQupHan)qrjGG@>&U_|Pu
z5_bJoY+|6SCWbAx>@+EdcwvsIC(Y%9>XlFZ6gE`uwDNL1w-K+D@^O51r2W8OlUs+?{IxsPV2{D2GaD~E3?z(QfdmDKK4D$wM-$;p6XvBB
zgYAr&A;<``o`2Ef*^Y_EyLl`H;ZNr76?)yqC*N$tgvdD%NvG@VHCEDn
zw{Wsw9m--Z+3jI`_3(qk{Rk*74T!W6C@fFnX})YPib17eQZ!&7Vg`+QjDUTG5ut`>
z**!T~%Z2w(rQ+iQgl
z;j}!iIH2NN>R?@*N%3oydoGb+x$g1A*)Hd@iecw)mULG?J*ghO!vX-iVM1Rym@Lk)
z*!nuar^Pk4+1+59CI<4=ZI)o>*l`T#^D~TVWup__^RiETpZI6CJ4DTMF|-%ZwKY&w
zyTG!Z;7obv|lxLJ^=@=Wv(Fk&&eGPe=M+9x-1ox#$cUi!|WNhTC=TF;eLqFTK!`X2)aR(FOBaC%7GDaCL
z`LR!+njXAZjF@%Gw7LiI3WYFZ1ik@=t@6*|4!$0MNoP?#1R9Me%Tk7dF?f!lqsMG(
z)uA1M%N0G(H~|*7d#;JUbXNpSTzdo>tlX(jjjfKNta@g6gcNs3oq!jg
z24D0LIp>({mw>f6L0jP`!g{7m1pDcf?X2Pt-CN)UMp~8_F!`&b^T=-mT+3C^U|a}~
zZm)%XnVlUNPHH#dC`HIuGR$^P1hwh4gX&nf*DM36VbjRd-5?{jxUQD>aH>V!IJMMk
z_W*}p^J69oOgQF`s=cfDj5&I@Iy<92I-sJ{0X>&=th+8hci(<=e|`&mB!q|>4MNt}
zA&}=90+}70fw7fYEL52=-a;h^?!J9i4m!yQ82!5(p|zc(^lvp?`#hX
zViCs~gF=3imUpOY5jZST4Fj(-9htP!a|9L3k%7YaGZSYl6+=i8`OVgM3^ALJ*1#gv
zzB>jW(jGak0AyP8*A_|y*N;VJiOlvjf^?7tRO%B=i&_BMAsQ12J!vIuF`DF6El$l0
zDT9SPBao0))^8=gW@(;GqRwH7mO|p5%!oq*3BUEDO*=T9Icf_fkz*fWG6<8<)*^7y
zR>0{FmMz9o@Zq$9ebd8$GVSJ_VsLAKe+740z&t5yMVz53A8GAm}?
zL&}uM4xwOf)AV8&EvTTYX?IUxRlt44J991=NE2_9F|?$wWD;Wp0=G=6A#kfEUKk*_
z7>`k&7bQxn`AH+?n+B9XpV=|0;kN8n=oTx7VZvSB0Yn
z{uZml{0-MwPn!gZub1s;Z45JZwsA)zP(83!h@)4DP9Bg|o>
z7D8==^>FQ2#-uYV6>ec@l;OD#J(%h47F!DX!EMs!OUCp^!383hFo?5EIrt_2Aif0K
zeixTz8UzwRBwjOayE|V4lwroGC=(Kyo>@2?oN=3fe}Ekb&k8Ko)m<5~er*HNlkQ4zW}O^8xD7gGTz<4!(a={v
zCzcS`)&Quzf^6u{{4sbOc2@Ak_E#%tv?UMvEFUMz98aSNt!>KPN_(1wu@xS_jj^N8DP
zCol*?IwdwnMWORwFUs7vggr*I0F
zs&$#T3|@kw6DGA1z%5+OBcFXGOean>_Pmj3)vFHj12>_tp*2bY}kIO
zagmH52333uoM<&XZB)Wvcq-}K@nJt)c6)6?a*o?;gn*~vbdPtBquFb=i4CtwsEEzZ
znADMG)7W!(2xM2-PKhAGnj6eD#a27?p@8kO`{M*hN)30*lJV_8cr>uwg{YlCV4c&A
zm`QFRbbHLQB<#Bo%!fEq3Zq5Pm_pDzy>bWUC=;DAvp+)%RDVL4vD8|4=vIS}6XAf2r{pD5)gAXSgjHceQ9~d^KaY)}O&G>ZR9Ap8ce)f({L
zQ!Aw)W0>!Z1IME64IAVeklKe~@?@`8&@hD(zHPxf9l=p#aJ*0YZplrU#k+V!B|=<)UeN80@CR5(y)8N%V0)(P;+`*Uq;Q~iv55tdLg<1
zC+)~gsDA))($zE`ETg@6pY&=v%md~sV9i_lyC8oBCwZ!Wgh-J4dXz+Cli3vC)o5ht
z#G!hhS*;p@TYQI@*4UZ!uN1e}1NO}6L&8hpB73+A%hHO@u-c^y>mIFv!VR#;2L;-R
zo+=dRqj0iL070QW-(sy-IAtV&3Xf{xq>xkgeD5r($FHFuVEcsxtG`bg^6Wb;L$eDH
zt={XS@!OY6`)Hj2Sct?Ag$qHWx
zIIv-MVmrwU)GW9a^x^Um40(vq;mMhj9NM0AdZQFMoZUZMZ~`FZ3#2`uV2~}KFcy76
zupn@5rN2X%TRHVVp_}b3&W4!(llF{ssK6om3(}|!k*BI1QTT)`5=X59797q(`MJNn
zo4V+!k{l8~51eWfS~w}s`bzkZh`+&64-__an8B0+Cq&<6keTb|D`(5N?#2_PF0a=(
zyjo_7L_F+QhrO%R_g#bv7zBdF${8(Xovh!%qvju0-&+5*>JyunDFa-WfpckdKQ##QWShzWMD0tx
zXe!BH*XYLCju~r=C7ZQ#D7A6Yz_o(u?4d~;FkX(@L~Xa1Dl)_ttMPZW(tVx4UPG;N?)n?Kz$%54Ues!&7GFoZvb{L$Ha40Ow|l
zZ$|K}*9dTHuz>zsvxYAQo*n-#cV_DNmC(*&gqKR&P7T6(^%~4mf`e9KfPISCh5v;$
z%Ooq7R&t;fD#QUxG1^Y(Rnp~?hxh+m^3q?!fbF_26IfH@FBfm7&1`|<_L|d1by!8Z
zvy=ZroD-G_K8s)pUCDCBi)bUza%^-Ab)Wpf@zG1v9nU3`7x;F9!14$!0D=%>#AOo1
zfNG4}YqbMQ&dcadB-QP;b{h-y6kd_Q1K3KZEjZ&?|m&o
zgAV*WQ8aF^$LQS1ce9>U58iVoh}PlYWdtzWg|zegY`?#QGpg4iJ^$=tIfHmVx;|VB
z$PRztuNC{KGn=Nr`>m^8w{3<&A^v)#wE}^54^jZN7761e+6o=xXo<~?JOqn3=lTEu
zKmbWZK~&4xze@sY8$=@U2-%>2z1UntHQ#C?42p|t;%jWDul_JpiH*z=f~gy6g$!q#
z{ZnR<5VZl0k{tOt4?;sq2PlUlHAl=4ooz|zg%|3TI5DWCGz5&EJ5AIGK;(?0L#l43
zrF5^W=rDJ+2MQ}r0U$C_)dCA#C~Lx7kM=f9J|mHiCW7=k%&ZU~2Dp57usQFQ@%M1;
z9jyWF>5Mmd?ov<7vCY(+w8D|_c(74yBcd^(KQ6nymZ)CCIauql@(DPZb@s1v*w2#L
z)2AT7RF{cE7(xU(;FXwrO7P8nHbx>B$Y`BIPHFRfv=h6y^*-&RI#rl~sLv3nX6{L+
zeRkPScLKq6=0BRCiJ(ai*+M2m-Gz`Jp*pqOJNAI7QP?
zmRdHPQRec3PO$VBz?v>nl=cyRn*;L*oEgIWWmMWi7-p`^)=2V7{|5DaDQQ<}Q1m5~
ztro&_Fs3Vn5l^OkN)s{LQa|!j6S2lm#P#XtV4T`X&>}FLXd;HV+pZ6*m+Ma!oN~M=
zSaD^%sBPd|&Z3|#5=Oi0*r~Xa24A#i;OfstI{CE&+`HtS~i1H4G?;P+t%
zVQYw%E{>OI&oN9BFfrEsV(b{EAZIgl_76jxy&#m#(0>+2j58`QDsHOhY9&Yn-V9-)
zrXQh^Q0P!?U(+VT1_x5(zXbVU=8c>71%eTBvz?q`caODMCYF0bZIjS8uWdoCrYm
z%MlJ%3K|H<8dmo>`dm2AH4*doGR9IVG-Zd^F1fvq3vR|YS5vocufc`G8$X}+(ietB
z_6NYu_;$Htx!kJ`5kg!(^4hX%Yl0?X@5+mexu33H{mf59fH16U1D}6%eeW&s1HL<>
zV5O?Q5Fi*~Aw=AHhGRf%WaJK%j!1EbsmYAD3{06{)*AgJq4T?{Q;13KQVv^L1+A4=A|7$>?ZV6VLmXBd?Q`7
z4GZcgBPM?Q`!k#Box78UIhz+FGz^v^w~tt}H_nuNOy?|*%jdoZjf6EGkVILrpWu50
z4C+?gN&`FE4(qCCzbD*YpCL#C-O28Cwv_(r7J?v4GPVW1o2Doi>A5
zt6twef(Ro-bTB|^L)O%ScucX@{OdakJTxN<@B;)HcZBq4m(3&EmA@m-df0)`4q-+c
z`fWjbd*;Og88GEz8l9r150baW&2T3?@zEMziFMwAeB*<4w1727q`8uF*fZFb@Q&~
zLE%MT{-%qjfp{9@;WRs13s^Tohp0pjd>1~6>IOl@XHWJlelWBPk%^&tXHDDLZt)LM
zoMkPTJ$IPlvJS3`qh59m}%IZxShce)9ya8XvDR3yv2lotfoVEh~)}t@QS>TOPE;z?i
z8B>%MpCpb`##G`cR2pBQo1)Z2(A8-tI+Hj)0=4;oUp;XVW@s|g(<+1^bnvW}j1+lZ
z2sd$7X$Qg-goxvL7z36j>%JNV+mn8wZM>V>B@qR~)6D~#L19hTeqGkW^=pgtNi3aBou)evOe9|vUCO?=2@nYg?gEY+L+m7K1wtKJF`iZkC)xQ!jzc_QZh(2??l{uL?KJ|uZ8l`7
zA#Sf7tKisXjmvQC9$cCjq-}6XkK5~&hvbb~x7P?Z!YS;PZm-$8eR{0hYv>mFdn&2!
zwLOeWf5@I04d#A8IS~
z!~;zO$ziY{7PJxK=K$c@xDpgCeOZPm0|5f0?wzDz&Jsd25ONIAl)Tz7v;{GeRFIHx
z@x$f}W`fKnnLWqJip6N1MtCpkaAtuRT3auL0Abl`O`oHcfkRmUgTtERZY@s&{QuZH
zlV8iS>@J_%x37slBHQXRtK5JM!q{M8un-`FWCSt-Au(XW2pA(V;U7RkOc^i$F+fP*
z34(zUqOpVpHrRy=?8>aHjBFwzqj~Y(yM4#^{q{L8qe_$quB^&QoM`U7XLoDwz4lsb
zueJ8t@w8OLmr$yqKx5H@ake!Ru=pfCfzxz|Z;O6(G2iUfWY`CeSsrGPLtO{L~XcK?00WHAmf>TRi1i5?{dJe{@^!0FMV}Y9->p9Q%17K%NS_(w=@7=oVjrkwAo}9P
z1VV6)NRN!|>F@}G4e_JHa|oVBBd5N9w5e_qlKMP&0fUSwfRMKgrg=|CgsA4qW}{Oo
zD0IMq0Ry9d!5Civne>mW@LM4ZsP<0&^CGB4A&-o`Q~qftPSxw6Y5+;5w?9kUa=yp2HS$JeC)9%x6Dg$I`AMEQTh=_u8+XE
zO9h#{7uE4oq0Ex@2G`O4z!ZIuNhzV9isAunz+|_V_|@G1RgMuKftMG|qh=-MO6?On
zZEvIOKYf6pz*X#wKRN{P<|yO4#-Z_miEnfE6kH>;J4{kv1y3{VWy}XZ5m*Tnr7uLU
zN9gMHw}BJL5jcw3h=1NCO
zofCW9dU-gY#>cdvGp&a`^>654=1|Dkf`=aW-EbF6A3q392t7iguY^;FPwoamd_+^D
zPlVbw@So$7yA^Z;nzQi+SOg;l5Gmx4@YP$^gfpP_Wy^Zj`O>y}Tmi0tw;}%;fj7}z
z(+4zV9>L`5Z$oVBfVrdJ*4asTZf1l5h_C{DIv}?lC;s$?Xm-|&1A^4z5={^%y>7hr
z<>2!4h*K*ogd^Zya7u#(13qJ#yS%7QuK^2nlJxTVK1YCc?NEMxkIehYzy1$lauVpw
zDj;Qo6#~NCYl0==X(k;)AY=5=ya2AV0Qg}BkUMGCV;&N+nT$rjOg!d6m`Lxf2FV%B
zO;V^^otEbOPvOD13I3HZ3ToOT4I)^WH1=jf3zHJ&E-Yd23Pt31=eoL7qNY6G8f}wzY=Wqgiii(iG9e&9kWI@!i%@Q@pN0ATutU-ZB*K)i&_z|onvSevzJNhVRK1CmqHR>h`wQx_
zx#x%KqaSTm?|zX&jFnZd6;4d#QT0DyBk=y${zooDU!
z2)pd%NA_KRlP+`T`GkFUS&dHJtwU5GQvQ)CszvZ*f~Y+lL1+L#fg&a(zUf8p1Iewv
zxIU`B_FVg`B7g%yUzseG{&ps3|9|6Kj0I)HIT--E`e7KseAO*1yA*
zi+5WKl`G5Z=>8Kh4zVhFDkN4HLSxX7up0>O;9i~S`2L$9jm$Hp+
zdEC%3U}}L?--i6N4(jcF{hw94NB<7t_sifQ+BVD@TQo5i*dibtEx0R1Eh72t>zJ{mf5(-$=m3UK%$h^sL2I7#DwRYFax3D7?POw~M=^`Mpv0Th8GlZu~2
z3484)8v%q6MgWZqW-Zj8<>ZF=VVb8iLdH
z!pUgHCxQNM*x0P0#dH(6fk(l>HHC0wdz|~eG*4J
zeV4FUPOS;p$hb2XY)ZPA^28Bw+#{a~ulC*39$kDyR?wz>)&Oro{JlOx03Tdt;f*Ih
z%ckWnT|@imriyy}qvk<@;wx|eMD;iR=HJPCDt`HV1|z_Bnp#{%pVuQpn1JMSkkFl;
zSSk_;mqeT2IcWjm5g|m>fGpwhuf)oH?DTx^^CGj7Im)yeqLwmdqI|0Jzf?;;i9c6h;|ZW?c|>)2!d85jaX?zlyK5nH)Qf}
z7CNcIB!#3S2H0W+m3C}PAbhOXs`ylGo8yNNYf}P9KScN4clFakYd2
zcRd{<@#LQx355Y~-iulqKN6cXv^CHrpIRkV#0iMQcP~9Eb5R&Ug8JA8I8}#y9&40q
zB|05B3*#URH2`g`7mYx{9{-nMksnw{qObT_;6s8`Rp!~yDz?gfKE@7$FAi%+FXna5_&P_zQ9uzN%kL2hge}sw2%(WLJe|Pl>^ptn8+Di@
z93d2diiD_7#V|#;iQ!^rUxd{6k1%zu8$6vdN~_u+c(Zb
zMwKPfg@ML
z*z`QcsSqI(hJb)EVl2P4@w>Y(Kl3HuMPc*siE6SSl?7NxO{RP|jTcf5R#k{iouOF<
z$sP{Zlr5hwLLWgXl{7Wi2`{u&vV7Nje)=XtOlt5~-A0p@-?o!8vM?zhgK$ci`toG93`-l&F~!}K0uq%?mfv(h7P}KclOy=tatEE338)z<#3I?uTA)q$(n>&dd`24Z$jBVa3WwM|yIA8hTbF>5i(Uet!y>E>
z!8u>9@y;#;nEJb&r;m(!7<1`oore#fQp7sR1F;TMuv}e_r4_=q+z@GQO$ruDx$>2)
z;u3%-ftQwj@yTynKu}6av-r~f@SQp}rEQ+01yQiJW57^^2|j7eE4!Wb2~2GsvkSAx
zB*$^JRF(S1jJu-cgoLtRw}Aq$>~o<*Bly!+7|Ve0GEn%xy<+T-Z&s}b%n6Lk-Li}g
zwM5c9-C&#&+x3aBl=rU;eAhWLio;c~e)FwEV{l-{n33T}{WQIqGj^
z{QQx;G*&+O%@^@FPyI3<^}Fv%s
z5FZJInMg35-D3!WWmxcy-8O9+Ya;JSrIhK~4
zy~iwR-`!+x_@vG@TFYm5xb7MOF|hG&UHgs*hoBB1z)z>|S6ljW;Kn_D7A~>#76wLr
zl*MI=6BsZp25xKY209rPtApksaK7FFbfI(5auxB@uogw}5cFZ$`h3y<$G(Fp$
z-?u|yJnk^t90SxTY{iYHyT_jQM?XNcL_fvr?Gkeiu`X8kvDf|^OayPy_n|vQ#^@&3
zk)z(zDk;m}t(a%FOWqB0Jq
z@DsEd7#=EvB7?Shys=aN8eM2BZf@-pPsRH{6q+4VW}V-mDEwwnKmN_^ZaZss=8O$;
zOHsd5TyxKmI45n^w!;fi0A2+w5ycncfF9N+(JDf*H)m$&&A4^cOh8BWz+f5+i!`+W
zq~RxEojN_b!`|ROz%Tykvw%>8(CWI1v!=KztT51MkLbK>yfJm?ui*W*hZ+{8Qv-1Rz=>r;N{arYF84Fgh(+Mw4*u0K9!5Mz#n6mfGdeFBb>k!
z6A85%;#yNuF_Ea*5Kc@n_CdV!SgS#}ghn{iP8J?-%#VMQVX~bF0P%`}1l$VruD%O=
zlCA+3-$_dt?$jktczGTE5;tyFqmkMf+psq;pYL}BK6l4TcW}Ks1Rr?}=fO~(U7Acc
zE0c-N?hj<0qV|9l(*AY}JQopqj~(kHXGLHUj+M@1E0T-y{8mg<363=S-iqn@H0*CHgbMK+^c`?$aZx)ODbZoGgLq+q4diSNRo4I8wR~
z<)n;5e2twejGzlF+NRx&+vhFg;7<0nlP^~Hd+*^(0E307O<~9@
z2(GVME5yC{PZVP9(Z0zJZ*z7q_Kn`q319^l=c$YT!uk%Hg@-uZh<^~L4oB$r
zz}N0Wj8^B>>s%y8AYJO#u@VP4Jj4ywvm(fja8&(UIMwy4@wMC4g8aT(5{0mX8KgZy
zHO$WG=yihZ{6&u49(SuHPMqSCus}+y{$1KZpuWK|wWY$exIteJs89Nsdv>UZ$2g^)
zpFOIoS6Bm{`r(g9NIfB9NURzA@geZ`x!VA&K+S)|cogAlrGRFoJfkrl?KsPM1-L<|
zHaMy(P}tz1HLunuIFKUw4f@#h#eW~ym}4d$Vshy^XW&^$OA_l8n0TenjeY_}jI(Tc
z=Ni+j6a1);EejLkQuWoti#sf)A5@29er47gT=8@)(Lv>7@Mmw#c
zNr>q|PBRTi^O&qms=x>+;HjDz{b)Gm_{z^zt2rAS;xHJAG5!eH<&|0t)7LahtKk(NhOdoE6us4;?Ra4L4;<
z`0G#M6y6SDxvjJ32@9Mz6=IZ7{eE=xR(vA18}NwO3_3aL7_76WbJoJd=QGdG64#<6nA36v3z)Q+ihIKUf!V{9JsZo!oa4$4bz09`B=CKv+mL}w-WUdqF7cmrt=CDVM|u@pMTqT-Q(Mt~(R1SDDn
zvnn7&FraRPlPgVxd8{jhj_;I@JzfIlV>%2ZW%-$M3je?^5llJntq?W^6bUHb1B(Pp
z>Pg->NqX;vWhB55xX?)Q=&vBjEMq_h1qS+DgcW|<7Ig>dad1rintBvQsLEB_3Y>g~
z7~2N2S0|h?dQNn0;-;!aexxc4=X84q*9
z40A-SwS%dkGMBj+vU*RxC21Roun`Q~oZat1AlLkk56C6Q+aAxVK0EmccRJd*nN6+Ye5w7SJW63c*##5)t
zB3O~i!rJ4Z>=-2MHT7GM2;^=E#b>0-H%Xs{FWrgXd(3N`3qmPLA<7taEK+MP|Ciob8
zglXV6MKNP+z#U7Lu|c>M7XG21U`%KmN5Cz()s2?Wu`>>d!Ya;E692^i;V08z*j`N}G
z2B8n!Zt2X3P@T}$&JZVPb_&mEFq*K}3Fd?r!h19J3X8yEPxZkGoHp$E38%gsnsw9~
z&_>1qSj7Jhj*hMy)1oo4_Yp7cANllzAWb;e0SLE22)DdYy45b`0pjxf1m9{-bRjd-UD-*C|vIns!&90_X*6JW|2I|#Gv91X-4Lh373
z!5;VRz&xuXcWJy*WzFXvqSb;JqF>-0=P*!*wQCP`31*LT_5B0aloP0GMo8eXfx2L5
z9*-TN$uJhdgtT*ZxY;rNi{zsY%-8-Q1AEA)Y)IhaiF(3
zS_yG<&75}B0AMnSGo|lQ)Fqx#K~lED1GXrXB&e
zS_xX=VlA`{z~4cb6BNrO>^0wIMzBCmns6!x4Z)D3iN-Y;uv=bk2*pggR--P_b4TMl
z9JeNPIU28(0iINYn2z9JASREEX}(%7**&X0Ktp8%gYoO+=lCa@*vues)e;+
z=;t*zPAb-Tx@Si|3q|XYu-6Ef?6wUVozn|+Ky#B}uN87VO1dEIbz!RrMhL*;@hcoJ
z>|6X22E$Y6!oz0jB212eWr?<8@IAs_Z`f>2CTOKG
zSwu6#WNZ6NsXsx7Sm>LF
zPe3qjeljcw5R~G8vt?GCHZJ+SJMRb;yya3Z(+oD12L$yNPYD3{&BHetzE47BLktlb
z;$L81L-p1~FgtCs@1MXRX!}5b8R!gkgP{^9gpQaUIN}*;-1lk^qH!SKIr*h*ma#3(
z83_eUzNfY30V1E14`}CNuM-x8i>s)aYC&W&m~Hl&GuVB`Wbu^xXpfeoDrSJH!-won
zQDL_{;t)7XH{AiYjZ%r9gA%yZ@em?TS$-a<%Q0x(M!04h~ojr7iphq=CT!QVV!wH=~wTxzsX*W-5h1-AH0oMVHXFz+pnsJS~m;vD`Gt-y-FNt!k24!dzk
z9h#k~1RMsgM#4|W%D_%c9zG4IlJT9G8Q3Pfa?)TCF=?=?`?z{q-Q|u0!$n(XK{U#-
zlk$av!ls8n@-Yko{PbGuE@#udz^siKW6N%}!!GRXj6gU{#)w!Dt0m4`)VG9jc*L&L
zzg?XX-grDAHUp6X=S2Qn5|<(x70e2cQLkRVc#FEg2gZ5+2-P{$`0Rh)cM}U!Wv2&Y
z9lrG%Oia9IoYl+$V84%01>@kx0LGh`4sWniR={DPHD|E@BbQ;Xm(e}+5U!krV$Lww
z75W`xYpCI&Mr1)X`>Zt}djy$4*>s_^dP1$lfZu!?sB
z;1Rzvo`NaUQK;sH$3l%);?l7_UnahUn+e9xu;;T6XVvueWA_(;>LfII$*r)@pFYg?
z2@xav)aNo*DD%&PwmS%FI$#<|N{!9T^-D{S6?FKP$e*+|1bi<=v&Nkaj#N+Vn1=(G
ztVQA_-2X5ULER}6A)L0jpMjZ{ae71D)2IIlI2Di;?r;>2j{xw%cvs8&pdR(wZv+H)
z{5kH(?tgyyoAd?zZNe5MWKP76+qS2oc28
zVBQz=_gD*v%!4mRU>FR?F=uS`YXVoCr;ixV#heiI-j)omhHlyQm(TBe1U`Rr29v)d
zwtNQ<_y`XY444C}DH?$UL;{I0?74zrq)PHkew;30h!QSss8W)Vsy@a-k9YG!ETisM
zv*1ozO@JzSH4%J|U|@d92M%-X>mVkCyh&>`5!#+xgjzmC#SRgK(AkcJQC_XKK!E_P
z<_BrK_kt;jTGFrqOZeO^ZqHEzVxzMHVNqx)nh4tE&z6PJR#TvPKsc@Yf;9S>F_DPg
z15ULYYDbJ*38BoR@a6WM@rWh@hNJ+(dMpcuu+~!VJx3N>1mgM5u-6K6j1RFS_V_<^
z2$&_o?hyPcp|^#T5YxF1ozoL|E0}ZB(bg*9XoQ
zH4%DGk51S{PS({I_jkWT6S1OBZQet6-D8B27P|<~_S1V9UC~5L592V%ITu!SxRFm&
zh-Qir1YE-4C0iHRSLrEMAt#FS{9XKR_@lPs0!GRR=k&*&iZIe*00D){DGK~E&_vi^
zVkt0${S9HLZ@@IbF`ehAjxk3?3nA-bi`}E;I>s>4arf^e0aI^q!hHjG*ioHwiU75^
zXAMak;!7|@OR?L%!Zqcm)y3j5c^J#txVr3d2LXc0$*Z^0*YVBcYVjP~vt|ag3lGB8fwqvXZG+M*KSCPo{9l#`!5YF@)
zd=Spz=qJ%m5O56IwApYu7dSuQT6-X3o(cWz&OVxmNi{Pc-(3s6I_$NVSgjEDG$VvI
zfY<&08xbh`;ND_^(3=rsEMU^tCVz}}O4#cq<(iXH!ZsXyEzX+>d%gCeFld1q51<(i
z{$SRFPQrACHZ+6swa=QvBr_l|RnbJ?lYzkCr0FlCmSPW%+g}50DIEE?PuT1J;0=Tb
zG!bax7TkBCb}S+wVXv=U`zbUR7vxj35-)|5^gr(C)Bgv(4
z-R|4f^ymxVIQMX9ZZr{%oiQQ?X#4bWx_j^S2oO{m-0<_|^Zktg9OrX>m}qgbi8iS^
zFuo2_4tFOqM&G$pAY*@-6(p{)stox2LCyTzqhTQ2)L
z;2yuD&d!W90>MBLSl}=jXwDo*R?DwQSNo8oo}|aN&u($S`zPF9re?rkQv)0g*Pei2
z8@`0dY-9r1bF;fe5>m^cuY|`xXI!@B>47fs8=C98z1mxC!-`$^hCDtpM|aYk{a|?N
zG#INw#11&UKh;z_Jjik8+TrN7!QpGwJxAa&1TxwWO(h5+?s_+TE+LlsM9dlA@q*}jmk2M6tDnqP
zwZ>OyJtxYbA%2$#5k$pY(Y`o2=es*B%^QB^Hd5wyH^irb9j*eC!h_=~E)ZlGcsbgJ
zLz_p4y|2TuQZUoZv%+aIM=ViUA0WWq6XVU0hHrMwT7l4n~(dBNFy{M}$~!aA8hpdHr5O5Y8~
zQwmw0h8NbU*
zg&SyEV^5>Tm(TY%0>8Hq!J>QiYv1IIJOmVC>LYWEkAW+kiO}5Ch7hxILp)?6c|g!a
zVpNr+1Ds5iMJduJRJGrjOxg762qJWia!{He2b0Z;vN3W~O!cgR;?xGP>ncJ9^|7PP
z@k*IJ_V>NFby`B$Bou5lQXb~pg2A;oX`r6Cgt3OGN@0LEw`0n9W$X~3s8GGMN2YB*
ziUyhQ)NlXvJ#ec66NKVG6oFS_WPT)cG?59!q=2C2znC6K<9iD~fP>pGkUXFo;#vnQ
z>*XVw660c6rP1z8qkpUs`VTW9>@~C?%v&bLiVv}HJDtrZCYSYsqi+;oLs90+GzA76
z9{0u)Ku5mV8ZH**e+{99euSxdq!YR%QGbBBqIHKTi(aZlGaDN7Jx&D4yL@F;y?692
z0!sCfz1Z!73ysNQJQ%Rs-&W5DOFr5C00_gVH7b`GEg^zkBG=7W@U6a%UwT(y&OoKP
zg76G6Ypk#d%j5?{ViZX|Wif-ObYL{OV*p&~LiqdFPOBTJG%scJ{3)gmc9sU&0j85P
zM3jGrO7)=pE;bLqM25y%n46K;6@#;5?90!lm>#Y(
z3ZfN%#_Y7#l=o7r1!~;|%zN>KwH#Gr_nR)|*}E@ESzTcoUq!
z&`TWA0{s+e?8;un5wk*-j7IL_=~K{yzPNT6r|AU3%pm;2&;L1OS8%|!BrptW~_%+`3zRc=Map(^nrbk4M0FP8ncft?7X2wc^4xIQs>dmI!MapzwCU
zT)3KttjTlM;Um_e8WxRDUWaYI9_y;b@!|uwrXIh8S&M$k)P1~~+du2{y{hhmvkEBU
z?FhU?)(-QR5hFV=#{25@-W-^__{ZoaAxSYm?YYxtJcsZ8cQj=%9vGmML&n>Knc>bu
zIyUz6C)Lr4aO8UUgC`x#Vrp(=Y(vZtYv|1ee}yo71FfO$@$QHmYsBwHt<{<_@-i#0
zsMd6`#XrV&4mf7Usn8?9;I`LlCk(cWn_E@Al~Yp$3m0FP6Br^UG}gqPMPB?5oL77U
zz`5=il|D)^!&iH1LVWV%kWPk%z22gE5RNT7cFn&A&uYW$6QBu`!xjzNhO{2Uyu~p}
z!)$K|SuH%mu?3zE?JKgW2^fxVGA8&OK+m`MFYJulf+i4@q
zVv*;`+3!|w-TSHPm;UnK3OO#Q1ML*K{2!k3(jS7M_>3P80POKQD+~3iZYBq8suu4*
zsXqBPzX9`t`txMR?vC5+?s`$h4UfSbF&H8d#?9ve;#V?(*oJlWs%NlI;UQ^FdkP8&
z2D=-mMI}Z~w(}iu3ek{xwh3Wdo%4_H!sQd+3E|8?Ueqv~Zhs#!?nlxeYZ>=FXKvWL+8RRKo7S2f_dn55*ok1j|
zataN?!rus6YAApMb0Yc3jat{oy5l=R5w#4m)SZ%>^Pq5n@RRMNfC&py_yyN`>t9~9
zExvXcQ73|tw;(QwptxK>Fnq6{2jy}EkMs_L)dD!)@hB?WImcfUg>89+&wDRCiSS!L
z{_EAprw^)Q>e|B)h7hxJ7?x^diNALc?1uQc(1)li8Cx&NmIuV)5nLGE)ai@@f!4+g;7?~AmRbc+gu(Q-7$8ze))e^
z(|__S)!|F8BaG^>$Jodv+*L`)?_RGS|2RaIW2O>+{Q$g>ikZl+PPKh?2lIj|aUiu`
zcVjX{co^fw2?{O>d(6Cgx?qDaV;jO}T{3qyAT!32%fT~O;-~j8bYMooJ;rbK0Mo?-
zq)*n1ng{cY^>?6+Z$G_X{q>*wYt=9PnO`b+Eg%`Df>W*q?d1=D`|rVM-ebUxYaruy
zJ`jr->%nYReelzNy87^|ZxhQw5>LOHdK@tYJ^Hqo{U&uQj@d(nd<8(~16aY?9h#BE
zY#}veNW-O-`EdcEeVPAEwR`vr^n>xCen-MRs{J&F5!)5lo@&zK(^h)m`&C=MdbgCSJY-?7TBsfk`3J
z`%GGdDX;$X-)GL4cZ9}76Q!a9b7m-ICGw+7gh3od+n!#aC&p;-XrdY_PqB3O6BI|f
zs|q-{5zPSN2;--tqs-BD<4&T4llGJXy#_zD^-H6qk2<=>ECF1BQu|{bI|jrEFWyRN
zoeHF$60r_7A9ntLpa;PyeaU>W_VjZB4%1kT&=}yPI>%8s%SjN&Rr8pqC43kgaUWsC
zQyjvQqpN(|uUbR&)e>;b8b+@sLm!#%8TQ(`xgnOtm$8NrF)wJ!ny}ZH
z&ssR`Zaf7=z0pV`fG9KxPcVsbxx92d!9|`O>H2Hfui@a8>VLoc+tok%2mi79qkrU2
zQmx^@5vN~1pUnuA5&a%@wPEm`DGV#)&3~>`7bO4UC!kSL#sm>$
zwt~=pnx2P=io}Sc9J9uI@;G@-IuugDLZ_%wqApj~WT`_8F@MU_F29p2Wz5Jsh>6U_
z#hfF9DPQvGneU%0X4|gQSl1RU|5-opb3D^mKITn&`B}=DkBou8Nu*V^5&pD{MB}O*
z-kG0&GHRb_M`WD*O&NynN|>SE7sFmh5VAb=u?AR2d_r&|9KcxZ7wfImV`Xw2^2_XZ
z`e6u)8Wr=|o{gfBka1_u$lu1NADPnW<0nl#6)?SfTxSPC3GOi9LA$
zk#*8gWqjC1X2AoC>hcm@
z(r`EuH5&(B{v_}Xf{A_ZLkNB6UzwkMO|ShtW@mW&wd!!fPAZxzQs|!o9Bi5$n^!%v
z3q%mfI8j(NwnybU5K?0~D6c8VWDF@PEViT2V*A?VvjnJdNLXYUqqVEGQ@!lteIB-#
z{+Z_ZHrgmk^dxrVai`=Bh-6`>ix9wA=yumc+LQRDEajWsm?J_{2s*bRp1+&-5^2

G&c>ipUfii4#>jzVL<5h^QikU|f#|%a8vfJo#HWL>r5{0K?g4ai5d*;< z6S_J21}fiz@Rl=Dsf{@v&XS{W#H$tfp)9wfKQ0H;g-MxBMV;|G{4LJtLlY9fZ-oZm zZGcAzWxIlEGd_+*mLNFgk<|zeb()$8*J0X0Na+s0OrI6(m`%n%TWNQ{3U}mc>3_ml zP$T~wV8#zzbBEl~!IF7$?Pi?5Xt|~n z{K|I$r5_z_gJ?1WLz3tau-H30({Aa%AbtiDEX`{LQ9k2bD;|oKmZM)0LS7J5(yoK# z`c#-kz_GtPC14ZuBKYe&1TMpD+n$X(c4!t;uXymi!d^259UMU;ya*@rrwK|Sh8d?^ zE#&aNY$$D=aZ{K99tMlNU>dlvX2az=@K4WB+Q6XZ43{_@K{2hk?$i$RI5*M~^ZV)V zt|w$(KA+hLd=DW)>}9dy%+)!;HpT8bf3%>^aJ!+N=_iF~NyZA&8RV+d;*j%^!rz$lfz`Shv3 zLpU8gVYX_YdX$^Qz#Vp5o1W>L>OHhC~JOdZ0T zvO+7-2Uq!{!{&~Qd)g45dRoHt8o`NWpmm7;q}o!0^T6*K^fJ^1sMP7#w3Q5{RaIfm zy}T@fqIp;=c4IOaR}an};zL3JE-vkIyqzlhLmIFfn@w3WG9F` z2<~bf#AKI@?}Wm?D)=^Qv@Z(CH7+&1NHz;GjunByS_@1vYPld#2OM?Pu0(J}i?BO< zo4OEeT`yE0y@^2h_!)F9ZQB244Vze?VcZoK>M~7H)0(FY5v4OBmirXbQzw~aeAziS z1;4wZ=66%+)#R2J)?@!zP`pU3bxsS~p2A|2_GuZvWn3tyvt|14yOJfJ0m=VB$gBCT z^OT;Lxs(uRlfN`;0*~;N$ItJC?z_i>@r(_(sqxcKg{mWDjfao!qcu@Op;p8V6GAa` zq606=#)OSW#7{AUP4{gHC@dp{f( zJ|)mG8oINvy!9wl`IovyW_=T~o#I`npLwK$nhAL2F-vGLM2tC=95x)pc45u)hU3bp%+ zBh3odnrkQ?8?|)*!)K4GUwrKstCJ~5Q85)7p|MfX9u#)?=ds4s!+*zM+Fi5yZCUZy-U!iWDso_OW=%Z+_|sEJ!78vV{GWpc?)MjvMx9p zYahh%o&q7`y=_0mM*cR+F6M_5O$t_O4X8DailQ}2_UZxepV7ZDxFQ^yGZr-*Yj&E) zs2h6x*8jnax|Rx)PJBJ)#&nRS=`fk2ox)eA511n@gX6IgFIZF5<9PYFqO2(z^9xKb zkAIc5i=azNGzAg7(4G6RUSWjS4!$KOwgEp8aG#UBLP~`LxZ}XdSiOyOGX6n-LWE&!37cGdwtd790 z2Sn6osa$f#M@2&^USwMVFh(N8p$nn+yroTl);n@%(fj1Tp1GG>e?f-AOI ze&h74=7lvNe9{He!hgiEjj=QeZ@=6Bt9rb%VKm?=|UV<$)ymX zIYT(zB)oh+n-TaugH83X6GHS3@%vQ+OVxa2L=f-B^IvZ{1ItJj!$isAd3q;04wMoz z9TIiu0U6^z0Fg=tCewPMSCnya`IEY3z*oWn#QK1MhIKkQu#?+Ho5Z%W^*FKIyF1cUa1#Y2=bJ$*Jjqy z6QXDu^dzPZZL}Ml))Eq1$50>FTa%x5jwTag4M608F&ZNS9qEXs*D{WovDL1X>{wJB zwcK&)M4yQLjP?Pg%lBi(+>qE?!(LP87SA=c3>g9#-rFZ%uDaKL2S3sw;e~ZLBcKh$ zK@vC8rcXUOr=8*5p4|+CJaD$0uJ`!JSnktXfQ=U#HTo*En_!@8AGVe16IL1+tuA4{i$mF8prBhJHkQuS^Dgb z$x{~H>qkU-%@`*nm*oC)M7-V9c|97;+|l1Dt(S)Jtr+ zWAM7osSc8>Bb?F}*v%ClbUZ9VI&g5r^n#Gro{AVk@RkS_Ir%`T4a{Tw8pjB6e4G$; zYPM1e1k{WfE*W?4RL{H)8UPG)9VV8M=9M_iKd&A?x$$SK#nWGAE>UkI5Ojz$psHC% zx@v#Fx_91%W#L(m;Aem@3Q`Lb#iNPIR~<|uM&p!0XtvP_E&>_-_Qb}RlK^_C4Dh>H za#EvN05alU>s5}TqKP2z*aBxa$J4c`8N;Kt@O;Y29?8wx7gyr<0Q|0gnZ4I_d(2sL znE4DA)tS_ ze+t(TVtOF>Syc%c4ejFe4bXsB=-TGbK~FqBu-)qf*y50@%sRo8JTeJAiuotz3h)4d z!?8%jNQTy!4mw=M0TMh_K*{|S2o?HQOs8J~UYtnrDM-*K@Ln^O@fYlIoDx~bgW(-a zRp0=T@=QM&p3XLaM)ebPJ9{?vw|KoCZ5t7lC}a)$i=0X%(RrakeIsFr92XPnR|>jsGjcPsW>9@^5yfHjllQNM3nl~IP5$r5H1Y`a7J9L z9u>@PoQ3J`n#ok+H%$T^Apq2YN+L;@U5{y5=6phpsEaoI?xR%5Z`IdOy}UBFLI*EO zK46eh^SV4@sdf6>GzE_&@?OSkRudzTK+ycncM&=anLIg`W+?>+U)JTocUC`T?XPtT zm+kq}H|F=d@A;c@Ce-hI1x6$A*dAH<&z*jOpHvoG1d!UX5^9J>p)hOcb6`)Mlu67A zwHLPK;sH2Mskm!QoC@nw5MxYvg%1m9NZYL*Dq8A~rh;-g(ydTIPZ}yZFmkw>uyO2-9W49r{bSAMDrw z0(0WvBlUXHfL)c$k31gnj9vedT@ZFsJonIOF=loXCZY3Zn=#+_SIB&Lii3CVnzX^{ z$hAc=M5cWkCZp3El{HITw5m}zbL@OCn70+Qflw%cO~SsRGmePID|ML}(5 zoiFhbvR^zKBgLAA8OS;l_F6oI4j3+5XHfGO$J4qG%(M=cBSKOyxsc9z6~{~eagJpz zT5f{|HIAUtJ8;J}s!-!P-C(XWT*~qBjliKGRs@lBEAL+Z_k$S$s1g;s!u~%`G!Re# zZ`6|!W@npYkl?>sStR6k?tA7Fn{klTU3~&Qkxn7)iQYdYXP5JmTt!4`ACd-feHhLaPyJopx=nHDa#4(*iR_*AUsz4BoOa z(-edA9~zCdku-%L4Z?(7*C~Y3xDCeyOnQp%fNgpG_XIWZocfOm0wdF(K&WORCM{w- zaOVKPjyNi*aN%Q^=D@-Zwhsa7Q+~?Hhdp;fY-HHriq2R=cYNU07{|6n4-E(~6rT)S z(;%V>j%q|MS{^MWw!#c1j$aQEZXjN&IbnL!>j)KRFclcbg!m2|hwGtHkw6XD5v?F- z5-DXXFVY&~lTe)I7&3^p^Sp+u8NkVV40fD!IdBo!-m}0?A`?7>N$4vvfS~KB`Fu5F z*EA*aBLSt@3HO0TB7MT;T$eEaE&;9d%j+T(Wv5In`a&!@Uf4nSyN0>-*cQ%L66OYGpmDS2`8CW`}3;e+8V zm@=On_np__q}>oHHmW^nqhT^W$a+OcY}#;)+DP7pp>A(r_~6hgVXqla=_G9rN3SA~ zBNV_m4;-h|!Be4<9%9CV;RCY)rPdoxI1w4OoTi{ov`dz6f=zjPf!XIDYX)4})4u^b z_xbX}ysxDN;6#&vR3_lP zymK7R84%=r3DKpv$3E6@Qnef!>j+kuQ zOC)rqSSd60ggKKE9|P3Nd)#Ub&zv17#3eg+5Y?O46f_P>rD_IP{7u+vs4F%54gw)Y z@$6%;_qA|R9|S1hY(tpXiRzOP4MDej1~;fYo%?k&F!W;Ocot(?exwJhC2er24PWwWQ#A!nmOGngrIg+Q_=PW$DK*_ zy!Rdio~xV?A~b0ZAxwxRm^1o>a^~DQrh+GnXUsRuB5Dtu>L66HO>%PJ6XG`P`y5YG z-AKDr7_VWkcU-=qIpbm>3jnv6&nYH^HH5~0OLl8fsT0zAgwQsI@#lSl7?&N94xdXH z>B()(8;=<;`m#HNAk)FsC;!LMM3{mIUa$jvQ}w&?{bfX&CD;pwsh}2zAzobEuht{R z8ywN;ZlsDB?SODDA)f4wxei=wKj+pV>Z6N?m@>F}TyqBY zVR!qF7WesoSsicR#&m>fW{d!o07dQU(F~sw;B;`le*YWQ&;6mFL&%^X2-dP2pF${^ zV+em6Rr37dKSa~=2Y{1aVAhEJm+!mHx2o<(cdPju?4}V1JS~$ywGijgRWCU+=#&CT z{5jmU!ldlO?C^w7QJ)!sQ7Hs0V;etI=Z6nX3G=VI@ACa;85hQiv6ivh1CMI@_`g~% z1qA=;KjT~sSi@$~-$CYn9}}u&+t3y*kos2msENq^7t#@4xgr!M)N%>mbG4rccnf@e z1_Re8-|3r)Pnk2n7!=Gkd}`1z)ax5?%9~3!1PEhw(WW+ege?U2j&TbN)2vXYp9GOR zwfA?4>gn$L`LkaO15A)9%4yE9mud;t%a0JK!Ef3uVXvET(uTeMt(Y^0C-{)KOQ)Tf zGoX3f?MEYr^;EX`B zt2jj|GSn8+1k!A&8{-~8$Zyo|6^8lH*@6jGu4{LV5d^dd=jow61KBU=1-u55ay$*w-NL)pu-A%!#>AM- zK4vVt)y3rploNM^0l^6qp+|McY^csJ-$jrEKSdTaIpfh?#>IK5Te=p9@>OSW>(4$AI2HU(NCCfXUOVA&E#>=Xd-knd_fc8 zD(_(DEldwa741Q3F2aPNbB#j*@i?eEmpDXoz*h*S61ZyCXd+D0-vUD7@vCSCco%0) z%C}A9Gt5;@g!yH*?BLo8IBEsds<^WeUYWd9$OpR8K7AqVHB8s?_FMh3ePv&V90Qzc zDIh}8ctE^z^>=nljD=q5Y9=fT9f~GGZ36A?xoX^9AuEdCC|At~AywOu3%F=(=LrXP z{KO&#cGAeBkfO%Lf_uym?N<>{Ff+x+!I0kyHPmUp+SiOS$ZqB}?74we<`1mufDtNM zY8voN?{Euev?tUW8#4lmw(Jh+UQ5zDBAq&+HSBKDM9|NEqlsXwc1JV94v(>w>c_Cb z#{o^m8dWTCdMVO%?E7;F+b!&v?pnw6dxmqCuq@c&A^%i2$Ly}#svl(nMeW`}XzHV~ zHK@-NyxAl0B>E&oMM5`VM>NGh!h0cBU3QD?cueWRMAbwnaEvHBgLt1H%nT49I@iHp zOar}Z_e32`KJ0|JQPYEos|i{Fb}>i$qKW7u$f${sNUgEkic3e+S1F`D+#y2<$~RO^pC^0)f1Q*!C{* zrC{vUL|mJkGWK53g|LAgdd|51=<8o&7shT7O+=2M0$Al}^aAk)%Jo-zFF@b+j zIrA1x7sQ(5bDiE7tJ&QzF*bzohG=_xrbf?W0oW&}}g6Zb=P_!>WrXd)PA(?=X# z1rp#QnrOQ?%#K@x*hU!9M`Wc z&WpuIfx|hbR5d;Q!!XPX@Q^XXJfbGTw)UJ%QWLS(KY-1YS_*gn+V_11!=FTmKoc?a zP8b5N^}#E8kND4S{|0T{WjBuxfj$+rCcR+= z1er&3fk2F=qK^QuA{du6+KtHo?T+hmzk3x})KYlA2J{$`sv>qUcmq5pa6aQXuftv| zkc|lwe?EK8diw$}Km*hYQZFdPIHDco&(Y+|{Bx}${3FoV_ckYjM%-sJVa~twg&(I8 zAFr^0{&i*+DK$jo!%!tv8&L7I7$m0GCX4HfM*(&lMnI?4D$Bozb_R`?8t zfe@jVD5pKtiU1azIAhx~-0Kt49aHLWYf8Z}62B|v0&R*HN1=(Zj~z@RY9iXqftMfc zi7P?QsGi%HKeoW&HQt87-f$O3d?En!z|E2Kp1XGK+gysp4r+-OK?bQHVHC?P{hL9k zosSuWTw%jNN*f5W_+dkk_+lD4hCPdTIfY4_idSHbUsG&TD44ep%nlIp9VVP5cYF|T4CbN7fV)Ij4ycenhQmVW0F_;L%BGHw zY4#gvqp31@mRdo_z?_bgg1#cIH0<|oDA@!0b@zpj(P2J)2qUn4zR_cku?l%TYf|2IYx#) z=pRJXQs&>V*ZMKUzkocBfAQ4-&ixb8412Bb0dRuPY8>>5kXZ*#;=9-v14K!13@)XB zLZvn54q2g4{kEYo~)n!!)> zjH)b+3|Q7FViSi{K*-F6RnBzhH$bJSqvnQ$K7O~dn?+P?C^LWTd42J zD}zfs3;KV=?U<}48l;?XQqDXI0k+vAv~h>;3OsCG>N`64&0oto9xZNUw2hWKc}{yo z5HXyzV@kRd@g4=4zW;cAFR6n%O}$m^(Cd?30?C1?|ZSQ^)VHDOjW8 z?5bU$jAjdYfhQk@3XTc#sR=h$L=tY{Lw(16S+_;@s{@O)5#GhIbeW2 z#{Cl5W$se)=YvIc?f3|jg1b*{LX4Jy#ZGe99qSQ({xDpl*X>%U?^QdZK~f{2AH=M4CNd!N9BT(`{*N+xc&>^)-{TRv^9pBz``f9f7W0l~2_A?bbU zmBtd=5y-uTp|@||jL;L@hiJ>BCiFqAMu%P6to?pe%E2oL?~o9?NR*&~ejYF(gst<< z-Qd!M(7ti7X(>3+C+hcw626(k8wn&mp1; z1TyX(>8CJ|C!POQeH~`B?jm?OaXjQ;O>hAita-@zJp9rnHfH@d98E9QA_Orks)sgV zhAO%{dQ{!vDtE;#o%dJ~ppP0BnXn9LSABw=dqrJ3Ar6=TeO1bOM3|+eE<$F%Luhh@ zw;2&C72t&fYC(P(6L7W9=pQ&w*Jbul6a+-|J~~t4AH(gh;|qO8z)t9c=x=*EMK;%U zd*o9AgLt|@f74v6I~MqwcZceI`o+!|ydAUCUxGth@Jk0v$xHjmWi|N5|HWDFdUZ*t z>5M0(yg#HbQ3Efpdt49#vvwDau)5-1yG7sVhm3!M9|_pN`bQ{az7DJ*=iE~o!|old zqmN@U+hTSwV3tB#8)hp5ROsF@c56&NeeRv`M#|oRTR{=#_Ao||Np7l(TnMLA@*dnB zPB`_Tb1ePbVrJ2K*Aqxa9PLl;LZfj6rIaT{Jo4Q3c&erq!d|ZtQsaE6@PU@cdF|+1 z)Vl?oPl}+Vvo&i&pM^F!#mF-L2+h>B;ad5<>zZ;30>KH^8KVjY*#~H^ILG2JT)Z1C zosGT!1!(b&!>-7%*+b{x;1k~X@2Qr)}x#b`3f#Ay(nND=IzZP)L9kyG2=a4K1ZP`!M9 zC?nAN@SpzI!|oi$CwFj>v744@N&#Bf(E4N5SHi-7OuB?Lng%|dM4VzNRhT7jc*O!| zXOR-@G}b2&ty37Ti99Z5vgfhdJp#zLehi{#)h478lRZW|V?8bapB4yT>V+9yui2MRoqs z#}FGijQ{HXrzwRE#&7?Wz%~4n31>@Gx8>MIfWTq#;vvF?&Z&+iZTYE&K}~^mo?YtH z#$v|tQP^{{A({eOta=C~@4eEhzJ3qlkMhGR*38w_*wQ(}ZoKo#uUF>-RJ9NmPfWP* z-Hr9AP!r6Eos2sO_UaH3SP%pZk%YyLy&s~4b(OZCK_C$<@p9K0PxKf-loph82kk{q zZF~YWJ2)qXch=4?oN6XcrkoO(u;by63)&rdc2MqY{Rhz3Z=E6tP_aYGA9u6)A#(l#d^80*D9{uj(2M291NZ5Y2ntU5SsZeSdG`OjWK1Av;{ zAXyFJ9JrIx*6)$EDRthVtjv`9dk}5m5LWx?-g$^aVsV&r>Sb27Aj^0Tn7ii>?p6;z zz%ddhyd?xp{B!3mgVQ`gZ29Wqy>DeKyf?(Yc%O*lGQlBrfrjVJuboxL*W7uL2BQK) z5qvyO3Bl#Et=n&2uU`KHsS7_GWOy7i3=TiMWz^3GzTo72maLcIXbL0{H zmf`IX0@W6vHsl}16$DTPgT(nTjq(RiD4=y}X-;FT94GJ4aHL5Dm=cB2h_U7`VXrmk zIk(IobjK#g382qI3w;jPMZ@AtWS63NyD^e+ulfe0B!}2 zVootO12mm9eSAD|)YS=+@p4W~(*e>(W$s31UB$G^Tm|o6Sck0J(iXJb>kaHpd||{0 z{sE^acholQsbib))w~NV2qb)NFsa%0j?D@LKlqI_Lpg+eG(W*L#(IZf`p)AID07W^ zaeifd*VMa1=-)8j(vUy@hyHFg;*^n_QlDt&7<<>!IReCA_!EDn`q8(3BIz#$i44&X z{6FH_K;#n5FL<2YH!}h<7UJg_>8mFTonK6vizbVgpK1bpO4Kzz`7Q$llOW#YwOpN9 zB+ipex+yjJv=@z+UdOC~Cj@;!8ey6Sf8Tr$@tzaS&``B({X`jI~R-U@x;10xPWpbkow_iAUFbQ7VD)~P2k+pz+J z8LT%)FHL9Xi;qc*T}(7Os$p0xzR#TCvo+*j&_{oe?jz8G{$zaC< zr}a3(5)g&U;MX-g;CF<+Wyb>L;gc2<)*HlbfJla!nTKZ&F^j_&+@>YsdH;v) z(vCYkp|PhjNrO%cXD)3^3b4@62F~1hfJEmJwl0^WJ+si1_I7)Dmh~S(BY3{X8)K2fX}y2OK4V&+(V7J9mC6=qLm&4)4>R zu$W%P8qn#B$brbnF5b(|5`j?&=|{geA#+cy zW|qOZwn#_Y)9HT|Qy#l!)ZV7;VL}JPRU`0vt7a~t!WYK&?YoRMft&0|#)chIji2^0 zbd0&nF++U>nC~z%@lhyb{0JmIj#>V?etD}iBgd*psqvlqY}X)c1%AeaaMC56!5}T; znsEUeUkEkrdef|sQ3Y0RkO>Z@z2G?G$y;^|w5xf=Za9C!;vd&US*rz3@SU}@5qAQs zPM4(*&UF!}oI$YyZB!Fx+g!pKt*Z5+G3ngmmFtW&>f13#mdih!C|&Oqp&V<2ekh1A zpcy;R7_HJB-UA1j6ik>rw3}$xpgW#u@@8C5Ze>0KkK;^R0R`t^G;TgZ^YZ!Oj6kS` z_haY)Xb>rxssCbccR?1q%S62Zkn%vbxE)df5+jX3LGGmwm zyFbt7Q!4NC#X2l25#cj`)G+wo4A$XO|IC1}5I=ps6N$|xLy$iC1b+ULE`~Pxf^qL~ zbhA!1Tb?il(xEri7=gpkz``wY^^Ob4f&cujhGx8(Fn*31OO)Re2)<#U{8Sqe7S8uB z^E+m7dN+g2*8GlDTU#(S_DNM}=wKF6kWgCm-h?i@{jGhG0F<8a>61>-A59bz3xTfx znVhk5d6#!;LGlV%{o+USDH+^BFdB_ev|AGEdi)dP1GP)*7LJ)C7z(}w2I`6lN*wkG zFu#Y7w3h-Yb(g*gC9u<2gi2uWF|7b2Y~{D_@;(VAJ@4xLz~gp*Iz@9Vk5UL;f~lWPV29Wj$o+HD%-)2j2+|D3BZ zEaoTQOQLV7#Gdn6Mz(=i9Fy6b)I7dRoz06RT8A%8c_DM1r@_G@7?#o*#Tt%$r!{MCA0lxUTNVu&%S*_ch+_t)wxDqci-NrRA&-WT2d3?BJOLJfEjs9;S+WX z$~^ixxS%~X;n79yw?;Kw6Bod!hIUsw{7Q8vKQ=l%5kYS2E(9P85x_r!b_~^<-3a{| zZpgnACzN9NSar8hd8MrkO|P&zNZj`iJZdO zm|bLqJ^Ha)(gyRP3V)5p#e511#zZiLwSE{E=bXSm<-Ee-RJJ2g^qF!3gN8?oz6k9c>F3@Ar&30vKHhq~OkmcDo>bHhCC(H73RR(-><*?mW6P{$M8;IxQ1 zVoO_u3nB#omzotI5J<*A4EJyPhB;$FP$h5kv^=kQU;ej0_P2#(qAAJ%L`7d=YZ7=K z8rsZpj-`BrVe&iow&C3RsrSp`l6xs=Aa4US8Zb17ir)h@)f+cuUYI=SxjTnLo#-IM}j2DYwT5B;|lXO^3%@HIJ(8$gxbQ zLXI2BxRw6~Xh5!?+)mqG zjAxw@)O;iT=kt_Eq(0H|)HsnBFaP_2jerp)ce3+0DcN_%4LGUUzL(*Bg zFd}9Ndr9=b<<(+c5qFAQ+tNavFp75-%dc1&qZq_=oh_ zJs&)_X}~HGUuQ^#2?2pPPjSw=BtTMILXE&74+@PUy@P%AHoreOhOE$bmvY98%2mho zWeaSQgg0k);*Q@R&0ufT^DdRcA*Fpi}0-;KHt@rIO zU$4%e6Xg(LcEstKWlm}oJYR9$`3-_<9iPk*SP0=w@F9g4g+LilcRb1IjcN57f^->k z#~pEqIYC7XuJ>Vzdj$!F7}~TS1CDbl@OV4wZ2uHQxq(IsCeI0qsJQ{mIz&E1q15Q9 z{S9hoW{fdY@Qdh|`h;enV=&Te4`BqiP{H7>Bc?uJ%IOj`UPJsm7`u|@|Fi-=nWxXZ z9icpW^ccnlZ7_1Bvc01u6o$Rtxa=S?`a(3Jt!w$8{*YIOUfm>3r@kTcz{wVHs?ZI} zQQz^c*Eu%JJqkD^t`H(?J0+V6Y0}*YrZ;cBfu@xW6TS=#8K2+~b)|7&?h)8YCq{SB zhNw;mYTB03dxTNv;gybwtR-)u424pt;7_R&bv}Z27tKe?fJ>gLh{=R`G0%AV3NR5+ zjpLr9!CgLW2RcWb2p>;@95}i@AO?sLEuC8L3EA zel?!aY%)$`dW!B6qYI4N!hbVyzi5?;TEHReUh-4G{8 zeHn^RgC{8zCJ^dTk&bbmTm?=9L&nBa7pAL;>K_9qaU!I1#)(L54TT>5d9+&mm`;DX zI-3iJG((|;wa8IVulAm@F`;=J#R(r?FlpEXw+5Xt-ne^7+Az0Ne}` z;N2L`jt`5NS%DEU*V-avn&io(KybsG`K(kRp1_DkF- z7p`k&>!Hpa6v7hPxg|&F&NMTi0pP(g)IN0m3XfmBCiIrQN^Q3P9Du#OzDP#j#WV zQ6iAaNn>fpoi1n}7)HDEp`5B;I6!h|Jlhvv}$ z;DoB(hc;}=o$VaaYpu64*>>#m+(jzEyTiL=H^UwPR>C{BhQ>$mRDixPGo*i0wbMI= zp7ED~3#V?G?l5}nn&ajdEd{D@nBM|Ic>=*)yHlcG$4wzaPkkN5atIS`N6%nn5E#=9 zM)jRxuW1jDYtPo}eXa1gi^EFU!5C?84}_$MBC4ITduhi@@Wr-dwsOk5`L3KM8G3E1r6wG<7;}!pU61kT&krTr-5{ z-oPkqUr|@0Es@PpQ^p3wOPjHcP}bFAfbJbmmw}uAJYEaLfmPUycF3&fjrk4HtSA6h z0!x`G*M<+h;2Q|W9Oxf$vQN=dHu(2u*|fXBcAIk=Pi%8V!ejIMGB1BP1H)y@<58#`$vS1- zD#Wbmdyi8ySDFdNPyt3kCK^@X5hkO@Dr8CHrD4)vp~@%Urz7K_ynKF`Bfwlk$PKIn zlk-W?s2tB?VK7PAfywM#&1fE&RVJN`;C<5Ap(#wXvH8kCbGpOwJkaRa@jd<{0aAnE zIp9)3a*!XS)g%F0$zCL2E+|pMg)WgO1etdE1NtO~Uf3S#5`nzRxs;@#_czEaFB!69*y-4(k8b_>tYI=HxveK2N6 zz9OQX>B6B#VGi*T79&m?Flm5>L?MK(z&tz=!fY~*Ucaqr<%r#$CI~MmqFCn9W4;cQ z;jb4kgYF)czqAbQVmMvl9FDG6^VtLBFbF%l_&F+mV@a@|qiDODvXh!|jLZ`fb50xR zuoXcGoEoA^T|fx!$1)}gyh1#N7F9854`H+HsXoiXhmxR8re7R_A};?snk5mBs& zZi!ICM znr-Mw4=25iVW=6GEjvxHhPM;6D+~sYgxqnGeS6}>080~sLdmcXjG^PY<^EFFjk&-s z`s{e)P)j=3rckG~T8o+>cBC+FH3Nt|yf1$QV2BySBYPbd{2G;(= z{OY=0A#_1@625u^{!gGG7YJ420V^Xy?lH6mg8|ElBfaD)j+kmK7+a(d$IhdxbMU*Q zVHyDDBjyrTRgDxN2aGM+H-$iZGbH%aYQ+&i@N9(Xt8=NAjGwHnE~bv`XbIG`S)sX* z76}kf4}95SzUvblX=RvZ-kGLwJ09Ib`*n%HOVB7|bXXaW#~+8JZJ8s(Nv~E9S*MPh zv=BF*;j3%_(CEk%cieA*dC|E7k_fq8VLm_;vNAfQ>PAO~j~;U$*pS z6ONZZqF>Cp8Z%%MZ;l9GEnGv6%Pzc7jP&#!{2voKJ|W|2$;hdeb@L=WSDQN37v|;j zLmh$cjth!heFvD43v+*2kR%RjF4iIMYc*E#fte8=1QTJwMWae^=e7alM#s&1<)0rQ zBzN)&?F`2w1&JNIG(f6OIWDz8{l4U8$4kr^wlicg9xw}>K!oQ6 zi@L<5;n7aVRG$e3rn<(iXN_(2Ir&!XE?NjdISR^HjsRXjp}*M8J)S+T#>9zuw$>lP z9glN~0K?8L0tpQ3@%&?aV(6bk&Yv+vN%PD9WA9C3EX}g}zVFRbyokt%oHJ|ef!%15 z%@#?Rq9~X!pslqMATJDfAqZL;(8dD1^VWbD2D~&3uROp81i{|Wmf5mwSe8JV>~6Bv za}AkUImGCeXyII2Zzz3Ran zmq=CU|G^8lXl_x8dfB@qeHS8)^<{@+|@DW z@VpJ=qGxH3_=**oJvT58Rulgf)D_~rrbK zvN-oEtm7U+;L&xYJ42!O3S3?D_lk;{t=R<(hn-eu>}i1}d^7$5I1iizTwdQS*je>% z)~#-ZC3w6_eFEm0aZ{*LcyL$D1pKUIGloM9~5k{CY z0+6l_H`H1JQ;jn8mZ(l#4kfM?*cBX%lNcibT539d0LMx9sxBtq=e@XNmnvLlD`~X= zPAnD+O1^hkFK3gV!iZ5Ou&P?c(jsClOS>;$L2LF!&`iHY7-O7QxN7EEH@FK?THLU& zM+HkuWADp|i^s-eC=_+6PHQcW>Eb11ae~`|dELi9ATX@9&zbvHbw>H?1~gXpi~Z{{ z)=TK9!uN}dr_~AWN3*?xR|tvXxQAo+?B$c{?T7E>?>E1`m=OT4$v3A?gyo=}6gB2l zNCd$!uoZy;%}~KW;lbDmE+JUJD78K$5D|oqCBkz)ujau&v?=c`@o=N8+g!vsbKsF$vvR&IMmB-YCsGVVzqP@obv@w9txvz!e zGi|Azkf9MoWYy{W(I_gH3YLdhBCbc{>fR}4@y0W7qgf3*1doMyo*-;s zEx;nuIw1xF_fAtwgp3ny&(hSg+|@2Np%HL*RzsV2H=_F+0mDe@T`fnr>kLPtP6jFn=SBovw4W% zK&fdpXWG~^|5od5@Cr>C&3VB_TH=HqUlSF6>*Q~w(qfCXQ#O-wJP{m$qtpEc?j&Lq zm=g;y8MN6z3%85i?yn;_fa^UAtWoy5i2?&$O>jt9I_-PRH?R;_Af2$y8Zb9uwjBhu zHuqSfnwh5bLa{`28V|D;JH#8w_@m&lTBVA|{cncx>mr*YplF%&un&FKsBY1d{;vhb z6>bN+=!R;#O;=UML4jfptM7V)ig>~$7@QC+8GjKajuzad0%^C<)SQhV6y54HC;)%kWfNBxa z+GJVqd#4Wq-vBP^7AxQ&I2WPnDE)@3`k$-BxTcaA zR_@`J5cjd;LSJwY*C|V#LR3)ESRNMaYIp-v#dXr)x)uqy)b>bx1g?+StqocyK1K;P z3#|(yGi$(pSPW^#Vz)4kQ`v*SSytH;sX2sl+`!7gg5FY(zN_}3FPCQ)T$|wY_0xrW z0CApSGG8&@?t4+LVbbP&4O6oFJ#0z$bN>t()r9uc-gQ-2zS=6Gn)YMW0*+K?^cuw5 z&d&|pf|++6%$ zw5QPJcpCR%Ohn6UmKlC};5QD!aWtCUQrM&EoGOmYQ>Xaq7r^2njK)Oh;^@sZGaENz zl)kPgs|jLhVO-Gt=^t>Sxvt{_XU#cg2mp?i<>QSD8M9NVX}-1r3&=gi2kzTghnUG$ zmDK_5Ex6A3fhj<&g$8FM_@g=7_vxZ3St?~rm<`Uc-Vjc-C1oD%18w=7g0X>*-e+ve z4BU4tjD?sXNc*V}q1DF4cqKl9TXWW#aS#d-j=$e+$FkiG@JJb4w`GDVId8z-LRtY1 zHPCufE*c!+3^*dby2l6e&Sq8zKFk$MFpK||p%$OaH1J&pL@vQ&_jy=zkK0viVbJ7n zu_$9o=2+9TA}pxmvB7_Du%Hk7eY5!ly2hGdjaf^fJcFVEjO+EsdEc6?+t;|pbeE*; zb=E0!%k!46cErHY2oJhHT#G4f&H4zOysH5dUm&ck!6k8biB-ayUOF&7$7m*Alp8gs@$+NvP3U_4Z~EJrTU510 zk(o2b26Em^uGmusfseVCmnbB113#D3D16nCW{uf)-?hV%QY?i zz#uHw_ZHPp9^ublG%;&K>WOpkIjrFdhaCv0BD`$tq7)Z*2k0_gg< zU7emjuI9Khm?<<~jSCOA_# z%>a?LNDQs9pegmkOU$oS60Jo8rqX6dU-cXTtXrMoB3Vul&YqPll-oq0uMi{~+&dCp zn4ke{585ze_F(7|b24PUMi51V#ufxMuSpG_z9NlUWa zVW(Kl*;zYWRd|gy3v#*@c5n3p%@{_&b2S)BVnhI2!DIkVPhkGl&woVy7K2);CJBW4 z!4(AOFeqbAHjAJ0KJcD?sL{?5R%Jj2;fV(w6oT&dHdZ0xV;JjH??mHw9k?+ToQE}f zn|p;1AEQDPuqP!lf&dmI=K|Perb`4gnV;1w#jQ5$WSzmGue#ee<>+w~>pE6wg6S_I@o$O{_+ z0@n%LWrd3cD%bdfLu5{{9SdaxGI~v9@v27I+|M&*>tEaD0vAPik8)4Bt3C%vOm|70 z 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 cykX8=oH4=>9 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 Eg48N%=Kufz literal 0 HcmV?d00001 From daf39f9b1f3fff6930d755b64caf2bc30f548169 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Wed, 23 Dec 2020 16:40:04 +0000 Subject: [PATCH 07/51] docs(text-canvas): update readme --- examples/text-canvas-image/package.json | 4 ++-- packages/text-canvas/README.md | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/text-canvas-image/package.json b/examples/text-canvas-image/package.json index 2c8b20b59b..3dd443143e 100644 --- a/examples/text-canvas-image/package.json +++ b/examples/text-canvas-image/package.json @@ -1,7 +1,7 @@ { - "name": "textcanvas-image", + "name": "text-canvas-image", "version": "0.0.1", - "description": "TODO", + "description": "Texture warping w/ 16bit color output", "repository": "https://github.com/thi-ng/umbrella", "author": "Karsten Schmidt ", "license": "Apache-2.0", diff --git a/packages/text-canvas/README.md b/packages/text-canvas/README.md index 56d9c63b1d..5622543154 100644 --- a/packages/text-canvas/README.md +++ b/packages/text-canvas/README.md @@ -79,10 +79,10 @@ directory are using this package. A selection: -| Screenshot | Description | Live demo | Source | -| ------------------------------------------------------------------------------------------------------------------------ | -------------------------- | ------------------------------------------------------ | ----------------------------------------------------------------------------------- | -| | 3D wireframe textmode demo | [Demo](https://demo.thi.ng/umbrella/text-canvas/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/text-canvas) | -| | TODO | [Demo](https://demo.thi.ng/umbrella/textcanvas-image/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/textcanvas-image) | +| Screenshot | Description | Live demo | Source | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------ | +| | 3D wireframe textmode demo | [Demo](https://demo.thi.ng/umbrella/text-canvas/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/text-canvas) | +| | Texture warping w/ 16bit color output | [Demo](https://demo.thi.ng/umbrella/text-canvas-image/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/text-canvas-image) | ## API From 758dff6137388bb8a3a1a26a877e081383ca4dcd Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Wed, 23 Dec 2020 16:51:37 +0000 Subject: [PATCH 08/51] assets(text-canvas): add ansi color pallette --- assets/text-canvas/ansi256.png | Bin 0 -> 292120 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/text-canvas/ansi256.png diff --git a/assets/text-canvas/ansi256.png b/assets/text-canvas/ansi256.png new file mode 100644 index 0000000000000000000000000000000000000000..38a3654b18f3642f53a28c2357da04df4905738e GIT binary patch literal 292120 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

i3}4oWdZnJrkj1A$M?o^n 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 bbtG;1F0Zkj literal 0 HcmV?d00001 From ea59f571360de4b9484d687028e798dfb04298a7 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Thu, 24 Dec 2020 13:30:08 +0000 Subject: [PATCH 09/51] refactor(text-canvas): extract imgRect() helper --- packages/text-canvas/src/image.ts | 42 +++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/packages/text-canvas/src/image.ts b/packages/text-canvas/src/image.ts index 7d2d1ec827..399e1b074a 100644 --- a/packages/text-canvas/src/image.ts +++ b/packages/text-canvas/src/image.ts @@ -1,6 +1,6 @@ import { peek } from "@thi.ng/arrays"; import { isNumber } from "@thi.ng/checks"; -import { ImageOpts, SHADES_BLOCK } from "./api"; +import { ClipRect, ImageOpts, SHADES_BLOCK } from "./api"; import { Canvas } from "./canvas"; import { charCode, intersectRect } from "./utils"; @@ -101,13 +101,14 @@ export const image = ( w |= 0; h |= 0; const { buf, width } = canvas; - const { x1, y1, x2, y2, w: iw, h: ih } = intersectRect( - { x1: x, y1: y, x2: x + w, y2: y + h, w, h }, - peek(canvas.clipRects) + const { x1, y1, x2, y2, sx, sy, w: iw, h: ih } = imgRect( + canvas, + x, + y, + w, + h ); if (!iw || !ih) return; - const sx = Math.max(0, x1 - x); - const sy = Math.max(0, y1 - y); const { chars, format, gamma, invert, bits } = { chars: SHADES_BLOCK, format: canvas.format, @@ -157,13 +158,14 @@ export const imageRaw = ( w |= 0; h |= 0; const { buf, width } = canvas; - const { x1, y1, x2, y2, w: iw, h: ih } = intersectRect( - { x1: x, y1: y, x2: x + w, y2: y + h, w, h }, - peek(canvas.clipRects) + const { x1, y1, x2, y2, sx, sy, w: iw, h: ih } = imgRect( + canvas, + x, + y, + w, + h ); if (!iw || !ih) return; - const sx = Math.max(0, x1 - x); - const sy = Math.max(0, y1 - y); const code = char.charCodeAt(0); for (let yy = sy, dy = y1; dy < y2; yy++, dy++) { let sidx = sx + yy * w; @@ -173,3 +175,21 @@ export const imageRaw = ( } } }; + +const imgRect = ( + canvas: Canvas, + x: number, + y: number, + w: number, + h: number +) => { + const rect: ClipRect & { sx: number; sy: number } = ( + intersectRect( + { x1: x, y1: y, x2: x + w, y2: y + h, w, h }, + peek(canvas.clipRects) + ) + ); + rect.sx = Math.max(0, rect.x1 - x); + rect.sy = Math.max(0, rect.y1 - y); + return rect; +}; From 1c0e284e9f48d4a37a55f74db0fb2b6eade9dc89 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Fri, 25 Dec 2020 14:30:39 +0000 Subject: [PATCH 10/51] perf(idgen): minor updates IDGen, add doc strings --- packages/idgen/src/index.ts | 55 +++++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 15 deletions(-) diff --git a/packages/idgen/src/index.ts b/packages/idgen/src/index.ts index c3f4d54801..d19b029656 100644 --- a/packages/idgen/src/index.ts +++ b/packages/idgen/src/index.ts @@ -23,7 +23,7 @@ export class IDGen implements Iterable, IClear, INotify { protected vmask: number; protected shift: number; - constructor(bits = 32, vbits = 32 - bits, cap = 2 ** bits, next = 0) { + constructor(bits = 32, vbits = 32 - bits, cap = 2 ** bits, start = 0) { const maxCap = 2 ** bits; assert(bits > 0 && bits + vbits <= 32, "wrong total bit size [1..32]"); assert( @@ -31,8 +31,8 @@ export class IDGen implements Iterable, IClear, INotify { `requested capacity too large for bit size (max. ${maxCap})` ); this.ids = []; - this.nextID = next; - this.start = next; + this.nextID = start; + this.start = start; this._capacity = cap; this.num = 0; this.mask = maxCap - 1; @@ -41,10 +41,20 @@ export class IDGen implements Iterable, IClear, INotify { this._freeID = -1; } + /** + * Extract actual ID (without version bits). + * + * @param id + */ id(id: number) { return id & this.mask; } + /** + * Extract version from ID + * + * @param id + */ version(id: number) { return (id >>> this.shift) & this.vmask; } @@ -75,14 +85,14 @@ export class IDGen implements Iterable, IClear, INotify { } /** - * Number of available IDs. + * Number of remaining available IDs. */ get available() { return this._capacity - this.num - this.start; } /** - * Number of used IDs. + * Number of currently used IDs. */ get used() { return this.num; @@ -96,14 +106,15 @@ export class IDGen implements Iterable, IClear, INotify { } *[Symbol.iterator]() { + const { ids, mask } = this; for (let i = this.nextID; --i >= 0; ) { - const id = this.ids[i]; - if ((id & this.mask) === i) yield id; + const id = ids[i]; + if ((id & mask) === i) yield id; } } /** - * Frees all existing IDs and resets counter to zero. + * Frees all existing IDs and resets counter to original start ID. */ clear() { this.ids.length = 0; @@ -114,13 +125,13 @@ export class IDGen implements Iterable, IClear, INotify { /** * Returns next available ID or throws error (assertion) if no further IDs - * are currently available. + * are currently available. Emits {@link EVENT_ADDED} if successful. */ next() { let id: number; if (this._freeID !== -1) { id = this._freeID; - const rawID = this.id(id); + const rawID = id & this.mask; this._freeID = this.ids[rawID]; this.ids[rawID] = id; } else { @@ -135,13 +146,13 @@ export class IDGen implements Iterable, IClear, INotify { /** * Marks given ID as available again and increases its version (if - * versioning is enabled). + * versioning is enabled). Emits {@link EVENT_REMOVED} if successful. * * @param id */ free(id: number) { if (!this.has(id)) return false; - this.ids[this.id(id)] = this._freeID; + this.ids[id & this.mask] = this._freeID; this._freeID = this.nextVersion(id); this.num--; this.notify({ id: EVENT_REMOVED, target: this, value: id }); @@ -154,7 +165,7 @@ export class IDGen implements Iterable, IClear, INotify { * @param id */ has(id: number) { - const rawID = this.id(id); + const rawID = id & this.mask; return id >= 0 && rawID < this.nextID && this.ids[rawID] === id; } @@ -179,9 +190,23 @@ export class IDGen implements Iterable, IClear, INotify { } } +/** + * Returns a new {@link IDGen} instance configured to use given counter & + * version bits. + * + * @remarks + * Overall ID range/capacity can be explicitly limited using `cap` (default and + * maximum: 2^bits). The start ID can be defined via `start` (default: 0) and + * MUST be < `cap`. + * + * @param bits + * @param vbits + * @param cap + * @param start + */ export const idgen = ( bits: number, vbits?: number, cap?: number, - next?: number -) => new IDGen(bits, vbits, cap, next); + start?: number +) => new IDGen(bits, vbits, cap, start); From 441cddbdc4707465a182f3fa903a4c6bdc4e9004 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Sun, 27 Dec 2020 15:00:17 +0000 Subject: [PATCH 11/51] fix(geom-isec): fix #269 update rayBox() - fix Y/Z-axis handling - add tests --- packages/geom-isec/src/ray-rect.ts | 6 +-- packages/geom-isec/test/ray.ts | 71 ++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 packages/geom-isec/test/ray.ts diff --git a/packages/geom-isec/src/ray-rect.ts b/packages/geom-isec/src/ray-rect.ts index 122f498977..0d3fd93ef2 100644 --- a/packages/geom-isec/src/ray-rect.ts +++ b/packages/geom-isec/src/ray-rect.ts @@ -53,12 +53,12 @@ const rayBox: FnU4 = (rpos, dir, bmin, bmax) => { d = 1 / dir[1]; t1 = (bmin[1] - p) * d; t2 = (bmax[1] - p) * d; + tmin = max(tmin, min(t1, t2)); + tmax = min(tmax, max(t1, t2)); p = rpos[2]; d = 1 / dir[2]; t1 = (bmin[2] - p) * d; t2 = (bmax[2] - p) * d; - tmin = max(tmin, min(t1, t2)); - tmax = min(tmax, max(t1, t2)); return [max(tmin, min(t1, t2)), min(tmax, max(t1, t2))]; }; @@ -73,9 +73,9 @@ const intersectWith = ( ? inside ? { type: IntersectionType.INTERSECT, - inside, isec: [maddN([], dir, tmax, rpos)], alpha: tmax, + inside, } : { type: IntersectionType.INTERSECT, diff --git a/packages/geom-isec/test/ray.ts b/packages/geom-isec/test/ray.ts new file mode 100644 index 0000000000..6e802eae06 --- /dev/null +++ b/packages/geom-isec/test/ray.ts @@ -0,0 +1,71 @@ +import { eqDelta, maddN3, mulN3, normalize, Vec } from "@thi.ng/vectors"; +import * as assert from "assert"; +import { intersectRayAABB } from "../src"; + +describe("ray intersection", () => { + it("rayBox inside", () => { + const dirs: Vec[] = [ + [-1, -1, -1], + [-1, -1, 0], + [-1, -1, 1], + [-1, 0, -1], + [-1, 0, 0], + [-1, 0, 1], + [-1, 1, -1], + [-1, 1, 0], + [-1, 1, 1], + [0, -1, -1], + [0, -1, 0], + [0, -1, 1], + [0, 0, -1], + [0, 0, 1], + [0, 1, -1], + [0, 1, 0], + [0, 1, 1], + [1, -1, -1], + [1, -1, 0], + [1, -1, 1], + [1, 0, -1], + [1, 0, 0], + [1, 0, 1], + [1, 1, -1], + [1, 1, 0], + [1, 1, 1], + ]; + for (let d of dirs) { + const n = normalize([], d); + const i = intersectRayAABB([5, 5, 5], n, [0, 0, 0], [10, 10, 10]); + const expected = maddN3([], n, i.alpha!, [5, 5, 5]); + assert(i.inside, `inside d=${d}`); + assert( + eqDelta(expected, i.isec![0]), + `d=${d} isec=${i.isec}, exp=${expected}` + ); + } + }); + + it("rayBox outside", () => { + const dirs: Vec[] = [ + [1, 0, 0], + [0, 1, 0], + [0, 0, 1], + ]; + for (let d of dirs) { + let o = mulN3([], d, -10); + let i = intersectRayAABB(o, d, [-5, -5, -5], [5, 5, 5]); + let expected = maddN3([], d, i.alpha!, o); + assert( + eqDelta(expected, i.isec![0]), + `d=${d} isec=${i.isec}, exp=${expected}` + ); + d = mulN3(d, d, -1); + o = mulN3([], d, -10); + i = intersectRayAABB(o, d, [-5, -5, -5], [5, 5, 5]); + expected = maddN3([], d, i.alpha!, o); + assert( + eqDelta(expected, i.isec![0]), + `d=${d} isec=${i.isec}, exp=${expected}` + ); + } + }); +}); From a8e815bc16ce0e09a2e0310b2788fc1095c8148f Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Tue, 29 Dec 2020 21:18:41 +0000 Subject: [PATCH 12/51] refactor(color): add/migrate types for presets --- packages/color/src/api.ts | 173 +++++++++++++++++++++++++ packages/color/src/cosine-gradients.ts | 42 ++---- packages/color/src/names.ts | 4 +- packages/color/src/parse-css.ts | 4 +- 4 files changed, 188 insertions(+), 35 deletions(-) diff --git a/packages/color/src/api.ts b/packages/color/src/api.ts index 8e8cc42673..bb5321cbf7 100644 --- a/packages/color/src/api.ts +++ b/packages/color/src/api.ts @@ -12,6 +12,179 @@ export type ColorMode = | "xyz" | "ycbcr"; +export type CSSColorName = + | "aliceblue" + | "antiquewhite" + | "aqua" + | "aquamarine" + | "azure" + | "beige" + | "bisque" + | "black" + | "blanchedalmond" + | "blue" + | "blueviolet" + | "brown" + | "burlywood" + | "cadetblue" + | "chartreuse" + | "chocolate" + | "coral" + | "cornflowerblue" + | "cornsilk" + | "crimson" + | "cyan" + | "darkblue" + | "darkcyan" + | "darkgoldenrod" + | "darkgray" + | "darkgreen" + | "darkgrey" + | "darkkhaki" + | "darkmagenta" + | "darkolivegreen" + | "darkorange" + | "darkorchid" + | "darkred" + | "darksalmon" + | "darkseagreen" + | "darkslateblue" + | "darkslategray" + | "darkslategrey" + | "darkturquoise" + | "darkviolet" + | "deeppink" + | "deepskyblue" + | "dimgray" + | "dimgrey" + | "dodgerblue" + | "firebrick" + | "floralwhite" + | "forestgreen" + | "fuchsia" + | "gainsboro" + | "ghostwhite" + | "gold" + | "goldenrod" + | "gray" + | "grey" + | "green" + | "greenyellow" + | "honeydew" + | "hotpink" + | "indianred" + | "indigo" + | "ivory" + | "khaki" + | "lavender" + | "lavenderblush" + | "lawngreen" + | "lemonchiffon" + | "lightblue" + | "lightcoral" + | "lightcyan" + | "lightgoldenrodyellow" + | "lightgray" + | "lightgreen" + | "lightgrey" + | "lightpink" + | "lightsalmon" + | "lightseagreen" + | "lightskyblue" + | "lightslategray" + | "lightslategrey" + | "lightsteelblue" + | "lightyellow" + | "lime" + | "limegreen" + | "linen" + | "magenta" + | "maroon" + | "mediumaquamarine" + | "mediumblue" + | "mediumorchid" + | "mediumpurple" + | "mediumseagreen" + | "mediumslateblue" + | "mediumspringgreen" + | "mediumturquoise" + | "mediumvioletred" + | "midnightblue" + | "mintcream" + | "mistyrose" + | "moccasin" + | "navajowhite" + | "navy" + | "oldlace" + | "olive" + | "olivedrab" + | "orange" + | "orangered" + | "orchid" + | "palegoldenrod" + | "palegreen" + | "paleturquoise" + | "palevioletred" + | "papayawhip" + | "peachpuff" + | "peru" + | "pink" + | "plum" + | "powderblue" + | "purple" + | "red" + | "rosybrown" + | "royalblue" + | "saddlebrown" + | "salmon" + | "sandybrown" + | "seagreen" + | "seashell" + | "sienna" + | "silver" + | "skyblue" + | "slateblue" + | "slategray" + | "slategrey" + | "snow" + | "springgreen" + | "steelblue" + | "tan" + | "teal" + | "thistle" + | "tomato" + | "turquoise" + | "violet" + | "wheat" + | "white" + | "whitesmoke" + | "yellow" + | "yellowgreen"; + +export type CosineGradientPreset = + | "blue-cyan" + | "blue-magenta-orange" + | "blue-white-red" + | "cyan-magenta" + | "green-blue-orange" + | "green-cyan" + | "green-magenta" + | "green-red" + | "heat1" + | "magenta-green" + | "orange-blue" + | "orange-magenta-blue" + | "purple-orange-cyan" + | "rainbow1" + | "rainbow2" + | "rainbow3" + | "rainbow4" + | "red-blue" + | "yellow-green-blue" + | "yellow-magenta-cyan" + | "yellow-purple-magenta" + | "yellow-red"; + export type Color = Vec; export type ReadonlyColor = ReadonlyVec; diff --git a/packages/color/src/cosine-gradients.ts b/packages/color/src/cosine-gradients.ts index eb29492b60..b2ea0fff1a 100644 --- a/packages/color/src/cosine-gradients.ts +++ b/packages/color/src/cosine-gradients.ts @@ -9,39 +9,19 @@ import { tween, zip, } from "@thi.ng/transducers"; -import type { Color, CosCoeffs, CosGradientSpec, ReadonlyColor } from "./api"; +import type { + Color, + CosCoeffs, + CosGradientSpec, + CosineGradientPreset, + ReadonlyColor, +} from "./api"; import { clamp } from "./clamp"; -export type GradientPresets = Record< - | "blue-cyan" - | "blue-magenta-orange" - | "blue-white-red" - | "cyan-magenta" - | "green-blue-orange" - | "green-cyan" - | "green-magenta" - | "green-red" - | "heat1" - | "magenta-green" - | "orange-blue" - | "orange-magenta-blue" - | "purple-orange-cyan" - | "rainbow1" - | "rainbow2" - | "rainbow3" - | "rainbow4" - | "red-blue" - | "yellow-green-blue" - | "yellow-magenta-cyan" - | "yellow-purple-magenta" - | "yellow-red", - CosGradientSpec ->; - -// see http://dev.thi.ng/gradients/ - unlike the clojure version, these -// presets are for RGBA (though the alpha channel is configured to -// always be 1.0) -export const GRADIENTS: GradientPresets = { +// see http://dev.thi.ng/gradients/ - Note: unlike the original Clojure version, +// these presets are for RGBA (though the alpha channel is configured to always +// be 1.0) +export const GRADIENTS: Record = { "blue-cyan": [ [0, 0.5, 0.5, 1], [0, 0.5, 0.5, 0], diff --git a/packages/color/src/names.ts b/packages/color/src/names.ts index 4d3ec21eab..0693bcaf36 100644 --- a/packages/color/src/names.ts +++ b/packages/color/src/names.ts @@ -1,6 +1,6 @@ -import type { IObjectOf } from "@thi.ng/api"; +import type { CSSColorName } from "./api"; -export const CSS_NAMES: IObjectOf = { +export const CSS_NAMES: Record = { aliceblue: "f0f8ff", antiquewhite: "faebd7", aqua: "0ff", diff --git a/packages/color/src/parse-css.ts b/packages/color/src/parse-css.ts index 1da5d9c746..210a63b4e0 100644 --- a/packages/color/src/parse-css.ts +++ b/packages/color/src/parse-css.ts @@ -2,7 +2,7 @@ import type { IDeref } from "@thi.ng/api"; import { illegalArgs } from "@thi.ng/errors"; import { clamp01 } from "@thi.ng/math"; import { maybeParseFloat, maybeParseInt } from "@thi.ng/strings"; -import type { Color } from "./api"; +import type { Color, CSSColorName } from "./api"; import { INV8BIT } from "./constants"; import { hslaRgba } from "./hsla-rgba"; import { int32Rgba } from "./int-rgba"; @@ -34,7 +34,7 @@ export const parseCss = (col: string | IDeref) => { ]); } } else { - const c = CSS_NAMES[col]; + const c = CSS_NAMES[col]; !c && illegalArgs(`invalid color: "${col}"`); return int32Rgba([], parseHex(c)); } From 3bd396927c3aab7942853ec9b9f6013a1248389c Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Tue, 29 Dec 2020 21:21:05 +0000 Subject: [PATCH 13/51] feat(color): add HSV/RGB distance fns --- packages/color/src/api.ts | 4 ++- packages/color/src/distance.ts | 50 ++++++++++++++++++++++++++++++++++ packages/color/src/index.ts | 1 + 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 packages/color/src/distance.ts diff --git a/packages/color/src/api.ts b/packages/color/src/api.ts index bb5321cbf7..6f437c59cc 100644 --- a/packages/color/src/api.ts +++ b/packages/color/src/api.ts @@ -1,4 +1,4 @@ -import type { Tuple } from "@thi.ng/api"; +import type { FnU2, Tuple } from "@thi.ng/api"; import type { ReadonlyVec, Vec } from "@thi.ng/vectors"; export type ColorMode = @@ -199,6 +199,8 @@ export type CosGradientSpec = Tuple; export type ColorConversion = (out: Color, src: T) => Color; export type ColorOp = (out: Color | null, src: ReadonlyColor) => Color; +export type ColorDistance = FnU2; + export interface IColor { readonly mode: ColorMode; } diff --git a/packages/color/src/distance.ts b/packages/color/src/distance.ts new file mode 100644 index 0000000000..eee9e96c37 --- /dev/null +++ b/packages/color/src/distance.ts @@ -0,0 +1,50 @@ +import { cossin, TAU } from "@thi.ng/math"; +import type { ColorDistance } from "./api"; +import { luminanceRGB } from "./luminance-rgb"; + +/** + * Computes distance between two HSV colors, i.e. the eucledian distance between + * points in a cyclinder. + * + * @param a + * @param b + */ +export const distHSV: ColorDistance = (a, b) => { + const aa = cossin(a[0] * TAU, a[1]); + const bb = cossin(b[0] * TAU, b[1]); + return Math.hypot(aa[0] - bb[0], aa[1] - bb[1], a[2] - b[2]); +}; + +/** + * Computes difference in saturation between two HSV colors. + * + * @param a + * @param b + */ +export const distSatHSV: ColorDistance = (a, b) => Math.abs(a[1] - b[1]); + +/** + * Computes difference in brightness between two HSV or two HSL colors. + * + * @param a + * @param b + */ +export const distLumaHSV: ColorDistance = (a, b) => Math.abs(a[2] - b[2]); + +/** + * Computes eucledian distance between two RGB colors. + * + * @param a + * @param b + */ +export const distRGB: ColorDistance = (a, b) => + Math.hypot(a[0] - b[0], a[1] - b[1], a[2] - b[2]); + +/** + * Computes difference in luminance between two RGB colors. + * + * @param a + * @param b + */ +export const distLumaRGB: ColorDistance = (a, b) => + Math.abs(luminanceRGB(a) - luminanceRGB(b)); diff --git a/packages/color/src/index.ts b/packages/color/src/index.ts index dab7a0934d..b598af3e0e 100644 --- a/packages/color/src/index.ts +++ b/packages/color/src/index.ts @@ -45,6 +45,7 @@ export * from "./alpha"; export * from "./clamp"; export * from "./closest-hue"; export * from "./cosine-gradients"; +export * from "./distance"; export * from "./invert"; export * from "./luminance"; export * from "./luminance-rgb"; From 927202b77deaa808b57ee189ff483839975804d0 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Tue, 29 Dec 2020 21:22:38 +0000 Subject: [PATCH 14/51] feat(color): add HSV/RGB gray axis checks --- packages/color/src/checks.ts | 22 ++++++++++++++++++++++ packages/color/src/index.ts | 1 + 2 files changed, 23 insertions(+) create mode 100644 packages/color/src/checks.ts diff --git a/packages/color/src/checks.ts b/packages/color/src/checks.ts new file mode 100644 index 0000000000..b844580cb8 --- /dev/null +++ b/packages/color/src/checks.ts @@ -0,0 +1,22 @@ +import { eqDelta } from "@thi.ng/math"; +import type { ReadonlyColor } from "./api"; + +const EPS = 1e-3; + +export const isGrayHsv = (x: ReadonlyColor, eps = EPS) => x[1] <= eps; + +export const isGrayRGB = (x: ReadonlyColor, eps = EPS) => + eqDelta(x[0], x[1], eps) && eqDelta(x[0], x[2], eps); + +export const isBlackHsv = (x: ReadonlyColor, eps = EPS) => x[2] <= eps; + +export const isBlackRGB = (x: ReadonlyColor, eps = EPS) => + x[0] <= eps && x[1] <= eps && x[2] <= eps; + +export const isWhiteHsv = (x: ReadonlyColor, eps = EPS) => + x[1] <= eps && x[2] >= 1 - eps; + +export const isWhiteRGB = (x: ReadonlyColor, eps = EPS) => { + eps = 1 - eps; + return x[0] >= eps && x[1] >= eps && x[2] >= eps; +}; diff --git a/packages/color/src/index.ts b/packages/color/src/index.ts index b598af3e0e..caf817caf0 100644 --- a/packages/color/src/index.ts +++ b/packages/color/src/index.ts @@ -42,6 +42,7 @@ export * from "./xyza"; export * from "./ycbcr"; export * from "./alpha"; +export * from "./checks"; export * from "./clamp"; export * from "./closest-hue"; export * from "./cosine-gradients"; From 971d5dcbf061b0c4c52ffa1aca24d7150dea81e9 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Tue, 29 Dec 2020 21:33:08 +0000 Subject: [PATCH 15/51] feat(color): add declarative range/theme iterators - add ColorRange related types - add ColorRange presets - add colorFromRange() - add colorsFromRange(), colorsFromTheme() iterators - add analogHSV(), analogRGB() functions --- packages/color/src/analog.ts | 82 +++++++++++++ packages/color/src/api.ts | 52 ++++++++ packages/color/src/color-range.ts | 190 ++++++++++++++++++++++++++++++ packages/color/src/index.ts | 2 + 4 files changed, 326 insertions(+) create mode 100644 packages/color/src/analog.ts create mode 100644 packages/color/src/color-range.ts diff --git a/packages/color/src/analog.ts b/packages/color/src/analog.ts new file mode 100644 index 0000000000..e0e24fdefd --- /dev/null +++ b/packages/color/src/analog.ts @@ -0,0 +1,82 @@ +import type { FnN } from "@thi.ng/api"; +import { clamp01 } from "@thi.ng/math"; +import { IRandom, SYSTEM } from "@thi.ng/random"; +import { setC4 } from "@thi.ng/vectors"; +import type { Color, ReadonlyColor } from "./api"; +import { ensureAlpha } from "./internal/ensure-alpha"; +import { ensureHue } from "./internal/ensure-hue"; + +const $analog = (x: number, delta: number, rnd: IRandom, post: FnN = clamp01) => + delta !== 0 ? post(x + rnd.norm(delta)) : x; + +const $alpha = (a: number, delta: number, rnd: IRandom) => + delta !== 0 + ? clamp01((a !== undefined ? a : 1) + rnd.norm(delta)) + : ensureAlpha(a); + +/** + * Similar to {@link analogRGB}. Returns an analog color based on given HSVA + * color,with each channel randomly varied by given delta amounts (and + * optionally given {@link @thi.ng/random#IRandom} PRNG). + * + * @remarks + * By default (unless `deltaS`, `deltaV`, `deltaA` are provided) only the hue of + * the color will be modulated. + * + * @param out + * @param src + * @param deltaH + * @param deltaS + * @param deltaV + * @param deltaA + * @param rnd + */ +export const analogHSV = ( + out: Color | null, + src: ReadonlyColor, + deltaH: number, + deltaS = 0, + deltaV = 0, + deltaA = 0, + rnd: IRandom = SYSTEM +) => + setC4( + out || src, + $analog(src[0], deltaH, rnd, ensureHue), + $analog(src[1], deltaS, rnd), + $analog(src[2], deltaV, rnd), + $alpha(src[3], deltaA, rnd) + ); + +/** + * Similar to {@link analogHSV}. Returns an analog color based on given RGBA + * color, with each channel randomly varied by given delta amounts (and + * optionally given {@link @thi.ng/random#IRandom} PRNG). + * + * @remarks + * By default the green and blue channel variance will be the same as `deltaR`. + * + * @param out + * @param src + * @param deltaR + * @param deltaG + * @param deltaB + * @param deltaA + * @param rnd + */ +export const analogRGB = ( + out: Color | null, + src: ReadonlyColor, + deltaR: number, + deltaG = deltaR, + deltaB = deltaR, + deltaA = 0, + rnd: IRandom = SYSTEM +) => + setC4( + out || src, + $analog(src[0], deltaR, rnd), + $analog(src[1], deltaG, rnd), + $analog(src[2], deltaB, rnd), + $alpha(src[3], deltaA, rnd) + ); diff --git a/packages/color/src/api.ts b/packages/color/src/api.ts index 6f437c59cc..0acd8b37ec 100644 --- a/packages/color/src/api.ts +++ b/packages/color/src/api.ts @@ -161,6 +161,19 @@ export type CSSColorName = | "yellow" | "yellowgreen"; +export type ColorRangePreset = + | "light" + | "dark" + | "bright" + | "weak" + | "neutral" + | "fresh" + | "soft" + | "hard" + | "warm" + | "cool" + | "intense"; + export type CosineGradientPreset = | "blue-cyan" | "blue-magenta-orange" @@ -204,3 +217,42 @@ export type ColorDistance = FnU2; export interface IColor { readonly mode: ColorMode; } + +export type Range = [number, number]; + +export interface ColorRange { + /** + * Hue ranges + */ + h?: Range[]; + /** + * Saturation ranges + */ + s?: Range[]; + /** + * Brightness ranges + */ + v?: Range[]; + /** + * Alpha ranges + */ + a?: Range[]; + /** + * Black point ranges + */ + b?: Range[]; + /** + * White point ranges + */ + w?: Range[]; +} + +export interface ColorThemePart { + range?: ColorRange | ColorRangePreset; + base?: ReadonlyColor | CSSColorName; + weight?: number; +} + +export type ColorThemePartString = + | `${ColorRangePreset} ${CSSColorName} ${number}` + | `${ColorRangePreset | CSSColorName} ${number}`; diff --git a/packages/color/src/color-range.ts b/packages/color/src/color-range.ts new file mode 100644 index 0000000000..6a0dc7f1c0 --- /dev/null +++ b/packages/color/src/color-range.ts @@ -0,0 +1,190 @@ +import { peek } from "@thi.ng/arrays"; +import { isString } from "@thi.ng/checks"; +import { illegalArgs } from "@thi.ng/errors"; +import { IRandom, SYSTEM, weightedRandom } from "@thi.ng/random"; +import { analogHSV } from "./analog"; +import type { + Color, + ColorRange, + ColorRangePreset, + ColorThemePart, + ColorThemePartString, + Range, + ReadonlyColor, +} from "./api"; +import { isBlackHsv, isGrayHsv, isWhiteHsv } from "./checks"; +import { ensureAlpha } from "./internal/ensure-alpha"; +import { ensureHue } from "./internal/ensure-hue"; +import { parseCss } from "./parse-css"; +import { rgbaHsva } from "./rgba-hsva"; + +export interface ColorRangeOpts { + num: number; + variance: number; + rnd: IRandom; +} + +export const RANGES: Record = { + light: { + s: [[0.3, 0.7]], + v: [[0.9, 1]], + b: [[0.15, 0.3]], + w: [[0.3, 1]], + }, + dark: { + s: [[0.7, 1]], + v: [[0.15, 0.4]], + b: [[0, 0.5]], + w: [[0.5, 0.75]], + }, + bright: { + s: [[0.8, 1]], + v: [[0.8, 1]], + }, + weak: { + s: [[0.15, 0.3]], + v: [[0.7, 1]], + b: [[0.2, 0.2]], + w: [[0.2, 1]], + }, + neutral: { + s: [[0.25, 0.35]], + v: [[0.3, 0.7]], + b: [[0.15, 0.15]], + w: [[0.9, 1]], + }, + fresh: { + s: [[0.4, 0.8]], + v: [[0.8, 1]], + b: [[0.05, 0.3]], + w: [[0.8, 1]], + }, + soft: { + s: [[0.2, 0.3]], + v: [[0.6, 0.9]], + b: [[0.05, 0.15]], + w: [[0.6, 0.9]], + }, + hard: { + s: [[0.9, 1]], + v: [[0.4, 1]], + }, + warm: { + s: [[0.6, 0.9]], + v: [[0.4, 0.9]], + b: [[0.2, 0.2]], + w: [[0.8, 1]], + }, + cool: { + s: [[0.05, 0.2]], + v: [[0.9, 1]], + b: [[0, 0.95]], + w: [[0.95, 1]], + }, + intense: { + s: [[0.9, 1]], + v: [ + [0.2, 0.35], + [0.8, 1], + ], + }, +}; + +const FULL: Range[] = [[0, 1]]; + +const DEFAULT_RANGE: ColorRange = { + h: FULL, + s: FULL, + v: FULL, + b: FULL, + w: FULL, + a: [[1, 1]], +}; + +const DEFAULT_OPTS: ColorRangeOpts = { + num: Infinity, + variance: 0.025, + rnd: SYSTEM, +}; + +const $rnd = (ranges: Range[], rnd: IRandom) => + rnd.minmax(...ranges[rnd.int() % ranges.length]); + +export const colorFromRange = ( + range: ColorRange, + base?: ReadonlyColor, + opts?: Partial +): Color => { + range = { ...DEFAULT_RANGE, ...range }; + const { variance, rnd } = { ...DEFAULT_OPTS, ...opts }; + let h: number, a: number; + if (base) { + h = base[0]; + a = ensureAlpha(base[3]); + if (isBlackHsv(base)) return [h, 0, $rnd(range.b!, rnd), a]; + if (isWhiteHsv(base)) return [h, 0, $rnd(range.w!, rnd), a]; + if (isGrayHsv(base)) + return [ + h, + 0, + $rnd(rnd.float(1) < 0.5 ? range.b! : range.w!, rnd), + a, + ]; + h = ensureHue(h + rnd.norm(variance)); + } else { + h = $rnd(range.h!, rnd); + a = $rnd(range.a!, rnd); + } + return [h, $rnd(range.s!, rnd), $rnd(range.v!, rnd), a]; +}; + +export function* colorsFromRange( + range: ColorRange, + base?: ReadonlyColor, + opts: Partial = {} +) { + let num = opts.num || Infinity; + while (--num >= 0) yield colorFromRange(range, base, opts); +} + +const asThemePart = (p: ColorThemePart | ColorThemePartString) => { + if (!isString(p)) return p; + const items = p.split(" "); + let weight = parseFloat(peek(items)); + if (isNaN(weight)) { + weight = 1; + } else { + items.pop(); + } + return ( + (items.length === 2 + ? { range: items[0], base: items[1], weight } + : items.length === 1 + ? RANGES[items[0]] + ? { range: items[0], weight } + : { base: items[0], weight } + : illegalArgs(`invalid theme part: "${p}"`)) + ); +}; + +export function* colorsFromTheme( + parts: (ColorThemePart | ColorThemePartString)[], + opts: Partial = {} +) { + opts = { ...DEFAULT_OPTS, ...opts }; + let { num, variance } = opts; + const theme = parts.map(asThemePart); + const choice = weightedRandom( + theme, + theme.map((x) => (x.weight != null ? x.weight : 1)) + ); + while (--num! >= 0) { + const spec = choice(); + const base = isString(spec.base) + ? rgbaHsva([], parseCss(spec.base)) + : spec.base; + const range = isString(spec.range) ? RANGES[spec.range] : spec.range; + if (range) yield colorFromRange(range, base, opts); + else if (base) yield analogHSV([], base, variance!); + } +} diff --git a/packages/color/src/index.ts b/packages/color/src/index.ts index caf817caf0..4af054276d 100644 --- a/packages/color/src/index.ts +++ b/packages/color/src/index.ts @@ -42,9 +42,11 @@ export * from "./xyza"; export * from "./ycbcr"; export * from "./alpha"; +export * from "./analog"; export * from "./checks"; export * from "./clamp"; export * from "./closest-hue"; +export * from "./color-range"; export * from "./cosine-gradients"; export * from "./distance"; export * from "./invert"; From 17d06a43e338aca5f2dc61110382363639daecc5 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Tue, 29 Dec 2020 21:34:21 +0000 Subject: [PATCH 16/51] feat(arrays): add bisect(), bisectWith() --- packages/arrays/src/bisect.ts | 26 ++++++++++++++++++++++++++ packages/arrays/src/index.ts | 1 + 2 files changed, 27 insertions(+) create mode 100644 packages/arrays/src/bisect.ts diff --git a/packages/arrays/src/bisect.ts b/packages/arrays/src/bisect.ts new file mode 100644 index 0000000000..4f7861b72f --- /dev/null +++ b/packages/arrays/src/bisect.ts @@ -0,0 +1,26 @@ +import type { Predicate } from "@thi.ng/api"; + +/** + * Splits array at given index (default: floor(src.length/2)) and returns tuple of [lhs, rhs]. + * + * @param src + * @param i + */ +export const bisect = (src: T[], i = src.length >>> 1) => [ + src.slice(0, i), + src.slice(i), +]; + +/** + * Similar to {@link bisect}, but first finds split index via provided + * predicate. The item for which the predicate first returns a truthy result, + * will be the first item in the RHS array. If the predicate never succeeds, the + * function returns `[src, []]`, i.e. all items will remain in the LHS. + * + * @param src + * @param pred + */ +export const bisectWith = (src: T[], pred: Predicate) => { + const i = src.findIndex(pred); + return i >= 0 ? bisect(src, i) : [src, []]; +}; diff --git a/packages/arrays/src/index.ts b/packages/arrays/src/index.ts index 2ea51d2581..a04f85dd16 100644 --- a/packages/arrays/src/index.ts +++ b/packages/arrays/src/index.ts @@ -1,5 +1,6 @@ export * from "./api"; export * from "./binary-search"; +export * from "./bisect"; export * from "./ends-with"; export * from "./ensure-array"; export * from "./ensure-iterable"; From b94f64c2c351cfed5ea9ade5e42ad0b7076ef9e9 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Tue, 29 Dec 2020 21:35:15 +0000 Subject: [PATCH 17/51] feat(arrays): add into(), sortByCachedKey() --- packages/arrays/src/index.ts | 2 ++ packages/arrays/src/into.ts | 15 ++++++++++++++ packages/arrays/src/sort-cached.ts | 32 ++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 packages/arrays/src/into.ts create mode 100644 packages/arrays/src/sort-cached.ts diff --git a/packages/arrays/src/index.ts b/packages/arrays/src/index.ts index a04f85dd16..ffa20f967b 100644 --- a/packages/arrays/src/index.ts +++ b/packages/arrays/src/index.ts @@ -8,11 +8,13 @@ export * from "./find"; export * from "./fill-range"; export * from "./fuzzy-match"; export * from "./is-sorted"; +export * from "./into"; export * from "./iterator"; export * from "./levenshtein"; export * from "./peek"; export * from "./quicksort"; export * from "./shuffle"; +export * from "./sort-cached"; export * from "./starts-with"; export * from "./swap"; export * from "./swizzle"; diff --git a/packages/arrays/src/into.ts b/packages/arrays/src/into.ts new file mode 100644 index 0000000000..78050cc8e2 --- /dev/null +++ b/packages/arrays/src/into.ts @@ -0,0 +1,15 @@ +/** + * Appends `max` items (default: all) from `src` iterable to `dest` array. + * Returns `dest`. + * + * @param dest + * @param src + * @param max + */ +export const into = (dest: T[], src: Iterable, max = Infinity) => { + for (let x of src) { + if (--max < 0) break; + dest.push(x); + } + return dest; +}; diff --git a/packages/arrays/src/sort-cached.ts b/packages/arrays/src/sort-cached.ts new file mode 100644 index 0000000000..f02a5e6045 --- /dev/null +++ b/packages/arrays/src/sort-cached.ts @@ -0,0 +1,32 @@ +import type { Comparator, Fn } from "@thi.ng/api"; +import { compare } from "@thi.ng/compare"; +import { quickSort } from "./quicksort"; +import { multiSwap } from "./swap"; + +/** + * Takes a `src` array and `key` function to obtain the sort key of each item. + * Applies `key` to pre-compute a new array of all sort keys and then uses + * {@link quickSort} to sort `src` array, based on the ordering of cached keys + * and the optionally given comparator. Returns `src`. + * + * @remarks + * This function is primarily intended for use cases where sort keys are derived + * from non-trivial computations and need to be cached, rather than be + * re-evaluated multiple times from within a comparator. + * + * @example + * ```ts + * // sort by length in descending order + * sortByCachedKey(["a","bbbb","ccc","dd"], (x) => x.length, (a, b) => b - a); + * // [ 'bbbb', 'ccc', 'dd', 'a' ] + * ``` + * + * @param src + * @param key + * @param cmp + */ +export const sortByCachedKey = ( + src: T[], + key: Fn, + cmp: Comparator = compare +) => (quickSort(src.map(key), cmp, multiSwap(src)), src); From 6761feb65e24545290547408b8ba62a3ba4baedc Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Tue, 29 Dec 2020 21:37:17 +0000 Subject: [PATCH 18/51] feat(color): add sortColors(), comparators --- packages/color/src/index.ts | 1 + packages/color/src/sort.ts | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 packages/color/src/sort.ts diff --git a/packages/color/src/index.ts b/packages/color/src/index.ts index 4af054276d..1cc932e831 100644 --- a/packages/color/src/index.ts +++ b/packages/color/src/index.ts @@ -53,4 +53,5 @@ export * from "./invert"; export * from "./luminance"; export * from "./luminance-rgb"; export * from "./mix"; +export * from "./sort"; export * from "./transform"; diff --git a/packages/color/src/sort.ts b/packages/color/src/sort.ts new file mode 100644 index 0000000000..42f5a48fd5 --- /dev/null +++ b/packages/color/src/sort.ts @@ -0,0 +1,19 @@ +import type { Fn } from "@thi.ng/api"; +import { sortByCachedKey } from "@thi.ng/arrays"; +import { compareNumAsc, compareNumDesc } from "@thi.ng/compare"; +import type { ReadonlyColor } from "./api"; +import { distHSV, distRGB } from "./distance"; + +export const selectChannel = (id: number) => (col: ReadonlyColor) => col[id]; + +export const proximityHSV = (target: ReadonlyColor) => (col: ReadonlyColor) => + distHSV(target, col); + +export const proximityRGB = (target: ReadonlyColor) => (col: ReadonlyColor) => + distRGB(target, col); + +export const sortColors = ( + cols: ReadonlyColor[], + key: Fn, + isReverse = false +) => sortByCachedKey(cols, key, isReverse ? compareNumDesc : compareNumAsc); From ea1acc8d89295df801d3ab91a3922fb336cdea84 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Wed, 30 Dec 2020 00:39:19 +0000 Subject: [PATCH 19/51] refactor(color): update color range iterators - update colorsFromTheme() & asThemePart() to precompute spec details - minor update colorFromRange() (opts) --- packages/color/src/color-range.ts | 64 ++++++++++++++++++------------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/packages/color/src/color-range.ts b/packages/color/src/color-range.ts index 6a0dc7f1c0..d8dc17ab8a 100644 --- a/packages/color/src/color-range.ts +++ b/packages/color/src/color-range.ts @@ -113,7 +113,7 @@ const $rnd = (ranges: Range[], rnd: IRandom) => export const colorFromRange = ( range: ColorRange, base?: ReadonlyColor, - opts?: Partial + opts?: Partial> ): Color => { range = { ...DEFAULT_RANGE, ...range }; const { variance, rnd } = { ...DEFAULT_OPTS, ...opts }; @@ -127,7 +127,7 @@ export const colorFromRange = ( return [ h, 0, - $rnd(rnd.float(1) < 0.5 ? range.b! : range.w!, rnd), + $rnd(rnd.float() < 0.5 ? range.b! : range.w!, rnd), a, ]; h = ensureHue(h + rnd.norm(variance)); @@ -143,48 +143,58 @@ export function* colorsFromRange( base?: ReadonlyColor, opts: Partial = {} ) { - let num = opts.num || Infinity; + let num = opts.num != undefined ? opts.num : Infinity; while (--num >= 0) yield colorFromRange(range, base, opts); } const asThemePart = (p: ColorThemePart | ColorThemePartString) => { - if (!isString(p)) return p; - const items = p.split(" "); - let weight = parseFloat(peek(items)); - if (isNaN(weight)) { - weight = 1; + let spec: ColorThemePart; + if (isString(p)) { + const items = p.split(" "); + let weight = parseFloat(peek(items)); + if (isNaN(weight)) { + weight = 1; + } else { + items.pop(); + } + spec = ( + (items.length === 2 + ? { range: items[0], base: items[1], weight } + : items.length === 1 + ? RANGES[items[0]] + ? { range: items[0], weight } + : { base: items[0], weight } + : illegalArgs(`invalid theme part: "${p}"`)) + ); } else { - items.pop(); + spec = p; + spec.weight == null && (spec.weight = 1); } - return ( - (items.length === 2 - ? { range: items[0], base: items[1], weight } - : items.length === 1 - ? RANGES[items[0]] - ? { range: items[0], weight } - : { base: items[0], weight } - : illegalArgs(`invalid theme part: "${p}"`)) - ); + isString(spec.range) && (spec.range = RANGES[spec.range]); + isString(spec.base) && (spec.base = rgbaHsva([], parseCss(spec.base))); + return spec; }; export function* colorsFromTheme( parts: (ColorThemePart | ColorThemePartString)[], opts: Partial = {} ) { - opts = { ...DEFAULT_OPTS, ...opts }; - let { num, variance } = opts; + let { num, variance } = { ...DEFAULT_OPTS, ...opts }; const theme = parts.map(asThemePart); const choice = weightedRandom( theme, - theme.map((x) => (x.weight != null ? x.weight : 1)) + theme.map((x) => x.weight!) ); while (--num! >= 0) { const spec = choice(); - const base = isString(spec.base) - ? rgbaHsva([], parseCss(spec.base)) - : spec.base; - const range = isString(spec.range) ? RANGES[spec.range] : spec.range; - if (range) yield colorFromRange(range, base, opts); - else if (base) yield analogHSV([], base, variance!); + if (spec.range) { + yield colorFromRange( + spec.range, + spec.base, + opts + ); + } else if (spec.base) { + yield analogHSV([], spec.base, variance!); + } } } From b9ed17b55f234f3f3349a9ac3674d32b5e6dfa2e Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Wed, 30 Dec 2020 00:42:43 +0000 Subject: [PATCH 20/51] docs(color): add assets/swatches, update readme --- assets/color/swatches-duo-bright.svg | 1 + assets/color/swatches-duo-cool.svg | 1 + assets/color/swatches-duo-dark.svg | 1 + assets/color/swatches-duo-fresh.svg | 1 + assets/color/swatches-duo-hard.svg | 1 + assets/color/swatches-duo-intense.svg | 1 + assets/color/swatches-duo-light.svg | 1 + assets/color/swatches-duo-neutral.svg | 1 + assets/color/swatches-duo-soft.svg | 1 + assets/color/swatches-duo-warm.svg | 1 + assets/color/swatches-duo-weak.svg | 1 + assets/color/swatches-green-bright.svg | 1 + assets/color/swatches-green-cool.svg | 1 + assets/color/swatches-green-dark.svg | 1 + assets/color/swatches-green-fresh.svg | 1 + assets/color/swatches-green-hard.svg | 1 + assets/color/swatches-green-intense.svg | 1 + assets/color/swatches-green-light.svg | 1 + assets/color/swatches-green-neutral.svg | 1 + assets/color/swatches-green-soft.svg | 1 + assets/color/swatches-green-warm.svg | 1 + assets/color/swatches-green-weak.svg | 1 + assets/color/swatches-range-bright.svg | 1 + assets/color/swatches-range-cool.svg | 1 + assets/color/swatches-range-dark.svg | 1 + assets/color/swatches-range-fresh.svg | 1 + assets/color/swatches-range-hard.svg | 1 + assets/color/swatches-range-intense.svg | 1 + assets/color/swatches-range-light.svg | 1 + assets/color/swatches-range-neutral.svg | 1 + assets/color/swatches-range-soft.svg | 1 + assets/color/swatches-range-warm.svg | 1 + assets/color/swatches-range-weak.svg | 1 + packages/color/README.md | 57 ++++++++++++++++++++++++- packages/color/tpl.readme.md | 52 ++++++++++++++++++++++ 35 files changed, 140 insertions(+), 2 deletions(-) create mode 100644 assets/color/swatches-duo-bright.svg create mode 100644 assets/color/swatches-duo-cool.svg create mode 100644 assets/color/swatches-duo-dark.svg create mode 100644 assets/color/swatches-duo-fresh.svg create mode 100644 assets/color/swatches-duo-hard.svg create mode 100644 assets/color/swatches-duo-intense.svg create mode 100644 assets/color/swatches-duo-light.svg create mode 100644 assets/color/swatches-duo-neutral.svg create mode 100644 assets/color/swatches-duo-soft.svg create mode 100644 assets/color/swatches-duo-warm.svg create mode 100644 assets/color/swatches-duo-weak.svg create mode 100644 assets/color/swatches-green-bright.svg create mode 100644 assets/color/swatches-green-cool.svg create mode 100644 assets/color/swatches-green-dark.svg create mode 100644 assets/color/swatches-green-fresh.svg create mode 100644 assets/color/swatches-green-hard.svg create mode 100644 assets/color/swatches-green-intense.svg create mode 100644 assets/color/swatches-green-light.svg create mode 100644 assets/color/swatches-green-neutral.svg create mode 100644 assets/color/swatches-green-soft.svg create mode 100644 assets/color/swatches-green-warm.svg create mode 100644 assets/color/swatches-green-weak.svg create mode 100644 assets/color/swatches-range-bright.svg create mode 100644 assets/color/swatches-range-cool.svg create mode 100644 assets/color/swatches-range-dark.svg create mode 100644 assets/color/swatches-range-fresh.svg create mode 100644 assets/color/swatches-range-hard.svg create mode 100644 assets/color/swatches-range-intense.svg create mode 100644 assets/color/swatches-range-light.svg create mode 100644 assets/color/swatches-range-neutral.svg create mode 100644 assets/color/swatches-range-soft.svg create mode 100644 assets/color/swatches-range-warm.svg create mode 100644 assets/color/swatches-range-weak.svg diff --git a/assets/color/swatches-duo-bright.svg b/assets/color/swatches-duo-bright.svg new file mode 100644 index 0000000000..95b7941eb6 --- /dev/null +++ b/assets/color/swatches-duo-bright.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-duo-cool.svg b/assets/color/swatches-duo-cool.svg new file mode 100644 index 0000000000..6ae5224e1d --- /dev/null +++ b/assets/color/swatches-duo-cool.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-duo-dark.svg b/assets/color/swatches-duo-dark.svg new file mode 100644 index 0000000000..93597469f5 --- /dev/null +++ b/assets/color/swatches-duo-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-duo-fresh.svg b/assets/color/swatches-duo-fresh.svg new file mode 100644 index 0000000000..5f4258d571 --- /dev/null +++ b/assets/color/swatches-duo-fresh.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-duo-hard.svg b/assets/color/swatches-duo-hard.svg new file mode 100644 index 0000000000..5349176d8b --- /dev/null +++ b/assets/color/swatches-duo-hard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-duo-intense.svg b/assets/color/swatches-duo-intense.svg new file mode 100644 index 0000000000..bad59f11e4 --- /dev/null +++ b/assets/color/swatches-duo-intense.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-duo-light.svg b/assets/color/swatches-duo-light.svg new file mode 100644 index 0000000000..68afcebdc2 --- /dev/null +++ b/assets/color/swatches-duo-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-duo-neutral.svg b/assets/color/swatches-duo-neutral.svg new file mode 100644 index 0000000000..49823eea30 --- /dev/null +++ b/assets/color/swatches-duo-neutral.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-duo-soft.svg b/assets/color/swatches-duo-soft.svg new file mode 100644 index 0000000000..c9af2f227d --- /dev/null +++ b/assets/color/swatches-duo-soft.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-duo-warm.svg b/assets/color/swatches-duo-warm.svg new file mode 100644 index 0000000000..e2c3beadc1 --- /dev/null +++ b/assets/color/swatches-duo-warm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-duo-weak.svg b/assets/color/swatches-duo-weak.svg new file mode 100644 index 0000000000..b362ede965 --- /dev/null +++ b/assets/color/swatches-duo-weak.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-green-bright.svg b/assets/color/swatches-green-bright.svg new file mode 100644 index 0000000000..51ba0c13fd --- /dev/null +++ b/assets/color/swatches-green-bright.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-green-cool.svg b/assets/color/swatches-green-cool.svg new file mode 100644 index 0000000000..9f9a4d2d47 --- /dev/null +++ b/assets/color/swatches-green-cool.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-green-dark.svg b/assets/color/swatches-green-dark.svg new file mode 100644 index 0000000000..f85860c8c2 --- /dev/null +++ b/assets/color/swatches-green-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-green-fresh.svg b/assets/color/swatches-green-fresh.svg new file mode 100644 index 0000000000..f03297c295 --- /dev/null +++ b/assets/color/swatches-green-fresh.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-green-hard.svg b/assets/color/swatches-green-hard.svg new file mode 100644 index 0000000000..0f4d5c6edc --- /dev/null +++ b/assets/color/swatches-green-hard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-green-intense.svg b/assets/color/swatches-green-intense.svg new file mode 100644 index 0000000000..c2245a98b2 --- /dev/null +++ b/assets/color/swatches-green-intense.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-green-light.svg b/assets/color/swatches-green-light.svg new file mode 100644 index 0000000000..16b37436c3 --- /dev/null +++ b/assets/color/swatches-green-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-green-neutral.svg b/assets/color/swatches-green-neutral.svg new file mode 100644 index 0000000000..18f1c9d374 --- /dev/null +++ b/assets/color/swatches-green-neutral.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-green-soft.svg b/assets/color/swatches-green-soft.svg new file mode 100644 index 0000000000..a6c63fa449 --- /dev/null +++ b/assets/color/swatches-green-soft.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-green-warm.svg b/assets/color/swatches-green-warm.svg new file mode 100644 index 0000000000..3eed818084 --- /dev/null +++ b/assets/color/swatches-green-warm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-green-weak.svg b/assets/color/swatches-green-weak.svg new file mode 100644 index 0000000000..afdbecf083 --- /dev/null +++ b/assets/color/swatches-green-weak.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-range-bright.svg b/assets/color/swatches-range-bright.svg new file mode 100644 index 0000000000..b9ad885d8b --- /dev/null +++ b/assets/color/swatches-range-bright.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-range-cool.svg b/assets/color/swatches-range-cool.svg new file mode 100644 index 0000000000..6daa81828a --- /dev/null +++ b/assets/color/swatches-range-cool.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-range-dark.svg b/assets/color/swatches-range-dark.svg new file mode 100644 index 0000000000..027c891b59 --- /dev/null +++ b/assets/color/swatches-range-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-range-fresh.svg b/assets/color/swatches-range-fresh.svg new file mode 100644 index 0000000000..4953ef9ba5 --- /dev/null +++ b/assets/color/swatches-range-fresh.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-range-hard.svg b/assets/color/swatches-range-hard.svg new file mode 100644 index 0000000000..c620dab789 --- /dev/null +++ b/assets/color/swatches-range-hard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-range-intense.svg b/assets/color/swatches-range-intense.svg new file mode 100644 index 0000000000..89f3aad1b3 --- /dev/null +++ b/assets/color/swatches-range-intense.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-range-light.svg b/assets/color/swatches-range-light.svg new file mode 100644 index 0000000000..6593ca7542 --- /dev/null +++ b/assets/color/swatches-range-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-range-neutral.svg b/assets/color/swatches-range-neutral.svg new file mode 100644 index 0000000000..0bf115f90f --- /dev/null +++ b/assets/color/swatches-range-neutral.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-range-soft.svg b/assets/color/swatches-range-soft.svg new file mode 100644 index 0000000000..526ad59fce --- /dev/null +++ b/assets/color/swatches-range-soft.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-range-warm.svg b/assets/color/swatches-range-warm.svg new file mode 100644 index 0000000000..0497aa93cf --- /dev/null +++ b/assets/color/swatches-range-warm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/color/swatches-range-weak.svg b/assets/color/swatches-range-weak.svg new file mode 100644 index 0000000000..3a24cd3ee0 --- /dev/null +++ b/assets/color/swatches-range-weak.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/color/README.md b/packages/color/README.md index a8811f80dc..63da36cb3b 100644 --- a/packages/color/README.md +++ b/packages/color/README.md @@ -14,6 +14,7 @@ For the Clojure version, please visit: [thi.ng/color-clj](https://thi.ng/color-c - [About](#about) - [Color spaces / modes](#color-spaces---modes) - [Class wrappers](#class-wrappers) + - [Color theme generation](#color-theme-generation) - [RGBA transformations](#rgba-transformations) - [RGBA Porter-Duff compositing](#rgba-porter-duff-compositing) - [Cosine gradients](#cosine-gradients) @@ -29,7 +30,7 @@ For the Clojure version, please visit: [thi.ng/color-clj](https://thi.ng/color-c ## About -Array-based color ops, conversions, multi-color gradients, presets. +Array-based color types, conversions, transformations, declarative theme generation, multi-color gradients, presets. ### Color spaces / modes @@ -64,6 +65,58 @@ aliases (in addition to array indexing) and are fully compatible with all functions (and act as syntax sugar for generic conversion functions). Wrapper factory functions are provided for convenience. +### Color theme generation + +```ts +// infinite iterator of cool reds, w/ 10% hue variance +colorsFromRange(RANGES.cool, [0, 0.8, 1], { num: Infinity, variance: 0.1 }) + +// generate colors based on given weighted textual description(s) +[...colorsFromTheme(["warm goldenrod 1.0", "cool springgreen 0.1"], { num: 100, variance: 0.05 })] +``` + +| ID | 100 colors drawn from color range preset only, sorted by hue | +|-----------|--------------------------------------------------------------------------------------------------------------------| +| `bright` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-range-bright.svg) | +| `cool` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-range-cool.svg) | +| `dark` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-range-dark.svg) | +| `fresh` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-range-fresh.svg) | +| `hard` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-range-hard.svg) | +| `intense` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-range-intense.svg) | +| `light` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-range-light.svg) | +| `neutral` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-range-neutral.svg) | +| `soft` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-range-soft.svg) | +| `warm` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-range-warm.svg) | +| `weak` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-range-weak.svg) | + +| ID | 100 colors, single base color w/ color range preset, sorted by brightness | +|-----------|--------------------------------------------------------------------------------------------------------------------| +| `bright` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-bright.svg) | +| `cool` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-cool.svg) | +| `dark` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-dark.svg) | +| `fresh` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-fresh.svg) | +| `hard` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-hard.svg) | +| `intense` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-intense.svg) | +| `light` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-light.svg) | +| `neutral` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-neutral.svg) | +| `soft` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-soft.svg) | +| `warm` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-warm.svg) | +| `weak` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-weak.svg) | + +| ID | 100 colors, two base colors w/ same color range preset, sorted by brightness | +|-----------|--------------------------------------------------------------------------------------------------------------------| +| `bright` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-bright.svg) | +| `cool` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-cool.svg) | +| `dark` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-dark.svg) | +| `fresh` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-fresh.svg) | +| `hard` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-hard.svg) | +| `intense` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-intense.svg) | +| `light` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-light.svg) | +| `neutral` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-neutral.svg) | +| `soft` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-soft.svg) | +| `warm` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-warm.svg) | +| `weak` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-weak.svg) | + ### RGBA transformations RGBA [color matrix @@ -194,7 +247,7 @@ yarn add @thi.ng/color ``` -Package sizes (gzipped, pre-treeshake): ESM: 7.08 KB / CJS: 7.44 KB / UMD: 7.00 KB +Package sizes (gzipped, pre-treeshake): ESM: 8.40 KB / CJS: 8.82 KB / UMD: 8.29 KB ## Dependencies diff --git a/packages/color/tpl.readme.md b/packages/color/tpl.readme.md index fde9472eb1..5175f66549 100644 --- a/packages/color/tpl.readme.md +++ b/packages/color/tpl.readme.md @@ -48,6 +48,58 @@ aliases (in addition to array indexing) and are fully compatible with all functions (and act as syntax sugar for generic conversion functions). Wrapper factory functions are provided for convenience. +### Color theme generation + +```ts +// infinite iterator of cool reds, w/ 10% hue variance +colorsFromRange(RANGES.cool, [0, 0.8, 1], { num: Infinity, variance: 0.1 }) + +// generate colors based on given weighted textual description(s) +[...colorsFromTheme(["warm goldenrod 1.0", "cool springgreen 0.1"], { num: 100, variance: 0.05 })] +``` + +| ID | 100 colors drawn from color range preset only, sorted by hue | +|-----------|--------------------------------------------------------------------------------------------------------------------| +| `bright` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-range-bright.svg) | +| `cool` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-range-cool.svg) | +| `dark` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-range-dark.svg) | +| `fresh` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-range-fresh.svg) | +| `hard` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-range-hard.svg) | +| `intense` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-range-intense.svg) | +| `light` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-range-light.svg) | +| `neutral` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-range-neutral.svg) | +| `soft` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-range-soft.svg) | +| `warm` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-range-warm.svg) | +| `weak` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-range-weak.svg) | + +| ID | 100 colors, single base color w/ color range preset, sorted by brightness | +|-----------|--------------------------------------------------------------------------------------------------------------------| +| `bright` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-bright.svg) | +| `cool` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-cool.svg) | +| `dark` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-dark.svg) | +| `fresh` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-fresh.svg) | +| `hard` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-hard.svg) | +| `intense` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-intense.svg) | +| `light` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-light.svg) | +| `neutral` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-neutral.svg) | +| `soft` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-soft.svg) | +| `warm` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-warm.svg) | +| `weak` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-weak.svg) | + +| ID | 100 colors, two base colors w/ same color range preset, sorted by brightness | +|-----------|--------------------------------------------------------------------------------------------------------------------| +| `bright` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-bright.svg) | +| `cool` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-cool.svg) | +| `dark` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-dark.svg) | +| `fresh` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-fresh.svg) | +| `hard` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-hard.svg) | +| `intense` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-intense.svg) | +| `light` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-light.svg) | +| `neutral` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-neutral.svg) | +| `soft` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-soft.svg) | +| `warm` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-warm.svg) | +| `weak` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-weak.svg) | + ### RGBA transformations RGBA [color matrix From 0f9c9e0cc9f699f4df71f2b2edfc3473a1940ed8 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Wed, 30 Dec 2020 00:43:02 +0000 Subject: [PATCH 21/51] build(color): update deps --- packages/color/package.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/color/package.json b/packages/color/package.json index 2c8beac3c0..657a3d51ff 100644 --- a/packages/color/package.json +++ b/packages/color/package.json @@ -1,7 +1,7 @@ { "name": "@thi.ng/color", "version": "2.0.0", - "description": "Array-based color ops, conversions, multi-color gradients, presets", + "description": "Array-based color types, conversions, transformations, declarative theme generation, multi-color gradients, presets", "module": "./index.js", "main": "./lib/index.js", "umd:main": "./lib/index.umd.js", @@ -50,11 +50,14 @@ }, "dependencies": { "@thi.ng/api": "^6.13.5", + "@thi.ng/arrays": "^0.8.5", "@thi.ng/checks": "^2.7.12", + "@thi.ng/compare": "^1.3.21", "@thi.ng/compose": "^1.4.22", "@thi.ng/defmulti": "^1.3.3", "@thi.ng/errors": "^1.2.25", "@thi.ng/math": "^3.0.0", + "@thi.ng/random": "^2.1.3", "@thi.ng/strings": "^1.11.3", "@thi.ng/transducers": "^7.5.3", "@thi.ng/vectors": "^4.8.3" @@ -74,6 +77,7 @@ "conversion", "cosine", "css", + "declarative", "filter", "gradient", "hcy", @@ -84,6 +88,8 @@ "porter-duff", "rgb", "srgb", + "swatches", + "theme", "typescript", "xyz", "ycbcr" From 5ecc5285fdea2d35535e5469d4d81a2b4d6878e9 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Wed, 30 Dec 2020 02:00:42 +0000 Subject: [PATCH 22/51] feat(color): add color swatch hiccup helpers --- packages/color/src/index.ts | 1 + packages/color/src/swatches.ts | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 packages/color/src/swatches.ts diff --git a/packages/color/src/index.ts b/packages/color/src/index.ts index 1cc932e831..f08948cf1c 100644 --- a/packages/color/src/index.ts +++ b/packages/color/src/index.ts @@ -54,4 +54,5 @@ export * from "./luminance"; export * from "./luminance-rgb"; export * from "./mix"; export * from "./sort"; +export * from "./swatches"; export * from "./transform"; diff --git a/packages/color/src/swatches.ts b/packages/color/src/swatches.ts new file mode 100644 index 0000000000..0690519282 --- /dev/null +++ b/packages/color/src/swatches.ts @@ -0,0 +1,22 @@ +import type { Fn2, IObjectOf } from "@thi.ng/api"; +import type { ReadonlyColor } from "./api"; + +export const swatches = ( + cols: ReadonlyColor[], + fn: Fn2, + attribs: IObjectOf = {} +) => ["g", attribs, ...cols.map(fn)]; + +export const swatchesH = ( + cols: ReadonlyColor[], + w = 5, + h = 50, + attribs?: IObjectOf +) => swatches(cols, (fill, i) => ["rect", { fill }, [i * w, 0], w, h], attribs); + +export const swatchesV = ( + cols: ReadonlyColor[], + w = 50, + h = 5, + attribs: IObjectOf = {} +) => swatches(cols, (fill, i) => ["rect", { fill }, [0, i * h], w, h], attribs); From 651590c2f3c4365e06f4bab85d2c9f9b99d3c4c1 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Wed, 30 Dec 2020 02:01:24 +0000 Subject: [PATCH 23/51] fix(color): fix cosineGradient() return type --- packages/color/src/cosine-gradients.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/color/src/cosine-gradients.ts b/packages/color/src/cosine-gradients.ts index b2ea0fff1a..c3d158336c 100644 --- a/packages/color/src/cosine-gradients.ts +++ b/packages/color/src/cosine-gradients.ts @@ -167,7 +167,7 @@ export const cosineColor = (spec: CosGradientSpec, t: number): Color => ); export const cosineGradient = (n: number, spec: CosGradientSpec) => - transduce(map(partial(cosineColor, spec)), push(), normRange(n - 1)); + transduce(map(partial(cosineColor, spec)), push(), normRange(n - 1)); /** * Returns coefficients to produce a cosine gradient between the two From 7dde29d40ac78dc56d56343cd22896d45ef4f061 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Wed, 30 Dec 2020 02:02:33 +0000 Subject: [PATCH 24/51] docs(color): update readme, swatch gen tool --- assets/color/swatches-ex01.svg | 1 + packages/color/README.md | 41 +++++++++++++++++++++++++--- packages/color/package.json | 3 ++- packages/color/tools/index.ts | 49 +++++++++++++++++++++++++++------- packages/color/tpl.readme.md | 36 +++++++++++++++++++++++-- 5 files changed, 115 insertions(+), 15 deletions(-) create mode 100644 assets/color/swatches-ex01.svg diff --git a/assets/color/swatches-ex01.svg b/assets/color/swatches-ex01.svg new file mode 100644 index 0000000000..95231896a8 --- /dev/null +++ b/assets/color/swatches-ex01.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/color/README.md b/packages/color/README.md index 63da36cb3b..94969a5c74 100644 --- a/packages/color/README.md +++ b/packages/color/README.md @@ -103,8 +103,8 @@ colorsFromRange(RANGES.cool, [0, 0.8, 1], { num: Infinity, variance: 0.1 }) | `warm` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-warm.svg) | | `weak` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-weak.svg) | -| ID | 100 colors, two base colors w/ same color range preset, sorted by brightness | -|-----------|--------------------------------------------------------------------------------------------------------------------| +| ID | 100 colors, 2 base colors w/ color range preset, sorted by brightness | +|-----------|---------------------------------------------------- -------------------------------------------------------------| | `bright` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-bright.svg) | | `cool` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-cool.svg) | | `dark` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-dark.svg) | @@ -117,6 +117,38 @@ colorsFromRange(RANGES.cool, [0, 0.8, 1], { num: Infinity, variance: 0.1 }) | `warm` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-warm.svg) | | `weak` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-weak.svg) | +Full example: + +```ts +import { colorsFromTheme, hsva, swatchesH } from "@thi.ng/color"; +import { serialize } from "@thi.ng/hiccup"; +import { svg } from "@thi.ng/hiccup-svg"; +import { writeFileSync } from "fs"; + +// color theme definition using: +// color range preset names, CSS colors and weights +const theme = [ + "fresh hotpink 0.1", + "cool goldenrod 1", + "light springgreen 0.1", +]; + +// generate 200 HSV colors based on above description +const colors = [...colorsFromTheme(theme, { num: 200, variance: 0.05 })]; + +// create SVG doc of color swatches (hiccup format) +// (convert colors to RGB for smaller file size) +const doc = svg( + { width: 1000, height: 50, convert: true }, + swatchesH(colors.map((x) => hsvaRgba([], x)), 5, 50) +); + +// serialize to SVG file +writeFileSync("export/swatches-ex01.svg", serialize(doc)); +``` + +![example result color swatches](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-ex01.svg) + ### RGBA transformations RGBA [color matrix @@ -247,16 +279,19 @@ yarn add @thi.ng/color ``` -Package sizes (gzipped, pre-treeshake): ESM: 8.40 KB / CJS: 8.82 KB / UMD: 8.29 KB +Package sizes (gzipped, pre-treeshake): ESM: 8.40 KB / CJS: 8.83 KB / UMD: 8.29 KB ## Dependencies - [@thi.ng/api](https://github.com/thi-ng/umbrella/tree/develop/packages/api) +- [@thi.ng/arrays](https://github.com/thi-ng/umbrella/tree/develop/packages/arrays) - [@thi.ng/checks](https://github.com/thi-ng/umbrella/tree/develop/packages/checks) +- [@thi.ng/compare](https://github.com/thi-ng/umbrella/tree/develop/packages/compare) - [@thi.ng/compose](https://github.com/thi-ng/umbrella/tree/develop/packages/compose) - [@thi.ng/defmulti](https://github.com/thi-ng/umbrella/tree/develop/packages/defmulti) - [@thi.ng/errors](https://github.com/thi-ng/umbrella/tree/develop/packages/errors) - [@thi.ng/math](https://github.com/thi-ng/umbrella/tree/develop/packages/math) +- [@thi.ng/random](https://github.com/thi-ng/umbrella/tree/develop/packages/random) - [@thi.ng/strings](https://github.com/thi-ng/umbrella/tree/develop/packages/strings) - [@thi.ng/transducers](https://github.com/thi-ng/umbrella/tree/develop/packages/transducers) - [@thi.ng/vectors](https://github.com/thi-ng/umbrella/tree/develop/packages/vectors) diff --git a/packages/color/package.json b/packages/color/package.json index 657a3d51ff..168bb30f92 100644 --- a/packages/color/package.json +++ b/packages/color/package.json @@ -35,7 +35,8 @@ "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "pub": "yarn build:release && yarn publish --access public" + "pub": "yarn build:release && yarn publish --access public", + "tool:swatches": "ts-node -P tools/tsconfig.json tools/index.ts" }, "devDependencies": { "@istanbuljs/nyc-config-typescript": "^1.0.1", diff --git a/packages/color/tools/index.ts b/packages/color/tools/index.ts index 981d54aa6d..753ce0a144 100644 --- a/packages/color/tools/index.ts +++ b/packages/color/tools/index.ts @@ -1,20 +1,51 @@ -import { asSvg, rect, svgDoc } from "@thi.ng/geom"; +import { serialize } from "@thi.ng/hiccup"; +import { svg } from "@thi.ng/hiccup-svg"; import { writeFileSync } from "fs"; -import { cosineGradient, GRADIENTS } from "../src"; +import { + colorsFromTheme, + ColorThemePartString, + cosineGradient, + CosineGradientPreset, + GRADIENTS, + hsvaRgba, + swatchesH, +} from "../src"; Object.keys(GRADIENTS).forEach((id) => { const fname = `export/gradient-${id}.svg`; console.log(fname); writeFileSync( fname, - asSvg( - svgDoc( - {}, - ...cosineGradient( - 100, - GRADIENTS[id] - ).map((col, i) => rect([i * 5, 0], [5, 50], { fill: col })) + serialize( + svg( + { width: 500, height: 50, convert: true }, + swatchesH( + cosineGradient(100, GRADIENTS[id]), + 5, + 50 + ) ) ) ); }); + +//////////////////////////////////////////////////////////// + +const theme = [ + "fresh hotpink 0.1", + "cool goldenrod 1", + "light springgreen 0.1", +]; + +const colors = [...colorsFromTheme(theme, { num: 200, variance: 0.05 })]; + +const doc = svg( + { width: 1000, height: 50, convert: true }, + swatchesH( + colors.map((x) => hsvaRgba([], x)), + 5, + 50 + ) +); + +writeFileSync("export/swatches-ex01.svg", serialize(doc)); diff --git a/packages/color/tpl.readme.md b/packages/color/tpl.readme.md index 5175f66549..f0e8a76bc6 100644 --- a/packages/color/tpl.readme.md +++ b/packages/color/tpl.readme.md @@ -86,8 +86,8 @@ colorsFromRange(RANGES.cool, [0, 0.8, 1], { num: Infinity, variance: 0.1 }) | `warm` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-warm.svg) | | `weak` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-weak.svg) | -| ID | 100 colors, two base colors w/ same color range preset, sorted by brightness | -|-----------|--------------------------------------------------------------------------------------------------------------------| +| ID | 100 colors, 2 base colors w/ color range preset, sorted by brightness | +|-----------|---------------------------------------------------- -------------------------------------------------------------| | `bright` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-bright.svg) | | `cool` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-cool.svg) | | `dark` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-dark.svg) | @@ -100,6 +100,38 @@ colorsFromRange(RANGES.cool, [0, 0.8, 1], { num: Infinity, variance: 0.1 }) | `warm` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-warm.svg) | | `weak` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-weak.svg) | +Full example: + +```ts +import { colorsFromTheme, hsva, swatchesH } from "@thi.ng/color"; +import { serialize } from "@thi.ng/hiccup"; +import { svg } from "@thi.ng/hiccup-svg"; +import { writeFileSync } from "fs"; + +// color theme definition using: +// color range preset names, CSS colors and weights +const theme = [ + "fresh hotpink 0.1", + "cool goldenrod 1", + "light springgreen 0.1", +]; + +// generate 200 HSV colors based on above description +const colors = [...colorsFromTheme(theme, { num: 200, variance: 0.05 })]; + +// create SVG doc of color swatches (hiccup format) +// (convert colors to RGB for smaller file size) +const doc = svg( + { width: 1000, height: 50, convert: true }, + swatchesH(colors.map((x) => hsvaRgba([], x)), 5, 50) +); + +// serialize to SVG file +writeFileSync("export/swatches-ex01.svg", serialize(doc)); +``` + +![example result color swatches](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-ex01.svg) + ### RGBA transformations RGBA [color matrix From cd67a09c61c93bc7a84ac63eab48f85ab6c52d2a Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Wed, 30 Dec 2020 02:04:06 +0000 Subject: [PATCH 25/51] feat(hiccup-svg): update svg(), add convert attrib - update attrib handling and call convertTree() if requested - update docstrings --- packages/hiccup-svg/src/svg.ts | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/packages/hiccup-svg/src/svg.ts b/packages/hiccup-svg/src/svg.ts index c5e74c0896..b48820f37b 100644 --- a/packages/hiccup-svg/src/svg.ts +++ b/packages/hiccup-svg/src/svg.ts @@ -1,21 +1,31 @@ import { XML_SVG, XML_XLINK } from "@thi.ng/prefixes"; +import { convertTree } from "./convert"; import { fattribs } from "./format"; /** * Defines an root element with default XML namespaces. By default - * currently still sets SVG version to 1.1 to support Safari and other - * legacy tooling. + * currently still sets SVG version to 1.1 to support Safari and other legacy + * tooling. + * + * @remarks + * If the `convert: true` attrib is given, all body elements will be + * automatically converted using {@link convertTree}. The `convert` attrib is + * NOT going to be serialized in the final output. * * @param attribs - attributes object * @param body - shape primitives */ -export const svg = (attribs: any, ...body: any[]): any[] => [ - "svg", - fattribs({ +export const svg = (attribs: any, ...body: any[]): any[] => { + attribs = fattribs({ version: "1.1", xmlns: XML_SVG, "xmlns:xlink": XML_XLINK, ...attribs, - }), - ...body, -]; + }); + if (attribs.convert) { + delete attribs.convert; + return ["svg", attribs, ...body.map(convertTree)]; + } else { + return ["svg", attribs, ...body]; + } +}; From afc86da9a3becdb9c37b1702d46f91ace6a58771 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Wed, 30 Dec 2020 02:05:31 +0000 Subject: [PATCH 26/51] docs(hiccup-svg): update readme, add example --- packages/hiccup-svg/README.md | 24 +++++++++++++++++++++++- packages/hiccup-svg/tpl.readme.md | 22 ++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/packages/hiccup-svg/README.md b/packages/hiccup-svg/README.md index 7ffa88ad7f..42face6441 100644 --- a/packages/hiccup-svg/README.md +++ b/packages/hiccup-svg/README.md @@ -61,6 +61,28 @@ returns a new tree. The original remains untouched, as will any unrecognized tree / shape nodes (those will be transferred as-is to the result tree). See example below. +Since v3.7.0 tree conversion can be implicitly triggered by providing a +`convert: true` attribute to the root `svg()` element. + +```ts +// create SVG root element and convert body +svg( + { width: 100, height: 100, convert: true}, + ["rect", { fill: [1, 0, 0] }, [0,0], 100, 100] +) +// [ +// 'svg', +// { +// version: '1.1', +// xmlns: 'http://www.w3.org/2000/svg', +// 'xmlns:xlink': 'http://www.w3.org/1999/xlink', +// width: 100, +// height: 100 +// }, +// [ 'rect', { fill: '#ff0000', x: 0, y: 0, width: 100, height: 100 } ] +// ] +``` + ### Automatic attribute conversions #### Colors @@ -131,7 +153,7 @@ yarn add @thi.ng/hiccup-svg ``` -Package sizes (gzipped, pre-treeshake): ESM: 2.49 KB / CJS: 2.61 KB / UMD: 2.53 KB +Package sizes (gzipped, pre-treeshake): ESM: 2.51 KB / CJS: 2.63 KB / UMD: 2.56 KB ## Dependencies diff --git a/packages/hiccup-svg/tpl.readme.md b/packages/hiccup-svg/tpl.readme.md index db56cf4b61..f9cf5a8a51 100644 --- a/packages/hiccup-svg/tpl.readme.md +++ b/packages/hiccup-svg/tpl.readme.md @@ -47,6 +47,28 @@ returns a new tree. The original remains untouched, as will any unrecognized tree / shape nodes (those will be transferred as-is to the result tree). See example below. +Since v3.7.0 tree conversion can be implicitly triggered by providing a +`convert: true` attribute to the root `svg()` element. + +```ts +// create SVG root element and convert body +svg( + { width: 100, height: 100, convert: true}, + ["rect", { fill: [1, 0, 0] }, [0,0], 100, 100] +) +// [ +// 'svg', +// { +// version: '1.1', +// xmlns: 'http://www.w3.org/2000/svg', +// 'xmlns:xlink': 'http://www.w3.org/1999/xlink', +// width: 100, +// height: 100 +// }, +// [ 'rect', { fill: '#ff0000', x: 0, y: 0, width: 100, height: 100 } ] +// ] +``` + ### Automatic attribute conversions #### Colors From a98c04c2bc2bdbebf2bb9d6ecf4031f3ab724f3e Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Wed, 30 Dec 2020 02:10:23 +0000 Subject: [PATCH 27/51] docs(color): fix table & swatches --- assets/color/swatches-ex01.svg | 2 +- packages/color/README.md | 2 +- packages/color/tpl.readme.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/color/swatches-ex01.svg b/assets/color/swatches-ex01.svg index 95231896a8..34806a10d1 100644 --- a/assets/color/swatches-ex01.svg +++ b/assets/color/swatches-ex01.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/color/README.md b/packages/color/README.md index 94969a5c74..7ead4162ad 100644 --- a/packages/color/README.md +++ b/packages/color/README.md @@ -104,7 +104,7 @@ colorsFromRange(RANGES.cool, [0, 0.8, 1], { num: Infinity, variance: 0.1 }) | `weak` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-weak.svg) | | ID | 100 colors, 2 base colors w/ color range preset, sorted by brightness | -|-----------|---------------------------------------------------- -------------------------------------------------------------| +|-----------|------------------------------------------------------------------------------------------------------------------| | `bright` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-bright.svg) | | `cool` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-cool.svg) | | `dark` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-dark.svg) | diff --git a/packages/color/tpl.readme.md b/packages/color/tpl.readme.md index f0e8a76bc6..579c8921cd 100644 --- a/packages/color/tpl.readme.md +++ b/packages/color/tpl.readme.md @@ -87,7 +87,7 @@ colorsFromRange(RANGES.cool, [0, 0.8, 1], { num: Infinity, variance: 0.1 }) | `weak` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-weak.svg) | | ID | 100 colors, 2 base colors w/ color range preset, sorted by brightness | -|-----------|---------------------------------------------------- -------------------------------------------------------------| +|-----------|------------------------------------------------------------------------------------------------------------------| | `bright` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-bright.svg) | | `cool` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-cool.svg) | | `dark` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-duo-dark.svg) | From 64e8f6e4e83c26c73e23a4831483bd328b78bc49 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Wed, 30 Dec 2020 10:31:13 +0000 Subject: [PATCH 28/51] feat(arrays): update sortByCachedKey(), add tests - add support for pre-cached key array instead of key fn --- packages/arrays/src/sort-cached.ts | 29 +++++++++++++++------- packages/arrays/test/sort-cached.ts | 38 +++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 9 deletions(-) create mode 100644 packages/arrays/test/sort-cached.ts diff --git a/packages/arrays/src/sort-cached.ts b/packages/arrays/src/sort-cached.ts index f02a5e6045..426132113f 100644 --- a/packages/arrays/src/sort-cached.ts +++ b/packages/arrays/src/sort-cached.ts @@ -1,17 +1,20 @@ -import type { Comparator, Fn } from "@thi.ng/api"; +import { assert, Comparator, Fn } from "@thi.ng/api"; +import { isFunction } from "@thi.ng/checks"; import { compare } from "@thi.ng/compare"; import { quickSort } from "./quicksort"; import { multiSwap } from "./swap"; /** - * Takes a `src` array and `key` function to obtain the sort key of each item. - * Applies `key` to pre-compute a new array of all sort keys and then uses - * {@link quickSort} to sort `src` array, based on the ordering of cached keys - * and the optionally given comparator. Returns `src`. + * Takes a `src` array and `key` array of function to provide the sort key of + * each item. If a function, it will be first applied to pre-compute a new array + * of all sort keys. Then uses {@link quickSort} to sort `src` array, based on + * the ordering of cached keys and the optionally given comparator. Returns + * `src`. * * @remarks - * This function is primarily intended for use cases where sort keys are derived - * from non-trivial computations and need to be cached, rather than be + * This function is primarily intended for use cases where an array needs to be + * sorted based on the item order of another array, or where sort keys are + * derived from non-trivial computations and need to be cached, rather than be * re-evaluated multiple times from within a comparator. * * @example @@ -19,6 +22,9 @@ import { multiSwap } from "./swap"; * // sort by length in descending order * sortByCachedKey(["a","bbbb","ccc","dd"], (x) => x.length, (a, b) => b - a); * // [ 'bbbb', 'ccc', 'dd', 'a' ] + * + * sortByCachedKey(["a", "b", "c", "d"], [3, 2, 1, 0]) + * // [ 'd', 'c', 'b', 'a' ] * ``` * * @param src @@ -27,6 +33,11 @@ import { multiSwap } from "./swap"; */ export const sortByCachedKey = ( src: T[], - key: Fn, + key: K[] | Fn, cmp: Comparator = compare -) => (quickSort(src.map(key), cmp, multiSwap(src)), src); +) => { + const keys = isFunction(key) ? src.map(key) : key; + assert(keys.length === src.length, `keys.length != src.length`); + quickSort(keys, cmp, multiSwap(src)); + return src; +}; diff --git a/packages/arrays/test/sort-cached.ts b/packages/arrays/test/sort-cached.ts new file mode 100644 index 0000000000..6417cb0e79 --- /dev/null +++ b/packages/arrays/test/sort-cached.ts @@ -0,0 +1,38 @@ +import { compare, reverse } from "@thi.ng/compare"; +import * as assert from "assert"; +import { sortByCachedKey } from "../src"; + +describe("sortCached", () => { + it("key fn", () => { + assert.deepStrictEqual( + sortByCachedKey(["a", "bbbb", "ccc", "dd"], (x) => x), + ["a", "bbbb", "ccc", "dd"] + ); + assert.deepStrictEqual( + sortByCachedKey( + ["a", "bbbb", "ccc", "dd"], + (x) => x, + reverse(compare) + ), + ["dd", "ccc", "bbbb", "a"] + ); + assert.deepStrictEqual( + sortByCachedKey( + ["a", "bbbb", "ccc", "dd"], + (x) => x.length, + (a, b) => b - a + ), + ["bbbb", "ccc", "dd", "a"] + ); + }); + + it("key array", () => { + assert.deepStrictEqual( + sortByCachedKey(["a", "b", "c", "d"], [3, 2, 1, 0]), + ["d", "c", "b", "a"] + ); + }); + + it("wrong key length", () => + assert.throws(() => sortByCachedKey(["a", "b", "c", "d"], []))); +}); From a54a486213e1121244ff3b122a5cfeac1e6cea58 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Wed, 30 Dec 2020 13:36:05 +0000 Subject: [PATCH 29/51] docs(color): update readme --- packages/color/README.md | 44 +++++++++++++++++++++++++++++++++--- packages/color/src/api.ts | 5 ++++ packages/color/tpl.readme.md | 44 +++++++++++++++++++++++++++++++++--- 3 files changed, 87 insertions(+), 6 deletions(-) diff --git a/packages/color/README.md b/packages/color/README.md index 7ead4162ad..726ac87867 100644 --- a/packages/color/README.md +++ b/packages/color/README.md @@ -67,12 +67,50 @@ functions). Wrapper factory functions are provided for convenience. ### Color theme generation +The package provides several methods for procedural & declarative color theme +generations. The latter relies on the concept of HSV color ranges, which can be +sampled directly and/or mixed with a base color to produce randomized +variations. Furthermore, multiple such ranges can be combined into a weighted +set to define probabilistic color themes. + ```ts -// infinite iterator of cool reds, w/ 10% hue variance -colorsFromRange(RANGES.cool, [0, 0.8, 1], { num: Infinity, variance: 0.1 }) +// single random color drawn from the "bright" color range preset +colorFromRange(RANGES.bright); +// [ 0.7302125322518669, 0.8519945301256682, 0.8134374983367859, 1 ] + +// single random color based on given HSV base color and preset +colorFromRange(RANGES.warm, [0.33, 1, 1]) +// [ 0.3065587375218628, 0.8651353734302525, 0.748781892650323, 1 ] + +// infinite iterator of colors sampled from the preset +// (see table below) +const colors = colorsFromRange(RANGES.bright); +colors.next(); +// { +// value: [ 0.006959075656347791, 0.8760165887192115, 0.912149937028727, 1 ], +// done: false +// } + +// 10 cool reds, w/ 10% hue variance +[...colorsFromRange(RANGES.cool, [0, 0.8, 1], { num: 10, variance: 0.1 })] // generate colors based on given weighted textual description(s) -[...colorsFromTheme(["warm goldenrod 1.0", "cool springgreen 0.1"], { num: 100, variance: 0.05 })] +[...colorsFromTheme( + ["warm goldenrod 1.0", "cool springgreen 0.1"], + { num: 100, variance: 0.05 } +)] + +// theme parts can also be given in this format +// note: base colors are always in HSV +// all keys are optional (range, base, weight), +// but at least `range` or `base` must be given... +[...colorsFromTheme( + [ + { range: "warm", base: "goldenrod", weight: 1 }, + { range: RANGES.cool, base: [0, 1, 0.5], weight: 0.1 } + ], + { num: 100, variance: 0.05 } +)] ``` | ID | 100 colors drawn from color range preset only, sorted by hue | diff --git a/packages/color/src/api.ts b/packages/color/src/api.ts index 0acd8b37ec..ad53477203 100644 --- a/packages/color/src/api.ts +++ b/packages/color/src/api.ts @@ -256,3 +256,8 @@ export interface ColorThemePart { export type ColorThemePartString = | `${ColorRangePreset} ${CSSColorName} ${number}` | `${ColorRangePreset | CSSColorName} ${number}`; +// TODO the next 2 lines currently cause geometric slowdown +// of TS type checker & compiler, re-enable once TS4.2 is released +// Playground link to try behavior: https://is.gd/4wTxJm +// | `${ColorRangePreset} ${CSSColorName}` +// | `${ColorRangePreset | CSSColorName}`; diff --git a/packages/color/tpl.readme.md b/packages/color/tpl.readme.md index 579c8921cd..2f8f623494 100644 --- a/packages/color/tpl.readme.md +++ b/packages/color/tpl.readme.md @@ -50,12 +50,50 @@ functions). Wrapper factory functions are provided for convenience. ### Color theme generation +The package provides several methods for procedural & declarative color theme +generations. The latter relies on the concept of HSV color ranges, which can be +sampled directly and/or mixed with a base color to produce randomized +variations. Furthermore, multiple such ranges can be combined into a weighted +set to define probabilistic color themes. + ```ts -// infinite iterator of cool reds, w/ 10% hue variance -colorsFromRange(RANGES.cool, [0, 0.8, 1], { num: Infinity, variance: 0.1 }) +// single random color drawn from the "bright" color range preset +colorFromRange(RANGES.bright); +// [ 0.7302125322518669, 0.8519945301256682, 0.8134374983367859, 1 ] + +// single random color based on given HSV base color and preset +colorFromRange(RANGES.warm, [0.33, 1, 1]) +// [ 0.3065587375218628, 0.8651353734302525, 0.748781892650323, 1 ] + +// infinite iterator of colors sampled from the preset +// (see table below) +const colors = colorsFromRange(RANGES.bright); +colors.next(); +// { +// value: [ 0.006959075656347791, 0.8760165887192115, 0.912149937028727, 1 ], +// done: false +// } + +// 10 cool reds, w/ 10% hue variance +[...colorsFromRange(RANGES.cool, [0, 0.8, 1], { num: 10, variance: 0.1 })] // generate colors based on given weighted textual description(s) -[...colorsFromTheme(["warm goldenrod 1.0", "cool springgreen 0.1"], { num: 100, variance: 0.05 })] +[...colorsFromTheme( + ["warm goldenrod 1.0", "cool springgreen 0.1"], + { num: 100, variance: 0.05 } +)] + +// theme parts can also be given in this format +// note: base colors are always in HSV +// all keys are optional (range, base, weight), +// but at least `range` or `base` must be given... +[...colorsFromTheme( + [ + { range: "warm", base: "goldenrod", weight: 1 }, + { range: RANGES.cool, base: [0, 1, 0.5], weight: 0.1 } + ], + { num: 100, variance: 0.05 } +)] ``` | ID | 100 colors drawn from color range preset only, sorted by hue | From ef5f7ca5a569738bdfea76f54670b50fd9a287d1 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Wed, 30 Dec 2020 16:18:22 +0000 Subject: [PATCH 30/51] docs: update typedoc deps in all pkgs, update tpl --- packages/adapt-dpi/package.json | 4 +- packages/adjacency/package.json | 4 +- packages/api/package.json | 4 +- packages/arrays/package.json | 4 +- packages/associative/package.json | 4 +- packages/atom/package.json | 4 +- packages/bench/package.json | 4 +- packages/bencode/package.json | 4 +- packages/binary/package.json | 4 +- packages/bitfield/package.json | 4 +- packages/bitstream/package.json | 4 +- packages/cache/package.json | 4 +- packages/checks/package.json | 4 +- packages/color/package.json | 4 +- packages/colored-noise/package.json | 4 +- packages/compare/package.json | 4 +- packages/compose/package.json | 4 +- packages/csp/package.json | 4 +- packages/csv/package.json | 4 +- packages/date/package.json | 4 +- packages/dcons/package.json | 4 +- packages/defmulti/package.json | 4 +- packages/dgraph-dot/package.json | 4 +- packages/dgraph/package.json | 4 +- packages/diff/package.json | 4 +- packages/dl-asset/package.json | 4 +- packages/dlogic/package.json | 4 +- packages/dot/package.json | 4 +- packages/dsp-io-wav/package.json | 4 +- packages/dsp/package.json | 4 +- packages/dual-algebra/package.json | 4 +- packages/dynvar/package.json | 4 +- packages/ecs/package.json | 4 +- packages/egf/package.json | 4 +- packages/equiv/package.json | 4 +- packages/errors/package.json | 4 +- packages/fsm/package.json | 4 +- packages/fuzzy-viz/package.json | 4 +- packages/fuzzy/package.json | 4 +- packages/geom-accel/package.json | 4 +- packages/geom-api/package.json | 4 +- packages/geom-arc/package.json | 4 +- packages/geom-clip-line/package.json | 4 +- packages/geom-clip-poly/package.json | 4 +- packages/geom-closest-point/package.json | 4 +- packages/geom-fuzz/package.json | 4 +- packages/geom-hull/package.json | 4 +- packages/geom-io-obj/package.json | 4 +- packages/geom-isec/package.json | 4 +- packages/geom-isoline/package.json | 4 +- packages/geom-poly-utils/package.json | 4 +- packages/geom-resample/package.json | 4 +- packages/geom-splines/package.json | 4 +- packages/geom-subdiv-curve/package.json | 4 +- packages/geom-tessellate/package.json | 4 +- packages/geom-voronoi/package.json | 4 +- packages/geom/package.json | 4 +- packages/gp/package.json | 4 +- packages/grid-iterators/package.json | 4 +- packages/hdiff/package.json | 4 +- packages/hdom-canvas/package.json | 4 +- packages/hdom-components/package.json | 4 +- packages/hdom-mock/package.json | 4 +- packages/hdom/package.json | 4 +- packages/heaps/package.json | 4 +- packages/hex/package.json | 4 +- packages/hiccup-canvas/package.json | 4 +- packages/hiccup-carbon-icons/package.json | 4 +- packages/hiccup-css/package.json | 4 +- packages/hiccup-html/package.json | 4 +- packages/hiccup-markdown/package.json | 4 +- packages/hiccup-svg/package.json | 4 +- packages/hiccup/package.json | 4 +- packages/idgen/package.json | 4 +- packages/iges/package.json | 4 +- packages/imgui/package.json | 4 +- packages/interceptors/package.json | 4 +- packages/intervals/package.json | 4 +- packages/iterators/package.json | 4 +- packages/layout/package.json | 4 +- packages/leb128/package.json | 4 +- packages/lsys/package.json | 4 +- packages/malloc/package.json | 4 +- packages/math/package.json | 4 +- packages/matrices/package.json | 4 +- packages/memoize/package.json | 4 +- packages/mime/package.json | 4 +- packages/morton/package.json | 4 +- packages/oquery/package.json | 4 +- packages/parse/package.json | 4 +- packages/paths/package.json | 4 +- packages/pixel/package.json | 4 +- packages/pointfree-lang/package.json | 4 +- packages/pointfree/package.json | 4 +- packages/poisson/package.json | 4 +- packages/porter-duff/package.json | 4 +- packages/prefixes/package.json | 4 +- packages/quad-edge/package.json | 4 +- packages/ramp/package.json | 4 +- packages/random/package.json | 4 +- packages/range-coder/package.json | 4 +- packages/rdom-canvas/package.json | 4 +- packages/rdom-components/package.json | 4 +- packages/rdom/package.json | 4 +- packages/resolve-map/package.json | 4 +- packages/rle-pack/package.json | 4 +- packages/router/package.json | 4 +- packages/rstream-csp/package.json | 4 +- packages/rstream-dot/package.json | 4 +- packages/rstream-gestures/package.json | 4 +- packages/rstream-graph/package.json | 4 +- packages/rstream-log-file/package.json | 4 +- packages/rstream-log/package.json | 4 +- packages/rstream-query/package.json | 4 +- packages/rstream/package.json | 4 +- packages/sax/package.json | 4 +- packages/scenegraph/package.json | 4 +- packages/seq/package.json | 4 +- packages/sexpr/package.json | 4 +- packages/shader-ast-glsl/package.json | 4 +- packages/shader-ast-js/package.json | 4 +- packages/shader-ast-stdlib/package.json | 4 +- packages/shader-ast/package.json | 4 +- packages/simd/package.json | 4 +- packages/soa/package.json | 4 +- packages/sparse/package.json | 4 +- packages/strings/package.json | 4 +- packages/system/package.json | 4 +- packages/text-canvas/package.json | 4 +- packages/transducers-binary/package.json | 4 +- packages/transducers-fsm/package.json | 4 +- packages/transducers-hdom/package.json | 4 +- packages/transducers-patch/package.json | 4 +- packages/transducers-stats/package.json | 4 +- packages/transducers/package.json | 4 +- packages/unionstruct/package.json | 4 +- packages/vclock/package.json | 4 +- packages/vector-pools/package.json | 4 +- packages/vectors/package.json | 4 +- packages/viz/package.json | 4 +- packages/webgl-msdf/package.json | 4 +- packages/webgl-shadertoy/package.json | 4 +- packages/webgl/package.json | 4 +- packages/zipper/package.json | 4 +- scripts/make-module | 8 +- .../typedoc-theme/assets/css/_constants.sass | 39 - .../assets/css/elements/_comment.sass | 53 - .../assets/css/elements/_filter.sass | 65 - .../assets/css/elements/_footer.sass | 21 - .../assets/css/elements/_hierarchy.sass | 24 - .../assets/css/elements/_images.sass | 3 - .../assets/css/elements/_index.sass | 79 - .../assets/css/elements/_member.sass | 21 - .../assets/css/elements/_navigation.sass | 148 - .../assets/css/elements/_panel.sass | 70 - .../assets/css/elements/_search.sass | 89 - .../assets/css/elements/_signatures.sass | 152 - .../assets/css/elements/_sources.sass | 24 - .../assets/css/elements/_toolbar.sass | 175 -- .../assets/css/layouts/_default.sass | 113 - .../assets/css/layouts/_minimal.sass | 49 - tools/doc/typedoc-theme/assets/css/main.css | 2632 +++++++++++++++++ tools/doc/typedoc-theme/assets/css/main.sass | 27 - .../assets/css/setup/_animations.sass | 54 - .../typedoc-theme/assets/css/setup/_grid.sass | 60 - .../assets/css/setup/_icons.scss | 166 -- .../assets/css/setup/_mixins.sass | 30 - .../assets/css/setup/_typography.sass | 45 - .../assets/css/vendors/_highlight.js.sass | 50 - .../assets/css/vendors/_normalize.sass | 424 --- tools/doc/typedoc-theme/assets/js/main.js | 248 ++ .../assets/js/src/typedoc/Application.ts | 111 - .../assets/js/src/typedoc/Component.ts | 17 - .../assets/js/src/typedoc/EventTarget.ts | 45 - .../js/src/typedoc/components/Filter.ts | 186 -- .../src/typedoc/components/MenuHighlight.ts | 147 - .../js/src/typedoc/components/Search.ts | 336 --- .../js/src/typedoc/components/Signature.ts | 171 -- .../js/src/typedoc/components/Toggle.ts | 77 - .../js/src/typedoc/services/Viewport.ts | 135 - .../assets/js/src/typedoc/utils/pointer.ts | 96 - .../assets/js/src/typedoc/utils/trottle.ts | 13 - .../typedoc-theme/assets/js/src/~bootstrap.ts | 12 - tools/doc/typedoc-theme/layouts/default.hbs | 57 +- .../doc/typedoc-theme/partials/analytics.hbs | 2 +- .../doc/typedoc-theme/partials/breadcrumb.hbs | 4 +- tools/doc/typedoc-theme/partials/header.hbs | 13 +- tools/doc/typedoc-theme/partials/index.hbs | 66 +- tools/doc/typedoc-theme/partials/type.hbs | 89 +- .../typedoc-theme/partials/typeParameters.hbs | 3 + yarn.lock | 81 +- 191 files changed, 3396 insertions(+), 3710 deletions(-) delete mode 100644 tools/doc/typedoc-theme/assets/css/_constants.sass delete mode 100644 tools/doc/typedoc-theme/assets/css/elements/_comment.sass delete mode 100644 tools/doc/typedoc-theme/assets/css/elements/_filter.sass delete mode 100644 tools/doc/typedoc-theme/assets/css/elements/_footer.sass delete mode 100644 tools/doc/typedoc-theme/assets/css/elements/_hierarchy.sass delete mode 100644 tools/doc/typedoc-theme/assets/css/elements/_images.sass delete mode 100644 tools/doc/typedoc-theme/assets/css/elements/_index.sass delete mode 100644 tools/doc/typedoc-theme/assets/css/elements/_member.sass delete mode 100644 tools/doc/typedoc-theme/assets/css/elements/_navigation.sass delete mode 100644 tools/doc/typedoc-theme/assets/css/elements/_panel.sass delete mode 100644 tools/doc/typedoc-theme/assets/css/elements/_search.sass delete mode 100644 tools/doc/typedoc-theme/assets/css/elements/_signatures.sass delete mode 100644 tools/doc/typedoc-theme/assets/css/elements/_sources.sass delete mode 100644 tools/doc/typedoc-theme/assets/css/elements/_toolbar.sass delete mode 100644 tools/doc/typedoc-theme/assets/css/layouts/_default.sass delete mode 100644 tools/doc/typedoc-theme/assets/css/layouts/_minimal.sass create mode 100644 tools/doc/typedoc-theme/assets/css/main.css delete mode 100644 tools/doc/typedoc-theme/assets/css/main.sass delete mode 100644 tools/doc/typedoc-theme/assets/css/setup/_animations.sass delete mode 100644 tools/doc/typedoc-theme/assets/css/setup/_grid.sass delete mode 100644 tools/doc/typedoc-theme/assets/css/setup/_icons.scss delete mode 100644 tools/doc/typedoc-theme/assets/css/setup/_mixins.sass delete mode 100644 tools/doc/typedoc-theme/assets/css/setup/_typography.sass delete mode 100644 tools/doc/typedoc-theme/assets/css/vendors/_highlight.js.sass delete mode 100644 tools/doc/typedoc-theme/assets/css/vendors/_normalize.sass create mode 100644 tools/doc/typedoc-theme/assets/js/main.js delete mode 100644 tools/doc/typedoc-theme/assets/js/src/typedoc/Application.ts delete mode 100644 tools/doc/typedoc-theme/assets/js/src/typedoc/Component.ts delete mode 100644 tools/doc/typedoc-theme/assets/js/src/typedoc/EventTarget.ts delete mode 100644 tools/doc/typedoc-theme/assets/js/src/typedoc/components/Filter.ts delete mode 100644 tools/doc/typedoc-theme/assets/js/src/typedoc/components/MenuHighlight.ts delete mode 100644 tools/doc/typedoc-theme/assets/js/src/typedoc/components/Search.ts delete mode 100644 tools/doc/typedoc-theme/assets/js/src/typedoc/components/Signature.ts delete mode 100644 tools/doc/typedoc-theme/assets/js/src/typedoc/components/Toggle.ts delete mode 100644 tools/doc/typedoc-theme/assets/js/src/typedoc/services/Viewport.ts delete mode 100644 tools/doc/typedoc-theme/assets/js/src/typedoc/utils/pointer.ts delete mode 100644 tools/doc/typedoc-theme/assets/js/src/typedoc/utils/trottle.ts delete mode 100644 tools/doc/typedoc-theme/assets/js/src/~bootstrap.ts diff --git a/packages/adapt-dpi/package.json b/packages/adapt-dpi/package.json index e108d48cda..a584bd844a 100644 --- a/packages/adapt-dpi/package.json +++ b/packages/adapt-dpi/package.json @@ -33,7 +33,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -44,7 +44,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "files": [ diff --git a/packages/adjacency/package.json b/packages/adjacency/package.json index 40ab2dbd25..4cf0f23010 100644 --- a/packages/adjacency/package.json +++ b/packages/adjacency/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -46,7 +46,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/api/package.json b/packages/api/package.json index 7aa8221f97..a388f7a483 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib api decorators mixins", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "files": [ diff --git a/packages/arrays/package.json b/packages/arrays/package.json index 6adee97f7a..b7b703eb6b 100644 --- a/packages/arrays/package.json +++ b/packages/arrays/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/associative/package.json b/packages/associative/package.json index 5a59fda408..f4fcbc069a 100644 --- a/packages/associative/package.json +++ b/packages/associative/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib internal", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/atom/package.json b/packages/atom/package.json index 1f812f1aa5..c5137f4b55 100644 --- a/packages/atom/package.json +++ b/packages/atom/package.json @@ -34,7 +34,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/bench/package.json b/packages/bench/package.json index ff9f85fa82..bbce347b05 100644 --- a/packages/bench/package.json +++ b/packages/bench/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "files": [ diff --git a/packages/bencode/package.json b/packages/bencode/package.json index 967d0df374..69447182eb 100644 --- a/packages/bencode/package.json +++ b/packages/bencode/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/binary/package.json b/packages/binary/package.json index 37ac3d1c0d..bac163293d 100644 --- a/packages/binary/package.json +++ b/packages/binary/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/bitfield/package.json b/packages/bitfield/package.json index 91729f2e02..b8fff010c7 100644 --- a/packages/bitfield/package.json +++ b/packages/bitfield/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/bitstream/package.json b/packages/bitstream/package.json index d7c15c092a..16a02ef3d2 100644 --- a/packages/bitstream/package.json +++ b/packages/bitstream/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/cache/package.json b/packages/cache/package.json index 807e33a8d2..227eb2ee85 100644 --- a/packages/cache/package.json +++ b/packages/cache/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/checks/package.json b/packages/checks/package.json index f86c3e27c5..325e952812 100644 --- a/packages/checks/package.json +++ b/packages/checks/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/color/package.json b/packages/color/package.json index 168bb30f92..66c40a16cb 100644 --- a/packages/color/package.json +++ b/packages/color/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib internal", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public", "tool:swatches": "ts-node -P tools/tsconfig.json tools/index.ts" @@ -46,7 +46,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/colored-noise/package.json b/packages/colored-noise/package.json index dc1a9cc660..845a86db18 100644 --- a/packages/colored-noise/package.json +++ b/packages/colored-noise/package.json @@ -34,7 +34,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -51,7 +51,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/compare/package.json b/packages/compare/package.json index f9798ba9dc..ccf41e689f 100644 --- a/packages/compare/package.json +++ b/packages/compare/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/compose/package.json b/packages/compose/package.json index 8ce1eb0b4d..a49b30aa7f 100644 --- a/packages/compose/package.json +++ b/packages/compose/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/csp/package.json b/packages/csp/package.json index b3ae21b16b..e1d320702e 100644 --- a/packages/csp/package.json +++ b/packages/csp/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public", "testasync": "tsc -p test && node build/test/async.js", @@ -49,7 +49,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/csv/package.json b/packages/csv/package.json index a1ccfd1f9f..79e5c3dbfe 100644 --- a/packages/csv/package.json +++ b/packages/csv/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/date/package.json b/packages/date/package.json index b6f7f02d87..62d94a94ac 100644 --- a/packages/date/package.json +++ b/packages/date/package.json @@ -34,7 +34,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/dcons/package.json b/packages/dcons/package.json index 0ca63a3934..153b2f2e80 100644 --- a/packages/dcons/package.json +++ b/packages/dcons/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/defmulti/package.json b/packages/defmulti/package.json index d91550ee4d..938b7dda06 100644 --- a/packages/defmulti/package.json +++ b/packages/defmulti/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/dgraph-dot/package.json b/packages/dgraph-dot/package.json index 016b932e2e..50ca3b80f8 100644 --- a/packages/dgraph-dot/package.json +++ b/packages/dgraph-dot/package.json @@ -34,7 +34,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/dgraph/package.json b/packages/dgraph/package.json index f30801e5d3..94eb684a39 100644 --- a/packages/dgraph/package.json +++ b/packages/dgraph/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/diff/package.json b/packages/diff/package.json index eb1395f235..d22ddb06c5 100644 --- a/packages/diff/package.json +++ b/packages/diff/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -44,7 +44,7 @@ "@types/node": "^14.14.14", "mocha": "^8.2.1", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/dl-asset/package.json b/packages/dl-asset/package.json index 7540630d83..ee92e827c8 100644 --- a/packages/dl-asset/package.json +++ b/packages/dl-asset/package.json @@ -34,7 +34,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/dlogic/package.json b/packages/dlogic/package.json index d3f428ab7b..9b8060bda9 100644 --- a/packages/dlogic/package.json +++ b/packages/dlogic/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/dot/package.json b/packages/dot/package.json index 08edea126c..9d57aba52c 100644 --- a/packages/dot/package.json +++ b/packages/dot/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/dsp-io-wav/package.json b/packages/dsp-io-wav/package.json index 3591ea764f..8b8ccd5d8a 100644 --- a/packages/dsp-io-wav/package.json +++ b/packages/dsp-io-wav/package.json @@ -34,7 +34,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/dsp/package.json b/packages/dsp/package.json index f9ba04e3d3..4ba4cae49e 100644 --- a/packages/dsp/package.json +++ b/packages/dsp/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib comp fft gen osc proc util", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/dual-algebra/package.json b/packages/dual-algebra/package.json index 8a009c3137..26ce445090 100644 --- a/packages/dual-algebra/package.json +++ b/packages/dual-algebra/package.json @@ -34,7 +34,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/dynvar/package.json b/packages/dynvar/package.json index 8bf7704e7e..2c4dbc4e14 100644 --- a/packages/dynvar/package.json +++ b/packages/dynvar/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/ecs/package.json b/packages/ecs/package.json index 3d50b46a1d..2797d288d5 100644 --- a/packages/ecs/package.json +++ b/packages/ecs/package.json @@ -34,7 +34,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib caches components groups", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -46,7 +46,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/egf/package.json b/packages/egf/package.json index 0fb144fdc9..f24b5f9e13 100644 --- a/packages/egf/package.json +++ b/packages/egf/package.json @@ -28,7 +28,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public", "pub:wip": "yarn publish --access public --no-git-tag-version" }, @@ -41,7 +41,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/equiv/package.json b/packages/equiv/package.json index 8eaae3f033..6833d35ae4 100644 --- a/packages/equiv/package.json +++ b/packages/equiv/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -46,7 +46,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "files": [ diff --git a/packages/errors/package.json b/packages/errors/package.json index 7e28d154ce..61b65e46f4 100644 --- a/packages/errors/package.json +++ b/packages/errors/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "files": [ diff --git a/packages/fsm/package.json b/packages/fsm/package.json index 49fa3ec98c..bc72f6ee83 100644 --- a/packages/fsm/package.json +++ b/packages/fsm/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/fuzzy-viz/package.json b/packages/fuzzy-viz/package.json index 6a17a5d86a..3c02c32bc3 100644 --- a/packages/fuzzy-viz/package.json +++ b/packages/fuzzy-viz/package.json @@ -34,7 +34,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/fuzzy/package.json b/packages/fuzzy/package.json index 342b832069..c4af3165c3 100644 --- a/packages/fuzzy/package.json +++ b/packages/fuzzy/package.json @@ -34,7 +34,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib strategies", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/geom-accel/package.json b/packages/geom-accel/package.json index af0f8d6393..c4a4e594b6 100644 --- a/packages/geom-accel/package.json +++ b/packages/geom-accel/package.json @@ -34,7 +34,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib internal", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -46,7 +46,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/geom-api/package.json b/packages/geom-api/package.json index e272196a47..701157041f 100644 --- a/packages/geom-api/package.json +++ b/packages/geom-api/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/geom-arc/package.json b/packages/geom-arc/package.json index f4542e8b25..d215c40fe6 100644 --- a/packages/geom-arc/package.json +++ b/packages/geom-arc/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/geom-clip-line/package.json b/packages/geom-clip-line/package.json index f676de3b9a..0db34fcce9 100644 --- a/packages/geom-clip-line/package.json +++ b/packages/geom-clip-line/package.json @@ -34,7 +34,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/geom-clip-poly/package.json b/packages/geom-clip-poly/package.json index 0ee98efcff..8f4c989d46 100644 --- a/packages/geom-clip-poly/package.json +++ b/packages/geom-clip-poly/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/geom-closest-point/package.json b/packages/geom-closest-point/package.json index e0b7967e87..e2c470bbc0 100644 --- a/packages/geom-closest-point/package.json +++ b/packages/geom-closest-point/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/geom-fuzz/package.json b/packages/geom-fuzz/package.json index aebc09d6ac..fabb7df2e8 100644 --- a/packages/geom-fuzz/package.json +++ b/packages/geom-fuzz/package.json @@ -33,7 +33,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -44,7 +44,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/geom-hull/package.json b/packages/geom-hull/package.json index 7dd112c1f4..aeb348d8a9 100644 --- a/packages/geom-hull/package.json +++ b/packages/geom-hull/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/geom-io-obj/package.json b/packages/geom-io-obj/package.json index e829cd54b3..3ccceeed49 100644 --- a/packages/geom-io-obj/package.json +++ b/packages/geom-io-obj/package.json @@ -34,7 +34,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/geom-isec/package.json b/packages/geom-isec/package.json index 76c6a5b77d..1a141c45ff 100644 --- a/packages/geom-isec/package.json +++ b/packages/geom-isec/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/geom-isoline/package.json b/packages/geom-isoline/package.json index f868c9a3e3..89db611e34 100644 --- a/packages/geom-isoline/package.json +++ b/packages/geom-isoline/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/geom-poly-utils/package.json b/packages/geom-poly-utils/package.json index 23fd265060..86d6440274 100644 --- a/packages/geom-poly-utils/package.json +++ b/packages/geom-poly-utils/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/geom-resample/package.json b/packages/geom-resample/package.json index 1bf3dcb3e7..8d828233a9 100644 --- a/packages/geom-resample/package.json +++ b/packages/geom-resample/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/geom-splines/package.json b/packages/geom-splines/package.json index b5aafab5cc..00e572cf9a 100644 --- a/packages/geom-splines/package.json +++ b/packages/geom-splines/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib internal", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/geom-subdiv-curve/package.json b/packages/geom-subdiv-curve/package.json index bd6b1927e0..1626439f3c 100644 --- a/packages/geom-subdiv-curve/package.json +++ b/packages/geom-subdiv-curve/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/geom-tessellate/package.json b/packages/geom-tessellate/package.json index c09806779b..4fdce12cf1 100644 --- a/packages/geom-tessellate/package.json +++ b/packages/geom-tessellate/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/geom-voronoi/package.json b/packages/geom-voronoi/package.json index b6dcbf4baa..8f447b29cc 100644 --- a/packages/geom-voronoi/package.json +++ b/packages/geom-voronoi/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/geom/package.json b/packages/geom/package.json index cd5d1c6419..4a8e4a7670 100644 --- a/packages/geom/package.json +++ b/packages/geom/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib api ctors internal ops", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/gp/package.json b/packages/gp/package.json index 6c18aea1bb..0221fa8c0b 100644 --- a/packages/gp/package.json +++ b/packages/gp/package.json @@ -34,7 +34,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/grid-iterators/package.json b/packages/grid-iterators/package.json index 6f1107e1f6..0e12740305 100644 --- a/packages/grid-iterators/package.json +++ b/packages/grid-iterators/package.json @@ -34,7 +34,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -46,7 +46,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/hdiff/package.json b/packages/hdiff/package.json index 00da56b861..ef7118d8c2 100644 --- a/packages/hdiff/package.json +++ b/packages/hdiff/package.json @@ -36,7 +36,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -47,7 +47,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/hdom-canvas/package.json b/packages/hdom-canvas/package.json index 49ab953fc4..4f3eedb4bf 100644 --- a/packages/hdom-canvas/package.json +++ b/packages/hdom-canvas/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib draw", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/hdom-components/package.json b/packages/hdom-components/package.json index b48542b091..0de01aa3b3 100644 --- a/packages/hdom-components/package.json +++ b/packages/hdom-components/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib utils", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/hdom-mock/package.json b/packages/hdom-mock/package.json index a4cedc3bc4..be9b645591 100644 --- a/packages/hdom-mock/package.json +++ b/packages/hdom-mock/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/hdom/package.json b/packages/hdom/package.json index 72982a06ed..5ad3a4609e 100644 --- a/packages/hdom/package.json +++ b/packages/hdom/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -46,7 +46,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/heaps/package.json b/packages/heaps/package.json index ad4185bf3b..92a401e3e3 100644 --- a/packages/heaps/package.json +++ b/packages/heaps/package.json @@ -34,7 +34,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -46,7 +46,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/hex/package.json b/packages/hex/package.json index 02342fd519..baa3042338 100644 --- a/packages/hex/package.json +++ b/packages/hex/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "files": [ diff --git a/packages/hiccup-canvas/package.json b/packages/hiccup-canvas/package.json index 27d9913c94..7f498b6450 100644 --- a/packages/hiccup-canvas/package.json +++ b/packages/hiccup-canvas/package.json @@ -33,7 +33,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -44,7 +44,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/hiccup-carbon-icons/package.json b/packages/hiccup-carbon-icons/package.json index c048b504b3..ee3edcb171 100644 --- a/packages/hiccup-carbon-icons/package.json +++ b/packages/hiccup-carbon-icons/package.json @@ -35,7 +35,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.map *.d.ts .nyc_output build coverage doc lib utils", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -48,7 +48,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "files": [ diff --git a/packages/hiccup-css/package.json b/packages/hiccup-css/package.json index 64b505e526..fbed811cb3 100644 --- a/packages/hiccup-css/package.json +++ b/packages/hiccup-css/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/hiccup-html/package.json b/packages/hiccup-html/package.json index dbdfe7e328..a492ddab83 100644 --- a/packages/hiccup-html/package.json +++ b/packages/hiccup-html/package.json @@ -33,7 +33,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -44,7 +44,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/hiccup-markdown/package.json b/packages/hiccup-markdown/package.json index e25dceb1e9..226ae7b82e 100644 --- a/packages/hiccup-markdown/package.json +++ b/packages/hiccup-markdown/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/hiccup-svg/package.json b/packages/hiccup-svg/package.json index 16a51f21f2..215fe7f580 100644 --- a/packages/hiccup-svg/package.json +++ b/packages/hiccup-svg/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/hiccup/package.json b/packages/hiccup/package.json index cde7472df8..0ff197e2a5 100644 --- a/packages/hiccup/package.json +++ b/packages/hiccup/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -46,7 +46,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/idgen/package.json b/packages/idgen/package.json index 9d4ad2757f..9b718c2518 100644 --- a/packages/idgen/package.json +++ b/packages/idgen/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/iges/package.json b/packages/iges/package.json index 67d8a59e7c..b27d61fe18 100644 --- a/packages/iges/package.json +++ b/packages/iges/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/imgui/package.json b/packages/imgui/package.json index de0cd6bd00..83d8828900 100644 --- a/packages/imgui/package.json +++ b/packages/imgui/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib behaviors components", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/interceptors/package.json b/packages/interceptors/package.json index 6df1276142..6316db1274 100644 --- a/packages/interceptors/package.json +++ b/packages/interceptors/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/intervals/package.json b/packages/intervals/package.json index 320581f350..88d13c0bda 100644 --- a/packages/intervals/package.json +++ b/packages/intervals/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/iterators/package.json b/packages/iterators/package.json index 786ef0367a..999fa3e973 100644 --- a/packages/iterators/package.json +++ b/packages/iterators/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/layout/package.json b/packages/layout/package.json index 6191226764..63cd67d48f 100644 --- a/packages/layout/package.json +++ b/packages/layout/package.json @@ -34,7 +34,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/leb128/package.json b/packages/leb128/package.json index 4c743345ee..8440893fc0 100644 --- a/packages/leb128/package.json +++ b/packages/leb128/package.json @@ -34,7 +34,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -46,7 +46,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/lsys/package.json b/packages/lsys/package.json index eb41d2b26b..93d9c36d88 100644 --- a/packages/lsys/package.json +++ b/packages/lsys/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/malloc/package.json b/packages/malloc/package.json index ea67b0b89d..e3538b56f3 100644 --- a/packages/malloc/package.json +++ b/packages/malloc/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/math/package.json b/packages/math/package.json index a63c705cf6..8c146e5c3a 100644 --- a/packages/math/package.json +++ b/packages/math/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/matrices/package.json b/packages/matrices/package.json index c05bcf86e3..4fac149bf9 100644 --- a/packages/matrices/package.json +++ b/packages/matrices/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib internal", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/memoize/package.json b/packages/memoize/package.json index 39c6fccddb..ea29c5818d 100644 --- a/packages/memoize/package.json +++ b/packages/memoize/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/mime/package.json b/packages/mime/package.json index a2fcd9190b..a5ca4f4622 100644 --- a/packages/mime/package.json +++ b/packages/mime/package.json @@ -34,7 +34,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/morton/package.json b/packages/morton/package.json index 4384f45418..c8b69d88fb 100644 --- a/packages/morton/package.json +++ b/packages/morton/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/oquery/package.json b/packages/oquery/package.json index f7ce38c848..a67030f8f9 100644 --- a/packages/oquery/package.json +++ b/packages/oquery/package.json @@ -33,7 +33,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -44,7 +44,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/parse/package.json b/packages/parse/package.json index 5631750326..9ab809b076 100644 --- a/packages/parse/package.json +++ b/packages/parse/package.json @@ -34,7 +34,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib combinators presets prims readers xform", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/paths/package.json b/packages/paths/package.json index 1725d04bbb..e8fa6b9eec 100644 --- a/packages/paths/package.json +++ b/packages/paths/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/pixel/package.json b/packages/pixel/package.json index 083aecba89..3bf0f8bbb6 100644 --- a/packages/pixel/package.json +++ b/packages/pixel/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/pointfree-lang/package.json b/packages/pointfree-lang/package.json index cfc438237e..58d66e5a28 100644 --- a/packages/pointfree-lang/package.json +++ b/packages/pointfree-lang/package.json @@ -38,7 +38,7 @@ "pegtest": "pegjs -o build/src/parser.js src/grammar.pegjs", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -49,7 +49,7 @@ "mocha": "^8.2.1", "pegjs": "0.11.0-master.b7b87ea", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/pointfree/package.json b/packages/pointfree/package.json index ce37a53972..82b6a38429 100644 --- a/packages/pointfree/package.json +++ b/packages/pointfree/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/poisson/package.json b/packages/poisson/package.json index 13b7d77524..d50982c2ce 100644 --- a/packages/poisson/package.json +++ b/packages/poisson/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/porter-duff/package.json b/packages/porter-duff/package.json index 71b413671c..6e8e7907ae 100644 --- a/packages/porter-duff/package.json +++ b/packages/porter-duff/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/prefixes/package.json b/packages/prefixes/package.json index 1f0121ef07..6a6ebf6ce5 100644 --- a/packages/prefixes/package.json +++ b/packages/prefixes/package.json @@ -33,7 +33,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -44,7 +44,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "files": [ diff --git a/packages/quad-edge/package.json b/packages/quad-edge/package.json index 3aabc5debd..1c84d082f1 100644 --- a/packages/quad-edge/package.json +++ b/packages/quad-edge/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "files": [ diff --git a/packages/ramp/package.json b/packages/ramp/package.json index 52c3ac9977..1b0f1ae678 100644 --- a/packages/ramp/package.json +++ b/packages/ramp/package.json @@ -34,7 +34,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/random/package.json b/packages/random/package.json index 324ffd14e4..cb7879c7b4 100644 --- a/packages/random/package.json +++ b/packages/random/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib distributions", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/range-coder/package.json b/packages/range-coder/package.json index 37e1944a8f..d459dd5758 100644 --- a/packages/range-coder/package.json +++ b/packages/range-coder/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -46,7 +46,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/rdom-canvas/package.json b/packages/rdom-canvas/package.json index 77f563914f..fe01d841c9 100644 --- a/packages/rdom-canvas/package.json +++ b/packages/rdom-canvas/package.json @@ -33,7 +33,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -44,7 +44,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/rdom-components/package.json b/packages/rdom-components/package.json index 6a8c7678e9..93ebd40107 100644 --- a/packages/rdom-components/package.json +++ b/packages/rdom-components/package.json @@ -33,7 +33,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -44,7 +44,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/rdom/package.json b/packages/rdom/package.json index 460e106b75..92ce119303 100644 --- a/packages/rdom/package.json +++ b/packages/rdom/package.json @@ -33,7 +33,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public", "pub:wip": "yarn publish --access public --no-git-tag-version" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/resolve-map/package.json b/packages/resolve-map/package.json index c381b9f93a..81afa1da76 100644 --- a/packages/resolve-map/package.json +++ b/packages/resolve-map/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -44,7 +44,7 @@ "@types/node": "^14.14.14", "mocha": "^8.2.1", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/rle-pack/package.json b/packages/rle-pack/package.json index 7ba7d0fead..e9a7b85a87 100644 --- a/packages/rle-pack/package.json +++ b/packages/rle-pack/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -46,7 +46,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/router/package.json b/packages/router/package.json index de9317bd46..46adcecab5 100644 --- a/packages/router/package.json +++ b/packages/router/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/rstream-csp/package.json b/packages/rstream-csp/package.json index 08331a21b1..c180d51bba 100644 --- a/packages/rstream-csp/package.json +++ b/packages/rstream-csp/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib from", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/rstream-dot/package.json b/packages/rstream-dot/package.json index ec74b8c9b0..2cf57a01e1 100644 --- a/packages/rstream-dot/package.json +++ b/packages/rstream-dot/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/rstream-gestures/package.json b/packages/rstream-gestures/package.json index 412f31c2b0..5c893b5473 100644 --- a/packages/rstream-gestures/package.json +++ b/packages/rstream-gestures/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/rstream-graph/package.json b/packages/rstream-graph/package.json index 84cca953b1..e3566eb8a1 100644 --- a/packages/rstream-graph/package.json +++ b/packages/rstream-graph/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib nodes", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/rstream-log-file/package.json b/packages/rstream-log-file/package.json index 51652135a6..4b2ee48630 100644 --- a/packages/rstream-log-file/package.json +++ b/packages/rstream-log-file/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/rstream-log/package.json b/packages/rstream-log/package.json index d569ea7ecc..da16ad85d7 100644 --- a/packages/rstream-log/package.json +++ b/packages/rstream-log/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib output xform", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/rstream-query/package.json b/packages/rstream-query/package.json index 6cd78d9fa7..c9265a39a1 100644 --- a/packages/rstream-query/package.json +++ b/packages/rstream-query/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/rstream/package.json b/packages/rstream/package.json index dbb7e666cb..f20d7514bb 100644 --- a/packages/rstream/package.json +++ b/packages/rstream/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib from subs utils", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/sax/package.json b/packages/sax/package.json index ad8726324d..8ee24cb8c9 100644 --- a/packages/sax/package.json +++ b/packages/sax/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib internal", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/scenegraph/package.json b/packages/scenegraph/package.json index 4adbde150a..666c0e5a4c 100644 --- a/packages/scenegraph/package.json +++ b/packages/scenegraph/package.json @@ -34,7 +34,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/seq/package.json b/packages/seq/package.json index 251f4459d7..1e39faa3e2 100644 --- a/packages/seq/package.json +++ b/packages/seq/package.json @@ -34,7 +34,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/sexpr/package.json b/packages/sexpr/package.json index 1e8b856174..a7d73d3231 100644 --- a/packages/sexpr/package.json +++ b/packages/sexpr/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/shader-ast-glsl/package.json b/packages/shader-ast-glsl/package.json index 5d9fff9883..b65c9c6fde 100644 --- a/packages/shader-ast-glsl/package.json +++ b/packages/shader-ast-glsl/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib codegen std", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/shader-ast-js/package.json b/packages/shader-ast-js/package.json index 5b312865f8..a45c0b7a06 100644 --- a/packages/shader-ast-js/package.json +++ b/packages/shader-ast-js/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib env", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/shader-ast-stdlib/package.json b/packages/shader-ast-stdlib/package.json index efc9023ef6..f22e95089b 100644 --- a/packages/shader-ast-stdlib/package.json +++ b/packages/shader-ast-stdlib/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib color fog light math matrix noise raymarch screen sdf tex", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/shader-ast/package.json b/packages/shader-ast/package.json index 210299f259..a907c61fcf 100644 --- a/packages/shader-ast/package.json +++ b/packages/shader-ast/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib api ast builtin", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/simd/package.json b/packages/simd/package.json index 6e580ab4b8..cf7f9da917 100644 --- a/packages/simd/package.json +++ b/packages/simd/package.json @@ -35,7 +35,7 @@ "cover": "yarn build:test && nyc node --experimental-wasm-simd build/test/*.js && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -48,7 +48,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/soa/package.json b/packages/soa/package.json index 80b136963f..5cb7f6e3db 100644 --- a/packages/soa/package.json +++ b/packages/soa/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -46,7 +46,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/sparse/package.json b/packages/sparse/package.json index fb8782709a..3c21ad2b45 100644 --- a/packages/sparse/package.json +++ b/packages/sparse/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/strings/package.json b/packages/strings/package.json index e58178ec0a..e7f6e9ba4d 100644 --- a/packages/strings/package.json +++ b/packages/strings/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/system/package.json b/packages/system/package.json index e54baae47b..1e457c2b9c 100644 --- a/packages/system/package.json +++ b/packages/system/package.json @@ -34,7 +34,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/text-canvas/package.json b/packages/text-canvas/package.json index dc78dc2478..17464b60e9 100644 --- a/packages/text-canvas/package.json +++ b/packages/text-canvas/package.json @@ -34,7 +34,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/transducers-binary/package.json b/packages/transducers-binary/package.json index 1cefbc3716..1667b2c3a6 100644 --- a/packages/transducers-binary/package.json +++ b/packages/transducers-binary/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/transducers-fsm/package.json b/packages/transducers-fsm/package.json index 322e028498..e77906dd8c 100644 --- a/packages/transducers-fsm/package.json +++ b/packages/transducers-fsm/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/transducers-hdom/package.json b/packages/transducers-hdom/package.json index aec2488e49..b18aaf5a5a 100644 --- a/packages/transducers-hdom/package.json +++ b/packages/transducers-hdom/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/transducers-patch/package.json b/packages/transducers-patch/package.json index cfa1b894d1..d5d81ad934 100644 --- a/packages/transducers-patch/package.json +++ b/packages/transducers-patch/package.json @@ -34,7 +34,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/transducers-stats/package.json b/packages/transducers-stats/package.json index cd4093ad57..8108b7a504 100644 --- a/packages/transducers-stats/package.json +++ b/packages/transducers-stats/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/transducers/package.json b/packages/transducers/package.json index 975cd6a2a5..97590889e3 100644 --- a/packages/transducers/package.json +++ b/packages/transducers/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib func internal iter rfn xform", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/unionstruct/package.json b/packages/unionstruct/package.json index c21002070b..7fb99b2de3 100644 --- a/packages/unionstruct/package.json +++ b/packages/unionstruct/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "files": [ diff --git a/packages/vclock/package.json b/packages/vclock/package.json index 95e7fe1a31..3940b5c93f 100644 --- a/packages/vclock/package.json +++ b/packages/vclock/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/vector-pools/package.json b/packages/vector-pools/package.json index 9be1c719f4..4bde712785 100644 --- a/packages/vector-pools/package.json +++ b/packages/vector-pools/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/vectors/package.json b/packages/vectors/package.json index 6e397a17b4..56d70c6298 100644 --- a/packages/vectors/package.json +++ b/packages/vectors/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib internal", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/viz/package.json b/packages/viz/package.json index db4303b331..55bace6b39 100644 --- a/packages/viz/package.json +++ b/packages/viz/package.json @@ -34,7 +34,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib axis plot", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public", "tool:bars": "ts-node -P tools/tsconfig.json tools/bars.ts", "tool:covid": "ts-node -P tools/tsconfig.json tools/covid-bars.ts", @@ -52,7 +52,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/webgl-msdf/package.json b/packages/webgl-msdf/package.json index 57a4e28970..43916c89b8 100644 --- a/packages/webgl-msdf/package.json +++ b/packages/webgl-msdf/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/webgl-shadertoy/package.json b/packages/webgl-shadertoy/package.json index 8eafaa07a5..39e031309b 100644 --- a/packages/webgl-shadertoy/package.json +++ b/packages/webgl-shadertoy/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/webgl/package.json b/packages/webgl/package.json index 16d7df95a8..ece2a337d1 100644 --- a/packages/webgl/package.json +++ b/packages/webgl/package.json @@ -33,7 +33,7 @@ "cover": "nyc mocha test && nyc report --reporter=lcov", "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib api geo shaders textures", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", "pub": "yarn build:release && yarn publish --access public" }, @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/packages/zipper/package.json b/packages/zipper/package.json index 96fd692bd8..355560b601 100644 --- a/packages/zipper/package.json +++ b/packages/zipper/package.json @@ -34,7 +34,7 @@ "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -45,7 +45,7 @@ "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { diff --git a/scripts/make-module b/scripts/make-module index 5c140a6724..88d1eeac7a 100755 --- a/scripts/make-module +++ b/scripts/make-module @@ -79,7 +79,7 @@ cat << EOF > "$MODULE"/package.json "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib", "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts", "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose", - "doc": "node_modules/.bin/typedoc --mode modules --out doc --theme ../../tools/doc/typedoc-theme src", + "doc": "node_modules/.bin/typedoc --out doc --theme ../../tools/doc/typedoc-theme src/index.ts", "pub": "yarn build:release && yarn publish --access public" }, "devDependencies": { @@ -90,11 +90,11 @@ cat << EOF > "$MODULE"/package.json "mocha": "^8.2.1", "nyc": "^15.1.0", "ts-node": "^9.1.1", - "typedoc": "^0.19.2", + "typedoc": "^0.20.4", "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.4" + "@thi.ng/api": "^6.13.5" }, "files": [ "*.js", @@ -110,7 +110,7 @@ cat << EOF > "$MODULE"/package.json "sideEffects": false, "thi.ng": { "status": "alpha", - "year": 2020 + "year": 2021 } } EOF diff --git a/tools/doc/typedoc-theme/assets/css/_constants.sass b/tools/doc/typedoc-theme/assets/css/_constants.sass deleted file mode 100644 index bb97b3f86a..0000000000 --- a/tools/doc/typedoc-theme/assets/css/_constants.sass +++ /dev/null @@ -1,39 +0,0 @@ -// Fonts -// -$FONT_FAMILY: 'Segoe UI', sans-serif -$FONT_FAMILY_MONO: Menlo, Monaco, Consolas, 'Courier New', monospace - -$FONT_SIZE: 16px -$FONT_SIZE_MONO: 14px - -$LINE_HEIGHT: 1.333em - - -// Colors -// -$COLOR_BACKGROUND: #fdfdfd -$COLOR_TEXT: #222 -$COLOR_TEXT_ASIDE: #808080 -$COLOR_LINK: #4da6ff - -$COLOR_MENU_DIVIDER: #eee -$COLOR_MENU_DIVIDER_FOCUS: #000 -$COLOR_MENU_LABEL: #808080 - -$COLOR_PANEL: #fff -$COLOR_PANEL_DIVIDER: #eee - -$COLOR_COMMENT_TAG: #808080 -$COLOR_COMMENT_TAG_TEXT: #fff - -$COLOR_CODE_BACKGROUND: rgba(#000, 0.04) - -$COLOR_TS: #9600ff -$COLOR_TS_INTERFACE: #7da01f -$COLOR_TS_ENUM: #cc9900 -$COLOR_TS_CLASS: #4da6ff -$COLOR_TS_PRIVATE: #808080 - -$TOOLBAR_COLOR: #fff -$TOOLBAR_TEXT_COLOR: #333 -$TOOLBAR_HEIGHT: 40px \ No newline at end of file diff --git a/tools/doc/typedoc-theme/assets/css/elements/_comment.sass b/tools/doc/typedoc-theme/assets/css/elements/_comment.sass deleted file mode 100644 index 2c40e61c05..0000000000 --- a/tools/doc/typedoc-theme/assets/css/elements/_comment.sass +++ /dev/null @@ -1,53 +0,0 @@ -// Displays all regular comment tags -// -// -// -dl.tsd-comment-tags - overflow: hidden - - dt - float: left - padding: 1px 5px - margin: 0 10px 0 0 - border-radius: 4px - border: 1px solid $COLOR_COMMENT_TAG - color: $COLOR_COMMENT_TAG - font-size: 0.8em - font-weight: normal - - dd - margin: 0 0 10px 0 - - &:before, &:after - display: table - content: " " - pre, &:after - clear: both - - p - margin: 0 - - -// Special formatting for the main reflection on each page. -// -//
-//
-//

The default TypeDoc main application class.

-//

This class holds the two main components of TypeDoc, the Dispatcher and the Renderer.

-//
-//
-// -.tsd-panel.tsd-comment .lead - font-size: 1.1em - line-height: $LINE_HEIGHT - margin-bottom: 2em - - &:last-child - margin-bottom: 0 \ No newline at end of file diff --git a/tools/doc/typedoc-theme/assets/css/elements/_filter.sass b/tools/doc/typedoc-theme/assets/css/elements/_filter.sass deleted file mode 100644 index 12541540a8..0000000000 --- a/tools/doc/typedoc-theme/assets/css/elements/_filter.sass +++ /dev/null @@ -1,65 +0,0 @@ -// Classes set on the body to control the visible state of the filtered elements -// -.toggle-protected .tsd-is-private - display: none - -.toggle-public .tsd-is-private, -.toggle-public .tsd-is-protected, -.toggle-public .tsd-is-private-protected - display: none - -.toggle-inherited .tsd-is-inherited - display: none - -.toggle-only-exported .tsd-is-not-exported - display: none - -.toggle-externals .tsd-is-external - display: none - - -// Filter Buttons in the toolbar -// -#tsd-filter - position: relative - display: inline-block - height: $TOOLBAR_HEIGHT - vertical-align: bottom - - .no-filter & - display: none - - .tsd-filter-group - display: inline-block - height: $TOOLBAR_HEIGHT - vertical-align: bottom - white-space: nowrap - - input - display: none - - +size-xs-sm - .tsd-filter-group - display: block - position: absolute - top: $TOOLBAR_HEIGHT - right: 20px - height: auto - background-color: $COLOR_PANEL - visibility: hidden - transform: translate(50%,0) - box-shadow: 0 0 4px rgba(#000, 0.25) - - .has-options & - visibility: visible - - .to-has-options & - animation: fade-in 0.2s - - .from-has-options & - animation: fade-out 0.2s - - label, - .tsd-select - display: block - padding-right: 20px \ No newline at end of file diff --git a/tools/doc/typedoc-theme/assets/css/elements/_footer.sass b/tools/doc/typedoc-theme/assets/css/elements/_footer.sass deleted file mode 100644 index 9dd5925ef1..0000000000 --- a/tools/doc/typedoc-theme/assets/css/elements/_footer.sass +++ /dev/null @@ -1,21 +0,0 @@ -footer - border-top: 1px solid $COLOR_PANEL_DIVIDER - background-color: $COLOR_PANEL - - &.with-border-bottom - border-bottom: 1px solid $COLOR_PANEL_DIVIDER - - .tsd-legend-group - font-size: 0 - - .tsd-legend - display: inline-block - width: 25% - padding: 0 - font-size: $FONT_SIZE - list-style: none - line-height: $LINE_HEIGHT - vertical-align: top - - +size-xs-sm - width: 50% \ No newline at end of file diff --git a/tools/doc/typedoc-theme/assets/css/elements/_hierarchy.sass b/tools/doc/typedoc-theme/assets/css/elements/_hierarchy.sass deleted file mode 100644 index 891b52bb4c..0000000000 --- a/tools/doc/typedoc-theme/assets/css/elements/_hierarchy.sass +++ /dev/null @@ -1,24 +0,0 @@ -// Displays the type hierarchy -// -// -// -.tsd-hierarchy - list-style: square - padding: 0 0 0 20px - margin: 0 - - .target - font-weight: bold diff --git a/tools/doc/typedoc-theme/assets/css/elements/_images.sass b/tools/doc/typedoc-theme/assets/css/elements/_images.sass deleted file mode 100644 index 1fa3f017e7..0000000000 --- a/tools/doc/typedoc-theme/assets/css/elements/_images.sass +++ /dev/null @@ -1,3 +0,0 @@ -// fixes issue with images in readme -img - max-width: 100% diff --git a/tools/doc/typedoc-theme/assets/css/elements/_index.sass b/tools/doc/typedoc-theme/assets/css/elements/_index.sass deleted file mode 100644 index 4d4a0fc4e6..0000000000 --- a/tools/doc/typedoc-theme/assets/css/elements/_index.sass +++ /dev/null @@ -1,79 +0,0 @@ -// Displays an index of grouped links. -// -//
-//
-//
-//

Constructor methods

-// -//
-// -//
-//
-// -.tsd-index-panel - .tsd-index-content - margin-bottom: -30px !important - - .tsd-index-section - margin-bottom: 30px !important - - h3 - @extend h4 - margin: 0 -20px 10px -20px - padding: 0 20px 10px 20px - border-bottom: 1px solid $COLOR_PANEL_DIVIDER - - ul.tsd-index-list - +vendors(column-count, 3) - +vendors(column-gap, 20px) - padding: 0 - list-style: none - line-height: $LINE_HEIGHT - - +size-xs-sm - +vendors(column-count, 1) - - +size-md - +vendors(column-count, 2) - - li - +vendors(page-break-inside, avoid) - - a, - .tsd-parent-kind-module a - color: $COLOR_TS - - .tsd-parent-kind-interface a - color: $COLOR_TS_INTERFACE - - .tsd-parent-kind-enum a - color: $COLOR_TS_ENUM - - .tsd-parent-kind-class a - color: $COLOR_TS_CLASS - - - .tsd-kind-module a - color: $COLOR_TS - - .tsd-kind-interface a - color: $COLOR_TS_INTERFACE - - .tsd-kind-enum a - color: $COLOR_TS_ENUM - - .tsd-kind-class a - color: $COLOR_TS_CLASS - - .tsd-is-private a - color: $COLOR_TS_PRIVATE diff --git a/tools/doc/typedoc-theme/assets/css/elements/_member.sass b/tools/doc/typedoc-theme/assets/css/elements/_member.sass deleted file mode 100644 index f351833614..0000000000 --- a/tools/doc/typedoc-theme/assets/css/elements/_member.sass +++ /dev/null @@ -1,21 +0,0 @@ -.tsd-flag - display: inline-block - padding: 1px 5px - border-radius: 4px - color: $COLOR_COMMENT_TAG_TEXT - background-color: $COLOR_COMMENT_TAG - text-indent: 0 - font-size: $FONT_SIZE_MONO - font-weight: normal - -.tsd-anchor - position: absolute - top: -100px - -.tsd-member - position: relative - - .tsd-anchor + h3 - margin-top: 0 - margin-bottom: 0 - border-bottom: none diff --git a/tools/doc/typedoc-theme/assets/css/elements/_navigation.sass b/tools/doc/typedoc-theme/assets/css/elements/_navigation.sass deleted file mode 100644 index 3f71a44023..0000000000 --- a/tools/doc/typedoc-theme/assets/css/elements/_navigation.sass +++ /dev/null @@ -1,148 +0,0 @@ -// Base format for the navigation parts. -// -=INDENT($DEPTH, $BASE, $STEP, $PROGRESS:$DEPTH) - @if $PROGRESS > 0 - & li - +INDENT($DEPTH, $BASE, $STEP, $PROGRESS - 1) - @else - & a - padding-left: #{($BASE + $STEP * ($DEPTH - 1))}px - -=INDENTS($COUNT, $BASE, $STEP) - @for $DEPTH from 1 through $COUNT - +INDENT($DEPTH, $BASE, $STEP) - -.tsd-navigation - margin: 0 0 0 40px - - a - display: block - padding-top: 2px - padding-bottom: 2px - border-left: 2px solid transparent - color: $COLOR_TEXT - text-decoration: none - transition: border-left-color 0.1s - - &:hover - text-decoration: underline - - ul - margin: 0 - padding: 0 - list-style: none - - li - padding: 0 - - -// Primary part of the navigation containing the available modules. -// -// -// -.tsd-navigation.primary - padding-bottom: 40px - - a - display: block - padding-top: 6px - padding-bottom: 6px - - ul - +INDENTS(6, 5, 20) - - > ul - border-bottom: 1px solid $COLOR_PANEL_DIVIDER - - li - border-top: 1px solid $COLOR_PANEL_DIVIDER - - &.current > a - font-weight: bold - - &.label span - display: block - padding: 20px 0 6px 5px - color: $COLOR_MENU_LABEL - - &.globals + li > span, - &.globals + li > a - padding-top: 20px - - -// Secondary part of the navigation containing the table of contents -// of the current module. -// Can be made sticky by `typedoc.MenuSticky` and will highlight current sticky with `typedoc.MenuHighlight`. -// -// -// -.tsd-navigation.secondary - max-height: calc(100vh - 1rem - #{$TOOLBAR_HEIGHT}) - overflow: auto - position: -webkit-sticky - position: sticky - top: calc(.5rem + #{$TOOLBAR_HEIGHT}) - transition: .3s - - &.tsd-navigation--toolbar-hide - max-height: calc(100vh - 1rem) - top: .5rem - - ul - +INDENTS(6, 25, 20) - transition: opacity 0.2s - - &.current a - border-left-color: $COLOR_PANEL_DIVIDER - - li.focus > a, - ul.current li.focus > a - border-left-color: $COLOR_MENU_DIVIDER_FOCUS - - li.current - margin-top: 20px - margin-bottom: 20px - border-left-color: $COLOR_PANEL_DIVIDER - - > a - font-weight: bold - - -// Sticky menu setup -// -.menu-sticky-wrap - +size-md-lg - position: static diff --git a/tools/doc/typedoc-theme/assets/css/elements/_panel.sass b/tools/doc/typedoc-theme/assets/css/elements/_panel.sass deleted file mode 100644 index 82ae3d5119..0000000000 --- a/tools/doc/typedoc-theme/assets/css/elements/_panel.sass +++ /dev/null @@ -1,70 +0,0 @@ -// Displays a panel, an organisation unit in TypeDoc used to group single entities -// like a method or a variable. -// -//
-//

Eirmod tempor invidunt

-//

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.

-//
-// -.tsd-panel - @extend %prevent-children-margin - margin: 20px 0 - padding: 20px - background-color: $COLOR_PANEL - box-shadow: 0 0 4px rgba(#000, 0.25) - - &:empty - display: none - - > h1, > h2, > h3 - margin: 1.5em -20px 10px -20px - padding: 0 20px 10px 20px - border-bottom: 1px solid $COLOR_PANEL_DIVIDER - - &.tsd-before-signature - margin-bottom: 0 - border-bottom: 0 - - table - display: block - width: 100% - overflow: auto - margin-top: 10px - word-break: normal - word-break: keep-all - - th - font-weight: bold - - th, td - padding: 6px 13px - border: 1px solid #ddd - - tr - background-color: #fff - border-top: 1px solid #ccc - - &:nth-child(2n) - background-color: #f8f8f8 - - -// Holds a series of panels with an optional heading. -// -//
-//

Consetetur sadipscing elitr

-//
-//

Eirmod tempor invidunt

-//

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.

-//
-//
-//

Eirmod tempor invidunt

-//

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.

-//
-//
-// -.tsd-panel-group - margin: 60px 0 - - > h1, > h2, > h3 - padding-left: 20px - padding-right: 20px \ No newline at end of file diff --git a/tools/doc/typedoc-theme/assets/css/elements/_search.sass b/tools/doc/typedoc-theme/assets/css/elements/_search.sass deleted file mode 100644 index be33a9f9fc..0000000000 --- a/tools/doc/typedoc-theme/assets/css/elements/_search.sass +++ /dev/null @@ -1,89 +0,0 @@ -#tsd-search - transition: background-color 0.2s - - .title - position: relative - z-index: 2 - - .field - position: absolute - left: 0 - top: 0 - right: 40px - height: 40px - - input - box-sizing: border-box - position: relative - top: -50px - z-index: 1 - width: 100% - padding: 0 10px - opacity: 0 - outline: 0 - border: 0 - background: transparent - color: $COLOR_TEXT - - label - position: absolute - overflow: hidden - right: -40px - - .field input, - .title - transition: opacity 0.2s - - .results - position: absolute - visibility: hidden - top: 40px - width: 100% - margin: 0 - padding: 0 - list-style: none - box-shadow: 0 0 4px rgba(#000, 0.25) - - li - padding: 0 10px - background-color: $COLOR_BACKGROUND - - li:nth-child(even) - background-color: $COLOR_PANEL - - li.state - display: none - - li.current, - li:hover - background-color: $COLOR_PANEL_DIVIDER - - a - display: block - - &:before - top: 10px - - span.parent - color: $COLOR_TEXT_ASIDE - font-weight: normal - - &.has-focus - background-color: $COLOR_PANEL_DIVIDER - - .field input - top: 0 - opacity: 1 - - .title - z-index: 0 - opacity: 0 - - .results - visibility: visible - - &.loading .results li.state.loading - display: block - - &.failure .results li.state.failure - display: block diff --git a/tools/doc/typedoc-theme/assets/css/elements/_signatures.sass b/tools/doc/typedoc-theme/assets/css/elements/_signatures.sass deleted file mode 100644 index 73fb413b4e..0000000000 --- a/tools/doc/typedoc-theme/assets/css/elements/_signatures.sass +++ /dev/null @@ -1,152 +0,0 @@ -// Wraps a function signature. -// Changes its appearance when directly placed inside a `tsd-panel`. -// Can be combined with class `tsd-kind-icon` to display an icon in front of the signature. -// -//
-//
-// getChildByName( -// name: string -// ): -// DeclarationReflection -//
-//
-// -.tsd-signature - margin: 0 0 1em 0 - padding: 10px - border: 1px solid $COLOR_PANEL_DIVIDER - font-family: $FONT_FAMILY_MONO - font-size: $FONT_SIZE_MONO - overflow-x: auto - - &.tsd-kind-icon - padding-left: 30px - - &:before - top: 10px - left: 10px - - .tsd-panel > & - margin-left: -20px - margin-right: -20px - border-width: 1px 0 - - &.tsd-kind-icon - padding-left: 40px - - &:before - left: 20px - -.tsd-signature-symbol - color: $COLOR_TEXT_ASIDE - font-weight: normal - -.tsd-signature-type - font-style: italic - font-weight: normal - - -// Displays a list of signatures. -// Changes its appearance when directly placed inside a `tsd-panel`. -// Made interactive by JavaScript at `typedoc.Signature`. -// -//
    -//
  • getChildByName(name: string): DeclarationReflection
  • -//
  • getChildByName(names: Array<string>): DeclarationReflection
  • -//
-// -.tsd-signatures - padding: 0 - margin: 0 0 1em 0 - border: 1px solid $COLOR_PANEL_DIVIDER - - .tsd-signature - margin: 0 - border-width: 1px 0 0 0 - transition: background-color 0.1s - - &:first-child - border-top-width: 0 - - &.current - background-color: $COLOR_PANEL_DIVIDER - - &.active > .tsd-signature - cursor: pointer - - .tsd-panel > & - margin-left: -20px - margin-right: -20px - border-width: 1px 0 - - .tsd-signature.tsd-kind-icon - padding-left: 40px - - &:before - left: 20px - - .tsd-panel > a.anchor + & - border-top-width: 0 - margin-top: -20px - - -// Holds the descriptions related to a list of signatures. -// Made interactive by JavaScript at `typedoc.Signature`. -// -//
    -//
  • -//

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.

    -//
  • -//
  • -//

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.

    -//
  • -//
-// -ul.tsd-descriptions - position: relative - overflow: hidden - padding: 0 - list-style: none - - > li - @extend %prevent-children-margin - - &.active > .tsd-description - display: none - - &.current - display: block - - &.fade-in - animation: fade-in-delayed 0.3s - - &.fade-out - animation: fade-out-delayed 0.3s - position: absolute - display: block - top: 0 - left: 0 - right: 0 - opacity: 0 - visibility: hidden - - h4 - font-size: $FONT_SIZE - margin: 1em 0 0.5em 0 - -ul.tsd-parameters, -ul.tsd-type-parameters - list-style: square - margin: 0 - padding-left: 20px - - > li.tsd-parameter-signature - list-style: none - margin-left: -20px - - h5 - font-size: $FONT_SIZE - margin: 1em 0 0.5em 0 - - .tsd-comment - margin-top: -0.5em diff --git a/tools/doc/typedoc-theme/assets/css/elements/_sources.sass b/tools/doc/typedoc-theme/assets/css/elements/_sources.sass deleted file mode 100644 index 913193897e..0000000000 --- a/tools/doc/typedoc-theme/assets/css/elements/_sources.sass +++ /dev/null @@ -1,24 +0,0 @@ -// Displays the source and inheritance information -// -// -// -.tsd-sources - font-size: $FONT_SIZE_MONO - color: $COLOR_TEXT_ASIDE - margin: 0 0 1em 0 - - a - color: $COLOR_TEXT_ASIDE - text-decoration: underline - - ul, p - margin: 0 !important - - ul - list-style: none - padding: 0 \ No newline at end of file diff --git a/tools/doc/typedoc-theme/assets/css/elements/_toolbar.sass b/tools/doc/typedoc-theme/assets/css/elements/_toolbar.sass deleted file mode 100644 index 7d7784fe7f..0000000000 --- a/tools/doc/typedoc-theme/assets/css/elements/_toolbar.sass +++ /dev/null @@ -1,175 +0,0 @@ -// Displays the toolbar at the top of the page. -// -//
-//
-//
-// -//
-//
-//
-// -.tsd-page-toolbar - position: fixed - z-index: 1 - top: 0 - left: 0 - width: 100% - height: $TOOLBAR_HEIGHT - color: $TOOLBAR_TEXT_COLOR - background: $TOOLBAR_COLOR - border-bottom: 1px solid $COLOR_PANEL_DIVIDER - transition: transform .3s linear - - a - color: $TOOLBAR_TEXT_COLOR - text-decoration: none - - &.title - font-weight: bold - - &.title:hover - text-decoration: underline - - .table-wrap - display: table - width: 100% - height: $TOOLBAR_HEIGHT - - .table-cell - display: table-cell - position: relative - white-space: nowrap - line-height: $TOOLBAR_HEIGHT - - &:first-child - width: 100% - -.tsd-page-toolbar--hide - transform: translateY(-100%) - -%TSD_WIDGET_ICON - &:before - content: '' - display: inline-block - width: 40px - height: 40px - margin: 0 -8px 0 0 - background-image: url(../images/widgets.png) - background-repeat: no-repeat - text-indent: -1024px - vertical-align: bottom - - +retina - background-image: url(../images/widgets@2x.png) - background-size: 320px 40px - -.tsd-widget - @extend %TSD_WIDGET_ICON - display: inline-block - overflow: hidden - opacity: 0.6 - height: $TOOLBAR_HEIGHT - transition: opacity 0.1s, background-color 0.2s - vertical-align: bottom - cursor: pointer - - &:hover - opacity: 0.8 - - &.active - opacity: 1 - background-color: $COLOR_PANEL_DIVIDER - - &.no-caption - width: 40px - - &:before - margin: 0 - - &.search:before - background-position: 0 0 - - &.menu:before - background-position: -40px 0 - - &.options:before - background-position: -80px 0 - - &.options, - &.menu - display: none - - +size-xs-sm - display: inline-block - - input[type=checkbox] + &:before - background-position: -120px 0 - - input[type=checkbox]:checked + &:before - background-position: -160px 0 - -.tsd-select - position: relative - display: inline-block - height: $TOOLBAR_HEIGHT - transition: opacity 0.1s, background-color 0.2s - vertical-align: bottom - cursor: pointer - - .tsd-select-label - @extend %TSD_WIDGET_ICON - opacity: 0.6 - transition: opacity 0.2s - - &:before - background-position: -240px 0 - - &.active - .tsd-select-label - opacity: 0.8 - - .tsd-select-list - visibility: visible - opacity: 1 - transition-delay: 0s - - .tsd-select-list - position: absolute - visibility: hidden - top: $TOOLBAR_HEIGHT - left: 0 - margin: 0 - padding: 0 - opacity: 0 - list-style: none - box-shadow: 0 0 4px rgba(#000, 0.25) - transition: visibility 0s 0.2s, opacity 0.2s - - li - @extend %TSD_WIDGET_ICON - padding: 0 20px 0 0 - background-color: $COLOR_BACKGROUND - - &:before - background-position: 40px 0 - - &:nth-child(even) - background-color: $COLOR_PANEL - - &:hover - background-color: $COLOR_PANEL_DIVIDER - - &.selected:before - background-position: -200px 0 - - +size-xs-sm - .tsd-select-list - top: 0 - left: auto - right: 100% - margin-right: -5px - - .tsd-select-label:before - background-position: -280px 0 \ No newline at end of file diff --git a/tools/doc/typedoc-theme/assets/css/layouts/_default.sass b/tools/doc/typedoc-theme/assets/css/layouts/_default.sass deleted file mode 100644 index 9bf0249885..0000000000 --- a/tools/doc/typedoc-theme/assets/css/layouts/_default.sass +++ /dev/null @@ -1,113 +0,0 @@ -html.default - +size-md - .col-content - width: 72% - - .col-menu - width: 28% - - .tsd-navigation - padding-left: 10px - - +size-xs-sm - .col-content - float: none - width: 100% - - .col-menu - position: fixed !important - overflow: auto - -webkit-overflow-scrolling: touch - z-index: 1024 - top: 0 !important - bottom: 0 !important - left: auto !important - right: 0 !important - width: 100% - padding: 20px 20px 0 0 - max-width: 450px - visibility: hidden - background-color: $COLOR_PANEL - transform: translate(100%,0) - - > *:last-child - padding-bottom: 20px - - .overlay - content: '' - display: block - position: fixed - z-index: 1023 - top: 0 - left: 0 - right: 0 - bottom: 0 - background-color: rgba(#000, 0.75) - visibility: hidden - - &.to-has-menu - .overlay - animation: fade-in 0.4s - - header, - footer, - .col-content - animation: shift-to-left 0.4s - - .col-menu - animation: pop-in-from-right 0.4s - - &.from-has-menu - .overlay - animation: fade-out 0.4s - - header, - footer, - .col-content - animation: unshift-to-left 0.4s - - .col-menu - animation: pop-out-to-right 0.4s - - &.has-menu - body - overflow: hidden - - .overlay - visibility: visible - - header, - footer, - .col-content - transform: translate(-25%, 0) - - .col-menu - visibility: visible - transform: translate(0,0) - -.tsd-page-title - padding: 70px 0 20px 0 - margin: 0 0 40px 0 - background: $COLOR_PANEL - box-shadow: 0 0 5px rgba(#000, 0.35) - - h1 - margin: 0 - -.tsd-breadcrumb - margin: 0 - padding: 0 - color: $COLOR_TEXT_ASIDE - - a - color: $COLOR_TEXT_ASIDE - text-decoration: none - - &:hover - text-decoration: underline - - li - display: inline - - &:after - content: ' / ' diff --git a/tools/doc/typedoc-theme/assets/css/layouts/_minimal.sass b/tools/doc/typedoc-theme/assets/css/layouts/_minimal.sass deleted file mode 100644 index 37484f0d98..0000000000 --- a/tools/doc/typedoc-theme/assets/css/layouts/_minimal.sass +++ /dev/null @@ -1,49 +0,0 @@ -html.minimal - .container - margin: 0 - - .container-main - padding-top: 50px - padding-bottom: 0 - - .content-wrap - padding-left: 300px - - .tsd-navigation - position: fixed !important - overflow: auto - -webkit-overflow-scrolling: touch - box-sizing: border-box - z-index: 1 - left: 0 - top: 40px - bottom: 0 - width: 300px - padding: 20px - margin: 0 - - .tsd-member .tsd-member - margin-left: 0 - - .tsd-page-toolbar - position: fixed - z-index: 2 - - #tsd-filter .tsd-filter-group - right: 0 - transform: none - - footer - background-color: transparent - - .container - padding: 0 - - .tsd-generator - padding: 0 - - +size-xs-sm - .tsd-navigation - display: none - .content-wrap - padding-left: 0 diff --git a/tools/doc/typedoc-theme/assets/css/main.css b/tools/doc/typedoc-theme/assets/css/main.css new file mode 100644 index 0000000000..01cd747daf --- /dev/null +++ b/tools/doc/typedoc-theme/assets/css/main.css @@ -0,0 +1,2632 @@ +/*! normalize.css v1.1.3 | MIT License | git.io/normalize */ +/* ========================================================================== + * * HTML5 display definitions + * * ========================================================================== */ +/** + * * Correct `block` display not defined in IE 6/7/8/9 and Firefox 3. */ +article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { + display: block; +} + +/** + * * Correct `inline-block` display not defined in IE 6/7/8/9 and Firefox 3. */ +audio, canvas, video { + display: inline-block; + *display: inline; + *zoom: 1; +} + +/** + * * Prevent modern browsers from displaying `audio` without controls. + * * Remove excess height in iOS 5 devices. */ +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * * Address styling not present in IE 7/8/9, Firefox 3, and Safari 4. + * * Known issue: no IE 6 support. */ +[hidden] { + display: none; +} + +/* ========================================================================== + * * Base + * * ========================================================================== */ +/** + * * 1. Correct text resizing oddly in IE 6/7 when body `font-size` is set using + * * `em` units. + * * 2. Prevent iOS text size adjust after orientation change, without disabling + * * user zoom. */ +html { + font-size: 100%; + /* 1 */ + -ms-text-size-adjust: 100%; + /* 2 */ + -webkit-text-size-adjust: 100%; + /* 2 */ + font-family: sans-serif; +} + +/** + * * Address `font-family` inconsistency between `textarea` and other form + * * elements. */ +button, input, select, textarea { + font-family: sans-serif; +} + +/** + * * Address margins handled incorrectly in IE 6/7. */ +body { + margin: 0; +} + +/* ========================================================================== + * * Links + * * ========================================================================== */ +/** + * * Address `outline` inconsistency between Chrome and other browsers. */ +a:focus { + outline: thin dotted; +} +a:active, a:hover { + outline: 0; +} + +/** + * * Improve readability when focused and also mouse hovered in all browsers. */ +/* ========================================================================== + * * Typography + * * ========================================================================== */ +/** + * * Address font sizes and margins set differently in IE 6/7. + * * Address font sizes within `section` and `article` in Firefox 4+, Safari 5, + * * and Chrome. */ +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +h2 { + font-size: 1.5em; + margin: 0.83em 0; +} + +h3 { + font-size: 1.17em; + margin: 1em 0; +} + +h4, .tsd-index-panel h3 { + font-size: 1em; + margin: 1.33em 0; +} + +h5 { + font-size: 0.83em; + margin: 1.67em 0; +} + +h6 { + font-size: 0.67em; + margin: 2.33em 0; +} + +/** + * * Address styling not present in IE 7/8/9, Safari 5, and Chrome. */ +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * * Address style set to `bolder` in Firefox 3+, Safari 4/5, and Chrome. */ +b, strong { + font-weight: bold; +} + +blockquote { + margin: 1em 40px; +} + +/** + * * Address styling not present in Safari 5 and Chrome. */ +dfn { + font-style: italic; +} + +/** + * * Address differences between Firefox and other browsers. + * * Known issue: no IE 6/7 normalization. */ +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/** + * * Address styling not present in IE 6/7/8/9. */ +mark { + background: #ff0; + color: #000; +} + +/** + * * Address margins set differently in IE 6/7. */ +p, pre { + margin: 1em 0; +} + +/** + * * Correct font family set oddly in IE 6, Safari 4/5, and Chrome. */ +code, kbd, pre, samp { + font-family: monospace, serif; + _font-family: "courier new", monospace; + font-size: 1em; +} + +/** + * * Improve readability of pre-formatted text in all browsers. */ +pre { + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} + +/** + * * Address CSS quotes not supported in IE 6/7. */ +q { + quotes: none; +} +q:before, q:after { + content: ""; + content: none; +} + +/** + * * Address `quotes` property not supported in Safari 4. */ +/** + * * Address inconsistent and variable font size in all browsers. */ +small { + font-size: 80%; +} + +/** + * * Prevent `sub` and `sup` affecting `line-height` in all browsers. */ +sub { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* ========================================================================== + * * Lists + * * ========================================================================== */ +/** + * * Address margins set differently in IE 6/7. */ +dl, menu, ol, ul { + margin: 1em 0; +} + +dd { + margin: 0 0 0 40px; +} + +/** + * * Address paddings set differently in IE 6/7. */ +menu, ol, ul { + padding: 0 0 0 40px; +} + +/** + * * Correct list images handled incorrectly in IE 7. */ +nav ul, nav ol { + list-style: none; + list-style-image: none; +} + +/* ========================================================================== + * * Embedded content + * * ========================================================================== */ +/** + * * 1. Remove border when inside `a` element in IE 6/7/8/9 and Firefox 3. + * * 2. Improve image quality when scaled in IE 7. */ +img { + border: 0; + /* 1 */ + -ms-interpolation-mode: bicubic; +} + +/* 2 */ +/** + * * Correct overflow displayed oddly in IE 9. */ +svg:not(:root) { + overflow: hidden; +} + +/* ========================================================================== + * * Figures + * * ========================================================================== */ +/** + * * Address margin not present in IE 6/7/8/9, Safari 5, and Opera 11. */ +figure, form { + margin: 0; +} + +/* ========================================================================== + * * Forms + * * ========================================================================== */ +/** + * * Correct margin displayed oddly in IE 6/7. */ +/** + * * Define consistent border, margin, and padding. */ +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * * 1. Correct color not being inherited in IE 6/7/8/9. + * * 2. Correct text not wrapping in Firefox 3. + * * 3. Correct alignment displayed oddly in IE 6/7. */ +legend { + border: 0; + /* 1 */ + padding: 0; + white-space: normal; + /* 2 */ + *margin-left: -7px; +} + +/* 3 */ +/** + * * 1. Correct font size not being inherited in all browsers. + * * 2. Address margins set differently in IE 6/7, Firefox 3+, Safari 5, + * * and Chrome. + * * 3. Improve appearance and consistency in all browsers. */ +button, input, select, textarea { + font-size: 100%; + /* 1 */ + margin: 0; + /* 2 */ + vertical-align: baseline; + /* 3 */ + *vertical-align: middle; +} + +/* 3 */ +/** + * * Address Firefox 3+ setting `line-height` on `input` using `!important` in + * * the UA stylesheet. */ +button, input { + line-height: normal; +} + +/** + * * Address inconsistent `text-transform` inheritance for `button` and `select`. + * * All other form control elements do not inherit `text-transform` values. + * * Correct `button` style inheritance in Chrome, Safari 5+, and IE 6+. + * * Correct `select` style inheritance in Firefox 4+ and Opera. */ +button, select { + text-transform: none; +} + +/** + * * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * * and `video` controls. + * * 2. Correct inability to style clickable `input` types in iOS. + * * 3. Improve usability and consistency of cursor style between image-type + * * `input` and others. + * * 4. Remove inner spacing in IE 7 without affecting normal text inputs. + * * Known issue: inner spacing remains in IE 6. */ +button, html input[type=button] { + -webkit-appearance: button; + /* 2 */ + cursor: pointer; + /* 3 */ + *overflow: visible; +} + +/* 4 */ +input[type=reset], input[type=submit] { + -webkit-appearance: button; + /* 2 */ + cursor: pointer; + /* 3 */ + *overflow: visible; +} + +/* 4 */ +/** + * * Re-set default cursor for disabled elements. */ +button[disabled], html input[disabled] { + cursor: default; +} + +/** + * * 1. Address box sizing set to content-box in IE 8/9. + * * 2. Remove excess padding in IE 8/9. + * * 3. Remove excess padding in IE 7. + * * Known issue: excess padding remains in IE 6. */ +input { + /* 3 */ +} +input[type=checkbox], input[type=radio] { + box-sizing: border-box; + /* 1 */ + padding: 0; + /* 2 */ + *height: 13px; + /* 3 */ + *width: 13px; +} +input[type=search] { + -webkit-appearance: textfield; + /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + /* 2 */ + box-sizing: content-box; +} +input[type=search]::-webkit-search-cancel-button, input[type=search]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. + * * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome + * * (include `-moz` to future-proof). */ +/** + * * Remove inner padding and search cancel button in Safari 5 and Chrome + * * on OS X. */ +/** + * * Remove inner padding and border in Firefox 3+. */ +button::-moz-focus-inner, input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * * 1. Remove default vertical scrollbar in IE 6/7/8/9. + * * 2. Improve readability and alignment in all browsers. */ +textarea { + overflow: auto; + /* 1 */ + vertical-align: top; +} + +/* 2 */ +/* ========================================================================== + * * Tables + * * ========================================================================== */ +/** + * * Remove most spacing between table cells. */ +table { + border-collapse: collapse; + border-spacing: 0; +} + +ul.tsd-descriptions > li > :first-child, .tsd-panel > :first-child, .col > :first-child, .col-11 > :first-child, .col-10 > :first-child, .col-9 > :first-child, .col-8 > :first-child, .col-7 > :first-child, .col-6 > :first-child, .col-5 > :first-child, .col-4 > :first-child, .col-3 > :first-child, .col-2 > :first-child, .col-1 > :first-child, +ul.tsd-descriptions > li > :first-child > :first-child, +.tsd-panel > :first-child > :first-child, +.col > :first-child > :first-child, +.col-11 > :first-child > :first-child, +.col-10 > :first-child > :first-child, +.col-9 > :first-child > :first-child, +.col-8 > :first-child > :first-child, +.col-7 > :first-child > :first-child, +.col-6 > :first-child > :first-child, +.col-5 > :first-child > :first-child, +.col-4 > :first-child > :first-child, +.col-3 > :first-child > :first-child, +.col-2 > :first-child > :first-child, +.col-1 > :first-child > :first-child, +ul.tsd-descriptions > li > :first-child > :first-child > :first-child, +.tsd-panel > :first-child > :first-child > :first-child, +.col > :first-child > :first-child > :first-child, +.col-11 > :first-child > :first-child > :first-child, +.col-10 > :first-child > :first-child > :first-child, +.col-9 > :first-child > :first-child > :first-child, +.col-8 > :first-child > :first-child > :first-child, +.col-7 > :first-child > :first-child > :first-child, +.col-6 > :first-child > :first-child > :first-child, +.col-5 > :first-child > :first-child > :first-child, +.col-4 > :first-child > :first-child > :first-child, +.col-3 > :first-child > :first-child > :first-child, +.col-2 > :first-child > :first-child > :first-child, +.col-1 > :first-child > :first-child > :first-child { + margin-top: 0; +} +ul.tsd-descriptions > li > :last-child, .tsd-panel > :last-child, .col > :last-child, .col-11 > :last-child, .col-10 > :last-child, .col-9 > :last-child, .col-8 > :last-child, .col-7 > :last-child, .col-6 > :last-child, .col-5 > :last-child, .col-4 > :last-child, .col-3 > :last-child, .col-2 > :last-child, .col-1 > :last-child, +ul.tsd-descriptions > li > :last-child > :last-child, +.tsd-panel > :last-child > :last-child, +.col > :last-child > :last-child, +.col-11 > :last-child > :last-child, +.col-10 > :last-child > :last-child, +.col-9 > :last-child > :last-child, +.col-8 > :last-child > :last-child, +.col-7 > :last-child > :last-child, +.col-6 > :last-child > :last-child, +.col-5 > :last-child > :last-child, +.col-4 > :last-child > :last-child, +.col-3 > :last-child > :last-child, +.col-2 > :last-child > :last-child, +.col-1 > :last-child > :last-child, +ul.tsd-descriptions > li > :last-child > :last-child > :last-child, +.tsd-panel > :last-child > :last-child > :last-child, +.col > :last-child > :last-child > :last-child, +.col-11 > :last-child > :last-child > :last-child, +.col-10 > :last-child > :last-child > :last-child, +.col-9 > :last-child > :last-child > :last-child, +.col-8 > :last-child > :last-child > :last-child, +.col-7 > :last-child > :last-child > :last-child, +.col-6 > :last-child > :last-child > :last-child, +.col-5 > :last-child > :last-child > :last-child, +.col-4 > :last-child > :last-child > :last-child, +.col-3 > :last-child > :last-child > :last-child, +.col-2 > :last-child > :last-child > :last-child, +.col-1 > :last-child > :last-child > :last-child { + margin-bottom: 0; +} + +.container { + max-width: 1200px; + margin: 0 auto; + padding: 0 40px; +} +@media (max-width: 640px) { + .container { + padding: 0 20px; + } +} + +.container-main { + padding-bottom: 200px; +} + +.row { + display: flex; + position: relative; + margin: 0 -10px; +} +.row:after { + visibility: hidden; + display: block; + content: ""; + clear: both; + height: 0; +} + +.col, .col-11, .col-10, .col-9, .col-8, .col-7, .col-6, .col-5, .col-4, .col-3, .col-2, .col-1 { + box-sizing: border-box; + float: left; + padding: 0 10px; +} + +.col-1 { + width: 8.3333333333%; +} + +.offset-1 { + margin-left: 8.3333333333%; +} + +.col-2 { + width: 16.6666666667%; +} + +.offset-2 { + margin-left: 16.6666666667%; +} + +.col-3 { + width: 25%; +} + +.offset-3 { + margin-left: 25%; +} + +.col-4 { + width: 33.3333333333%; +} + +.offset-4 { + margin-left: 33.3333333333%; +} + +.col-5 { + width: 41.6666666667%; +} + +.offset-5 { + margin-left: 41.6666666667%; +} + +.col-6 { + width: 50%; +} + +.offset-6 { + margin-left: 50%; +} + +.col-7 { + width: 58.3333333333%; +} + +.offset-7 { + margin-left: 58.3333333333%; +} + +.col-8 { + width: 66.6666666667%; +} + +.offset-8 { + margin-left: 66.6666666667%; +} + +.col-9 { + width: 75%; +} + +.offset-9 { + margin-left: 75%; +} + +.col-10 { + width: 83.3333333333%; +} + +.offset-10 { + margin-left: 83.3333333333%; +} + +.col-11 { + width: 91.6666666667%; +} + +.offset-11 { + margin-left: 91.6666666667%; +} + +.tsd-kind-icon { + display: block; + position: relative; + padding-left: 20px; + text-indent: -20px; +} +.tsd-kind-icon:before { + content: ""; + display: inline-block; + vertical-align: middle; + width: 17px; + height: 17px; + margin: 0 3px 2px 0; + background-image: url(../images/icons.png); +} +@media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) { + .tsd-kind-icon:before { + background-image: url(../images/icons@2x.png); + background-size: 238px 204px; + } +} + +.tsd-signature.tsd-kind-icon:before { + background-position: 0 -153px; +} + +.tsd-kind-object-literal > .tsd-kind-icon:before { + background-position: 0px -17px; +} +.tsd-kind-object-literal.tsd-is-protected > .tsd-kind-icon:before { + background-position: -17px -17px; +} +.tsd-kind-object-literal.tsd-is-private > .tsd-kind-icon:before { + background-position: -34px -17px; +} + +.tsd-kind-class > .tsd-kind-icon:before { + background-position: 0px -34px; +} +.tsd-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -17px -34px; +} +.tsd-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -34px -34px; +} + +.tsd-kind-class.tsd-has-type-parameter > .tsd-kind-icon:before { + background-position: 0px -51px; +} +.tsd-kind-class.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before { + background-position: -17px -51px; +} +.tsd-kind-class.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before { + background-position: -34px -51px; +} + +.tsd-kind-interface > .tsd-kind-icon:before { + background-position: 0px -68px; +} +.tsd-kind-interface.tsd-is-protected > .tsd-kind-icon:before { + background-position: -17px -68px; +} +.tsd-kind-interface.tsd-is-private > .tsd-kind-icon:before { + background-position: -34px -68px; +} + +.tsd-kind-interface.tsd-has-type-parameter > .tsd-kind-icon:before { + background-position: 0px -85px; +} +.tsd-kind-interface.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before { + background-position: -17px -85px; +} +.tsd-kind-interface.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before { + background-position: -34px -85px; +} + +.tsd-kind-namespace > .tsd-kind-icon:before { + background-position: 0px -102px; +} +.tsd-kind-namespace.tsd-is-protected > .tsd-kind-icon:before { + background-position: -17px -102px; +} +.tsd-kind-namespace.tsd-is-private > .tsd-kind-icon:before { + background-position: -34px -102px; +} + +.tsd-kind-module > .tsd-kind-icon:before { + background-position: 0px -102px; +} +.tsd-kind-module.tsd-is-protected > .tsd-kind-icon:before { + background-position: -17px -102px; +} +.tsd-kind-module.tsd-is-private > .tsd-kind-icon:before { + background-position: -34px -102px; +} + +.tsd-kind-enum > .tsd-kind-icon:before { + background-position: 0px -119px; +} +.tsd-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -17px -119px; +} +.tsd-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -34px -119px; +} + +.tsd-kind-enum-member > .tsd-kind-icon:before { + background-position: 0px -136px; +} +.tsd-kind-enum-member.tsd-is-protected > .tsd-kind-icon:before { + background-position: -17px -136px; +} +.tsd-kind-enum-member.tsd-is-private > .tsd-kind-icon:before { + background-position: -34px -136px; +} + +.tsd-kind-signature > .tsd-kind-icon:before { + background-position: 0px -153px; +} +.tsd-kind-signature.tsd-is-protected > .tsd-kind-icon:before { + background-position: -17px -153px; +} +.tsd-kind-signature.tsd-is-private > .tsd-kind-icon:before { + background-position: -34px -153px; +} + +.tsd-kind-type-alias > .tsd-kind-icon:before { + background-position: 0px -170px; +} +.tsd-kind-type-alias.tsd-is-protected > .tsd-kind-icon:before { + background-position: -17px -170px; +} +.tsd-kind-type-alias.tsd-is-private > .tsd-kind-icon:before { + background-position: -34px -170px; +} + +.tsd-kind-type-alias.tsd-has-type-parameter > .tsd-kind-icon:before { + background-position: 0px -187px; +} +.tsd-kind-type-alias.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before { + background-position: -17px -187px; +} +.tsd-kind-type-alias.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before { + background-position: -34px -187px; +} + +.tsd-kind-variable > .tsd-kind-icon:before { + background-position: -136px -0px; +} +.tsd-kind-variable.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -0px; +} +.tsd-kind-variable.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -0px; +} +.tsd-kind-variable.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -0px; +} +.tsd-kind-variable.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -0px; +} +.tsd-kind-variable.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -0px; +} +.tsd-kind-variable.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -0px; +} +.tsd-kind-variable.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -0px; +} +.tsd-kind-variable.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -0px; +} +.tsd-kind-variable.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -0px; +} +.tsd-kind-variable.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -0px; +} +.tsd-kind-variable.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -0px; +} +.tsd-kind-variable.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -0px; +} + +.tsd-kind-property > .tsd-kind-icon:before { + background-position: -136px -0px; +} +.tsd-kind-property.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -0px; +} +.tsd-kind-property.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -0px; +} +.tsd-kind-property.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -0px; +} +.tsd-kind-property.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -0px; +} +.tsd-kind-property.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -0px; +} +.tsd-kind-property.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -0px; +} +.tsd-kind-property.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -0px; +} +.tsd-kind-property.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -0px; +} +.tsd-kind-property.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -0px; +} +.tsd-kind-property.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -0px; +} +.tsd-kind-property.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -0px; +} +.tsd-kind-property.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -0px; +} + +.tsd-kind-get-signature > .tsd-kind-icon:before { + background-position: -136px -17px; +} +.tsd-kind-get-signature.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -17px; +} +.tsd-kind-get-signature.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -17px; +} +.tsd-kind-get-signature.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -17px; +} +.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -17px; +} +.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -17px; +} +.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -17px; +} +.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -17px; +} +.tsd-kind-get-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -17px; +} +.tsd-kind-get-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -17px; +} +.tsd-kind-get-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -17px; +} +.tsd-kind-get-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -17px; +} +.tsd-kind-get-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -17px; +} + +.tsd-kind-set-signature > .tsd-kind-icon:before { + background-position: -136px -34px; +} +.tsd-kind-set-signature.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -34px; +} +.tsd-kind-set-signature.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -34px; +} +.tsd-kind-set-signature.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -34px; +} +.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -34px; +} +.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -34px; +} +.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -34px; +} +.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -34px; +} +.tsd-kind-set-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -34px; +} +.tsd-kind-set-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -34px; +} +.tsd-kind-set-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -34px; +} +.tsd-kind-set-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -34px; +} +.tsd-kind-set-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -34px; +} + +.tsd-kind-accessor > .tsd-kind-icon:before { + background-position: -136px -51px; +} +.tsd-kind-accessor.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -51px; +} +.tsd-kind-accessor.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -51px; +} +.tsd-kind-accessor.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -51px; +} +.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -51px; +} +.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -51px; +} +.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -51px; +} +.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -51px; +} +.tsd-kind-accessor.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -51px; +} +.tsd-kind-accessor.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -51px; +} +.tsd-kind-accessor.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -51px; +} +.tsd-kind-accessor.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -51px; +} +.tsd-kind-accessor.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -51px; +} + +.tsd-kind-function > .tsd-kind-icon:before { + background-position: -136px -68px; +} +.tsd-kind-function.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -68px; +} +.tsd-kind-function.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -68px; +} +.tsd-kind-function.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -68px; +} +.tsd-kind-function.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -68px; +} +.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -68px; +} +.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -68px; +} +.tsd-kind-function.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -68px; +} +.tsd-kind-function.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -68px; +} +.tsd-kind-function.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -68px; +} +.tsd-kind-function.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -68px; +} +.tsd-kind-function.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -68px; +} +.tsd-kind-function.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -68px; +} + +.tsd-kind-method > .tsd-kind-icon:before { + background-position: -136px -68px; +} +.tsd-kind-method.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -68px; +} +.tsd-kind-method.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -68px; +} +.tsd-kind-method.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -68px; +} +.tsd-kind-method.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -68px; +} +.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -68px; +} +.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -68px; +} +.tsd-kind-method.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -68px; +} +.tsd-kind-method.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -68px; +} +.tsd-kind-method.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -68px; +} +.tsd-kind-method.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -68px; +} +.tsd-kind-method.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -68px; +} +.tsd-kind-method.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -68px; +} + +.tsd-kind-call-signature > .tsd-kind-icon:before { + background-position: -136px -68px; +} +.tsd-kind-call-signature.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -68px; +} +.tsd-kind-call-signature.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -68px; +} +.tsd-kind-call-signature.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -68px; +} +.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -68px; +} +.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -68px; +} +.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -68px; +} +.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -68px; +} +.tsd-kind-call-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -68px; +} +.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -68px; +} +.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -68px; +} +.tsd-kind-call-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -68px; +} +.tsd-kind-call-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -68px; +} + +.tsd-kind-function.tsd-has-type-parameter > .tsd-kind-icon:before { + background-position: -136px -85px; +} +.tsd-kind-function.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -85px; +} +.tsd-kind-function.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -85px; +} +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -85px; +} +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -85px; +} +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -85px; +} +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -85px; +} +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -85px; +} +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -85px; +} +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -85px; +} +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -85px; +} +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -85px; +} +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -85px; +} + +.tsd-kind-method.tsd-has-type-parameter > .tsd-kind-icon:before { + background-position: -136px -85px; +} +.tsd-kind-method.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -85px; +} +.tsd-kind-method.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -85px; +} +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -85px; +} +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -85px; +} +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -85px; +} +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -85px; +} +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -85px; +} +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -85px; +} +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -85px; +} +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -85px; +} +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -85px; +} +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -85px; +} + +.tsd-kind-constructor > .tsd-kind-icon:before { + background-position: -136px -102px; +} +.tsd-kind-constructor.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -102px; +} +.tsd-kind-constructor.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -102px; +} +.tsd-kind-constructor.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -102px; +} +.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -102px; +} +.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -102px; +} +.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -102px; +} +.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -102px; +} +.tsd-kind-constructor.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -102px; +} +.tsd-kind-constructor.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -102px; +} +.tsd-kind-constructor.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -102px; +} +.tsd-kind-constructor.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -102px; +} +.tsd-kind-constructor.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -102px; +} + +.tsd-kind-constructor-signature > .tsd-kind-icon:before { + background-position: -136px -102px; +} +.tsd-kind-constructor-signature.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -102px; +} +.tsd-kind-constructor-signature.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -102px; +} +.tsd-kind-constructor-signature.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -102px; +} +.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -102px; +} +.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -102px; +} +.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -102px; +} +.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -102px; +} +.tsd-kind-constructor-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -102px; +} +.tsd-kind-constructor-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -102px; +} +.tsd-kind-constructor-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -102px; +} +.tsd-kind-constructor-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -102px; +} +.tsd-kind-constructor-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -102px; +} + +.tsd-kind-index-signature > .tsd-kind-icon:before { + background-position: -136px -119px; +} +.tsd-kind-index-signature.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -119px; +} +.tsd-kind-index-signature.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -119px; +} +.tsd-kind-index-signature.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -119px; +} +.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -119px; +} +.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -119px; +} +.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -119px; +} +.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -119px; +} +.tsd-kind-index-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -119px; +} +.tsd-kind-index-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -119px; +} +.tsd-kind-index-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -119px; +} +.tsd-kind-index-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -119px; +} +.tsd-kind-index-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -119px; +} + +.tsd-kind-event > .tsd-kind-icon:before { + background-position: -136px -136px; +} +.tsd-kind-event.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -136px; +} +.tsd-kind-event.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -136px; +} +.tsd-kind-event.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -136px; +} +.tsd-kind-event.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -136px; +} +.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -136px; +} +.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -136px; +} +.tsd-kind-event.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -136px; +} +.tsd-kind-event.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -136px; +} +.tsd-kind-event.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -136px; +} +.tsd-kind-event.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -136px; +} +.tsd-kind-event.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -136px; +} +.tsd-kind-event.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -136px; +} + +.tsd-is-static > .tsd-kind-icon:before { + background-position: -136px -153px; +} +.tsd-is-static.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -153px; +} +.tsd-is-static.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -153px; +} +.tsd-is-static.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -153px; +} +.tsd-is-static.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -153px; +} +.tsd-is-static.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -153px; +} +.tsd-is-static.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -153px; +} +.tsd-is-static.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -153px; +} +.tsd-is-static.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -153px; +} +.tsd-is-static.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -153px; +} +.tsd-is-static.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -153px; +} +.tsd-is-static.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -153px; +} +.tsd-is-static.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -153px; +} + +.tsd-is-static.tsd-kind-function > .tsd-kind-icon:before { + background-position: -136px -170px; +} +.tsd-is-static.tsd-kind-function.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -170px; +} +.tsd-is-static.tsd-kind-function.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -170px; +} +.tsd-is-static.tsd-kind-function.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -170px; +} +.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -170px; +} +.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -170px; +} +.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -170px; +} +.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -170px; +} +.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -170px; +} +.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -170px; +} +.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -170px; +} +.tsd-is-static.tsd-kind-function.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -170px; +} +.tsd-is-static.tsd-kind-function.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -170px; +} + +.tsd-is-static.tsd-kind-method > .tsd-kind-icon:before { + background-position: -136px -170px; +} +.tsd-is-static.tsd-kind-method.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -170px; +} +.tsd-is-static.tsd-kind-method.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -170px; +} +.tsd-is-static.tsd-kind-method.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -170px; +} +.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -170px; +} +.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -170px; +} +.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -170px; +} +.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -170px; +} +.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -170px; +} +.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -170px; +} +.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -170px; +} +.tsd-is-static.tsd-kind-method.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -170px; +} +.tsd-is-static.tsd-kind-method.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -170px; +} + +.tsd-is-static.tsd-kind-call-signature > .tsd-kind-icon:before { + background-position: -136px -170px; +} +.tsd-is-static.tsd-kind-call-signature.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -170px; +} +.tsd-is-static.tsd-kind-call-signature.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -170px; +} +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -170px; +} +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -170px; +} +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -170px; +} +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -170px; +} +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -170px; +} +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -170px; +} +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -170px; +} +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -170px; +} +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -170px; +} +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -170px; +} + +.tsd-is-static.tsd-kind-event > .tsd-kind-icon:before { + background-position: -136px -187px; +} +.tsd-is-static.tsd-kind-event.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -187px; +} +.tsd-is-static.tsd-kind-event.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -187px; +} +.tsd-is-static.tsd-kind-event.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -187px; +} +.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -187px; +} +.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -187px; +} +.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -187px; +} +.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -187px; +} +.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -187px; +} +.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -187px; +} +.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -187px; +} +.tsd-is-static.tsd-kind-event.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -187px; +} +.tsd-is-static.tsd-kind-event.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -187px; +} + +@keyframes fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } +} +@keyframes fade-out { + from { + opacity: 1; + visibility: visible; + } + to { + opacity: 0; + } +} +@keyframes fade-in-delayed { + 0% { + opacity: 0; + } + 33% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@keyframes fade-out-delayed { + 0% { + opacity: 1; + visibility: visible; + } + 66% { + opacity: 0; + } + 100% { + opacity: 0; + } +} +@keyframes shift-to-left { + from { + transform: translate(0, 0); + } + to { + transform: translate(-25%, 0); + } +} +@keyframes unshift-to-left { + from { + transform: translate(-25%, 0); + } + to { + transform: translate(0, 0); + } +} +@keyframes pop-in-from-right { + from { + transform: translate(100%, 0); + } + to { + transform: translate(0, 0); + } +} +@keyframes pop-out-to-right { + from { + transform: translate(0, 0); + visibility: visible; + } + to { + transform: translate(100%, 0); + } +} +body { + background: #fdfdfd; + font-family: "Segoe UI", sans-serif; + font-size: 16px; + color: #222; +} + +a { + color: #4da6ff; + text-decoration: none; +} +a:hover { + text-decoration: underline; +} + +code, pre { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + padding: 0.2em; + margin: 0; + font-size: 14px; + background-color: rgba(0, 0, 0, 0.04); +} + +pre { + padding: 10px; +} +pre code { + padding: 0; + font-size: 100%; + background-color: transparent; +} + +.tsd-typography { + line-height: 1.333em; +} +.tsd-typography ul { + list-style: square; + padding: 0 0 0 20px; + margin: 0; +} +.tsd-typography h4, .tsd-typography .tsd-index-panel h3, .tsd-index-panel .tsd-typography h3, .tsd-typography h5, .tsd-typography h6 { + font-size: 1em; + margin: 0; +} +.tsd-typography h5, .tsd-typography h6 { + font-weight: normal; +} +.tsd-typography p, .tsd-typography ul, .tsd-typography ol { + margin: 1em 0; +} + +@media (min-width: 901px) and (max-width: 1024px) { + html.default .col-content { + width: 72%; + } + html.default .col-menu { + width: 28%; + } + html.default .tsd-navigation { + padding-left: 10px; + } +} +@media (max-width: 900px) { + html.default .col-content { + float: none; + width: 100%; + } + html.default .col-menu { + position: fixed !important; + overflow: auto; + -webkit-overflow-scrolling: touch; + z-index: 1024; + top: 0 !important; + bottom: 0 !important; + left: auto !important; + right: 0 !important; + width: 100%; + padding: 20px 20px 0 0; + max-width: 450px; + visibility: hidden; + background-color: #fff; + transform: translate(100%, 0); + } + html.default .col-menu > *:last-child { + padding-bottom: 20px; + } + html.default .overlay { + content: ""; + display: block; + position: fixed; + z-index: 1023; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.75); + visibility: hidden; + } + html.default.to-has-menu .overlay { + animation: fade-in 0.4s; + } + html.default.to-has-menu header, +html.default.to-has-menu footer, +html.default.to-has-menu .col-content { + animation: shift-to-left 0.4s; + } + html.default.to-has-menu .col-menu { + animation: pop-in-from-right 0.4s; + } + html.default.from-has-menu .overlay { + animation: fade-out 0.4s; + } + html.default.from-has-menu header, +html.default.from-has-menu footer, +html.default.from-has-menu .col-content { + animation: unshift-to-left 0.4s; + } + html.default.from-has-menu .col-menu { + animation: pop-out-to-right 0.4s; + } + html.default.has-menu body { + overflow: hidden; + } + html.default.has-menu .overlay { + visibility: visible; + } + html.default.has-menu header, +html.default.has-menu footer, +html.default.has-menu .col-content { + transform: translate(-25%, 0); + } + html.default.has-menu .col-menu { + visibility: visible; + transform: translate(0, 0); + } +} + +.tsd-page-title { + padding: 70px 0 20px 0; + margin: 0 0 40px 0; + background: #fff; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.35); +} +.tsd-page-title h1 { + margin: 0; +} + +.tsd-breadcrumb { + margin: 0; + padding: 0; + color: #707070; +} +.tsd-breadcrumb a { + color: #707070; + text-decoration: none; +} +.tsd-breadcrumb a:hover { + text-decoration: underline; +} +.tsd-breadcrumb li { + display: inline; +} +.tsd-breadcrumb li:after { + content: " / "; +} + +html.minimal .container { + margin: 0; +} +html.minimal .container-main { + padding-top: 50px; + padding-bottom: 0; +} +html.minimal .content-wrap { + padding-left: 300px; +} +html.minimal .tsd-navigation { + position: fixed !important; + overflow: auto; + -webkit-overflow-scrolling: touch; + box-sizing: border-box; + z-index: 1; + left: 0; + top: 40px; + bottom: 0; + width: 300px; + padding: 20px; + margin: 0; +} +html.minimal .tsd-member .tsd-member { + margin-left: 0; +} +html.minimal .tsd-page-toolbar { + position: fixed; + z-index: 2; +} +html.minimal #tsd-filter .tsd-filter-group { + right: 0; + transform: none; +} +html.minimal footer { + background-color: transparent; +} +html.minimal footer .container { + padding: 0; +} +html.minimal .tsd-generator { + padding: 0; +} +@media (max-width: 900px) { + html.minimal .tsd-navigation { + display: none; + } + html.minimal .content-wrap { + padding-left: 0; + } +} + +dl.tsd-comment-tags { + overflow: hidden; +} +dl.tsd-comment-tags dt { + float: left; + padding: 1px 5px; + margin: 0 10px 0 0; + border-radius: 4px; + border: 1px solid #707070; + color: #707070; + font-size: 0.8em; + font-weight: normal; +} +dl.tsd-comment-tags dd { + margin: 0 0 10px 0; +} +dl.tsd-comment-tags dd:before, dl.tsd-comment-tags dd:after { + display: table; + content: " "; +} +dl.tsd-comment-tags dd pre, dl.tsd-comment-tags dd:after { + clear: both; +} +dl.tsd-comment-tags p { + margin: 0; +} + +.tsd-panel.tsd-comment .lead { + font-size: 1.1em; + line-height: 1.333em; + margin-bottom: 2em; +} +.tsd-panel.tsd-comment .lead:last-child { + margin-bottom: 0; +} + +.toggle-protected .tsd-is-private { + display: none; +} + +.toggle-public .tsd-is-private, +.toggle-public .tsd-is-protected, +.toggle-public .tsd-is-private-protected { + display: none; +} + +.toggle-inherited .tsd-is-inherited { + display: none; +} + +.toggle-externals .tsd-is-external { + display: none; +} + +#tsd-filter { + position: relative; + display: inline-block; + height: 40px; + vertical-align: bottom; +} +.no-filter #tsd-filter { + display: none; +} +#tsd-filter .tsd-filter-group { + display: inline-block; + height: 40px; + vertical-align: bottom; + white-space: nowrap; +} +#tsd-filter input { + display: none; +} +@media (max-width: 900px) { + #tsd-filter .tsd-filter-group { + display: block; + position: absolute; + top: 40px; + right: 20px; + height: auto; + background-color: #fff; + visibility: hidden; + transform: translate(50%, 0); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); + } + .has-options #tsd-filter .tsd-filter-group { + visibility: visible; + } + .to-has-options #tsd-filter .tsd-filter-group { + animation: fade-in 0.2s; + } + .from-has-options #tsd-filter .tsd-filter-group { + animation: fade-out 0.2s; + } + #tsd-filter label, +#tsd-filter .tsd-select { + display: block; + padding-right: 20px; + } +} + +footer { + border-top: 1px solid #eee; + background-color: #fff; +} +footer.with-border-bottom { + border-bottom: 1px solid #eee; +} +footer .tsd-legend-group { + font-size: 0; +} +footer .tsd-legend { + display: inline-block; + width: 25%; + padding: 0; + font-size: 16px; + list-style: none; + line-height: 1.333em; + vertical-align: top; +} +@media (max-width: 900px) { + footer .tsd-legend { + width: 50%; + } +} + +.tsd-hierarchy { + list-style: square; + padding: 0 0 0 20px; + margin: 0; +} +.tsd-hierarchy .target { + font-weight: bold; +} + +.tsd-index-panel .tsd-index-content { + margin-bottom: -30px !important; +} +.tsd-index-panel .tsd-index-section { + margin-bottom: 30px !important; +} +.tsd-index-panel h3 { + margin: 0 -20px 10px -20px; + padding: 0 20px 10px 20px; + border-bottom: 1px solid #eee; +} +.tsd-index-panel ul.tsd-index-list { + -webkit-column-count: 3; + -moz-column-count: 3; + -ms-column-count: 3; + -o-column-count: 3; + column-count: 3; + -webkit-column-gap: 20px; + -moz-column-gap: 20px; + -ms-column-gap: 20px; + -o-column-gap: 20px; + column-gap: 20px; + padding: 0; + list-style: none; + line-height: 1.333em; +} +@media (max-width: 900px) { + .tsd-index-panel ul.tsd-index-list { + -webkit-column-count: 1; + -moz-column-count: 1; + -ms-column-count: 1; + -o-column-count: 1; + column-count: 1; + } +} +@media (min-width: 901px) and (max-width: 1024px) { + .tsd-index-panel ul.tsd-index-list { + -webkit-column-count: 2; + -moz-column-count: 2; + -ms-column-count: 2; + -o-column-count: 2; + column-count: 2; + } +} +.tsd-index-panel ul.tsd-index-list li { + -webkit-page-break-inside: avoid; + -moz-page-break-inside: avoid; + -ms-page-break-inside: avoid; + -o-page-break-inside: avoid; + page-break-inside: avoid; +} +.tsd-index-panel a, +.tsd-index-panel .tsd-parent-kind-module a { + color: #9600ff; +} +.tsd-index-panel .tsd-parent-kind-interface a { + color: #647F1B; +} +.tsd-index-panel .tsd-parent-kind-enum a { + color: #937210; +} +.tsd-index-panel .tsd-parent-kind-class a { + color: #0672DE; +} +.tsd-index-panel .tsd-kind-module a { + color: #9600ff; +} +.tsd-index-panel .tsd-kind-interface a { + color: #647F1B; +} +.tsd-index-panel .tsd-kind-enum a { + color: #937210; +} +.tsd-index-panel .tsd-kind-class a { + color: #0672DE; +} +.tsd-index-panel .tsd-is-private a { + color: #707070; +} + +.tsd-flag { + display: inline-block; + padding: 1px 5px; + border-radius: 4px; + color: #fff; + background-color: #707070; + text-indent: 0; + font-size: 14px; + font-weight: normal; +} + +.tsd-anchor { + position: absolute; + top: -100px; +} + +.tsd-member { + position: relative; +} +.tsd-member .tsd-anchor + h3 { + margin-top: 0; + margin-bottom: 0; + border-bottom: none; +} +.tsd-member a[data-tsd-kind] { + color: #9600ff; +} +.tsd-member a[data-tsd-kind=Interface] { + color: #647F1B; +} +.tsd-member a[data-tsd-kind=Enum] { + color: #937210; +} +.tsd-member a[data-tsd-kind=Class] { + color: #0672DE; +} +.tsd-member a[data-tsd-kind=Private] { + color: #707070; +} + +.tsd-navigation { + margin: 0 0 0 40px; +} +.tsd-navigation a { + display: block; + padding-top: 2px; + padding-bottom: 2px; + border-left: 2px solid transparent; + color: #222; + text-decoration: none; + transition: border-left-color 0.1s; +} +.tsd-navigation a:hover { + text-decoration: underline; +} +.tsd-navigation ul { + margin: 0; + padding: 0; + list-style: none; +} +.tsd-navigation li { + padding: 0; +} + +.tsd-navigation.primary { + padding-bottom: 40px; +} +.tsd-navigation.primary a { + display: block; + padding-top: 6px; + padding-bottom: 6px; +} +.tsd-navigation.primary ul li a { + padding-left: 5px; +} +.tsd-navigation.primary ul li li a { + padding-left: 25px; +} +.tsd-navigation.primary ul li li li a { + padding-left: 45px; +} +.tsd-navigation.primary ul li li li li a { + padding-left: 65px; +} +.tsd-navigation.primary ul li li li li li a { + padding-left: 85px; +} +.tsd-navigation.primary ul li li li li li li a { + padding-left: 105px; +} +.tsd-navigation.primary > ul { + border-bottom: 1px solid #eee; +} +.tsd-navigation.primary li { + border-top: 1px solid #eee; +} +.tsd-navigation.primary li.current > a { + font-weight: bold; +} +.tsd-navigation.primary li.label span { + display: block; + padding: 20px 0 6px 5px; + color: #707070; +} +.tsd-navigation.primary li.globals + li > span, .tsd-navigation.primary li.globals + li > a { + padding-top: 20px; +} + +.tsd-navigation.secondary { + max-height: calc(100vh - 1rem - 40px); + overflow: auto; + position: -webkit-sticky; + position: sticky; + top: calc(.5rem + 40px); + transition: 0.3s; +} +.tsd-navigation.secondary.tsd-navigation--toolbar-hide { + max-height: calc(100vh - 1rem); + top: 0.5rem; +} +.tsd-navigation.secondary ul { + transition: opacity 0.2s; +} +.tsd-navigation.secondary ul li a { + padding-left: 25px; +} +.tsd-navigation.secondary ul li li a { + padding-left: 45px; +} +.tsd-navigation.secondary ul li li li a { + padding-left: 65px; +} +.tsd-navigation.secondary ul li li li li a { + padding-left: 85px; +} +.tsd-navigation.secondary ul li li li li li a { + padding-left: 105px; +} +.tsd-navigation.secondary ul li li li li li li a { + padding-left: 125px; +} +.tsd-navigation.secondary ul.current a { + border-left-color: #eee; +} +.tsd-navigation.secondary li.focus > a, +.tsd-navigation.secondary ul.current li.focus > a { + border-left-color: #000; +} +.tsd-navigation.secondary li.current { + margin-top: 20px; + margin-bottom: 20px; + border-left-color: #eee; +} +.tsd-navigation.secondary li.current > a { + font-weight: bold; +} + +@media (min-width: 901px) { + .menu-sticky-wrap { + position: static; + } +} + +.tsd-panel { + margin: 20px 0; + padding: 20px; + background-color: #fff; + box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); +} +.tsd-panel:empty { + display: none; +} +.tsd-panel > h1, .tsd-panel > h2, .tsd-panel > h3 { + margin: 1.5em -20px 10px -20px; + padding: 0 20px 10px 20px; + border-bottom: 1px solid #eee; +} +.tsd-panel > h1.tsd-before-signature, .tsd-panel > h2.tsd-before-signature, .tsd-panel > h3.tsd-before-signature { + margin-bottom: 0; + border-bottom: 0; +} +.tsd-panel table { + display: block; + width: 100%; + overflow: auto; + margin-top: 10px; + word-break: normal; + word-break: keep-all; +} +.tsd-panel table th { + font-weight: bold; +} +.tsd-panel table th, .tsd-panel table td { + padding: 6px 13px; + border: 1px solid #ddd; +} +.tsd-panel table tr { + background-color: #fff; + border-top: 1px solid #ccc; +} +.tsd-panel table tr:nth-child(2n) { + background-color: #f8f8f8; +} + +.tsd-panel-group { + margin: 60px 0; +} +.tsd-panel-group > h1, .tsd-panel-group > h2, .tsd-panel-group > h3 { + padding-left: 20px; + padding-right: 20px; +} + +#tsd-search { + transition: background-color 0.2s; +} +#tsd-search .title { + position: relative; + z-index: 2; +} +#tsd-search .field { + position: absolute; + left: 0; + top: 0; + right: 40px; + height: 40px; +} +#tsd-search .field input { + box-sizing: border-box; + position: relative; + top: -50px; + z-index: 1; + width: 100%; + padding: 0 10px; + opacity: 0; + outline: 0; + border: 0; + background: transparent; + color: #222; +} +#tsd-search .field label { + position: absolute; + overflow: hidden; + right: -40px; +} +#tsd-search .field input, +#tsd-search .title { + transition: opacity 0.2s; +} +#tsd-search .results { + position: absolute; + visibility: hidden; + top: 40px; + width: 100%; + margin: 0; + padding: 0; + list-style: none; + box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); +} +#tsd-search .results li { + padding: 0 10px; + background-color: #fdfdfd; +} +#tsd-search .results li:nth-child(even) { + background-color: #fff; +} +#tsd-search .results li.state { + display: none; +} +#tsd-search .results li.current, +#tsd-search .results li:hover { + background-color: #eee; +} +#tsd-search .results a { + display: block; +} +#tsd-search .results a:before { + top: 10px; +} +#tsd-search .results span.parent { + color: #707070; + font-weight: normal; +} +#tsd-search.has-focus { + background-color: #eee; +} +#tsd-search.has-focus .field input { + top: 0; + opacity: 1; +} +#tsd-search.has-focus .title { + z-index: 0; + opacity: 0; +} +#tsd-search.has-focus .results { + visibility: visible; +} +#tsd-search.loading .results li.state.loading { + display: block; +} +#tsd-search.failure .results li.state.failure { + display: block; +} + +.tsd-signature { + margin: 0 0 1em 0; + padding: 10px; + border: 1px solid #eee; + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + font-size: 14px; + overflow-x: auto; +} +.tsd-signature.tsd-kind-icon { + padding-left: 30px; +} +.tsd-signature.tsd-kind-icon:before { + top: 10px; + left: 10px; +} +.tsd-panel > .tsd-signature { + margin-left: -20px; + margin-right: -20px; + border-width: 1px 0; +} +.tsd-panel > .tsd-signature.tsd-kind-icon { + padding-left: 40px; +} +.tsd-panel > .tsd-signature.tsd-kind-icon:before { + left: 20px; +} + +.tsd-signature-symbol { + color: #707070; + font-weight: normal; +} + +.tsd-signature-type { + font-style: italic; + font-weight: normal; +} + +.tsd-signatures { + padding: 0; + margin: 0 0 1em 0; + border: 1px solid #eee; +} +.tsd-signatures .tsd-signature { + margin: 0; + border-width: 1px 0 0 0; + transition: background-color 0.1s; +} +.tsd-signatures .tsd-signature:first-child { + border-top-width: 0; +} +.tsd-signatures .tsd-signature.current { + background-color: #eee; +} +.tsd-signatures.active > .tsd-signature { + cursor: pointer; +} +.tsd-panel > .tsd-signatures { + margin-left: -20px; + margin-right: -20px; + border-width: 1px 0; +} +.tsd-panel > .tsd-signatures .tsd-signature.tsd-kind-icon { + padding-left: 40px; +} +.tsd-panel > .tsd-signatures .tsd-signature.tsd-kind-icon:before { + left: 20px; +} +.tsd-panel > a.anchor + .tsd-signatures { + border-top-width: 0; + margin-top: -20px; +} + +ul.tsd-descriptions { + position: relative; + overflow: hidden; + padding: 0; + list-style: none; +} +ul.tsd-descriptions.active > .tsd-description { + display: none; +} +ul.tsd-descriptions.active > .tsd-description.current { + display: block; +} +ul.tsd-descriptions.active > .tsd-description.fade-in { + animation: fade-in-delayed 0.3s; +} +ul.tsd-descriptions.active > .tsd-description.fade-out { + animation: fade-out-delayed 0.3s; + position: absolute; + display: block; + top: 0; + left: 0; + right: 0; + opacity: 0; + visibility: hidden; +} +ul.tsd-descriptions h4, ul.tsd-descriptions .tsd-index-panel h3, .tsd-index-panel ul.tsd-descriptions h3 { + font-size: 16px; + margin: 1em 0 0.5em 0; +} + +ul.tsd-parameters, +ul.tsd-type-parameters { + list-style: square; + margin: 0; + padding-left: 20px; +} +ul.tsd-parameters > li.tsd-parameter-signature, +ul.tsd-type-parameters > li.tsd-parameter-signature { + list-style: none; + margin-left: -20px; +} +ul.tsd-parameters h5, +ul.tsd-type-parameters h5 { + font-size: 16px; + margin: 1em 0 0.5em 0; +} +ul.tsd-parameters .tsd-comment, +ul.tsd-type-parameters .tsd-comment { + margin-top: -0.5em; +} + +.tsd-sources { + font-size: 14px; + color: #707070; + margin: 0 0 1em 0; +} +.tsd-sources a { + color: #707070; + text-decoration: underline; +} +.tsd-sources ul, .tsd-sources p { + margin: 0 !important; +} +.tsd-sources ul { + list-style: none; + padding: 0; +} + +.tsd-page-toolbar { + position: fixed; + z-index: 1; + top: 0; + left: 0; + width: 100%; + height: 40px; + color: #333; + background: #fff; + border-bottom: 1px solid #eee; + transition: transform 0.3s linear; +} +.tsd-page-toolbar a { + color: #333; + text-decoration: none; +} +.tsd-page-toolbar a.title { + font-weight: bold; +} +.tsd-page-toolbar a.title:hover { + text-decoration: underline; +} +.tsd-page-toolbar .table-wrap { + display: table; + width: 100%; + height: 40px; +} +.tsd-page-toolbar .table-cell { + display: table-cell; + position: relative; + white-space: nowrap; + line-height: 40px; +} +.tsd-page-toolbar .table-cell:first-child { + width: 100%; +} + +.tsd-page-toolbar--hide { + transform: translateY(-100%); +} + +.tsd-select .tsd-select-list li:before, .tsd-select .tsd-select-label:before, .tsd-widget:before { + content: ""; + display: inline-block; + width: 40px; + height: 40px; + margin: 0 -8px 0 0; + background-image: url(../images/widgets.png); + background-repeat: no-repeat; + text-indent: -1024px; + vertical-align: bottom; +} +@media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) { + .tsd-select .tsd-select-list li:before, .tsd-select .tsd-select-label:before, .tsd-widget:before { + background-image: url(../images/widgets@2x.png); + background-size: 320px 40px; + } +} + +.tsd-widget { + display: inline-block; + overflow: hidden; + opacity: 0.6; + height: 40px; + transition: opacity 0.1s, background-color 0.2s; + vertical-align: bottom; + cursor: pointer; +} +.tsd-widget:hover { + opacity: 0.8; +} +.tsd-widget.active { + opacity: 1; + background-color: #eee; +} +.tsd-widget.no-caption { + width: 40px; +} +.tsd-widget.no-caption:before { + margin: 0; +} +.tsd-widget.search:before { + background-position: 0 0; +} +.tsd-widget.menu:before { + background-position: -40px 0; +} +.tsd-widget.options:before { + background-position: -80px 0; +} +.tsd-widget.options, .tsd-widget.menu { + display: none; +} +@media (max-width: 900px) { + .tsd-widget.options, .tsd-widget.menu { + display: inline-block; + } +} +input[type=checkbox] + .tsd-widget:before { + background-position: -120px 0; +} +input[type=checkbox]:checked + .tsd-widget:before { + background-position: -160px 0; +} + +.tsd-select { + position: relative; + display: inline-block; + height: 40px; + transition: opacity 0.1s, background-color 0.2s; + vertical-align: bottom; + cursor: pointer; +} +.tsd-select .tsd-select-label { + opacity: 0.6; + transition: opacity 0.2s; +} +.tsd-select .tsd-select-label:before { + background-position: -240px 0; +} +.tsd-select.active .tsd-select-label { + opacity: 0.8; +} +.tsd-select.active .tsd-select-list { + visibility: visible; + opacity: 1; + transition-delay: 0s; +} +.tsd-select .tsd-select-list { + position: absolute; + visibility: hidden; + top: 40px; + left: 0; + margin: 0; + padding: 0; + opacity: 0; + list-style: none; + box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); + transition: visibility 0s 0.2s, opacity 0.2s; +} +.tsd-select .tsd-select-list li { + padding: 0 20px 0 0; + background-color: #fdfdfd; +} +.tsd-select .tsd-select-list li:before { + background-position: 40px 0; +} +.tsd-select .tsd-select-list li:nth-child(even) { + background-color: #fff; +} +.tsd-select .tsd-select-list li:hover { + background-color: #eee; +} +.tsd-select .tsd-select-list li.selected:before { + background-position: -200px 0; +} +@media (max-width: 900px) { + .tsd-select .tsd-select-list { + top: 0; + left: auto; + right: 100%; + margin-right: -5px; + } + .tsd-select .tsd-select-label:before { + background-position: -280px 0; + } +} + +img { + max-width: 100%; +} diff --git a/tools/doc/typedoc-theme/assets/css/main.sass b/tools/doc/typedoc-theme/assets/css/main.sass deleted file mode 100644 index 8fcf335292..0000000000 --- a/tools/doc/typedoc-theme/assets/css/main.sass +++ /dev/null @@ -1,27 +0,0 @@ -@import constants - -@import vendors/normalize -@import vendors/highlight.js - -@import setup/mixins -@import setup/grid -@import setup/icons -@import setup/animations -@import setup/typography - -@import layouts/default -@import layouts/minimal - -@import elements/comment -@import elements/filter -@import elements/footer -@import elements/hierarchy -@import elements/index -@import elements/member -@import elements/navigation -@import elements/panel -@import elements/search -@import elements/signatures -@import elements/sources -@import elements/toolbar -@import elements/images diff --git a/tools/doc/typedoc-theme/assets/css/setup/_animations.sass b/tools/doc/typedoc-theme/assets/css/setup/_animations.sass deleted file mode 100644 index cbfaf7c773..0000000000 --- a/tools/doc/typedoc-theme/assets/css/setup/_animations.sass +++ /dev/null @@ -1,54 +0,0 @@ -@keyframes fade-in - from - opacity: 0 - to - opacity: 1 - -@keyframes fade-out - from - opacity: 1 - visibility: visible - to - opacity: 0 - -@keyframes fade-in-delayed - 0% - opacity: 0 - 33% - opacity: 0 - 100% - opacity: 1 - -@keyframes fade-out-delayed - 0% - opacity: 1 - visibility: visible - 66% - opacity: 0 - 100% - opacity: 0 - -@keyframes shift-to-left - from - transform: translate(0,0) - to - transform: translate(-25%,0) - -@keyframes unshift-to-left - from - transform: translate(-25%,0) - to - transform: translate(0,0) - -@keyframes pop-in-from-right - from - transform: translate(100%,0) - to - transform: translate(0,0) - -@keyframes pop-out-to-right - from - transform: translate(0,0) - visibility: visible - to - transform: translate(100%,0) \ No newline at end of file diff --git a/tools/doc/typedoc-theme/assets/css/setup/_grid.sass b/tools/doc/typedoc-theme/assets/css/setup/_grid.sass deleted file mode 100644 index 5b9177e0cf..0000000000 --- a/tools/doc/typedoc-theme/assets/css/setup/_grid.sass +++ /dev/null @@ -1,60 +0,0 @@ -=size-xs - @media (max-width: 640px) - & - @content - -=size-sm - @media (min-width: 641px) and (max-width: 900px) - & - @content - -=size-md - @media (min-width: 901px) and (max-width: 1024px) - & - @content - -=size-lg - @media (min-width: 1025px) - & - @content - -=size-xs-sm - @media (max-width: 900px) - & - @content - -=size-md-lg - @media (min-width: 901px) - & - @content - -.container - max-width: 1200px - margin: 0 auto - padding: 0 40px - - +size-xs - padding: 0 20px - -.container-main - padding-bottom: 200px - -.row - +clearfix - display: flex - position: relative - margin: 0 -10px - -.col - @extend %prevent-children-margin - box-sizing: border-box - float: left - padding: 0 10px - -@for $width from 1 to 12 - .col-#{$width} - @extend .col - width: $width / 12 * 100% - - .offset-#{$width} - margin-left: $width / 12 * 100% \ No newline at end of file diff --git a/tools/doc/typedoc-theme/assets/css/setup/_icons.scss b/tools/doc/typedoc-theme/assets/css/setup/_icons.scss deleted file mode 100644 index e2f115c5dd..0000000000 --- a/tools/doc/typedoc-theme/assets/css/setup/_icons.scss +++ /dev/null @@ -1,166 +0,0 @@ -$type-icons: - (object-literal), - (class), - ('class.tsd-has-type-parameter'), - (interface), - ('interface.tsd-has-type-parameter'), - (namespace, module), - (enum), - (enum-member), - (signature), - (type-alias), - ('type-alias.tsd-has-type-parameter'); - -$member-icons: - (variable, property), - (get-signature), - (set-signature), - (accessor), - (function, method, call-signature), - ('function.tsd-has-type-parameter', 'method.tsd-has-type-parameter'), - (constructor, constructor-signature), - (index-signature), - (event), - (property), - (function, method, call-signature), - (event); - -// parameter -// type-literal -// type-parameter - -.tsd-kind-icon { - display: block; - position: relative; - padding-left: 20px; - text-indent: -20px; - - &:before { - content: ''; - display: inline-block; - vertical-align: middle; - width: 17px; - height: 17px; - margin: 0 3px 2px 0; - background-image: url(../images/icons.png); - - @include retina { - background-image: url(../images/icons@2x.png); - background-size: 238px 204px; - } - } -} - -.tsd-signature.tsd-kind-icon:before { - background-position: 0 -153px; -} - -$icon-size: 17px; -$type: -0 * $icon-size; -$type-protected: -1 * $icon-size; -$type-private: -2 * $icon-size; -$member-class-public: -3 * $icon-size; -$member-class-public-inherited: -4 * $icon-size; -$member-class-protected: -5 * $icon-size; -$member-class-protected-inherited: -6 * $icon-size; -$member-private: -7 * $icon-size; -$member: -8 * $icon-size; -$member-protected: -9 * $icon-size; -$member-enum: -10 * $icon-size; -$member-enum-protected: -11 * $icon-size; -$member-interface: -12 * $icon-size; -$member-interface-inherited: -13 * $icon-size; - - -@for $index from 1 through length($type-icons) { - @each $kind in nth($type-icons, $index) { - $selector: '.tsd-kind-' + $kind; - $offset: -#{17 * ($index)}px; - - #{$selector} { - > .tsd-kind-icon:before { - background-position: $type $offset; - } - - &.tsd-is-protected > .tsd-kind-icon:before { - background-position: $type-protected $offset; - } - - &.tsd-is-private > .tsd-kind-icon:before { - background-position: $type-private $offset; - } - } - } -} - -@for $index from 1 through length($member-icons) { - @each $kind in nth($member-icons, $index) { - $offset: -#{17 * ($index - 1)}px; - $selector: '.tsd-kind-' + $kind; - @if $index == 10 { - $selector: '.tsd-is-static'; - } @else if $index > 10 { - $selector: '.tsd-is-static.tsd-kind-' + $kind; - } - - #{$selector} { - > .tsd-kind-icon:before { - background-position: $member $offset; - } - - &.tsd-is-protected > .tsd-kind-icon:before { - background-position: $member-protected $offset; - } - - &.tsd-is-private > .tsd-kind-icon:before { - background-position: $member-private $offset; - } - - &.tsd-parent-kind-class { - > .tsd-kind-icon:before { - background-position: $member-class-public $offset; - } - - &.tsd-is-inherited > .tsd-kind-icon:before { - background-position: $member-class-public-inherited $offset; - } - - &.tsd-is-protected > .tsd-kind-icon:before { - background-position: $member-class-protected $offset; - } - - &.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { - background-position: $member-class-protected-inherited $offset; - } - - &.tsd-is-private > .tsd-kind-icon:before { - background-position: $member-private $offset; - } - } - - &.tsd-parent-kind-enum { - > .tsd-kind-icon:before { - background-position: $member-enum $offset; - } - - &.tsd-is-protected > .tsd-kind-icon:before { - background-position: $member-enum-protected $offset; - } - - &.tsd-is-private > .tsd-kind-icon:before { - background-position: $member-private $offset; - } - } - - &.tsd-parent-kind-interface { - > .tsd-kind-icon:before { - background-position: $member-interface $offset; - } - - &.tsd-is-inherited > .tsd-kind-icon:before { - background-position: $member-interface-inherited $offset; - } - } - } - } -} diff --git a/tools/doc/typedoc-theme/assets/css/setup/_mixins.sass b/tools/doc/typedoc-theme/assets/css/setup/_mixins.sass deleted file mode 100644 index 94cb8d21e2..0000000000 --- a/tools/doc/typedoc-theme/assets/css/setup/_mixins.sass +++ /dev/null @@ -1,30 +0,0 @@ -@mixin vendors($property, $value...) - -webkit-#{$property}: $value - -moz-#{$property}: $value - -ms-#{$property}: $value - -o-#{$property}: $value - #{$property}: $value - -@mixin clearfix - &:after - visibility: hidden - display: block - content: "" - clear: both - height: 0 - -@mixin retina - @media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) - & - @content - -%prevent-children-margin - > :first-child, - > :first-child > :first-child, - > :first-child > :first-child > :first-child - margin-top: 0 - - > :last-child, - > :last-child > :last-child, - > :last-child > :last-child > :last-child - margin-bottom: 0 diff --git a/tools/doc/typedoc-theme/assets/css/setup/_typography.sass b/tools/doc/typedoc-theme/assets/css/setup/_typography.sass deleted file mode 100644 index c05225d7d2..0000000000 --- a/tools/doc/typedoc-theme/assets/css/setup/_typography.sass +++ /dev/null @@ -1,45 +0,0 @@ -body - background: $COLOR_BACKGROUND - font-family: $FONT_FAMILY - font-size: $FONT_SIZE - color: $COLOR_TEXT - -a - color: $COLOR_LINK - text-decoration: none - - &:hover - text-decoration: underline - -code, pre - font-family: $FONT_FAMILY_MONO - padding: 0.2em - margin: 0 - font-size: $FONT_SIZE_MONO - background-color: $COLOR_CODE_BACKGROUND - -pre - padding: 10px - - code - padding: 0 - font-size: 100% - background-color: transparent - -.tsd-typography - line-height: $LINE_HEIGHT - - ul - list-style: square - padding: 0 0 0 20px - margin: 0 - - h4, h5, h6 - font-size: 1em - margin: 0 - - h5, h6 - font-weight: normal - - p, ul, ol - margin: 1em 0 \ No newline at end of file diff --git a/tools/doc/typedoc-theme/assets/css/vendors/_highlight.js.sass b/tools/doc/typedoc-theme/assets/css/vendors/_highlight.js.sass deleted file mode 100644 index d093f7a57c..0000000000 --- a/tools/doc/typedoc-theme/assets/css/vendors/_highlight.js.sass +++ /dev/null @@ -1,50 +0,0 @@ -/* - * - *Visual Studio-like style based on original C# coloring by Jason Diamond - -.hljs - display: inline-block - padding: 0.5em - background: white - color: black - -.hljs-comment, .hljs-annotation, .hljs-template_comment, .diff .hljs-header, .hljs-chunk, .apache .hljs-cbracket - color: #008000 - -.hljs-keyword, .hljs-id, .hljs-built_in, .css .smalltalk .hljs-class, .hljs-winutils, .bash .hljs-variable, .tex .hljs-command, .hljs-request, .hljs-status, .nginx .hljs-title - color: #00f - -.xml .hljs-tag - color: #00f - .hljs-value - color: #00f - -.hljs-string, .hljs-title, .hljs-parent, .hljs-tag .hljs-value, .hljs-rules .hljs-value - color: #a31515 - -.ruby .hljs-symbol - color: #a31515 - .hljs-string - color: #a31515 - -.hljs-template_tag, .django .hljs-variable, .hljs-addition, .hljs-flow, .hljs-stream, .apache .hljs-tag, .hljs-date, .tex .hljs-formula, .coffeescript .hljs-attribute - color: #a31515 - -.ruby .hljs-string, .hljs-decorator, .hljs-filter .hljs-argument, .hljs-localvars, .hljs-array, .hljs-attr_selector, .hljs-pseudo, .hljs-pi, .hljs-doctype, .hljs-deletion, .hljs-envvar, .hljs-shebang, .hljs-preprocessor, .hljs-pragma, .userType, .apache .hljs-sqbracket, .nginx .hljs-built_in, .tex .hljs-special, .hljs-prompt - color: #2b91af - -.hljs-phpdoc, .hljs-javadoc, .hljs-xmlDocTag - color: #808080 - -.vhdl - .hljs-typename - font-weight: bold - .hljs-string - color: #666666 - .hljs-literal - color: #a31515 - .hljs-attribute - color: #00b0e8 - -.xml .hljs-attribute - color: #f00 \ No newline at end of file diff --git a/tools/doc/typedoc-theme/assets/css/vendors/_normalize.sass b/tools/doc/typedoc-theme/assets/css/vendors/_normalize.sass deleted file mode 100644 index 6ce844af3a..0000000000 --- a/tools/doc/typedoc-theme/assets/css/vendors/_normalize.sass +++ /dev/null @@ -1,424 +0,0 @@ -/*! normalize.css v1.1.3 | MIT License | git.io/normalize - -/* ========================================================================== - * HTML5 display definitions - * ========================================================================== - -/** - * Correct `block` display not defined in IE 6/7/8/9 and Firefox 3. - -article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary - display: block - -/** - * Correct `inline-block` display not defined in IE 6/7/8/9 and Firefox 3. - -audio, canvas, video - display: inline-block - *display: inline - *zoom: 1 - -/** - * Prevent modern browsers from displaying `audio` without controls. - * Remove excess height in iOS 5 devices. - -audio:not([controls]) - display: none - height: 0 - -/** - * Address styling not present in IE 7/8/9, Firefox 3, and Safari 4. - * Known issue: no IE 6 support. - -[hidden] - display: none - -/* ========================================================================== - * Base - * ========================================================================== - -/** - * 1. Correct text resizing oddly in IE 6/7 when body `font-size` is set using - * `em` units. - * 2. Prevent iOS text size adjust after orientation change, without disabling - * user zoom. - -html - font-size: 100% - /* 1 - -ms-text-size-adjust: 100% - /* 2 - -webkit-text-size-adjust: 100% - /* 2 - font-family: sans-serif - -/** - * Address `font-family` inconsistency between `textarea` and other form - * elements. - -button, input, select, textarea - font-family: sans-serif - -/** - * Address margins handled incorrectly in IE 6/7. - -body - margin: 0 - -/* ========================================================================== - * Links - * ========================================================================== - -/** - * Address `outline` inconsistency between Chrome and other browsers. - -a - &:focus - outline: thin dotted - &:active, &:hover - outline: 0 - -/** - * Improve readability when focused and also mouse hovered in all browsers. - -/* ========================================================================== - * Typography - * ========================================================================== - -/** - * Address font sizes and margins set differently in IE 6/7. - * Address font sizes within `section` and `article` in Firefox 4+, Safari 5, - * and Chrome. - -h1 - font-size: 2em - margin: 0.67em 0 - -h2 - font-size: 1.5em - margin: 0.83em 0 - -h3 - font-size: 1.17em - margin: 1em 0 - -h4 - font-size: 1em - margin: 1.33em 0 - -h5 - font-size: 0.83em - margin: 1.67em 0 - -h6 - font-size: 0.67em - margin: 2.33em 0 - -/** - * Address styling not present in IE 7/8/9, Safari 5, and Chrome. - -abbr[title] - border-bottom: 1px dotted - -/** - * Address style set to `bolder` in Firefox 3+, Safari 4/5, and Chrome. - -b, strong - font-weight: bold - -blockquote - margin: 1em 40px - -/** - * Address styling not present in Safari 5 and Chrome. - -dfn - font-style: italic - -/** - * Address differences between Firefox and other browsers. - * Known issue: no IE 6/7 normalization. - -hr - -moz-box-sizing: content-box - box-sizing: content-box - height: 0 - -/** - * Address styling not present in IE 6/7/8/9. - -mark - background: #ff0 - color: #000 - -/** - * Address margins set differently in IE 6/7. - -p, pre - margin: 1em 0 - -/** - * Correct font family set oddly in IE 6, Safari 4/5, and Chrome. - -code, kbd, pre, samp - font-family: monospace, serif - _font-family: 'courier new', monospace - font-size: 1em - -/** - * Improve readability of pre-formatted text in all browsers. - -pre - white-space: pre - white-space: pre-wrap - word-wrap: break-word - -/** - * Address CSS quotes not supported in IE 6/7. - -q - quotes: none - &:before, &:after - content: '' - content: none - -/** - * Address `quotes` property not supported in Safari 4. - -/** - * Address inconsistent and variable font size in all browsers. - -small - font-size: 80% - -/** - * Prevent `sub` and `sup` affecting `line-height` in all browsers. - -sub - font-size: 75% - line-height: 0 - position: relative - vertical-align: baseline - -sup - font-size: 75% - line-height: 0 - position: relative - vertical-align: baseline - top: -0.5em - -sub - bottom: -0.25em - -/* ========================================================================== - * Lists - * ========================================================================== - -/** - * Address margins set differently in IE 6/7. - -dl, menu, ol, ul - margin: 1em 0 - -dd - margin: 0 0 0 40px - -/** - * Address paddings set differently in IE 6/7. - -menu, ol, ul - padding: 0 0 0 40px - -/** - * Correct list images handled incorrectly in IE 7. - -nav - ul, ol - list-style: none - list-style-image: none - -/* ========================================================================== - * Embedded content - * ========================================================================== - -/** - * 1. Remove border when inside `a` element in IE 6/7/8/9 and Firefox 3. - * 2. Improve image quality when scaled in IE 7. - -img - border: 0 - /* 1 - -ms-interpolation-mode: bicubic -/* 2 - -/** - * Correct overflow displayed oddly in IE 9. - -svg:not(:root) - overflow: hidden - -/* ========================================================================== - * Figures - * ========================================================================== - -/** - * Address margin not present in IE 6/7/8/9, Safari 5, and Opera 11. - -figure, form - margin: 0 - -/* ========================================================================== - * Forms - * ========================================================================== - -/** - * Correct margin displayed oddly in IE 6/7. - -/** - * Define consistent border, margin, and padding. - -fieldset - border: 1px solid #c0c0c0 - margin: 0 2px - padding: 0.35em 0.625em 0.75em - -/** - * 1. Correct color not being inherited in IE 6/7/8/9. - * 2. Correct text not wrapping in Firefox 3. - * 3. Correct alignment displayed oddly in IE 6/7. - -legend - border: 0 - /* 1 - padding: 0 - white-space: normal - /* 2 - *margin-left: -7px -/* 3 - -/** - * 1. Correct font size not being inherited in all browsers. - * 2. Address margins set differently in IE 6/7, Firefox 3+, Safari 5, - * and Chrome. - * 3. Improve appearance and consistency in all browsers. - -button, input, select, textarea - font-size: 100% - /* 1 - margin: 0 - /* 2 - vertical-align: baseline - /* 3 - *vertical-align: middle -/* 3 - -/** - * Address Firefox 3+ setting `line-height` on `input` using `!important` in - * the UA stylesheet. - -button, input - line-height: normal - -/** - * Address inconsistent `text-transform` inheritance for `button` and `select`. - * All other form control elements do not inherit `text-transform` values. - * Correct `button` style inheritance in Chrome, Safari 5+, and IE 6+. - * Correct `select` style inheritance in Firefox 4+ and Opera. - -button, select - text-transform: none - -/** - * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` - * and `video` controls. - * 2. Correct inability to style clickable `input` types in iOS. - * 3. Improve usability and consistency of cursor style between image-type - * `input` and others. - * 4. Remove inner spacing in IE 7 without affecting normal text inputs. - * Known issue: inner spacing remains in IE 6. - -button, html input[type="button"] - -webkit-appearance: button - /* 2 - cursor: pointer - /* 3 - *overflow: visible -/* 4 - -input - &[type="reset"], &[type="submit"] - -webkit-appearance: button - /* 2 - cursor: pointer - /* 3 - *overflow: visible -/* 4 - -/** - * Re-set default cursor for disabled elements. - -button[disabled], html input[disabled] - cursor: default - -/** - * 1. Address box sizing set to content-box in IE 8/9. - * 2. Remove excess padding in IE 8/9. - * 3. Remove excess padding in IE 7. - * Known issue: excess padding remains in IE 6. - -input - &[type="checkbox"], &[type="radio"] - box-sizing: border-box - /* 1 - padding: 0 - /* 2 - *height: 13px - /* 3 - *width: 13px - /* 3 - &[type="search"] - -webkit-appearance: textfield - /* 1 - -moz-box-sizing: content-box - -webkit-box-sizing: content-box - /* 2 - box-sizing: content-box - &::-webkit-search-cancel-button, &::-webkit-search-decoration - -webkit-appearance: none - -/** - * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. - * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome - * (include `-moz` to future-proof). - -/** - * Remove inner padding and search cancel button in Safari 5 and Chrome - * on OS X. - -/** - * Remove inner padding and border in Firefox 3+. - -button::-moz-focus-inner, input::-moz-focus-inner - border: 0 - padding: 0 - -/** - * 1. Remove default vertical scrollbar in IE 6/7/8/9. - * 2. Improve readability and alignment in all browsers. - -textarea - overflow: auto - /* 1 - vertical-align: top -/* 2 - -/* ========================================================================== - * Tables - * ========================================================================== - -/** - * Remove most spacing between table cells. - -table - border-collapse: collapse - border-spacing: 0 diff --git a/tools/doc/typedoc-theme/assets/js/main.js b/tools/doc/typedoc-theme/assets/js/main.js new file mode 100644 index 0000000000..f8f96a606b --- /dev/null +++ b/tools/doc/typedoc-theme/assets/js/main.js @@ -0,0 +1,248 @@ +/* + * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). + * This devtool is not neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "../node_modules/lunr/lunr.js": +/*!************************************!*\ + !*** ../node_modules/lunr/lunr.js ***! + \************************************/ +/***/ ((module, exports, __webpack_require__) => { + +eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/**\n * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9\n * Copyright (C) 2020 Oliver Nightingale\n * @license MIT\n */\n\n;(function(){\n\n/**\n * A convenience function for configuring and constructing\n * a new lunr Index.\n *\n * A lunr.Builder instance is created and the pipeline setup\n * with a trimmer, stop word filter and stemmer.\n *\n * This builder object is yielded to the configuration function\n * that is passed as a parameter, allowing the list of fields\n * and other builder parameters to be customised.\n *\n * All documents _must_ be added within the passed config function.\n *\n * @example\n * var idx = lunr(function () {\n * this.field('title')\n * this.field('body')\n * this.ref('id')\n *\n * documents.forEach(function (doc) {\n * this.add(doc)\n * }, this)\n * })\n *\n * @see {@link lunr.Builder}\n * @see {@link lunr.Pipeline}\n * @see {@link lunr.trimmer}\n * @see {@link lunr.stopWordFilter}\n * @see {@link lunr.stemmer}\n * @namespace {function} lunr\n */\nvar lunr = function (config) {\n var builder = new lunr.Builder\n\n builder.pipeline.add(\n lunr.trimmer,\n lunr.stopWordFilter,\n lunr.stemmer\n )\n\n builder.searchPipeline.add(\n lunr.stemmer\n )\n\n config.call(builder, builder)\n return builder.build()\n}\n\nlunr.version = \"2.3.9\"\n/*!\n * lunr.utils\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * A namespace containing utils for the rest of the lunr library\n * @namespace lunr.utils\n */\nlunr.utils = {}\n\n/**\n * Print a warning message to the console.\n *\n * @param {String} message The message to be printed.\n * @memberOf lunr.utils\n * @function\n */\nlunr.utils.warn = (function (global) {\n /* eslint-disable no-console */\n return function (message) {\n if (global.console && console.warn) {\n console.warn(message)\n }\n }\n /* eslint-enable no-console */\n})(this)\n\n/**\n * Convert an object to a string.\n *\n * In the case of `null` and `undefined` the function returns\n * the empty string, in all other cases the result of calling\n * `toString` on the passed object is returned.\n *\n * @param {Any} obj The object to convert to a string.\n * @return {String} string representation of the passed object.\n * @memberOf lunr.utils\n */\nlunr.utils.asString = function (obj) {\n if (obj === void 0 || obj === null) {\n return \"\"\n } else {\n return obj.toString()\n }\n}\n\n/**\n * Clones an object.\n *\n * Will create a copy of an existing object such that any mutations\n * on the copy cannot affect the original.\n *\n * Only shallow objects are supported, passing a nested object to this\n * function will cause a TypeError.\n *\n * Objects with primitives, and arrays of primitives are supported.\n *\n * @param {Object} obj The object to clone.\n * @return {Object} a clone of the passed object.\n * @throws {TypeError} when a nested object is passed.\n * @memberOf Utils\n */\nlunr.utils.clone = function (obj) {\n if (obj === null || obj === undefined) {\n return obj\n }\n\n var clone = Object.create(null),\n keys = Object.keys(obj)\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i],\n val = obj[key]\n\n if (Array.isArray(val)) {\n clone[key] = val.slice()\n continue\n }\n\n if (typeof val === 'string' ||\n typeof val === 'number' ||\n typeof val === 'boolean') {\n clone[key] = val\n continue\n }\n\n throw new TypeError(\"clone is not deep and does not support nested objects\")\n }\n\n return clone\n}\nlunr.FieldRef = function (docRef, fieldName, stringValue) {\n this.docRef = docRef\n this.fieldName = fieldName\n this._stringValue = stringValue\n}\n\nlunr.FieldRef.joiner = \"/\"\n\nlunr.FieldRef.fromString = function (s) {\n var n = s.indexOf(lunr.FieldRef.joiner)\n\n if (n === -1) {\n throw \"malformed field ref string\"\n }\n\n var fieldRef = s.slice(0, n),\n docRef = s.slice(n + 1)\n\n return new lunr.FieldRef (docRef, fieldRef, s)\n}\n\nlunr.FieldRef.prototype.toString = function () {\n if (this._stringValue == undefined) {\n this._stringValue = this.fieldName + lunr.FieldRef.joiner + this.docRef\n }\n\n return this._stringValue\n}\n/*!\n * lunr.Set\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * A lunr set.\n *\n * @constructor\n */\nlunr.Set = function (elements) {\n this.elements = Object.create(null)\n\n if (elements) {\n this.length = elements.length\n\n for (var i = 0; i < this.length; i++) {\n this.elements[elements[i]] = true\n }\n } else {\n this.length = 0\n }\n}\n\n/**\n * A complete set that contains all elements.\n *\n * @static\n * @readonly\n * @type {lunr.Set}\n */\nlunr.Set.complete = {\n intersect: function (other) {\n return other\n },\n\n union: function () {\n return this\n },\n\n contains: function () {\n return true\n }\n}\n\n/**\n * An empty set that contains no elements.\n *\n * @static\n * @readonly\n * @type {lunr.Set}\n */\nlunr.Set.empty = {\n intersect: function () {\n return this\n },\n\n union: function (other) {\n return other\n },\n\n contains: function () {\n return false\n }\n}\n\n/**\n * Returns true if this set contains the specified object.\n *\n * @param {object} object - Object whose presence in this set is to be tested.\n * @returns {boolean} - True if this set contains the specified object.\n */\nlunr.Set.prototype.contains = function (object) {\n return !!this.elements[object]\n}\n\n/**\n * Returns a new set containing only the elements that are present in both\n * this set and the specified set.\n *\n * @param {lunr.Set} other - set to intersect with this set.\n * @returns {lunr.Set} a new set that is the intersection of this and the specified set.\n */\n\nlunr.Set.prototype.intersect = function (other) {\n var a, b, elements, intersection = []\n\n if (other === lunr.Set.complete) {\n return this\n }\n\n if (other === lunr.Set.empty) {\n return other\n }\n\n if (this.length < other.length) {\n a = this\n b = other\n } else {\n a = other\n b = this\n }\n\n elements = Object.keys(a.elements)\n\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i]\n if (element in b.elements) {\n intersection.push(element)\n }\n }\n\n return new lunr.Set (intersection)\n}\n\n/**\n * Returns a new set combining the elements of this and the specified set.\n *\n * @param {lunr.Set} other - set to union with this set.\n * @return {lunr.Set} a new set that is the union of this and the specified set.\n */\n\nlunr.Set.prototype.union = function (other) {\n if (other === lunr.Set.complete) {\n return lunr.Set.complete\n }\n\n if (other === lunr.Set.empty) {\n return this\n }\n\n return new lunr.Set(Object.keys(this.elements).concat(Object.keys(other.elements)))\n}\n/**\n * A function to calculate the inverse document frequency for\n * a posting. This is shared between the builder and the index\n *\n * @private\n * @param {object} posting - The posting for a given term\n * @param {number} documentCount - The total number of documents.\n */\nlunr.idf = function (posting, documentCount) {\n var documentsWithTerm = 0\n\n for (var fieldName in posting) {\n if (fieldName == '_index') continue // Ignore the term index, its not a field\n documentsWithTerm += Object.keys(posting[fieldName]).length\n }\n\n var x = (documentCount - documentsWithTerm + 0.5) / (documentsWithTerm + 0.5)\n\n return Math.log(1 + Math.abs(x))\n}\n\n/**\n * A token wraps a string representation of a token\n * as it is passed through the text processing pipeline.\n *\n * @constructor\n * @param {string} [str=''] - The string token being wrapped.\n * @param {object} [metadata={}] - Metadata associated with this token.\n */\nlunr.Token = function (str, metadata) {\n this.str = str || \"\"\n this.metadata = metadata || {}\n}\n\n/**\n * Returns the token string that is being wrapped by this object.\n *\n * @returns {string}\n */\nlunr.Token.prototype.toString = function () {\n return this.str\n}\n\n/**\n * A token update function is used when updating or optionally\n * when cloning a token.\n *\n * @callback lunr.Token~updateFunction\n * @param {string} str - The string representation of the token.\n * @param {Object} metadata - All metadata associated with this token.\n */\n\n/**\n * Applies the given function to the wrapped string token.\n *\n * @example\n * token.update(function (str, metadata) {\n * return str.toUpperCase()\n * })\n *\n * @param {lunr.Token~updateFunction} fn - A function to apply to the token string.\n * @returns {lunr.Token}\n */\nlunr.Token.prototype.update = function (fn) {\n this.str = fn(this.str, this.metadata)\n return this\n}\n\n/**\n * Creates a clone of this token. Optionally a function can be\n * applied to the cloned token.\n *\n * @param {lunr.Token~updateFunction} [fn] - An optional function to apply to the cloned token.\n * @returns {lunr.Token}\n */\nlunr.Token.prototype.clone = function (fn) {\n fn = fn || function (s) { return s }\n return new lunr.Token (fn(this.str, this.metadata), this.metadata)\n}\n/*!\n * lunr.tokenizer\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * A function for splitting a string into tokens ready to be inserted into\n * the search index. Uses `lunr.tokenizer.separator` to split strings, change\n * the value of this property to change how strings are split into tokens.\n *\n * This tokenizer will convert its parameter to a string by calling `toString` and\n * then will split this string on the character in `lunr.tokenizer.separator`.\n * Arrays will have their elements converted to strings and wrapped in a lunr.Token.\n *\n * Optional metadata can be passed to the tokenizer, this metadata will be cloned and\n * added as metadata to every token that is created from the object to be tokenized.\n *\n * @static\n * @param {?(string|object|object[])} obj - The object to convert into tokens\n * @param {?object} metadata - Optional metadata to associate with every token\n * @returns {lunr.Token[]}\n * @see {@link lunr.Pipeline}\n */\nlunr.tokenizer = function (obj, metadata) {\n if (obj == null || obj == undefined) {\n return []\n }\n\n if (Array.isArray(obj)) {\n return obj.map(function (t) {\n return new lunr.Token(\n lunr.utils.asString(t).toLowerCase(),\n lunr.utils.clone(metadata)\n )\n })\n }\n\n var str = obj.toString().toLowerCase(),\n len = str.length,\n tokens = []\n\n for (var sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) {\n var char = str.charAt(sliceEnd),\n sliceLength = sliceEnd - sliceStart\n\n if ((char.match(lunr.tokenizer.separator) || sliceEnd == len)) {\n\n if (sliceLength > 0) {\n var tokenMetadata = lunr.utils.clone(metadata) || {}\n tokenMetadata[\"position\"] = [sliceStart, sliceLength]\n tokenMetadata[\"index\"] = tokens.length\n\n tokens.push(\n new lunr.Token (\n str.slice(sliceStart, sliceEnd),\n tokenMetadata\n )\n )\n }\n\n sliceStart = sliceEnd + 1\n }\n\n }\n\n return tokens\n}\n\n/**\n * The separator used to split a string into tokens. Override this property to change the behaviour of\n * `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens.\n *\n * @static\n * @see lunr.tokenizer\n */\nlunr.tokenizer.separator = /[\\s\\-]+/\n/*!\n * lunr.Pipeline\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * lunr.Pipelines maintain an ordered list of functions to be applied to all\n * tokens in documents entering the search index and queries being ran against\n * the index.\n *\n * An instance of lunr.Index created with the lunr shortcut will contain a\n * pipeline with a stop word filter and an English language stemmer. Extra\n * functions can be added before or after either of these functions or these\n * default functions can be removed.\n *\n * When run the pipeline will call each function in turn, passing a token, the\n * index of that token in the original list of all tokens and finally a list of\n * all the original tokens.\n *\n * The output of functions in the pipeline will be passed to the next function\n * in the pipeline. To exclude a token from entering the index the function\n * should return undefined, the rest of the pipeline will not be called with\n * this token.\n *\n * For serialisation of pipelines to work, all functions used in an instance of\n * a pipeline should be registered with lunr.Pipeline. Registered functions can\n * then be loaded. If trying to load a serialised pipeline that uses functions\n * that are not registered an error will be thrown.\n *\n * If not planning on serialising the pipeline then registering pipeline functions\n * is not necessary.\n *\n * @constructor\n */\nlunr.Pipeline = function () {\n this._stack = []\n}\n\nlunr.Pipeline.registeredFunctions = Object.create(null)\n\n/**\n * A pipeline function maps lunr.Token to lunr.Token. A lunr.Token contains the token\n * string as well as all known metadata. A pipeline function can mutate the token string\n * or mutate (or add) metadata for a given token.\n *\n * A pipeline function can indicate that the passed token should be discarded by returning\n * null, undefined or an empty string. This token will not be passed to any downstream pipeline\n * functions and will not be added to the index.\n *\n * Multiple tokens can be returned by returning an array of tokens. Each token will be passed\n * to any downstream pipeline functions and all will returned tokens will be added to the index.\n *\n * Any number of pipeline functions may be chained together using a lunr.Pipeline.\n *\n * @interface lunr.PipelineFunction\n * @param {lunr.Token} token - A token from the document being processed.\n * @param {number} i - The index of this token in the complete list of tokens for this document/field.\n * @param {lunr.Token[]} tokens - All tokens for this document/field.\n * @returns {(?lunr.Token|lunr.Token[])}\n */\n\n/**\n * Register a function with the pipeline.\n *\n * Functions that are used in the pipeline should be registered if the pipeline\n * needs to be serialised, or a serialised pipeline needs to be loaded.\n *\n * Registering a function does not add it to a pipeline, functions must still be\n * added to instances of the pipeline for them to be used when running a pipeline.\n *\n * @param {lunr.PipelineFunction} fn - The function to check for.\n * @param {String} label - The label to register this function with\n */\nlunr.Pipeline.registerFunction = function (fn, label) {\n if (label in this.registeredFunctions) {\n lunr.utils.warn('Overwriting existing registered function: ' + label)\n }\n\n fn.label = label\n lunr.Pipeline.registeredFunctions[fn.label] = fn\n}\n\n/**\n * Warns if the function is not registered as a Pipeline function.\n *\n * @param {lunr.PipelineFunction} fn - The function to check for.\n * @private\n */\nlunr.Pipeline.warnIfFunctionNotRegistered = function (fn) {\n var isRegistered = fn.label && (fn.label in this.registeredFunctions)\n\n if (!isRegistered) {\n lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\\n', fn)\n }\n}\n\n/**\n * Loads a previously serialised pipeline.\n *\n * All functions to be loaded must already be registered with lunr.Pipeline.\n * If any function from the serialised data has not been registered then an\n * error will be thrown.\n *\n * @param {Object} serialised - The serialised pipeline to load.\n * @returns {lunr.Pipeline}\n */\nlunr.Pipeline.load = function (serialised) {\n var pipeline = new lunr.Pipeline\n\n serialised.forEach(function (fnName) {\n var fn = lunr.Pipeline.registeredFunctions[fnName]\n\n if (fn) {\n pipeline.add(fn)\n } else {\n throw new Error('Cannot load unregistered function: ' + fnName)\n }\n })\n\n return pipeline\n}\n\n/**\n * Adds new functions to the end of the pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction[]} functions - Any number of functions to add to the pipeline.\n */\nlunr.Pipeline.prototype.add = function () {\n var fns = Array.prototype.slice.call(arguments)\n\n fns.forEach(function (fn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(fn)\n this._stack.push(fn)\n }, this)\n}\n\n/**\n * Adds a single function after a function that already exists in the\n * pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.\n * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.\n */\nlunr.Pipeline.prototype.after = function (existingFn, newFn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(newFn)\n\n var pos = this._stack.indexOf(existingFn)\n if (pos == -1) {\n throw new Error('Cannot find existingFn')\n }\n\n pos = pos + 1\n this._stack.splice(pos, 0, newFn)\n}\n\n/**\n * Adds a single function before a function that already exists in the\n * pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.\n * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.\n */\nlunr.Pipeline.prototype.before = function (existingFn, newFn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(newFn)\n\n var pos = this._stack.indexOf(existingFn)\n if (pos == -1) {\n throw new Error('Cannot find existingFn')\n }\n\n this._stack.splice(pos, 0, newFn)\n}\n\n/**\n * Removes a function from the pipeline.\n *\n * @param {lunr.PipelineFunction} fn The function to remove from the pipeline.\n */\nlunr.Pipeline.prototype.remove = function (fn) {\n var pos = this._stack.indexOf(fn)\n if (pos == -1) {\n return\n }\n\n this._stack.splice(pos, 1)\n}\n\n/**\n * Runs the current list of functions that make up the pipeline against the\n * passed tokens.\n *\n * @param {Array} tokens The tokens to run through the pipeline.\n * @returns {Array}\n */\nlunr.Pipeline.prototype.run = function (tokens) {\n var stackLength = this._stack.length\n\n for (var i = 0; i < stackLength; i++) {\n var fn = this._stack[i]\n var memo = []\n\n for (var j = 0; j < tokens.length; j++) {\n var result = fn(tokens[j], j, tokens)\n\n if (result === null || result === void 0 || result === '') continue\n\n if (Array.isArray(result)) {\n for (var k = 0; k < result.length; k++) {\n memo.push(result[k])\n }\n } else {\n memo.push(result)\n }\n }\n\n tokens = memo\n }\n\n return tokens\n}\n\n/**\n * Convenience method for passing a string through a pipeline and getting\n * strings out. This method takes care of wrapping the passed string in a\n * token and mapping the resulting tokens back to strings.\n *\n * @param {string} str - The string to pass through the pipeline.\n * @param {?object} metadata - Optional metadata to associate with the token\n * passed to the pipeline.\n * @returns {string[]}\n */\nlunr.Pipeline.prototype.runString = function (str, metadata) {\n var token = new lunr.Token (str, metadata)\n\n return this.run([token]).map(function (t) {\n return t.toString()\n })\n}\n\n/**\n * Resets the pipeline by removing any existing processors.\n *\n */\nlunr.Pipeline.prototype.reset = function () {\n this._stack = []\n}\n\n/**\n * Returns a representation of the pipeline ready for serialisation.\n *\n * Logs a warning if the function has not been registered.\n *\n * @returns {Array}\n */\nlunr.Pipeline.prototype.toJSON = function () {\n return this._stack.map(function (fn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(fn)\n\n return fn.label\n })\n}\n/*!\n * lunr.Vector\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * A vector is used to construct the vector space of documents and queries. These\n * vectors support operations to determine the similarity between two documents or\n * a document and a query.\n *\n * Normally no parameters are required for initializing a vector, but in the case of\n * loading a previously dumped vector the raw elements can be provided to the constructor.\n *\n * For performance reasons vectors are implemented with a flat array, where an elements\n * index is immediately followed by its value. E.g. [index, value, index, value]. This\n * allows the underlying array to be as sparse as possible and still offer decent\n * performance when being used for vector calculations.\n *\n * @constructor\n * @param {Number[]} [elements] - The flat list of element index and element value pairs.\n */\nlunr.Vector = function (elements) {\n this._magnitude = 0\n this.elements = elements || []\n}\n\n\n/**\n * Calculates the position within the vector to insert a given index.\n *\n * This is used internally by insert and upsert. If there are duplicate indexes then\n * the position is returned as if the value for that index were to be updated, but it\n * is the callers responsibility to check whether there is a duplicate at that index\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @returns {Number}\n */\nlunr.Vector.prototype.positionForIndex = function (index) {\n // For an empty vector the tuple can be inserted at the beginning\n if (this.elements.length == 0) {\n return 0\n }\n\n var start = 0,\n end = this.elements.length / 2,\n sliceLength = end - start,\n pivotPoint = Math.floor(sliceLength / 2),\n pivotIndex = this.elements[pivotPoint * 2]\n\n while (sliceLength > 1) {\n if (pivotIndex < index) {\n start = pivotPoint\n }\n\n if (pivotIndex > index) {\n end = pivotPoint\n }\n\n if (pivotIndex == index) {\n break\n }\n\n sliceLength = end - start\n pivotPoint = start + Math.floor(sliceLength / 2)\n pivotIndex = this.elements[pivotPoint * 2]\n }\n\n if (pivotIndex == index) {\n return pivotPoint * 2\n }\n\n if (pivotIndex > index) {\n return pivotPoint * 2\n }\n\n if (pivotIndex < index) {\n return (pivotPoint + 1) * 2\n }\n}\n\n/**\n * Inserts an element at an index within the vector.\n *\n * Does not allow duplicates, will throw an error if there is already an entry\n * for this index.\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @param {Number} val - The value to be inserted into the vector.\n */\nlunr.Vector.prototype.insert = function (insertIdx, val) {\n this.upsert(insertIdx, val, function () {\n throw \"duplicate index\"\n })\n}\n\n/**\n * Inserts or updates an existing index within the vector.\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @param {Number} val - The value to be inserted into the vector.\n * @param {function} fn - A function that is called for updates, the existing value and the\n * requested value are passed as arguments\n */\nlunr.Vector.prototype.upsert = function (insertIdx, val, fn) {\n this._magnitude = 0\n var position = this.positionForIndex(insertIdx)\n\n if (this.elements[position] == insertIdx) {\n this.elements[position + 1] = fn(this.elements[position + 1], val)\n } else {\n this.elements.splice(position, 0, insertIdx, val)\n }\n}\n\n/**\n * Calculates the magnitude of this vector.\n *\n * @returns {Number}\n */\nlunr.Vector.prototype.magnitude = function () {\n if (this._magnitude) return this._magnitude\n\n var sumOfSquares = 0,\n elementsLength = this.elements.length\n\n for (var i = 1; i < elementsLength; i += 2) {\n var val = this.elements[i]\n sumOfSquares += val * val\n }\n\n return this._magnitude = Math.sqrt(sumOfSquares)\n}\n\n/**\n * Calculates the dot product of this vector and another vector.\n *\n * @param {lunr.Vector} otherVector - The vector to compute the dot product with.\n * @returns {Number}\n */\nlunr.Vector.prototype.dot = function (otherVector) {\n var dotProduct = 0,\n a = this.elements, b = otherVector.elements,\n aLen = a.length, bLen = b.length,\n aVal = 0, bVal = 0,\n i = 0, j = 0\n\n while (i < aLen && j < bLen) {\n aVal = a[i], bVal = b[j]\n if (aVal < bVal) {\n i += 2\n } else if (aVal > bVal) {\n j += 2\n } else if (aVal == bVal) {\n dotProduct += a[i + 1] * b[j + 1]\n i += 2\n j += 2\n }\n }\n\n return dotProduct\n}\n\n/**\n * Calculates the similarity between this vector and another vector.\n *\n * @param {lunr.Vector} otherVector - The other vector to calculate the\n * similarity with.\n * @returns {Number}\n */\nlunr.Vector.prototype.similarity = function (otherVector) {\n return this.dot(otherVector) / this.magnitude() || 0\n}\n\n/**\n * Converts the vector to an array of the elements within the vector.\n *\n * @returns {Number[]}\n */\nlunr.Vector.prototype.toArray = function () {\n var output = new Array (this.elements.length / 2)\n\n for (var i = 1, j = 0; i < this.elements.length; i += 2, j++) {\n output[j] = this.elements[i]\n }\n\n return output\n}\n\n/**\n * A JSON serializable representation of the vector.\n *\n * @returns {Number[]}\n */\nlunr.Vector.prototype.toJSON = function () {\n return this.elements\n}\n/* eslint-disable */\n/*!\n * lunr.stemmer\n * Copyright (C) 2020 Oliver Nightingale\n * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt\n */\n\n/**\n * lunr.stemmer is an english language stemmer, this is a JavaScript\n * implementation of the PorterStemmer taken from http://tartarus.org/~martin\n *\n * @static\n * @implements {lunr.PipelineFunction}\n * @param {lunr.Token} token - The string to stem\n * @returns {lunr.Token}\n * @see {@link lunr.Pipeline}\n * @function\n */\nlunr.stemmer = (function(){\n var step2list = {\n \"ational\" : \"ate\",\n \"tional\" : \"tion\",\n \"enci\" : \"ence\",\n \"anci\" : \"ance\",\n \"izer\" : \"ize\",\n \"bli\" : \"ble\",\n \"alli\" : \"al\",\n \"entli\" : \"ent\",\n \"eli\" : \"e\",\n \"ousli\" : \"ous\",\n \"ization\" : \"ize\",\n \"ation\" : \"ate\",\n \"ator\" : \"ate\",\n \"alism\" : \"al\",\n \"iveness\" : \"ive\",\n \"fulness\" : \"ful\",\n \"ousness\" : \"ous\",\n \"aliti\" : \"al\",\n \"iviti\" : \"ive\",\n \"biliti\" : \"ble\",\n \"logi\" : \"log\"\n },\n\n step3list = {\n \"icate\" : \"ic\",\n \"ative\" : \"\",\n \"alize\" : \"al\",\n \"iciti\" : \"ic\",\n \"ical\" : \"ic\",\n \"ful\" : \"\",\n \"ness\" : \"\"\n },\n\n c = \"[^aeiou]\", // consonant\n v = \"[aeiouy]\", // vowel\n C = c + \"[^aeiouy]*\", // consonant sequence\n V = v + \"[aeiou]*\", // vowel sequence\n\n mgr0 = \"^(\" + C + \")?\" + V + C, // [C]VC... is m>0\n meq1 = \"^(\" + C + \")?\" + V + C + \"(\" + V + \")?$\", // [C]VC[V] is m=1\n mgr1 = \"^(\" + C + \")?\" + V + C + V + C, // [C]VCVC... is m>1\n s_v = \"^(\" + C + \")?\" + v; // vowel in stem\n\n var re_mgr0 = new RegExp(mgr0);\n var re_mgr1 = new RegExp(mgr1);\n var re_meq1 = new RegExp(meq1);\n var re_s_v = new RegExp(s_v);\n\n var re_1a = /^(.+?)(ss|i)es$/;\n var re2_1a = /^(.+?)([^s])s$/;\n var re_1b = /^(.+?)eed$/;\n var re2_1b = /^(.+?)(ed|ing)$/;\n var re_1b_2 = /.$/;\n var re2_1b_2 = /(at|bl|iz)$/;\n var re3_1b_2 = new RegExp(\"([^aeiouylsz])\\\\1$\");\n var re4_1b_2 = new RegExp(\"^\" + C + v + \"[^aeiouwxy]$\");\n\n var re_1c = /^(.+?[^aeiou])y$/;\n var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;\n\n var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;\n\n var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;\n var re2_4 = /^(.+?)(s|t)(ion)$/;\n\n var re_5 = /^(.+?)e$/;\n var re_5_1 = /ll$/;\n var re3_5 = new RegExp(\"^\" + C + v + \"[^aeiouwxy]$\");\n\n var porterStemmer = function porterStemmer(w) {\n var stem,\n suffix,\n firstch,\n re,\n re2,\n re3,\n re4;\n\n if (w.length < 3) { return w; }\n\n firstch = w.substr(0,1);\n if (firstch == \"y\") {\n w = firstch.toUpperCase() + w.substr(1);\n }\n\n // Step 1a\n re = re_1a\n re2 = re2_1a;\n\n if (re.test(w)) { w = w.replace(re,\"$1$2\"); }\n else if (re2.test(w)) { w = w.replace(re2,\"$1$2\"); }\n\n // Step 1b\n re = re_1b;\n re2 = re2_1b;\n if (re.test(w)) {\n var fp = re.exec(w);\n re = re_mgr0;\n if (re.test(fp[1])) {\n re = re_1b_2;\n w = w.replace(re,\"\");\n }\n } else if (re2.test(w)) {\n var fp = re2.exec(w);\n stem = fp[1];\n re2 = re_s_v;\n if (re2.test(stem)) {\n w = stem;\n re2 = re2_1b_2;\n re3 = re3_1b_2;\n re4 = re4_1b_2;\n if (re2.test(w)) { w = w + \"e\"; }\n else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,\"\"); }\n else if (re4.test(w)) { w = w + \"e\"; }\n }\n }\n\n // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say)\n re = re_1c;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n w = stem + \"i\";\n }\n\n // Step 2\n re = re_2;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n suffix = fp[2];\n re = re_mgr0;\n if (re.test(stem)) {\n w = stem + step2list[suffix];\n }\n }\n\n // Step 3\n re = re_3;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n suffix = fp[2];\n re = re_mgr0;\n if (re.test(stem)) {\n w = stem + step3list[suffix];\n }\n }\n\n // Step 4\n re = re_4;\n re2 = re2_4;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n re = re_mgr1;\n if (re.test(stem)) {\n w = stem;\n }\n } else if (re2.test(w)) {\n var fp = re2.exec(w);\n stem = fp[1] + fp[2];\n re2 = re_mgr1;\n if (re2.test(stem)) {\n w = stem;\n }\n }\n\n // Step 5\n re = re_5;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n re = re_mgr1;\n re2 = re_meq1;\n re3 = re3_5;\n if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) {\n w = stem;\n }\n }\n\n re = re_5_1;\n re2 = re_mgr1;\n if (re.test(w) && re2.test(w)) {\n re = re_1b_2;\n w = w.replace(re,\"\");\n }\n\n // and turn initial Y back to y\n\n if (firstch == \"y\") {\n w = firstch.toLowerCase() + w.substr(1);\n }\n\n return w;\n };\n\n return function (token) {\n return token.update(porterStemmer);\n }\n})();\n\nlunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer')\n/*!\n * lunr.stopWordFilter\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * lunr.generateStopWordFilter builds a stopWordFilter function from the provided\n * list of stop words.\n *\n * The built in lunr.stopWordFilter is built using this generator and can be used\n * to generate custom stopWordFilters for applications or non English languages.\n *\n * @function\n * @param {Array} token The token to pass through the filter\n * @returns {lunr.PipelineFunction}\n * @see lunr.Pipeline\n * @see lunr.stopWordFilter\n */\nlunr.generateStopWordFilter = function (stopWords) {\n var words = stopWords.reduce(function (memo, stopWord) {\n memo[stopWord] = stopWord\n return memo\n }, {})\n\n return function (token) {\n if (token && words[token.toString()] !== token.toString()) return token\n }\n}\n\n/**\n * lunr.stopWordFilter is an English language stop word list filter, any words\n * contained in the list will not be passed through the filter.\n *\n * This is intended to be used in the Pipeline. If the token does not pass the\n * filter then undefined will be returned.\n *\n * @function\n * @implements {lunr.PipelineFunction}\n * @params {lunr.Token} token - A token to check for being a stop word.\n * @returns {lunr.Token}\n * @see {@link lunr.Pipeline}\n */\nlunr.stopWordFilter = lunr.generateStopWordFilter([\n 'a',\n 'able',\n 'about',\n 'across',\n 'after',\n 'all',\n 'almost',\n 'also',\n 'am',\n 'among',\n 'an',\n 'and',\n 'any',\n 'are',\n 'as',\n 'at',\n 'be',\n 'because',\n 'been',\n 'but',\n 'by',\n 'can',\n 'cannot',\n 'could',\n 'dear',\n 'did',\n 'do',\n 'does',\n 'either',\n 'else',\n 'ever',\n 'every',\n 'for',\n 'from',\n 'get',\n 'got',\n 'had',\n 'has',\n 'have',\n 'he',\n 'her',\n 'hers',\n 'him',\n 'his',\n 'how',\n 'however',\n 'i',\n 'if',\n 'in',\n 'into',\n 'is',\n 'it',\n 'its',\n 'just',\n 'least',\n 'let',\n 'like',\n 'likely',\n 'may',\n 'me',\n 'might',\n 'most',\n 'must',\n 'my',\n 'neither',\n 'no',\n 'nor',\n 'not',\n 'of',\n 'off',\n 'often',\n 'on',\n 'only',\n 'or',\n 'other',\n 'our',\n 'own',\n 'rather',\n 'said',\n 'say',\n 'says',\n 'she',\n 'should',\n 'since',\n 'so',\n 'some',\n 'than',\n 'that',\n 'the',\n 'their',\n 'them',\n 'then',\n 'there',\n 'these',\n 'they',\n 'this',\n 'tis',\n 'to',\n 'too',\n 'twas',\n 'us',\n 'wants',\n 'was',\n 'we',\n 'were',\n 'what',\n 'when',\n 'where',\n 'which',\n 'while',\n 'who',\n 'whom',\n 'why',\n 'will',\n 'with',\n 'would',\n 'yet',\n 'you',\n 'your'\n])\n\nlunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter')\n/*!\n * lunr.trimmer\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * lunr.trimmer is a pipeline function for trimming non word\n * characters from the beginning and end of tokens before they\n * enter the index.\n *\n * This implementation may not work correctly for non latin\n * characters and should either be removed or adapted for use\n * with languages with non-latin characters.\n *\n * @static\n * @implements {lunr.PipelineFunction}\n * @param {lunr.Token} token The token to pass through the filter\n * @returns {lunr.Token}\n * @see lunr.Pipeline\n */\nlunr.trimmer = function (token) {\n return token.update(function (s) {\n return s.replace(/^\\W+/, '').replace(/\\W+$/, '')\n })\n}\n\nlunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer')\n/*!\n * lunr.TokenSet\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * A token set is used to store the unique list of all tokens\n * within an index. Token sets are also used to represent an\n * incoming query to the index, this query token set and index\n * token set are then intersected to find which tokens to look\n * up in the inverted index.\n *\n * A token set can hold multiple tokens, as in the case of the\n * index token set, or it can hold a single token as in the\n * case of a simple query token set.\n *\n * Additionally token sets are used to perform wildcard matching.\n * Leading, contained and trailing wildcards are supported, and\n * from this edit distance matching can also be provided.\n *\n * Token sets are implemented as a minimal finite state automata,\n * where both common prefixes and suffixes are shared between tokens.\n * This helps to reduce the space used for storing the token set.\n *\n * @constructor\n */\nlunr.TokenSet = function () {\n this.final = false\n this.edges = {}\n this.id = lunr.TokenSet._nextId\n lunr.TokenSet._nextId += 1\n}\n\n/**\n * Keeps track of the next, auto increment, identifier to assign\n * to a new tokenSet.\n *\n * TokenSets require a unique identifier to be correctly minimised.\n *\n * @private\n */\nlunr.TokenSet._nextId = 1\n\n/**\n * Creates a TokenSet instance from the given sorted array of words.\n *\n * @param {String[]} arr - A sorted array of strings to create the set from.\n * @returns {lunr.TokenSet}\n * @throws Will throw an error if the input array is not sorted.\n */\nlunr.TokenSet.fromArray = function (arr) {\n var builder = new lunr.TokenSet.Builder\n\n for (var i = 0, len = arr.length; i < len; i++) {\n builder.insert(arr[i])\n }\n\n builder.finish()\n return builder.root\n}\n\n/**\n * Creates a token set from a query clause.\n *\n * @private\n * @param {Object} clause - A single clause from lunr.Query.\n * @param {string} clause.term - The query clause term.\n * @param {number} [clause.editDistance] - The optional edit distance for the term.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.fromClause = function (clause) {\n if ('editDistance' in clause) {\n return lunr.TokenSet.fromFuzzyString(clause.term, clause.editDistance)\n } else {\n return lunr.TokenSet.fromString(clause.term)\n }\n}\n\n/**\n * Creates a token set representing a single string with a specified\n * edit distance.\n *\n * Insertions, deletions, substitutions and transpositions are each\n * treated as an edit distance of 1.\n *\n * Increasing the allowed edit distance will have a dramatic impact\n * on the performance of both creating and intersecting these TokenSets.\n * It is advised to keep the edit distance less than 3.\n *\n * @param {string} str - The string to create the token set from.\n * @param {number} editDistance - The allowed edit distance to match.\n * @returns {lunr.Vector}\n */\nlunr.TokenSet.fromFuzzyString = function (str, editDistance) {\n var root = new lunr.TokenSet\n\n var stack = [{\n node: root,\n editsRemaining: editDistance,\n str: str\n }]\n\n while (stack.length) {\n var frame = stack.pop()\n\n // no edit\n if (frame.str.length > 0) {\n var char = frame.str.charAt(0),\n noEditNode\n\n if (char in frame.node.edges) {\n noEditNode = frame.node.edges[char]\n } else {\n noEditNode = new lunr.TokenSet\n frame.node.edges[char] = noEditNode\n }\n\n if (frame.str.length == 1) {\n noEditNode.final = true\n }\n\n stack.push({\n node: noEditNode,\n editsRemaining: frame.editsRemaining,\n str: frame.str.slice(1)\n })\n }\n\n if (frame.editsRemaining == 0) {\n continue\n }\n\n // insertion\n if (\"*\" in frame.node.edges) {\n var insertionNode = frame.node.edges[\"*\"]\n } else {\n var insertionNode = new lunr.TokenSet\n frame.node.edges[\"*\"] = insertionNode\n }\n\n if (frame.str.length == 0) {\n insertionNode.final = true\n }\n\n stack.push({\n node: insertionNode,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str\n })\n\n // deletion\n // can only do a deletion if we have enough edits remaining\n // and if there are characters left to delete in the string\n if (frame.str.length > 1) {\n stack.push({\n node: frame.node,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str.slice(1)\n })\n }\n\n // deletion\n // just removing the last character from the str\n if (frame.str.length == 1) {\n frame.node.final = true\n }\n\n // substitution\n // can only do a substitution if we have enough edits remaining\n // and if there are characters left to substitute\n if (frame.str.length >= 1) {\n if (\"*\" in frame.node.edges) {\n var substitutionNode = frame.node.edges[\"*\"]\n } else {\n var substitutionNode = new lunr.TokenSet\n frame.node.edges[\"*\"] = substitutionNode\n }\n\n if (frame.str.length == 1) {\n substitutionNode.final = true\n }\n\n stack.push({\n node: substitutionNode,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str.slice(1)\n })\n }\n\n // transposition\n // can only do a transposition if there are edits remaining\n // and there are enough characters to transpose\n if (frame.str.length > 1) {\n var charA = frame.str.charAt(0),\n charB = frame.str.charAt(1),\n transposeNode\n\n if (charB in frame.node.edges) {\n transposeNode = frame.node.edges[charB]\n } else {\n transposeNode = new lunr.TokenSet\n frame.node.edges[charB] = transposeNode\n }\n\n if (frame.str.length == 1) {\n transposeNode.final = true\n }\n\n stack.push({\n node: transposeNode,\n editsRemaining: frame.editsRemaining - 1,\n str: charA + frame.str.slice(2)\n })\n }\n }\n\n return root\n}\n\n/**\n * Creates a TokenSet from a string.\n *\n * The string may contain one or more wildcard characters (*)\n * that will allow wildcard matching when intersecting with\n * another TokenSet.\n *\n * @param {string} str - The string to create a TokenSet from.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.fromString = function (str) {\n var node = new lunr.TokenSet,\n root = node\n\n /*\n * Iterates through all characters within the passed string\n * appending a node for each character.\n *\n * When a wildcard character is found then a self\n * referencing edge is introduced to continually match\n * any number of any characters.\n */\n for (var i = 0, len = str.length; i < len; i++) {\n var char = str[i],\n final = (i == len - 1)\n\n if (char == \"*\") {\n node.edges[char] = node\n node.final = final\n\n } else {\n var next = new lunr.TokenSet\n next.final = final\n\n node.edges[char] = next\n node = next\n }\n }\n\n return root\n}\n\n/**\n * Converts this TokenSet into an array of strings\n * contained within the TokenSet.\n *\n * This is not intended to be used on a TokenSet that\n * contains wildcards, in these cases the results are\n * undefined and are likely to cause an infinite loop.\n *\n * @returns {string[]}\n */\nlunr.TokenSet.prototype.toArray = function () {\n var words = []\n\n var stack = [{\n prefix: \"\",\n node: this\n }]\n\n while (stack.length) {\n var frame = stack.pop(),\n edges = Object.keys(frame.node.edges),\n len = edges.length\n\n if (frame.node.final) {\n /* In Safari, at this point the prefix is sometimes corrupted, see:\n * https://github.com/olivernn/lunr.js/issues/279 Calling any\n * String.prototype method forces Safari to \"cast\" this string to what\n * it's supposed to be, fixing the bug. */\n frame.prefix.charAt(0)\n words.push(frame.prefix)\n }\n\n for (var i = 0; i < len; i++) {\n var edge = edges[i]\n\n stack.push({\n prefix: frame.prefix.concat(edge),\n node: frame.node.edges[edge]\n })\n }\n }\n\n return words\n}\n\n/**\n * Generates a string representation of a TokenSet.\n *\n * This is intended to allow TokenSets to be used as keys\n * in objects, largely to aid the construction and minimisation\n * of a TokenSet. As such it is not designed to be a human\n * friendly representation of the TokenSet.\n *\n * @returns {string}\n */\nlunr.TokenSet.prototype.toString = function () {\n // NOTE: Using Object.keys here as this.edges is very likely\n // to enter 'hash-mode' with many keys being added\n //\n // avoiding a for-in loop here as it leads to the function\n // being de-optimised (at least in V8). From some simple\n // benchmarks the performance is comparable, but allowing\n // V8 to optimize may mean easy performance wins in the future.\n\n if (this._str) {\n return this._str\n }\n\n var str = this.final ? '1' : '0',\n labels = Object.keys(this.edges).sort(),\n len = labels.length\n\n for (var i = 0; i < len; i++) {\n var label = labels[i],\n node = this.edges[label]\n\n str = str + label + node.id\n }\n\n return str\n}\n\n/**\n * Returns a new TokenSet that is the intersection of\n * this TokenSet and the passed TokenSet.\n *\n * This intersection will take into account any wildcards\n * contained within the TokenSet.\n *\n * @param {lunr.TokenSet} b - An other TokenSet to intersect with.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.prototype.intersect = function (b) {\n var output = new lunr.TokenSet,\n frame = undefined\n\n var stack = [{\n qNode: b,\n output: output,\n node: this\n }]\n\n while (stack.length) {\n frame = stack.pop()\n\n // NOTE: As with the #toString method, we are using\n // Object.keys and a for loop instead of a for-in loop\n // as both of these objects enter 'hash' mode, causing\n // the function to be de-optimised in V8\n var qEdges = Object.keys(frame.qNode.edges),\n qLen = qEdges.length,\n nEdges = Object.keys(frame.node.edges),\n nLen = nEdges.length\n\n for (var q = 0; q < qLen; q++) {\n var qEdge = qEdges[q]\n\n for (var n = 0; n < nLen; n++) {\n var nEdge = nEdges[n]\n\n if (nEdge == qEdge || qEdge == '*') {\n var node = frame.node.edges[nEdge],\n qNode = frame.qNode.edges[qEdge],\n final = node.final && qNode.final,\n next = undefined\n\n if (nEdge in frame.output.edges) {\n // an edge already exists for this character\n // no need to create a new node, just set the finality\n // bit unless this node is already final\n next = frame.output.edges[nEdge]\n next.final = next.final || final\n\n } else {\n // no edge exists yet, must create one\n // set the finality bit and insert it\n // into the output\n next = new lunr.TokenSet\n next.final = final\n frame.output.edges[nEdge] = next\n }\n\n stack.push({\n qNode: qNode,\n output: next,\n node: node\n })\n }\n }\n }\n }\n\n return output\n}\nlunr.TokenSet.Builder = function () {\n this.previousWord = \"\"\n this.root = new lunr.TokenSet\n this.uncheckedNodes = []\n this.minimizedNodes = {}\n}\n\nlunr.TokenSet.Builder.prototype.insert = function (word) {\n var node,\n commonPrefix = 0\n\n if (word < this.previousWord) {\n throw new Error (\"Out of order word insertion\")\n }\n\n for (var i = 0; i < word.length && i < this.previousWord.length; i++) {\n if (word[i] != this.previousWord[i]) break\n commonPrefix++\n }\n\n this.minimize(commonPrefix)\n\n if (this.uncheckedNodes.length == 0) {\n node = this.root\n } else {\n node = this.uncheckedNodes[this.uncheckedNodes.length - 1].child\n }\n\n for (var i = commonPrefix; i < word.length; i++) {\n var nextNode = new lunr.TokenSet,\n char = word[i]\n\n node.edges[char] = nextNode\n\n this.uncheckedNodes.push({\n parent: node,\n char: char,\n child: nextNode\n })\n\n node = nextNode\n }\n\n node.final = true\n this.previousWord = word\n}\n\nlunr.TokenSet.Builder.prototype.finish = function () {\n this.minimize(0)\n}\n\nlunr.TokenSet.Builder.prototype.minimize = function (downTo) {\n for (var i = this.uncheckedNodes.length - 1; i >= downTo; i--) {\n var node = this.uncheckedNodes[i],\n childKey = node.child.toString()\n\n if (childKey in this.minimizedNodes) {\n node.parent.edges[node.char] = this.minimizedNodes[childKey]\n } else {\n // Cache the key for this node since\n // we know it can't change anymore\n node.child._str = childKey\n\n this.minimizedNodes[childKey] = node.child\n }\n\n this.uncheckedNodes.pop()\n }\n}\n/*!\n * lunr.Index\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * An index contains the built index of all documents and provides a query interface\n * to the index.\n *\n * Usually instances of lunr.Index will not be created using this constructor, instead\n * lunr.Builder should be used to construct new indexes, or lunr.Index.load should be\n * used to load previously built and serialized indexes.\n *\n * @constructor\n * @param {Object} attrs - The attributes of the built search index.\n * @param {Object} attrs.invertedIndex - An index of term/field to document reference.\n * @param {Object} attrs.fieldVectors - Field vectors\n * @param {lunr.TokenSet} attrs.tokenSet - An set of all corpus tokens.\n * @param {string[]} attrs.fields - The names of indexed document fields.\n * @param {lunr.Pipeline} attrs.pipeline - The pipeline to use for search terms.\n */\nlunr.Index = function (attrs) {\n this.invertedIndex = attrs.invertedIndex\n this.fieldVectors = attrs.fieldVectors\n this.tokenSet = attrs.tokenSet\n this.fields = attrs.fields\n this.pipeline = attrs.pipeline\n}\n\n/**\n * A result contains details of a document matching a search query.\n * @typedef {Object} lunr.Index~Result\n * @property {string} ref - The reference of the document this result represents.\n * @property {number} score - A number between 0 and 1 representing how similar this document is to the query.\n * @property {lunr.MatchData} matchData - Contains metadata about this match including which term(s) caused the match.\n */\n\n/**\n * Although lunr provides the ability to create queries using lunr.Query, it also provides a simple\n * query language which itself is parsed into an instance of lunr.Query.\n *\n * For programmatically building queries it is advised to directly use lunr.Query, the query language\n * is best used for human entered text rather than program generated text.\n *\n * At its simplest queries can just be a single term, e.g. `hello`, multiple terms are also supported\n * and will be combined with OR, e.g `hello world` will match documents that contain either 'hello'\n * or 'world', though those that contain both will rank higher in the results.\n *\n * Wildcards can be included in terms to match one or more unspecified characters, these wildcards can\n * be inserted anywhere within the term, and more than one wildcard can exist in a single term. Adding\n * wildcards will increase the number of documents that will be found but can also have a negative\n * impact on query performance, especially with wildcards at the beginning of a term.\n *\n * Terms can be restricted to specific fields, e.g. `title:hello`, only documents with the term\n * hello in the title field will match this query. Using a field not present in the index will lead\n * to an error being thrown.\n *\n * Modifiers can also be added to terms, lunr supports edit distance and boost modifiers on terms. A term\n * boost will make documents matching that term score higher, e.g. `foo^5`. Edit distance is also supported\n * to provide fuzzy matching, e.g. 'hello~2' will match documents with hello with an edit distance of 2.\n * Avoid large values for edit distance to improve query performance.\n *\n * Each term also supports a presence modifier. By default a term's presence in document is optional, however\n * this can be changed to either required or prohibited. For a term's presence to be required in a document the\n * term should be prefixed with a '+', e.g. `+foo bar` is a search for documents that must contain 'foo' and\n * optionally contain 'bar'. Conversely a leading '-' sets the terms presence to prohibited, i.e. it must not\n * appear in a document, e.g. `-foo bar` is a search for documents that do not contain 'foo' but may contain 'bar'.\n *\n * To escape special characters the backslash character '\\' can be used, this allows searches to include\n * characters that would normally be considered modifiers, e.g. `foo\\~2` will search for a term \"foo~2\" instead\n * of attempting to apply a boost of 2 to the search term \"foo\".\n *\n * @typedef {string} lunr.Index~QueryString\n * @example Simple single term query\n * hello\n * @example Multiple term query\n * hello world\n * @example term scoped to a field\n * title:hello\n * @example term with a boost of 10\n * hello^10\n * @example term with an edit distance of 2\n * hello~2\n * @example terms with presence modifiers\n * -foo +bar baz\n */\n\n/**\n * Performs a search against the index using lunr query syntax.\n *\n * Results will be returned sorted by their score, the most relevant results\n * will be returned first. For details on how the score is calculated, please see\n * the {@link https://lunrjs.com/guides/searching.html#scoring|guide}.\n *\n * For more programmatic querying use lunr.Index#query.\n *\n * @param {lunr.Index~QueryString} queryString - A string containing a lunr query.\n * @throws {lunr.QueryParseError} If the passed query string cannot be parsed.\n * @returns {lunr.Index~Result[]}\n */\nlunr.Index.prototype.search = function (queryString) {\n return this.query(function (query) {\n var parser = new lunr.QueryParser(queryString, query)\n parser.parse()\n })\n}\n\n/**\n * A query builder callback provides a query object to be used to express\n * the query to perform on the index.\n *\n * @callback lunr.Index~queryBuilder\n * @param {lunr.Query} query - The query object to build up.\n * @this lunr.Query\n */\n\n/**\n * Performs a query against the index using the yielded lunr.Query object.\n *\n * If performing programmatic queries against the index, this method is preferred\n * over lunr.Index#search so as to avoid the additional query parsing overhead.\n *\n * A query object is yielded to the supplied function which should be used to\n * express the query to be run against the index.\n *\n * Note that although this function takes a callback parameter it is _not_ an\n * asynchronous operation, the callback is just yielded a query object to be\n * customized.\n *\n * @param {lunr.Index~queryBuilder} fn - A function that is used to build the query.\n * @returns {lunr.Index~Result[]}\n */\nlunr.Index.prototype.query = function (fn) {\n // for each query clause\n // * process terms\n // * expand terms from token set\n // * find matching documents and metadata\n // * get document vectors\n // * score documents\n\n var query = new lunr.Query(this.fields),\n matchingFields = Object.create(null),\n queryVectors = Object.create(null),\n termFieldCache = Object.create(null),\n requiredMatches = Object.create(null),\n prohibitedMatches = Object.create(null)\n\n /*\n * To support field level boosts a query vector is created per\n * field. An empty vector is eagerly created to support negated\n * queries.\n */\n for (var i = 0; i < this.fields.length; i++) {\n queryVectors[this.fields[i]] = new lunr.Vector\n }\n\n fn.call(query, query)\n\n for (var i = 0; i < query.clauses.length; i++) {\n /*\n * Unless the pipeline has been disabled for this term, which is\n * the case for terms with wildcards, we need to pass the clause\n * term through the search pipeline. A pipeline returns an array\n * of processed terms. Pipeline functions may expand the passed\n * term, which means we may end up performing multiple index lookups\n * for a single query term.\n */\n var clause = query.clauses[i],\n terms = null,\n clauseMatches = lunr.Set.empty\n\n if (clause.usePipeline) {\n terms = this.pipeline.runString(clause.term, {\n fields: clause.fields\n })\n } else {\n terms = [clause.term]\n }\n\n for (var m = 0; m < terms.length; m++) {\n var term = terms[m]\n\n /*\n * Each term returned from the pipeline needs to use the same query\n * clause object, e.g. the same boost and or edit distance. The\n * simplest way to do this is to re-use the clause object but mutate\n * its term property.\n */\n clause.term = term\n\n /*\n * From the term in the clause we create a token set which will then\n * be used to intersect the indexes token set to get a list of terms\n * to lookup in the inverted index\n */\n var termTokenSet = lunr.TokenSet.fromClause(clause),\n expandedTerms = this.tokenSet.intersect(termTokenSet).toArray()\n\n /*\n * If a term marked as required does not exist in the tokenSet it is\n * impossible for the search to return any matches. We set all the field\n * scoped required matches set to empty and stop examining any further\n * clauses.\n */\n if (expandedTerms.length === 0 && clause.presence === lunr.Query.presence.REQUIRED) {\n for (var k = 0; k < clause.fields.length; k++) {\n var field = clause.fields[k]\n requiredMatches[field] = lunr.Set.empty\n }\n\n break\n }\n\n for (var j = 0; j < expandedTerms.length; j++) {\n /*\n * For each term get the posting and termIndex, this is required for\n * building the query vector.\n */\n var expandedTerm = expandedTerms[j],\n posting = this.invertedIndex[expandedTerm],\n termIndex = posting._index\n\n for (var k = 0; k < clause.fields.length; k++) {\n /*\n * For each field that this query term is scoped by (by default\n * all fields are in scope) we need to get all the document refs\n * that have this term in that field.\n *\n * The posting is the entry in the invertedIndex for the matching\n * term from above.\n */\n var field = clause.fields[k],\n fieldPosting = posting[field],\n matchingDocumentRefs = Object.keys(fieldPosting),\n termField = expandedTerm + \"/\" + field,\n matchingDocumentsSet = new lunr.Set(matchingDocumentRefs)\n\n /*\n * if the presence of this term is required ensure that the matching\n * documents are added to the set of required matches for this clause.\n *\n */\n if (clause.presence == lunr.Query.presence.REQUIRED) {\n clauseMatches = clauseMatches.union(matchingDocumentsSet)\n\n if (requiredMatches[field] === undefined) {\n requiredMatches[field] = lunr.Set.complete\n }\n }\n\n /*\n * if the presence of this term is prohibited ensure that the matching\n * documents are added to the set of prohibited matches for this field,\n * creating that set if it does not yet exist.\n */\n if (clause.presence == lunr.Query.presence.PROHIBITED) {\n if (prohibitedMatches[field] === undefined) {\n prohibitedMatches[field] = lunr.Set.empty\n }\n\n prohibitedMatches[field] = prohibitedMatches[field].union(matchingDocumentsSet)\n\n /*\n * Prohibited matches should not be part of the query vector used for\n * similarity scoring and no metadata should be extracted so we continue\n * to the next field\n */\n continue\n }\n\n /*\n * The query field vector is populated using the termIndex found for\n * the term and a unit value with the appropriate boost applied.\n * Using upsert because there could already be an entry in the vector\n * for the term we are working with. In that case we just add the scores\n * together.\n */\n queryVectors[field].upsert(termIndex, clause.boost, function (a, b) { return a + b })\n\n /**\n * If we've already seen this term, field combo then we've already collected\n * the matching documents and metadata, no need to go through all that again\n */\n if (termFieldCache[termField]) {\n continue\n }\n\n for (var l = 0; l < matchingDocumentRefs.length; l++) {\n /*\n * All metadata for this term/field/document triple\n * are then extracted and collected into an instance\n * of lunr.MatchData ready to be returned in the query\n * results\n */\n var matchingDocumentRef = matchingDocumentRefs[l],\n matchingFieldRef = new lunr.FieldRef (matchingDocumentRef, field),\n metadata = fieldPosting[matchingDocumentRef],\n fieldMatch\n\n if ((fieldMatch = matchingFields[matchingFieldRef]) === undefined) {\n matchingFields[matchingFieldRef] = new lunr.MatchData (expandedTerm, field, metadata)\n } else {\n fieldMatch.add(expandedTerm, field, metadata)\n }\n\n }\n\n termFieldCache[termField] = true\n }\n }\n }\n\n /**\n * If the presence was required we need to update the requiredMatches field sets.\n * We do this after all fields for the term have collected their matches because\n * the clause terms presence is required in _any_ of the fields not _all_ of the\n * fields.\n */\n if (clause.presence === lunr.Query.presence.REQUIRED) {\n for (var k = 0; k < clause.fields.length; k++) {\n var field = clause.fields[k]\n requiredMatches[field] = requiredMatches[field].intersect(clauseMatches)\n }\n }\n }\n\n /**\n * Need to combine the field scoped required and prohibited\n * matching documents into a global set of required and prohibited\n * matches\n */\n var allRequiredMatches = lunr.Set.complete,\n allProhibitedMatches = lunr.Set.empty\n\n for (var i = 0; i < this.fields.length; i++) {\n var field = this.fields[i]\n\n if (requiredMatches[field]) {\n allRequiredMatches = allRequiredMatches.intersect(requiredMatches[field])\n }\n\n if (prohibitedMatches[field]) {\n allProhibitedMatches = allProhibitedMatches.union(prohibitedMatches[field])\n }\n }\n\n var matchingFieldRefs = Object.keys(matchingFields),\n results = [],\n matches = Object.create(null)\n\n /*\n * If the query is negated (contains only prohibited terms)\n * we need to get _all_ fieldRefs currently existing in the\n * index. This is only done when we know that the query is\n * entirely prohibited terms to avoid any cost of getting all\n * fieldRefs unnecessarily.\n *\n * Additionally, blank MatchData must be created to correctly\n * populate the results.\n */\n if (query.isNegated()) {\n matchingFieldRefs = Object.keys(this.fieldVectors)\n\n for (var i = 0; i < matchingFieldRefs.length; i++) {\n var matchingFieldRef = matchingFieldRefs[i]\n var fieldRef = lunr.FieldRef.fromString(matchingFieldRef)\n matchingFields[matchingFieldRef] = new lunr.MatchData\n }\n }\n\n for (var i = 0; i < matchingFieldRefs.length; i++) {\n /*\n * Currently we have document fields that match the query, but we\n * need to return documents. The matchData and scores are combined\n * from multiple fields belonging to the same document.\n *\n * Scores are calculated by field, using the query vectors created\n * above, and combined into a final document score using addition.\n */\n var fieldRef = lunr.FieldRef.fromString(matchingFieldRefs[i]),\n docRef = fieldRef.docRef\n\n if (!allRequiredMatches.contains(docRef)) {\n continue\n }\n\n if (allProhibitedMatches.contains(docRef)) {\n continue\n }\n\n var fieldVector = this.fieldVectors[fieldRef],\n score = queryVectors[fieldRef.fieldName].similarity(fieldVector),\n docMatch\n\n if ((docMatch = matches[docRef]) !== undefined) {\n docMatch.score += score\n docMatch.matchData.combine(matchingFields[fieldRef])\n } else {\n var match = {\n ref: docRef,\n score: score,\n matchData: matchingFields[fieldRef]\n }\n matches[docRef] = match\n results.push(match)\n }\n }\n\n /*\n * Sort the results objects by score, highest first.\n */\n return results.sort(function (a, b) {\n return b.score - a.score\n })\n}\n\n/**\n * Prepares the index for JSON serialization.\n *\n * The schema for this JSON blob will be described in a\n * separate JSON schema file.\n *\n * @returns {Object}\n */\nlunr.Index.prototype.toJSON = function () {\n var invertedIndex = Object.keys(this.invertedIndex)\n .sort()\n .map(function (term) {\n return [term, this.invertedIndex[term]]\n }, this)\n\n var fieldVectors = Object.keys(this.fieldVectors)\n .map(function (ref) {\n return [ref, this.fieldVectors[ref].toJSON()]\n }, this)\n\n return {\n version: lunr.version,\n fields: this.fields,\n fieldVectors: fieldVectors,\n invertedIndex: invertedIndex,\n pipeline: this.pipeline.toJSON()\n }\n}\n\n/**\n * Loads a previously serialized lunr.Index\n *\n * @param {Object} serializedIndex - A previously serialized lunr.Index\n * @returns {lunr.Index}\n */\nlunr.Index.load = function (serializedIndex) {\n var attrs = {},\n fieldVectors = {},\n serializedVectors = serializedIndex.fieldVectors,\n invertedIndex = Object.create(null),\n serializedInvertedIndex = serializedIndex.invertedIndex,\n tokenSetBuilder = new lunr.TokenSet.Builder,\n pipeline = lunr.Pipeline.load(serializedIndex.pipeline)\n\n if (serializedIndex.version != lunr.version) {\n lunr.utils.warn(\"Version mismatch when loading serialised index. Current version of lunr '\" + lunr.version + \"' does not match serialized index '\" + serializedIndex.version + \"'\")\n }\n\n for (var i = 0; i < serializedVectors.length; i++) {\n var tuple = serializedVectors[i],\n ref = tuple[0],\n elements = tuple[1]\n\n fieldVectors[ref] = new lunr.Vector(elements)\n }\n\n for (var i = 0; i < serializedInvertedIndex.length; i++) {\n var tuple = serializedInvertedIndex[i],\n term = tuple[0],\n posting = tuple[1]\n\n tokenSetBuilder.insert(term)\n invertedIndex[term] = posting\n }\n\n tokenSetBuilder.finish()\n\n attrs.fields = serializedIndex.fields\n\n attrs.fieldVectors = fieldVectors\n attrs.invertedIndex = invertedIndex\n attrs.tokenSet = tokenSetBuilder.root\n attrs.pipeline = pipeline\n\n return new lunr.Index(attrs)\n}\n/*!\n * lunr.Builder\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * lunr.Builder performs indexing on a set of documents and\n * returns instances of lunr.Index ready for querying.\n *\n * All configuration of the index is done via the builder, the\n * fields to index, the document reference, the text processing\n * pipeline and document scoring parameters are all set on the\n * builder before indexing.\n *\n * @constructor\n * @property {string} _ref - Internal reference to the document reference field.\n * @property {string[]} _fields - Internal reference to the document fields to index.\n * @property {object} invertedIndex - The inverted index maps terms to document fields.\n * @property {object} documentTermFrequencies - Keeps track of document term frequencies.\n * @property {object} documentLengths - Keeps track of the length of documents added to the index.\n * @property {lunr.tokenizer} tokenizer - Function for splitting strings into tokens for indexing.\n * @property {lunr.Pipeline} pipeline - The pipeline performs text processing on tokens before indexing.\n * @property {lunr.Pipeline} searchPipeline - A pipeline for processing search terms before querying the index.\n * @property {number} documentCount - Keeps track of the total number of documents indexed.\n * @property {number} _b - A parameter to control field length normalization, setting this to 0 disabled normalization, 1 fully normalizes field lengths, the default value is 0.75.\n * @property {number} _k1 - A parameter to control how quickly an increase in term frequency results in term frequency saturation, the default value is 1.2.\n * @property {number} termIndex - A counter incremented for each unique term, used to identify a terms position in the vector space.\n * @property {array} metadataWhitelist - A list of metadata keys that have been whitelisted for entry in the index.\n */\nlunr.Builder = function () {\n this._ref = \"id\"\n this._fields = Object.create(null)\n this._documents = Object.create(null)\n this.invertedIndex = Object.create(null)\n this.fieldTermFrequencies = {}\n this.fieldLengths = {}\n this.tokenizer = lunr.tokenizer\n this.pipeline = new lunr.Pipeline\n this.searchPipeline = new lunr.Pipeline\n this.documentCount = 0\n this._b = 0.75\n this._k1 = 1.2\n this.termIndex = 0\n this.metadataWhitelist = []\n}\n\n/**\n * Sets the document field used as the document reference. Every document must have this field.\n * The type of this field in the document should be a string, if it is not a string it will be\n * coerced into a string by calling toString.\n *\n * The default ref is 'id'.\n *\n * The ref should _not_ be changed during indexing, it should be set before any documents are\n * added to the index. Changing it during indexing can lead to inconsistent results.\n *\n * @param {string} ref - The name of the reference field in the document.\n */\nlunr.Builder.prototype.ref = function (ref) {\n this._ref = ref\n}\n\n/**\n * A function that is used to extract a field from a document.\n *\n * Lunr expects a field to be at the top level of a document, if however the field\n * is deeply nested within a document an extractor function can be used to extract\n * the right field for indexing.\n *\n * @callback fieldExtractor\n * @param {object} doc - The document being added to the index.\n * @returns {?(string|object|object[])} obj - The object that will be indexed for this field.\n * @example Extracting a nested field\n * function (doc) { return doc.nested.field }\n */\n\n/**\n * Adds a field to the list of document fields that will be indexed. Every document being\n * indexed should have this field. Null values for this field in indexed documents will\n * not cause errors but will limit the chance of that document being retrieved by searches.\n *\n * All fields should be added before adding documents to the index. Adding fields after\n * a document has been indexed will have no effect on already indexed documents.\n *\n * Fields can be boosted at build time. This allows terms within that field to have more\n * importance when ranking search results. Use a field boost to specify that matches within\n * one field are more important than other fields.\n *\n * @param {string} fieldName - The name of a field to index in all documents.\n * @param {object} attributes - Optional attributes associated with this field.\n * @param {number} [attributes.boost=1] - Boost applied to all terms within this field.\n * @param {fieldExtractor} [attributes.extractor] - Function to extract a field from a document.\n * @throws {RangeError} fieldName cannot contain unsupported characters '/'\n */\nlunr.Builder.prototype.field = function (fieldName, attributes) {\n if (/\\//.test(fieldName)) {\n throw new RangeError (\"Field '\" + fieldName + \"' contains illegal character '/'\")\n }\n\n this._fields[fieldName] = attributes || {}\n}\n\n/**\n * A parameter to tune the amount of field length normalisation that is applied when\n * calculating relevance scores. A value of 0 will completely disable any normalisation\n * and a value of 1 will fully normalise field lengths. The default is 0.75. Values of b\n * will be clamped to the range 0 - 1.\n *\n * @param {number} number - The value to set for this tuning parameter.\n */\nlunr.Builder.prototype.b = function (number) {\n if (number < 0) {\n this._b = 0\n } else if (number > 1) {\n this._b = 1\n } else {\n this._b = number\n }\n}\n\n/**\n * A parameter that controls the speed at which a rise in term frequency results in term\n * frequency saturation. The default value is 1.2. Setting this to a higher value will give\n * slower saturation levels, a lower value will result in quicker saturation.\n *\n * @param {number} number - The value to set for this tuning parameter.\n */\nlunr.Builder.prototype.k1 = function (number) {\n this._k1 = number\n}\n\n/**\n * Adds a document to the index.\n *\n * Before adding fields to the index the index should have been fully setup, with the document\n * ref and all fields to index already having been specified.\n *\n * The document must have a field name as specified by the ref (by default this is 'id') and\n * it should have all fields defined for indexing, though null or undefined values will not\n * cause errors.\n *\n * Entire documents can be boosted at build time. Applying a boost to a document indicates that\n * this document should rank higher in search results than other documents.\n *\n * @param {object} doc - The document to add to the index.\n * @param {object} attributes - Optional attributes associated with this document.\n * @param {number} [attributes.boost=1] - Boost applied to all terms within this document.\n */\nlunr.Builder.prototype.add = function (doc, attributes) {\n var docRef = doc[this._ref],\n fields = Object.keys(this._fields)\n\n this._documents[docRef] = attributes || {}\n this.documentCount += 1\n\n for (var i = 0; i < fields.length; i++) {\n var fieldName = fields[i],\n extractor = this._fields[fieldName].extractor,\n field = extractor ? extractor(doc) : doc[fieldName],\n tokens = this.tokenizer(field, {\n fields: [fieldName]\n }),\n terms = this.pipeline.run(tokens),\n fieldRef = new lunr.FieldRef (docRef, fieldName),\n fieldTerms = Object.create(null)\n\n this.fieldTermFrequencies[fieldRef] = fieldTerms\n this.fieldLengths[fieldRef] = 0\n\n // store the length of this field for this document\n this.fieldLengths[fieldRef] += terms.length\n\n // calculate term frequencies for this field\n for (var j = 0; j < terms.length; j++) {\n var term = terms[j]\n\n if (fieldTerms[term] == undefined) {\n fieldTerms[term] = 0\n }\n\n fieldTerms[term] += 1\n\n // add to inverted index\n // create an initial posting if one doesn't exist\n if (this.invertedIndex[term] == undefined) {\n var posting = Object.create(null)\n posting[\"_index\"] = this.termIndex\n this.termIndex += 1\n\n for (var k = 0; k < fields.length; k++) {\n posting[fields[k]] = Object.create(null)\n }\n\n this.invertedIndex[term] = posting\n }\n\n // add an entry for this term/fieldName/docRef to the invertedIndex\n if (this.invertedIndex[term][fieldName][docRef] == undefined) {\n this.invertedIndex[term][fieldName][docRef] = Object.create(null)\n }\n\n // store all whitelisted metadata about this token in the\n // inverted index\n for (var l = 0; l < this.metadataWhitelist.length; l++) {\n var metadataKey = this.metadataWhitelist[l],\n metadata = term.metadata[metadataKey]\n\n if (this.invertedIndex[term][fieldName][docRef][metadataKey] == undefined) {\n this.invertedIndex[term][fieldName][docRef][metadataKey] = []\n }\n\n this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata)\n }\n }\n\n }\n}\n\n/**\n * Calculates the average document length for this index\n *\n * @private\n */\nlunr.Builder.prototype.calculateAverageFieldLengths = function () {\n\n var fieldRefs = Object.keys(this.fieldLengths),\n numberOfFields = fieldRefs.length,\n accumulator = {},\n documentsWithField = {}\n\n for (var i = 0; i < numberOfFields; i++) {\n var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),\n field = fieldRef.fieldName\n\n documentsWithField[field] || (documentsWithField[field] = 0)\n documentsWithField[field] += 1\n\n accumulator[field] || (accumulator[field] = 0)\n accumulator[field] += this.fieldLengths[fieldRef]\n }\n\n var fields = Object.keys(this._fields)\n\n for (var i = 0; i < fields.length; i++) {\n var fieldName = fields[i]\n accumulator[fieldName] = accumulator[fieldName] / documentsWithField[fieldName]\n }\n\n this.averageFieldLength = accumulator\n}\n\n/**\n * Builds a vector space model of every document using lunr.Vector\n *\n * @private\n */\nlunr.Builder.prototype.createFieldVectors = function () {\n var fieldVectors = {},\n fieldRefs = Object.keys(this.fieldTermFrequencies),\n fieldRefsLength = fieldRefs.length,\n termIdfCache = Object.create(null)\n\n for (var i = 0; i < fieldRefsLength; i++) {\n var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),\n fieldName = fieldRef.fieldName,\n fieldLength = this.fieldLengths[fieldRef],\n fieldVector = new lunr.Vector,\n termFrequencies = this.fieldTermFrequencies[fieldRef],\n terms = Object.keys(termFrequencies),\n termsLength = terms.length\n\n\n var fieldBoost = this._fields[fieldName].boost || 1,\n docBoost = this._documents[fieldRef.docRef].boost || 1\n\n for (var j = 0; j < termsLength; j++) {\n var term = terms[j],\n tf = termFrequencies[term],\n termIndex = this.invertedIndex[term]._index,\n idf, score, scoreWithPrecision\n\n if (termIdfCache[term] === undefined) {\n idf = lunr.idf(this.invertedIndex[term], this.documentCount)\n termIdfCache[term] = idf\n } else {\n idf = termIdfCache[term]\n }\n\n score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (fieldLength / this.averageFieldLength[fieldName])) + tf)\n score *= fieldBoost\n score *= docBoost\n scoreWithPrecision = Math.round(score * 1000) / 1000\n // Converts 1.23456789 to 1.234.\n // Reducing the precision so that the vectors take up less\n // space when serialised. Doing it now so that they behave\n // the same before and after serialisation. Also, this is\n // the fastest approach to reducing a number's precision in\n // JavaScript.\n\n fieldVector.insert(termIndex, scoreWithPrecision)\n }\n\n fieldVectors[fieldRef] = fieldVector\n }\n\n this.fieldVectors = fieldVectors\n}\n\n/**\n * Creates a token set of all tokens in the index using lunr.TokenSet\n *\n * @private\n */\nlunr.Builder.prototype.createTokenSet = function () {\n this.tokenSet = lunr.TokenSet.fromArray(\n Object.keys(this.invertedIndex).sort()\n )\n}\n\n/**\n * Builds the index, creating an instance of lunr.Index.\n *\n * This completes the indexing process and should only be called\n * once all documents have been added to the index.\n *\n * @returns {lunr.Index}\n */\nlunr.Builder.prototype.build = function () {\n this.calculateAverageFieldLengths()\n this.createFieldVectors()\n this.createTokenSet()\n\n return new lunr.Index({\n invertedIndex: this.invertedIndex,\n fieldVectors: this.fieldVectors,\n tokenSet: this.tokenSet,\n fields: Object.keys(this._fields),\n pipeline: this.searchPipeline\n })\n}\n\n/**\n * Applies a plugin to the index builder.\n *\n * A plugin is a function that is called with the index builder as its context.\n * Plugins can be used to customise or extend the behaviour of the index\n * in some way. A plugin is just a function, that encapsulated the custom\n * behaviour that should be applied when building the index.\n *\n * The plugin function will be called with the index builder as its argument, additional\n * arguments can also be passed when calling use. The function will be called\n * with the index builder as its context.\n *\n * @param {Function} plugin The plugin to apply.\n */\nlunr.Builder.prototype.use = function (fn) {\n var args = Array.prototype.slice.call(arguments, 1)\n args.unshift(this)\n fn.apply(this, args)\n}\n/**\n * Contains and collects metadata about a matching document.\n * A single instance of lunr.MatchData is returned as part of every\n * lunr.Index~Result.\n *\n * @constructor\n * @param {string} term - The term this match data is associated with\n * @param {string} field - The field in which the term was found\n * @param {object} metadata - The metadata recorded about this term in this field\n * @property {object} metadata - A cloned collection of metadata associated with this document.\n * @see {@link lunr.Index~Result}\n */\nlunr.MatchData = function (term, field, metadata) {\n var clonedMetadata = Object.create(null),\n metadataKeys = Object.keys(metadata || {})\n\n // Cloning the metadata to prevent the original\n // being mutated during match data combination.\n // Metadata is kept in an array within the inverted\n // index so cloning the data can be done with\n // Array#slice\n for (var i = 0; i < metadataKeys.length; i++) {\n var key = metadataKeys[i]\n clonedMetadata[key] = metadata[key].slice()\n }\n\n this.metadata = Object.create(null)\n\n if (term !== undefined) {\n this.metadata[term] = Object.create(null)\n this.metadata[term][field] = clonedMetadata\n }\n}\n\n/**\n * An instance of lunr.MatchData will be created for every term that matches a\n * document. However only one instance is required in a lunr.Index~Result. This\n * method combines metadata from another instance of lunr.MatchData with this\n * objects metadata.\n *\n * @param {lunr.MatchData} otherMatchData - Another instance of match data to merge with this one.\n * @see {@link lunr.Index~Result}\n */\nlunr.MatchData.prototype.combine = function (otherMatchData) {\n var terms = Object.keys(otherMatchData.metadata)\n\n for (var i = 0; i < terms.length; i++) {\n var term = terms[i],\n fields = Object.keys(otherMatchData.metadata[term])\n\n if (this.metadata[term] == undefined) {\n this.metadata[term] = Object.create(null)\n }\n\n for (var j = 0; j < fields.length; j++) {\n var field = fields[j],\n keys = Object.keys(otherMatchData.metadata[term][field])\n\n if (this.metadata[term][field] == undefined) {\n this.metadata[term][field] = Object.create(null)\n }\n\n for (var k = 0; k < keys.length; k++) {\n var key = keys[k]\n\n if (this.metadata[term][field][key] == undefined) {\n this.metadata[term][field][key] = otherMatchData.metadata[term][field][key]\n } else {\n this.metadata[term][field][key] = this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key])\n }\n\n }\n }\n }\n}\n\n/**\n * Add metadata for a term/field pair to this instance of match data.\n *\n * @param {string} term - The term this match data is associated with\n * @param {string} field - The field in which the term was found\n * @param {object} metadata - The metadata recorded about this term in this field\n */\nlunr.MatchData.prototype.add = function (term, field, metadata) {\n if (!(term in this.metadata)) {\n this.metadata[term] = Object.create(null)\n this.metadata[term][field] = metadata\n return\n }\n\n if (!(field in this.metadata[term])) {\n this.metadata[term][field] = metadata\n return\n }\n\n var metadataKeys = Object.keys(metadata)\n\n for (var i = 0; i < metadataKeys.length; i++) {\n var key = metadataKeys[i]\n\n if (key in this.metadata[term][field]) {\n this.metadata[term][field][key] = this.metadata[term][field][key].concat(metadata[key])\n } else {\n this.metadata[term][field][key] = metadata[key]\n }\n }\n}\n/**\n * A lunr.Query provides a programmatic way of defining queries to be performed\n * against a {@link lunr.Index}.\n *\n * Prefer constructing a lunr.Query using the {@link lunr.Index#query} method\n * so the query object is pre-initialized with the right index fields.\n *\n * @constructor\n * @property {lunr.Query~Clause[]} clauses - An array of query clauses.\n * @property {string[]} allFields - An array of all available fields in a lunr.Index.\n */\nlunr.Query = function (allFields) {\n this.clauses = []\n this.allFields = allFields\n}\n\n/**\n * Constants for indicating what kind of automatic wildcard insertion will be used when constructing a query clause.\n *\n * This allows wildcards to be added to the beginning and end of a term without having to manually do any string\n * concatenation.\n *\n * The wildcard constants can be bitwise combined to select both leading and trailing wildcards.\n *\n * @constant\n * @default\n * @property {number} wildcard.NONE - The term will have no wildcards inserted, this is the default behaviour\n * @property {number} wildcard.LEADING - Prepend the term with a wildcard, unless a leading wildcard already exists\n * @property {number} wildcard.TRAILING - Append a wildcard to the term, unless a trailing wildcard already exists\n * @see lunr.Query~Clause\n * @see lunr.Query#clause\n * @see lunr.Query#term\n * @example query term with trailing wildcard\n * query.term('foo', { wildcard: lunr.Query.wildcard.TRAILING })\n * @example query term with leading and trailing wildcard\n * query.term('foo', {\n * wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING\n * })\n */\n\nlunr.Query.wildcard = new String (\"*\")\nlunr.Query.wildcard.NONE = 0\nlunr.Query.wildcard.LEADING = 1\nlunr.Query.wildcard.TRAILING = 2\n\n/**\n * Constants for indicating what kind of presence a term must have in matching documents.\n *\n * @constant\n * @enum {number}\n * @see lunr.Query~Clause\n * @see lunr.Query#clause\n * @see lunr.Query#term\n * @example query term with required presence\n * query.term('foo', { presence: lunr.Query.presence.REQUIRED })\n */\nlunr.Query.presence = {\n /**\n * Term's presence in a document is optional, this is the default value.\n */\n OPTIONAL: 1,\n\n /**\n * Term's presence in a document is required, documents that do not contain\n * this term will not be returned.\n */\n REQUIRED: 2,\n\n /**\n * Term's presence in a document is prohibited, documents that do contain\n * this term will not be returned.\n */\n PROHIBITED: 3\n}\n\n/**\n * A single clause in a {@link lunr.Query} contains a term and details on how to\n * match that term against a {@link lunr.Index}.\n *\n * @typedef {Object} lunr.Query~Clause\n * @property {string[]} fields - The fields in an index this clause should be matched against.\n * @property {number} [boost=1] - Any boost that should be applied when matching this clause.\n * @property {number} [editDistance] - Whether the term should have fuzzy matching applied, and how fuzzy the match should be.\n * @property {boolean} [usePipeline] - Whether the term should be passed through the search pipeline.\n * @property {number} [wildcard=lunr.Query.wildcard.NONE] - Whether the term should have wildcards appended or prepended.\n * @property {number} [presence=lunr.Query.presence.OPTIONAL] - The terms presence in any matching documents.\n */\n\n/**\n * Adds a {@link lunr.Query~Clause} to this query.\n *\n * Unless the clause contains the fields to be matched all fields will be matched. In addition\n * a default boost of 1 is applied to the clause.\n *\n * @param {lunr.Query~Clause} clause - The clause to add to this query.\n * @see lunr.Query~Clause\n * @returns {lunr.Query}\n */\nlunr.Query.prototype.clause = function (clause) {\n if (!('fields' in clause)) {\n clause.fields = this.allFields\n }\n\n if (!('boost' in clause)) {\n clause.boost = 1\n }\n\n if (!('usePipeline' in clause)) {\n clause.usePipeline = true\n }\n\n if (!('wildcard' in clause)) {\n clause.wildcard = lunr.Query.wildcard.NONE\n }\n\n if ((clause.wildcard & lunr.Query.wildcard.LEADING) && (clause.term.charAt(0) != lunr.Query.wildcard)) {\n clause.term = \"*\" + clause.term\n }\n\n if ((clause.wildcard & lunr.Query.wildcard.TRAILING) && (clause.term.slice(-1) != lunr.Query.wildcard)) {\n clause.term = \"\" + clause.term + \"*\"\n }\n\n if (!('presence' in clause)) {\n clause.presence = lunr.Query.presence.OPTIONAL\n }\n\n this.clauses.push(clause)\n\n return this\n}\n\n/**\n * A negated query is one in which every clause has a presence of\n * prohibited. These queries require some special processing to return\n * the expected results.\n *\n * @returns boolean\n */\nlunr.Query.prototype.isNegated = function () {\n for (var i = 0; i < this.clauses.length; i++) {\n if (this.clauses[i].presence != lunr.Query.presence.PROHIBITED) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * Adds a term to the current query, under the covers this will create a {@link lunr.Query~Clause}\n * to the list of clauses that make up this query.\n *\n * The term is used as is, i.e. no tokenization will be performed by this method. Instead conversion\n * to a token or token-like string should be done before calling this method.\n *\n * The term will be converted to a string by calling `toString`. Multiple terms can be passed as an\n * array, each term in the array will share the same options.\n *\n * @param {object|object[]} term - The term(s) to add to the query.\n * @param {object} [options] - Any additional properties to add to the query clause.\n * @returns {lunr.Query}\n * @see lunr.Query#clause\n * @see lunr.Query~Clause\n * @example adding a single term to a query\n * query.term(\"foo\")\n * @example adding a single term to a query and specifying search fields, term boost and automatic trailing wildcard\n * query.term(\"foo\", {\n * fields: [\"title\"],\n * boost: 10,\n * wildcard: lunr.Query.wildcard.TRAILING\n * })\n * @example using lunr.tokenizer to convert a string to tokens before using them as terms\n * query.term(lunr.tokenizer(\"foo bar\"))\n */\nlunr.Query.prototype.term = function (term, options) {\n if (Array.isArray(term)) {\n term.forEach(function (t) { this.term(t, lunr.utils.clone(options)) }, this)\n return this\n }\n\n var clause = options || {}\n clause.term = term.toString()\n\n this.clause(clause)\n\n return this\n}\nlunr.QueryParseError = function (message, start, end) {\n this.name = \"QueryParseError\"\n this.message = message\n this.start = start\n this.end = end\n}\n\nlunr.QueryParseError.prototype = new Error\nlunr.QueryLexer = function (str) {\n this.lexemes = []\n this.str = str\n this.length = str.length\n this.pos = 0\n this.start = 0\n this.escapeCharPositions = []\n}\n\nlunr.QueryLexer.prototype.run = function () {\n var state = lunr.QueryLexer.lexText\n\n while (state) {\n state = state(this)\n }\n}\n\nlunr.QueryLexer.prototype.sliceString = function () {\n var subSlices = [],\n sliceStart = this.start,\n sliceEnd = this.pos\n\n for (var i = 0; i < this.escapeCharPositions.length; i++) {\n sliceEnd = this.escapeCharPositions[i]\n subSlices.push(this.str.slice(sliceStart, sliceEnd))\n sliceStart = sliceEnd + 1\n }\n\n subSlices.push(this.str.slice(sliceStart, this.pos))\n this.escapeCharPositions.length = 0\n\n return subSlices.join('')\n}\n\nlunr.QueryLexer.prototype.emit = function (type) {\n this.lexemes.push({\n type: type,\n str: this.sliceString(),\n start: this.start,\n end: this.pos\n })\n\n this.start = this.pos\n}\n\nlunr.QueryLexer.prototype.escapeCharacter = function () {\n this.escapeCharPositions.push(this.pos - 1)\n this.pos += 1\n}\n\nlunr.QueryLexer.prototype.next = function () {\n if (this.pos >= this.length) {\n return lunr.QueryLexer.EOS\n }\n\n var char = this.str.charAt(this.pos)\n this.pos += 1\n return char\n}\n\nlunr.QueryLexer.prototype.width = function () {\n return this.pos - this.start\n}\n\nlunr.QueryLexer.prototype.ignore = function () {\n if (this.start == this.pos) {\n this.pos += 1\n }\n\n this.start = this.pos\n}\n\nlunr.QueryLexer.prototype.backup = function () {\n this.pos -= 1\n}\n\nlunr.QueryLexer.prototype.acceptDigitRun = function () {\n var char, charCode\n\n do {\n char = this.next()\n charCode = char.charCodeAt(0)\n } while (charCode > 47 && charCode < 58)\n\n if (char != lunr.QueryLexer.EOS) {\n this.backup()\n }\n}\n\nlunr.QueryLexer.prototype.more = function () {\n return this.pos < this.length\n}\n\nlunr.QueryLexer.EOS = 'EOS'\nlunr.QueryLexer.FIELD = 'FIELD'\nlunr.QueryLexer.TERM = 'TERM'\nlunr.QueryLexer.EDIT_DISTANCE = 'EDIT_DISTANCE'\nlunr.QueryLexer.BOOST = 'BOOST'\nlunr.QueryLexer.PRESENCE = 'PRESENCE'\n\nlunr.QueryLexer.lexField = function (lexer) {\n lexer.backup()\n lexer.emit(lunr.QueryLexer.FIELD)\n lexer.ignore()\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexTerm = function (lexer) {\n if (lexer.width() > 1) {\n lexer.backup()\n lexer.emit(lunr.QueryLexer.TERM)\n }\n\n lexer.ignore()\n\n if (lexer.more()) {\n return lunr.QueryLexer.lexText\n }\n}\n\nlunr.QueryLexer.lexEditDistance = function (lexer) {\n lexer.ignore()\n lexer.acceptDigitRun()\n lexer.emit(lunr.QueryLexer.EDIT_DISTANCE)\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexBoost = function (lexer) {\n lexer.ignore()\n lexer.acceptDigitRun()\n lexer.emit(lunr.QueryLexer.BOOST)\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexEOS = function (lexer) {\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n}\n\n// This matches the separator used when tokenising fields\n// within a document. These should match otherwise it is\n// not possible to search for some tokens within a document.\n//\n// It is possible for the user to change the separator on the\n// tokenizer so it _might_ clash with any other of the special\n// characters already used within the search string, e.g. :.\n//\n// This means that it is possible to change the separator in\n// such a way that makes some words unsearchable using a search\n// string.\nlunr.QueryLexer.termSeparator = lunr.tokenizer.separator\n\nlunr.QueryLexer.lexText = function (lexer) {\n while (true) {\n var char = lexer.next()\n\n if (char == lunr.QueryLexer.EOS) {\n return lunr.QueryLexer.lexEOS\n }\n\n // Escape character is '\\'\n if (char.charCodeAt(0) == 92) {\n lexer.escapeCharacter()\n continue\n }\n\n if (char == \":\") {\n return lunr.QueryLexer.lexField\n }\n\n if (char == \"~\") {\n lexer.backup()\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n return lunr.QueryLexer.lexEditDistance\n }\n\n if (char == \"^\") {\n lexer.backup()\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n return lunr.QueryLexer.lexBoost\n }\n\n // \"+\" indicates term presence is required\n // checking for length to ensure that only\n // leading \"+\" are considered\n if (char == \"+\" && lexer.width() === 1) {\n lexer.emit(lunr.QueryLexer.PRESENCE)\n return lunr.QueryLexer.lexText\n }\n\n // \"-\" indicates term presence is prohibited\n // checking for length to ensure that only\n // leading \"-\" are considered\n if (char == \"-\" && lexer.width() === 1) {\n lexer.emit(lunr.QueryLexer.PRESENCE)\n return lunr.QueryLexer.lexText\n }\n\n if (char.match(lunr.QueryLexer.termSeparator)) {\n return lunr.QueryLexer.lexTerm\n }\n }\n}\n\nlunr.QueryParser = function (str, query) {\n this.lexer = new lunr.QueryLexer (str)\n this.query = query\n this.currentClause = {}\n this.lexemeIdx = 0\n}\n\nlunr.QueryParser.prototype.parse = function () {\n this.lexer.run()\n this.lexemes = this.lexer.lexemes\n\n var state = lunr.QueryParser.parseClause\n\n while (state) {\n state = state(this)\n }\n\n return this.query\n}\n\nlunr.QueryParser.prototype.peekLexeme = function () {\n return this.lexemes[this.lexemeIdx]\n}\n\nlunr.QueryParser.prototype.consumeLexeme = function () {\n var lexeme = this.peekLexeme()\n this.lexemeIdx += 1\n return lexeme\n}\n\nlunr.QueryParser.prototype.nextClause = function () {\n var completedClause = this.currentClause\n this.query.clause(completedClause)\n this.currentClause = {}\n}\n\nlunr.QueryParser.parseClause = function (parser) {\n var lexeme = parser.peekLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n switch (lexeme.type) {\n case lunr.QueryLexer.PRESENCE:\n return lunr.QueryParser.parsePresence\n case lunr.QueryLexer.FIELD:\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expected either a field or a term, found \" + lexeme.type\n\n if (lexeme.str.length >= 1) {\n errorMessage += \" with value '\" + lexeme.str + \"'\"\n }\n\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n}\n\nlunr.QueryParser.parsePresence = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n switch (lexeme.str) {\n case \"-\":\n parser.currentClause.presence = lunr.Query.presence.PROHIBITED\n break\n case \"+\":\n parser.currentClause.presence = lunr.Query.presence.REQUIRED\n break\n default:\n var errorMessage = \"unrecognised presence operator'\" + lexeme.str + \"'\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n var errorMessage = \"expecting term or field, found nothing\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.FIELD:\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expecting term or field, found '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseField = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n if (parser.query.allFields.indexOf(lexeme.str) == -1) {\n var possibleFields = parser.query.allFields.map(function (f) { return \"'\" + f + \"'\" }).join(', '),\n errorMessage = \"unrecognised field '\" + lexeme.str + \"', possible fields: \" + possibleFields\n\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.fields = [lexeme.str]\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n var errorMessage = \"expecting term, found nothing\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expecting term, found '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseTerm = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n parser.currentClause.term = lexeme.str.toLowerCase()\n\n if (lexeme.str.indexOf(\"*\") != -1) {\n parser.currentClause.usePipeline = false\n }\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseEditDistance = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n var editDistance = parseInt(lexeme.str, 10)\n\n if (isNaN(editDistance)) {\n var errorMessage = \"edit distance must be numeric\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.editDistance = editDistance\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseBoost = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n var boost = parseInt(lexeme.str, 10)\n\n if (isNaN(boost)) {\n var errorMessage = \"boost must be numeric\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.boost = boost\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\n /**\n * export the module via AMD, CommonJS or as a browser global\n * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js\n */\n ;(function (root, factory) {\n if (true) {\n // AMD. Register as an anonymous module.\n !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__))\n } else {}\n }(this, function () {\n /**\n * Just return a value to define the module export.\n * This example returns an object, but the module\n * can return a function as the exported value.\n */\n return lunr\n }))\n})();\n\n\n//# sourceURL=webpack:///../node_modules/lunr/lunr.js?"); + +/***/ }), + +/***/ "./default/assets/css/main.sass": +/*!**************************************!*\ + !*** ./default/assets/css/main.sass ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n//# sourceURL=webpack:///./default/assets/css/main.sass?"); + +/***/ }), + +/***/ "./default/assets/js/src/bootstrap.ts": +/*!********************************************!*\ + !*** ./default/assets/js/src/bootstrap.ts ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _typedoc_Application__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typedoc/Application */ \"./default/assets/js/src/typedoc/Application.ts\");\n/* harmony import */ var _typedoc_components_MenuHighlight__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typedoc/components/MenuHighlight */ \"./default/assets/js/src/typedoc/components/MenuHighlight.ts\");\n/* harmony import */ var _typedoc_components_Search__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typedoc/components/Search */ \"./default/assets/js/src/typedoc/components/Search.ts\");\n/* harmony import */ var _typedoc_components_Signature__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typedoc/components/Signature */ \"./default/assets/js/src/typedoc/components/Signature.ts\");\n/* harmony import */ var _typedoc_components_Toggle__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typedoc/components/Toggle */ \"./default/assets/js/src/typedoc/components/Toggle.ts\");\n/* harmony import */ var _typedoc_components_Filter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typedoc/components/Filter */ \"./default/assets/js/src/typedoc/components/Filter.ts\");\n/* harmony import */ var _css_main_sass__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../css/main.sass */ \"./default/assets/css/main.sass\");\n\n\n\n\n\n\n\n(0,_typedoc_components_Search__WEBPACK_IMPORTED_MODULE_2__.initSearch)();\n(0,_typedoc_Application__WEBPACK_IMPORTED_MODULE_0__.registerComponent)(_typedoc_components_MenuHighlight__WEBPACK_IMPORTED_MODULE_1__.MenuHighlight, \".menu-highlight\");\n(0,_typedoc_Application__WEBPACK_IMPORTED_MODULE_0__.registerComponent)(_typedoc_components_Signature__WEBPACK_IMPORTED_MODULE_3__.Signature, \".tsd-signatures\");\n(0,_typedoc_Application__WEBPACK_IMPORTED_MODULE_0__.registerComponent)(_typedoc_components_Toggle__WEBPACK_IMPORTED_MODULE_4__.Toggle, \"a[data-toggle]\");\nif (_typedoc_components_Filter__WEBPACK_IMPORTED_MODULE_5__.Filter.isSupported()) {\n (0,_typedoc_Application__WEBPACK_IMPORTED_MODULE_0__.registerComponent)(_typedoc_components_Filter__WEBPACK_IMPORTED_MODULE_5__.Filter, \"#tsd-filter\");\n}\nelse {\n document.documentElement.classList.add(\"no-filter\");\n}\nvar app = new _typedoc_Application__WEBPACK_IMPORTED_MODULE_0__.Application();\nObject.defineProperty(window, \"app\", { value: app });\n\n\n//# sourceURL=webpack:///./default/assets/js/src/bootstrap.ts?"); + +/***/ }), + +/***/ "./default/assets/js/src/typedoc/Application.ts": +/*!******************************************************!*\ + !*** ./default/assets/js/src/typedoc/Application.ts ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"registerComponent\": () => /* binding */ registerComponent,\n/* harmony export */ \"Application\": () => /* binding */ Application\n/* harmony export */ });\n/**\n * List of all known components.\n */\nvar components = [];\n/**\n * Register a new component.\n */\nfunction registerComponent(constructor, selector) {\n components.push({\n selector: selector,\n constructor: constructor,\n });\n}\n/**\n * TypeDoc application class.\n */\nvar Application = /** @class */ (function () {\n /**\n * Create a new Application instance.\n */\n function Application() {\n this.createComponents(document.body);\n }\n /**\n * Create all components beneath the given jQuery element.\n */\n Application.prototype.createComponents = function (context) {\n components.forEach(function (c) {\n context.querySelectorAll(c.selector).forEach(function (el) {\n if (!el.dataset.hasInstance) {\n new c.constructor({ el: el });\n el.dataset.hasInstance = String(true);\n }\n });\n });\n };\n return Application;\n}());\n\n\n\n//# sourceURL=webpack:///./default/assets/js/src/typedoc/Application.ts?"); + +/***/ }), + +/***/ "./default/assets/js/src/typedoc/Component.ts": +/*!****************************************************!*\ + !*** ./default/assets/js/src/typedoc/Component.ts ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Component\": () => /* binding */ Component\n/* harmony export */ });\n/**\n * TypeDoc component class.\n */\nvar Component = /** @class */ (function () {\n function Component(options) {\n this.el = options.el;\n }\n return Component;\n}());\n\n\n\n//# sourceURL=webpack:///./default/assets/js/src/typedoc/Component.ts?"); + +/***/ }), + +/***/ "./default/assets/js/src/typedoc/EventTarget.ts": +/*!******************************************************!*\ + !*** ./default/assets/js/src/typedoc/EventTarget.ts ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"EventTarget\": () => /* binding */ EventTarget\n/* harmony export */ });\n/**\n * TypeDoc event target class.\n */\nvar EventTarget = /** @class */ (function () {\n function EventTarget() {\n this.listeners = {};\n }\n EventTarget.prototype.addEventListener = function (type, callback) {\n if (!(type in this.listeners)) {\n this.listeners[type] = [];\n }\n this.listeners[type].push(callback);\n };\n EventTarget.prototype.removeEventListener = function (type, callback) {\n if (!(type in this.listeners)) {\n return;\n }\n var stack = this.listeners[type];\n for (var i = 0, l = stack.length; i < l; i++) {\n if (stack[i] === callback) {\n stack.splice(i, 1);\n return;\n }\n }\n };\n EventTarget.prototype.dispatchEvent = function (event) {\n if (!(event.type in this.listeners)) {\n return true;\n }\n var stack = this.listeners[event.type].slice();\n for (var i = 0, l = stack.length; i < l; i++) {\n stack[i].call(this, event);\n }\n return !event.defaultPrevented;\n };\n return EventTarget;\n}());\n\n\n\n//# sourceURL=webpack:///./default/assets/js/src/typedoc/EventTarget.ts?"); + +/***/ }), + +/***/ "./default/assets/js/src/typedoc/components/Filter.ts": +/*!************************************************************!*\ + !*** ./default/assets/js/src/typedoc/components/Filter.ts ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Filter\": () => /* binding */ Filter\n/* harmony export */ });\n/* harmony import */ var _Component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Component */ \"./default/assets/js/src/typedoc/Component.ts\");\n/* harmony import */ var _utils_pointer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/pointer */ \"./default/assets/js/src/typedoc/utils/pointer.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\nvar FilterItem = /** @class */ (function () {\n function FilterItem(key, value) {\n this.key = key;\n this.value = value;\n this.defaultValue = value;\n this.initialize();\n if (window.localStorage[this.key]) {\n this.setValue(this.fromLocalStorage(window.localStorage[this.key]));\n }\n }\n FilterItem.prototype.initialize = function () { };\n FilterItem.prototype.setValue = function (value) {\n if (this.value == value)\n return;\n var oldValue = this.value;\n this.value = value;\n window.localStorage[this.key] = this.toLocalStorage(value);\n this.handleValueChange(oldValue, value);\n };\n return FilterItem;\n}());\nvar FilterItemCheckbox = /** @class */ (function (_super) {\n __extends(FilterItemCheckbox, _super);\n function FilterItemCheckbox() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FilterItemCheckbox.prototype.initialize = function () {\n var _this = this;\n var checkbox = document.querySelector(\"#tsd-filter-\" + this.key);\n if (!checkbox)\n return;\n this.checkbox = checkbox;\n this.checkbox.addEventListener(\"change\", function () {\n _this.setValue(_this.checkbox.checked);\n });\n };\n FilterItemCheckbox.prototype.handleValueChange = function (oldValue, newValue) {\n if (!this.checkbox)\n return;\n this.checkbox.checked = this.value;\n document.documentElement.classList.toggle(\"toggle-\" + this.key, this.value != this.defaultValue);\n };\n FilterItemCheckbox.prototype.fromLocalStorage = function (value) {\n return value == \"true\";\n };\n FilterItemCheckbox.prototype.toLocalStorage = function (value) {\n return value ? \"true\" : \"false\";\n };\n return FilterItemCheckbox;\n}(FilterItem));\nvar FilterItemSelect = /** @class */ (function (_super) {\n __extends(FilterItemSelect, _super);\n function FilterItemSelect() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FilterItemSelect.prototype.initialize = function () {\n var _this = this;\n document.documentElement.classList.add(\"toggle-\" + this.key + this.value);\n var select = document.querySelector(\"#tsd-filter-\" + this.key);\n if (!select)\n return;\n this.select = select;\n var onActivate = function () {\n _this.select.classList.add(\"active\");\n };\n var onDeactivate = function () {\n _this.select.classList.remove(\"active\");\n };\n this.select.addEventListener(_utils_pointer__WEBPACK_IMPORTED_MODULE_1__.pointerDown, onActivate);\n this.select.addEventListener(\"mouseover\", onActivate);\n this.select.addEventListener(\"mouseleave\", onDeactivate);\n this.select.querySelectorAll(\"li\").forEach(function (el) {\n el.addEventListener(_utils_pointer__WEBPACK_IMPORTED_MODULE_1__.pointerUp, function (e) {\n select.classList.remove(\"active\");\n _this.setValue(e.target.dataset.value || \"\");\n });\n });\n document.addEventListener(_utils_pointer__WEBPACK_IMPORTED_MODULE_1__.pointerDown, function (e) {\n if (_this.select.contains(e.target))\n return;\n _this.select.classList.remove(\"active\");\n });\n };\n FilterItemSelect.prototype.handleValueChange = function (oldValue, newValue) {\n this.select.querySelectorAll(\"li.selected\").forEach(function (el) {\n el.classList.remove(\"selected\");\n });\n var selected = this.select.querySelector('li[data-value=\"' + newValue + '\"]');\n var label = this.select.querySelector(\".tsd-select-label\");\n if (selected && label) {\n selected.classList.add(\"selected\");\n label.textContent = selected.textContent;\n }\n document.documentElement.classList.remove(\"toggle-\" + oldValue);\n document.documentElement.classList.add(\"toggle-\" + newValue);\n };\n FilterItemSelect.prototype.fromLocalStorage = function (value) {\n return value;\n };\n FilterItemSelect.prototype.toLocalStorage = function (value) {\n return value;\n };\n return FilterItemSelect;\n}(FilterItem));\nvar Filter = /** @class */ (function (_super) {\n __extends(Filter, _super);\n function Filter(options) {\n var _this = _super.call(this, options) || this;\n _this.optionVisibility = new FilterItemSelect(\"visibility\", \"private\");\n _this.optionInherited = new FilterItemCheckbox(\"inherited\", true);\n _this.optionExternals = new FilterItemCheckbox(\"externals\", true);\n return _this;\n }\n Filter.isSupported = function () {\n try {\n return typeof window.localStorage != \"undefined\";\n }\n catch (e) {\n return false;\n }\n };\n return Filter;\n}(_Component__WEBPACK_IMPORTED_MODULE_0__.Component));\n\n\n\n//# sourceURL=webpack:///./default/assets/js/src/typedoc/components/Filter.ts?"); + +/***/ }), + +/***/ "./default/assets/js/src/typedoc/components/MenuHighlight.ts": +/*!*******************************************************************!*\ + !*** ./default/assets/js/src/typedoc/components/MenuHighlight.ts ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"MenuHighlight\": () => /* binding */ MenuHighlight\n/* harmony export */ });\n/* harmony import */ var _Component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Component */ \"./default/assets/js/src/typedoc/Component.ts\");\n/* harmony import */ var _services_Viewport__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../services/Viewport */ \"./default/assets/js/src/typedoc/services/Viewport.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n/**\n * Manages the sticky state of the navigation and moves the highlight\n * to the current navigation item.\n */\nvar MenuHighlight = /** @class */ (function (_super) {\n __extends(MenuHighlight, _super);\n /**\n * Create a new MenuHighlight instance.\n *\n * @param options Backbone view constructor options.\n */\n function MenuHighlight(options) {\n var _this = _super.call(this, options) || this;\n /**\n * List of all discovered anchors.\n */\n _this.anchors = [];\n /**\n * Index of the currently highlighted anchor.\n */\n _this.index = -1;\n _services_Viewport__WEBPACK_IMPORTED_MODULE_1__.Viewport.instance.addEventListener(\"resize\", function () { return _this.onResize(); });\n _services_Viewport__WEBPACK_IMPORTED_MODULE_1__.Viewport.instance.addEventListener(\"scroll\", function (e) { return _this.onScroll(e); });\n _this.createAnchors();\n return _this;\n }\n /**\n * Find all anchors on the current page.\n */\n MenuHighlight.prototype.createAnchors = function () {\n var _this = this;\n var base = window.location.href;\n if (base.indexOf(\"#\") != -1) {\n base = base.substr(0, base.indexOf(\"#\"));\n }\n this.el.querySelectorAll(\"a\").forEach(function (el) {\n var href = el.href;\n if (href.indexOf(\"#\") == -1)\n return;\n if (href.substr(0, base.length) != base)\n return;\n var hash = href.substr(href.indexOf(\"#\") + 1);\n var anchor = document.querySelector(\"a.tsd-anchor[name=\" + hash + \"]\");\n var link = el.parentNode;\n if (!anchor || !link)\n return;\n _this.anchors.push({\n link: link,\n anchor: anchor,\n position: 0,\n });\n });\n this.onResize();\n };\n /**\n * Triggered after the viewport was resized.\n */\n MenuHighlight.prototype.onResize = function () {\n var anchor;\n for (var index = 0, count = this.anchors.length; index < count; index++) {\n anchor = this.anchors[index];\n var rect = anchor.anchor.getBoundingClientRect();\n anchor.position = rect.top + document.body.scrollTop;\n }\n this.anchors.sort(function (a, b) {\n return a.position - b.position;\n });\n var event = new CustomEvent(\"scroll\", {\n detail: {\n scrollTop: _services_Viewport__WEBPACK_IMPORTED_MODULE_1__.Viewport.instance.scrollTop,\n },\n });\n this.onScroll(event);\n };\n /**\n * Triggered after the viewport was scrolled.\n *\n * @param event The custom event with the current vertical scroll position.\n */\n MenuHighlight.prototype.onScroll = function (event) {\n var scrollTop = event.detail.scrollTop + 5;\n var anchors = this.anchors;\n var count = anchors.length - 1;\n var index = this.index;\n while (index > -1 && anchors[index].position > scrollTop) {\n index -= 1;\n }\n while (index < count && anchors[index + 1].position < scrollTop) {\n index += 1;\n }\n if (this.index != index) {\n if (this.index > -1)\n this.anchors[this.index].link.classList.remove(\"focus\");\n this.index = index;\n if (this.index > -1)\n this.anchors[this.index].link.classList.add(\"focus\");\n }\n };\n return MenuHighlight;\n}(_Component__WEBPACK_IMPORTED_MODULE_0__.Component));\n\n\n\n//# sourceURL=webpack:///./default/assets/js/src/typedoc/components/MenuHighlight.ts?"); + +/***/ }), + +/***/ "./default/assets/js/src/typedoc/components/Search.ts": +/*!************************************************************!*\ + !*** ./default/assets/js/src/typedoc/components/Search.ts ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"initSearch\": () => /* binding */ initSearch\n/* harmony export */ });\n/* harmony import */ var _utils_debounce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/debounce */ \"./default/assets/js/src/typedoc/utils/debounce.ts\");\n/* harmony import */ var lunr__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lunr */ \"../node_modules/lunr/lunr.js\");\n/* harmony import */ var lunr__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lunr__WEBPACK_IMPORTED_MODULE_1__);\n\n\nfunction initSearch() {\n var searchEl = document.getElementById(\"tsd-search\");\n if (!searchEl)\n return;\n var searchScript = document.getElementById(\"search-script\");\n if (searchScript) {\n searchScript.addEventListener(\"error\", function () {\n searchEl.classList.remove(\"loading\");\n searchEl.classList.add(\"failure\");\n });\n searchScript.addEventListener(\"load\", function () {\n searchEl.classList.remove(\"loading\");\n searchEl.classList.add(\"ready\");\n });\n }\n searchEl.classList.add(\"loading\");\n var field = document.querySelector(\"#tsd-search-field\");\n var results = document.querySelector(\".results\");\n if (!field || !results) {\n throw new Error(\"The input field or the result list wrapper was not found\");\n }\n field.addEventListener(\"focus\", function () { return searchEl.classList.add(\"has-focus\"); });\n field.addEventListener(\"blur\", function () {\n // Delay a bit so that mouse clicks don't get swallowed\n setTimeout(function () { return searchEl.classList.remove(\"has-focus\"); }, 100);\n });\n var state = {\n base: searchEl.dataset.base + \"/\",\n };\n bindEvents(searchEl, results, field, state);\n}\nfunction bindEvents(searchEl, results, field, state) {\n field.addEventListener(\"input\", (0,_utils_debounce__WEBPACK_IMPORTED_MODULE_0__.debounce)(function () {\n updateResults(searchEl, results, field, state);\n }, 200));\n var preventPress = false;\n field.addEventListener(\"keydown\", function (e) {\n preventPress = true;\n if (e.key == \"Enter\") {\n gotoCurrentResult(results, field);\n }\n else if (e.key == \"Escape\") {\n field.blur();\n }\n else if (e.key == \"ArrowUp\") {\n setCurrentResult(results, -1);\n }\n else if (e.key === \"ArrowDown\") {\n setCurrentResult(results, 1);\n }\n else {\n preventPress = false;\n }\n });\n field.addEventListener(\"keypress\", function (e) {\n if (preventPress)\n e.preventDefault();\n });\n /**\n * Start searching by pressing slash.\n */\n document.body.addEventListener(\"keydown\", function (e) {\n if (e.altKey || e.ctrlKey || e.metaKey)\n return;\n if (!field.matches(\":focus\") && e.key === \"/\") {\n field.focus();\n e.preventDefault();\n }\n });\n}\nfunction checkIndex(state, searchEl) {\n if (state.index)\n return;\n if (window.searchData) {\n searchEl.classList.remove(\"loading\");\n searchEl.classList.add(\"ready\");\n state.data = window.searchData;\n state.index = lunr__WEBPACK_IMPORTED_MODULE_1__.Index.load(window.searchData.index);\n }\n}\nfunction updateResults(searchEl, results, query, state) {\n checkIndex(state, searchEl);\n // Don't clear results if loading state is not ready,\n // because loading or error message can be removed.\n if (!state.index || !state.data)\n return;\n results.textContent = \"\";\n var searchText = query.value.trim();\n // Perform a wildcard search\n var res = state.index.search(\"*\" + searchText + \"*\");\n for (var i = 0, c = Math.min(10, res.length); i < c; i++) {\n var row = state.data.rows[Number(res[i].ref)];\n // Bold the matched part of the query in the search results\n var name_1 = boldMatches(row.name, searchText);\n if (row.parent) {\n name_1 = \"\" + boldMatches(row.parent, searchText) + \".\" + name_1;\n }\n var item = document.createElement(\"li\");\n item.classList.value = row.classes;\n var anchor = document.createElement(\"a\");\n anchor.href = state.base + row.url;\n anchor.classList.add(\"tsd-kind-icon\");\n anchor.innerHTML = name_1;\n item.append(anchor);\n results.appendChild(item);\n }\n}\n/**\n * Move the highlight within the result set.\n */\nfunction setCurrentResult(results, dir) {\n var current = results.querySelector(\".current\");\n if (!current) {\n current = results.querySelector(dir == 1 ? \"li:first-child\" : \"li:last-child\");\n if (current) {\n current.classList.add(\"current\");\n }\n }\n else {\n var rel = dir == 1\n ? current.nextElementSibling\n : current.previousElementSibling;\n if (rel) {\n current.classList.remove(\"current\");\n rel.classList.add(\"current\");\n }\n }\n}\n/**\n * Navigate to the highlighted result.\n */\nfunction gotoCurrentResult(results, field) {\n var current = results.querySelector(\".current\");\n if (!current) {\n current = results.querySelector(\"li:first-child\");\n }\n if (current) {\n var link = current.querySelector(\"a\");\n if (link) {\n window.location.href = link.href;\n }\n field.blur();\n }\n}\nfunction boldMatches(text, search) {\n if (search === \"\") {\n return text;\n }\n var lowerText = text.toLocaleLowerCase();\n var lowerSearch = search.toLocaleLowerCase();\n var parts = [];\n var lastIndex = 0;\n var index = lowerText.indexOf(lowerSearch);\n while (index != -1) {\n parts.push(escapeHtml(text.substring(lastIndex, index)), \"\" + escapeHtml(text.substring(index, index + lowerSearch.length)) + \"\");\n lastIndex = index + lowerSearch.length;\n index = lowerText.indexOf(lowerSearch, lastIndex);\n }\n parts.push(escapeHtml(text.substring(lastIndex)));\n return parts.join(\"\");\n}\nvar SPECIAL_HTML = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n \"'\": \"'\",\n '\"': \""\",\n};\nfunction escapeHtml(text) {\n return text.replace(/[&<>\"'\"]/g, function (match) { return SPECIAL_HTML[match]; });\n}\n\n\n//# sourceURL=webpack:///./default/assets/js/src/typedoc/components/Search.ts?"); + +/***/ }), + +/***/ "./default/assets/js/src/typedoc/components/Signature.ts": +/*!***************************************************************!*\ + !*** ./default/assets/js/src/typedoc/components/Signature.ts ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Signature\": () => /* binding */ Signature\n/* harmony export */ });\n/* harmony import */ var _Component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Component */ \"./default/assets/js/src/typedoc/Component.ts\");\n/* harmony import */ var _services_Viewport__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../services/Viewport */ \"./default/assets/js/src/typedoc/services/Viewport.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n/**\n * Holds a signature and its description.\n */\nvar SignatureGroup = /** @class */ (function () {\n /**\n * Create a new SignatureGroup instance.\n *\n * @param signature The target signature.\n * @param description The description for the signature.\n */\n function SignatureGroup(signature, description) {\n this.signature = signature;\n this.description = description;\n }\n /**\n * Add the given class to all elements of the group.\n *\n * @param className The class name to add.\n */\n SignatureGroup.prototype.addClass = function (className) {\n this.signature.classList.add(className);\n this.description.classList.add(className);\n return this;\n };\n /**\n * Remove the given class from all elements of the group.\n *\n * @param className The class name to remove.\n */\n SignatureGroup.prototype.removeClass = function (className) {\n this.signature.classList.remove(className);\n this.description.classList.remove(className);\n return this;\n };\n return SignatureGroup;\n}());\n/**\n * Controls the tab like behaviour of methods and functions with multiple signatures.\n */\nvar Signature = /** @class */ (function (_super) {\n __extends(Signature, _super);\n /**\n * Create a new Signature instance.\n *\n * @param options Backbone view constructor options.\n */\n function Signature(options) {\n var _this = _super.call(this, options) || this;\n /**\n * List of found signature groups.\n */\n _this.groups = [];\n /**\n * The index of the currently displayed signature.\n */\n _this.index = -1;\n _this.createGroups();\n if (_this.container) {\n _this.el.classList.add(\"active\");\n Array.from(_this.el.children).forEach(function (signature) {\n signature.addEventListener(\"touchstart\", function (event) {\n return _this.onClick(event);\n });\n signature.addEventListener(\"click\", function (event) {\n return _this.onClick(event);\n });\n });\n _this.container.classList.add(\"active\");\n _this.setIndex(0);\n }\n return _this;\n }\n /**\n * Set the index of the active signature.\n *\n * @param index The index of the signature to activate.\n */\n Signature.prototype.setIndex = function (index) {\n if (index < 0)\n index = 0;\n if (index > this.groups.length - 1)\n index = this.groups.length - 1;\n if (this.index == index)\n return;\n var to = this.groups[index];\n if (this.index > -1) {\n var from_1 = this.groups[this.index];\n from_1.removeClass(\"current\").addClass(\"fade-out\");\n to.addClass(\"current\");\n to.addClass(\"fade-in\");\n _services_Viewport__WEBPACK_IMPORTED_MODULE_1__.Viewport.instance.triggerResize();\n setTimeout(function () {\n from_1.removeClass(\"fade-out\");\n to.removeClass(\"fade-in\");\n }, 300);\n }\n else {\n to.addClass(\"current\");\n _services_Viewport__WEBPACK_IMPORTED_MODULE_1__.Viewport.instance.triggerResize();\n }\n this.index = index;\n };\n /**\n * Find all signature/description groups.\n */\n Signature.prototype.createGroups = function () {\n var signatures = this.el.children;\n if (signatures.length < 2)\n return;\n this.container = this.el.nextElementSibling;\n var descriptions = this.container.children;\n this.groups = [];\n for (var index = 0; index < signatures.length; index++) {\n this.groups.push(new SignatureGroup(signatures[index], descriptions[index]));\n }\n };\n /**\n * Triggered when the user clicks onto a signature header.\n *\n * @param e The related event object.\n */\n Signature.prototype.onClick = function (e) {\n var _this = this;\n this.groups.forEach(function (group, index) {\n if (group.signature === e.currentTarget) {\n _this.setIndex(index);\n }\n });\n };\n return Signature;\n}(_Component__WEBPACK_IMPORTED_MODULE_0__.Component));\n\n\n\n//# sourceURL=webpack:///./default/assets/js/src/typedoc/components/Signature.ts?"); + +/***/ }), + +/***/ "./default/assets/js/src/typedoc/components/Toggle.ts": +/*!************************************************************!*\ + !*** ./default/assets/js/src/typedoc/components/Toggle.ts ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Toggle\": () => /* binding */ Toggle\n/* harmony export */ });\n/* harmony import */ var _Component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Component */ \"./default/assets/js/src/typedoc/Component.ts\");\n/* harmony import */ var _utils_pointer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/pointer */ \"./default/assets/js/src/typedoc/utils/pointer.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\nvar Toggle = /** @class */ (function (_super) {\n __extends(Toggle, _super);\n function Toggle(options) {\n var _this = _super.call(this, options) || this;\n _this.className = _this.el.dataset.toggle || \"\";\n _this.el.addEventListener(_utils_pointer__WEBPACK_IMPORTED_MODULE_1__.pointerUp, function (e) { return _this.onPointerUp(e); });\n _this.el.addEventListener(\"click\", function (e) { return e.preventDefault(); });\n document.addEventListener(_utils_pointer__WEBPACK_IMPORTED_MODULE_1__.pointerDown, function (e) {\n return _this.onDocumentPointerDown(e);\n });\n document.addEventListener(_utils_pointer__WEBPACK_IMPORTED_MODULE_1__.pointerUp, function (e) {\n return _this.onDocumentPointerUp(e);\n });\n return _this;\n }\n Toggle.prototype.setActive = function (value) {\n if (this.active == value)\n return;\n this.active = value;\n document.documentElement.classList.toggle(\"has-\" + this.className, value);\n this.el.classList.toggle(\"active\", value);\n var transition = (this.active ? \"to-has-\" : \"from-has-\") + this.className;\n document.documentElement.classList.add(transition);\n setTimeout(function () { return document.documentElement.classList.remove(transition); }, 500);\n };\n Toggle.prototype.onPointerUp = function (event) {\n if (_utils_pointer__WEBPACK_IMPORTED_MODULE_1__.hasPointerMoved)\n return;\n this.setActive(true);\n event.preventDefault();\n };\n Toggle.prototype.onDocumentPointerDown = function (e) {\n if (this.active) {\n if (e.target.closest(\".col-menu, .tsd-filter-group\")) {\n return;\n }\n this.setActive(false);\n }\n };\n Toggle.prototype.onDocumentPointerUp = function (e) {\n var _this = this;\n if (_utils_pointer__WEBPACK_IMPORTED_MODULE_1__.hasPointerMoved)\n return;\n if (this.active) {\n if (e.target.closest(\".col-menu\")) {\n var link = e.target.closest(\"a\");\n if (link) {\n var href = window.location.href;\n if (href.indexOf(\"#\") != -1) {\n href = href.substr(0, href.indexOf(\"#\"));\n }\n if (link.href.substr(0, href.length) == href) {\n setTimeout(function () { return _this.setActive(false); }, 250);\n }\n }\n }\n }\n };\n return Toggle;\n}(_Component__WEBPACK_IMPORTED_MODULE_0__.Component));\n\n\n\n//# sourceURL=webpack:///./default/assets/js/src/typedoc/components/Toggle.ts?"); + +/***/ }), + +/***/ "./default/assets/js/src/typedoc/services/Viewport.ts": +/*!************************************************************!*\ + !*** ./default/assets/js/src/typedoc/services/Viewport.ts ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Viewport\": () => /* binding */ Viewport\n/* harmony export */ });\n/* harmony import */ var _EventTarget__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../EventTarget */ \"./default/assets/js/src/typedoc/EventTarget.ts\");\n/* harmony import */ var _utils_trottle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/trottle */ \"./default/assets/js/src/typedoc/utils/trottle.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n/**\n * A global service that monitors the window size and scroll position.\n */\nvar Viewport = /** @class */ (function (_super) {\n __extends(Viewport, _super);\n /**\n * Create new Viewport instance.\n */\n function Viewport() {\n var _this = _super.call(this) || this;\n /**\n * The current scroll position.\n */\n _this.scrollTop = 0;\n /**\n * The previous scrollTop.\n */\n _this.lastY = 0;\n /**\n * The width of the window.\n */\n _this.width = 0;\n /**\n * The height of the window.\n */\n _this.height = 0;\n /**\n * Boolean indicating whether the toolbar is shown.\n */\n _this.showToolbar = true;\n _this.toolbar = (document.querySelector(\".tsd-page-toolbar\"));\n _this.secondaryNav = (document.querySelector(\".tsd-navigation.secondary\"));\n window.addEventListener(\"scroll\", (0,_utils_trottle__WEBPACK_IMPORTED_MODULE_1__.throttle)(function () { return _this.onScroll(); }, 10));\n window.addEventListener(\"resize\", (0,_utils_trottle__WEBPACK_IMPORTED_MODULE_1__.throttle)(function () { return _this.onResize(); }, 10));\n _this.onResize();\n _this.onScroll();\n return _this;\n }\n /**\n * Trigger a resize event.\n */\n Viewport.prototype.triggerResize = function () {\n var event = new CustomEvent(\"resize\", {\n detail: {\n width: this.width,\n height: this.height,\n },\n });\n this.dispatchEvent(event);\n };\n /**\n * Triggered when the size of the window has changed.\n */\n Viewport.prototype.onResize = function () {\n this.width = window.innerWidth || 0;\n this.height = window.innerHeight || 0;\n var event = new CustomEvent(\"resize\", {\n detail: {\n width: this.width,\n height: this.height,\n },\n });\n this.dispatchEvent(event);\n };\n /**\n * Triggered when the user scrolled the viewport.\n */\n Viewport.prototype.onScroll = function () {\n this.scrollTop = window.scrollY || 0;\n var event = new CustomEvent(\"scroll\", {\n detail: {\n scrollTop: this.scrollTop,\n },\n });\n this.dispatchEvent(event);\n this.hideShowToolbar();\n };\n /**\n * Handle hiding/showing of the toolbar.\n */\n Viewport.prototype.hideShowToolbar = function () {\n var isShown = this.showToolbar;\n this.showToolbar = this.lastY >= this.scrollTop || this.scrollTop === 0;\n if (isShown !== this.showToolbar) {\n this.toolbar.classList.toggle(\"tsd-page-toolbar--hide\");\n this.secondaryNav.classList.toggle(\"tsd-navigation--toolbar-hide\");\n }\n this.lastY = this.scrollTop;\n };\n Viewport.instance = new Viewport();\n return Viewport;\n}(_EventTarget__WEBPACK_IMPORTED_MODULE_0__.EventTarget));\n\n\n\n//# sourceURL=webpack:///./default/assets/js/src/typedoc/services/Viewport.ts?"); + +/***/ }), + +/***/ "./default/assets/js/src/typedoc/utils/debounce.ts": +/*!*********************************************************!*\ + !*** ./default/assets/js/src/typedoc/utils/debounce.ts ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"debounce\": () => /* binding */ debounce\n/* harmony export */ });\nvar debounce = function (fn, wait) {\n if (wait === void 0) { wait = 100; }\n var timeout;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n clearTimeout(timeout);\n timeout = setTimeout(function () { return fn(args); }, wait);\n };\n};\n\n\n//# sourceURL=webpack:///./default/assets/js/src/typedoc/utils/debounce.ts?"); + +/***/ }), + +/***/ "./default/assets/js/src/typedoc/utils/pointer.ts": +/*!********************************************************!*\ + !*** ./default/assets/js/src/typedoc/utils/pointer.ts ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"pointerDown\": () => /* binding */ pointerDown,\n/* harmony export */ \"pointerMove\": () => /* binding */ pointerMove,\n/* harmony export */ \"pointerUp\": () => /* binding */ pointerUp,\n/* harmony export */ \"pointerDownPosition\": () => /* binding */ pointerDownPosition,\n/* harmony export */ \"preventNextClick\": () => /* binding */ preventNextClick,\n/* harmony export */ \"isPointerDown\": () => /* binding */ isPointerDown,\n/* harmony export */ \"isPointerTouch\": () => /* binding */ isPointerTouch,\n/* harmony export */ \"hasPointerMoved\": () => /* binding */ hasPointerMoved,\n/* harmony export */ \"isMobile\": () => /* binding */ isMobile\n/* harmony export */ });\n/**\n * Event name of the pointer down event.\n */\nvar pointerDown = \"mousedown\";\n/**\n * Event name of the pointer move event.\n */\nvar pointerMove = \"mousemove\";\n/**\n * Event name of the pointer up event.\n */\nvar pointerUp = \"mouseup\";\n/**\n * Position the pointer was pressed at.\n */\nvar pointerDownPosition = { x: 0, y: 0 };\n/**\n * Should the next click on the document be supressed?\n */\nvar preventNextClick = false;\n/**\n * Is the pointer down?\n */\nvar isPointerDown = false;\n/**\n * Is the pointer a touch point?\n */\nvar isPointerTouch = false;\n/**\n * Did the pointer move since the last down event?\n */\nvar hasPointerMoved = false;\n/**\n * Is the user agent a mobile agent?\n */\nvar isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\ndocument.documentElement.classList.add(isMobile ? \"is-mobile\" : \"not-mobile\");\nif (isMobile && \"ontouchstart\" in document.documentElement) {\n isPointerTouch = true;\n pointerDown = \"touchstart\";\n pointerMove = \"touchmove\";\n pointerUp = \"touchend\";\n}\ndocument.addEventListener(pointerDown, function (e) {\n isPointerDown = true;\n hasPointerMoved = false;\n var t = pointerDown == \"touchstart\"\n ? e.targetTouches[0]\n : e;\n pointerDownPosition.y = t.pageY || 0;\n pointerDownPosition.x = t.pageX || 0;\n});\ndocument.addEventListener(pointerMove, function (e) {\n if (!isPointerDown)\n return;\n if (!hasPointerMoved) {\n var t = pointerDown == \"touchstart\"\n ? e.targetTouches[0]\n : e;\n var x = pointerDownPosition.x - (t.pageX || 0);\n var y = pointerDownPosition.y - (t.pageY || 0);\n hasPointerMoved = Math.sqrt(x * x + y * y) > 10;\n }\n});\ndocument.addEventListener(pointerUp, function () {\n isPointerDown = false;\n});\ndocument.addEventListener(\"click\", function (e) {\n if (preventNextClick) {\n e.preventDefault();\n e.stopImmediatePropagation();\n preventNextClick = false;\n }\n});\n\n\n//# sourceURL=webpack:///./default/assets/js/src/typedoc/utils/pointer.ts?"); + +/***/ }), + +/***/ "./default/assets/js/src/typedoc/utils/trottle.ts": +/*!********************************************************!*\ + !*** ./default/assets/js/src/typedoc/utils/trottle.ts ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"throttle\": () => /* binding */ throttle\n/* harmony export */ });\nvar throttle = function (fn, wait) {\n if (wait === void 0) { wait = 100; }\n var time = Date.now();\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (time + wait - Date.now() < 0) {\n fn.apply(void 0, args);\n time = Date.now();\n }\n };\n};\n\n\n//# sourceURL=webpack:///./default/assets/js/src/typedoc/utils/trottle.ts?"); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ if(__webpack_module_cache__[moduleId]) { +/******/ return __webpack_module_cache__[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => module['default'] : +/******/ () => module; +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +/******/ // startup +/******/ // Load entry module +/******/ __webpack_require__("./default/assets/js/src/bootstrap.ts"); +/******/ // This entry module used 'exports' so it can't be inlined +/******/ })() +; \ No newline at end of file diff --git a/tools/doc/typedoc-theme/assets/js/src/typedoc/Application.ts b/tools/doc/typedoc-theme/assets/js/src/typedoc/Application.ts deleted file mode 100644 index 085709b525..0000000000 --- a/tools/doc/typedoc-theme/assets/js/src/typedoc/Application.ts +++ /dev/null @@ -1,111 +0,0 @@ -namespace typedoc -{ - /** - * Service definition. - */ - export interface IService - { - constructor:any; - name:string; - instance:any; - priority:number; - } - - - /** - * Component definition. - */ - export interface IComponent - { - constructor:any; - selector:string; - priority:number; - namespace:string; - } - - - /** - * List of all known services. - */ - var services:IService[] = []; - - /** - * List of all known components. - */ - var components:IComponent[] = []; - - /** - * Register a new component. - */ - export function registerService(constructor:any, name:string, priority:number = 0) { - services.push({ - constructor: constructor, - name: name, - priority: priority, - instance: null - }); - - services.sort((a:IService, b:IService) => a.priority - b.priority); - } - - - /** - * Register a new component. - */ - export function registerComponent(constructor:any, selector:string, priority:number = 0, namespace:string = '*') - { - components.push({ - selector: selector, - constructor: constructor, - priority: priority, - namespace: namespace - }); - - components.sort((a:IComponent, b:IComponent) => a.priority - b.priority); - } - - - /** - * TypeDoc application class. - */ - export class Application - { - /** - * Create a new Application instance. - */ - constructor() { - this.createServices(); - this.createComponents(document.body); - } - - - /** - * Create all services. - */ - private createServices() { - services.forEach((c) => { - c.instance = new c.constructor(); - (typedoc as any)[c.name] = c.instance; - }); - } - - - /** - * Create all components beneath the given jQuery element. - */ - public createComponents(context:HTMLElement, namespace:string = 'default') { - components.forEach((c) => { - if (c.namespace != namespace && c.namespace != '*') { - return; - } - - context.querySelectorAll(c.selector).forEach((el) => { - if (!el.dataset.hasInstance) { - new c.constructor({el:el}); - el.dataset.hasInstance = String(true); - } - }); - }); - } - } -} diff --git a/tools/doc/typedoc-theme/assets/js/src/typedoc/Component.ts b/tools/doc/typedoc-theme/assets/js/src/typedoc/Component.ts deleted file mode 100644 index 8e8bf467cf..0000000000 --- a/tools/doc/typedoc-theme/assets/js/src/typedoc/Component.ts +++ /dev/null @@ -1,17 +0,0 @@ -namespace typedoc -{ - export interface IComponentOptions { - el: HTMLElement; - } - - /** - * TypeDoc component class. - */ - export class Component { - protected el: HTMLElement; - - constructor(options: IComponentOptions) { - this.el = options.el; - } - } -} diff --git a/tools/doc/typedoc-theme/assets/js/src/typedoc/EventTarget.ts b/tools/doc/typedoc-theme/assets/js/src/typedoc/EventTarget.ts deleted file mode 100644 index e63682b1ba..0000000000 --- a/tools/doc/typedoc-theme/assets/js/src/typedoc/EventTarget.ts +++ /dev/null @@ -1,45 +0,0 @@ -namespace typedoc -{ - export interface IEventListener { - (evt: CustomEvent): void; - } - - /** - * TypeDoc event target class. - */ - export class EventTarget { - private listeners: Record[]> = {}; - - public addEventListener(type: string, callback: IEventListener) { - if (!(type in this.listeners)) { - this.listeners[type] = []; - } - this.listeners[type].push(callback); - }; - - public removeEventListener(type: string, callback: IEventListener) { - if (!(type in this.listeners)) { - return; - } - const stack = this.listeners[type]; - for (let i = 0, l = stack.length; i < l; i++) { - if (stack[i] === callback){ - stack.splice(i, 1); - return; - } - } - }; - - public dispatchEvent(event: CustomEvent) { - if (!(event.type in this.listeners)) { - return true; - } - const stack = this.listeners[event.type].slice(); - - for (let i = 0, l = stack.length; i < l; i++) { - stack[i].call(this, event); - } - return !event.defaultPrevented; - }; - } -} diff --git a/tools/doc/typedoc-theme/assets/js/src/typedoc/components/Filter.ts b/tools/doc/typedoc-theme/assets/js/src/typedoc/components/Filter.ts deleted file mode 100644 index 3c6d01dbc6..0000000000 --- a/tools/doc/typedoc-theme/assets/js/src/typedoc/components/Filter.ts +++ /dev/null @@ -1,186 +0,0 @@ -/// -/// -/// - -namespace typedoc -{ - abstract class FilterItem - { - protected key:string; - - protected value:T; - - protected defaultValue:T; - - - constructor(key:string, value:T) { - this.key = key; - this.value = value; - this.defaultValue = value; - - this.initialize(); - - if (window.localStorage[this.key]) { - this.setValue(this.fromLocalStorage(window.localStorage[this.key])); - } - } - - - protected initialize() {} - - - protected abstract handleValueChange(oldValue:T, newValue:T): void; - - protected abstract fromLocalStorage(value: string): T; - - protected abstract toLocalStorage(value: T): string; - - - protected setValue(value:T) { - if (this.value == value) return; - - var oldValue = this.value; - this.value = value; - window.localStorage[this.key] = this.toLocalStorage(value); - - this.handleValueChange(oldValue, value); - } - } - - - class FilterItemCheckbox extends FilterItem - { - private checkbox!:HTMLInputElement; - - - protected initialize() { - const checkbox = document.querySelector('#tsd-filter-' + this.key); - if (!checkbox) return; - - this.checkbox = checkbox; - this.checkbox.addEventListener('change', () => { - this.setValue(this.checkbox.checked); - }); - } - - - protected handleValueChange(oldValue:boolean, newValue:boolean) { - if (!this.checkbox) return; - this.checkbox.checked = this.value; - document.documentElement.classList.toggle('toggle-' + this.key, this.value != this.defaultValue); - } - - - protected fromLocalStorage(value:string):boolean { - return value == 'true'; - } - - - protected toLocalStorage(value:boolean):string { - return value ? 'true' : 'false'; - } - } - - - class FilterItemSelect extends FilterItem - { - private select!:HTMLElement; - - - protected initialize() { - document.documentElement.classList.add('toggle-' + this.key + this.value); - - const select = document.querySelector('#tsd-filter-' + this.key); - if (!select) return; - - this.select = select; - const onActivate = () => { - this.select.classList.add('active'); - }; - const onDeactivate = () => { - this.select.classList.remove('active'); - }; - - this.select.addEventListener(pointerDown, onActivate); - this.select.addEventListener('mouseover', onActivate); - this.select.addEventListener('mouseleave', onDeactivate); - - this.select.querySelectorAll('li').forEach(el => { - el.addEventListener(pointerUp, (e) => { - select.classList.remove('active'); - this.setValue((e.target as HTMLElement).dataset.value || ''); - }) - }); - - document.addEventListener(pointerDown, (e) => { - if (this.select.contains(e.target as HTMLElement)) return; - - this.select.classList.remove('active'); - }); - } - - - protected handleValueChange(oldValue:string, newValue:string) { - this.select.querySelectorAll('li.selected').forEach(el => { - el.classList.remove('selected') - }); - - const selected = this.select.querySelector('li[data-value="' + newValue + '"]'); - const label = this.select.querySelector('.tsd-select-label'); - - if (selected && label) { - selected.classList.add('selected'); - label.textContent = selected.textContent; - } - - document.documentElement.classList.remove('toggle-' + oldValue); - document.documentElement.classList.add('toggle-' + newValue); - } - - protected fromLocalStorage(value: string): string { - return value; - } - - protected toLocalStorage(value: string): string { - return value; - } - } - - - class Filter extends Component - { - private optionVisibility:FilterItemSelect; - - private optionInherited:FilterItemCheckbox; - - private optionOnlyExported:FilterItemCheckbox; - - private optionExternals:FilterItemCheckbox; - - - constructor(options:IComponentOptions) { - super(options); - - this.optionVisibility = new FilterItemSelect('visibility', 'private'); - this.optionInherited = new FilterItemCheckbox('inherited', true); - this.optionExternals = new FilterItemCheckbox('externals', true); - this.optionOnlyExported = new FilterItemCheckbox('only-exported', false); - } - - - static isSupported():boolean { - try { - return typeof window.localStorage != 'undefined'; - } catch (e) { - return false; - } - } - } - - - if (Filter.isSupported()) { - registerComponent(Filter, '#tsd-filter'); - } else { - document.documentElement.classList.add('no-filter'); - } -} diff --git a/tools/doc/typedoc-theme/assets/js/src/typedoc/components/MenuHighlight.ts b/tools/doc/typedoc-theme/assets/js/src/typedoc/components/MenuHighlight.ts deleted file mode 100644 index 84dede980b..0000000000 --- a/tools/doc/typedoc-theme/assets/js/src/typedoc/components/MenuHighlight.ts +++ /dev/null @@ -1,147 +0,0 @@ -/// -/// -/// - -namespace typedoc -{ - /** - * Stored element and position data of a single anchor. - */ - interface IAnchorInfo - { - /** - * The anchor element. - */ - anchor: HTMLElement; - - /** - * The link element in the navigation representing this anchor. - */ - link: HTMLElement; - - /** - * The vertical offset of the anchor on the page. - */ - position: number; - } - - - /** - * Manages the sticky state of the navigation and moves the highlight - * to the current navigation item. - */ - export class MenuHighlight extends Component - { - /** - * List of all discovered anchors. - */ - private anchors:IAnchorInfo[] = []; - - /** - * Index of the currently highlighted anchor. - */ - private index:number = -1; - - - /** - * Create a new MenuHighlight instance. - * - * @param options Backbone view constructor options. - */ - constructor(options:IComponentOptions) { - super(options); - - viewport.addEventListener('resize', () => this.onResize()); - viewport.addEventListener<{ scrollTop:number }>('scroll', e => this.onScroll(e)); - - this.createAnchors(); - } - - - /** - * Find all anchors on the current page. - */ - private createAnchors() { - var base = window.location.href; - if (base.indexOf('#') != -1) { - base = base.substr(0, base.indexOf('#')); - } - - this.el.querySelectorAll('a').forEach(el => { - var href = el.href; - if (href.indexOf('#') == -1) return; - if (href.substr(0, base.length) != base) return; - - var hash = href.substr(href.indexOf('#') + 1); - var anchor = document.querySelector('a.tsd-anchor[name=' + hash + ']'); - var link = el.parentNode; - if (!anchor || !link) return; - - this.anchors.push({ - link: link as HTMLElement, - anchor: anchor, - position: 0 - }); - }); - - this.onResize(); - } - - - /** - * Triggered after the viewport was resized. - */ - private onResize() { - var anchor: IAnchorInfo; - for (var index = 0, count = this.anchors.length; index < count; index++) { - anchor = this.anchors[index]; - const rect = anchor.anchor.getBoundingClientRect(); - anchor.position = rect.top + document.body.scrollTop; - } - - this.anchors.sort((a, b) => { - return a.position - b.position; - }); - - const event = new CustomEvent('scroll', { - detail: { - scrollTop: viewport.scrollTop, - } - }); - this.onScroll(event); - } - - - /** - * Triggered after the viewport was scrolled. - * - * @param event The custom event with the current vertical scroll position. - */ - private onScroll(event: CustomEvent<{ scrollTop:number }>) { - const scrollTop = event.detail.scrollTop + 5; - const anchors = this.anchors; - const count = anchors.length - 1; - let index = this.index; - - while (index > -1 && anchors[index].position > scrollTop) { - index -= 1; - } - - while (index < count && anchors[index + 1].position < scrollTop) { - index += 1; - } - - if (this.index != index) { - if (this.index > -1) this.anchors[this.index].link.classList.remove('focus'); - this.index = index; - if (this.index > -1) this.anchors[this.index].link.classList.add('focus'); - } - } - } - - - /** - * Register this component. - */ - registerComponent(MenuHighlight, '.menu-highlight'); -} diff --git a/tools/doc/typedoc-theme/assets/js/src/typedoc/components/Search.ts b/tools/doc/typedoc-theme/assets/js/src/typedoc/components/Search.ts deleted file mode 100644 index 0c7c64ef37..0000000000 --- a/tools/doc/typedoc-theme/assets/js/src/typedoc/components/Search.ts +++ /dev/null @@ -1,336 +0,0 @@ -/// -/// - - -namespace typedoc.search -{ - interface IDocument { - id:number; - kind:number; - name:string; - url:string; - classes:string; - parent?:string; - } - - interface IData { - kinds:{[kind:number]:string}; - rows:IDocument[]; - index:object; - } - - /** - * Loading state definitions. - */ - enum SearchLoadingState - { - Idle, Loading, Ready, Failure - } - - /** - * Provides an indexed search on generated documentation - */ - export class Search extends Component { - /** - * The input field of the search widget. - */ - private field: HTMLInputElement; - - /** - * The result list wrapper. - */ - private results: HTMLElement; - - /** - * The base url that must be prepended to the indexed urls. - */ - private base: string; - - /** - * The current query string. - */ - private query: string = ''; - - /** - * The state the search is currently in. - */ - private loadingState: SearchLoadingState = SearchLoadingState.Idle; - - /** - * Is the input field focused? - */ - private hasFocus: boolean = false; - - /** - * Should the next key press be prevents? - */ - private preventPress: boolean = false; - - /** - * The search data - */ - private data: IData | null = null; - - /** - * The lunr index used to search the documentation. - */ - private index: lunr.Index | null = null; - - /** - * Has a search result been clicked? - * Used to stop the results hiding before a user can fully click on a result. - */ - private resultClicked: boolean = false; - - constructor(options: IComponentOptions) { - super(options); - - const field = document.querySelector('#tsd-search-field'); - const results = document.querySelector('.results'); - - if (!field || !results) { - throw new Error('The input field or the result list wrapper are not found'); - } - - this.field = field; - this.results = results; - - this.base = this.el.dataset.base + '/'; - - this.bindEvents(); - } - - /** - * Lazy load the search index and parse it. - */ - private loadIndex() { - if (this.loadingState != SearchLoadingState.Idle || this.data) return; - - setTimeout(() => { - if (this.loadingState == SearchLoadingState.Idle) { - this.setLoadingState(SearchLoadingState.Loading); - } - }, 500); - - const url = this.el.dataset.index; - if (!url) { - this.setLoadingState(SearchLoadingState.Failure); - return; - } - - fetch(url) - .then(response => { - if (!response.ok) { - throw new Error('The search index is missing'); - } - - return response.json(); - }) - .then((source: IData) => { - this.data = source; - this.index = lunr.Index.load(source.index); - - this.setLoadingState(SearchLoadingState.Ready); - }) - .catch((error) => { - console.error(error); - this.setLoadingState(SearchLoadingState.Failure); - }); - } - - - /** - * Update the visible state of the search control. - */ - private updateResults() { - // Don't clear results, if loading state is not ready, - // because loading or error message can be removed. - if (this.loadingState != SearchLoadingState.Ready) return; - - this.results.textContent = ''; - if (!this.query || !this.index || !this.data) return; - - // Perform a wildcard search - var res = this.index.search(`*${this.query}*`); - - // If still no results, try a fuzzy match search - if (res.length === 0) { - res = this.index.search(`*${this.query}~1*`); - } - - for (var i = 0, c = Math.min(10, res.length); i < c; i++) { - var row = this.data.rows[Number(res[i].ref)]; - - // Bold the matched part of the query in the search results - var name = row.name.replace(new RegExp(this.query, 'i'), (match: string) => `${match}`); - var parent = row.parent || ''; - parent = parent.replace(new RegExp(this.query, 'i'), (match: string) => `${match}`); - - if (parent) name = '' + parent + '.' + name; - const item = document.createElement('li'); - item.classList.value = row.classes; - item.innerHTML = ` - ${name} - `; - this.results.appendChild(item); - } - } - - - /** - * Set the loading state and update the visual state accordingly. - */ - private setLoadingState(value: SearchLoadingState) { - if (this.loadingState == value) return; - - this.el.classList.remove(SearchLoadingState[this.loadingState].toLowerCase()); - this.loadingState = value; - this.el.classList.add(SearchLoadingState[this.loadingState].toLowerCase()); - - this.updateResults(); - } - - - /** - * Set the focus state and update the visual state accordingly. - */ - private setHasFocus(value: boolean) { - if (this.hasFocus == value) return; - this.hasFocus = value; - this.el.classList.toggle('has-focus'); - - if (!value) { - this.field.value = this.query; - } else { - this.setQuery(''); - this.field.value = ''; - } - } - - - /** - * Set the query string and update the results. - */ - private setQuery(value: string) { - this.query = value.trim(); - this.updateResults(); - } - - - /** - * Move the highlight within the result set. - */ - private setCurrentResult(dir: number) { - var current = this.results.querySelector('.current'); - if (!current) { - current = this.results.querySelector(dir == 1 ? 'li:first-child' : 'li:last-child'); - if (current) { - current.classList.add('current') - } - } else { - var rel = dir == 1 ? current.nextElementSibling : current.previousElementSibling; - if (rel) { - current.classList.remove('current'); - rel.classList.add('current'); - } - } - } - - - /** - * Navigate to the highlighted result. - */ - private gotoCurrentResult() { - var current = this.results.querySelector('.current'); - - if (!current) { - current = this.results.querySelector('li:first-child'); - } - - if (current) { - const link = current.querySelector('a'); - if (link) { - window.location.href = link.href; - } - this.field.blur(); - } - } - - /** - * Bind events on result list wrapper, input field and document body. - */ - private bindEvents() { - /** - * Intercept mousedown and mouseup events so we can correctly - * handle clicking on search results. - */ - this.results.addEventListener('mousedown', () => { - this.resultClicked = true; - }); - this.results.addEventListener('mouseup', () => { - this.resultClicked = false; - this.setHasFocus(false); - }); - - - /** - * Bind all required events on the input field. - */ - this.field.addEventListener('focusin', () => { - this.setHasFocus(true); - this.loadIndex(); - }); - this.field.addEventListener('focusout', () => { - // If the user just clicked on a search result, then - // don't lose the focus straight away, as this prevents - // them from clicking the result and following the link - if (this.resultClicked) { - this.resultClicked = false; - return; - } - - setTimeout(() => this.setHasFocus(false), 100); - }); - this.field.addEventListener('input', () => { - this.setQuery(this.field.value); - }); - this.field.addEventListener('keydown', (e) => { - if (e.keyCode == 13 || e.keyCode == 27 || e.keyCode == 38 || e.keyCode == 40) { - this.preventPress = true; - e.preventDefault(); - - if (e.keyCode == 13) { - this.gotoCurrentResult(); - } else if (e.keyCode == 27) { - this.field.blur(); - } else if (e.keyCode == 38) { - this.setCurrentResult(-1); - } else if (e.keyCode == 40) { - this.setCurrentResult(1); - } - } else { - this.preventPress = false; - } - }); - this.field.addEventListener('keypress', (e) => { - if (this.preventPress) e.preventDefault(); - }); - - - /** - * Start searching by pressing a key on the body. - */ - document.body.addEventListener('keydown', e => { - if (e.altKey || e.ctrlKey || e.metaKey) return; - if (!this.hasFocus && e.keyCode > 47 && e.keyCode < 112) { - this.field.focus(); - } - }); - } - } - - /** - * Register this component. - */ - registerComponent(Search, '#tsd-search'); -} diff --git a/tools/doc/typedoc-theme/assets/js/src/typedoc/components/Signature.ts b/tools/doc/typedoc-theme/assets/js/src/typedoc/components/Signature.ts deleted file mode 100644 index d9dae1bfe6..0000000000 --- a/tools/doc/typedoc-theme/assets/js/src/typedoc/components/Signature.ts +++ /dev/null @@ -1,171 +0,0 @@ -/// -/// -/// - -namespace typedoc -{ - /** - * Holds a signature and its description. - */ - class SignatureGroup - { - /** - * The target signature. - */ - signature: Element; - - /** - * The description for the signature. - */ - description: Element; - - - /** - * Create a new SignatureGroup instance. - * - * @param signature The target signature. - * @param description The description for the signature. - */ - constructor(signature: Element, description: Element) { - this.signature = signature; - this.description = description; - } - - - /** - * Add the given class to all elements of the group. - * - * @param className The class name to add. - */ - addClass(className:string):SignatureGroup { - this.signature.classList.add(className); - this.description.classList.add(className); - return this; - } - - - /** - * Remove the given class from all elements of the group. - * - * @param className The class name to remove. - */ - removeClass(className:string):SignatureGroup { - this.signature.classList.remove(className); - this.description.classList.remove(className); - return this; - } - } - - - /** - * Controls the tab like behaviour of methods and functions with multiple signatures. - */ - class Signature extends Component - { - /** - * List of found signature groups. - */ - private groups: SignatureGroup[] = []; - - /** - * The container holding all the descriptions. - */ - private container?: HTMLElement; - - /** - * The index of the currently displayed signature. - */ - private index:number = -1; - - - /** - * Create a new Signature instance. - * - * @param options Backbone view constructor options. - */ - constructor(options:IComponentOptions) { - super(options); - - this.createGroups(); - - if (this.container) { - this.el.classList.add('active'); - Array.from(this.el.children).forEach(signature => { - signature.addEventListener('touchstart', (event) => this.onClick(event)); - signature.addEventListener('click', (event) => this.onClick(event)); - }); - this.container.classList.add('active'); - this.setIndex(0); - } - } - - - /** - * Set the index of the active signature. - * - * @param index The index of the signature to activate. - */ - private setIndex(index:number) { - if (index < 0) index = 0; - if (index > this.groups.length - 1) index = this.groups.length - 1; - if (this.index == index) return; - - const to = this.groups[index]; - if (this.index > -1) { - const from = this.groups[this.index]; - - from.removeClass('current').addClass('fade-out'); - to.addClass('current'); - to.addClass('fade-in'); - viewport.triggerResize(); - - setTimeout(() => { - from.removeClass('fade-out'); - to.removeClass('fade-in'); - }, 300); - } else { - to.addClass('current'); - viewport.triggerResize(); - } - - this.index = index; - } - - - /** - * Find all signature/description groups. - */ - private createGroups() { - const signatures = this.el.children; - if (signatures.length < 2) return; - - this.container = this.el.nextElementSibling as HTMLElement; - const descriptions = this.container.children; - - this.groups = []; - for (let index = 0; index < signatures.length; index++) { - this.groups.push(new SignatureGroup(signatures[index], descriptions[index])); - } - } - - - /** - * Triggered when the user clicks onto a signature header. - * - * @param e The related event object. - */ - private onClick(e: Event) { - this.groups.forEach((group, index) => { - if (group.signature === e.currentTarget) { - this.setIndex(index); - } - }); - } - } - - - /** - * Register this component. - */ - registerComponent(Signature, '.tsd-signatures'); -} diff --git a/tools/doc/typedoc-theme/assets/js/src/typedoc/components/Toggle.ts b/tools/doc/typedoc-theme/assets/js/src/typedoc/components/Toggle.ts deleted file mode 100644 index dd72266200..0000000000 --- a/tools/doc/typedoc-theme/assets/js/src/typedoc/components/Toggle.ts +++ /dev/null @@ -1,77 +0,0 @@ -/// -/// -/// - -namespace typedoc -{ - /** - * Enabled simple toggle buttons. - */ - class Toggle extends Component { - active?: boolean; - - className: string; - - constructor(options: IComponentOptions) { - super(options); - - this.className = this.el.dataset.toggle || ''; - this.el.addEventListener(pointerUp, (e) => this.onPointerUp(e)); - this.el.addEventListener('click', (e) => e.preventDefault()); - document.addEventListener(pointerDown, (e) => this.onDocumentPointerDown(e)); - document.addEventListener(pointerUp, (e) => this.onDocumentPointerUp(e)); - } - - setActive(value: boolean) { - if (this.active == value) return; - this.active = value; - - document.documentElement.classList.toggle('has-' + this.className, value); - this.el.classList.toggle('active', value); - - const transition = (this.active ? 'to-has-' : 'from-has-') + this.className; - document.documentElement.classList.add(transition); - setTimeout(() => document.documentElement.classList.remove(transition), 500); - } - - onPointerUp(event: Event) { - if (hasPointerMoved) return; - this.setActive(true); - event.preventDefault(); - } - - onDocumentPointerDown(e: Event) { - if (this.active) { - if ((e.target as HTMLElement).closest('.col-menu, .tsd-filter-group')) { - return; - } - - this.setActive(false); - } - } - - onDocumentPointerUp(e: Event) { - if (hasPointerMoved) return; - if (this.active) { - if ((e.target as HTMLElement).closest('.col-menu')) { - const link = (e.target as HTMLElement).closest('a'); - if (link) { - let href = window.location.href; - if (href.indexOf('#') != -1) { - href = href.substr(0, href.indexOf('#')); - } - if (link.href.substr(0, href.length) == href) { - setTimeout(() => this.setActive(false), 250); - } - } - } - } - } - } - - - /** - * Register this component. - */ - registerComponent(Toggle, 'a[data-toggle]'); -} diff --git a/tools/doc/typedoc-theme/assets/js/src/typedoc/services/Viewport.ts b/tools/doc/typedoc-theme/assets/js/src/typedoc/services/Viewport.ts deleted file mode 100644 index f7390e4966..0000000000 --- a/tools/doc/typedoc-theme/assets/js/src/typedoc/services/Viewport.ts +++ /dev/null @@ -1,135 +0,0 @@ -/// -/// -/// - -namespace typedoc -{ - /** - * A global service that monitors the window size and scroll position. - */ - export class Viewport extends EventTarget - { - /** - * The current scroll position. - */ - scrollTop:number = 0; - - /** - * The previous scrollTop. - */ - lastY:number = 0; - - /** - * The width of the window. - */ - width:number = 0; - - /** - * The height of the window. - */ - height:number = 0; - - /** - * The toolbar (contains the search input). - */ - toolbar:HTMLDivElement; - - /** - * Boolean indicating whether the toolbar is shown. - */ - showToolbar:boolean = true; - - /** - * The sticky side nav that contains members of the current page. - */ - secondaryNav:HTMLElement; - - - /** - * Create new Viewport instance. - */ - constructor() { - super(); - - this.toolbar = document.querySelector('.tsd-page-toolbar'); - this.secondaryNav = document.querySelector('.tsd-navigation.secondary'); - - window.addEventListener('scroll', throttle(() => this.onScroll(), 10)); - window.addEventListener('resize', throttle(() => this.onResize(), 10)); - - this.onResize(); - this.onScroll(); - } - - - /** - * Trigger a resize event. - */ - triggerResize() { - const event = new CustomEvent('resize', { - detail: { - width: this.width, - height: this.height, - } - }); - - this.dispatchEvent(event); - } - - - /** - * Triggered when the size of the window has changed. - */ - onResize() { - this.width = window.innerWidth || 0; - this.height = window.innerHeight || 0; - - const event = new CustomEvent('resize', { - detail: { - width: this.width, - height: this.height, - } - }); - - this.dispatchEvent(event); - } - - - /** - * Triggered when the user scrolled the viewport. - */ - onScroll() { - this.scrollTop = window.scrollY || 0; - - const event = new CustomEvent('scroll', { - detail: { - scrollTop: this.scrollTop, - } - }); - - this.dispatchEvent(event); - this.hideShowToolbar(); - } - - - /** - * Handle hiding/showing of the toolbar. - */ - hideShowToolbar() { - const isShown = this.showToolbar; - this.showToolbar = this.lastY >= this.scrollTop || this.scrollTop === 0; - if (isShown !== this.showToolbar) { - this.toolbar.classList.toggle('tsd-page-toolbar--hide'); - this.secondaryNav.classList.toggle('tsd-navigation--toolbar-hide'); - } - this.lastY = this.scrollTop; - } - } - - - /** - * Register service. - */ - export var viewport:Viewport; - registerService(Viewport, 'viewport'); -} diff --git a/tools/doc/typedoc-theme/assets/js/src/typedoc/utils/pointer.ts b/tools/doc/typedoc-theme/assets/js/src/typedoc/utils/pointer.ts deleted file mode 100644 index ef4828f718..0000000000 --- a/tools/doc/typedoc-theme/assets/js/src/typedoc/utils/pointer.ts +++ /dev/null @@ -1,96 +0,0 @@ -/// - -namespace typedoc -{ - /** - * Simple point interface. - */ - export interface Point { - x:number; - y:number; - } - - /** - * Event name of the pointer down event. - */ - export var pointerDown:string = 'mousedown'; - - /** - * Event name of the pointer move event. - */ - export var pointerMove:string = 'mousemove'; - - /** - * Event name of the pointer up event. - */ - export var pointerUp:string = 'mouseup'; - - /** - * Position the pointer was pressed at. - */ - export var pointerDownPosition:Point = {x:0, y:0}; - - /** - * Should the next click on the document be supressed? - */ - export var preventNextClick:boolean = false; - - /** - * Is the pointer down? - */ - export var isPointerDown:boolean = false; - - /** - * Is the pointer a touch point? - */ - export var isPointerTouch:boolean = false; - - /** - * Did the pointer move since the last down event? - */ - export var hasPointerMoved:boolean = false; - - /** - * Is the user agent a mobile agent? - */ - export var isMobile:boolean = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); - document.documentElement.classList.add(isMobile ? 'is-mobile' : 'not-mobile'); - - - if (isMobile && 'ontouchstart' in document.documentElement) { - isPointerTouch = true; - pointerDown = 'touchstart'; - pointerMove = 'touchmove'; - pointerUp = 'touchend'; - } - - document.addEventListener(pointerDown, (e) => { - isPointerDown = true; - hasPointerMoved = false; - var t = (pointerDown == 'touchstart' ? (e as TouchEvent).targetTouches[0] : (e as MouseEvent)); - pointerDownPosition.y = t.pageY || 0; - pointerDownPosition.x = t.pageX || 0; - }); - - document.addEventListener(pointerMove, (e) => { - if (!isPointerDown) return; - if (!hasPointerMoved) { - var t = (pointerDown == 'touchstart' ? (e as TouchEvent).targetTouches[0] : (e as MouseEvent)); - var x = pointerDownPosition.x - (t.pageX || 0); - var y = pointerDownPosition.y - (t.pageY || 0); - hasPointerMoved = (Math.sqrt(x*x + y*y) > 10); - } - }); - - document.addEventListener(pointerUp, () => { - isPointerDown = false; - }); - - document.addEventListener('click', (e) => { - if (preventNextClick) { - e.preventDefault(); - e.stopImmediatePropagation(); - preventNextClick = false; - } - }); -} diff --git a/tools/doc/typedoc-theme/assets/js/src/typedoc/utils/trottle.ts b/tools/doc/typedoc-theme/assets/js/src/typedoc/utils/trottle.ts deleted file mode 100644 index 5bc6f8c8df..0000000000 --- a/tools/doc/typedoc-theme/assets/js/src/typedoc/utils/trottle.ts +++ /dev/null @@ -1,13 +0,0 @@ -namespace typedoc -{ - export const throttle = (fn: (...args: A) => void, wait = 100) => { - let time = Date.now(); - return (...args: A) => { - if ((time + wait - Date.now()) < 0) { - fn(...args); - time = Date.now(); - } - } - } - -} \ No newline at end of file diff --git a/tools/doc/typedoc-theme/assets/js/src/~bootstrap.ts b/tools/doc/typedoc-theme/assets/js/src/~bootstrap.ts deleted file mode 100644 index c03704da6a..0000000000 --- a/tools/doc/typedoc-theme/assets/js/src/~bootstrap.ts +++ /dev/null @@ -1,12 +0,0 @@ -/// -/// -/// -/// -/// -/// -/// - -namespace typedoc -{ - export var app: Application = new Application(); -} \ No newline at end of file diff --git a/tools/doc/typedoc-theme/layouts/default.hbs b/tools/doc/typedoc-theme/layouts/default.hbs index 7c3d71f16c..4ed1cac1a8 100644 --- a/tools/doc/typedoc-theme/layouts/default.hbs +++ b/tools/doc/typedoc-theme/layouts/default.hbs @@ -1,47 +1,52 @@ + - {{#ifCond model.name '==' project.name}}{{project.name}}{{else}}{{model.name}} | {{project.name}}{{/ifCond}} + {{#ifCond model.name '==' project.name}}{{project.name}}{{else}}{{model.name}} | {{project.name}}{{/ifCond}} + + + {{> analytics}} + -{{> header}} + {{> header}} -
-
-
- {{{contents}}} -
-
- - -{{> footer}} -
- + {{> footer}} +
+ - + + \ No newline at end of file diff --git a/tools/doc/typedoc-theme/partials/analytics.hbs b/tools/doc/typedoc-theme/partials/analytics.hbs index adf8a8f20e..6732c9cdfa 100644 --- a/tools/doc/typedoc-theme/partials/analytics.hbs +++ b/tools/doc/typedoc-theme/partials/analytics.hbs @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/tools/doc/typedoc-theme/partials/breadcrumb.hbs b/tools/doc/typedoc-theme/partials/breadcrumb.hbs index 319741831c..ad63bac7a1 100644 --- a/tools/doc/typedoc-theme/partials/breadcrumb.hbs +++ b/tools/doc/typedoc-theme/partials/breadcrumb.hbs @@ -10,7 +10,7 @@ {{else}} {{#if url}}
  • - Globals + {{ name }}
  • {{/if}} -{{/if}} \ No newline at end of file +{{/if}} diff --git a/tools/doc/typedoc-theme/partials/header.hbs b/tools/doc/typedoc-theme/partials/header.hbs index a15f828b1b..2e168a7283 100644 --- a/tools/doc/typedoc-theme/partials/header.hbs +++ b/tools/doc/typedoc-theme/partials/header.hbs @@ -36,11 +36,6 @@ {{/unless}} - - {{#unless settings.excludeNotExported}} - - - {{/unless}} @@ -51,9 +46,11 @@
    -
      - {{#with model}}{{> breadcrumb}}{{/with}} -
    + {{#if model.parent}} {{! Don't show breadcrumbs on main project page, it is the root page. !}} +
      + {{#with model}}{{> breadcrumb}}{{/with}} +
    + {{/if}}

    {{#compact}} {{model.kindString}}  {{model.name}} diff --git a/tools/doc/typedoc-theme/partials/index.hbs b/tools/doc/typedoc-theme/partials/index.hbs index 05d199d652..b667317cff 100644 --- a/tools/doc/typedoc-theme/partials/index.hbs +++ b/tools/doc/typedoc-theme/partials/index.hbs @@ -1,30 +1,50 @@ -{{#if groups}} -
    -

    Index

    -
    -
    - {{#each groups}} -
    - {{#if categories}} - {{#each categories}} -

    {{#if title}}{{title}} {{/if}}{{../title}}

    - - {{/each}} - {{else}} +{{#if categories}} +
    +

    Index

    +
    +
    + {{#each categories}} +

    {{title}}

    - {{/if}} -
    - {{/each}} -
    +
    + {{/each}} +
    +
    +
    +{{else}} + {{#if groups}} +
    +

    Index

    +
    +
    + {{#each groups}} +
    + {{#if categories}} + {{#each categories}} +

    {{#if title}}{{title}} {{/if}}{{../title}}

    + + {{/each}} + {{else}} +

    {{title}}

    + + {{/if}} +
    + {{/each}} +
    +
    - -{{/if}} \ No newline at end of file + {{/if}} +{{/if}} diff --git a/tools/doc/typedoc-theme/partials/type.hbs b/tools/doc/typedoc-theme/partials/type.hbs index f226d52e6f..b810933493 100644 --- a/tools/doc/typedoc-theme/partials/type.hbs +++ b/tools/doc/typedoc-theme/partials/type.hbs @@ -73,9 +73,54 @@ if an inner type may result in invalid output without them. For example: {{name}} {{/inline}} +{{#*inline 'literal'}} + {{stringify value}} +{{/inline}} + +{{#*inline 'mapped'}} + { + {{#ifCond readonlyModifier '===' '+'}} + readonly + {{else}} + {{#ifCond readonlyModifier '===' '-'}} + -readonly + {{/ifCond}} + {{/ifCond}} + + [ + {{parameter}} + in + + {{#with parameterType}} + {{>type}} + {{/with}} + + {{#with nameType}} + as + {{>type}} + {{/with}} + + ] + {{#ifCond readonlyModifier '===' '+'}} + ?: + {{else}} + {{#ifCond readonlyModifier '===' '-'}} + -?: + {{else}} + : + {{/ifCond}} + {{/ifCond}} + + {{#with templateType}} + {{>type}} + {{/with}} + + } +{{/inline}} + {{#*inline 'predicate'}} {{#if asserts}} - asserts + asserts {{/if}} {{name}} {{#if targetType}} @@ -94,13 +139,13 @@ if an inner type may result in invalid output without them. For example: {{/inline}} {{#*inline 'reference'}} - {{#if reflection}} - - {{reflection.name}} + {{#with getReflection }} + + {{name}} {{else}} {{name}} - {{/if}} + {{/with}} {{#if typeArguments}} < {{#each typeArguments}} @@ -159,10 +204,6 @@ if an inner type may result in invalid output without them. For example: {{/if}} {{/inline}} -{{#*inline 'stringLiteral'}} - "{{value}}" -{{/inline}} - {{#*inline 'tuple'}} [ {{#each elements}} @@ -174,6 +215,24 @@ if an inner type may result in invalid output without them. For example: ] {{/inline}} +{{#*inline 'template-literal'}} + ` + {{#if head}} + {{head}} + {{/if}} + {{#each tail}} + ${ + {{#with this.[0]}} + {{>type}} + {{/with}} + } + {{#if this.[1]}} + {{this.[1]}} + {{/if}} + {{/each}} + ` +{{/inline}} + {{#*inline 'typeOperator'}} {{operator}} {{#with target}} @@ -204,6 +263,18 @@ if an inner type may result in invalid output without them. For example: {{name}} {{/inline}} +{{#*inline 'named-tuple-member'}} + {{name}} + {{#if isOptional}} + ?: + {{else}} + : + {{/if}} + {{#with element}} + {{> type}} + {{/with}} +{{/inline}} + {{#if this}} {{> (lookup . 'type') }} {{else}} diff --git a/tools/doc/typedoc-theme/partials/typeParameters.hbs b/tools/doc/typedoc-theme/partials/typeParameters.hbs index a0adf80739..81a0e84847 100644 --- a/tools/doc/typedoc-theme/partials/typeParameters.hbs +++ b/tools/doc/typedoc-theme/partials/typeParameters.hbs @@ -7,6 +7,9 @@ {{#with type}}{{> type}}{{/with}} {{/if}} + {{#if default}} +  = {{#with default}}{{> type}}{{/with}} + {{/if}} {{/compact}}

    {{> comment}} diff --git a/yarn.lock b/yarn.lock index eb45aca0d7..5653762ea6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3673,6 +3673,11 @@ colorette@^1.2.1: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== +colors@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + colors@~1.2.1: version "1.2.5" resolved "https://registry.yarnpkg.com/colors/-/colors-1.2.5.tgz#89c7ad9a374bc030df8013241f68136ed8835afc" @@ -5595,11 +5600,6 @@ hex-color-regex@^1.1.0: resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== -highlight.js@^10.2.0: - version "10.4.1" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.4.1.tgz#d48fbcf4a9971c4361b3f95f302747afe19dbad0" - integrity sha512-yR5lWvNz7c85OhVAEAeFhVCc/GV4C30Fjzc/rCP0aCWzc1UUOPUk55dK/qdwTZHBvMZo+eZ2jpk62ndX/xMFlg== - hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -6518,7 +6518,7 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -json5@^2.1.2: +json5@^2.1.0, json5@^2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== @@ -6951,10 +6951,10 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -marked@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/marked/-/marked-1.1.1.tgz#e5d61b69842210d5df57b05856e0c91572703e6a" - integrity sha512-mJzT8D2yPxoPh7h0UXkB+dBj4FykPJ2OIfxAWeIHrvoHDkFxukV/29QxoFQoPM6RLEwhIFdJpmKBlqVM3s2ZIw== +marked@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/marked/-/marked-1.2.7.tgz#6e14b595581d2319cdcf033a24caaf41455a01fb" + integrity sha512-No11hFYcXr/zkBvL6qFmAp1z6BKY3zqLMHny/JN/ey+al7qwCM2+CMBL9BOgqMxZU36fz4cCWfn2poWIf7QRXA== md5.js@^1.3.4: version "1.3.5" @@ -7779,6 +7779,13 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" +onigasm@^2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/onigasm/-/onigasm-2.2.5.tgz#cc4d2a79a0fa0b64caec1f4c7ea367585a676892" + integrity sha512-F+th54mPc0l1lp1ZcFMyL/jTs2Tlq4SqIHKIXGZOR/VkHkF9A7Fr5rRr5+ZG/lWeRsyrClLYRq7s/yFQ/XhWCA== + dependencies: + lru-cache "^5.1.1" + open@^7.0.4: version "7.3.0" resolved "https://registry.yarnpkg.com/open/-/open-7.3.0.tgz#45461fdee46444f3645b6e14eb3ca94b82e1be69" @@ -9476,6 +9483,31 @@ shelljs@^0.8.4: interpret "^1.0.0" rechoir "^0.6.2" +shiki-languages@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/shiki-languages/-/shiki-languages-0.2.7.tgz#7230b675b96d37a36ac1bf995525375ce69f3924" + integrity sha512-REmakh7pn2jCn9GDMRSK36oDgqhh+rSvJPo77sdWTOmk44C5b0XlYPwJZcFOMJWUZJE0c7FCbKclw4FLwUKLRw== + dependencies: + vscode-textmate "^5.2.0" + +shiki-themes@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/shiki-themes/-/shiki-themes-0.2.7.tgz#6e04451d832152e0fc969876a7bd926b3963c1f2" + integrity sha512-ZMmboDYw5+SEpugM8KGUq3tkZ0vXg+k60XX6NngDK7gc1Sv6YLUlanpvG3evm57uKJvfXsky/S5MzSOTtYKLjA== + dependencies: + json5 "^2.1.0" + vscode-textmate "^5.2.0" + +shiki@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.2.7.tgz#d2547548ed8742673730e1e4bbe792a77c445540" + integrity sha512-bwVc7cdtYYHEO9O+XJ8aNOskKRfaQd5Y4ovLRfbQkmiLSUaR+bdlssbZUUhbQ0JAFMYcTcJ5tjG5KtnufttDHQ== + dependencies: + onigasm "^2.2.5" + shiki-languages "^0.2.7" + shiki-themes "^0.2.7" + vscode-textmate "^5.2.0" + signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -10418,27 +10450,27 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typedoc-default-themes@^0.11.4: - version "0.11.4" - resolved "https://registry.yarnpkg.com/typedoc-default-themes/-/typedoc-default-themes-0.11.4.tgz#1bc55b7c8d1132844616ff6f570e1e2cd0eb7343" - integrity sha512-Y4Lf+qIb9NTydrexlazAM46SSLrmrQRqWiD52593g53SsmUFioAsMWt8m834J6qsp+7wHRjxCXSZeiiW5cMUdw== +typedoc-default-themes@0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/typedoc-default-themes/-/typedoc-default-themes-0.12.0.tgz#42451948e55a148c1350eb2aa68829be5c2b06b3" + integrity sha512-0hHBxwmfxE0rkIslOiO39fJyYwaScQEhUIxcpqx3uS1BL3zhFW5oQfUaPx2cv2XLL/GXhYFxhdFLoVmNptbxEQ== -typedoc@^0.19.2: - version "0.19.2" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.19.2.tgz#842a63a581f4920f76b0346bb80eb2a49afc2c28" - integrity sha512-oDEg1BLEzi1qvgdQXc658EYgJ5qJLVSeZ0hQ57Eq4JXy6Vj2VX4RVo18qYxRWz75ifAaYuYNBUCnbhjd37TfOg== +typedoc@^0.20.4: + version "0.20.4" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.20.4.tgz#e91dd3a802a845a7119d9162c8fefdd72e7a9b2a" + integrity sha512-C5ogtMwNKTAg7GctTPzd4ndSVz24WhBYfxf4UMYnnQImgIARllmeHE/+NuYLNmXVJjOnnWpRcErga9sN4ynZdg== dependencies: + colors "^1.4.0" fs-extra "^9.0.1" handlebars "^4.7.6" - highlight.js "^10.2.0" lodash "^4.17.20" lunr "^2.3.9" - marked "^1.1.1" + marked "^1.2.5" minimatch "^3.0.0" progress "^2.0.3" - semver "^7.3.2" shelljs "^0.8.4" - typedoc-default-themes "^0.11.4" + shiki "^0.2.7" + typedoc-default-themes "0.12.0" typescript@^4.1.3, typescript@~4.0.5: version "4.1.3" @@ -10687,6 +10719,11 @@ vm2@^3.9.2: resolved "https://registry.yarnpkg.com/vm2/-/vm2-3.9.2.tgz#a4085d2d88a808a1b3c06d5478c2db3222a9cc30" integrity sha512-nzyFmHdy2FMg7mYraRytc2jr4QBaUY3TEGe3q3bK8EgS9WC98wxn2jrPxS/ruWm+JGzrEIIeufKweQzVoQEd+Q== +vscode-textmate@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.2.0.tgz#01f01760a391e8222fe4f33fbccbd1ad71aed74e" + integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ== + w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" From e68a4c410743311cdc51e2a80c0d530f1674949d Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 31 Dec 2020 14:31:25 +0000 Subject: [PATCH 31/51] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index bb1ef6e5fd..a80174502f 100644 --- a/README.md +++ b/README.md @@ -423,6 +423,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
    Pedro Henriques dos Santos Teixeira

    💵
    Jamie Owen

    🐛
    Robert Kesteson

    🐛 💻 +
    Chancy Kennedy

    💵 From 919c04e084758388e9b8868e24251bfc70eb179b Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 31 Dec 2020 14:31:26 +0000 Subject: [PATCH 32/51] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index b66aa0f055..f77ce1d8cd 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -259,6 +259,15 @@ "bug", "code" ] + }, + { + "login": "chancyk", + "name": "Chancy Kennedy", + "avatar_url": "https://avatars1.githubusercontent.com/u/1731217?v=4", + "profile": "https://github.com/chancyk", + "contributions": [ + "financial" + ] } ], "contributorsPerLine": 7, From 719f8b5a9fa5ebc2f5a0982ef11a4a2e7a6eb9d8 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 31 Dec 2020 14:33:51 +0000 Subject: [PATCH 33/51] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a80174502f..d478edd0a4 100644 --- a/README.md +++ b/README.md @@ -424,6 +424,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
    Jamie Owen

    🐛
    Robert Kesteson

    🐛 💻
    Chancy Kennedy

    💵 +
    Jarred Sumner

    🐛 From 9f89bfe5eba6710b85bc6b9f557bae28e2f2cf61 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 31 Dec 2020 14:33:52 +0000 Subject: [PATCH 34/51] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index f77ce1d8cd..79df1a226c 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -268,6 +268,15 @@ "contributions": [ "financial" ] + }, + { + "login": "Jarred-Sumner", + "name": "Jarred Sumner", + "avatar_url": "https://avatars1.githubusercontent.com/u/709451?v=4", + "profile": "https://jarredsumner.com", + "contributions": [ + "bug" + ] } ], "contributorsPerLine": 7, From efbb6f315aca2ef655dbf51984d0289bccb2fe1a Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Thu, 31 Dec 2020 21:17:32 +0000 Subject: [PATCH 35/51] refactor(color): replace ColorThemePartString - add ColorThemePartTuple - update asThemePart() to convert tuple versions - to avoid TS typecheck perf issues w/ the template literal string, switch to a tuple format for theme parts - update swatch tool --- packages/color/src/api.ts | 13 ++++------- packages/color/src/color-range.ts | 39 ++++++++++++++++++------------- packages/color/tools/index.ts | 10 ++++---- 3 files changed, 33 insertions(+), 29 deletions(-) diff --git a/packages/color/src/api.ts b/packages/color/src/api.ts index ad53477203..e778bdce43 100644 --- a/packages/color/src/api.ts +++ b/packages/color/src/api.ts @@ -253,11 +253,8 @@ export interface ColorThemePart { weight?: number; } -export type ColorThemePartString = - | `${ColorRangePreset} ${CSSColorName} ${number}` - | `${ColorRangePreset | CSSColorName} ${number}`; -// TODO the next 2 lines currently cause geometric slowdown -// of TS type checker & compiler, re-enable once TS4.2 is released -// Playground link to try behavior: https://is.gd/4wTxJm -// | `${ColorRangePreset} ${CSSColorName}` -// | `${ColorRangePreset | CSSColorName}`; +export type ColorThemePartTuple = + | [ColorRangePreset, CSSColorName, number?] + | [ColorRangePreset | CSSColorName, number?] + | ColorRangePreset + | CSSColorName; diff --git a/packages/color/src/color-range.ts b/packages/color/src/color-range.ts index d8dc17ab8a..1d613c9f47 100644 --- a/packages/color/src/color-range.ts +++ b/packages/color/src/color-range.ts @@ -1,5 +1,5 @@ import { peek } from "@thi.ng/arrays"; -import { isString } from "@thi.ng/checks"; +import { isArray, isNumber, isString } from "@thi.ng/checks"; import { illegalArgs } from "@thi.ng/errors"; import { IRandom, SYSTEM, weightedRandom } from "@thi.ng/random"; import { analogHSV } from "./analog"; @@ -8,7 +8,7 @@ import type { ColorRange, ColorRangePreset, ColorThemePart, - ColorThemePartString, + ColorThemePartTuple, Range, ReadonlyColor, } from "./api"; @@ -147,25 +147,32 @@ export function* colorsFromRange( while (--num >= 0) yield colorFromRange(range, base, opts); } -const asThemePart = (p: ColorThemePart | ColorThemePartString) => { +const asThemePart = (p: ColorThemePart | ColorThemePartTuple) => { let spec: ColorThemePart; - if (isString(p)) { - const items = p.split(" "); - let weight = parseFloat(peek(items)); - if (isNaN(weight)) { - weight = 1; + let weight: number; + if (isArray(p)) { + const [a, ...xs] = p; + if (isNumber(peek(xs))) { + weight = peek(xs); + xs.pop(); } else { - items.pop(); + weight = 1; } spec = ( - (items.length === 2 - ? { range: items[0], base: items[1], weight } - : items.length === 1 - ? RANGES[items[0]] - ? { range: items[0], weight } - : { base: items[0], weight } + (xs.length === 1 + ? { range: a, base: xs[0], weight } + : xs.length === 0 + ? RANGES[a] + ? { range: a, weight } + : { base: a, weight } : illegalArgs(`invalid theme part: "${p}"`)) ); + } else if (isString(p)) { + spec = ( + (RANGES[p] + ? { range: p, weight: 1 } + : { base: p, weight: 1 }) + ); } else { spec = p; spec.weight == null && (spec.weight = 1); @@ -176,7 +183,7 @@ const asThemePart = (p: ColorThemePart | ColorThemePartString) => { }; export function* colorsFromTheme( - parts: (ColorThemePart | ColorThemePartString)[], + parts: (ColorThemePart | ColorThemePartTuple)[], opts: Partial = {} ) { let { num, variance } = { ...DEFAULT_OPTS, ...opts }; diff --git a/packages/color/tools/index.ts b/packages/color/tools/index.ts index 753ce0a144..4a6f94b5d5 100644 --- a/packages/color/tools/index.ts +++ b/packages/color/tools/index.ts @@ -3,7 +3,7 @@ import { svg } from "@thi.ng/hiccup-svg"; import { writeFileSync } from "fs"; import { colorsFromTheme, - ColorThemePartString, + ColorThemePartTuple, cosineGradient, CosineGradientPreset, GRADIENTS, @@ -31,10 +31,10 @@ Object.keys(GRADIENTS).forEach((id) => { //////////////////////////////////////////////////////////// -const theme = [ - "fresh hotpink 0.1", - "cool goldenrod 1", - "light springgreen 0.1", +const theme = [ + ["cool", "goldenrod"], + ["fresh", "hotpink", 0.1], + ["light", "springgreen", 0.1], ]; const colors = [...colorsFromTheme(theme, { num: 200, variance: 0.05 })]; From 12b1bef8405faf4eaf021c0556ab1c7730216b1b Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Thu, 31 Dec 2020 21:17:53 +0000 Subject: [PATCH 36/51] docs(color): update readme --- packages/color/README.md | 21 +++++++++++---------- packages/color/tpl.readme.md | 19 ++++++++++--------- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/packages/color/README.md b/packages/color/README.md index 726ac87867..9b558f995d 100644 --- a/packages/color/README.md +++ b/packages/color/README.md @@ -94,19 +94,20 @@ colors.next(); // 10 cool reds, w/ 10% hue variance [...colorsFromRange(RANGES.cool, [0, 0.8, 1], { num: 10, variance: 0.1 })] -// generate colors based on given weighted textual description(s) +// generate colors based on given (weighted) textual description(s) +// here using named CSS colors, but could also be HSV tuples [...colorsFromTheme( - ["warm goldenrod 1.0", "cool springgreen 0.1"], + [["warm", "goldenrod"], ["cool", "springgreen", 0.1]], { num: 100, variance: 0.05 } )] -// theme parts can also be given in this format +// theme parts can also be given in the format used internally // note: base colors are always in HSV // all keys are optional (range, base, weight), // but at least `range` or `base` must be given... [...colorsFromTheme( [ - { range: "warm", base: "goldenrod", weight: 1 }, + { range: "warm", base: "goldenrod" }, { range: RANGES.cool, base: [0, 1, 0.5], weight: 0.1 } ], { num: 100, variance: 0.05 } @@ -127,7 +128,7 @@ colors.next(); | `warm` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-range-warm.svg) | | `weak` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-range-weak.svg) | -| ID | 100 colors, single base color w/ color range preset, sorted by brightness | +| ID | 100 colors, single base color w/ color range preset, sorted by hue | |-----------|--------------------------------------------------------------------------------------------------------------------| | `bright` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-bright.svg) | | `cool` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-cool.svg) | @@ -165,10 +166,10 @@ import { writeFileSync } from "fs"; // color theme definition using: // color range preset names, CSS colors and weights -const theme = [ - "fresh hotpink 0.1", - "cool goldenrod 1", - "light springgreen 0.1", +const theme = [ + ["cool", "goldenrod"], + ["fresh", "hotpink", 0.1], + ["light", "springgreen", 0.1], ]; // generate 200 HSV colors based on above description @@ -317,7 +318,7 @@ yarn add @thi.ng/color ``` -Package sizes (gzipped, pre-treeshake): ESM: 8.40 KB / CJS: 8.83 KB / UMD: 8.29 KB +Package sizes (gzipped, pre-treeshake): ESM: 8.41 KB / CJS: 8.85 KB / UMD: 8.31 KB ## Dependencies diff --git a/packages/color/tpl.readme.md b/packages/color/tpl.readme.md index 2f8f623494..c3d1d6b1e0 100644 --- a/packages/color/tpl.readme.md +++ b/packages/color/tpl.readme.md @@ -77,19 +77,20 @@ colors.next(); // 10 cool reds, w/ 10% hue variance [...colorsFromRange(RANGES.cool, [0, 0.8, 1], { num: 10, variance: 0.1 })] -// generate colors based on given weighted textual description(s) +// generate colors based on given (weighted) textual description(s) +// here using named CSS colors, but could also be HSV tuples [...colorsFromTheme( - ["warm goldenrod 1.0", "cool springgreen 0.1"], + [["warm", "goldenrod"], ["cool", "springgreen", 0.1]], { num: 100, variance: 0.05 } )] -// theme parts can also be given in this format +// theme parts can also be given in the format used internally // note: base colors are always in HSV // all keys are optional (range, base, weight), // but at least `range` or `base` must be given... [...colorsFromTheme( [ - { range: "warm", base: "goldenrod", weight: 1 }, + { range: "warm", base: "goldenrod" }, { range: RANGES.cool, base: [0, 1, 0.5], weight: 0.1 } ], { num: 100, variance: 0.05 } @@ -110,7 +111,7 @@ colors.next(); | `warm` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-range-warm.svg) | | `weak` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-range-weak.svg) | -| ID | 100 colors, single base color w/ color range preset, sorted by brightness | +| ID | 100 colors, single base color w/ color range preset, sorted by hue | |-----------|--------------------------------------------------------------------------------------------------------------------| | `bright` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-bright.svg) | | `cool` | ![color swatch](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-green-cool.svg) | @@ -148,10 +149,10 @@ import { writeFileSync } from "fs"; // color theme definition using: // color range preset names, CSS colors and weights -const theme = [ - "fresh hotpink 0.1", - "cool goldenrod 1", - "light springgreen 0.1", +const theme = [ + ["cool", "goldenrod"], + ["fresh", "hotpink", 0.1], + ["light", "springgreen", 0.1], ]; // generate 200 HSV colors based on above description From 98a91351728d730446f9654fc93317c1bece77ed Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Fri, 1 Jan 2021 14:04:37 +0000 Subject: [PATCH 37/51] fix(strings): update slugifyGH() replacements (#174) - hard to find definitive info about GH's slugify rules - new rules based on more manual experiments and studying of unicode charts - likely not a watertight solution, but should fix most issues of prev impl --- packages/strings/src/slugify.ts | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/packages/strings/src/slugify.ts b/packages/strings/src/slugify.ts index 2b68307426..b02c60d4ec 100644 --- a/packages/strings/src/slugify.ts +++ b/packages/strings/src/slugify.ts @@ -34,16 +34,24 @@ export const slugify: Stringer = (str: string) => { * @example * ```ts * slugifyGH("Me, myself (& ëye)!") - * // "me--myself--eye" + * // "me-myself--ëye" * ``` * * @param str */ export const slugifyGH = (str: string) => { - return str - .toLowerCase() - .replace(/\s/g, "-") - .replace(re, (c) => dest[src.indexOf(c)]) - .replace(/[^\w\-]+/g, "") - .replace(/(^-+)|(-+$)/g, ""); + return ( + str + .toLowerCase() + // remove all punctuations: + // - ascii + // - https://www.unicode.org/charts/PDF/U2000.pdf (general) + // - https://www.unicode.org/charts/PDF/U2700.pdf (dingbats) + // - https://www.unicode.org/charts/PDF/U2E00.pdf (supplemental) + .replace( + /[!"#$%&'()*+,./:;<=>?@\[\\\]^`{|}~\u0000-\u001f\u2000-\u206f\u2700-\u27bf\u2e00-\u2e7f]/g, + "" + ) + .replace(/\s/g, "-") + ); }; From c3fc1b37af0a4a56c9f1ed59b3ecf66c8ec04cbe Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Fri, 1 Jan 2021 14:17:32 +0000 Subject: [PATCH 38/51] docs: regenerate all readme's to fix TOC links (#174) --- packages/adapt-dpi/README.md | 2 +- packages/adjacency/README.md | 2 +- packages/api/README.md | 2 +- packages/arrays/README.md | 4 ++-- packages/associative/README.md | 4 ++-- packages/atom/README.md | 4 ++-- packages/bench/README.md | 2 +- packages/bencode/README.md | 4 ++-- packages/binary/README.md | 2 +- packages/bitfield/README.md | 2 +- packages/bitstream/README.md | 2 +- packages/cache/README.md | 2 +- packages/checks/README.md | 2 +- packages/color/README.md | 6 +++--- packages/colored-noise/README.md | 6 +++--- packages/compare/README.md | 4 ++-- packages/compose/README.md | 2 +- packages/csp/README.md | 2 +- packages/csv/README.md | 2 +- packages/date/README.md | 2 +- packages/dcons/README.md | 2 +- packages/defmulti/README.md | 4 ++-- packages/dgraph-dot/README.md | 2 +- packages/dgraph/README.md | 2 +- packages/diff/README.md | 2 +- packages/dl-asset/README.md | 2 +- packages/dlogic/README.md | 2 +- packages/dot/README.md | 2 +- packages/dsp-io-wav/README.md | 2 +- packages/dsp/README.md | 2 +- packages/dual-algebra/README.md | 2 +- packages/dynvar/README.md | 2 +- packages/ecs/README.md | 2 +- packages/egf/README.md | 4 ++-- packages/equiv/README.md | 2 +- packages/errors/README.md | 2 +- packages/fsm/README.md | 2 +- packages/fuzzy-viz/README.md | 2 +- packages/fuzzy/README.md | 4 ++-- packages/geom-accel/README.md | 2 +- packages/geom-api/README.md | 2 +- packages/geom-arc/README.md | 2 +- packages/geom-clip-line/README.md | 2 +- packages/geom-clip-poly/README.md | 2 +- packages/geom-closest-point/README.md | 2 +- packages/geom-fuzz/README.md | 2 +- packages/geom-hull/README.md | 2 +- packages/geom-io-obj/README.md | 2 +- packages/geom-isec/README.md | 2 +- packages/geom-isoline/README.md | 2 +- packages/geom-poly-utils/README.md | 2 +- packages/geom-resample/README.md | 2 +- packages/geom-splines/README.md | 2 +- packages/geom-subdiv-curve/README.md | 2 +- packages/geom-tessellate/README.md | 2 +- packages/geom-voronoi/README.md | 2 +- packages/geom/README.md | 2 +- packages/gp/README.md | 2 +- packages/grid-iterators/README.md | 2 +- packages/hdiff/README.md | 2 +- packages/hdom-canvas/README.md | 2 +- packages/hdom-components/README.md | 2 +- packages/hdom-mock/README.md | 2 +- packages/hdom/README.md | 24 ++++++++++++------------ packages/heaps/README.md | 2 +- packages/hex/README.md | 2 +- packages/hiccup-canvas/README.md | 8 ++++---- packages/hiccup-carbon-icons/README.md | 2 +- packages/hiccup-css/README.md | 2 +- packages/hiccup-html/README.md | 6 +++--- packages/hiccup-markdown/README.md | 2 +- packages/hiccup-svg/README.md | 4 ++-- packages/hiccup/README.md | 6 +++--- packages/idgen/README.md | 6 +++--- packages/iges/README.md | 2 +- packages/imgui/README.md | 4 ++-- packages/interceptors/README.md | 8 ++++---- packages/intervals/README.md | 2 +- packages/iterators/README.md | 2 +- packages/layout/README.md | 2 +- packages/leb128/README.md | 2 +- packages/lsys/README.md | 2 +- packages/malloc/README.md | 18 +++++++++--------- packages/math/README.md | 2 +- packages/matrices/README.md | 4 ++-- packages/memoize/README.md | 2 +- packages/mime/README.md | 2 +- packages/morton/README.md | 4 ++-- packages/oquery/README.md | 2 +- packages/parse/README.md | 4 ++-- packages/paths/README.md | 2 +- packages/pixel/README.md | 3 ++- packages/pointfree-lang/README.md | 6 +++--- packages/pointfree/README.md | 8 ++++---- packages/poisson/README.md | 2 +- packages/porter-duff/README.md | 6 +++--- packages/prefixes/README.md | 4 ++-- packages/quad-edge/README.md | 2 +- packages/ramp/README.md | 2 +- packages/random/README.md | 2 +- packages/range-coder/README.md | 2 +- packages/rdom-canvas/README.md | 2 +- packages/rdom-components/README.md | 2 +- packages/rdom/README.md | 4 ++-- packages/resolve-map/README.md | 2 +- packages/rle-pack/README.md | 2 +- packages/router/README.md | 2 +- packages/rstream-csp/README.md | 2 +- packages/rstream-dot/README.md | 2 +- packages/rstream-gestures/README.md | 2 +- packages/rstream-graph/README.md | 2 +- packages/rstream-log-file/README.md | 2 +- packages/rstream-log/README.md | 2 +- packages/rstream-query/README.md | 2 +- packages/rstream/README.md | 8 ++++---- packages/sax/README.md | 2 +- packages/scenegraph/README.md | 2 +- packages/seq/README.md | 2 +- packages/sexpr/README.md | 2 +- packages/shader-ast-glsl/README.md | 2 +- packages/shader-ast-js/README.md | 2 +- packages/shader-ast-stdlib/README.md | 4 ++-- packages/shader-ast/README.md | 10 +++++----- packages/simd/README.md | 2 +- packages/soa/README.md | 2 +- packages/sparse/README.md | 2 +- packages/strings/README.md | 6 +++--- packages/system/README.md | 2 +- packages/text-canvas/README.md | 4 ++-- packages/transducers-binary/README.md | 4 ++-- packages/transducers-fsm/README.md | 2 +- packages/transducers-hdom/README.md | 2 +- packages/transducers-patch/README.md | 2 +- packages/transducers-stats/README.md | 2 +- packages/transducers/README.md | 8 ++++---- packages/unionstruct/README.md | 2 +- packages/vclock/README.md | 2 +- packages/vector-pools/README.md | 4 ++-- packages/vectors/README.md | 18 +++++++++--------- packages/viz/README.md | 2 +- packages/webgl-msdf/README.md | 2 +- packages/webgl-shadertoy/README.md | 2 +- packages/webgl/README.md | 2 +- packages/zipper/README.md | 2 +- 144 files changed, 226 insertions(+), 225 deletions(-) diff --git a/packages/adapt-dpi/README.md b/packages/adapt-dpi/README.md index 68b75c1677..b8f5df586c 100644 --- a/packages/adapt-dpi/README.md +++ b/packages/adapt-dpi/README.md @@ -98,4 +98,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2015 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2015 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/adjacency/README.md b/packages/adjacency/README.md index 7e0fc91ec6..637c66ca9e 100644 --- a/packages/adjacency/README.md +++ b/packages/adjacency/README.md @@ -88,4 +88,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/api/README.md b/packages/api/README.md index 1ffbc4fda8..ca6d792124 100644 --- a/packages/api/README.md +++ b/packages/api/README.md @@ -102,4 +102,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/arrays/README.md b/packages/arrays/README.md index afc5c42f01..e6ecd729ed 100644 --- a/packages/arrays/README.md +++ b/packages/arrays/README.md @@ -42,7 +42,7 @@ yarn add @thi.ng/arrays ``` -Package sizes (gzipped, pre-treeshake): ESM: 1.84 KB / CJS: 2.00 KB / UMD: 1.99 KB +Package sizes (gzipped, pre-treeshake): ESM: 2.00 KB / CJS: 2.18 KB / UMD: 2.15 KB ## Dependencies @@ -117,4 +117,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/associative/README.md b/packages/associative/README.md index 40bdea4b0c..a3b8cceaa2 100644 --- a/packages/associative/README.md +++ b/packages/associative/README.md @@ -24,7 +24,7 @@ This project is part of the - [SortedMap](#sortedmap) - [Ranged queries](#ranged-queries) - [SortedSet](#sortedset) - - [SparseSet8/16/32](#sparseset8-16-32) + - [SparseSet8/16/32](#sparseset81632) - [TrieMap](#triemap) - [MultiTrie](#multitrie) - [Authors](#authors) @@ -393,4 +393,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2017 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2017 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/atom/README.md b/packages/atom/README.md index 9b7c8abc98..d96e71c2cb 100644 --- a/packages/atom/README.md +++ b/packages/atom/README.md @@ -27,7 +27,7 @@ This project is part of the - [External modifications during active transaction](#external-modifications-during-active-transaction) - [Cursor](#cursor) - [Derived views](#derived-views) - - [Undo / Redo history](#undo---redo-history) + - [Undo / Redo history](#undo--redo-history) - [Authors](#authors) - [License](#license) @@ -660,4 +660,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2017 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2017 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/bench/README.md b/packages/bench/README.md index ef910544b9..80c07b38db 100644 --- a/packages/bench/README.md +++ b/packages/bench/README.md @@ -157,4 +157,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/bencode/README.md b/packages/bencode/README.md index c80c43951f..32b84348b4 100644 --- a/packages/bencode/README.md +++ b/packages/bencode/README.md @@ -10,7 +10,7 @@ This project is part of the [@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. - [About](#about) - - [Features / behaviors](#features---behaviors) + - [Features / behaviors](#features--behaviors) - [Booleans](#booleans) - [String handling](#string-handling) - [Floating point values](#floating-point-values) @@ -127,4 +127,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/binary/README.md b/packages/binary/README.md index 59967d31be..6f36dd14bd 100644 --- a/packages/binary/README.md +++ b/packages/binary/README.md @@ -83,4 +83,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/bitfield/README.md b/packages/bitfield/README.md index 55e911037d..a9bbd9553b 100644 --- a/packages/bitfield/README.md +++ b/packages/bitfield/README.md @@ -116,4 +116,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/bitstream/README.md b/packages/bitstream/README.md index 658b41a816..4f5db95751 100644 --- a/packages/bitstream/README.md +++ b/packages/bitstream/README.md @@ -166,4 +166,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/cache/README.md b/packages/cache/README.md index 310449855b..b2055ba225 100644 --- a/packages/cache/README.md +++ b/packages/cache/README.md @@ -235,4 +235,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/checks/README.md b/packages/checks/README.md index 6e1593553b..a4993877c2 100644 --- a/packages/checks/README.md +++ b/packages/checks/README.md @@ -79,4 +79,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/color/README.md b/packages/color/README.md index 9b558f995d..2478887aac 100644 --- a/packages/color/README.md +++ b/packages/color/README.md @@ -12,7 +12,7 @@ This project is part of the For the Clojure version, please visit: [thi.ng/color-clj](https://thi.ng/color-clj) - [About](#about) - - [Color spaces / modes](#color-spaces---modes) + - [Color spaces / modes](#color-spaces--modes) - [Class wrappers](#class-wrappers) - [Color theme generation](#color-theme-generation) - [RGBA transformations](#rgba-transformations) @@ -318,7 +318,7 @@ yarn add @thi.ng/color ``` -Package sizes (gzipped, pre-treeshake): ESM: 8.41 KB / CJS: 8.85 KB / UMD: 8.31 KB +Package sizes (gzipped, pre-treeshake): ESM: 8.41 KB / CJS: 8.84 KB / UMD: 8.30 KB ## Dependencies @@ -410,4 +410,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/colored-noise/README.md b/packages/colored-noise/README.md index 45efc33dd8..057ce7cbed 100644 --- a/packages/colored-noise/README.md +++ b/packages/colored-noise/README.md @@ -13,7 +13,7 @@ This project is part of the - [Blue noise](#blue-noise) - [Green noise](#green-noise) - [Pink noise](#pink-noise) - - [Red / brown noise](#red---brown-noise) + - [Red / brown noise](#red--brown-noise) - [Violet noise](#violet-noise) - [White noise](#white-noise) - [Status](#status) @@ -21,7 +21,7 @@ This project is part of the - [Installation](#installation) - [Dependencies](#dependencies) - [API](#api) - - [Use as IGen in @thi.ng/dsp](#use-as-igen-in-thing-dsp) + - [Use as IGen in @thi.ng/dsp](#use-as-igen-in-thingdsp) - [Authors](#authors) - [License](#license) @@ -442,4 +442,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2015 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2015 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/compare/README.md b/packages/compare/README.md index 3ea8ef98de..f54ad02ead 100644 --- a/packages/compare/README.md +++ b/packages/compare/README.md @@ -16,7 +16,7 @@ This project is part of the - [Usage examples](#usage-examples) - [API](#api) - [ICompare support](#icompare-support) - - [Cluster sort w/ multiple sort keys](#cluster-sort-w--multiple-sort-keys) + - [Cluster sort w/ multiple sort keys](#cluster-sort-w-multiple-sort-keys) - [Authors](#authors) - [License](#license) @@ -167,4 +167,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/compose/README.md b/packages/compose/README.md index b39a34e4f5..aa9e5b8d69 100644 --- a/packages/compose/README.md +++ b/packages/compose/README.md @@ -77,4 +77,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/csp/README.md b/packages/csp/README.md index 6951b089b6..c0cbcdad06 100644 --- a/packages/csp/README.md +++ b/packages/csp/README.md @@ -254,4 +254,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/csv/README.md b/packages/csv/README.md index 20349e18aa..cfb99280a0 100644 --- a/packages/csv/README.md +++ b/packages/csv/README.md @@ -130,4 +130,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2014 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2014 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/date/README.md b/packages/date/README.md index fc76d9eace..08b96c1588 100644 --- a/packages/date/README.md +++ b/packages/date/README.md @@ -234,4 +234,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2020 Karsten Schmidt // Apache Software License 2.0 +© 2020 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/dcons/README.md b/packages/dcons/README.md index 6c8e66e9a3..10eb4c463b 100644 --- a/packages/dcons/README.md +++ b/packages/dcons/README.md @@ -169,4 +169,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2017 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2017 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/defmulti/README.md b/packages/defmulti/README.md index a9bc59ac67..5114a3f405 100644 --- a/packages/defmulti/README.md +++ b/packages/defmulti/README.md @@ -20,7 +20,7 @@ This project is part of the - [implementations()](#implementations) - [defmultiN()](#defmultin) - [Usage examples](#usage-examples) - - [Dynamic dispatch: Simple S-expression interpreter](#dynamic-dispatch--simple-s-expression-interpreter) + - [Dynamic dispatch: Simple S-expression interpreter](#dynamic-dispatch-simple-s-expression-interpreter) - [True multiple arg dispatch](#true-multiple-arg-dispatch) - [Dispatch value graph visualization](#dispatch-value-graph-visualization) - [Authors](#authors) @@ -386,4 +386,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/dgraph-dot/README.md b/packages/dgraph-dot/README.md index 9171bed657..dbecf4fe5b 100644 --- a/packages/dgraph-dot/README.md +++ b/packages/dgraph-dot/README.md @@ -112,4 +112,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2020 Karsten Schmidt // Apache Software License 2.0 +© 2020 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/dgraph/README.md b/packages/dgraph/README.md index e37d17bc5e..6349fffce5 100644 --- a/packages/dgraph/README.md +++ b/packages/dgraph/README.md @@ -118,4 +118,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2015 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2015 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/diff/README.md b/packages/diff/README.md index 74315bd5de..e726258962 100644 --- a/packages/diff/README.md +++ b/packages/diff/README.md @@ -83,4 +83,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/dl-asset/README.md b/packages/dl-asset/README.md index 4c8374bd4a..2e8f93269f 100644 --- a/packages/dl-asset/README.md +++ b/packages/dl-asset/README.md @@ -119,4 +119,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2020 Karsten Schmidt // Apache Software License 2.0 +© 2020 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/dlogic/README.md b/packages/dlogic/README.md index 2f095737dd..b5611e5c4d 100644 --- a/packages/dlogic/README.md +++ b/packages/dlogic/README.md @@ -94,4 +94,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2017 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2017 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/dot/README.md b/packages/dot/README.md index 5cc94a1461..51a36fd524 100644 --- a/packages/dot/README.md +++ b/packages/dot/README.md @@ -168,4 +168,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/dsp-io-wav/README.md b/packages/dsp-io-wav/README.md index 0249dfb651..ce5df49101 100644 --- a/packages/dsp-io-wav/README.md +++ b/packages/dsp-io-wav/README.md @@ -89,4 +89,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2020 Karsten Schmidt // Apache Software License 2.0 +© 2020 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/dsp/README.md b/packages/dsp/README.md index 0c94d17291..33c2646c34 100644 --- a/packages/dsp/README.md +++ b/packages/dsp/README.md @@ -569,4 +569,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2015 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2015 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/dual-algebra/README.md b/packages/dual-algebra/README.md index aadc147a99..df03e5805c 100644 --- a/packages/dual-algebra/README.md +++ b/packages/dual-algebra/README.md @@ -210,4 +210,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2020 Karsten Schmidt // Apache Software License 2.0 +© 2020 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/dynvar/README.md b/packages/dynvar/README.md index 7666a1a7e0..8d85d0016e 100644 --- a/packages/dynvar/README.md +++ b/packages/dynvar/README.md @@ -142,4 +142,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/ecs/README.md b/packages/ecs/README.md index 8503504ee1..b7c88eeb26 100644 --- a/packages/ecs/README.md +++ b/packages/ecs/README.md @@ -169,4 +169,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2019 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2019 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/egf/README.md b/packages/egf/README.md index 3e0bf808ff..10ca9f227e 100644 --- a/packages/egf/README.md +++ b/packages/egf/README.md @@ -22,7 +22,7 @@ This project is part of the - [Node references](#node-references) - [Prefixed IDs](#prefixed-ids) - [Includes](#includes) - - [EGF generation / serialization](#egf-generation---serialization) + - [EGF generation / serialization](#egf-generation--serialization) - [Authors](#authors) - [License](#license) @@ -527,4 +527,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2020 Karsten Schmidt // Apache Software License 2.0 +© 2020 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/equiv/README.md b/packages/equiv/README.md index eed527e15b..009b795109 100644 --- a/packages/equiv/README.md +++ b/packages/equiv/README.md @@ -124,4 +124,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/errors/README.md b/packages/errors/README.md index 6d1d253691..2c3de0550b 100644 --- a/packages/errors/README.md +++ b/packages/errors/README.md @@ -102,4 +102,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/fsm/README.md b/packages/fsm/README.md index 0b759ab8a3..cf108e21df 100644 --- a/packages/fsm/README.md +++ b/packages/fsm/README.md @@ -147,4 +147,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/fuzzy-viz/README.md b/packages/fuzzy-viz/README.md index a0c621cc03..9e300940bc 100644 --- a/packages/fuzzy-viz/README.md +++ b/packages/fuzzy-viz/README.md @@ -155,4 +155,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2020 Karsten Schmidt // Apache Software License 2.0 +© 2020 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/fuzzy/README.md b/packages/fuzzy/README.md index 090ff86796..4715b25fc2 100644 --- a/packages/fuzzy/README.md +++ b/packages/fuzzy/README.md @@ -11,7 +11,7 @@ This project is part of the - [About](#about) - [Features](#features) - - [References / Further reading](#references---further-reading) + - [References / Further reading](#references--further-reading) - [Status](#status) - [Support packages](#support-packages) - [Installation](#installation) @@ -342,4 +342,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2020 Karsten Schmidt // Apache Software License 2.0 +© 2020 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/geom-accel/README.md b/packages/geom-accel/README.md index 94ebd0c694..40743a545e 100644 --- a/packages/geom-accel/README.md +++ b/packages/geom-accel/README.md @@ -107,4 +107,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2013 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2013 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/geom-api/README.md b/packages/geom-api/README.md index 86875e5c83..d92229b94b 100644 --- a/packages/geom-api/README.md +++ b/packages/geom-api/README.md @@ -71,4 +71,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2013 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2013 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/geom-arc/README.md b/packages/geom-arc/README.md index 1e49b1fa23..8c3426828a 100644 --- a/packages/geom-arc/README.md +++ b/packages/geom-arc/README.md @@ -74,4 +74,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/geom-clip-line/README.md b/packages/geom-clip-line/README.md index 3a7f291052..958d58f842 100644 --- a/packages/geom-clip-line/README.md +++ b/packages/geom-clip-line/README.md @@ -100,4 +100,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2013 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2013 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/geom-clip-poly/README.md b/packages/geom-clip-poly/README.md index 589e40601e..e705b743c7 100644 --- a/packages/geom-clip-poly/README.md +++ b/packages/geom-clip-poly/README.md @@ -79,4 +79,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2013 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2013 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/geom-closest-point/README.md b/packages/geom-closest-point/README.md index 05f0272188..b016c6c52a 100644 --- a/packages/geom-closest-point/README.md +++ b/packages/geom-closest-point/README.md @@ -100,4 +100,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/geom-fuzz/README.md b/packages/geom-fuzz/README.md index 2d35e7573b..8f9a392436 100644 --- a/packages/geom-fuzz/README.md +++ b/packages/geom-fuzz/README.md @@ -100,4 +100,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2020 Karsten Schmidt // Apache Software License 2.0 +© 2020 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/geom-hull/README.md b/packages/geom-hull/README.md index df11238471..c8cd5c53c8 100644 --- a/packages/geom-hull/README.md +++ b/packages/geom-hull/README.md @@ -92,4 +92,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2013 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2013 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/geom-io-obj/README.md b/packages/geom-io-obj/README.md index 28133748bd..c397067c53 100644 --- a/packages/geom-io-obj/README.md +++ b/packages/geom-io-obj/README.md @@ -170,4 +170,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/geom-isec/README.md b/packages/geom-isec/README.md index b2dc4b9ce7..b3067fbfad 100644 --- a/packages/geom-isec/README.md +++ b/packages/geom-isec/README.md @@ -105,4 +105,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/geom-isoline/README.md b/packages/geom-isoline/README.md index d14019d3eb..ba024a284d 100644 --- a/packages/geom-isoline/README.md +++ b/packages/geom-isoline/README.md @@ -138,4 +138,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2015 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2015 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/geom-poly-utils/README.md b/packages/geom-poly-utils/README.md index da893dfba4..5ac21cb5e9 100644 --- a/packages/geom-poly-utils/README.md +++ b/packages/geom-poly-utils/README.md @@ -88,4 +88,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/geom-resample/README.md b/packages/geom-resample/README.md index 1678cbd42d..aa20879387 100644 --- a/packages/geom-resample/README.md +++ b/packages/geom-resample/README.md @@ -110,4 +110,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2013 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2013 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/geom-splines/README.md b/packages/geom-splines/README.md index 472e979a64..2d0cd2c6b2 100644 --- a/packages/geom-splines/README.md +++ b/packages/geom-splines/README.md @@ -127,4 +127,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/geom-subdiv-curve/README.md b/packages/geom-subdiv-curve/README.md index f005c4aaec..408de35a1c 100644 --- a/packages/geom-subdiv-curve/README.md +++ b/packages/geom-subdiv-curve/README.md @@ -94,4 +94,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/geom-tessellate/README.md b/packages/geom-tessellate/README.md index 3ed98d8127..e6f7493f7f 100644 --- a/packages/geom-tessellate/README.md +++ b/packages/geom-tessellate/README.md @@ -99,4 +99,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/geom-voronoi/README.md b/packages/geom-voronoi/README.md index 9ea12f7e3c..6470d7a6cd 100644 --- a/packages/geom-voronoi/README.md +++ b/packages/geom-voronoi/README.md @@ -133,4 +133,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/geom/README.md b/packages/geom/README.md index 554e0b5023..a0cc06b08e 100644 --- a/packages/geom/README.md +++ b/packages/geom/README.md @@ -154,4 +154,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2013 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2013 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/gp/README.md b/packages/gp/README.md index a193031141..7f53fad98d 100644 --- a/packages/gp/README.md +++ b/packages/gp/README.md @@ -122,4 +122,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2019 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2019 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/grid-iterators/README.md b/packages/grid-iterators/README.md index 680a977626..d7c0567821 100644 --- a/packages/grid-iterators/README.md +++ b/packages/grid-iterators/README.md @@ -228,4 +228,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2019 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2019 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/hdiff/README.md b/packages/hdiff/README.md index 04f0d62c78..f8197c2a21 100644 --- a/packages/hdiff/README.md +++ b/packages/hdiff/README.md @@ -132,4 +132,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/hdom-canvas/README.md b/packages/hdom-canvas/README.md index 9d255d8ee3..369daa95fa 100644 --- a/packages/hdom-canvas/README.md +++ b/packages/hdom-canvas/README.md @@ -296,4 +296,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/hdom-components/README.md b/packages/hdom-components/README.md index 1b0a28a915..4766c8ff7f 100644 --- a/packages/hdom-components/README.md +++ b/packages/hdom-components/README.md @@ -130,4 +130,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/hdom-mock/README.md b/packages/hdom-mock/README.md index 0665785373..8d580af31b 100644 --- a/packages/hdom-mock/README.md +++ b/packages/hdom-mock/README.md @@ -119,4 +119,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/hdom/README.md b/packages/hdom/README.md index 31f46b3a3a..f2a871f560 100644 --- a/packages/hdom/README.md +++ b/packages/hdom/README.md @@ -16,15 +16,15 @@ This project is part of the - [Installation](#installation) - [Dependencies](#dependencies) - [Usage examples](#usage-examples) - - [Minimal example #1: Local state, RAF update](#minimal-example-1--local-state--raf-update) - - [Minimal example #2: Reactive, push-based state & update](#minimal-example-2--reactive--push-based-state--update) - - [Minimal example #3: Immutable app state & interceptors](#minimal-example-3--immutable-app-state--interceptors) - - [Minimal example #4: Canvas scene tree / branch-local behavior](#minimal-example-4--canvas-scene-tree---branch-local-behavior) + - [Minimal example #1: Local state, RAF update](#minimal-example-1-local-state-raf-update) + - [Minimal example #2: Reactive, push-based state & update](#minimal-example-2-reactive-push-based-state--update) + - [Minimal example #3: Immutable app state & interceptors](#minimal-example-3-immutable-app-state--interceptors) + - [Minimal example #4: Canvas scene tree / branch-local behavior](#minimal-example-4-canvas-scene-tree--branch-local-behavior) - [API](#api) - [The hdom data flow](#the-hdom-data-flow) - [Nested arrays](#nested-arrays) - [Attribute objects](#attribute-objects) - - [Pure functions and/or closures](#pure-functions-and-or-closures) + - [Pure functions and/or closures](#pure-functions-andor-closures) - [Iterators](#iterators) - [Interface support](#interface-support) - [Component objects with life cycle methods](#component-objects-with-life-cycle-methods) @@ -44,12 +44,12 @@ This project is part of the - [User context](#user-context) - [`value` attribute handling](#value-attribute-handling) - [Behavior control attributes](#behavior-control-attributes) - - [\_\_impl](#impl) - - [\_\_diff](#diff) - - [\_\_normalize](#normalize) - - [\_\_release](#release) - - [\_\_serialize](#serialize) - - [\_\_skip](#skip) + - [\_\_impl](#__impl) + - [\_\_diff](#__diff) + - [\_\_normalize](#__normalize) + - [\_\_release](#__release) + - [\_\_serialize](#__serialize) + - [\_\_skip](#__skip) - [Benchmarks](#benchmarks) - [Authors](#authors) - [Maintainer](#maintainer) @@ -1242,4 +1242,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2015 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2015 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/heaps/README.md b/packages/heaps/README.md index 5cf76bd5c4..a3273b63b3 100644 --- a/packages/heaps/README.md +++ b/packages/heaps/README.md @@ -101,4 +101,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2017 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2017 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/hex/README.md b/packages/hex/README.md index a5601e8900..baaea52505 100644 --- a/packages/hex/README.md +++ b/packages/hex/README.md @@ -108,4 +108,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2020 Karsten Schmidt // Apache Software License 2.0 +© 2020 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/hiccup-canvas/README.md b/packages/hiccup-canvas/README.md index bcecf15c1d..f8847ce2c9 100644 --- a/packages/hiccup-canvas/README.md +++ b/packages/hiccup-canvas/README.md @@ -22,12 +22,12 @@ This project is part of the - [Definition group](#definition-group) - [Circle](#circle) - [Circular arc](#circular-arc) - - [Ellipse / elliptic arc](#ellipse---elliptic-arc) + - [Ellipse / elliptic arc](#ellipse--elliptic-arc) - [Rect](#rect) - [Line](#line) - [Horizontal Line](#horizontal-line) - [Vertical Line](#vertical-line) - - [Polyline / Polygon](#polyline---polygon) + - [Polyline / Polygon](#polyline--polygon) - [Path](#path) - [SVG paths with arc segments](#svg-paths-with-arc-segments) - [Points](#points) @@ -40,7 +40,7 @@ This project is part of the - [String](#string) - [Number](#number) - [Array](#array) - - [@thi.ng/color values](#thing-color-values) + - [@thi.ng/color values](#thingcolor-values) - [Coordinate transformations](#coordinate-transformations) - [Transform matrix](#transform-matrix) - [Override transform](#override-transform) @@ -503,4 +503,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/hiccup-carbon-icons/README.md b/packages/hiccup-carbon-icons/README.md index 07cdc43c6f..c62e4fa190 100644 --- a/packages/hiccup-carbon-icons/README.md +++ b/packages/hiccup-carbon-icons/README.md @@ -160,4 +160,4 @@ If this project contributes to an academic publication, please cite it as: The copyright of the original icons is with IBM. The icons were published under the same license as this package. -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/hiccup-css/README.md b/packages/hiccup-css/README.md index de7ace0ef4..8dfc11b6a6 100644 --- a/packages/hiccup-css/README.md +++ b/packages/hiccup-css/README.md @@ -663,4 +663,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/hiccup-html/README.md b/packages/hiccup-html/README.md index 7dc7b12311..3306301f81 100644 --- a/packages/hiccup-html/README.md +++ b/packages/hiccup-html/README.md @@ -11,13 +11,13 @@ This project is part of the - [About](#about) - [Supported elements](#supported-elements) - - [Head / metadata](#head---metadata) + - [Head / metadata](#head--metadata) - [Sections](#sections) - [Text content](#text-content) - [Lists](#lists) - [Tables](#tables) - [Inline](#inline) - - [Forms / inputs](#forms---inputs) + - [Forms / inputs](#forms--inputs) - [Media](#media) - [Compatibility](#compatibility) - [Status](#status) @@ -352,4 +352,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2020 Karsten Schmidt // Apache Software License 2.0 +© 2020 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/hiccup-markdown/README.md b/packages/hiccup-markdown/README.md index 01b5f63bbd..8ea441f0c3 100644 --- a/packages/hiccup-markdown/README.md +++ b/packages/hiccup-markdown/README.md @@ -413,4 +413,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/hiccup-svg/README.md b/packages/hiccup-svg/README.md index 42face6441..b4459b7a94 100644 --- a/packages/hiccup-svg/README.md +++ b/packages/hiccup-svg/README.md @@ -11,7 +11,7 @@ This project is part of the - [About](#about) - [Important](#important) - - [SVG conversion of @thi.ng/geom & @thi.ng/hdom-canvas shape trees](#svg-conversion-of-thing-geom--thing-hdom-canvas-shape-trees) + - [SVG conversion of @thi.ng/geom & @thi.ng/hdom-canvas shape trees](#svg-conversion-of-thinggeom--thinghdom-canvas-shape-trees) - [Automatic attribute conversions](#automatic-attribute-conversions) - [Colors](#colors) - [Transforms](#transforms) @@ -266,4 +266,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/hiccup/README.md b/packages/hiccup/README.md index e551cdb424..a343c35d22 100644 --- a/packages/hiccup/README.md +++ b/packages/hiccup/README.md @@ -26,13 +26,13 @@ This project is part of the - [Attributes](#attributes) - [Simple components](#simple-components) - [User context injection](#user-context-injection) - - [SVG generation, generators & lazy composition](#svg-generation--generators--lazy-composition) + - [SVG generation, generators & lazy composition](#svg-generation-generators--lazy-composition) - [Data-driven component composition](#data-driven-component-composition) - [Stateful component](#stateful-component) - [Component objects](#component-objects) - [Behavior control attributes](#behavior-control-attributes) - [Comments](#comments) - - [XML / DTD processing instructions](#xml---dtd-processing-instructions) + - [XML / DTD processing instructions](#xml--dtd-processing-instructions) - [API](#api) - [serialize()](#serialize) - [escape()](#escape) @@ -661,4 +661,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/idgen/README.md b/packages/idgen/README.md index 8c67663df5..e028e31978 100644 --- a/packages/idgen/README.md +++ b/packages/idgen/README.md @@ -15,7 +15,7 @@ This project is part of the - [Dependencies](#dependencies) - [API](#api) - [ID generator with 16 bit range and no versioning](#id-generator-with-16-bit-range-and-no-versioning) - - [ID generator w/ 24 bit range & 8 bit version range](#id-generator-w--24-bit-range--8-bit-version-range) + - [ID generator w/ 24 bit range & 8 bit version range](#id-generator-w-24-bit-range--8-bit-version-range) - [IDGen is iterable](#idgen-is-iterable) - [Authors](#authors) - [License](#license) @@ -63,7 +63,7 @@ yarn add @thi.ng/idgen ``` -Package sizes (gzipped, pre-treeshake): ESM: 843 bytes / CJS: 890 bytes / UMD: 1006 bytes +Package sizes (gzipped, pre-treeshake): ESM: 857 bytes / CJS: 906 bytes / UMD: 1019 bytes ## Dependencies @@ -188,4 +188,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2019 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2019 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/iges/README.md b/packages/iges/README.md index 6bbaaf8b5c..bddb35f136 100644 --- a/packages/iges/README.md +++ b/packages/iges/README.md @@ -124,4 +124,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/imgui/README.md b/packages/imgui/README.md index f7c02568e2..06557a5011 100644 --- a/packages/imgui/README.md +++ b/packages/imgui/README.md @@ -11,7 +11,7 @@ This project is part of the - [About](#about) - [Current features](#current-features) - - [Available components / widgets](#available-components---widgets) + - [Available components / widgets](#available-components--widgets) - [State handling](#state-handling) - [Layout support](#layout-support) - [Key controls](#key-controls) @@ -291,4 +291,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2019 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2019 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/interceptors/README.md b/packages/interceptors/README.md index ab5120a8db..f3da3cc336 100644 --- a/packages/interceptors/README.md +++ b/packages/interceptors/README.md @@ -10,11 +10,11 @@ This project is part of the [@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. - [About](#about) -- [Event bus, interceptors, side effects](#event-bus--interceptors--side-effects) - - [Interceptors: Event and Effect primitives](#interceptors--event-and-effect-primitives) +- [Event bus, interceptors, side effects](#event-bus-interceptors-side-effects) + - [Interceptors: Event and Effect primitives](#interceptors-event-and-effect-primitives) - [Event Handlers](#event-handlers) - [Events vs Effects:](#events-vs-effects) - - [Great, but why?](#great--but-why) + - [Great, but why?](#great-but-why) - [Status](#status) - [Installation](#installation) - [Dependencies](#dependencies) @@ -191,4 +191,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/intervals/README.md b/packages/intervals/README.md index 0b5c3e26db..f0f6cc0a67 100644 --- a/packages/intervals/README.md +++ b/packages/intervals/README.md @@ -169,4 +169,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/iterators/README.md b/packages/iterators/README.md index 717e9651ae..72bcb7b836 100644 --- a/packages/iterators/README.md +++ b/packages/iterators/README.md @@ -1173,4 +1173,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2017 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2017 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/layout/README.md b/packages/layout/README.md index 33649e90f5..54bd60b8d4 100644 --- a/packages/layout/README.md +++ b/packages/layout/README.md @@ -142,4 +142,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2019 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2019 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/leb128/README.md b/packages/leb128/README.md index 77bbc79843..d12863e778 100644 --- a/packages/leb128/README.md +++ b/packages/leb128/README.md @@ -134,4 +134,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2019 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2019 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/lsys/README.md b/packages/lsys/README.md index ceac7928e2..cca6367957 100644 --- a/packages/lsys/README.md +++ b/packages/lsys/README.md @@ -261,4 +261,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2019 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2019 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/malloc/README.md b/packages/malloc/README.md index f23efb98c9..19c09dc26f 100644 --- a/packages/malloc/README.md +++ b/packages/malloc/README.md @@ -11,20 +11,20 @@ This project is part of the - [About](#about) - [Memory layout](#memory-layout) - - [Free block compaction / coalescing](#free-block-compaction---coalescing) + - [Free block compaction / coalescing](#free-block-compaction--coalescing) - [Block splitting](#block-splitting) - [Status](#status) - [Installation](#installation) - [Dependencies](#dependencies) - [API](#api) - [MemPool](#mempool) - - [`malloc(size: number)`](#mallocsize--number) - - [`mallocAs(type: Type, num: number)`](#mallocastype--type--num--number) - - [`calloc(size: number, fill = 0)`](#callocsize--number--fill--0) - - [`callocAs(type: Type, num: number, fill = 0)`](#callocastype--type--num--number--fill--0) - - [`realloc(addr: number, size: number)`](#reallocaddr--number--size--number) - - [`reallocArray(buf: TypedArray, num: number)`](#reallocarraybuf--typedarray--num--number) - - [`free(addr: number | TypedArray)`](#freeaddr--number--typedarray) + - [`malloc(size: number)`](#mallocsize-number) + - [`mallocAs(type: Type, num: number)`](#mallocastype-type-num-number) + - [`calloc(size: number, fill = 0)`](#callocsize-number-fill--0) + - [`callocAs(type: Type, num: number, fill = 0)`](#callocastype-type-num-number-fill--0) + - [`realloc(addr: number, size: number)`](#reallocaddr-number-size-number) + - [`reallocArray(buf: TypedArray, num: number)`](#reallocarraybuf-typedarray-num-number) + - [`free(addr: number | TypedArray)`](#freeaddr-number--typedarray) - [`freeAll()`](#freeall) - [`release()`](#release) - [`stats()`](#stats) @@ -361,4 +361,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/math/README.md b/packages/math/README.md index 30644fe8b7..256cb98390 100644 --- a/packages/math/README.md +++ b/packages/math/README.md @@ -105,4 +105,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2013 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2013 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/matrices/README.md b/packages/matrices/README.md index 40e7df8545..8ba6cef4e9 100644 --- a/packages/matrices/README.md +++ b/packages/matrices/README.md @@ -56,7 +56,7 @@ sensible). ### Related packages -- [@thi.ng/color](https://github.com/thi-ng/umbrella/tree/develop/packages/color) - Array-based color ops, conversions, multi-color gradients, presets +- [@thi.ng/color](https://github.com/thi-ng/umbrella/tree/develop/packages/color) - Array-based color types, conversions, transformations, declarative theme generation, multi-color gradients, presets - [@thi.ng/geom](https://github.com/thi-ng/umbrella/tree/develop/packages/geom) - Functional, polymorphic API for 2D geometry types & SVG generation - [@thi.ng/vector-pools](https://github.com/thi-ng/umbrella/tree/develop/packages/vector-pools) - Data structures for managing & working with strided, memory mapped vectors - [@thi.ng/vectors](https://github.com/thi-ng/umbrella/tree/develop/packages/vectors) - Optimized 2d/3d/4d and arbitrary length vector operations @@ -225,4 +225,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/memoize/README.md b/packages/memoize/README.md index 04b03affef..2554208b38 100644 --- a/packages/memoize/README.md +++ b/packages/memoize/README.md @@ -161,4 +161,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/mime/README.md b/packages/mime/README.md index ee18e907b8..b3d136da35 100644 --- a/packages/mime/README.md +++ b/packages/mime/README.md @@ -106,4 +106,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2020 Karsten Schmidt // Apache Software License 2.0 +© 2020 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/morton/README.md b/packages/morton/README.md index c673d5cc3b..c611a199ac 100644 --- a/packages/morton/README.md +++ b/packages/morton/README.md @@ -16,7 +16,7 @@ This project is part of the - [Dependencies](#dependencies) - [API](#api) - [ZCurve class](#zcurve-class) - - [Low level (2D / 3D only)](#low-level-2d---3d-only) + - [Low level (2D / 3D only)](#low-level-2d--3d-only) - [Authors](#authors) - [License](#license) @@ -157,4 +157,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2015 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2015 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/oquery/README.md b/packages/oquery/README.md index f664eac3a1..ed58cbf823 100644 --- a/packages/oquery/README.md +++ b/packages/oquery/README.md @@ -244,4 +244,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2020 Karsten Schmidt // Apache Software License 2.0 +© 2020 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/parse/README.md b/packages/parse/README.md index 71fb2fb28d..09bbe142aa 100644 --- a/packages/parse/README.md +++ b/packages/parse/README.md @@ -20,7 +20,7 @@ This project is part of the - [Context & reader creation](#context--reader-creation) - [Presets parsers](#presets-parsers) - [Primitives](#primitives) - - [Naming conventions / suffixes](#naming-conventions---suffixes) + - [Naming conventions / suffixes](#naming-conventions--suffixes) - [Anchors](#anchors) - [Combinators](#combinators) - [Transformers](#transformers) @@ -563,4 +563,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2020 Karsten Schmidt // Apache Software License 2.0 +© 2020 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/paths/README.md b/packages/paths/README.md index 8b352fed2b..6a0104d739 100644 --- a/packages/paths/README.md +++ b/packages/paths/README.md @@ -368,4 +368,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/pixel/README.md b/packages/pixel/README.md index 2402664448..15e5219c60 100644 --- a/packages/pixel/README.md +++ b/packages/pixel/README.md @@ -156,6 +156,7 @@ A selection: | | Pixel buffer manipulations | [Demo](https://demo.thi.ng/umbrella/pixel-basics/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/pixel-basics) | | | Port-Duff image compositing / alpha blending | [Demo](https://demo.thi.ng/umbrella/porter-duff/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/porter-duff) | | | Fork-join worker-based raymarch renderer | [Demo](https://demo.thi.ng/umbrella/shader-ast-workers/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/shader-ast-workers) | +| | Texture warping w/ 16bit color output | [Demo](https://demo.thi.ng/umbrella/text-canvas-image/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/text-canvas-image) | | | Minimal multi-pass / GPGPU example | [Demo](https://demo.thi.ng/umbrella/webgl-multipass/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/webgl-multipass) | ## API @@ -243,4 +244,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2019 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2019 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/pointfree-lang/README.md b/packages/pointfree-lang/README.md index 0a0c044fbe..4fc5d847e4 100644 --- a/packages/pointfree-lang/README.md +++ b/packages/pointfree-lang/README.md @@ -15,7 +15,7 @@ This project is part of the - [Dependencies](#dependencies) - [Usage examples](#usage-examples) - [Command line usage](#command-line-usage) - - [Include files / libraries](#include-files---libraries) + - [Include files / libraries](#include-files--libraries) - [CLI example](#cli-example) - [API](#api) - [Language & Syntax](#language--syntax) @@ -34,7 +34,7 @@ This project is part of the - [Variables](#variables) - [Dynamic scoping](#dynamic-scoping) - [Objects](#objects) -- [Ideas / Todos](#ideas---todos) +- [Ideas / Todos](#ideas--todos) - [Authors](#authors) - [License](#license) @@ -722,4 +722,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/pointfree/README.md b/packages/pointfree/README.md index 51d79e9f70..f3d0f75c0c 100644 --- a/packages/pointfree/README.md +++ b/packages/pointfree/README.md @@ -41,13 +41,13 @@ This project is part of the - [Core vocabulary](#core-vocabulary) - [D-Stack modification](#d-stack-modification) - [R-Stack modification](#r-stack-modification) - - [Word & quotation execution / combinators](#word--quotation-execution---combinators) + - [Word & quotation execution / combinators](#word--quotation-execution--combinators) - [Primitive math](#primitive-math) - [Logic](#logic) - [Environment](#environment) - - [Arrays, objects, strings](#arrays--objects--strings) + - [Arrays, objects, strings](#arrays-objects-strings) - [String specific](#string-specific) - - [I/O](#i-o) + - [I/O](#io) - [Error handling](#error-handling) - [Control flow](#control-flow) - [cond](#cond) @@ -1179,4 +1179,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2015 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2015 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/poisson/README.md b/packages/poisson/README.md index 6fb60e9dcb..4baa00a993 100644 --- a/packages/poisson/README.md +++ b/packages/poisson/README.md @@ -219,4 +219,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/porter-duff/README.md b/packages/porter-duff/README.md index 1d857cc212..600bba3107 100644 --- a/packages/porter-duff/README.md +++ b/packages/porter-duff/README.md @@ -20,8 +20,8 @@ This project is part of the - [Basic usage](#basic-usage) - [Operators](#operators) - [Custom operators](#custom-operators) - - [Additional operators / modifiers](#additional-operators---modifiers) - - [Pre/post-multiplied colors](#pre-post-multiplied-colors) + - [Additional operators / modifiers](#additional-operators--modifiers) + - [Pre/post-multiplied colors](#prepost-multiplied-colors) - [Authors](#authors) - [License](#license) @@ -200,4 +200,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/prefixes/README.md b/packages/prefixes/README.md index bc30a37f32..eb9ee44aff 100644 --- a/packages/prefixes/README.md +++ b/packages/prefixes/README.md @@ -14,7 +14,7 @@ This project is part of the - [Installation](#installation) - [Dependencies](#dependencies) - [API](#api) - - [Usage with @thi.ng/hiccup](#usage-with-thing-hiccup) + - [Usage with @thi.ng/hiccup](#usage-with-thinghiccup) - [Authors](#authors) - [License](#license) @@ -123,4 +123,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2020 Karsten Schmidt // Apache Software License 2.0 +© 2020 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/quad-edge/README.md b/packages/quad-edge/README.md index 22ef95b78b..bd6869b209 100644 --- a/packages/quad-edge/README.md +++ b/packages/quad-edge/README.md @@ -88,4 +88,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2015 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2015 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/ramp/README.md b/packages/ramp/README.md index 257d288f70..5fa17e203f 100644 --- a/packages/ramp/README.md +++ b/packages/ramp/README.md @@ -112,4 +112,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2019 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2019 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/random/README.md b/packages/random/README.md index ec366258f9..6bd079e602 100644 --- a/packages/random/README.md +++ b/packages/random/README.md @@ -134,4 +134,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/range-coder/README.md b/packages/range-coder/README.md index 8077be57b8..bd4f0bf990 100644 --- a/packages/range-coder/README.md +++ b/packages/range-coder/README.md @@ -95,4 +95,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2017 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2017 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/rdom-canvas/README.md b/packages/rdom-canvas/README.md index 76f9674996..5247fecc16 100644 --- a/packages/rdom-canvas/README.md +++ b/packages/rdom-canvas/README.md @@ -98,4 +98,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2020 Karsten Schmidt // Apache Software License 2.0 +© 2020 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/rdom-components/README.md b/packages/rdom-components/README.md index cec1d413a9..560fb20268 100644 --- a/packages/rdom-components/README.md +++ b/packages/rdom-components/README.md @@ -97,4 +97,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2020 Karsten Schmidt // Apache Software License 2.0 +© 2020 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/rdom/README.md b/packages/rdom/README.md index 87b4c69cf1..aa3d594ebb 100644 --- a/packages/rdom/README.md +++ b/packages/rdom/README.md @@ -12,7 +12,7 @@ This project is part of the - [About](#about) - [Status](#status) - [HIC SUNT DRACONES](#hic-sunt-dracones) - - [@thi.ng/atom integration](#thing-atom-integration) + - [@thi.ng/atom integration](#thingatom-integration) - [Support packages](#support-packages) - [Installation](#installation) - [Dependencies](#dependencies) @@ -171,4 +171,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2020 Karsten Schmidt // Apache Software License 2.0 +© 2020 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/resolve-map/README.md b/packages/resolve-map/README.md index 64495d2c77..e12d7bc912 100644 --- a/packages/resolve-map/README.md +++ b/packages/resolve-map/README.md @@ -299,4 +299,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/rle-pack/README.md b/packages/rle-pack/README.md index ac1866f15d..6ae6dee3d5 100644 --- a/packages/rle-pack/README.md +++ b/packages/rle-pack/README.md @@ -124,4 +124,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2017 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2017 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/router/README.md b/packages/router/README.md index 76ed1780ad..48606794dc 100644 --- a/packages/router/README.md +++ b/packages/router/README.md @@ -190,4 +190,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2014 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2014 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/rstream-csp/README.md b/packages/rstream-csp/README.md index b7f12a3561..1eab3a7d73 100644 --- a/packages/rstream-csp/README.md +++ b/packages/rstream-csp/README.md @@ -102,4 +102,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/rstream-dot/README.md b/packages/rstream-dot/README.md index fd67d31a4f..05e81a222f 100644 --- a/packages/rstream-dot/README.md +++ b/packages/rstream-dot/README.md @@ -125,4 +125,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/rstream-gestures/README.md b/packages/rstream-gestures/README.md index cfe5400837..1fccc616a0 100644 --- a/packages/rstream-gestures/README.md +++ b/packages/rstream-gestures/README.md @@ -197,4 +197,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/rstream-graph/README.md b/packages/rstream-graph/README.md index 30d316c686..8173eaa33f 100644 --- a/packages/rstream-graph/README.md +++ b/packages/rstream-graph/README.md @@ -234,4 +234,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/rstream-log-file/README.md b/packages/rstream-log-file/README.md index 7f5007a908..283114e3dc 100644 --- a/packages/rstream-log-file/README.md +++ b/packages/rstream-log-file/README.md @@ -89,4 +89,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2017 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2017 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/rstream-log/README.md b/packages/rstream-log/README.md index c22b0cfb52..c515384549 100644 --- a/packages/rstream-log/README.md +++ b/packages/rstream-log/README.md @@ -123,4 +123,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2017 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2017 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/rstream-query/README.md b/packages/rstream-query/README.md index 145eec6284..6c510a1b89 100644 --- a/packages/rstream-query/README.md +++ b/packages/rstream-query/README.md @@ -238,4 +238,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/rstream/README.md b/packages/rstream/README.md index cda86e2284..0e99970b55 100644 --- a/packages/rstream/README.md +++ b/packages/rstream/README.md @@ -27,14 +27,14 @@ This project is part of the - [Other stream creation helpers](#other-stream-creation-helpers) - [Meta streams](#meta-streams) - [Stream merging](#stream-merging) - - [Unordered merge from multiple inputs (dynamic add/remove)](#unordered-merge-from-multiple-inputs-dynamic-add-remove) + - [Unordered merge from multiple inputs (dynamic add/remove)](#unordered-merge-from-multiple-inputs-dynamic-addremove) - [Synchronized merge and labeled tuple objects](#synchronized-merge-and-labeled-tuple-objects) - [Stream splitting](#stream-splitting) - [Topic based splitting](#topic-based-splitting) - [Splitting via predicate](#splitting-via-predicate) - [Side-chaining](#side-chaining) - - [Input chunking / buffering, controlled by sidechain](#input-chunking---buffering--controlled-by-sidechain) - - [Input toggling, controlled by sidechain](#input-toggling--controlled-by-sidechain) + - [Input chunking / buffering, controlled by sidechain](#input-chunking--buffering-controlled-by-sidechain) + - [Input toggling, controlled by sidechain](#input-toggling-controlled-by-sidechain) - [Worker support](#worker-support) - [Parallel stream processing via workers](#parallel-stream-processing-via-workers) - [Stream processing via workers](#stream-processing-via-workers) @@ -827,4 +827,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2017 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2017 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/sax/README.md b/packages/sax/README.md index e023d66c9d..14ccc2bc8c 100644 --- a/packages/sax/README.md +++ b/packages/sax/README.md @@ -352,4 +352,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/scenegraph/README.md b/packages/scenegraph/README.md index fa86205f4b..3962507937 100644 --- a/packages/scenegraph/README.md +++ b/packages/scenegraph/README.md @@ -88,4 +88,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/seq/README.md b/packages/seq/README.md index 65b0f31a5b..85584d11b4 100644 --- a/packages/seq/README.md +++ b/packages/seq/README.md @@ -221,4 +221,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2019 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2019 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/sexpr/README.md b/packages/sexpr/README.md index d06d6fd138..bc3e69d555 100644 --- a/packages/sexpr/README.md +++ b/packages/sexpr/README.md @@ -295,4 +295,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2019 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2019 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/shader-ast-glsl/README.md b/packages/shader-ast-glsl/README.md index cec5c8e118..930f0f6cc0 100644 --- a/packages/shader-ast-glsl/README.md +++ b/packages/shader-ast-glsl/README.md @@ -147,4 +147,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2019 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2019 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/shader-ast-js/README.md b/packages/shader-ast-js/README.md index 35906b2dbb..f7728294bc 100644 --- a/packages/shader-ast-js/README.md +++ b/packages/shader-ast-js/README.md @@ -146,4 +146,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2019 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2019 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/shader-ast-stdlib/README.md b/packages/shader-ast-stdlib/README.md index db9d1465fa..5d9e68d63a 100644 --- a/packages/shader-ast-stdlib/README.md +++ b/packages/shader-ast-stdlib/README.md @@ -27,7 +27,7 @@ This project is part of the - [Lighting](#lighting) - [Math](#math) - [Matrix operations](#matrix-operations) - - [Noise / randomness](#noise---randomness) + - [Noise / randomness](#noise--randomness) - [Raymarching](#raymarching) - [Screen coordinates](#screen-coordinates) - [Signed Distance Fields](#signed-distance-fields) @@ -466,4 +466,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2019 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2019 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/shader-ast/README.md b/packages/shader-ast/README.md index e241153666..64c087bb8e 100644 --- a/packages/shader-ast/README.md +++ b/packages/shader-ast/README.md @@ -10,9 +10,9 @@ This project is part of the [@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo. - [About](#about) - - [Standard library of common, higher level operations](#standard-library-of-common--higher-level-operations) + - [Standard library of common, higher level operations](#standard-library-of-common-higher-level-operations) - [Benefits](#benefits) - - [Prior art / influences](#prior-art---influences) + - [Prior art / influences](#prior-art--influences) - [Future goals](#future-goals) - [Status](#status) - [Support packages](#support-packages) @@ -28,7 +28,7 @@ This project is part of the - [Bitwise](#bitwise) - [Swizzling](#swizzling) - [Array index lookups](#array-index-lookups) - - [Symbol definitions / assignments](#symbol-definitions---assignments) + - [Symbol definitions / assignments](#symbol-definitions--assignments) - [Control flow](#control-flow) - [If-Then-Else](#if-then-else) - [Ternary operator](#ternary-operator) @@ -39,7 +39,7 @@ This project is part of the - [Function arguments](#function-arguments) - [Inline functions](#inline-functions) - [Global scope](#global-scope) - - [Input / output variables / declarations](#input---output-variables---declarations) + - [Input / output variables / declarations](#input--output-variables--declarations) - [Program definition](#program-definition) - [Code generation](#code-generation) - [GLSL (ES)](#glsl-es) @@ -603,4 +603,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2019 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2019 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/simd/README.md b/packages/simd/README.md index 169a47ee80..cc137b55a9 100644 --- a/packages/simd/README.md +++ b/packages/simd/README.md @@ -209,4 +209,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2019 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2019 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/soa/README.md b/packages/soa/README.md index dabe0fe120..5388d31f46 100644 --- a/packages/soa/README.md +++ b/packages/soa/README.md @@ -100,4 +100,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2019 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2019 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/sparse/README.md b/packages/sparse/README.md index 2578865623..986f0c862a 100644 --- a/packages/sparse/README.md +++ b/packages/sparse/README.md @@ -71,4 +71,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/strings/README.md b/packages/strings/README.md index f2e6eb2e79..896f387262 100644 --- a/packages/strings/README.md +++ b/packages/strings/README.md @@ -19,7 +19,7 @@ This project is part of the - [General](#general) - [Case](#case) - [Numeric & radix-based](#numeric--radix-based) - - [Padding / truncation](#padding---truncation) + - [Padding / truncation](#padding--truncation) - [Units](#units) - [String creation & editing](#string-creation--editing) - [Authors](#authors) @@ -52,7 +52,7 @@ yarn add @thi.ng/strings ``` -Package sizes (gzipped, pre-treeshake): ESM: 2.87 KB / CJS: 3.10 KB / UMD: 2.98 KB +Package sizes (gzipped, pre-treeshake): ESM: 2.93 KB / CJS: 3.16 KB / UMD: 3.03 KB ## Dependencies @@ -174,4 +174,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2015 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2015 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/system/README.md b/packages/system/README.md index 9f2f1cb92c..b64a16f115 100644 --- a/packages/system/README.md +++ b/packages/system/README.md @@ -225,4 +225,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2020 Karsten Schmidt // Apache Software License 2.0 +© 2020 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/text-canvas/README.md b/packages/text-canvas/README.md index 5622543154..25149dd4e4 100644 --- a/packages/text-canvas/README.md +++ b/packages/text-canvas/README.md @@ -58,7 +58,7 @@ yarn add @thi.ng/text-canvas ``` -Package sizes (gzipped, pre-treeshake): ESM: 5.59 KB / CJS: 5.91 KB / UMD: 5.69 KB +Package sizes (gzipped, pre-treeshake): ESM: 5.63 KB / CJS: 5.94 KB / UMD: 5.71 KB ## Dependencies @@ -494,4 +494,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2020 Karsten Schmidt // Apache Software License 2.0 +© 2020 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/transducers-binary/README.md b/packages/transducers-binary/README.md index 48a1cbadcd..5a0c2ecf25 100644 --- a/packages/transducers-binary/README.md +++ b/packages/transducers-binary/README.md @@ -20,7 +20,7 @@ This project is part of the - [Streaming hexdump](#streaming-hexdump) - [Structured byte buffer construction](#structured-byte-buffer-construction) - [Bitstream](#bitstream) - - [Base64 & UTF-8 en/decoding](#base64--utf-8-en-decoding) + - [Base64 & UTF-8 en/decoding](#base64--utf-8-endecoding) - [Transducers](#transducers) - [Reducers](#reducers) - [Authors](#authors) @@ -311,4 +311,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/transducers-fsm/README.md b/packages/transducers-fsm/README.md index ea711cac6d..11516a3411 100644 --- a/packages/transducers-fsm/README.md +++ b/packages/transducers-fsm/README.md @@ -208,4 +208,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/transducers-hdom/README.md b/packages/transducers-hdom/README.md index 6f189afa5c..6621f6ae01 100644 --- a/packages/transducers-hdom/README.md +++ b/packages/transducers-hdom/README.md @@ -170,4 +170,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/transducers-patch/README.md b/packages/transducers-patch/README.md index 3b6643e267..8b943169d7 100644 --- a/packages/transducers-patch/README.md +++ b/packages/transducers-patch/README.md @@ -178,4 +178,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2020 Karsten Schmidt // Apache Software License 2.0 +© 2020 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/transducers-stats/README.md b/packages/transducers-stats/README.md index f0956afe30..578a45d07a 100644 --- a/packages/transducers-stats/README.md +++ b/packages/transducers-stats/README.md @@ -153,4 +153,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2017 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2017 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/transducers/README.md b/packages/transducers/README.md index 8a499f2b89..1204d439b6 100644 --- a/packages/transducers/README.md +++ b/packages/transducers/README.md @@ -25,11 +25,11 @@ This project is part of the - [Fuzzy search](#fuzzy-search) - [Histogram generation & result grouping](#histogram-generation--result-grouping) - [Pagination](#pagination) - - [Multiplexing / parallel transducer application](#multiplexing---parallel-transducer-application) + - [Multiplexing / parallel transducer application](#multiplexing--parallel-transducer-application) - [Moving average using sliding window](#moving-average-using-sliding-window) - [Benchmark function execution time](#benchmark-function-execution-time) - [Apply inspectors to debug transducer pipeline](#apply-inspectors-to-debug-transducer-pipeline) - - [Stream parsing / structuring](#stream-parsing---structuring) + - [Stream parsing / structuring](#stream-parsing--structuring) - [CSV parsing](#csv-parsing) - [Early termination](#early-termination) - [Scan operator](#scan-operator) @@ -52,7 +52,7 @@ This project is part of the - [transduceRight](#transduceright) - [run](#run) - [Transducers](#transducers) - - [Generators / Iterators](#generators---iterators) + - [Generators / Iterators](#generators--iterators) - [Reducers](#reducers) - [Authors](#authors) - [Maintainer](#maintainer) @@ -995,4 +995,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2016 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2016 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/unionstruct/README.md b/packages/unionstruct/README.md index c20796f038..43011c0278 100644 --- a/packages/unionstruct/README.md +++ b/packages/unionstruct/README.md @@ -256,4 +256,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2017 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2017 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/vclock/README.md b/packages/vclock/README.md index 3d1e990b79..27aa88825e 100644 --- a/packages/vclock/README.md +++ b/packages/vclock/README.md @@ -109,4 +109,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/vector-pools/README.md b/packages/vector-pools/README.md index 4ab2def645..cb9a977708 100644 --- a/packages/vector-pools/README.md +++ b/packages/vector-pools/README.md @@ -16,7 +16,7 @@ This project is part of the - [Dependencies](#dependencies) - [Usage examples](#usage-examples) - [API](#api) - - [WebGL geometry definition / manipulation](#webgl-geometry-definition---manipulation) + - [WebGL geometry definition / manipulation](#webgl-geometry-definition--manipulation) - [WASM interop](#wasm-interop) - [Authors](#authors) - [License](#license) @@ -284,4 +284,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2018 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2018 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/vectors/README.md b/packages/vectors/README.md index 74c67215ce..a43c3f1a1c 100644 --- a/packages/vectors/README.md +++ b/packages/vectors/README.md @@ -24,24 +24,24 @@ This project is part of the - [Component swizzling](#component-swizzling) - [Vector creation](#vector-creation) - [Basic vector math](#basic-vector-math) - - [Vector / vector](#vector---vector) - - [Vector / scalar](#vector---scalar) + - [Vector / vector](#vector--vector) + - [Vector / scalar](#vector--scalar) - [Combined operations](#combined-operations) - [Constraints](#constraints) - [Cross product](#cross-product) - [Dot product](#dot-product) - [Interpolation](#interpolation) - - [Normalization / magnitude](#normalization---magnitude) + - [Normalization / magnitude](#normalization--magnitude) - [Distances](#distances) - [Orientation](#orientation) - [Rotations](#rotations) - - [Polar / cartesian conversion](#polar---cartesian-conversion) + - [Polar / cartesian conversion](#polar--cartesian-conversion) - [Randomness](#randomness) - [Unary vector math ops](#unary-vector-math-ops) - [Vector array batch processing](#vector-array-batch-processing) - - [Comparison / equality](#comparison---equality) - - [Bitwise operations (int / uint vec)](#bitwise-operations-int---uint-vec) - - [Vector conversions / coercions](#vector-conversions---coercions) + - [Comparison / equality](#comparison--equality) + - [Bitwise operations (int / uint vec)](#bitwise-operations-int--uint-vec) + - [Vector conversions / coercions](#vector-conversions--coercions) - [Boolean vector logic](#boolean-vector-logic) - [Componentwise comparisons](#componentwise-comparisons) - [Hashing](#hashing) @@ -130,7 +130,7 @@ Partially ported from [thi.ng/geom-clj](http://thi.ng/geom-clj) (Clojure) and ### Related packages -- [@thi.ng/color](https://github.com/thi-ng/umbrella/tree/develop/packages/color) - Array-based color ops, conversions, multi-color gradients, presets +- [@thi.ng/color](https://github.com/thi-ng/umbrella/tree/develop/packages/color) - Array-based color types, conversions, transformations, declarative theme generation, multi-color gradients, presets - [@thi.ng/ecs](https://github.com/thi-ng/umbrella/tree/develop/packages/ecs) - Entity Component System based around typed arrays & sparse sets - [@thi.ng/geom](https://github.com/thi-ng/umbrella/tree/develop/packages/geom) - Functional, polymorphic API for 2D geometry types & SVG generation - [@thi.ng/hdom-canvas](https://github.com/thi-ng/umbrella/tree/develop/packages/hdom-canvas) - [@thi.ng/hdom](https://github.com/thi-ng/umbrella/tree/develop/packages/hdom) component wrapper for declarative canvas scenegraphs @@ -650,4 +650,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2015 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2015 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/viz/README.md b/packages/viz/README.md index 0a03b60059..efa6b19255 100644 --- a/packages/viz/README.md +++ b/packages/viz/README.md @@ -118,4 +118,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2014 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2014 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/webgl-msdf/README.md b/packages/webgl-msdf/README.md index 9e0777e9dd..b7af59ede2 100644 --- a/packages/webgl-msdf/README.md +++ b/packages/webgl-msdf/README.md @@ -101,4 +101,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2019 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2019 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/webgl-shadertoy/README.md b/packages/webgl-shadertoy/README.md index 8e8d54b905..84e294ccb5 100644 --- a/packages/webgl-shadertoy/README.md +++ b/packages/webgl-shadertoy/README.md @@ -156,4 +156,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2019 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2019 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/webgl/README.md b/packages/webgl/README.md index fd664b9928..08e782245d 100644 --- a/packages/webgl/README.md +++ b/packages/webgl/README.md @@ -166,4 +166,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2014 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2014 - 2021 Karsten Schmidt // Apache Software License 2.0 diff --git a/packages/zipper/README.md b/packages/zipper/README.md index eed08f270f..e6c3662ac8 100644 --- a/packages/zipper/README.md +++ b/packages/zipper/README.md @@ -160,4 +160,4 @@ If this project contributes to an academic publication, please cite it as: ## License -© 2015 - 2020 Karsten Schmidt // Apache Software License 2.0 +© 2015 - 2021 Karsten Schmidt // Apache Software License 2.0 From 214feebc58f1f0733c42c7bbac6e1fa08f8ccadc Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Fri, 1 Jan 2021 23:41:04 +0000 Subject: [PATCH 39/51] feat(tools): update check-imports tool - add support for processing entire packages or examples dirs - use `latest` version tag for example deps --- tools/src/check-imports.ts | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/tools/src/check-imports.ts b/tools/src/check-imports.ts index 4beb64ca4b..d56806c5d9 100644 --- a/tools/src/check-imports.ts +++ b/tools/src/check-imports.ts @@ -10,7 +10,7 @@ import { mapcat, transduce, } from "@thi.ng/transducers"; -import { readFileSync } from "fs"; +import { readdirSync, readFileSync, statSync } from "fs"; import { files, readJSON } from "./io"; import { shortName } from "./partials/package"; @@ -18,6 +18,7 @@ const RE_IMPORT = /\}? from "(?!\.)([a-z0-9@/.-]+)";/; const xform = comp( mapcat((f: string) => readFileSync(f).toString().split("\n")), + filter((line) => !line.startsWith(" * ")), map((line) => RE_IMPORT.exec(line)), filter((x) => !!x), map((x) => x![1]) @@ -26,9 +27,10 @@ const xform = comp( const usedDependencies = (rootDir: string) => transduce(xform, conj(), files(rootDir, ".ts")); -const updateImports = (project: string) => { - const pkgPath = project + "/package.json"; - const deps = usedDependencies(project + "/src"); +const updateImports = (root: string, latest = false) => { + console.log(root); + const pkgPath = root + "/package.json"; + const deps = usedDependencies(root + "/src"); const pkg = readJSON(pkgPath); !pkg.dependencies && (pkg.dependencies = {}); const mergedDeps = unionR([deps, keys(pkg.dependencies)]); @@ -38,7 +40,7 @@ const updateImports = (project: string) => { if (!d.startsWith("@thi.ng")) continue; if (deps.has(d) && !pkg.dependencies[d]) { const depPkg = readJSON(`packages/${shortName(d)}/package.json`); - pairs.push([d, `^${depPkg.version}`]); + pairs.push([d, latest ? "latest" : `^${depPkg.version}`]); edit = true; } else if (!deps.has(d)) { delete pkg.dependencies[d]; @@ -55,5 +57,19 @@ const updateImports = (project: string) => { } }; +const updateProjects = (parent: string, latest = false) => { + for (let pkg of readdirSync(parent)) { + pkg = `${parent}/${pkg}`; + if (statSync(pkg).isDirectory()) { + updateImports(pkg, latest); + } + } +}; + const project = process.argv[2]; -updateImports(project); + +project + ? project === "examples" + ? updateProjects("examples", true) + : updateImports(project) + : updateProjects("packages"); From 47c00c4cbd353f8627894577615fb737bb820026 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Fri, 1 Jan 2021 23:43:11 +0000 Subject: [PATCH 40/51] build(examples): update deps --- examples/ellipse-proximity/package.json | 1 + examples/fft-synth/package.json | 1 + examples/hdom-canvas-shapes/package.json | 1 - examples/hdom-local-render/package.json | 4 +++- examples/hiccup-canvas-arcs/package.json | 5 ++++- examples/interceptor-basics2/package.json | 4 ++-- examples/login-form/package.json | 2 +- examples/mandelbrot/package.json | 1 - examples/package-stats/package.json | 3 +-- examples/rdom-basics/package.json | 1 - examples/rotating-voronoi/package.json | 1 - examples/shader-ast-workers/package.json | 3 +-- examples/todo-list/package.json | 1 - examples/wolfram/package.json | 1 - 14 files changed, 14 insertions(+), 15 deletions(-) diff --git a/examples/ellipse-proximity/package.json b/examples/ellipse-proximity/package.json index 07373607df..6a9a9eb55a 100644 --- a/examples/ellipse-proximity/package.json +++ b/examples/ellipse-proximity/package.json @@ -14,6 +14,7 @@ "@thi.ng/geom-closest-point": "latest", "@thi.ng/rdom": "latest", "@thi.ng/rdom-canvas": "latest", + "@thi.ng/rstream": "latest", "@thi.ng/rstream-gestures": "latest", "@thi.ng/transducers": "latest", "@thi.ng/vectors": "latest" diff --git a/examples/fft-synth/package.json b/examples/fft-synth/package.json index 948fb00a6a..7fa047f3ca 100644 --- a/examples/fft-synth/package.json +++ b/examples/fft-synth/package.json @@ -11,6 +11,7 @@ "build": "../../node_modules/.bin/snowpack build" }, "dependencies": { + "@thi.ng/api": "latest", "@thi.ng/atom": "latest", "@thi.ng/dsp": "latest", "@thi.ng/hdom-canvas": "latest", diff --git a/examples/hdom-canvas-shapes/package.json b/examples/hdom-canvas-shapes/package.json index 577d04c531..77e9f5ce79 100644 --- a/examples/hdom-canvas-shapes/package.json +++ b/examples/hdom-canvas-shapes/package.json @@ -14,7 +14,6 @@ "@thi.ng/color": "latest", "@thi.ng/dl-asset": "latest", "@thi.ng/geom": "latest", - "@thi.ng/hdom": "latest", "@thi.ng/hdom-canvas": "latest", "@thi.ng/hdom-components": "latest", "@thi.ng/hiccup": "latest", diff --git a/examples/hdom-local-render/package.json b/examples/hdom-local-render/package.json index 0a17c02186..ad7fc2c9b1 100644 --- a/examples/hdom-local-render/package.json +++ b/examples/hdom-local-render/package.json @@ -11,8 +11,10 @@ "build": "../../node_modules/.bin/snowpack build" }, "dependencies": { - "@thi.ng/api": "latest", + "@thi.ng/hdom": "latest", + "@thi.ng/memoize": "latest", "@thi.ng/rstream": "latest", + "@thi.ng/transducers": "latest", "@thi.ng/transducers-hdom": "latest" }, "browserslist": [ diff --git a/examples/hiccup-canvas-arcs/package.json b/examples/hiccup-canvas-arcs/package.json index 143f5cae1f..bf08074e5f 100644 --- a/examples/hiccup-canvas-arcs/package.json +++ b/examples/hiccup-canvas-arcs/package.json @@ -11,11 +11,14 @@ "build": "../../node_modules/.bin/snowpack build" }, "dependencies": { + "@thi.ng/color": "latest", "@thi.ng/geom": "latest", "@thi.ng/hiccup-canvas": "latest", "@thi.ng/math": "latest", + "@thi.ng/random": "latest", "@thi.ng/rstream": "latest", - "@thi.ng/transducers": "latest" + "@thi.ng/transducers": "latest", + "@thi.ng/vectors": "latest" }, "browserslist": [ "last 3 Chrome versions" diff --git a/examples/interceptor-basics2/package.json b/examples/interceptor-basics2/package.json index 43bfa63cbd..76e2ca3f7b 100644 --- a/examples/interceptor-basics2/package.json +++ b/examples/interceptor-basics2/package.json @@ -12,9 +12,9 @@ }, "dependencies": { "@thi.ng/api": "latest", + "@thi.ng/atom": "latest", "@thi.ng/hdom": "latest", - "@thi.ng/interceptors": "latest", - "@thi.ng/paths": "latest" + "@thi.ng/interceptors": "latest" }, "browserslist": [ "last 3 Chrome versions" diff --git a/examples/login-form/package.json b/examples/login-form/package.json index 6570057ebe..b13667706f 100644 --- a/examples/login-form/package.json +++ b/examples/login-form/package.json @@ -11,9 +11,9 @@ "build": "../../node_modules/.bin/snowpack build" }, "dependencies": { + "@thi.ng/api": "latest", "@thi.ng/atom": "latest", "@thi.ng/hdom": "latest", - "@thi.ng/paths": "latest", "@thi.ng/strings": "latest" }, "browserslist": [ diff --git a/examples/mandelbrot/package.json b/examples/mandelbrot/package.json index ad5c04d1b2..31b67323e5 100644 --- a/examples/mandelbrot/package.json +++ b/examples/mandelbrot/package.json @@ -15,7 +15,6 @@ "@thi.ng/compose": "latest", "@thi.ng/dl-asset": "latest", "@thi.ng/equiv": "latest", - "@thi.ng/hdom": "latest", "@thi.ng/hdom-components": "latest", "@thi.ng/math": "latest", "@thi.ng/rstream": "latest", diff --git a/examples/package-stats/package.json b/examples/package-stats/package.json index 6b03edc49a..3fdc45f71f 100644 --- a/examples/package-stats/package.json +++ b/examples/package-stats/package.json @@ -21,8 +21,7 @@ "@thi.ng/math": "latest", "@thi.ng/paths": "latest", "@thi.ng/strings": "latest", - "@thi.ng/transducers": "latest", - "@thi.ng/vectors": "latest" + "@thi.ng/transducers": "latest" }, "browserslist": [ "last 3 Chrome versions" diff --git a/examples/rdom-basics/package.json b/examples/rdom-basics/package.json index 8f56b9a059..529d68106b 100644 --- a/examples/rdom-basics/package.json +++ b/examples/rdom-basics/package.json @@ -11,7 +11,6 @@ "build": "../../node_modules/.bin/snowpack build" }, "dependencies": { - "@thi.ng/api": "latest", "@thi.ng/checks": "latest", "@thi.ng/compose": "latest", "@thi.ng/rdom": "latest", diff --git a/examples/rotating-voronoi/package.json b/examples/rotating-voronoi/package.json index 1df325edbe..c6d2be81e8 100644 --- a/examples/rotating-voronoi/package.json +++ b/examples/rotating-voronoi/package.json @@ -23,7 +23,6 @@ "@thi.ng/geom": "latest", "@thi.ng/geom-resample": "latest", "@thi.ng/geom-voronoi": "latest", - "@thi.ng/hdom": "latest", "@thi.ng/hdom-canvas": "latest", "@thi.ng/math": "latest", "@thi.ng/random": "latest", diff --git a/examples/shader-ast-workers/package.json b/examples/shader-ast-workers/package.json index 4e118235fb..cd8209bade 100644 --- a/examples/shader-ast-workers/package.json +++ b/examples/shader-ast-workers/package.json @@ -12,10 +12,9 @@ "build:worker": "../../node_modules/.bin/webpack --config webpack.worker.js --mode production" }, "dependencies": { - "@thi.ng/api": "latest", "@thi.ng/bench": "latest", "@thi.ng/color": "latest", - "@thi.ng/hdom-canvas": "latest", + "@thi.ng/hiccup-canvas": "latest", "@thi.ng/math": "latest", "@thi.ng/pixel": "latest", "@thi.ng/rstream": "latest", diff --git a/examples/todo-list/package.json b/examples/todo-list/package.json index 578d230264..e94405fc58 100644 --- a/examples/todo-list/package.json +++ b/examples/todo-list/package.json @@ -14,7 +14,6 @@ "@thi.ng/api": "latest", "@thi.ng/atom": "latest", "@thi.ng/hdom": "latest", - "@thi.ng/paths": "latest", "@thi.ng/transducers": "latest" }, "browserslist": [ diff --git a/examples/wolfram/package.json b/examples/wolfram/package.json index 19609effea..e8e0296ab2 100644 --- a/examples/wolfram/package.json +++ b/examples/wolfram/package.json @@ -12,7 +12,6 @@ }, "dependencies": { "@thi.ng/dl-asset": "latest", - "@thi.ng/hdom": "latest", "@thi.ng/hdom-components": "latest", "@thi.ng/rstream": "latest", "@thi.ng/transducers": "latest", From 2a1031dacc42d300d24b9c02d3c8960439e8be93 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Fri, 1 Jan 2021 23:43:34 +0000 Subject: [PATCH 41/51] build(hiccup): update deps --- packages/hiccup/package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/hiccup/package.json b/packages/hiccup/package.json index 0ff197e2a5..f7eb3ec583 100644 --- a/packages/hiccup/package.json +++ b/packages/hiccup/package.json @@ -52,8 +52,7 @@ "dependencies": { "@thi.ng/api": "^6.13.5", "@thi.ng/checks": "^2.7.12", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/prefixes": "^0.1.9" + "@thi.ng/errors": "^1.2.25" }, "files": [ "*.js", From e56cae655ea38e15791823a80fadf27d3354a32b Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Sat, 2 Jan 2021 01:32:54 +0000 Subject: [PATCH 42/51] build: update/rewrite deploy scripts --- package.json | 2 +- scripts/deploy-docs | 108 +++++++++++++++++++++++++++++ scripts/{deploy => deploy-example} | 2 +- scripts/invalidate | 5 ++ scripts/upload-docs | 23 ------ 5 files changed, 115 insertions(+), 25 deletions(-) create mode 100755 scripts/deploy-docs rename scripts/{deploy => deploy-example} (98%) create mode 100755 scripts/invalidate delete mode 100755 scripts/upload-docs diff --git a/package.json b/package.json index f9a4dd155f..6ea840b423 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "doc:ae": "lerna run doc:ae && scripts/collect-apis", "doc:examples": "ts-node -P tools/tsconfig.json tools/src/readme-examples.ts", "examples": "scripts/build-examples", - "pub": "lerna publish --registry https://registry.npmjs.org/ && yarn doc && scripts/upload-docs", + "pub": "lerna publish --registry https://registry.npmjs.org/ && yarn doc && scripts/deploy-docs", "test": "yarn build && yarn test:only", "test:only": "lerna run test", "tool:imports": "ts-node -P tools/tsconfig.json tools/src/check-imports.ts", diff --git a/scripts/deploy-docs b/scripts/deploy-docs new file mode 100755 index 0000000000..edbd7560f3 --- /dev/null +++ b/scripts/deploy-docs @@ -0,0 +1,108 @@ +#!/usr/bin/env node +const fs = require("fs"); +const execSync = require("child_process").execSync; + +const PKG = process.argv[2]; + +const BUCKET = "s3://docs.thi.ng"; +const PREFIX = "/umbrella"; +const S3_OPTS = `--profile thing-umbrella --acl public-read`; +const SYNC_OPTS = `${S3_OPTS} --include "*" --exclude "*.sass" --exclude "*.ts"`; + +const MINIFY_OPTS = + "--file-ext html --collapse-whitespace --remove-comments --remove-optional-tags --remove-redundant-attributes --remove-script-type-attributes --remove-tag-whitespace --use-short-doctype --minify-css true"; + +function* files(dir, ext) { + for (let f of fs.readdirSync(dir)) { + const curr = dir + "/" + f; + if (f.endsWith(ext)) { + yield curr; + } else if (fs.statSync(curr).isDirectory()) { + yield* files(curr, ext); + } + } +} + +const sanitizeFile = (f) => { + let updated = false; + const src = fs + .readFileSync(f, "utf-8") + .replace( + /\{@link @thi\.ng\/([a-z0-9-]+)(#(\w+))?\s*\|\s*([^\}]+)\}/g, + (_, id, label) => { + updated = true; + return `${label}`; + } + ) + .replace( + /\{@link @thi\.ng\/([a-z0-9-]+)#(\w+)?\s*\}/g, + (_, id, sym) => { + updated = true; + let path = `${PREFIX}/${id}/`; + if (sym.startsWith("I")) { + path += `interfaces/${sym.toLowerCase()}.html`; + } else if (/^[a-z]/.test(sym)) { + path += `modules.html#${sym.toLowerCase()}`; + } + return `${sym}`; + } + ) + .replace(/\{@link @thi\.ng\/([a-z0-9-]+)#?\s*\}/g, (_, id) => { + updated = true; + return `@thi.ng/${id}`; + }); + if (updated) { + console.log("sanitizing:", f); + fs.writeFileSync(f, src, "utf-8"); + } +}; + +const sanitizePackage = (root) => { + for (let f of files(root, ".html")) { + sanitizeFile(f); + } +}; + +const minifyPackage = (root) => { + console.log("minifying", root); + execSync( + `node_modules/.bin/html-minifier-terser ${MINIFY_OPTS} --input-dir ${root} --output-dir ${root}` + ); +}; + +const syncPackage = (id, root) => { + console.log("syncing", root); + console.log( + execSync( + `aws s3 sync ${root} ${BUCKET}${PREFIX}/${id} ${SYNC_OPTS}` + ).toString() + ); +}; + +const processPackage = (id) => { + console.log("processing", id); + const root = `packages/${id}/doc`; + try { + sanitizePackage(root); + minifyPackage(root); + syncPackage(id, root); + } catch (e) { + console.warn(e); + } +}; + +if (PKG) { + processPackage(PKG); +} else { + for (let pkg of fs.readdirSync("packages")) { + if (fs.statSync(`packages/${pkg}`).isDirectory()) { + processPackage(pkg); + } + } +} + +execSync( + `node_modules/.bin/ts-node -P tools/tsconfig.json tools/src/doc-table.ts` +); + +execSync(`aws s3 cp docs.html ${BUCKET}/index.html ${S3_OPTS}`); diff --git a/scripts/deploy b/scripts/deploy-example similarity index 98% rename from scripts/deploy rename to scripts/deploy-example index 4792905cff..78eda7848b 100755 --- a/scripts/deploy +++ b/scripts/deploy-example @@ -9,7 +9,7 @@ const BUILD = `examples/${EXAMPLE}/build/`; const DEST_DIR = `/umbrella/${EXAMPLE}`; const BUCKET = `s3://demo.thi.ng${DEST_DIR}`; const CF_DISTRO = "EL2F1HMDPZ2RL"; -const PROFILE = "toxi-full"; +const PROFILE = "thing-umbrella"; const OPTS = `--profile ${PROFILE} --acl public-read`; const GZOPTS = `${OPTS} --content-encoding gzip`; diff --git a/scripts/invalidate b/scripts/invalidate new file mode 100755 index 0000000000..8c9317f6d2 --- /dev/null +++ b/scripts/invalidate @@ -0,0 +1,5 @@ +#!/bin/sh +aws cloudfront create-invalidation \ + --distribution-id EL2F1HMDPZ2RL \ + --paths "/umbrella/$1/*" \ + --profile thing-umbrella diff --git a/scripts/upload-docs b/scripts/upload-docs deleted file mode 100755 index 7420256b98..0000000000 --- a/scripts/upload-docs +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh - -readonly OPTS='--file-ext html --collapse-whitespace --remove-comments --remove-optional-tags --remove-redundant-attributes --remove-script-type-attributes --remove-tag-whitespace --use-short-doctype --minify-css true' - -if [ $# = 1 ]; then - modules="packages/$1/" -else - modules="packages/*/" -fi - -for m in $modules; do - name=$(echo "$m" | cut -d '/' -f 2) - echo "sanitizing: $name" - find "$m"/doc -name "*.html" -exec sed -i '' -E "s/\/([a-zA-Z_0-9\/-]+)\/node_modules\///g" '{}' \; - echo "minifying..." - node_modules/.bin/html-minifier-terser $OPTS --input-dir $m/doc --output-dir $m/doc - echo "syncing..." - aws s3 sync "$m"/doc s3://docs.thi.ng/umbrella/"$name" --profile toxi-s3 --acl public-read --include "*" --exclude "*.sass" --exclude "*.ts" -done - -node_modules/.bin/ts-node -P tools/tsconfig.json tools/src/doc-table.ts - -aws s3 cp docs.html s3://docs.thi.ng/index.html --profile toxi-s3 --acl public-read From 350fbe568b8abfc968a104cbada5abdeeb2b4107 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Sat, 2 Jan 2021 02:47:20 +0000 Subject: [PATCH 43/51] feat(color): update ColorRangeOpts, add docstrings --- packages/color/src/api.ts | 40 ++++++++++++++++ packages/color/src/color-range.ts | 80 ++++++++++++++++++++++++++----- 2 files changed, 109 insertions(+), 11 deletions(-) diff --git a/packages/color/src/api.ts b/packages/color/src/api.ts index e778bdce43..360eaef342 100644 --- a/packages/color/src/api.ts +++ b/packages/color/src/api.ts @@ -1,4 +1,5 @@ import type { FnU2, Tuple } from "@thi.ng/api"; +import type { IRandom } from "@thi.ng/random"; import type { ReadonlyVec, Vec } from "@thi.ng/vectors"; export type ColorMode = @@ -247,9 +248,48 @@ export interface ColorRange { w?: Range[]; } +export interface ColorRangeOpts { + /** + * Nunber of result colors. + * + * @defaultValue ∞ + */ + num: number; + /** + * Max. normalized & randomized hue shift for result colors. Only used if a + * base color is given. + * + * @defaultValue 0.025 + */ + variance: number; + /** + * Tolerance for grayscale check (used for both saturation and brightness). + * + * @defaultValue 0.001 + */ + eps: number; + /** + * PRNG instance to use for randomized values + * + * @defaultValue {@link @thi.ng/random#SYSTEM} + */ + rnd: IRandom; +} + export interface ColorThemePart { + /** + * Color range spec to use + */ range?: ColorRange | ColorRangePreset; + /** + * HSV(A) base color + */ base?: ReadonlyColor | CSSColorName; + /** + * Relative weight of this theme part + * + * @defaultValue 1.0 + */ weight?: number; } diff --git a/packages/color/src/color-range.ts b/packages/color/src/color-range.ts index 1d613c9f47..5c789b64fe 100644 --- a/packages/color/src/color-range.ts +++ b/packages/color/src/color-range.ts @@ -6,6 +6,7 @@ import { analogHSV } from "./analog"; import type { Color, ColorRange, + ColorRangeOpts, ColorRangePreset, ColorThemePart, ColorThemePartTuple, @@ -18,12 +19,10 @@ import { ensureHue } from "./internal/ensure-hue"; import { parseCss } from "./parse-css"; import { rgbaHsva } from "./rgba-hsva"; -export interface ColorRangeOpts { - num: number; - variance: number; - rnd: IRandom; -} - +/** + * Preset {@link ColorRange}s for use with {@link colorsFromRange}, + * {@link colorsFromTheme} etc. + */ export const RANGES: Record = { light: { s: [[0.3, 0.7]], @@ -104,26 +103,48 @@ const DEFAULT_RANGE: ColorRange = { const DEFAULT_OPTS: ColorRangeOpts = { num: Infinity, variance: 0.025, + eps: 1e-3, rnd: SYSTEM, }; const $rnd = (ranges: Range[], rnd: IRandom) => rnd.minmax(...ranges[rnd.int() % ranges.length]); +/** + * Takes a {@link ColorRange}, optional base color (HSV(A)) and options to produce + * a single new result color. This color is randomized within the channel limits + * of the given `range`. If a `base` color is provided, its hue is used as bias + * and the `variance` option defines the max. -/+ normalized hue shift of the + * result color. + * + * @remarks + * If the base color is a shade of gray (incl. black & white), the result will + * be another gray and is based on the range's black and white point sub-ranges. + * + * The alpha channel of the result color will only be randomized (based on + * `range.a` settings) iff no `base` color was provided. If `base` is given, the + * result will used the same alpha. + * + * A custom PRNG can be defined via the `rnd` option (default: `Math.random`). + * + * @param range + * @param base + * @param opts + */ export const colorFromRange = ( range: ColorRange, base?: ReadonlyColor, - opts?: Partial> + opts?: Partial> ): Color => { range = { ...DEFAULT_RANGE, ...range }; - const { variance, rnd } = { ...DEFAULT_OPTS, ...opts }; + const { variance, rnd, eps } = { ...DEFAULT_OPTS, ...opts }; let h: number, a: number; if (base) { h = base[0]; a = ensureAlpha(base[3]); - if (isBlackHsv(base)) return [h, 0, $rnd(range.b!, rnd), a]; - if (isWhiteHsv(base)) return [h, 0, $rnd(range.w!, rnd), a]; - if (isGrayHsv(base)) + if (isBlackHsv(base, eps)) return [h, 0, $rnd(range.b!, rnd), a]; + if (isWhiteHsv(base, eps)) return [h, 0, $rnd(range.w!, rnd), a]; + if (isGrayHsv(base, eps)) return [ h, 0, @@ -138,6 +159,15 @@ export const colorFromRange = ( return [h, $rnd(range.s!, rnd), $rnd(range.v!, rnd), a]; }; +/** + * Generator version of {@link colorFromRange}, by default yielding an infinite + * sequence of random colors based on given range, base color (optional) and + * other opts. Use `num` option to limit number of results. + * + * @param range + * @param base + * @param opts + */ export function* colorsFromRange( range: ColorRange, base?: ReadonlyColor, @@ -147,6 +177,7 @@ export function* colorsFromRange( while (--num >= 0) yield colorFromRange(range, base, opts); } +/** @internal */ const asThemePart = (p: ColorThemePart | ColorThemePartTuple) => { let spec: ColorThemePart; let weight: number; @@ -182,6 +213,33 @@ const asThemePart = (p: ColorThemePart | ColorThemePartTuple) => { return spec; }; +/** + * Probabilistic color theme generator. Yield randomized colors based on given + * weighted set of theme part specs. + * + * @remarks + * Each theme part is a tuple of either: + * + * - `[range, color, weight?]` + * - `[range, weight?]` + * - `[color, weight?]` + * + * `range` can be either a {@link ColorRange} or the name of a {@link RANGE} + * preset. Likewise, `color` can be an HSV(A) color tuple or a CSS color name. + * The `weight` of each part defines the relative importance/probability of this + * theme part, compared to others. Default weight is 1.0. + * + * @example + * ```ts + * [...colorsFromTheme( + * [["cool", "aliceblue"], ["bright", "orange", 0.25], ["hotpink", 0.1]], + * { num: 10 } + * )] + * ``` + * + * @param parts + * @param opts + */ export function* colorsFromTheme( parts: (ColorThemePart | ColorThemePartTuple)[], opts: Partial = {} From 75164aac1d81dbc4c97de32886350b675e145eb3 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Sat, 2 Jan 2021 02:49:06 +0000 Subject: [PATCH 44/51] docs(color): update docstrings, readme --- packages/color/README.md | 4 ++-- packages/color/src/cosine-gradients.ts | 26 +++++++++++++++++++++++--- packages/color/tpl.readme.md | 2 +- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/packages/color/README.md b/packages/color/README.md index 2478887aac..a37b9176dd 100644 --- a/packages/color/README.md +++ b/packages/color/README.md @@ -166,7 +166,7 @@ import { writeFileSync } from "fs"; // color theme definition using: // color range preset names, CSS colors and weights -const theme = [ +const theme: ColorThemePartTuple[] = [ ["cool", "goldenrod"], ["fresh", "hotpink", 0.1], ["light", "springgreen", 0.1], @@ -318,7 +318,7 @@ yarn add @thi.ng/color ``` -Package sizes (gzipped, pre-treeshake): ESM: 8.41 KB / CJS: 8.84 KB / UMD: 8.30 KB +Package sizes (gzipped, pre-treeshake): ESM: 8.42 KB / CJS: 8.85 KB / UMD: 8.31 KB ## Dependencies diff --git a/packages/color/src/cosine-gradients.ts b/packages/color/src/cosine-gradients.ts index c3d158336c..6e1d6f8345 100644 --- a/packages/color/src/cosine-gradients.ts +++ b/packages/color/src/cosine-gradients.ts @@ -18,9 +18,15 @@ import type { } from "./api"; import { clamp } from "./clamp"; -// see http://dev.thi.ng/gradients/ - Note: unlike the original Clojure version, -// these presets are for RGBA (though the alpha channel is configured to always -// be 1.0) +/** + * Preset cosine gradient definitions. See previews at: + * https://github.com/thi-ng/umbrella/tree/develop/packages/color#cosine-gradients + * + * @remarks + * See http://dev.thi.ng/gradients/ for a gradient designer. Note: unlike the + * linked original Clojure version, these presets here are for RGBA (though the + * alpha channel is configured to always be 1.0) + */ export const GRADIENTS: Record = { "blue-cyan": [ [0, 0.5, 0.5, 1], @@ -156,6 +162,13 @@ export const GRADIENTS: Record = { ], }; +/** + * Computes a single RGBA color for given gradient spec and normalized position + * `t` (in [0..1] interval). + * + * @param spec + * @param t + */ export const cosineColor = (spec: CosGradientSpec, t: number): Color => transduce( map(([a, b, c, d]) => @@ -166,6 +179,13 @@ export const cosineColor = (spec: CosGradientSpec, t: number): Color => zip(...spec) ); +/** + * Computes a full cosine gradient and returns an array of `n` sampled RGBA + * colors. + * + * @param n + * @param spec + */ export const cosineGradient = (n: number, spec: CosGradientSpec) => transduce(map(partial(cosineColor, spec)), push(), normRange(n - 1)); diff --git a/packages/color/tpl.readme.md b/packages/color/tpl.readme.md index c3d1d6b1e0..864aa223b2 100644 --- a/packages/color/tpl.readme.md +++ b/packages/color/tpl.readme.md @@ -149,7 +149,7 @@ import { writeFileSync } from "fs"; // color theme definition using: // color range preset names, CSS colors and weights -const theme = [ +const theme: ColorThemePartTuple[] = [ ["cool", "goldenrod"], ["fresh", "hotpink", 0.1], ["light", "springgreen", 0.1], From ce7984396ff0468383ae290b6de862b673c76fff Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Sat, 2 Jan 2021 03:03:00 +0000 Subject: [PATCH 45/51] docs(color): update readme (color sorting) --- assets/color/swatches-ex02.svg | 1 + packages/color/README.md | 19 +++++++++++++++++++ packages/color/tpl.readme.md | 18 ++++++++++++++++++ 3 files changed, 38 insertions(+) create mode 100644 assets/color/swatches-ex02.svg diff --git a/assets/color/swatches-ex02.svg b/assets/color/swatches-ex02.svg new file mode 100644 index 0000000000..08b60fa026 --- /dev/null +++ b/assets/color/swatches-ex02.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/color/README.md b/packages/color/README.md index a37b9176dd..321df95047 100644 --- a/packages/color/README.md +++ b/packages/color/README.md @@ -15,6 +15,7 @@ For the Clojure version, please visit: [thi.ng/color-clj](https://thi.ng/color-c - [Color spaces / modes](#color-spaces--modes) - [Class wrappers](#class-wrappers) - [Color theme generation](#color-theme-generation) + - [Color sorting](#color-sorting) - [RGBA transformations](#rgba-transformations) - [RGBA Porter-Duff compositing](#rgba-porter-duff-compositing) - [Cosine gradients](#cosine-gradients) @@ -188,6 +189,24 @@ writeFileSync("export/swatches-ex01.svg", serialize(doc)); ![example result color swatches](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-ex01.svg) +### Color sorting + +The `sortColors()` function can be used to sort an array of colors using +arbitrary sort criteria. The following comparators are bundled: + +- `selectChannel(i)` - sort by channel +- `proximityHSV(target)` - sort by distance to target color (HSV colors) +- `proximityRGB(target)` - sort by distance to target color (RGB colors) + +```ts +// (see above example) +const colors = [...colorsFromTheme(theme, { num: 200, variance: 0.05 })]; + +sortColors(colors, proximityHSV([0,1,0.5])); +``` + +![sorted color swatches](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-ex02.svg) + ### RGBA transformations RGBA [color matrix diff --git a/packages/color/tpl.readme.md b/packages/color/tpl.readme.md index 864aa223b2..b1f9e5e260 100644 --- a/packages/color/tpl.readme.md +++ b/packages/color/tpl.readme.md @@ -171,6 +171,24 @@ writeFileSync("export/swatches-ex01.svg", serialize(doc)); ![example result color swatches](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-ex01.svg) +### Color sorting + +The `sortColors()` function can be used to sort an array of colors using +arbitrary sort criteria. The following comparators are bundled: + +- `selectChannel(i)` - sort by channel +- `proximityHSV(target)` - sort by distance to target color (HSV colors) +- `proximityRGB(target)` - sort by distance to target color (RGB colors) + +```ts +// (see above example) +const colors = [...colorsFromTheme(theme, { num: 200, variance: 0.05 })]; + +sortColors(colors, proximityHSV([0,1,0.5])); +``` + +![sorted color swatches](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/color/swatches-ex02.svg) + ### RGBA transformations RGBA [color matrix From 118c4edbacd75249262f26962153f614148cedec Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Sat, 2 Jan 2021 14:08:23 +0000 Subject: [PATCH 46/51] feat(pixel): add FLOAT_HSVA format, update FloatFormatSpec - update FloatFormatSpec & defFloatFormat() to support manual conversions --- packages/pixel/src/api.ts | 5 +++ packages/pixel/src/format.ts | 63 +++++++++++++++++++++++++++++++++++- 2 files changed, 67 insertions(+), 1 deletion(-) diff --git a/packages/pixel/src/api.ts b/packages/pixel/src/api.ts index 636dd5e1b4..71188c6900 100644 --- a/packages/pixel/src/api.ts +++ b/packages/pixel/src/api.ts @@ -179,6 +179,11 @@ export interface FloatFormatSpec { alpha?: boolean; gray?: boolean; channels: Lane[]; + /** + * If given, {@link defFloatFormat} won't generate conversions and use those + * provided instead. + */ + convert?: IABGRConvert; } export interface FloatFormat extends IABGRConvert { diff --git a/packages/pixel/src/format.ts b/packages/pixel/src/format.ts index af1594bdbb..b5ed570573 100644 --- a/packages/pixel/src/format.ts +++ b/packages/pixel/src/format.ts @@ -1,5 +1,5 @@ import { assert, FnN, FnN2, IObjectOf, NumericArray, Type } from "@thi.ng/api"; -import { clamp01 } from "@thi.ng/math"; +import { clamp01, EPS } from "@thi.ng/math"; import { FloatFormat, FloatFormatSpec, @@ -13,6 +13,9 @@ import { compileFromABGR, compileToABGR } from "./codegen"; import { orderedDither } from "./dither"; import { luminanceABGR } from "./utils"; +const abs = Math.abs; +const min = Math.min; + const defChannel = ( ch: PackedChannelSpec, idx: number, @@ -204,6 +207,10 @@ export const defFloatFormat = (fmt: FloatFormatSpec) => { shift: chanShift, __float: true, }; + if (fmt.convert) { + Object.assign(res, fmt.convert); + return res; + } const to = (col: NumericArray, i: number) => ((col[i] * 0xff + 0.5) | 0) << chanShift[chan[i]]; const from: FnN2 = (col, i) => ((col >>> chanShift[chan[i]]) & 0xff) / 0xff; @@ -311,3 +318,57 @@ export const FLOAT_RGBA = defFloatFormat({ alpha: true, channels: [Lane.RED, Lane.GREEN, Lane.BLUE, Lane.ALPHA], }); + +export const FLOAT_HSVA = defFloatFormat({ + alpha: true, + channels: [Lane.RED, Lane.GREEN, Lane.BLUE, Lane.ALPHA], + convert: { + fromABGR: (x, out = []) => { + const a = ((x >>> 24) & 0xff) / 0xff; + const b = ((x >>> 16) & 0xff) / 0xff; + const g = ((x >>> 8) & 0xff) / 0xff; + const r = (x & 0xff) / 0xff; + let p0: number, p1: number, p2: number, p3: number; + let q0: number, q1: number, q2: number, q3: number; + if (g < b) { + p0 = b; + p1 = g; + p2 = -1; + p3 = 2 / 3; + } else { + p0 = g; + p1 = b; + p2 = 0; + p3 = -1 / 3; + } + if (r < p0) { + q0 = p0; + q1 = p1; + q2 = p3; + q3 = r; + } else { + q0 = r; + q1 = p1; + q2 = p2; + q3 = p0; + } + const c = q0 - min(q1, q3); + q0 = clamp01(q0); + out[0] = clamp01(abs((q3 - q1) / (6 * c + EPS) + q2)); + out[1] = clamp01(c / (q0 + EPS)); + out[2] = q0; + out[3] = a; + return out; + }, + toABGR: (x) => { + const h = x[0] * 6; + const s = x[1]; + const v = x[2] * 0xff; + const a = x[3] * 0xff; + const r = ((clamp01(abs(h - 3) - 1) - 1) * s + 1) * v; + const g = ((clamp01(2 - abs(h - 2)) - 1) * s + 1) * v; + const b = ((clamp01(2 - abs(h - 4)) - 1) * s + 1) * v; + return ((a << 24) | (b << 16) | (g << 8) | r) >>> 0; + }, + }, +}); From abd1ca80d455999dd8c3af87d24b4f1905d7806d Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Sat, 2 Jan 2021 16:02:58 +0000 Subject: [PATCH 47/51] feat(pixel): add FloatBuffer.fromPacked() - implement IPixelBuffer --- packages/pixel/src/api.ts | 1 + packages/pixel/src/float.ts | 28 +++++++++++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/pixel/src/api.ts b/packages/pixel/src/api.ts index 71188c6900..0e9c333899 100644 --- a/packages/pixel/src/api.ts +++ b/packages/pixel/src/api.ts @@ -209,6 +209,7 @@ export interface RawPixelBuffer extends CanvasContext { export interface IPixelBuffer { width: number; height: number; + format: IABGRConvert; pixels: T; /** diff --git a/packages/pixel/src/float.ts b/packages/pixel/src/float.ts index 55442252a9..c85768ec14 100644 --- a/packages/pixel/src/float.ts +++ b/packages/pixel/src/float.ts @@ -6,6 +6,7 @@ import type { BlitOpts, FloatFormat, FloatFormatSpec, + IPixelBuffer, PackedFormat, } from "./api"; import { defFloatFormat, FLOAT_GRAY } from "./format"; @@ -27,13 +28,34 @@ export const floatBuffer = ( pixels?: Float32Array ) => new FloatBuffer(w, h, fmt, pixels); -export class FloatBuffer { +export class FloatBuffer implements IPixelBuffer { + /** + * Creates a new `FloatBuffer` from given {@link PackedBuffer} and using + * provided {@link FloatFormat}. + * + * @remarks + * See {@link FloatBuffer.as} for reverse operation. + * + * @param src + * @param fmt + */ + static fromPacked(src: PackedBuffer, fmt: FloatFormat | FloatFormatSpec) { + const dest = new FloatBuffer(src.width, src.height, fmt); + const { pixels: dbuf, format: dfmt, stride } = dest; + const { pixels: sbuf, format: sfmt } = src; + for (let i = sbuf.length; --i >= 0; ) { + dbuf.set(dfmt.fromABGR(sfmt.toABGR(sbuf[i])), i * stride); + } + return dest; + } + width: number; height: number; stride: number; rowStride: number; pixels: Float32Array; format: FloatFormat; + protected __empty: NumericArray; constructor( w: number, @@ -49,6 +71,9 @@ export class FloatBuffer { this.stride = fmt.channels.length; this.rowStride = w * this.stride; this.pixels = pixels || new Float32Array(w * h * this.stride); + this.__empty = ( + Object.freeze(new Array(this.stride).fill(0)) + ); } as(fmt: PackedFormat) { @@ -75,6 +100,7 @@ export class FloatBuffer { const idx = (x | 0) * stride + (y | 0) * this.rowStride; return this.pixels.subarray(idx, idx + stride); } + return this.__empty; } setAt(x: number, y: number, col: NumericArray) { From 2dcbde5bb59bd87a33c9fb4362a4925db7ecb8bc Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Sat, 2 Jan 2021 16:03:38 +0000 Subject: [PATCH 48/51] refactor(pixel): implement IPixelBuffer for PackedBuffer --- packages/pixel/src/packed.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/pixel/src/packed.ts b/packages/pixel/src/packed.ts index 9a251f6059..b5635b3026 100644 --- a/packages/pixel/src/packed.ts +++ b/packages/pixel/src/packed.ts @@ -10,6 +10,7 @@ import { BayerSize, BlendFnInt, BlitOpts, + IPixelBuffer, Lane, PackedChannel, PackedFormat, @@ -57,7 +58,7 @@ export const buffer = ( pixels?: UIntArray ) => new PackedBuffer(w, h, fmt, pixels); -export class PackedBuffer { +export class PackedBuffer implements IPixelBuffer { static fromImage( img: HTMLImageElement, fmt: PackedFormat, From 52cd355fe0d4e8bc49663fc06b7594969ff5cae7 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Sat, 2 Jan 2021 17:07:24 +0000 Subject: [PATCH 49/51] docs: update readmes --- packages/hiccup/README.md | 1 - packages/paths/README.md | 1 - packages/pixel/README.md | 4 ++-- packages/text-canvas/README.md | 8 ++++---- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/hiccup/README.md b/packages/hiccup/README.md index a343c35d22..e5463f88e1 100644 --- a/packages/hiccup/README.md +++ b/packages/hiccup/README.md @@ -156,7 +156,6 @@ Package sizes (gzipped, pre-treeshake): ESM: 2.29 KB / CJS: 2.40 KB / UMD: 2.42 - [@thi.ng/api](https://github.com/thi-ng/umbrella/tree/develop/packages/api) - [@thi.ng/checks](https://github.com/thi-ng/umbrella/tree/develop/packages/checks) - [@thi.ng/errors](https://github.com/thi-ng/umbrella/tree/develop/packages/errors) -- [@thi.ng/prefixes](https://github.com/thi-ng/umbrella/tree/develop/packages/prefixes) ## Usage examples diff --git a/packages/paths/README.md b/packages/paths/README.md index 6a0104d739..2930aa6f2e 100644 --- a/packages/paths/README.md +++ b/packages/paths/README.md @@ -98,7 +98,6 @@ A selection: | ------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | --------------------------------------------------------- | -------------------------------------------------------------------------------------- | | | Using hdom in an Elm-like manner | [Demo](https://demo.thi.ng/umbrella/hdom-elm/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/hdom-elm) | | | Event handling w/ interceptors and side effects | [Demo](https://demo.thi.ng/umbrella/interceptor-basics2/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/interceptor-basics2) | -| | Basic SPA example with atom-based UI router | [Demo](https://demo.thi.ng/umbrella/login-form/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/login-form) | | | Minimal demo of using rstream constructs to form an interceptor-style event loop | [Demo](https://demo.thi.ng/umbrella/rstream-event-loop/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/rstream-event-loop) | | | Obligatory to-do list example with undo/redo | [Demo](https://demo.thi.ng/umbrella/todo-list/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/todo-list) | | | Triple store query results & sortable table | [Demo](https://demo.thi.ng/umbrella/triple-query/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/triple-query) | diff --git a/packages/pixel/README.md b/packages/pixel/README.md index 15e5219c60..3ecf008cb4 100644 --- a/packages/pixel/README.md +++ b/packages/pixel/README.md @@ -133,7 +133,7 @@ yarn add @thi.ng/pixel ``` -Package sizes (gzipped, pre-treeshake): ESM: 4.79 KB / CJS: 4.97 KB / UMD: 4.90 KB +Package sizes (gzipped, pre-treeshake): ESM: 5.15 KB / CJS: 5.34 KB / UMD: 5.25 KB ## Dependencies @@ -156,7 +156,7 @@ A selection: | | Pixel buffer manipulations | [Demo](https://demo.thi.ng/umbrella/pixel-basics/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/pixel-basics) | | | Port-Duff image compositing / alpha blending | [Demo](https://demo.thi.ng/umbrella/porter-duff/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/porter-duff) | | | Fork-join worker-based raymarch renderer | [Demo](https://demo.thi.ng/umbrella/shader-ast-workers/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/shader-ast-workers) | -| | Texture warping w/ 16bit color output | [Demo](https://demo.thi.ng/umbrella/text-canvas-image/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/text-canvas-image) | +| | Textmode image warping w/ 16bit color output | [Demo](https://demo.thi.ng/umbrella/text-canvas-image/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/text-canvas-image) | | | Minimal multi-pass / GPGPU example | [Demo](https://demo.thi.ng/umbrella/webgl-multipass/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/webgl-multipass) | ## API diff --git a/packages/text-canvas/README.md b/packages/text-canvas/README.md index 25149dd4e4..14f4db74b8 100644 --- a/packages/text-canvas/README.md +++ b/packages/text-canvas/README.md @@ -79,10 +79,10 @@ directory are using this package. A selection: -| Screenshot | Description | Live demo | Source | -| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------ | -| | 3D wireframe textmode demo | [Demo](https://demo.thi.ng/umbrella/text-canvas/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/text-canvas) | -| | Texture warping w/ 16bit color output | [Demo](https://demo.thi.ng/umbrella/text-canvas-image/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/text-canvas-image) | +| Screenshot | Description | Live demo | Source | +| ------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------ | +| | 3D wireframe textmode demo | [Demo](https://demo.thi.ng/umbrella/text-canvas/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/text-canvas) | +| | Textmode image warping w/ 16bit color output | [Demo](https://demo.thi.ng/umbrella/text-canvas-image/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/text-canvas-image) | ## API From 7197440fccb1e39516089f80b77aa32c046cb0af Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Sat, 2 Jan 2021 17:08:03 +0000 Subject: [PATCH 50/51] build(examples): update pkg meta --- examples/login-form/package.json | 6 +++++- examples/text-canvas-image/package.json | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/examples/login-form/package.json b/examples/login-form/package.json index b13667706f..5d0ae87e4c 100644 --- a/examples/login-form/package.json +++ b/examples/login-form/package.json @@ -23,7 +23,11 @@ "process": false }, "thi.ng": { - "readme": true + "readme": [ + "atom", + "hdom", + "strings" + ] }, "devDependencies": { "@types/snowpack-env": "^2.3.3" diff --git a/examples/text-canvas-image/package.json b/examples/text-canvas-image/package.json index 3dd443143e..d42ffb9319 100644 --- a/examples/text-canvas-image/package.json +++ b/examples/text-canvas-image/package.json @@ -1,7 +1,7 @@ { "name": "text-canvas-image", "version": "0.0.1", - "description": "Texture warping w/ 16bit color output", + "description": "Textmode image warping w/ 16bit color output", "repository": "https://github.com/thi-ng/umbrella", "author": "Karsten Schmidt ", "license": "Apache-2.0", From a2127bae6d16682027fd94190452b8404bf99a47 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Sat, 2 Jan 2021 17:10:43 +0000 Subject: [PATCH 51/51] Publish - @thi.ng/adapt-dpi@1.0.13 - @thi.ng/adjacency@0.2.1 - @thi.ng/api@6.13.6 - @thi.ng/arrays@0.9.0 - @thi.ng/associative@5.0.13 - @thi.ng/atom@4.1.26 - @thi.ng/bench@2.0.26 - @thi.ng/bencode@0.3.45 - @thi.ng/binary@2.0.21 - @thi.ng/bitfield@0.3.27 - @thi.ng/bitstream@1.1.31 - @thi.ng/cache@1.0.65 - @thi.ng/checks@2.7.13 - @thi.ng/color@2.1.0 - @thi.ng/colored-noise@0.1.8 - @thi.ng/compare@1.3.22 - @thi.ng/compose@1.4.23 - @thi.ng/csp@1.1.45 - @thi.ng/csv@0.1.4 - @thi.ng/date@0.2.5 - @thi.ng/dcons@2.3.5 - @thi.ng/defmulti@1.3.4 - @thi.ng/dgraph-dot@0.1.33 - @thi.ng/dgraph@1.3.4 - @thi.ng/diff@4.0.1 - @thi.ng/dl-asset@0.4.11 - @thi.ng/dlogic@1.0.37 - @thi.ng/dot@1.2.23 - @thi.ng/dsp-io-wav@0.1.35 - @thi.ng/dsp@3.0.1 - @thi.ng/dual-algebra@0.1.6 - @thi.ng/dynvar@0.1.29 - @thi.ng/ecs@0.4.5 - @thi.ng/egf@0.3.6 - @thi.ng/equiv@1.0.35 - @thi.ng/errors@1.2.26 - @thi.ng/fsm@2.4.31 - @thi.ng/fuzzy-viz@0.1.1 - @thi.ng/fuzzy@0.1.1 - @thi.ng/geom-accel@2.1.30 - @thi.ng/geom-api@2.0.1 - @thi.ng/geom-arc@0.3.19 - @thi.ng/geom-clip-line@1.2.15 - @thi.ng/geom-clip-poly@1.0.40 - @thi.ng/geom-closest-point@0.5.6 - @thi.ng/geom-fuzz@0.1.27 - @thi.ng/geom-hull@0.0.72 - @thi.ng/geom-io-obj@0.1.30 - @thi.ng/geom-isec@0.7.4 - @thi.ng/geom-isoline@0.1.70 - @thi.ng/geom-poly-utils@0.3.1 - @thi.ng/geom-resample@0.2.52 - @thi.ng/geom-splines@0.5.39 - @thi.ng/geom-subdiv-curve@0.1.70 - @thi.ng/geom-tessellate@0.2.53 - @thi.ng/geom-voronoi@0.2.15 - @thi.ng/geom@2.0.1 - @thi.ng/gp@0.2.1 - @thi.ng/grid-iterators@0.4.17 - @thi.ng/hdiff@0.1.21 - @thi.ng/hdom-canvas@3.0.25 - @thi.ng/hdom-components@4.0.19 - @thi.ng/hdom-mock@1.1.47 - @thi.ng/hdom@8.2.15 - @thi.ng/heaps@1.2.30 - @thi.ng/hex@0.1.3 - @thi.ng/hiccup-canvas@1.1.15 - @thi.ng/hiccup-carbon-icons@2.0.9 - @thi.ng/hiccup-css@1.1.44 - @thi.ng/hiccup-html@0.3.11 - @thi.ng/hiccup-markdown@1.2.40 - @thi.ng/hiccup-svg@3.7.0 - @thi.ng/hiccup@3.6.6 - @thi.ng/idgen@0.2.29 - @thi.ng/iges@1.1.54 - @thi.ng/imgui@0.2.47 - @thi.ng/interceptors@2.2.37 - @thi.ng/intervals@2.1.4 - @thi.ng/iterators@5.1.45 - @thi.ng/layout@0.1.27 - @thi.ng/leb128@1.0.39 - @thi.ng/lsys@0.2.67 - @thi.ng/malloc@4.2.5 - @thi.ng/math@3.0.1 - @thi.ng/matrices@0.6.39 - @thi.ng/memoize@2.1.8 - @thi.ng/mime@0.1.27 - @thi.ng/morton@2.0.30 - @thi.ng/oquery@0.2.3 - @thi.ng/parse@0.9.9 - @thi.ng/paths@4.1.12 - @thi.ng/pixel@0.5.0 - @thi.ng/pointfree-lang@1.4.19 - @thi.ng/pointfree@2.0.20 - @thi.ng/poisson@1.1.23 - @thi.ng/porter-duff@0.1.36 - @thi.ng/prefixes@0.1.10 - @thi.ng/quad-edge@0.2.28 - @thi.ng/ramp@0.1.41 - @thi.ng/random@2.1.4 - @thi.ng/range-coder@1.0.64 - @thi.ng/rdom-canvas@0.1.23 - @thi.ng/rdom-components@0.1.20 - @thi.ng/rdom@0.3.2 - @thi.ng/resolve-map@4.2.11 - @thi.ng/rle-pack@2.1.31 - @thi.ng/router@2.0.38 - @thi.ng/rstream-csp@2.0.47 - @thi.ng/rstream-dot@1.1.54 - @thi.ng/rstream-gestures@3.0.1 - @thi.ng/rstream-graph@3.2.48 - @thi.ng/rstream-log-file@0.1.69 - @thi.ng/rstream-log@3.1.54 - @thi.ng/rstream-query@1.1.54 - @thi.ng/rstream@5.0.12 - @thi.ng/sax@1.1.44 - @thi.ng/scenegraph@0.3.13 - @thi.ng/seq@0.2.29 - @thi.ng/sexpr@0.2.32 - @thi.ng/shader-ast-glsl@0.2.16 - @thi.ng/shader-ast-js@0.5.14 - @thi.ng/shader-ast-stdlib@0.5.8 - @thi.ng/shader-ast@0.7.8 - @thi.ng/simd@0.4.12 - @thi.ng/soa@0.1.43 - @thi.ng/sparse@0.1.60 - @thi.ng/strings@1.11.4 - @thi.ng/system@0.2.33 - @thi.ng/text-canvas@0.3.0 - @thi.ng/transducers-binary@0.6.1 - @thi.ng/transducers-fsm@1.1.44 - @thi.ng/transducers-hdom@2.0.76 - @thi.ng/transducers-patch@0.2.1 - @thi.ng/transducers-stats@1.1.45 - @thi.ng/transducers@7.5.4 - @thi.ng/unionstruct@1.1.29 - @thi.ng/vclock@0.1.3 - @thi.ng/vector-pools@1.0.53 - @thi.ng/vectors@4.8.4 - @thi.ng/viz@0.2.4 - @thi.ng/webgl-msdf@0.1.67 - @thi.ng/webgl-shadertoy@0.2.54 - @thi.ng/webgl@3.3.10 - @thi.ng/zipper@0.1.31 --- packages/adapt-dpi/CHANGELOG.md | 8 ++++ packages/adapt-dpi/package.json | 2 +- packages/adjacency/CHANGELOG.md | 8 ++++ packages/adjacency/package.json | 16 +++---- packages/api/CHANGELOG.md | 8 ++++ packages/api/package.json | 2 +- packages/arrays/CHANGELOG.md | 13 ++++++ packages/arrays/package.json | 14 +++--- packages/associative/CHANGELOG.md | 8 ++++ packages/associative/package.json | 18 ++++---- packages/atom/CHANGELOG.md | 8 ++++ packages/atom/package.json | 10 ++--- packages/bench/CHANGELOG.md | 8 ++++ packages/bench/package.json | 2 +- packages/bencode/CHANGELOG.md | 8 ++++ packages/bencode/package.json | 16 +++---- packages/binary/CHANGELOG.md | 8 ++++ packages/binary/package.json | 4 +- packages/bitfield/CHANGELOG.md | 8 ++++ packages/bitfield/package.json | 8 ++-- packages/bitstream/CHANGELOG.md | 8 ++++ packages/bitstream/package.json | 4 +- packages/cache/CHANGELOG.md | 8 ++++ packages/cache/package.json | 8 ++-- packages/checks/CHANGELOG.md | 8 ++++ packages/checks/package.json | 2 +- packages/color/CHANGELOG.md | 21 +++++++++ packages/color/package.json | 26 +++++------ packages/colored-noise/CHANGELOG.md | 8 ++++ packages/colored-noise/package.json | 18 ++++---- packages/compare/CHANGELOG.md | 8 ++++ packages/compare/package.json | 4 +- packages/compose/CHANGELOG.md | 8 ++++ packages/compose/package.json | 6 +-- packages/csp/CHANGELOG.md | 8 ++++ packages/csp/package.json | 14 +++--- packages/csv/CHANGELOG.md | 8 ++++ packages/csv/package.json | 10 ++--- packages/date/CHANGELOG.md | 8 ++++ packages/date/package.json | 4 +- packages/dcons/CHANGELOG.md | 8 ++++ packages/dcons/package.json | 16 +++---- packages/defmulti/CHANGELOG.md | 8 ++++ packages/defmulti/package.json | 6 +-- packages/dgraph-dot/CHANGELOG.md | 8 ++++ packages/dgraph-dot/package.json | 8 ++-- packages/dgraph/CHANGELOG.md | 8 ++++ packages/dgraph/package.json | 12 ++--- packages/diff/CHANGELOG.md | 8 ++++ packages/diff/package.json | 6 +-- packages/dl-asset/CHANGELOG.md | 8 ++++ packages/dl-asset/package.json | 8 ++-- packages/dlogic/CHANGELOG.md | 8 ++++ packages/dlogic/package.json | 4 +- packages/dot/CHANGELOG.md | 8 ++++ packages/dot/package.json | 6 +-- packages/dsp-io-wav/CHANGELOG.md | 8 ++++ packages/dsp-io-wav/package.json | 10 ++--- packages/dsp/CHANGELOG.md | 8 ++++ packages/dsp/package.json | 14 +++--- packages/dual-algebra/CHANGELOG.md | 8 ++++ packages/dual-algebra/package.json | 4 +- packages/dynvar/CHANGELOG.md | 8 ++++ packages/dynvar/package.json | 4 +- packages/ecs/CHANGELOG.md | 8 ++++ packages/ecs/package.json | 20 ++++----- packages/egf/CHANGELOG.md | 8 ++++ packages/egf/package.json | 20 ++++----- packages/equiv/CHANGELOG.md | 8 ++++ packages/equiv/package.json | 2 +- packages/errors/CHANGELOG.md | 8 ++++ packages/errors/package.json | 2 +- packages/fsm/CHANGELOG.md | 8 ++++ packages/fsm/package.json | 14 +++--- packages/fuzzy-viz/CHANGELOG.md | 8 ++++ packages/fuzzy-viz/package.json | 16 +++---- packages/fuzzy/CHANGELOG.md | 8 ++++ packages/fuzzy/package.json | 6 +-- packages/geom-accel/CHANGELOG.md | 8 ++++ packages/geom-accel/package.json | 22 ++++----- packages/geom-api/CHANGELOG.md | 8 ++++ packages/geom-api/package.json | 6 +-- packages/geom-arc/CHANGELOG.md | 8 ++++ packages/geom-arc/package.json | 12 ++--- packages/geom-clip-line/CHANGELOG.md | 8 ++++ packages/geom-clip-line/package.json | 8 ++-- packages/geom-clip-poly/CHANGELOG.md | 8 ++++ packages/geom-clip-poly/package.json | 10 ++--- packages/geom-closest-point/CHANGELOG.md | 8 ++++ packages/geom-closest-point/package.json | 8 ++-- packages/geom-fuzz/CHANGELOG.md | 8 ++++ packages/geom-fuzz/package.json | 22 ++++----- packages/geom-hull/CHANGELOG.md | 8 ++++ packages/geom-hull/package.json | 6 +-- packages/geom-io-obj/CHANGELOG.md | 8 ++++ packages/geom-io-obj/package.json | 6 +-- packages/geom-isec/CHANGELOG.md | 11 +++++ packages/geom-isec/package.json | 12 ++--- packages/geom-isoline/CHANGELOG.md | 8 ++++ packages/geom-isoline/package.json | 8 ++-- packages/geom-poly-utils/CHANGELOG.md | 8 ++++ packages/geom-poly-utils/package.json | 12 ++--- packages/geom-resample/CHANGELOG.md | 8 ++++ packages/geom-resample/package.json | 12 ++--- packages/geom-splines/CHANGELOG.md | 8 ++++ packages/geom-splines/package.json | 16 +++---- packages/geom-subdiv-curve/CHANGELOG.md | 8 ++++ packages/geom-subdiv-curve/package.json | 10 ++--- packages/geom-tessellate/CHANGELOG.md | 8 ++++ packages/geom-tessellate/package.json | 14 +++--- packages/geom-voronoi/CHANGELOG.md | 8 ++++ packages/geom-voronoi/package.json | 20 ++++----- packages/geom/CHANGELOG.md | 8 ++++ packages/geom/package.json | 54 +++++++++++------------ packages/gp/CHANGELOG.md | 8 ++++ packages/gp/package.json | 12 ++--- packages/grid-iterators/CHANGELOG.md | 8 ++++ packages/grid-iterators/package.json | 12 ++--- packages/hdiff/CHANGELOG.md | 8 ++++ packages/hdiff/package.json | 12 ++--- packages/hdom-canvas/CHANGELOG.md | 8 ++++ packages/hdom-canvas/package.json | 12 ++--- packages/hdom-components/CHANGELOG.md | 8 ++++ packages/hdom-components/package.json | 14 +++--- packages/hdom-mock/CHANGELOG.md | 8 ++++ packages/hdom-mock/package.json | 8 ++-- packages/hdom/CHANGELOG.md | 8 ++++ packages/hdom/package.json | 18 ++++---- packages/heaps/CHANGELOG.md | 8 ++++ packages/heaps/package.json | 6 +-- packages/hex/CHANGELOG.md | 8 ++++ packages/hex/package.json | 2 +- packages/hiccup-canvas/CHANGELOG.md | 8 ++++ packages/hiccup-canvas/package.json | 12 ++--- packages/hiccup-carbon-icons/CHANGELOG.md | 8 ++++ packages/hiccup-carbon-icons/package.json | 4 +- packages/hiccup-css/CHANGELOG.md | 8 ++++ packages/hiccup-css/package.json | 10 ++--- packages/hiccup-html/CHANGELOG.md | 8 ++++ packages/hiccup-html/package.json | 4 +- packages/hiccup-markdown/CHANGELOG.md | 8 ++++ packages/hiccup-markdown/package.json | 22 ++++----- packages/hiccup-svg/CHANGELOG.md | 11 +++++ packages/hiccup-svg/package.json | 8 ++-- packages/hiccup/CHANGELOG.md | 8 ++++ packages/hiccup/package.json | 10 ++--- packages/idgen/CHANGELOG.md | 11 +++++ packages/idgen/package.json | 4 +- packages/iges/CHANGELOG.md | 8 ++++ packages/iges/package.json | 14 +++--- packages/imgui/CHANGELOG.md | 8 ++++ packages/imgui/package.json | 22 ++++----- packages/interceptors/CHANGELOG.md | 8 ++++ packages/interceptors/package.json | 12 ++--- packages/intervals/CHANGELOG.md | 8 ++++ packages/intervals/package.json | 10 ++--- packages/iterators/CHANGELOG.md | 8 ++++ packages/iterators/package.json | 8 ++-- packages/layout/CHANGELOG.md | 8 ++++ packages/layout/package.json | 4 +- packages/leb128/CHANGELOG.md | 8 ++++ packages/leb128/package.json | 8 ++-- packages/lsys/CHANGELOG.md | 8 ++++ packages/lsys/package.json | 16 +++---- packages/malloc/CHANGELOG.md | 8 ++++ packages/malloc/package.json | 10 ++--- packages/math/CHANGELOG.md | 8 ++++ packages/math/package.json | 4 +- packages/matrices/CHANGELOG.md | 8 ++++ packages/matrices/package.json | 10 ++--- packages/memoize/CHANGELOG.md | 8 ++++ packages/memoize/package.json | 4 +- packages/mime/CHANGELOG.md | 8 ++++ packages/mime/package.json | 4 +- packages/morton/CHANGELOG.md | 8 ++++ packages/morton/package.json | 8 ++-- packages/oquery/CHANGELOG.md | 8 ++++ packages/oquery/package.json | 10 ++--- packages/parse/CHANGELOG.md | 8 ++++ packages/parse/package.json | 12 ++--- packages/paths/CHANGELOG.md | 8 ++++ packages/paths/package.json | 8 ++-- packages/pixel/CHANGELOG.md | 12 +++++ packages/pixel/package.json | 10 ++--- packages/pointfree-lang/CHANGELOG.md | 8 ++++ packages/pointfree-lang/package.json | 10 ++--- packages/pointfree/CHANGELOG.md | 8 ++++ packages/pointfree/package.json | 12 ++--- packages/poisson/CHANGELOG.md | 8 ++++ packages/poisson/package.json | 14 +++--- packages/porter-duff/CHANGELOG.md | 8 ++++ packages/porter-duff/package.json | 6 +-- packages/prefixes/CHANGELOG.md | 8 ++++ packages/prefixes/package.json | 2 +- packages/quad-edge/CHANGELOG.md | 8 ++++ packages/quad-edge/package.json | 2 +- packages/ramp/CHANGELOG.md | 8 ++++ packages/ramp/package.json | 12 ++--- packages/random/CHANGELOG.md | 8 ++++ packages/random/package.json | 8 ++-- packages/range-coder/CHANGELOG.md | 8 ++++ packages/range-coder/package.json | 6 +-- packages/rdom-canvas/CHANGELOG.md | 8 ++++ packages/rdom-canvas/package.json | 16 +++---- packages/rdom-components/CHANGELOG.md | 8 ++++ packages/rdom-components/package.json | 16 +++---- packages/rdom/CHANGELOG.md | 8 ++++ packages/rdom/package.json | 18 ++++---- packages/resolve-map/CHANGELOG.md | 8 ++++ packages/resolve-map/package.json | 10 ++--- packages/rle-pack/CHANGELOG.md | 8 ++++ packages/rle-pack/package.json | 6 +-- packages/router/CHANGELOG.md | 8 ++++ packages/router/package.json | 10 ++--- packages/rstream-csp/CHANGELOG.md | 8 ++++ packages/rstream-csp/package.json | 6 +-- packages/rstream-dot/CHANGELOG.md | 8 ++++ packages/rstream-dot/package.json | 4 +- packages/rstream-gestures/CHANGELOG.md | 8 ++++ packages/rstream-gestures/package.json | 12 ++--- packages/rstream-graph/CHANGELOG.md | 8 ++++ packages/rstream-graph/package.json | 18 ++++---- packages/rstream-log-file/CHANGELOG.md | 8 ++++ packages/rstream-log-file/package.json | 4 +- packages/rstream-log/CHANGELOG.md | 8 ++++ packages/rstream-log/package.json | 12 ++--- packages/rstream-query/CHANGELOG.md | 8 ++++ packages/rstream-query/package.json | 20 ++++----- packages/rstream/CHANGELOG.md | 8 ++++ packages/rstream/package.json | 16 +++---- packages/sax/CHANGELOG.md | 8 ++++ packages/sax/package.json | 8 ++-- packages/scenegraph/CHANGELOG.md | 8 ++++ packages/scenegraph/package.json | 10 ++--- packages/seq/CHANGELOG.md | 8 ++++ packages/seq/package.json | 6 +-- packages/sexpr/CHANGELOG.md | 8 ++++ packages/sexpr/package.json | 8 ++-- packages/shader-ast-glsl/CHANGELOG.md | 8 ++++ packages/shader-ast-glsl/package.json | 10 ++--- packages/shader-ast-js/CHANGELOG.md | 8 ++++ packages/shader-ast-js/package.json | 18 ++++---- packages/shader-ast-stdlib/CHANGELOG.md | 8 ++++ packages/shader-ast-stdlib/package.json | 6 +-- packages/shader-ast/CHANGELOG.md | 8 ++++ packages/shader-ast/package.json | 12 ++--- packages/simd/CHANGELOG.md | 8 ++++ packages/simd/package.json | 4 +- packages/soa/CHANGELOG.md | 8 ++++ packages/soa/package.json | 12 ++--- packages/sparse/CHANGELOG.md | 8 ++++ packages/sparse/package.json | 6 +-- packages/strings/CHANGELOG.md | 11 +++++ packages/strings/package.json | 10 ++--- packages/system/CHANGELOG.md | 8 ++++ packages/system/package.json | 6 +-- packages/text-canvas/CHANGELOG.md | 12 +++++ packages/text-canvas/package.json | 18 ++++---- packages/transducers-binary/CHANGELOG.md | 8 ++++ packages/transducers-binary/package.json | 14 +++--- packages/transducers-fsm/CHANGELOG.md | 8 ++++ packages/transducers-fsm/package.json | 6 +-- packages/transducers-hdom/CHANGELOG.md | 8 ++++ packages/transducers-hdom/package.json | 8 ++-- packages/transducers-patch/CHANGELOG.md | 8 ++++ packages/transducers-patch/package.json | 12 ++--- packages/transducers-stats/CHANGELOG.md | 8 ++++ packages/transducers-stats/package.json | 10 ++--- packages/transducers/CHANGELOG.md | 8 ++++ packages/transducers/package.json | 18 ++++---- packages/unionstruct/CHANGELOG.md | 8 ++++ packages/unionstruct/package.json | 2 +- packages/vclock/CHANGELOG.md | 8 ++++ packages/vclock/package.json | 4 +- packages/vector-pools/CHANGELOG.md | 8 ++++ packages/vector-pools/package.json | 14 +++--- packages/vectors/CHANGELOG.md | 8 ++++ packages/vectors/package.json | 20 ++++----- packages/viz/CHANGELOG.md | 8 ++++ packages/viz/package.json | 18 ++++---- packages/webgl-msdf/CHANGELOG.md | 8 ++++ packages/webgl-msdf/package.json | 14 +++--- packages/webgl-shadertoy/CHANGELOG.md | 8 ++++ packages/webgl-shadertoy/package.json | 10 ++--- packages/webgl/CHANGELOG.md | 8 ++++ packages/webgl/package.json | 32 +++++++------- packages/zipper/CHANGELOG.md | 8 ++++ packages/zipper/package.json | 8 ++-- 288 files changed, 1956 insertions(+), 766 deletions(-) diff --git a/packages/adapt-dpi/CHANGELOG.md b/packages/adapt-dpi/CHANGELOG.md index be95a5bb35..c7bd982d0e 100644 --- a/packages/adapt-dpi/CHANGELOG.md +++ b/packages/adapt-dpi/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.0.13](https://github.com/thi-ng/umbrella/compare/@thi.ng/adapt-dpi@1.0.12...@thi.ng/adapt-dpi@1.0.13) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/adapt-dpi + + + + + ## [1.0.12](https://github.com/thi-ng/umbrella/compare/@thi.ng/adapt-dpi@1.0.11...@thi.ng/adapt-dpi@1.0.12) (2020-12-22) **Note:** Version bump only for package @thi.ng/adapt-dpi diff --git a/packages/adapt-dpi/package.json b/packages/adapt-dpi/package.json index a584bd844a..7db8a00703 100644 --- a/packages/adapt-dpi/package.json +++ b/packages/adapt-dpi/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/adapt-dpi", - "version": "1.0.12", + "version": "1.0.13", "description": "HDPI canvas adapter / styling utility", "module": "./index.js", "main": "./lib/index.js", diff --git a/packages/adjacency/CHANGELOG.md b/packages/adjacency/CHANGELOG.md index b7c2e25397..7466adef36 100644 --- a/packages/adjacency/CHANGELOG.md +++ b/packages/adjacency/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/adjacency@0.2.0...@thi.ng/adjacency@0.2.1) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/adjacency + + + + + # [0.2.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/adjacency@0.1.67...@thi.ng/adjacency@0.2.0) (2020-12-22) diff --git a/packages/adjacency/package.json b/packages/adjacency/package.json index 4cf0f23010..982e32ac87 100644 --- a/packages/adjacency/package.json +++ b/packages/adjacency/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/adjacency", - "version": "0.2.0", + "version": "0.2.1", "description": "Sparse & bitwise adjacency matrices and related functions for directed & undirected graphs", "module": "./index.js", "main": "./lib/index.js", @@ -40,7 +40,7 @@ "devDependencies": { "@istanbuljs/nyc-config-typescript": "^1.0.1", "@microsoft/api-extractor": "^7.12.1", - "@thi.ng/vectors": "^4.8.3", + "@thi.ng/vectors": "^4.8.4", "@types/mocha": "^8.2.0", "@types/node": "^14.14.14", "mocha": "^8.2.1", @@ -50,12 +50,12 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/binary": "^2.0.20", - "@thi.ng/bitfield": "^0.3.26", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/dcons": "^2.3.4", - "@thi.ng/sparse": "^0.1.59" + "@thi.ng/api": "^6.13.6", + "@thi.ng/binary": "^2.0.21", + "@thi.ng/bitfield": "^0.3.27", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/dcons": "^2.3.5", + "@thi.ng/sparse": "^0.1.60" }, "files": [ "*.js", diff --git a/packages/api/CHANGELOG.md b/packages/api/CHANGELOG.md index 4314914208..f2a09997fd 100644 --- a/packages/api/CHANGELOG.md +++ b/packages/api/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.13.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/api@6.13.5...@thi.ng/api@6.13.6) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/api + + + + + ## [6.13.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/api@6.13.4...@thi.ng/api@6.13.5) (2020-12-22) **Note:** Version bump only for package @thi.ng/api diff --git a/packages/api/package.json b/packages/api/package.json index a388f7a483..f6d001bae6 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/api", - "version": "6.13.5", + "version": "6.13.6", "description": "Common, generic types, interfaces & mixins", "module": "./index.js", "main": "./lib/index.js", diff --git a/packages/arrays/CHANGELOG.md b/packages/arrays/CHANGELOG.md index 0654915056..5e47416c83 100644 --- a/packages/arrays/CHANGELOG.md +++ b/packages/arrays/CHANGELOG.md @@ -3,6 +3,19 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [0.9.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/arrays@0.8.5...@thi.ng/arrays@0.9.0) (2021-01-02) + + +### Features + +* **arrays:** add bisect(), bisectWith() ([17d06a4](https://github.com/thi-ng/umbrella/commit/17d06a43e338aca5f2dc61110382363639daecc5)) +* **arrays:** add into(), sortByCachedKey() ([b94f64c](https://github.com/thi-ng/umbrella/commit/b94f64c2c351cfed5ea9ade5e42ad0b7076ef9e9)) +* **arrays:** update sortByCachedKey(), add tests ([64e8f6e](https://github.com/thi-ng/umbrella/commit/64e8f6e4e83c26c73e23a4831483bd328b78bc49)) + + + + + ## [0.8.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/arrays@0.8.4...@thi.ng/arrays@0.8.5) (2020-12-22) **Note:** Version bump only for package @thi.ng/arrays diff --git a/packages/arrays/package.json b/packages/arrays/package.json index b7b703eb6b..bb0173ad8a 100644 --- a/packages/arrays/package.json +++ b/packages/arrays/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/arrays", - "version": "0.8.5", + "version": "0.9.0", "description": "Array / Arraylike utilities", "module": "./index.js", "main": "./lib/index.js", @@ -49,12 +49,12 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/compare": "^1.3.21", - "@thi.ng/equiv": "^1.0.34", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/random": "^2.1.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/compare": "^1.3.22", + "@thi.ng/equiv": "^1.0.35", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/random": "^2.1.4" }, "files": [ "*.js", diff --git a/packages/associative/CHANGELOG.md b/packages/associative/CHANGELOG.md index 8ce196d0c8..4dcfdded25 100644 --- a/packages/associative/CHANGELOG.md +++ b/packages/associative/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.13](https://github.com/thi-ng/umbrella/compare/@thi.ng/associative@5.0.12...@thi.ng/associative@5.0.13) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/associative + + + + + ## [5.0.12](https://github.com/thi-ng/umbrella/compare/@thi.ng/associative@5.0.11...@thi.ng/associative@5.0.12) (2020-12-22) **Note:** Version bump only for package @thi.ng/associative diff --git a/packages/associative/package.json b/packages/associative/package.json index f4fcbc069a..4333821793 100644 --- a/packages/associative/package.json +++ b/packages/associative/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/associative", - "version": "5.0.12", + "version": "5.0.13", "description": "Alternative Map and Set implementations with customizable equality semantics & supporting operations", "module": "./index.js", "main": "./lib/index.js", @@ -49,14 +49,14 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/binary": "^2.0.20", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/compare": "^1.3.21", - "@thi.ng/dcons": "^2.3.4", - "@thi.ng/equiv": "^1.0.34", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/transducers": "^7.5.3", + "@thi.ng/api": "^6.13.6", + "@thi.ng/binary": "^2.0.21", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/compare": "^1.3.22", + "@thi.ng/dcons": "^2.3.5", + "@thi.ng/equiv": "^1.0.35", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/transducers": "^7.5.4", "tslib": "2.0.1" }, "files": [ diff --git a/packages/atom/CHANGELOG.md b/packages/atom/CHANGELOG.md index 657a1a1dd6..5bbb75cfa1 100644 --- a/packages/atom/CHANGELOG.md +++ b/packages/atom/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.1.26](https://github.com/thi-ng/umbrella/compare/@thi.ng/atom@4.1.25...@thi.ng/atom@4.1.26) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/atom + + + + + ## [4.1.25](https://github.com/thi-ng/umbrella/compare/@thi.ng/atom@4.1.24...@thi.ng/atom@4.1.25) (2020-12-22) **Note:** Version bump only for package @thi.ng/atom diff --git a/packages/atom/package.json b/packages/atom/package.json index c5137f4b55..5db6cc7ea5 100644 --- a/packages/atom/package.json +++ b/packages/atom/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/atom", - "version": "4.1.25", + "version": "4.1.26", "description": "Mutable wrappers for nested immutable values with optional undo/redo history and transaction support", "module": "./index.js", "main": "./lib/index.js", @@ -49,10 +49,10 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/equiv": "^1.0.34", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/paths": "^4.1.11", + "@thi.ng/api": "^6.13.6", + "@thi.ng/equiv": "^1.0.35", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/paths": "^4.1.12", "tslib": "2.0.1" }, "files": [ diff --git a/packages/bench/CHANGELOG.md b/packages/bench/CHANGELOG.md index 6b29997c57..5a9ce6bc1b 100644 --- a/packages/bench/CHANGELOG.md +++ b/packages/bench/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.0.26](https://github.com/thi-ng/umbrella/compare/@thi.ng/bench@2.0.25...@thi.ng/bench@2.0.26) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/bench + + + + + ## [2.0.25](https://github.com/thi-ng/umbrella/compare/@thi.ng/bench@2.0.24...@thi.ng/bench@2.0.25) (2020-12-22) **Note:** Version bump only for package @thi.ng/bench diff --git a/packages/bench/package.json b/packages/bench/package.json index bbce347b05..568652971e 100644 --- a/packages/bench/package.json +++ b/packages/bench/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/bench", - "version": "2.0.25", + "version": "2.0.26", "description": "Benchmarking utilities w/ optional statistics", "module": "./index.js", "main": "./lib/index.js", diff --git a/packages/bencode/CHANGELOG.md b/packages/bencode/CHANGELOG.md index cb528fffe6..a053ec4cd7 100644 --- a/packages/bencode/CHANGELOG.md +++ b/packages/bencode/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.3.45](https://github.com/thi-ng/umbrella/compare/@thi.ng/bencode@0.3.44...@thi.ng/bencode@0.3.45) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/bencode + + + + + ## [0.3.44](https://github.com/thi-ng/umbrella/compare/@thi.ng/bencode@0.3.43...@thi.ng/bencode@0.3.44) (2020-12-22) **Note:** Version bump only for package @thi.ng/bencode diff --git a/packages/bencode/package.json b/packages/bencode/package.json index 69447182eb..4064dbb3d6 100644 --- a/packages/bencode/package.json +++ b/packages/bencode/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/bencode", - "version": "0.3.44", + "version": "0.3.45", "description": "Bencode binary encoder / decoder with optional UTF8 encoding & floating point support", "module": "./index.js", "main": "./lib/index.js", @@ -49,13 +49,13 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/arrays": "^0.8.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/defmulti": "^1.3.3", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/transducers": "^7.5.3", - "@thi.ng/transducers-binary": "^0.6.0" + "@thi.ng/api": "^6.13.6", + "@thi.ng/arrays": "^0.9.0", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/defmulti": "^1.3.4", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/transducers": "^7.5.4", + "@thi.ng/transducers-binary": "^0.6.1" }, "files": [ "*.js", diff --git a/packages/binary/CHANGELOG.md b/packages/binary/CHANGELOG.md index 7f1b7aa559..6c4cf2a425 100644 --- a/packages/binary/CHANGELOG.md +++ b/packages/binary/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.0.21](https://github.com/thi-ng/umbrella/compare/@thi.ng/binary@2.0.20...@thi.ng/binary@2.0.21) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/binary + + + + + ## [2.0.20](https://github.com/thi-ng/umbrella/compare/@thi.ng/binary@2.0.19...@thi.ng/binary@2.0.20) (2020-12-22) **Note:** Version bump only for package @thi.ng/binary diff --git a/packages/binary/package.json b/packages/binary/package.json index bac163293d..2f0ae264e2 100644 --- a/packages/binary/package.json +++ b/packages/binary/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/binary", - "version": "2.0.20", + "version": "2.0.21", "description": "95+ assorted binary / bitwise operations, conversions, utilities", "module": "./index.js", "main": "./lib/index.js", @@ -49,7 +49,7 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5" + "@thi.ng/api": "^6.13.6" }, "files": [ "*.js", diff --git a/packages/bitfield/CHANGELOG.md b/packages/bitfield/CHANGELOG.md index f114c6857f..6ad22afebb 100644 --- a/packages/bitfield/CHANGELOG.md +++ b/packages/bitfield/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.3.27](https://github.com/thi-ng/umbrella/compare/@thi.ng/bitfield@0.3.26...@thi.ng/bitfield@0.3.27) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/bitfield + + + + + ## [0.3.26](https://github.com/thi-ng/umbrella/compare/@thi.ng/bitfield@0.3.25...@thi.ng/bitfield@0.3.26) (2020-12-22) **Note:** Version bump only for package @thi.ng/bitfield diff --git a/packages/bitfield/package.json b/packages/bitfield/package.json index b8fff010c7..f49bfede73 100644 --- a/packages/bitfield/package.json +++ b/packages/bitfield/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/bitfield", - "version": "0.3.26", + "version": "0.3.27", "description": "1D / 2D bit field implementations", "module": "./index.js", "main": "./lib/index.js", @@ -49,9 +49,9 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/binary": "^2.0.20", - "@thi.ng/strings": "^1.11.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/binary": "^2.0.21", + "@thi.ng/strings": "^1.11.4" }, "files": [ "*.js", diff --git a/packages/bitstream/CHANGELOG.md b/packages/bitstream/CHANGELOG.md index 0e9d154f3a..e811d6051a 100644 --- a/packages/bitstream/CHANGELOG.md +++ b/packages/bitstream/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.1.31](https://github.com/thi-ng/umbrella/compare/@thi.ng/bitstream@1.1.30...@thi.ng/bitstream@1.1.31) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/bitstream + + + + + ## [1.1.30](https://github.com/thi-ng/umbrella/compare/@thi.ng/bitstream@1.1.29...@thi.ng/bitstream@1.1.30) (2020-12-22) **Note:** Version bump only for package @thi.ng/bitstream diff --git a/packages/bitstream/package.json b/packages/bitstream/package.json index 16a02ef3d2..ec2392fc22 100644 --- a/packages/bitstream/package.json +++ b/packages/bitstream/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/bitstream", - "version": "1.1.30", + "version": "1.1.31", "description": "ES6 iterator based read/write bit streams with support for variable word widths", "module": "./index.js", "main": "./lib/index.js", @@ -49,7 +49,7 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/errors": "^1.2.25" + "@thi.ng/errors": "^1.2.26" }, "files": [ "*.js", diff --git a/packages/cache/CHANGELOG.md b/packages/cache/CHANGELOG.md index 0ec3f151cd..4053f30c70 100644 --- a/packages/cache/CHANGELOG.md +++ b/packages/cache/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.0.65](https://github.com/thi-ng/umbrella/compare/@thi.ng/cache@1.0.64...@thi.ng/cache@1.0.65) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/cache + + + + + ## [1.0.64](https://github.com/thi-ng/umbrella/compare/@thi.ng/cache@1.0.63...@thi.ng/cache@1.0.64) (2020-12-22) **Note:** Version bump only for package @thi.ng/cache diff --git a/packages/cache/package.json b/packages/cache/package.json index 227eb2ee85..30deaa21db 100644 --- a/packages/cache/package.json +++ b/packages/cache/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/cache", - "version": "1.0.64", + "version": "1.0.65", "description": "In-memory cache implementations with ES6 Map-like API and different eviction strategies", "module": "./index.js", "main": "./lib/index.js", @@ -49,9 +49,9 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/dcons": "^2.3.4", - "@thi.ng/transducers": "^7.5.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/dcons": "^2.3.5", + "@thi.ng/transducers": "^7.5.4" }, "files": [ "*.js", diff --git a/packages/checks/CHANGELOG.md b/packages/checks/CHANGELOG.md index 9c12b2d2a8..558867d0f0 100644 --- a/packages/checks/CHANGELOG.md +++ b/packages/checks/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.7.13](https://github.com/thi-ng/umbrella/compare/@thi.ng/checks@2.7.12...@thi.ng/checks@2.7.13) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/checks + + + + + ## [2.7.12](https://github.com/thi-ng/umbrella/compare/@thi.ng/checks@2.7.11...@thi.ng/checks@2.7.12) (2020-12-22) **Note:** Version bump only for package @thi.ng/checks diff --git a/packages/checks/package.json b/packages/checks/package.json index 325e952812..0c63ad0233 100644 --- a/packages/checks/package.json +++ b/packages/checks/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/checks", - "version": "2.7.12", + "version": "2.7.13", "description": "Collection of 50+ type, feature & value checks", "module": "./index.js", "main": "./lib/index.js", diff --git a/packages/color/CHANGELOG.md b/packages/color/CHANGELOG.md index a25e5fa81e..8d85d69000 100644 --- a/packages/color/CHANGELOG.md +++ b/packages/color/CHANGELOG.md @@ -3,6 +3,27 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.1.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/color@2.0.0...@thi.ng/color@2.1.0) (2021-01-02) + + +### Bug Fixes + +* **color:** fix cosineGradient() return type ([651590c](https://github.com/thi-ng/umbrella/commit/651590c2f3c4365e06f4bab85d2c9f9b99d3c4c1)) + + +### Features + +* **color:** add color swatch hiccup helpers ([5ecc528](https://github.com/thi-ng/umbrella/commit/5ecc5285fdea2d35535e5469d4d81a2b4d6878e9)) +* **color:** add declarative range/theme iterators ([971d5dc](https://github.com/thi-ng/umbrella/commit/971d5dcbf061b0c4c52ffa1aca24d7150dea81e9)) +* **color:** add HSV/RGB distance fns ([3bd3969](https://github.com/thi-ng/umbrella/commit/3bd396927c3aab7942853ec9b9f6013a1248389c)) +* **color:** add HSV/RGB gray axis checks ([927202b](https://github.com/thi-ng/umbrella/commit/927202b77deaa808b57ee189ff483839975804d0)) +* **color:** add sortColors(), comparators ([6761feb](https://github.com/thi-ng/umbrella/commit/6761feb65e24545290547408b8ba62a3ba4baedc)) +* **color:** update ColorRangeOpts, add docstrings ([350fbe5](https://github.com/thi-ng/umbrella/commit/350fbe568b8abfc968a104cbada5abdeeb2b4107)) + + + + + # [2.0.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/color@1.3.2...@thi.ng/color@2.0.0) (2020-12-22) diff --git a/packages/color/package.json b/packages/color/package.json index 66c40a16cb..39d334fe88 100644 --- a/packages/color/package.json +++ b/packages/color/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/color", - "version": "2.0.0", + "version": "2.1.0", "description": "Array-based color types, conversions, transformations, declarative theme generation, multi-color gradients, presets", "module": "./index.js", "main": "./lib/index.js", @@ -50,18 +50,18 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/arrays": "^0.8.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/compare": "^1.3.21", - "@thi.ng/compose": "^1.4.22", - "@thi.ng/defmulti": "^1.3.3", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/math": "^3.0.0", - "@thi.ng/random": "^2.1.3", - "@thi.ng/strings": "^1.11.3", - "@thi.ng/transducers": "^7.5.3", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/arrays": "^0.9.0", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/compare": "^1.3.22", + "@thi.ng/compose": "^1.4.23", + "@thi.ng/defmulti": "^1.3.4", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/math": "^3.0.1", + "@thi.ng/random": "^2.1.4", + "@thi.ng/strings": "^1.11.4", + "@thi.ng/transducers": "^7.5.4", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/colored-noise/CHANGELOG.md b/packages/colored-noise/CHANGELOG.md index 58a065636c..2345456865 100644 --- a/packages/colored-noise/CHANGELOG.md +++ b/packages/colored-noise/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.8](https://github.com/thi-ng/umbrella/compare/@thi.ng/colored-noise@0.1.7...@thi.ng/colored-noise@0.1.8) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/colored-noise + + + + + ## [0.1.7](https://github.com/thi-ng/umbrella/compare/@thi.ng/colored-noise@0.1.6...@thi.ng/colored-noise@0.1.7) (2020-12-22) **Note:** Version bump only for package @thi.ng/colored-noise diff --git a/packages/colored-noise/package.json b/packages/colored-noise/package.json index 845a86db18..5fe9c96100 100644 --- a/packages/colored-noise/package.json +++ b/packages/colored-noise/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/colored-noise", - "version": "0.1.7", + "version": "0.1.8", "description": "Customizable O(1) ES6 generators for colored noise", "module": "./index.js", "main": "./lib/index.js", @@ -40,12 +40,12 @@ "devDependencies": { "@istanbuljs/nyc-config-typescript": "^1.0.1", "@microsoft/api-extractor": "^7.12.1", - "@thi.ng/api": "^6.13.5", - "@thi.ng/dsp": "^3.0.0", - "@thi.ng/dsp-io-wav": "^0.1.34", - "@thi.ng/text-canvas": "^0.2.36", - "@thi.ng/transducers": "^7.5.3", - "@thi.ng/vectors": "^4.8.3", + "@thi.ng/api": "^6.13.6", + "@thi.ng/dsp": "^3.0.1", + "@thi.ng/dsp-io-wav": "^0.1.35", + "@thi.ng/text-canvas": "^0.3.0", + "@thi.ng/transducers": "^7.5.4", + "@thi.ng/vectors": "^4.8.4", "@types/mocha": "^8.2.0", "@types/node": "^14.14.14", "mocha": "^8.2.1", @@ -55,8 +55,8 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/binary": "^2.0.20", - "@thi.ng/random": "^2.1.3" + "@thi.ng/binary": "^2.0.21", + "@thi.ng/random": "^2.1.4" }, "files": [ "*.js", diff --git a/packages/compare/CHANGELOG.md b/packages/compare/CHANGELOG.md index 2003d6361e..adc9bfd510 100644 --- a/packages/compare/CHANGELOG.md +++ b/packages/compare/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.22](https://github.com/thi-ng/umbrella/compare/@thi.ng/compare@1.3.21...@thi.ng/compare@1.3.22) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/compare + + + + + ## [1.3.21](https://github.com/thi-ng/umbrella/compare/@thi.ng/compare@1.3.20...@thi.ng/compare@1.3.21) (2020-12-22) **Note:** Version bump only for package @thi.ng/compare diff --git a/packages/compare/package.json b/packages/compare/package.json index ccf41e689f..009e8d5824 100644 --- a/packages/compare/package.json +++ b/packages/compare/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/compare", - "version": "1.3.21", + "version": "1.3.22", "description": "Comparators with support for types implementing the @thi.ng/api/ICompare interface", "module": "./index.js", "main": "./lib/index.js", @@ -49,7 +49,7 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5" + "@thi.ng/api": "^6.13.6" }, "files": [ "*.js", diff --git a/packages/compose/CHANGELOG.md b/packages/compose/CHANGELOG.md index de9afba900..d3a5c68d12 100644 --- a/packages/compose/CHANGELOG.md +++ b/packages/compose/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.4.23](https://github.com/thi-ng/umbrella/compare/@thi.ng/compose@1.4.22...@thi.ng/compose@1.4.23) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/compose + + + + + ## [1.4.22](https://github.com/thi-ng/umbrella/compare/@thi.ng/compose@1.4.21...@thi.ng/compose@1.4.22) (2020-12-22) **Note:** Version bump only for package @thi.ng/compose diff --git a/packages/compose/package.json b/packages/compose/package.json index a49b30aa7f..c64498dcf3 100644 --- a/packages/compose/package.json +++ b/packages/compose/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/compose", - "version": "1.4.22", + "version": "1.4.23", "description": "Optimized functional composition helpers", "module": "./index.js", "main": "./lib/index.js", @@ -49,8 +49,8 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/errors": "^1.2.25" + "@thi.ng/api": "^6.13.6", + "@thi.ng/errors": "^1.2.26" }, "files": [ "*.js", diff --git a/packages/csp/CHANGELOG.md b/packages/csp/CHANGELOG.md index bc9aee9836..14fbbb02bf 100644 --- a/packages/csp/CHANGELOG.md +++ b/packages/csp/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.1.45](https://github.com/thi-ng/umbrella/compare/@thi.ng/csp@1.1.44...@thi.ng/csp@1.1.45) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/csp + + + + + ## [1.1.44](https://github.com/thi-ng/umbrella/compare/@thi.ng/csp@1.1.43...@thi.ng/csp@1.1.44) (2020-12-22) **Note:** Version bump only for package @thi.ng/csp diff --git a/packages/csp/package.json b/packages/csp/package.json index e1d320702e..01a6cdc1f5 100644 --- a/packages/csp/package.json +++ b/packages/csp/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/csp", - "version": "1.1.44", + "version": "1.1.45", "description": "ES6 promise based CSP primitives & operations", "module": "./index.js", "main": "./lib/index.js", @@ -53,12 +53,12 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/arrays": "^0.8.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/dcons": "^2.3.4", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/transducers": "^7.5.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/arrays": "^0.9.0", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/dcons": "^2.3.5", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/transducers": "^7.5.4" }, "files": [ "*.js", diff --git a/packages/csv/CHANGELOG.md b/packages/csv/CHANGELOG.md index 87558bfb9b..3052cf53e1 100644 --- a/packages/csv/CHANGELOG.md +++ b/packages/csv/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/csv@0.1.3...@thi.ng/csv@0.1.4) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/csv + + + + + ## [0.1.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/csv@0.1.2...@thi.ng/csv@0.1.3) (2020-12-22) **Note:** Version bump only for package @thi.ng/csv diff --git a/packages/csv/package.json b/packages/csv/package.json index 79e5c3dbfe..128d6750be 100644 --- a/packages/csv/package.json +++ b/packages/csv/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/csv", - "version": "0.1.3", + "version": "0.1.4", "description": "Customizable, transducer-based CSV parser/object mapper and transformer", "module": "./index.js", "main": "./lib/index.js", @@ -49,10 +49,10 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/strings": "^1.11.3", - "@thi.ng/transducers": "^7.5.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/strings": "^1.11.4", + "@thi.ng/transducers": "^7.5.4" }, "files": [ "*.js", diff --git a/packages/date/CHANGELOG.md b/packages/date/CHANGELOG.md index 3c4e2b16b9..5468246649 100644 --- a/packages/date/CHANGELOG.md +++ b/packages/date/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/date@0.2.4...@thi.ng/date@0.2.5) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/date + + + + + ## [0.2.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/date@0.2.3...@thi.ng/date@0.2.4) (2020-12-22) **Note:** Version bump only for package @thi.ng/date diff --git a/packages/date/package.json b/packages/date/package.json index 62d94a94ac..f0aeed9b39 100644 --- a/packages/date/package.json +++ b/packages/date/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/date", - "version": "0.2.4", + "version": "0.2.5", "description": "Date/timestamp iterators, formatters, rounding", "module": "./index.js", "main": "./lib/index.js", @@ -49,7 +49,7 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5" + "@thi.ng/api": "^6.13.6" }, "files": [ "*.js", diff --git a/packages/dcons/CHANGELOG.md b/packages/dcons/CHANGELOG.md index 2f2d715775..d5cfccbf63 100644 --- a/packages/dcons/CHANGELOG.md +++ b/packages/dcons/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.3.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/dcons@2.3.4...@thi.ng/dcons@2.3.5) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/dcons + + + + + ## [2.3.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/dcons@2.3.3...@thi.ng/dcons@2.3.4) (2020-12-22) **Note:** Version bump only for package @thi.ng/dcons diff --git a/packages/dcons/package.json b/packages/dcons/package.json index 153b2f2e80..8f7ff42450 100644 --- a/packages/dcons/package.json +++ b/packages/dcons/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/dcons", - "version": "2.3.4", + "version": "2.3.5", "description": "Double-linked lists with comprehensive set of operations (incl. optional self-organizing behaviors)", "module": "./index.js", "main": "./lib/index.js", @@ -49,13 +49,13 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/compare": "^1.3.21", - "@thi.ng/equiv": "^1.0.34", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/random": "^2.1.3", - "@thi.ng/transducers": "^7.5.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/compare": "^1.3.22", + "@thi.ng/equiv": "^1.0.35", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/random": "^2.1.4", + "@thi.ng/transducers": "^7.5.4" }, "files": [ "*.js", diff --git a/packages/defmulti/CHANGELOG.md b/packages/defmulti/CHANGELOG.md index 36cd6af62d..88eee8dff7 100644 --- a/packages/defmulti/CHANGELOG.md +++ b/packages/defmulti/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/defmulti@1.3.3...@thi.ng/defmulti@1.3.4) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/defmulti + + + + + ## [1.3.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/defmulti@1.3.2...@thi.ng/defmulti@1.3.3) (2020-12-22) **Note:** Version bump only for package @thi.ng/defmulti diff --git a/packages/defmulti/package.json b/packages/defmulti/package.json index 938b7dda06..c36954cb32 100644 --- a/packages/defmulti/package.json +++ b/packages/defmulti/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/defmulti", - "version": "1.3.3", + "version": "1.3.4", "description": "Dynamic, extensible multiple dispatch via user supplied dispatch function.", "module": "./index.js", "main": "./lib/index.js", @@ -49,8 +49,8 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/errors": "^1.2.25" + "@thi.ng/api": "^6.13.6", + "@thi.ng/errors": "^1.2.26" }, "files": [ "*.js", diff --git a/packages/dgraph-dot/CHANGELOG.md b/packages/dgraph-dot/CHANGELOG.md index 2c8b308d52..a6075ba06e 100644 --- a/packages/dgraph-dot/CHANGELOG.md +++ b/packages/dgraph-dot/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.33](https://github.com/thi-ng/umbrella/compare/@thi.ng/dgraph-dot@0.1.32...@thi.ng/dgraph-dot@0.1.33) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/dgraph-dot + + + + + ## [0.1.32](https://github.com/thi-ng/umbrella/compare/@thi.ng/dgraph-dot@0.1.31...@thi.ng/dgraph-dot@0.1.32) (2020-12-22) **Note:** Version bump only for package @thi.ng/dgraph-dot diff --git a/packages/dgraph-dot/package.json b/packages/dgraph-dot/package.json index 50ca3b80f8..dfc9f9c0d3 100644 --- a/packages/dgraph-dot/package.json +++ b/packages/dgraph-dot/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/dgraph-dot", - "version": "0.1.32", + "version": "0.1.33", "description": "Customizable Graphviz DOT serialization for @thi.ng/dgraph", "module": "./index.js", "main": "./lib/index.js", @@ -49,9 +49,9 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/dgraph": "^1.3.3", - "@thi.ng/dot": "^1.2.22" + "@thi.ng/api": "^6.13.6", + "@thi.ng/dgraph": "^1.3.4", + "@thi.ng/dot": "^1.2.23" }, "files": [ "*.js", diff --git a/packages/dgraph/CHANGELOG.md b/packages/dgraph/CHANGELOG.md index e6f00625a5..43670bf14e 100644 --- a/packages/dgraph/CHANGELOG.md +++ b/packages/dgraph/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/dgraph@1.3.3...@thi.ng/dgraph@1.3.4) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/dgraph + + + + + ## [1.3.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/dgraph@1.3.2...@thi.ng/dgraph@1.3.3) (2020-12-22) **Note:** Version bump only for package @thi.ng/dgraph diff --git a/packages/dgraph/package.json b/packages/dgraph/package.json index 94eb684a39..b0fc940cdc 100644 --- a/packages/dgraph/package.json +++ b/packages/dgraph/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/dgraph", - "version": "1.3.3", + "version": "1.3.4", "description": "Type-agnostic directed acyclic graph (DAG) & graph operations", "module": "./index.js", "main": "./lib/index.js", @@ -49,11 +49,11 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/associative": "^5.0.12", - "@thi.ng/equiv": "^1.0.34", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/transducers": "^7.5.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/associative": "^5.0.13", + "@thi.ng/equiv": "^1.0.35", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/transducers": "^7.5.4" }, "files": [ "*.js", diff --git a/packages/diff/CHANGELOG.md b/packages/diff/CHANGELOG.md index b7dd793435..1ff9a4d7f6 100644 --- a/packages/diff/CHANGELOG.md +++ b/packages/diff/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.0.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/diff@4.0.0...@thi.ng/diff@4.0.1) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/diff + + + + + # [4.0.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/diff@3.2.35...@thi.ng/diff@4.0.0) (2020-12-22) diff --git a/packages/diff/package.json b/packages/diff/package.json index d22ddb06c5..607ed7c35a 100644 --- a/packages/diff/package.json +++ b/packages/diff/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/diff", - "version": "4.0.0", + "version": "4.0.1", "description": "Customizable diff implementations for arrays (sequential) & objects (associative), with or without linear edit logs", "module": "./index.js", "main": "./lib/index.js", @@ -48,8 +48,8 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/equiv": "^1.0.34" + "@thi.ng/api": "^6.13.6", + "@thi.ng/equiv": "^1.0.35" }, "files": [ "*.js", diff --git a/packages/dl-asset/CHANGELOG.md b/packages/dl-asset/CHANGELOG.md index d7e338fc98..ca4fb5e14f 100644 --- a/packages/dl-asset/CHANGELOG.md +++ b/packages/dl-asset/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.4.11](https://github.com/thi-ng/umbrella/compare/@thi.ng/dl-asset@0.4.10...@thi.ng/dl-asset@0.4.11) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/dl-asset + + + + + ## [0.4.10](https://github.com/thi-ng/umbrella/compare/@thi.ng/dl-asset@0.4.9...@thi.ng/dl-asset@0.4.10) (2020-12-22) **Note:** Version bump only for package @thi.ng/dl-asset diff --git a/packages/dl-asset/package.json b/packages/dl-asset/package.json index ee92e827c8..0b411b1b5b 100644 --- a/packages/dl-asset/package.json +++ b/packages/dl-asset/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/dl-asset", - "version": "0.4.10", + "version": "0.4.11", "description": "Local asset download for web apps, with automatic MIME type detection", "module": "./index.js", "main": "./lib/index.js", @@ -49,9 +49,9 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/mime": "^0.1.26" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/mime": "^0.1.27" }, "files": [ "*.js", diff --git a/packages/dlogic/CHANGELOG.md b/packages/dlogic/CHANGELOG.md index 6a79aff401..7345fefaaa 100644 --- a/packages/dlogic/CHANGELOG.md +++ b/packages/dlogic/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.0.37](https://github.com/thi-ng/umbrella/compare/@thi.ng/dlogic@1.0.36...@thi.ng/dlogic@1.0.37) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/dlogic + + + + + ## [1.0.36](https://github.com/thi-ng/umbrella/compare/@thi.ng/dlogic@1.0.35...@thi.ng/dlogic@1.0.36) (2020-12-22) **Note:** Version bump only for package @thi.ng/dlogic diff --git a/packages/dlogic/package.json b/packages/dlogic/package.json index 9b8060bda9..4e1625614f 100644 --- a/packages/dlogic/package.json +++ b/packages/dlogic/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/dlogic", - "version": "1.0.36", + "version": "1.0.37", "description": "Assorted digital logic ops / constructs", "module": "./index.js", "main": "./lib/index.js", @@ -49,7 +49,7 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5" + "@thi.ng/api": "^6.13.6" }, "files": [ "*.js", diff --git a/packages/dot/CHANGELOG.md b/packages/dot/CHANGELOG.md index f5705d249a..4fa5897226 100644 --- a/packages/dot/CHANGELOG.md +++ b/packages/dot/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.2.23](https://github.com/thi-ng/umbrella/compare/@thi.ng/dot@1.2.22...@thi.ng/dot@1.2.23) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/dot + + + + + ## [1.2.22](https://github.com/thi-ng/umbrella/compare/@thi.ng/dot@1.2.21...@thi.ng/dot@1.2.22) (2020-12-22) **Note:** Version bump only for package @thi.ng/dot diff --git a/packages/dot/package.json b/packages/dot/package.json index 9d57aba52c..7fc0742fc6 100644 --- a/packages/dot/package.json +++ b/packages/dot/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/dot", - "version": "1.2.22", + "version": "1.2.23", "description": "Graphviz document abstraction & serialization to DOT format", "module": "./index.js", "main": "./lib/index.js", @@ -49,8 +49,8 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13" }, "files": [ "*.js", diff --git a/packages/dsp-io-wav/CHANGELOG.md b/packages/dsp-io-wav/CHANGELOG.md index a7c5b10248..14ccd89e94 100644 --- a/packages/dsp-io-wav/CHANGELOG.md +++ b/packages/dsp-io-wav/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.35](https://github.com/thi-ng/umbrella/compare/@thi.ng/dsp-io-wav@0.1.34...@thi.ng/dsp-io-wav@0.1.35) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/dsp-io-wav + + + + + ## [0.1.34](https://github.com/thi-ng/umbrella/compare/@thi.ng/dsp-io-wav@0.1.33...@thi.ng/dsp-io-wav@0.1.34) (2020-12-22) **Note:** Version bump only for package @thi.ng/dsp-io-wav diff --git a/packages/dsp-io-wav/package.json b/packages/dsp-io-wav/package.json index 8b8ccd5d8a..bf323de9b3 100644 --- a/packages/dsp-io-wav/package.json +++ b/packages/dsp-io-wav/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/dsp-io-wav", - "version": "0.1.34", + "version": "0.1.35", "description": "WAV file format generation", "module": "./index.js", "main": "./lib/index.js", @@ -49,10 +49,10 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/binary": "^2.0.20", - "@thi.ng/transducers": "^7.5.3", - "@thi.ng/transducers-binary": "^0.6.0" + "@thi.ng/api": "^6.13.6", + "@thi.ng/binary": "^2.0.21", + "@thi.ng/transducers": "^7.5.4", + "@thi.ng/transducers-binary": "^0.6.1" }, "files": [ "*.js", diff --git a/packages/dsp/CHANGELOG.md b/packages/dsp/CHANGELOG.md index 712a236256..c47acbcf98 100644 --- a/packages/dsp/CHANGELOG.md +++ b/packages/dsp/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [3.0.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/dsp@3.0.0...@thi.ng/dsp@3.0.1) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/dsp + + + + + # [3.0.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/dsp@2.1.5...@thi.ng/dsp@3.0.0) (2020-12-22) diff --git a/packages/dsp/package.json b/packages/dsp/package.json index 4ba4cae49e..52bf124f8b 100644 --- a/packages/dsp/package.json +++ b/packages/dsp/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/dsp", - "version": "3.0.0", + "version": "3.0.1", "description": "Composable signal generators, oscillators, filters, FFT, spectrum, windowing & related DSP utils", "module": "./index.js", "main": "./lib/index.js", @@ -49,12 +49,12 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/math": "^3.0.0", - "@thi.ng/random": "^2.1.3", - "@thi.ng/transducers": "^7.5.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/math": "^3.0.1", + "@thi.ng/random": "^2.1.4", + "@thi.ng/transducers": "^7.5.4" }, "files": [ "*.js", diff --git a/packages/dual-algebra/CHANGELOG.md b/packages/dual-algebra/CHANGELOG.md index abee0c31c4..e7b0071677 100644 --- a/packages/dual-algebra/CHANGELOG.md +++ b/packages/dual-algebra/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/dual-algebra@0.1.5...@thi.ng/dual-algebra@0.1.6) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/dual-algebra + + + + + ## [0.1.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/dual-algebra@0.1.4...@thi.ng/dual-algebra@0.1.5) (2020-12-22) **Note:** Version bump only for package @thi.ng/dual-algebra diff --git a/packages/dual-algebra/package.json b/packages/dual-algebra/package.json index 26ce445090..60d270b0bc 100644 --- a/packages/dual-algebra/package.json +++ b/packages/dual-algebra/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/dual-algebra", - "version": "0.1.5", + "version": "0.1.6", "description": "Multivariate dual number algebra, automatic differentiation", "module": "./index.js", "main": "./lib/index.js", @@ -49,7 +49,7 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5" + "@thi.ng/api": "^6.13.6" }, "files": [ "*.js", diff --git a/packages/dynvar/CHANGELOG.md b/packages/dynvar/CHANGELOG.md index 8c4daa5259..876c5a291a 100644 --- a/packages/dynvar/CHANGELOG.md +++ b/packages/dynvar/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.29](https://github.com/thi-ng/umbrella/compare/@thi.ng/dynvar@0.1.28...@thi.ng/dynvar@0.1.29) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/dynvar + + + + + ## [0.1.28](https://github.com/thi-ng/umbrella/compare/@thi.ng/dynvar@0.1.27...@thi.ng/dynvar@0.1.28) (2020-12-22) **Note:** Version bump only for package @thi.ng/dynvar diff --git a/packages/dynvar/package.json b/packages/dynvar/package.json index 2c4dbc4e14..c11a937510 100644 --- a/packages/dynvar/package.json +++ b/packages/dynvar/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/dynvar", - "version": "0.1.28", + "version": "0.1.29", "description": "Dynamically scoped variable bindings", "module": "./index.js", "main": "./lib/index.js", @@ -49,7 +49,7 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5" + "@thi.ng/api": "^6.13.6" }, "files": [ "*.js", diff --git a/packages/ecs/CHANGELOG.md b/packages/ecs/CHANGELOG.md index 0dbe9141d9..a25e71614c 100644 --- a/packages/ecs/CHANGELOG.md +++ b/packages/ecs/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.4.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/ecs@0.4.4...@thi.ng/ecs@0.4.5) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/ecs + + + + + ## [0.4.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/ecs@0.4.3...@thi.ng/ecs@0.4.4) (2020-12-22) **Note:** Version bump only for package @thi.ng/ecs diff --git a/packages/ecs/package.json b/packages/ecs/package.json index 2797d288d5..46e0038690 100644 --- a/packages/ecs/package.json +++ b/packages/ecs/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/ecs", - "version": "0.4.4", + "version": "0.4.5", "description": "Entity Component System based around typed arrays & sparse sets", "module": "./index.js", "main": "./lib/index.js", @@ -40,7 +40,7 @@ "devDependencies": { "@istanbuljs/nyc-config-typescript": "^1.0.1", "@microsoft/api-extractor": "^7.12.1", - "@thi.ng/equiv": "^1.0.34", + "@thi.ng/equiv": "^1.0.35", "@types/mocha": "^8.2.0", "@types/node": "^14.14.14", "mocha": "^8.2.1", @@ -50,14 +50,14 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/associative": "^5.0.12", - "@thi.ng/binary": "^2.0.20", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/dcons": "^2.3.4", - "@thi.ng/idgen": "^0.2.28", - "@thi.ng/malloc": "^4.2.4", - "@thi.ng/transducers": "^7.5.3", + "@thi.ng/api": "^6.13.6", + "@thi.ng/associative": "^5.0.13", + "@thi.ng/binary": "^2.0.21", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/dcons": "^2.3.5", + "@thi.ng/idgen": "^0.2.29", + "@thi.ng/malloc": "^4.2.5", + "@thi.ng/transducers": "^7.5.4", "tslib": "2.0.1" }, "files": [ diff --git a/packages/egf/CHANGELOG.md b/packages/egf/CHANGELOG.md index 568f4fbdbd..07484f4ad3 100644 --- a/packages/egf/CHANGELOG.md +++ b/packages/egf/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.3.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/egf@0.3.5...@thi.ng/egf@0.3.6) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/egf + + + + + ## [0.3.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/egf@0.3.4...@thi.ng/egf@0.3.5) (2020-12-22) **Note:** Version bump only for package @thi.ng/egf diff --git a/packages/egf/package.json b/packages/egf/package.json index f24b5f9e13..1e2280d02a 100644 --- a/packages/egf/package.json +++ b/packages/egf/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/egf", - "version": "0.3.5", + "version": "0.3.6", "description": "Extensible Graph Format", "module": "./index.js", "main": "./lib/index.js", @@ -35,7 +35,7 @@ "devDependencies": { "@istanbuljs/nyc-config-typescript": "^1.0.1", "@microsoft/api-extractor": "^7.12.1", - "@thi.ng/equiv": "^1.0.34", + "@thi.ng/equiv": "^1.0.35", "@types/mocha": "^8.2.0", "@types/node": "^14.14.14", "mocha": "^8.2.1", @@ -45,14 +45,14 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/associative": "^5.0.12", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/dot": "^1.2.22", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/prefixes": "^0.1.9", - "@thi.ng/strings": "^1.11.3", - "@thi.ng/transducers-binary": "^0.6.0" + "@thi.ng/api": "^6.13.6", + "@thi.ng/associative": "^5.0.13", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/dot": "^1.2.23", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/prefixes": "^0.1.10", + "@thi.ng/strings": "^1.11.4", + "@thi.ng/transducers-binary": "^0.6.1" }, "files": [ "*.js", diff --git a/packages/equiv/CHANGELOG.md b/packages/equiv/CHANGELOG.md index 6256771ff7..febacb10a6 100644 --- a/packages/equiv/CHANGELOG.md +++ b/packages/equiv/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.0.35](https://github.com/thi-ng/umbrella/compare/@thi.ng/equiv@1.0.34...@thi.ng/equiv@1.0.35) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/equiv + + + + + ## [1.0.34](https://github.com/thi-ng/umbrella/compare/@thi.ng/equiv@1.0.33...@thi.ng/equiv@1.0.34) (2020-12-22) **Note:** Version bump only for package @thi.ng/equiv diff --git a/packages/equiv/package.json b/packages/equiv/package.json index 6833d35ae4..0647c8340a 100644 --- a/packages/equiv/package.json +++ b/packages/equiv/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/equiv", - "version": "1.0.34", + "version": "1.0.35", "description": "Extensible deep value equivalence checking for any data types", "module": "./index.js", "main": "./lib/index.js", diff --git a/packages/errors/CHANGELOG.md b/packages/errors/CHANGELOG.md index 0c59db14c8..992ed27437 100644 --- a/packages/errors/CHANGELOG.md +++ b/packages/errors/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.2.26](https://github.com/thi-ng/umbrella/compare/@thi.ng/errors@1.2.25...@thi.ng/errors@1.2.26) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/errors + + + + + ## [1.2.25](https://github.com/thi-ng/umbrella/compare/@thi.ng/errors@1.2.24...@thi.ng/errors@1.2.25) (2020-12-22) **Note:** Version bump only for package @thi.ng/errors diff --git a/packages/errors/package.json b/packages/errors/package.json index 61b65e46f4..87a17f0d29 100644 --- a/packages/errors/package.json +++ b/packages/errors/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/errors", - "version": "1.2.25", + "version": "1.2.26", "description": "Custom error types and error factory functions", "module": "./index.js", "main": "./lib/index.js", diff --git a/packages/fsm/CHANGELOG.md b/packages/fsm/CHANGELOG.md index 9740d59a6e..92ad8e6876 100644 --- a/packages/fsm/CHANGELOG.md +++ b/packages/fsm/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.4.31](https://github.com/thi-ng/umbrella/compare/@thi.ng/fsm@2.4.30...@thi.ng/fsm@2.4.31) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/fsm + + + + + ## [2.4.30](https://github.com/thi-ng/umbrella/compare/@thi.ng/fsm@2.4.29...@thi.ng/fsm@2.4.30) (2020-12-22) **Note:** Version bump only for package @thi.ng/fsm diff --git a/packages/fsm/package.json b/packages/fsm/package.json index bc72f6ee83..e3c40eeaa5 100644 --- a/packages/fsm/package.json +++ b/packages/fsm/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/fsm", - "version": "2.4.30", + "version": "2.4.31", "description": "Composable primitives for building declarative, transducer based Finite-State Machines & matchers for arbitrary data streams", "module": "./index.js", "main": "./lib/index.js", @@ -49,12 +49,12 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/arrays": "^0.8.5", - "@thi.ng/equiv": "^1.0.34", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/strings": "^1.11.3", - "@thi.ng/transducers": "^7.5.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/arrays": "^0.9.0", + "@thi.ng/equiv": "^1.0.35", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/strings": "^1.11.4", + "@thi.ng/transducers": "^7.5.4" }, "files": [ "*.js", diff --git a/packages/fuzzy-viz/CHANGELOG.md b/packages/fuzzy-viz/CHANGELOG.md index ed8d761581..b098de5621 100644 --- a/packages/fuzzy-viz/CHANGELOG.md +++ b/packages/fuzzy-viz/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/fuzzy-viz@0.1.0...@thi.ng/fuzzy-viz@0.1.1) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/fuzzy-viz + + + + + # 0.1.0 (2020-12-22) diff --git a/packages/fuzzy-viz/package.json b/packages/fuzzy-viz/package.json index 3c02c32bc3..68e2bdf29e 100644 --- a/packages/fuzzy-viz/package.json +++ b/packages/fuzzy-viz/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/fuzzy-viz", - "version": "0.1.0", + "version": "0.1.1", "description": "Visualization, instrumentation & introspection utils for @thi.ng/fuzzy", "module": "./index.js", "main": "./lib/index.js", @@ -49,13 +49,13 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/fuzzy": "^0.1.0", - "@thi.ng/hiccup": "^3.6.5", - "@thi.ng/hiccup-svg": "^3.6.6", - "@thi.ng/math": "^3.0.0", - "@thi.ng/strings": "^1.11.3", - "@thi.ng/text-canvas": "^0.2.36" + "@thi.ng/api": "^6.13.6", + "@thi.ng/fuzzy": "^0.1.1", + "@thi.ng/hiccup": "^3.6.6", + "@thi.ng/hiccup-svg": "^3.7.0", + "@thi.ng/math": "^3.0.1", + "@thi.ng/strings": "^1.11.4", + "@thi.ng/text-canvas": "^0.3.0" }, "files": [ "*.js", diff --git a/packages/fuzzy/CHANGELOG.md b/packages/fuzzy/CHANGELOG.md index c303ad75b5..086d4de26f 100644 --- a/packages/fuzzy/CHANGELOG.md +++ b/packages/fuzzy/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/fuzzy@0.1.0...@thi.ng/fuzzy@0.1.1) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/fuzzy + + + + + # 0.1.0 (2020-12-22) diff --git a/packages/fuzzy/package.json b/packages/fuzzy/package.json index c4af3165c3..cb35cddd32 100644 --- a/packages/fuzzy/package.json +++ b/packages/fuzzy/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/fuzzy", - "version": "0.1.0", + "version": "0.1.1", "description": "Fuzzy logic operators & configurable rule inferencing engine", "module": "./index.js", "main": "./lib/index.js", @@ -49,8 +49,8 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/math": "^3.0.0" + "@thi.ng/api": "^6.13.6", + "@thi.ng/math": "^3.0.1" }, "files": [ "*.js", diff --git a/packages/geom-accel/CHANGELOG.md b/packages/geom-accel/CHANGELOG.md index be6c740599..221b51265d 100644 --- a/packages/geom-accel/CHANGELOG.md +++ b/packages/geom-accel/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.30](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-accel@2.1.29...@thi.ng/geom-accel@2.1.30) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/geom-accel + + + + + ## [2.1.29](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-accel@2.1.28...@thi.ng/geom-accel@2.1.29) (2020-12-22) **Note:** Version bump only for package @thi.ng/geom-accel diff --git a/packages/geom-accel/package.json b/packages/geom-accel/package.json index c4a4e594b6..093228e69a 100644 --- a/packages/geom-accel/package.json +++ b/packages/geom-accel/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/geom-accel", - "version": "2.1.29", + "version": "2.1.30", "description": "n-D spatial indexing data structures with a shared ES6 Map/Set-like API", "module": "./index.js", "main": "./lib/index.js", @@ -50,16 +50,16 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/arrays": "^0.8.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/equiv": "^1.0.34", - "@thi.ng/geom-api": "^2.0.0", - "@thi.ng/geom-isec": "^0.7.3", - "@thi.ng/heaps": "^1.2.29", - "@thi.ng/math": "^3.0.0", - "@thi.ng/transducers": "^7.5.3", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/arrays": "^0.9.0", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/equiv": "^1.0.35", + "@thi.ng/geom-api": "^2.0.1", + "@thi.ng/geom-isec": "^0.7.4", + "@thi.ng/heaps": "^1.2.30", + "@thi.ng/math": "^3.0.1", + "@thi.ng/transducers": "^7.5.4", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/geom-api/CHANGELOG.md b/packages/geom-api/CHANGELOG.md index a2f7c579c6..0e48f8b6d3 100644 --- a/packages/geom-api/CHANGELOG.md +++ b/packages/geom-api/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.0.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-api@2.0.0...@thi.ng/geom-api@2.0.1) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/geom-api + + + + + # [2.0.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-api@1.1.4...@thi.ng/geom-api@2.0.0) (2020-12-22) diff --git a/packages/geom-api/package.json b/packages/geom-api/package.json index 701157041f..3bb6f2da85 100644 --- a/packages/geom-api/package.json +++ b/packages/geom-api/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/geom-api", - "version": "2.0.0", + "version": "2.0.1", "description": "Shared type & interface declarations for @thi.ng/geom packages", "module": "./index.js", "main": "./lib/index.js", @@ -49,8 +49,8 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/geom-arc/CHANGELOG.md b/packages/geom-arc/CHANGELOG.md index 5e2f3d4cf6..39590ab3cc 100644 --- a/packages/geom-arc/CHANGELOG.md +++ b/packages/geom-arc/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.3.19](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-arc@0.3.18...@thi.ng/geom-arc@0.3.19) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/geom-arc + + + + + ## [0.3.18](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-arc@0.3.17...@thi.ng/geom-arc@0.3.18) (2020-12-22) **Note:** Version bump only for package @thi.ng/geom-arc diff --git a/packages/geom-arc/package.json b/packages/geom-arc/package.json index d215c40fe6..1c92c91fce 100644 --- a/packages/geom-arc/package.json +++ b/packages/geom-arc/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/geom-arc", - "version": "0.3.18", + "version": "0.3.19", "description": "2D circular / elliptic arc operations", "module": "./index.js", "main": "./lib/index.js", @@ -49,11 +49,11 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/checks": "^2.7.12", - "@thi.ng/geom-api": "^2.0.0", - "@thi.ng/geom-resample": "^0.2.51", - "@thi.ng/math": "^3.0.0", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/checks": "^2.7.13", + "@thi.ng/geom-api": "^2.0.1", + "@thi.ng/geom-resample": "^0.2.52", + "@thi.ng/math": "^3.0.1", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/geom-clip-line/CHANGELOG.md b/packages/geom-clip-line/CHANGELOG.md index e70fcc9615..b1d49da33b 100644 --- a/packages/geom-clip-line/CHANGELOG.md +++ b/packages/geom-clip-line/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.2.15](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-clip-line@1.2.14...@thi.ng/geom-clip-line@1.2.15) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/geom-clip-line + + + + + ## [1.2.14](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-clip-line@1.2.13...@thi.ng/geom-clip-line@1.2.14) (2020-12-22) **Note:** Version bump only for package @thi.ng/geom-clip-line diff --git a/packages/geom-clip-line/package.json b/packages/geom-clip-line/package.json index 0db34fcce9..d6b3b0d8d0 100644 --- a/packages/geom-clip-line/package.json +++ b/packages/geom-clip-line/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/geom-clip-line", - "version": "1.2.14", + "version": "1.2.15", "description": "2D line clipping (Liang-Barsky)", "module": "./index.js", "main": "./lib/index.js", @@ -49,9 +49,9 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/geom-isec": "^0.7.3", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/geom-isec": "^0.7.4", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/geom-clip-poly/CHANGELOG.md b/packages/geom-clip-poly/CHANGELOG.md index cea921ddae..693912f8f4 100644 --- a/packages/geom-clip-poly/CHANGELOG.md +++ b/packages/geom-clip-poly/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.0.40](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-clip-poly@1.0.39...@thi.ng/geom-clip-poly@1.0.40) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/geom-clip-poly + + + + + ## [1.0.39](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-clip-poly@1.0.38...@thi.ng/geom-clip-poly@1.0.39) (2020-12-22) **Note:** Version bump only for package @thi.ng/geom-clip-poly diff --git a/packages/geom-clip-poly/package.json b/packages/geom-clip-poly/package.json index 8f4c989d46..8a6593ce0f 100644 --- a/packages/geom-clip-poly/package.json +++ b/packages/geom-clip-poly/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/geom-clip-poly", - "version": "1.0.39", + "version": "1.0.40", "description": "2D convex polygon clipping (Sutherland-Hodgeman)", "module": "./index.js", "main": "./lib/index.js", @@ -49,10 +49,10 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/geom-isec": "^0.7.3", - "@thi.ng/geom-poly-utils": "^0.3.0", - "@thi.ng/math": "^3.0.0", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/geom-isec": "^0.7.4", + "@thi.ng/geom-poly-utils": "^0.3.1", + "@thi.ng/math": "^3.0.1", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/geom-closest-point/CHANGELOG.md b/packages/geom-closest-point/CHANGELOG.md index 6ce44a2cc9..fff036f96c 100644 --- a/packages/geom-closest-point/CHANGELOG.md +++ b/packages/geom-closest-point/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.5.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-closest-point@0.5.5...@thi.ng/geom-closest-point@0.5.6) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/geom-closest-point + + + + + ## [0.5.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-closest-point@0.5.4...@thi.ng/geom-closest-point@0.5.5) (2020-12-22) **Note:** Version bump only for package @thi.ng/geom-closest-point diff --git a/packages/geom-closest-point/package.json b/packages/geom-closest-point/package.json index e2c470bbc0..edad76563c 100644 --- a/packages/geom-closest-point/package.json +++ b/packages/geom-closest-point/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/geom-closest-point", - "version": "0.5.5", + "version": "0.5.6", "description": "2D / 3D closest point / proximity helpers", "module": "./index.js", "main": "./lib/index.js", @@ -49,9 +49,9 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/math": "^3.0.0", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/math": "^3.0.1", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/geom-fuzz/CHANGELOG.md b/packages/geom-fuzz/CHANGELOG.md index 75235840f5..97c1b85fb9 100644 --- a/packages/geom-fuzz/CHANGELOG.md +++ b/packages/geom-fuzz/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.27](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-fuzz@0.1.26...@thi.ng/geom-fuzz@0.1.27) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/geom-fuzz + + + + + ## [0.1.26](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-fuzz@0.1.25...@thi.ng/geom-fuzz@0.1.26) (2020-12-22) **Note:** Version bump only for package @thi.ng/geom-fuzz diff --git a/packages/geom-fuzz/package.json b/packages/geom-fuzz/package.json index fabb7df2e8..4e5eb38994 100644 --- a/packages/geom-fuzz/package.json +++ b/packages/geom-fuzz/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/geom-fuzz", - "version": "0.1.26", + "version": "0.1.27", "description": "Highly configurable, fuzzy line & polygon creation with presets and composable fill & stroke styles. Canvas & SVG support", "module": "./index.js", "main": "./lib/index.js", @@ -48,16 +48,16 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/associative": "^5.0.12", - "@thi.ng/color": "^2.0.0", - "@thi.ng/geom": "^2.0.0", - "@thi.ng/geom-api": "^2.0.0", - "@thi.ng/geom-clip-line": "^1.2.14", - "@thi.ng/geom-resample": "^0.2.51", - "@thi.ng/grid-iterators": "^0.4.16", - "@thi.ng/transducers": "^7.5.3", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/associative": "^5.0.13", + "@thi.ng/color": "^2.1.0", + "@thi.ng/geom": "^2.0.1", + "@thi.ng/geom-api": "^2.0.1", + "@thi.ng/geom-clip-line": "^1.2.15", + "@thi.ng/geom-resample": "^0.2.52", + "@thi.ng/grid-iterators": "^0.4.17", + "@thi.ng/transducers": "^7.5.4", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/geom-hull/CHANGELOG.md b/packages/geom-hull/CHANGELOG.md index 37991cfed8..7f61a1ff1b 100644 --- a/packages/geom-hull/CHANGELOG.md +++ b/packages/geom-hull/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.0.72](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-hull@0.0.71...@thi.ng/geom-hull@0.0.72) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/geom-hull + + + + + ## [0.0.71](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-hull@0.0.70...@thi.ng/geom-hull@0.0.71) (2020-12-22) **Note:** Version bump only for package @thi.ng/geom-hull diff --git a/packages/geom-hull/package.json b/packages/geom-hull/package.json index aeb348d8a9..00ea9a2bdb 100644 --- a/packages/geom-hull/package.json +++ b/packages/geom-hull/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/geom-hull", - "version": "0.0.71", + "version": "0.0.72", "description": "Fast 2D convex hull (Graham Scan)", "module": "./index.js", "main": "./lib/index.js", @@ -49,8 +49,8 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/math": "^3.0.0", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/math": "^3.0.1", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/geom-io-obj/CHANGELOG.md b/packages/geom-io-obj/CHANGELOG.md index fb0eaeb81a..104c337a6a 100644 --- a/packages/geom-io-obj/CHANGELOG.md +++ b/packages/geom-io-obj/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.30](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-io-obj@0.1.29...@thi.ng/geom-io-obj@0.1.30) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/geom-io-obj + + + + + ## [0.1.29](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-io-obj@0.1.28...@thi.ng/geom-io-obj@0.1.29) (2020-12-22) **Note:** Version bump only for package @thi.ng/geom-io-obj diff --git a/packages/geom-io-obj/package.json b/packages/geom-io-obj/package.json index 3ccceeed49..aaf9b54ab2 100644 --- a/packages/geom-io-obj/package.json +++ b/packages/geom-io-obj/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/geom-io-obj", - "version": "0.1.29", + "version": "0.1.30", "description": "Wavefront OBJ parser (& exporter soon)", "module": "./index.js", "main": "./lib/index.js", @@ -49,8 +49,8 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/geom-isec/CHANGELOG.md b/packages/geom-isec/CHANGELOG.md index dc8929ad12..fe7108d0af 100644 --- a/packages/geom-isec/CHANGELOG.md +++ b/packages/geom-isec/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.7.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-isec@0.7.3...@thi.ng/geom-isec@0.7.4) (2021-01-02) + + +### Bug Fixes + +* **geom-isec:** fix [#269](https://github.com/thi-ng/umbrella/issues/269) update rayBox() ([441cddb](https://github.com/thi-ng/umbrella/commit/441cddbdc4707465a182f3fa903a4c6bdc4e9004)) + + + + + ## [0.7.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-isec@0.7.2...@thi.ng/geom-isec@0.7.3) (2020-12-22) **Note:** Version bump only for package @thi.ng/geom-isec diff --git a/packages/geom-isec/package.json b/packages/geom-isec/package.json index 1a141c45ff..6711e32693 100644 --- a/packages/geom-isec/package.json +++ b/packages/geom-isec/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/geom-isec", - "version": "0.7.3", + "version": "0.7.4", "description": "2D/3D shape intersection checks", "module": "./index.js", "main": "./lib/index.js", @@ -49,11 +49,11 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/geom-api": "^2.0.0", - "@thi.ng/geom-closest-point": "^0.5.5", - "@thi.ng/math": "^3.0.0", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/geom-api": "^2.0.1", + "@thi.ng/geom-closest-point": "^0.5.6", + "@thi.ng/math": "^3.0.1", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/geom-isoline/CHANGELOG.md b/packages/geom-isoline/CHANGELOG.md index a85351578a..265549bf68 100644 --- a/packages/geom-isoline/CHANGELOG.md +++ b/packages/geom-isoline/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.70](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-isoline@0.1.69...@thi.ng/geom-isoline@0.1.70) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/geom-isoline + + + + + ## [0.1.69](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-isoline@0.1.68...@thi.ng/geom-isoline@0.1.69) (2020-12-22) **Note:** Version bump only for package @thi.ng/geom-isoline diff --git a/packages/geom-isoline/package.json b/packages/geom-isoline/package.json index 89db611e34..d4da9b2461 100644 --- a/packages/geom-isoline/package.json +++ b/packages/geom-isoline/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/geom-isoline", - "version": "0.1.69", + "version": "0.1.70", "description": "Fast 2D contour line extraction / generation", "module": "./index.js", "main": "./lib/index.js", @@ -49,9 +49,9 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/transducers": "^7.5.3", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/transducers": "^7.5.4", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/geom-poly-utils/CHANGELOG.md b/packages/geom-poly-utils/CHANGELOG.md index e8a8563739..66f24495ef 100644 --- a/packages/geom-poly-utils/CHANGELOG.md +++ b/packages/geom-poly-utils/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.3.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-poly-utils@0.3.0...@thi.ng/geom-poly-utils@0.3.1) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/geom-poly-utils + + + + + # [0.3.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-poly-utils@0.2.2...@thi.ng/geom-poly-utils@0.3.0) (2020-12-22) diff --git a/packages/geom-poly-utils/package.json b/packages/geom-poly-utils/package.json index 86d6440274..e10f8bd71a 100644 --- a/packages/geom-poly-utils/package.json +++ b/packages/geom-poly-utils/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/geom-poly-utils", - "version": "0.3.0", + "version": "0.3.1", "description": "2D polygon/polyline analysis & processing utilities", "module": "./index.js", "main": "./lib/index.js", @@ -49,11 +49,11 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/geom-api": "^2.0.0", - "@thi.ng/math": "^3.0.0", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/geom-api": "^2.0.1", + "@thi.ng/math": "^3.0.1", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/geom-resample/CHANGELOG.md b/packages/geom-resample/CHANGELOG.md index e6643ca89c..87ae3dc261 100644 --- a/packages/geom-resample/CHANGELOG.md +++ b/packages/geom-resample/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.52](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-resample@0.2.51...@thi.ng/geom-resample@0.2.52) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/geom-resample + + + + + ## [0.2.51](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-resample@0.2.50...@thi.ng/geom-resample@0.2.51) (2020-12-22) **Note:** Version bump only for package @thi.ng/geom-resample diff --git a/packages/geom-resample/package.json b/packages/geom-resample/package.json index 8d828233a9..05400363e1 100644 --- a/packages/geom-resample/package.json +++ b/packages/geom-resample/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/geom-resample", - "version": "0.2.51", + "version": "0.2.52", "description": "Customizable nD polyline interpolation, re-sampling, splitting & nearest point computation", "module": "./index.js", "main": "./lib/index.js", @@ -49,11 +49,11 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/checks": "^2.7.12", - "@thi.ng/geom-api": "^2.0.0", - "@thi.ng/geom-closest-point": "^0.5.5", - "@thi.ng/math": "^3.0.0", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/checks": "^2.7.13", + "@thi.ng/geom-api": "^2.0.1", + "@thi.ng/geom-closest-point": "^0.5.6", + "@thi.ng/math": "^3.0.1", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/geom-splines/CHANGELOG.md b/packages/geom-splines/CHANGELOG.md index 350b933e19..502cd4b726 100644 --- a/packages/geom-splines/CHANGELOG.md +++ b/packages/geom-splines/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.5.39](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-splines@0.5.38...@thi.ng/geom-splines@0.5.39) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/geom-splines + + + + + ## [0.5.38](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-splines@0.5.37...@thi.ng/geom-splines@0.5.38) (2020-12-22) **Note:** Version bump only for package @thi.ng/geom-splines diff --git a/packages/geom-splines/package.json b/packages/geom-splines/package.json index 00e572cf9a..c4e0a0b0b3 100644 --- a/packages/geom-splines/package.json +++ b/packages/geom-splines/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/geom-splines", - "version": "0.5.38", + "version": "0.5.39", "description": "nD cubic & quadratic curve analysis, conversion, interpolation, splitting", "module": "./index.js", "main": "./lib/index.js", @@ -49,13 +49,13 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/geom-api": "^2.0.0", - "@thi.ng/geom-arc": "^0.3.18", - "@thi.ng/geom-resample": "^0.2.51", - "@thi.ng/math": "^3.0.0", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/geom-api": "^2.0.1", + "@thi.ng/geom-arc": "^0.3.19", + "@thi.ng/geom-resample": "^0.2.52", + "@thi.ng/math": "^3.0.1", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/geom-subdiv-curve/CHANGELOG.md b/packages/geom-subdiv-curve/CHANGELOG.md index 476e5cfc4a..221d55bb94 100644 --- a/packages/geom-subdiv-curve/CHANGELOG.md +++ b/packages/geom-subdiv-curve/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.70](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-subdiv-curve@0.1.69...@thi.ng/geom-subdiv-curve@0.1.70) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/geom-subdiv-curve + + + + + ## [0.1.69](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-subdiv-curve@0.1.68...@thi.ng/geom-subdiv-curve@0.1.69) (2020-12-22) **Note:** Version bump only for package @thi.ng/geom-subdiv-curve diff --git a/packages/geom-subdiv-curve/package.json b/packages/geom-subdiv-curve/package.json index 1626439f3c..7d8e24939c 100644 --- a/packages/geom-subdiv-curve/package.json +++ b/packages/geom-subdiv-curve/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/geom-subdiv-curve", - "version": "0.1.69", + "version": "0.1.70", "description": "Freely customizable, iterative nD subdivision curves for open / closed geometries", "module": "./index.js", "main": "./lib/index.js", @@ -49,10 +49,10 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/geom-api": "^2.0.0", - "@thi.ng/transducers": "^7.5.3", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/geom-api": "^2.0.1", + "@thi.ng/transducers": "^7.5.4", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/geom-tessellate/CHANGELOG.md b/packages/geom-tessellate/CHANGELOG.md index d0ed1ce034..5e332a8843 100644 --- a/packages/geom-tessellate/CHANGELOG.md +++ b/packages/geom-tessellate/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.53](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-tessellate@0.2.52...@thi.ng/geom-tessellate@0.2.53) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/geom-tessellate + + + + + ## [0.2.52](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-tessellate@0.2.51...@thi.ng/geom-tessellate@0.2.52) (2020-12-22) **Note:** Version bump only for package @thi.ng/geom-tessellate diff --git a/packages/geom-tessellate/package.json b/packages/geom-tessellate/package.json index 4fdce12cf1..41df21cf0f 100644 --- a/packages/geom-tessellate/package.json +++ b/packages/geom-tessellate/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/geom-tessellate", - "version": "0.2.52", + "version": "0.2.53", "description": "2D/3D convex polygon tessellators", "module": "./index.js", "main": "./lib/index.js", @@ -49,12 +49,12 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/checks": "^2.7.12", - "@thi.ng/geom-api": "^2.0.0", - "@thi.ng/geom-isec": "^0.7.3", - "@thi.ng/geom-poly-utils": "^0.3.0", - "@thi.ng/transducers": "^7.5.3", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/checks": "^2.7.13", + "@thi.ng/geom-api": "^2.0.1", + "@thi.ng/geom-isec": "^0.7.4", + "@thi.ng/geom-poly-utils": "^0.3.1", + "@thi.ng/transducers": "^7.5.4", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/geom-voronoi/CHANGELOG.md b/packages/geom-voronoi/CHANGELOG.md index 0eb5b8aa84..8b829e3e1a 100644 --- a/packages/geom-voronoi/CHANGELOG.md +++ b/packages/geom-voronoi/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.15](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-voronoi@0.2.14...@thi.ng/geom-voronoi@0.2.15) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/geom-voronoi + + + + + ## [0.2.14](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-voronoi@0.2.13...@thi.ng/geom-voronoi@0.2.14) (2020-12-22) **Note:** Version bump only for package @thi.ng/geom-voronoi diff --git a/packages/geom-voronoi/package.json b/packages/geom-voronoi/package.json index 8f447b29cc..88882a06ab 100644 --- a/packages/geom-voronoi/package.json +++ b/packages/geom-voronoi/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/geom-voronoi", - "version": "0.2.14", + "version": "0.2.15", "description": "Fast, incremental 2D Delaunay & Voronoi mesh implementation", "module": "./index.js", "main": "./lib/index.js", @@ -49,15 +49,15 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/geom-clip-line": "^1.2.14", - "@thi.ng/geom-clip-poly": "^1.0.39", - "@thi.ng/geom-isec": "^0.7.3", - "@thi.ng/geom-poly-utils": "^0.3.0", - "@thi.ng/math": "^3.0.0", - "@thi.ng/quad-edge": "^0.2.27", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/geom-clip-line": "^1.2.15", + "@thi.ng/geom-clip-poly": "^1.0.40", + "@thi.ng/geom-isec": "^0.7.4", + "@thi.ng/geom-poly-utils": "^0.3.1", + "@thi.ng/math": "^3.0.1", + "@thi.ng/quad-edge": "^0.2.28", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/geom/CHANGELOG.md b/packages/geom/CHANGELOG.md index 1894c2e6ff..f0443dec5c 100644 --- a/packages/geom/CHANGELOG.md +++ b/packages/geom/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.0.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom@2.0.0...@thi.ng/geom@2.0.1) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/geom + + + + + # [2.0.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom@1.13.4...@thi.ng/geom@2.0.0) (2020-12-22) diff --git a/packages/geom/package.json b/packages/geom/package.json index 4a8e4a7670..9296a32623 100644 --- a/packages/geom/package.json +++ b/packages/geom/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/geom", - "version": "2.0.0", + "version": "2.0.1", "description": "Functional, polymorphic API for 2D geometry types & SVG generation", "module": "./index.js", "main": "./lib/index.js", @@ -49,32 +49,32 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/arrays": "^0.8.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/defmulti": "^1.3.3", - "@thi.ng/equiv": "^1.0.34", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/geom-api": "^2.0.0", - "@thi.ng/geom-arc": "^0.3.18", - "@thi.ng/geom-clip-line": "^1.2.14", - "@thi.ng/geom-clip-poly": "^1.0.39", - "@thi.ng/geom-closest-point": "^0.5.5", - "@thi.ng/geom-hull": "^0.0.71", - "@thi.ng/geom-isec": "^0.7.3", - "@thi.ng/geom-poly-utils": "^0.3.0", - "@thi.ng/geom-resample": "^0.2.51", - "@thi.ng/geom-splines": "^0.5.38", - "@thi.ng/geom-subdiv-curve": "^0.1.69", - "@thi.ng/geom-tessellate": "^0.2.52", - "@thi.ng/hiccup": "^3.6.5", - "@thi.ng/hiccup-svg": "^3.6.6", - "@thi.ng/math": "^3.0.0", - "@thi.ng/matrices": "^0.6.38", - "@thi.ng/random": "^2.1.3", - "@thi.ng/strings": "^1.11.3", - "@thi.ng/transducers": "^7.5.3", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/arrays": "^0.9.0", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/defmulti": "^1.3.4", + "@thi.ng/equiv": "^1.0.35", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/geom-api": "^2.0.1", + "@thi.ng/geom-arc": "^0.3.19", + "@thi.ng/geom-clip-line": "^1.2.15", + "@thi.ng/geom-clip-poly": "^1.0.40", + "@thi.ng/geom-closest-point": "^0.5.6", + "@thi.ng/geom-hull": "^0.0.72", + "@thi.ng/geom-isec": "^0.7.4", + "@thi.ng/geom-poly-utils": "^0.3.1", + "@thi.ng/geom-resample": "^0.2.52", + "@thi.ng/geom-splines": "^0.5.39", + "@thi.ng/geom-subdiv-curve": "^0.1.70", + "@thi.ng/geom-tessellate": "^0.2.53", + "@thi.ng/hiccup": "^3.6.6", + "@thi.ng/hiccup-svg": "^3.7.0", + "@thi.ng/math": "^3.0.1", + "@thi.ng/matrices": "^0.6.39", + "@thi.ng/random": "^2.1.4", + "@thi.ng/strings": "^1.11.4", + "@thi.ng/transducers": "^7.5.4", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/gp/CHANGELOG.md b/packages/gp/CHANGELOG.md index b9dc2f5239..45028fe8df 100644 --- a/packages/gp/CHANGELOG.md +++ b/packages/gp/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/gp@0.2.0...@thi.ng/gp@0.2.1) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/gp + + + + + # [0.2.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/gp@0.1.35...@thi.ng/gp@0.2.0) (2020-12-22) diff --git a/packages/gp/package.json b/packages/gp/package.json index 0221fa8c0b..498ad3c5ad 100644 --- a/packages/gp/package.json +++ b/packages/gp/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/gp", - "version": "0.2.0", + "version": "0.2.1", "description": "Genetic programming helpers & strategies (tree based & multi-expression programming)", "module": "./index.js", "main": "./lib/index.js", @@ -49,11 +49,11 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/math": "^3.0.0", - "@thi.ng/random": "^2.1.3", - "@thi.ng/transducers": "^7.5.3", - "@thi.ng/zipper": "^0.1.30" + "@thi.ng/api": "^6.13.6", + "@thi.ng/math": "^3.0.1", + "@thi.ng/random": "^2.1.4", + "@thi.ng/transducers": "^7.5.4", + "@thi.ng/zipper": "^0.1.31" }, "files": [ "*.js", diff --git a/packages/grid-iterators/CHANGELOG.md b/packages/grid-iterators/CHANGELOG.md index 4a4c567669..dc5f207e66 100644 --- a/packages/grid-iterators/CHANGELOG.md +++ b/packages/grid-iterators/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.4.17](https://github.com/thi-ng/umbrella/compare/@thi.ng/grid-iterators@0.4.16...@thi.ng/grid-iterators@0.4.17) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/grid-iterators + + + + + ## [0.4.16](https://github.com/thi-ng/umbrella/compare/@thi.ng/grid-iterators@0.4.15...@thi.ng/grid-iterators@0.4.16) (2020-12-22) **Note:** Version bump only for package @thi.ng/grid-iterators diff --git a/packages/grid-iterators/package.json b/packages/grid-iterators/package.json index 0e12740305..9aacaddca0 100644 --- a/packages/grid-iterators/package.json +++ b/packages/grid-iterators/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/grid-iterators", - "version": "0.4.16", + "version": "0.4.17", "description": "2D grid iterators w/ multiple orderings", "module": "./index.js", "main": "./lib/index.js", @@ -50,11 +50,11 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/arrays": "^0.8.5", - "@thi.ng/binary": "^2.0.20", - "@thi.ng/morton": "^2.0.29", - "@thi.ng/random": "^2.1.3", - "@thi.ng/transducers": "^7.5.3" + "@thi.ng/arrays": "^0.9.0", + "@thi.ng/binary": "^2.0.21", + "@thi.ng/morton": "^2.0.30", + "@thi.ng/random": "^2.1.4", + "@thi.ng/transducers": "^7.5.4" }, "files": [ "*.js", diff --git a/packages/hdiff/CHANGELOG.md b/packages/hdiff/CHANGELOG.md index f75fdd6453..28934dc20a 100644 --- a/packages/hdiff/CHANGELOG.md +++ b/packages/hdiff/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.21](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdiff@0.1.20...@thi.ng/hdiff@0.1.21) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/hdiff + + + + + ## [0.1.20](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdiff@0.1.19...@thi.ng/hdiff@0.1.20) (2020-12-22) **Note:** Version bump only for package @thi.ng/hdiff diff --git a/packages/hdiff/package.json b/packages/hdiff/package.json index ef7118d8c2..e236eddf43 100644 --- a/packages/hdiff/package.json +++ b/packages/hdiff/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/hdiff", - "version": "0.1.20", + "version": "0.1.21", "description": "String diffing w/ hiccup output for further processing, e.g. with @thi.ng/hdom, @thi.ng/hiccup. Includes CLI util to generate HTML, with theme support and code folding", "module": "./index.js", "main": "./lib/index.js", @@ -51,11 +51,11 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/diff": "^4.0.0", - "@thi.ng/hiccup": "^3.6.5", - "@thi.ng/hiccup-css": "^1.1.43", - "@thi.ng/strings": "^1.11.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/diff": "^4.0.1", + "@thi.ng/hiccup": "^3.6.6", + "@thi.ng/hiccup-css": "^1.1.44", + "@thi.ng/strings": "^1.11.4" }, "files": [ "*.js", diff --git a/packages/hdom-canvas/CHANGELOG.md b/packages/hdom-canvas/CHANGELOG.md index 519f21e3c6..4ab01e281a 100644 --- a/packages/hdom-canvas/CHANGELOG.md +++ b/packages/hdom-canvas/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [3.0.25](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom-canvas@3.0.24...@thi.ng/hdom-canvas@3.0.25) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/hdom-canvas + + + + + ## [3.0.24](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom-canvas@3.0.23...@thi.ng/hdom-canvas@3.0.24) (2020-12-22) **Note:** Version bump only for package @thi.ng/hdom-canvas diff --git a/packages/hdom-canvas/package.json b/packages/hdom-canvas/package.json index 4f3eedb4bf..e57306f531 100644 --- a/packages/hdom-canvas/package.json +++ b/packages/hdom-canvas/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/hdom-canvas", - "version": "3.0.24", + "version": "3.0.25", "description": "@thi.ng/hdom component wrapper for declarative canvas scenegraphs", "module": "./index.js", "main": "./lib/index.js", @@ -49,11 +49,11 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/diff": "^4.0.0", - "@thi.ng/hdom": "^8.2.14", - "@thi.ng/hiccup-canvas": "^1.1.14" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/diff": "^4.0.1", + "@thi.ng/hdom": "^8.2.15", + "@thi.ng/hiccup-canvas": "^1.1.15" }, "files": [ "*.js", diff --git a/packages/hdom-components/CHANGELOG.md b/packages/hdom-components/CHANGELOG.md index 3f8879c52b..46940a76cd 100644 --- a/packages/hdom-components/CHANGELOG.md +++ b/packages/hdom-components/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.0.19](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom-components@4.0.18...@thi.ng/hdom-components@4.0.19) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/hdom-components + + + + + ## [4.0.18](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom-components@4.0.17...@thi.ng/hdom-components@4.0.18) (2020-12-22) **Note:** Version bump only for package @thi.ng/hdom-components diff --git a/packages/hdom-components/package.json b/packages/hdom-components/package.json index 0de01aa3b3..d92d7103dd 100644 --- a/packages/hdom-components/package.json +++ b/packages/hdom-components/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/hdom-components", - "version": "4.0.18", + "version": "4.0.19", "description": "Raw, skinnable UI & SVG components for @thi.ng/hdom", "module": "./index.js", "main": "./lib/index.js", @@ -49,12 +49,12 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/adapt-dpi": "^1.0.12", - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/math": "^3.0.0", - "@thi.ng/transducers": "^7.5.3", - "@thi.ng/transducers-stats": "^1.1.44" + "@thi.ng/adapt-dpi": "^1.0.13", + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/math": "^3.0.1", + "@thi.ng/transducers": "^7.5.4", + "@thi.ng/transducers-stats": "^1.1.45" }, "files": [ "*.js", diff --git a/packages/hdom-mock/CHANGELOG.md b/packages/hdom-mock/CHANGELOG.md index 18a2851971..bbde1a88f7 100644 --- a/packages/hdom-mock/CHANGELOG.md +++ b/packages/hdom-mock/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.1.47](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom-mock@1.1.46...@thi.ng/hdom-mock@1.1.47) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/hdom-mock + + + + + ## [1.1.46](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom-mock@1.1.45...@thi.ng/hdom-mock@1.1.46) (2020-12-22) **Note:** Version bump only for package @thi.ng/hdom-mock diff --git a/packages/hdom-mock/package.json b/packages/hdom-mock/package.json index be9b645591..eea567caa3 100644 --- a/packages/hdom-mock/package.json +++ b/packages/hdom-mock/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/hdom-mock", - "version": "1.1.46", + "version": "1.1.47", "description": "Mock base implementation for @thi.ng/hdom API", "module": "./index.js", "main": "./lib/index.js", @@ -49,9 +49,9 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/hdom": "^8.2.14" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/hdom": "^8.2.15" }, "files": [ "*.js", diff --git a/packages/hdom/CHANGELOG.md b/packages/hdom/CHANGELOG.md index a5abb5d07f..f599ffbc5b 100644 --- a/packages/hdom/CHANGELOG.md +++ b/packages/hdom/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.2.15](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom@8.2.14...@thi.ng/hdom@8.2.15) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/hdom + + + + + ## [8.2.14](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom@8.2.13...@thi.ng/hdom@8.2.14) (2020-12-22) **Note:** Version bump only for package @thi.ng/hdom diff --git a/packages/hdom/package.json b/packages/hdom/package.json index 5ad3a4609e..984f349c42 100644 --- a/packages/hdom/package.json +++ b/packages/hdom/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/hdom", - "version": "8.2.14", + "version": "8.2.15", "description": "Lightweight vanilla ES6 UI component trees with customizable branch-local behaviors", "module": "./index.js", "main": "./lib/index.js", @@ -40,7 +40,7 @@ "devDependencies": { "@istanbuljs/nyc-config-typescript": "^1.0.1", "@microsoft/api-extractor": "^7.12.1", - "@thi.ng/atom": "^4.1.25", + "@thi.ng/atom": "^4.1.26", "@types/mocha": "^8.2.0", "@types/node": "^14.14.14", "mocha": "^8.2.1", @@ -50,13 +50,13 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/diff": "^4.0.0", - "@thi.ng/equiv": "^1.0.34", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/hiccup": "^3.6.5", - "@thi.ng/prefixes": "^0.1.9" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/diff": "^4.0.1", + "@thi.ng/equiv": "^1.0.35", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/hiccup": "^3.6.6", + "@thi.ng/prefixes": "^0.1.10" }, "files": [ "*.js", diff --git a/packages/heaps/CHANGELOG.md b/packages/heaps/CHANGELOG.md index 9f4330a6cf..e454a806f5 100644 --- a/packages/heaps/CHANGELOG.md +++ b/packages/heaps/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.2.30](https://github.com/thi-ng/umbrella/compare/@thi.ng/heaps@1.2.29...@thi.ng/heaps@1.2.30) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/heaps + + + + + ## [1.2.29](https://github.com/thi-ng/umbrella/compare/@thi.ng/heaps@1.2.28...@thi.ng/heaps@1.2.29) (2020-12-22) **Note:** Version bump only for package @thi.ng/heaps diff --git a/packages/heaps/package.json b/packages/heaps/package.json index 92a401e3e3..967dcbe9be 100644 --- a/packages/heaps/package.json +++ b/packages/heaps/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/heaps", - "version": "1.2.29", + "version": "1.2.30", "description": "Various heap implementations for arbitrary values and with customizable ordering", "module": "./index.js", "main": "./lib/index.js", @@ -50,8 +50,8 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/compare": "^1.3.21" + "@thi.ng/api": "^6.13.6", + "@thi.ng/compare": "^1.3.22" }, "files": [ "*.js", diff --git a/packages/hex/CHANGELOG.md b/packages/hex/CHANGELOG.md index 40ee2983d4..31d11b6b9b 100644 --- a/packages/hex/CHANGELOG.md +++ b/packages/hex/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/hex@0.1.2...@thi.ng/hex@0.1.3) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/hex + + + + + ## [0.1.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/hex@0.1.1...@thi.ng/hex@0.1.2) (2020-12-22) **Note:** Version bump only for package @thi.ng/hex diff --git a/packages/hex/package.json b/packages/hex/package.json index baa3042338..1e81596e18 100644 --- a/packages/hex/package.json +++ b/packages/hex/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/hex", - "version": "0.1.2", + "version": "0.1.3", "description": "Hex string formatters for 4/8/16/24/32/48/64bit words", "module": "./index.js", "main": "./lib/index.js", diff --git a/packages/hiccup-canvas/CHANGELOG.md b/packages/hiccup-canvas/CHANGELOG.md index 79045b5218..78a30e2f14 100644 --- a/packages/hiccup-canvas/CHANGELOG.md +++ b/packages/hiccup-canvas/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.1.15](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-canvas@1.1.14...@thi.ng/hiccup-canvas@1.1.15) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/hiccup-canvas + + + + + ## [1.1.14](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-canvas@1.1.13...@thi.ng/hiccup-canvas@1.1.14) (2020-12-22) **Note:** Version bump only for package @thi.ng/hiccup-canvas diff --git a/packages/hiccup-canvas/package.json b/packages/hiccup-canvas/package.json index 7f498b6450..729651dc7c 100644 --- a/packages/hiccup-canvas/package.json +++ b/packages/hiccup-canvas/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/hiccup-canvas", - "version": "1.1.14", + "version": "1.1.15", "description": "Hiccup shape tree renderer for vanilla Canvas 2D contexts", "module": "./index.js", "main": "./lib/index.js", @@ -48,11 +48,11 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/color": "^2.0.0", - "@thi.ng/math": "^3.0.0", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/color": "^2.1.0", + "@thi.ng/math": "^3.0.1", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/hiccup-carbon-icons/CHANGELOG.md b/packages/hiccup-carbon-icons/CHANGELOG.md index 07c5513df6..37b057f0cc 100644 --- a/packages/hiccup-carbon-icons/CHANGELOG.md +++ b/packages/hiccup-carbon-icons/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.0.9](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-carbon-icons@2.0.8...@thi.ng/hiccup-carbon-icons@2.0.9) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/hiccup-carbon-icons + + + + + ## [2.0.8](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-carbon-icons@2.0.7...@thi.ng/hiccup-carbon-icons@2.0.8) (2020-12-22) **Note:** Version bump only for package @thi.ng/hiccup-carbon-icons diff --git a/packages/hiccup-carbon-icons/package.json b/packages/hiccup-carbon-icons/package.json index ee3edcb171..56862b9617 100644 --- a/packages/hiccup-carbon-icons/package.json +++ b/packages/hiccup-carbon-icons/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/hiccup-carbon-icons", - "version": "2.0.8", + "version": "2.0.9", "description": "Full set of IBM's Carbon icons in hiccup format", "module": "./index.js", "main": "./lib/index.js", @@ -42,7 +42,7 @@ "devDependencies": { "@istanbuljs/nyc-config-typescript": "^1.0.1", "@microsoft/api-extractor": "^7.12.1", - "@thi.ng/hiccup": "^3.6.5", + "@thi.ng/hiccup": "^3.6.6", "@types/mocha": "^8.2.0", "@types/node": "^14.14.14", "mocha": "^8.2.1", diff --git a/packages/hiccup-css/CHANGELOG.md b/packages/hiccup-css/CHANGELOG.md index fed65d0c80..777c94748a 100644 --- a/packages/hiccup-css/CHANGELOG.md +++ b/packages/hiccup-css/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.1.44](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-css@1.1.43...@thi.ng/hiccup-css@1.1.44) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/hiccup-css + + + + + ## [1.1.43](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-css@1.1.42...@thi.ng/hiccup-css@1.1.43) (2020-12-22) **Note:** Version bump only for package @thi.ng/hiccup-css diff --git a/packages/hiccup-css/package.json b/packages/hiccup-css/package.json index fbed811cb3..802e2d3557 100644 --- a/packages/hiccup-css/package.json +++ b/packages/hiccup-css/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/hiccup-css", - "version": "1.1.43", + "version": "1.1.44", "description": "CSS from nested JS data structures", "module": "./index.js", "main": "./lib/index.js", @@ -49,10 +49,10 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/transducers": "^7.5.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/transducers": "^7.5.4" }, "files": [ "*.js", diff --git a/packages/hiccup-html/CHANGELOG.md b/packages/hiccup-html/CHANGELOG.md index e563bcaa6c..dcb8ec40d5 100644 --- a/packages/hiccup-html/CHANGELOG.md +++ b/packages/hiccup-html/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.3.11](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-html@0.3.10...@thi.ng/hiccup-html@0.3.11) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/hiccup-html + + + + + ## [0.3.10](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-html@0.3.9...@thi.ng/hiccup-html@0.3.10) (2020-12-22) **Note:** Version bump only for package @thi.ng/hiccup-html diff --git a/packages/hiccup-html/package.json b/packages/hiccup-html/package.json index a492ddab83..a52c5b6bb0 100644 --- a/packages/hiccup-html/package.json +++ b/packages/hiccup-html/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/hiccup-html", - "version": "0.3.10", + "version": "0.3.11", "description": "100+ type-checked HTML5 element functions for @thi.ng/hiccup related infrastructure", "module": "./index.js", "main": "./lib/index.js", @@ -48,7 +48,7 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5" + "@thi.ng/api": "^6.13.6" }, "files": [ "*.js", diff --git a/packages/hiccup-markdown/CHANGELOG.md b/packages/hiccup-markdown/CHANGELOG.md index 1a24bf2d00..70cbb0eb3a 100644 --- a/packages/hiccup-markdown/CHANGELOG.md +++ b/packages/hiccup-markdown/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.2.40](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-markdown@1.2.39...@thi.ng/hiccup-markdown@1.2.40) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/hiccup-markdown + + + + + ## [1.2.39](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-markdown@1.2.38...@thi.ng/hiccup-markdown@1.2.39) (2020-12-22) **Note:** Version bump only for package @thi.ng/hiccup-markdown diff --git a/packages/hiccup-markdown/package.json b/packages/hiccup-markdown/package.json index 226ae7b82e..c33be71c1c 100644 --- a/packages/hiccup-markdown/package.json +++ b/packages/hiccup-markdown/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/hiccup-markdown", - "version": "1.2.39", + "version": "1.2.40", "description": "Markdown parser & serializer from/to Hiccup format", "module": "./index.js", "main": "./lib/index.js", @@ -49,16 +49,16 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/arrays": "^0.8.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/defmulti": "^1.3.3", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/fsm": "^2.4.30", - "@thi.ng/hiccup": "^3.6.5", - "@thi.ng/strings": "^1.11.3", - "@thi.ng/text-canvas": "^0.2.36", - "@thi.ng/transducers": "^7.5.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/arrays": "^0.9.0", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/defmulti": "^1.3.4", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/fsm": "^2.4.31", + "@thi.ng/hiccup": "^3.6.6", + "@thi.ng/strings": "^1.11.4", + "@thi.ng/text-canvas": "^0.3.0", + "@thi.ng/transducers": "^7.5.4" }, "files": [ "*.js", diff --git a/packages/hiccup-svg/CHANGELOG.md b/packages/hiccup-svg/CHANGELOG.md index f19d9f6749..da4d627221 100644 --- a/packages/hiccup-svg/CHANGELOG.md +++ b/packages/hiccup-svg/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [3.7.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-svg@3.6.6...@thi.ng/hiccup-svg@3.7.0) (2021-01-02) + + +### Features + +* **hiccup-svg:** update svg(), add convert attrib ([cd67a09](https://github.com/thi-ng/umbrella/commit/cd67a09c61c93bc7a84ac63eab48f85ab6c52d2a)) + + + + + ## [3.6.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-svg@3.6.5...@thi.ng/hiccup-svg@3.6.6) (2020-12-22) **Note:** Version bump only for package @thi.ng/hiccup-svg diff --git a/packages/hiccup-svg/package.json b/packages/hiccup-svg/package.json index 215fe7f580..4624b329dd 100644 --- a/packages/hiccup-svg/package.json +++ b/packages/hiccup-svg/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/hiccup-svg", - "version": "3.6.6", + "version": "3.7.0", "description": "SVG element functions for @thi.ng/hiccup & @thi.ng/hdom", "module": "./index.js", "main": "./lib/index.js", @@ -49,9 +49,9 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/checks": "^2.7.12", - "@thi.ng/color": "^2.0.0", - "@thi.ng/prefixes": "^0.1.9" + "@thi.ng/checks": "^2.7.13", + "@thi.ng/color": "^2.1.0", + "@thi.ng/prefixes": "^0.1.10" }, "files": [ "*.js", diff --git a/packages/hiccup/CHANGELOG.md b/packages/hiccup/CHANGELOG.md index 1ceb3de6de..1780831b9b 100644 --- a/packages/hiccup/CHANGELOG.md +++ b/packages/hiccup/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [3.6.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup@3.6.5...@thi.ng/hiccup@3.6.6) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/hiccup + + + + + ## [3.6.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup@3.6.4...@thi.ng/hiccup@3.6.5) (2020-12-22) **Note:** Version bump only for package @thi.ng/hiccup diff --git a/packages/hiccup/package.json b/packages/hiccup/package.json index f7eb3ec583..61ca6593da 100644 --- a/packages/hiccup/package.json +++ b/packages/hiccup/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/hiccup", - "version": "3.6.5", + "version": "3.6.6", "description": "HTML/SVG/XML serialization of nested data structures, iterables & closures", "module": "./index.js", "main": "./lib/index.js", @@ -40,7 +40,7 @@ "devDependencies": { "@istanbuljs/nyc-config-typescript": "^1.0.1", "@microsoft/api-extractor": "^7.12.1", - "@thi.ng/atom": "^4.1.25", + "@thi.ng/atom": "^4.1.26", "@types/mocha": "^8.2.0", "@types/node": "^14.14.14", "mocha": "^8.2.1", @@ -50,9 +50,9 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/errors": "^1.2.25" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/errors": "^1.2.26" }, "files": [ "*.js", diff --git a/packages/idgen/CHANGELOG.md b/packages/idgen/CHANGELOG.md index 5e1b177634..71b1ddb7c3 100644 --- a/packages/idgen/CHANGELOG.md +++ b/packages/idgen/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.29](https://github.com/thi-ng/umbrella/compare/@thi.ng/idgen@0.2.28...@thi.ng/idgen@0.2.29) (2021-01-02) + + +### Performance Improvements + +* **idgen:** minor updates IDGen, add doc strings ([1c0e284](https://github.com/thi-ng/umbrella/commit/1c0e284e9f48d4a37a55f74db0fb2b6eade9dc89)) + + + + + ## [0.2.28](https://github.com/thi-ng/umbrella/compare/@thi.ng/idgen@0.2.27...@thi.ng/idgen@0.2.28) (2020-12-22) **Note:** Version bump only for package @thi.ng/idgen diff --git a/packages/idgen/package.json b/packages/idgen/package.json index 9b718c2518..959a97e1df 100644 --- a/packages/idgen/package.json +++ b/packages/idgen/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/idgen", - "version": "0.2.28", + "version": "0.2.29", "description": "Generator of opaque numeric identifiers with optional support for ID versioning and efficient re-use", "module": "./index.js", "main": "./lib/index.js", @@ -49,7 +49,7 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", + "@thi.ng/api": "^6.13.6", "tslib": "2.0.1" }, "files": [ diff --git a/packages/iges/CHANGELOG.md b/packages/iges/CHANGELOG.md index c6b56000c3..bbf3e862e8 100644 --- a/packages/iges/CHANGELOG.md +++ b/packages/iges/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.1.54](https://github.com/thi-ng/umbrella/compare/@thi.ng/iges@1.1.53...@thi.ng/iges@1.1.54) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/iges + + + + + ## [1.1.53](https://github.com/thi-ng/umbrella/compare/@thi.ng/iges@1.1.52...@thi.ng/iges@1.1.53) (2020-12-22) **Note:** Version bump only for package @thi.ng/iges diff --git a/packages/iges/package.json b/packages/iges/package.json index b27d61fe18..cca3837a46 100644 --- a/packages/iges/package.json +++ b/packages/iges/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/iges", - "version": "1.1.53", + "version": "1.1.54", "description": "IGES 5.3 serializer for (currently only) polygonal geometry, both open & closed", "module": "./index.js", "main": "./lib/index.js", @@ -49,12 +49,12 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/defmulti": "^1.3.3", - "@thi.ng/strings": "^1.11.3", - "@thi.ng/transducers": "^7.5.3", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/defmulti": "^1.3.4", + "@thi.ng/strings": "^1.11.4", + "@thi.ng/transducers": "^7.5.4", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/imgui/CHANGELOG.md b/packages/imgui/CHANGELOG.md index df0c83935f..a31569f120 100644 --- a/packages/imgui/CHANGELOG.md +++ b/packages/imgui/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.47](https://github.com/thi-ng/umbrella/compare/@thi.ng/imgui@0.2.46...@thi.ng/imgui@0.2.47) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/imgui + + + + + ## [0.2.46](https://github.com/thi-ng/umbrella/compare/@thi.ng/imgui@0.2.45...@thi.ng/imgui@0.2.46) (2020-12-22) **Note:** Version bump only for package @thi.ng/imgui diff --git a/packages/imgui/package.json b/packages/imgui/package.json index 83d8828900..6c400417af 100644 --- a/packages/imgui/package.json +++ b/packages/imgui/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/imgui", - "version": "0.2.46", + "version": "0.2.47", "description": "Immediate mode GUI with flexible state handling & data only shape output", "module": "./index.js", "main": "./lib/index.js", @@ -49,16 +49,16 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/geom": "^2.0.0", - "@thi.ng/geom-api": "^2.0.0", - "@thi.ng/geom-isec": "^0.7.3", - "@thi.ng/geom-tessellate": "^0.2.52", - "@thi.ng/layout": "^0.1.26", - "@thi.ng/math": "^3.0.0", - "@thi.ng/transducers": "^7.5.3", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/geom": "^2.0.1", + "@thi.ng/geom-api": "^2.0.1", + "@thi.ng/geom-isec": "^0.7.4", + "@thi.ng/geom-tessellate": "^0.2.53", + "@thi.ng/layout": "^0.1.27", + "@thi.ng/math": "^3.0.1", + "@thi.ng/transducers": "^7.5.4", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/interceptors/CHANGELOG.md b/packages/interceptors/CHANGELOG.md index 8f76a6a3aa..8edea82041 100644 --- a/packages/interceptors/CHANGELOG.md +++ b/packages/interceptors/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.2.37](https://github.com/thi-ng/umbrella/compare/@thi.ng/interceptors@2.2.36...@thi.ng/interceptors@2.2.37) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/interceptors + + + + + ## [2.2.36](https://github.com/thi-ng/umbrella/compare/@thi.ng/interceptors@2.2.35...@thi.ng/interceptors@2.2.36) (2020-12-22) **Note:** Version bump only for package @thi.ng/interceptors diff --git a/packages/interceptors/package.json b/packages/interceptors/package.json index 6316db1274..f0d7fc72c4 100644 --- a/packages/interceptors/package.json +++ b/packages/interceptors/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/interceptors", - "version": "2.2.36", + "version": "2.2.37", "description": "Interceptor based event bus, side effect & immutable state handling", "module": "./index.js", "main": "./lib/index.js", @@ -49,11 +49,11 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/atom": "^4.1.25", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/paths": "^4.1.11" + "@thi.ng/api": "^6.13.6", + "@thi.ng/atom": "^4.1.26", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/paths": "^4.1.12" }, "files": [ "*.js", diff --git a/packages/intervals/CHANGELOG.md b/packages/intervals/CHANGELOG.md index 68f209227e..abe0e81298 100644 --- a/packages/intervals/CHANGELOG.md +++ b/packages/intervals/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/intervals@2.1.3...@thi.ng/intervals@2.1.4) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/intervals + + + + + ## [2.1.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/intervals@2.1.2...@thi.ng/intervals@2.1.3) (2020-12-22) **Note:** Version bump only for package @thi.ng/intervals diff --git a/packages/intervals/package.json b/packages/intervals/package.json index 88d13c0bda..4584282fb4 100644 --- a/packages/intervals/package.json +++ b/packages/intervals/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/intervals", - "version": "2.1.3", + "version": "2.1.4", "description": "Closed/open/semi-open interval data type, queries & operations", "module": "./index.js", "main": "./lib/index.js", @@ -49,10 +49,10 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/dlogic": "^1.0.36", - "@thi.ng/errors": "^1.2.25" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/dlogic": "^1.0.37", + "@thi.ng/errors": "^1.2.26" }, "files": [ "*.js", diff --git a/packages/iterators/CHANGELOG.md b/packages/iterators/CHANGELOG.md index bad05d4f49..b8a0c81870 100644 --- a/packages/iterators/CHANGELOG.md +++ b/packages/iterators/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.1.45](https://github.com/thi-ng/umbrella/compare/@thi.ng/iterators@5.1.44...@thi.ng/iterators@5.1.45) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/iterators + + + + + ## [5.1.44](https://github.com/thi-ng/umbrella/compare/@thi.ng/iterators@5.1.43...@thi.ng/iterators@5.1.44) (2020-12-22) **Note:** Version bump only for package @thi.ng/iterators diff --git a/packages/iterators/package.json b/packages/iterators/package.json index 999fa3e973..57f7c53422 100644 --- a/packages/iterators/package.json +++ b/packages/iterators/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/iterators", - "version": "5.1.44", + "version": "5.1.45", "description": "Clojure inspired, composable ES6 iterators & generators", "module": "./index.js", "main": "./lib/index.js", @@ -49,9 +49,9 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/dcons": "^2.3.4", - "@thi.ng/errors": "^1.2.25" + "@thi.ng/api": "^6.13.6", + "@thi.ng/dcons": "^2.3.5", + "@thi.ng/errors": "^1.2.26" }, "files": [ "*.js", diff --git a/packages/layout/CHANGELOG.md b/packages/layout/CHANGELOG.md index e3d6dda2e9..7bbba1b312 100644 --- a/packages/layout/CHANGELOG.md +++ b/packages/layout/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.27](https://github.com/thi-ng/umbrella/compare/@thi.ng/layout@0.1.26...@thi.ng/layout@0.1.27) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/layout + + + + + ## [0.1.26](https://github.com/thi-ng/umbrella/compare/@thi.ng/layout@0.1.25...@thi.ng/layout@0.1.26) (2020-12-22) **Note:** Version bump only for package @thi.ng/layout diff --git a/packages/layout/package.json b/packages/layout/package.json index 63cd67d48f..ced9e41222 100644 --- a/packages/layout/package.json +++ b/packages/layout/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/layout", - "version": "0.1.26", + "version": "0.1.27", "description": "Configurable nested 2D grid layout manager", "module": "./index.js", "main": "./lib/index.js", @@ -49,7 +49,7 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/checks": "^2.7.12" + "@thi.ng/checks": "^2.7.13" }, "files": [ "*.js", diff --git a/packages/leb128/CHANGELOG.md b/packages/leb128/CHANGELOG.md index 3cd09a10d4..6715726ca8 100644 --- a/packages/leb128/CHANGELOG.md +++ b/packages/leb128/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.0.39](https://github.com/thi-ng/umbrella/compare/@thi.ng/leb128@1.0.38...@thi.ng/leb128@1.0.39) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/leb128 + + + + + ## [1.0.38](https://github.com/thi-ng/umbrella/compare/@thi.ng/leb128@1.0.37...@thi.ng/leb128@1.0.38) (2020-12-22) **Note:** Version bump only for package @thi.ng/leb128 diff --git a/packages/leb128/package.json b/packages/leb128/package.json index 8440893fc0..a2340a727b 100644 --- a/packages/leb128/package.json +++ b/packages/leb128/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/leb128", - "version": "1.0.38", + "version": "1.0.39", "description": "WASM based LEB128 encoder / decoder (signed & unsigned)", "module": "./index.js", "main": "./lib/index.js", @@ -50,9 +50,9 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/checks": "^2.7.12", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/transducers-binary": "^0.6.0" + "@thi.ng/checks": "^2.7.13", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/transducers-binary": "^0.6.1" }, "files": [ "*.js", diff --git a/packages/lsys/CHANGELOG.md b/packages/lsys/CHANGELOG.md index 20a9ebd683..54a1699653 100644 --- a/packages/lsys/CHANGELOG.md +++ b/packages/lsys/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.67](https://github.com/thi-ng/umbrella/compare/@thi.ng/lsys@0.2.66...@thi.ng/lsys@0.2.67) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/lsys + + + + + ## [0.2.66](https://github.com/thi-ng/umbrella/compare/@thi.ng/lsys@0.2.65...@thi.ng/lsys@0.2.66) (2020-12-22) **Note:** Version bump only for package @thi.ng/lsys diff --git a/packages/lsys/package.json b/packages/lsys/package.json index 93d9c36d88..e7299085f7 100644 --- a/packages/lsys/package.json +++ b/packages/lsys/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/lsys", - "version": "0.2.66", + "version": "0.2.67", "description": "Functional, extensible L-System architecture w/ support for probabilistic rules", "module": "./index.js", "main": "./lib/index.js", @@ -49,13 +49,13 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/compose": "^1.4.22", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/math": "^3.0.0", - "@thi.ng/random": "^2.1.3", - "@thi.ng/transducers": "^7.5.3", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/compose": "^1.4.23", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/math": "^3.0.1", + "@thi.ng/random": "^2.1.4", + "@thi.ng/transducers": "^7.5.4", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/malloc/CHANGELOG.md b/packages/malloc/CHANGELOG.md index 87b5df3b6a..ef64b546bc 100644 --- a/packages/malloc/CHANGELOG.md +++ b/packages/malloc/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.2.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/malloc@4.2.4...@thi.ng/malloc@4.2.5) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/malloc + + + + + ## [4.2.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/malloc@4.2.3...@thi.ng/malloc@4.2.4) (2020-12-22) **Note:** Version bump only for package @thi.ng/malloc diff --git a/packages/malloc/package.json b/packages/malloc/package.json index e3538b56f3..2b39733df2 100644 --- a/packages/malloc/package.json +++ b/packages/malloc/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/malloc", - "version": "4.2.4", + "version": "4.2.5", "description": "ArrayBuffer based malloc() impl for hybrid JS/WASM use cases, based on thi.ng/tinyalloc", "module": "./index.js", "main": "./lib/index.js", @@ -49,10 +49,10 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/binary": "^2.0.20", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/errors": "^1.2.25" + "@thi.ng/api": "^6.13.6", + "@thi.ng/binary": "^2.0.21", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/errors": "^1.2.26" }, "files": [ "*.js", diff --git a/packages/math/CHANGELOG.md b/packages/math/CHANGELOG.md index 453d5e6a8b..8d76992fb4 100644 --- a/packages/math/CHANGELOG.md +++ b/packages/math/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [3.0.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/math@3.0.0...@thi.ng/math@3.0.1) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/math + + + + + # [3.0.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/math@2.2.2...@thi.ng/math@3.0.0) (2020-12-22) diff --git a/packages/math/package.json b/packages/math/package.json index 8c146e5c3a..b701791c9b 100644 --- a/packages/math/package.json +++ b/packages/math/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/math", - "version": "3.0.0", + "version": "3.0.1", "description": "Assorted common math functions & utilities", "module": "./index.js", "main": "./lib/index.js", @@ -49,7 +49,7 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5" + "@thi.ng/api": "^6.13.6" }, "files": [ "*.js", diff --git a/packages/matrices/CHANGELOG.md b/packages/matrices/CHANGELOG.md index cb6c61e765..2bac474494 100644 --- a/packages/matrices/CHANGELOG.md +++ b/packages/matrices/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.6.39](https://github.com/thi-ng/umbrella/compare/@thi.ng/matrices@0.6.38...@thi.ng/matrices@0.6.39) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/matrices + + + + + ## [0.6.38](https://github.com/thi-ng/umbrella/compare/@thi.ng/matrices@0.6.37...@thi.ng/matrices@0.6.38) (2020-12-22) **Note:** Version bump only for package @thi.ng/matrices diff --git a/packages/matrices/package.json b/packages/matrices/package.json index 4fac149bf9..f26a495c6e 100644 --- a/packages/matrices/package.json +++ b/packages/matrices/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/matrices", - "version": "0.6.38", + "version": "0.6.39", "description": "Matrix & quaternion operations for 2D/3D geometry processing", "module": "./index.js", "main": "./lib/index.js", @@ -49,10 +49,10 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/math": "^3.0.0", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/math": "^3.0.1", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/memoize/CHANGELOG.md b/packages/memoize/CHANGELOG.md index dbce87ece5..fb150cd255 100644 --- a/packages/memoize/CHANGELOG.md +++ b/packages/memoize/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.8](https://github.com/thi-ng/umbrella/compare/@thi.ng/memoize@2.1.7...@thi.ng/memoize@2.1.8) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/memoize + + + + + ## [2.1.7](https://github.com/thi-ng/umbrella/compare/@thi.ng/memoize@2.1.6...@thi.ng/memoize@2.1.7) (2020-12-22) **Note:** Version bump only for package @thi.ng/memoize diff --git a/packages/memoize/package.json b/packages/memoize/package.json index ea29c5818d..5e67651a49 100644 --- a/packages/memoize/package.json +++ b/packages/memoize/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/memoize", - "version": "2.1.7", + "version": "2.1.8", "description": "Function memoization with configurable caching", "module": "./index.js", "main": "./lib/index.js", @@ -49,7 +49,7 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5" + "@thi.ng/api": "^6.13.6" }, "files": [ "*.js", diff --git a/packages/mime/CHANGELOG.md b/packages/mime/CHANGELOG.md index e92ee83004..08e62660c9 100644 --- a/packages/mime/CHANGELOG.md +++ b/packages/mime/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.27](https://github.com/thi-ng/umbrella/compare/@thi.ng/mime@0.1.26...@thi.ng/mime@0.1.27) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/mime + + + + + ## [0.1.26](https://github.com/thi-ng/umbrella/compare/@thi.ng/mime@0.1.25...@thi.ng/mime@0.1.26) (2020-12-22) **Note:** Version bump only for package @thi.ng/mime diff --git a/packages/mime/package.json b/packages/mime/package.json index a5ca4f4622..9e9fcae0bd 100644 --- a/packages/mime/package.json +++ b/packages/mime/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/mime", - "version": "0.1.26", + "version": "0.1.27", "description": "350+ file extension to MIME type mappings, based on mime-db", "module": "./index.js", "main": "./lib/index.js", @@ -49,7 +49,7 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5" + "@thi.ng/api": "^6.13.6" }, "files": [ "*.js", diff --git a/packages/morton/CHANGELOG.md b/packages/morton/CHANGELOG.md index 41f55835a1..eca4b7ffc0 100644 --- a/packages/morton/CHANGELOG.md +++ b/packages/morton/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.0.30](https://github.com/thi-ng/umbrella/compare/@thi.ng/morton@2.0.29...@thi.ng/morton@2.0.30) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/morton + + + + + ## [2.0.29](https://github.com/thi-ng/umbrella/compare/@thi.ng/morton@2.0.28...@thi.ng/morton@2.0.29) (2020-12-22) **Note:** Version bump only for package @thi.ng/morton diff --git a/packages/morton/package.json b/packages/morton/package.json index c8b69d88fb..f0184a1c69 100644 --- a/packages/morton/package.json +++ b/packages/morton/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/morton", - "version": "2.0.29", + "version": "2.0.30", "description": "Z-order curve / Morton encoding, decoding & range extraction for arbitrary dimensions", "module": "./index.js", "main": "./lib/index.js", @@ -49,9 +49,9 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/binary": "^2.0.20", - "@thi.ng/math": "^3.0.0" + "@thi.ng/api": "^6.13.6", + "@thi.ng/binary": "^2.0.21", + "@thi.ng/math": "^3.0.1" }, "files": [ "*.js", diff --git a/packages/oquery/CHANGELOG.md b/packages/oquery/CHANGELOG.md index 1f1c437ec4..0db85af39b 100644 --- a/packages/oquery/CHANGELOG.md +++ b/packages/oquery/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/oquery@0.2.2...@thi.ng/oquery@0.2.3) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/oquery + + + + + ## [0.2.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/oquery@0.2.1...@thi.ng/oquery@0.2.2) (2020-12-22) **Note:** Version bump only for package @thi.ng/oquery diff --git a/packages/oquery/package.json b/packages/oquery/package.json index a67030f8f9..df89a67043 100644 --- a/packages/oquery/package.json +++ b/packages/oquery/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/oquery", - "version": "0.2.2", + "version": "0.2.3", "description": "Datalog-inspired, optimized pattern/predicate query engine for JS objects & arrays", "module": "./index.js", "main": "./lib/index.js", @@ -48,10 +48,10 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/defmulti": "^1.3.3", - "@thi.ng/equiv": "^1.0.34" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/defmulti": "^1.3.4", + "@thi.ng/equiv": "^1.0.35" }, "files": [ "*.js", diff --git a/packages/parse/CHANGELOG.md b/packages/parse/CHANGELOG.md index 45fde688a0..9605eb25a0 100644 --- a/packages/parse/CHANGELOG.md +++ b/packages/parse/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.9.9](https://github.com/thi-ng/umbrella/compare/@thi.ng/parse@0.9.8...@thi.ng/parse@0.9.9) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/parse + + + + + ## [0.9.8](https://github.com/thi-ng/umbrella/compare/@thi.ng/parse@0.9.7...@thi.ng/parse@0.9.8) (2020-12-22) **Note:** Version bump only for package @thi.ng/parse diff --git a/packages/parse/package.json b/packages/parse/package.json index 9ab809b076..e82a04ae2b 100644 --- a/packages/parse/package.json +++ b/packages/parse/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/parse", - "version": "0.9.8", + "version": "0.9.9", "description": "Purely functional parser combinators & AST generation for generic inputs", "module": "./index.js", "main": "./lib/index.js", @@ -49,11 +49,11 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/defmulti": "^1.3.3", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/strings": "^1.11.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/defmulti": "^1.3.4", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/strings": "^1.11.4" }, "files": [ "*.js", diff --git a/packages/paths/CHANGELOG.md b/packages/paths/CHANGELOG.md index a7f1368840..f911cedfa2 100644 --- a/packages/paths/CHANGELOG.md +++ b/packages/paths/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.1.12](https://github.com/thi-ng/umbrella/compare/@thi.ng/paths@4.1.11...@thi.ng/paths@4.1.12) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/paths + + + + + ## [4.1.11](https://github.com/thi-ng/umbrella/compare/@thi.ng/paths@4.1.10...@thi.ng/paths@4.1.11) (2020-12-22) **Note:** Version bump only for package @thi.ng/paths diff --git a/packages/paths/package.json b/packages/paths/package.json index e8fa6b9eec..3080b84446 100644 --- a/packages/paths/package.json +++ b/packages/paths/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/paths", - "version": "4.1.11", + "version": "4.1.12", "description": "Immutable, optimized and optionally typed path-based object property / array accessors with structural sharing", "module": "./index.js", "main": "./lib/index.js", @@ -49,9 +49,9 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/errors": "^1.2.25" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/errors": "^1.2.26" }, "files": [ "*.js", diff --git a/packages/pixel/CHANGELOG.md b/packages/pixel/CHANGELOG.md index 4f3d2a9770..0a8a1de379 100644 --- a/packages/pixel/CHANGELOG.md +++ b/packages/pixel/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [0.5.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/pixel@0.4.10...@thi.ng/pixel@0.5.0) (2021-01-02) + + +### Features + +* **pixel:** add FLOAT_HSVA format, update FloatFormatSpec ([118c4ed](https://github.com/thi-ng/umbrella/commit/118c4edbacd75249262f26962153f614148cedec)) +* **pixel:** add FloatBuffer.fromPacked() ([abd1ca8](https://github.com/thi-ng/umbrella/commit/abd1ca80d455999dd8c3af87d24b4f1905d7806d)) + + + + + ## [0.4.10](https://github.com/thi-ng/umbrella/compare/@thi.ng/pixel@0.4.9...@thi.ng/pixel@0.4.10) (2020-12-22) **Note:** Version bump only for package @thi.ng/pixel diff --git a/packages/pixel/package.json b/packages/pixel/package.json index 3bf0f8bbb6..cc4324d6f9 100644 --- a/packages/pixel/package.json +++ b/packages/pixel/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/pixel", - "version": "0.4.10", + "version": "0.5.0", "description": "Typed array backed, packed integer and unpacked floating point pixel buffers w/ customizable formats, blitting, dithering, conversions", "module": "./index.js", "main": "./lib/index.js", @@ -49,10 +49,10 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/math": "^3.0.0", - "@thi.ng/porter-duff": "^0.1.35" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/math": "^3.0.1", + "@thi.ng/porter-duff": "^0.1.36" }, "files": [ "*.js", diff --git a/packages/pointfree-lang/CHANGELOG.md b/packages/pointfree-lang/CHANGELOG.md index dec2739b78..6ded68346c 100644 --- a/packages/pointfree-lang/CHANGELOG.md +++ b/packages/pointfree-lang/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.4.19](https://github.com/thi-ng/umbrella/compare/@thi.ng/pointfree-lang@1.4.18...@thi.ng/pointfree-lang@1.4.19) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/pointfree-lang + + + + + ## [1.4.18](https://github.com/thi-ng/umbrella/compare/@thi.ng/pointfree-lang@1.4.17...@thi.ng/pointfree-lang@1.4.18) (2020-12-22) **Note:** Version bump only for package @thi.ng/pointfree-lang diff --git a/packages/pointfree-lang/package.json b/packages/pointfree-lang/package.json index 58d66e5a28..7c1e46a696 100644 --- a/packages/pointfree-lang/package.json +++ b/packages/pointfree-lang/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/pointfree-lang", - "version": "1.4.18", + "version": "1.4.19", "description": "Forth style syntax layer/compiler & CLI for the @thi.ng/pointfree DSL", "module": "./index.js", "main": "./lib/index.js", @@ -53,10 +53,10 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/bench": "^2.0.25", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/pointfree": "^2.0.19", + "@thi.ng/api": "^6.13.6", + "@thi.ng/bench": "^2.0.26", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/pointfree": "^2.0.20", "commander": "^6.2.0" }, "files": [ diff --git a/packages/pointfree/CHANGELOG.md b/packages/pointfree/CHANGELOG.md index 2abf0cacc4..f7fcc8a236 100644 --- a/packages/pointfree/CHANGELOG.md +++ b/packages/pointfree/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.0.20](https://github.com/thi-ng/umbrella/compare/@thi.ng/pointfree@2.0.19...@thi.ng/pointfree@2.0.20) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/pointfree + + + + + ## [2.0.19](https://github.com/thi-ng/umbrella/compare/@thi.ng/pointfree@2.0.18...@thi.ng/pointfree@2.0.19) (2020-12-22) **Note:** Version bump only for package @thi.ng/pointfree diff --git a/packages/pointfree/package.json b/packages/pointfree/package.json index 82b6a38429..aff9008086 100644 --- a/packages/pointfree/package.json +++ b/packages/pointfree/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/pointfree", - "version": "2.0.19", + "version": "2.0.20", "description": "Pointfree functional composition / Forth style stack execution engine", "module": "./index.js", "main": "./lib/index.js", @@ -49,11 +49,11 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/compose": "^1.4.22", - "@thi.ng/equiv": "^1.0.34", - "@thi.ng/errors": "^1.2.25" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/compose": "^1.4.23", + "@thi.ng/equiv": "^1.0.35", + "@thi.ng/errors": "^1.2.26" }, "files": [ "*.js", diff --git a/packages/poisson/CHANGELOG.md b/packages/poisson/CHANGELOG.md index 60346bc0b9..fd4129f2f5 100644 --- a/packages/poisson/CHANGELOG.md +++ b/packages/poisson/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.1.23](https://github.com/thi-ng/umbrella/compare/@thi.ng/poisson@1.1.22...@thi.ng/poisson@1.1.23) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/poisson + + + + + ## [1.1.22](https://github.com/thi-ng/umbrella/compare/@thi.ng/poisson@1.1.21...@thi.ng/poisson@1.1.22) (2020-12-22) **Note:** Version bump only for package @thi.ng/poisson diff --git a/packages/poisson/package.json b/packages/poisson/package.json index d50982c2ce..2aea61b6ae 100644 --- a/packages/poisson/package.json +++ b/packages/poisson/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/poisson", - "version": "1.1.22", + "version": "1.1.23", "description": "nD Stratified grid and Poisson-disc sampling w/ support for spatial density functions and custom PRNGs", "module": "./index.js", "main": "./lib/index.js", @@ -49,12 +49,12 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/geom-api": "^2.0.0", - "@thi.ng/random": "^2.1.3", - "@thi.ng/transducers": "^7.5.3", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/geom-api": "^2.0.1", + "@thi.ng/random": "^2.1.4", + "@thi.ng/transducers": "^7.5.4", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/porter-duff/CHANGELOG.md b/packages/porter-duff/CHANGELOG.md index 17ffd2189c..066f37ace2 100644 --- a/packages/porter-duff/CHANGELOG.md +++ b/packages/porter-duff/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.36](https://github.com/thi-ng/umbrella/compare/@thi.ng/porter-duff@0.1.35...@thi.ng/porter-duff@0.1.36) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/porter-duff + + + + + ## [0.1.35](https://github.com/thi-ng/umbrella/compare/@thi.ng/porter-duff@0.1.34...@thi.ng/porter-duff@0.1.35) (2020-12-22) **Note:** Version bump only for package @thi.ng/porter-duff diff --git a/packages/porter-duff/package.json b/packages/porter-duff/package.json index 6e8e7907ae..76654e623a 100644 --- a/packages/porter-duff/package.json +++ b/packages/porter-duff/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/porter-duff", - "version": "0.1.35", + "version": "0.1.36", "description": "Porter-Duff operators for packed ints & float-array alpha compositing", "module": "./index.js", "main": "./lib/index.js", @@ -49,8 +49,8 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/math": "^3.0.0" + "@thi.ng/api": "^6.13.6", + "@thi.ng/math": "^3.0.1" }, "files": [ "*.js", diff --git a/packages/prefixes/CHANGELOG.md b/packages/prefixes/CHANGELOG.md index 6db966b969..bdacce802f 100644 --- a/packages/prefixes/CHANGELOG.md +++ b/packages/prefixes/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.10](https://github.com/thi-ng/umbrella/compare/@thi.ng/prefixes@0.1.9...@thi.ng/prefixes@0.1.10) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/prefixes + + + + + ## [0.1.9](https://github.com/thi-ng/umbrella/compare/@thi.ng/prefixes@0.1.8...@thi.ng/prefixes@0.1.9) (2020-12-22) **Note:** Version bump only for package @thi.ng/prefixes diff --git a/packages/prefixes/package.json b/packages/prefixes/package.json index 6a6ebf6ce5..a717ae5067 100644 --- a/packages/prefixes/package.json +++ b/packages/prefixes/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/prefixes", - "version": "0.1.9", + "version": "0.1.10", "description": "50+ Linked Data vocabulary prefixes and their namespace URLs", "module": "./index.js", "main": "./lib/index.js", diff --git a/packages/quad-edge/CHANGELOG.md b/packages/quad-edge/CHANGELOG.md index 043b57949e..d61c9efed3 100644 --- a/packages/quad-edge/CHANGELOG.md +++ b/packages/quad-edge/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.28](https://github.com/thi-ng/umbrella/compare/@thi.ng/quad-edge@0.2.27...@thi.ng/quad-edge@0.2.28) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/quad-edge + + + + + ## [0.2.27](https://github.com/thi-ng/umbrella/compare/@thi.ng/quad-edge@0.2.26...@thi.ng/quad-edge@0.2.27) (2020-12-22) **Note:** Version bump only for package @thi.ng/quad-edge diff --git a/packages/quad-edge/package.json b/packages/quad-edge/package.json index 1c84d082f1..97f2121303 100644 --- a/packages/quad-edge/package.json +++ b/packages/quad-edge/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/quad-edge", - "version": "0.2.27", + "version": "0.2.28", "description": "Quadedge data structure after Guibas & Stolfi", "module": "./index.js", "main": "./lib/index.js", diff --git a/packages/ramp/CHANGELOG.md b/packages/ramp/CHANGELOG.md index cd3ef09b3a..021b1f1ed1 100644 --- a/packages/ramp/CHANGELOG.md +++ b/packages/ramp/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.41](https://github.com/thi-ng/umbrella/compare/@thi.ng/ramp@0.1.40...@thi.ng/ramp@0.1.41) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/ramp + + + + + ## [0.1.40](https://github.com/thi-ng/umbrella/compare/@thi.ng/ramp@0.1.39...@thi.ng/ramp@0.1.40) (2020-12-22) **Note:** Version bump only for package @thi.ng/ramp diff --git a/packages/ramp/package.json b/packages/ramp/package.json index 1b0f1ae678..24f0620382 100644 --- a/packages/ramp/package.json +++ b/packages/ramp/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/ramp", - "version": "0.1.40", + "version": "0.1.41", "description": "Parametric interpolated 1D lookup tables for remapping values", "module": "./index.js", "main": "./lib/index.js", @@ -49,11 +49,11 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/arrays": "^0.8.5", - "@thi.ng/compare": "^1.3.21", - "@thi.ng/math": "^3.0.0", - "@thi.ng/transducers": "^7.5.3", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/arrays": "^0.9.0", + "@thi.ng/compare": "^1.3.22", + "@thi.ng/math": "^3.0.1", + "@thi.ng/transducers": "^7.5.4", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/random/CHANGELOG.md b/packages/random/CHANGELOG.md index f2886827a2..fa2eb801ee 100644 --- a/packages/random/CHANGELOG.md +++ b/packages/random/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/random@2.1.3...@thi.ng/random@2.1.4) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/random + + + + + ## [2.1.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/random@2.1.2...@thi.ng/random@2.1.3) (2020-12-22) **Note:** Version bump only for package @thi.ng/random diff --git a/packages/random/package.json b/packages/random/package.json index cb7879c7b4..a87373163b 100644 --- a/packages/random/package.json +++ b/packages/random/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/random", - "version": "2.1.3", + "version": "2.1.4", "description": "Pseudo-random number generators w/ unified API", "module": "./index.js", "main": "./lib/index.js", @@ -49,9 +49,9 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/hex": "^0.1.2" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/hex": "^0.1.3" }, "files": [ "*.js", diff --git a/packages/range-coder/CHANGELOG.md b/packages/range-coder/CHANGELOG.md index 7a6ec16c13..de230803ff 100644 --- a/packages/range-coder/CHANGELOG.md +++ b/packages/range-coder/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.0.64](https://github.com/thi-ng/umbrella/compare/@thi.ng/range-coder@1.0.63...@thi.ng/range-coder@1.0.64) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/range-coder + + + + + ## [1.0.63](https://github.com/thi-ng/umbrella/compare/@thi.ng/range-coder@1.0.62...@thi.ng/range-coder@1.0.63) (2020-12-22) **Note:** Version bump only for package @thi.ng/range-coder diff --git a/packages/range-coder/package.json b/packages/range-coder/package.json index d459dd5758..fbcee368a8 100644 --- a/packages/range-coder/package.json +++ b/packages/range-coder/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/range-coder", - "version": "1.0.63", + "version": "1.0.64", "description": "Binary data range encoder / decoder", "module": "./index.js", "main": "./lib/index.js", @@ -40,7 +40,7 @@ "devDependencies": { "@istanbuljs/nyc-config-typescript": "^1.0.1", "@microsoft/api-extractor": "^7.12.1", - "@thi.ng/transducers": "^7.5.3", + "@thi.ng/transducers": "^7.5.4", "@types/mocha": "^8.2.0", "@types/node": "^14.14.14", "mocha": "^8.2.1", @@ -50,7 +50,7 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/bitstream": "^1.1.30" + "@thi.ng/bitstream": "^1.1.31" }, "files": [ "*.js", diff --git a/packages/rdom-canvas/CHANGELOG.md b/packages/rdom-canvas/CHANGELOG.md index 3741b40872..27c59950a7 100644 --- a/packages/rdom-canvas/CHANGELOG.md +++ b/packages/rdom-canvas/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.23](https://github.com/thi-ng/umbrella/compare/@thi.ng/rdom-canvas@0.1.22...@thi.ng/rdom-canvas@0.1.23) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/rdom-canvas + + + + + ## [0.1.22](https://github.com/thi-ng/umbrella/compare/@thi.ng/rdom-canvas@0.1.21...@thi.ng/rdom-canvas@0.1.22) (2020-12-22) **Note:** Version bump only for package @thi.ng/rdom-canvas diff --git a/packages/rdom-canvas/package.json b/packages/rdom-canvas/package.json index fe01d841c9..16225b47f2 100644 --- a/packages/rdom-canvas/package.json +++ b/packages/rdom-canvas/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/rdom-canvas", - "version": "0.1.22", + "version": "0.1.23", "description": "@thi.ng/rdom component wrapper for @thi.ng/hiccup-canvas and declarative canvas drawing", "module": "./index.js", "main": "./lib/index.js", @@ -48,13 +48,13 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/adapt-dpi": "^1.0.12", - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/hiccup-canvas": "^1.1.14", - "@thi.ng/rdom": "^0.3.1", - "@thi.ng/rstream": "^5.0.11", - "@thi.ng/transducers": "^7.5.3" + "@thi.ng/adapt-dpi": "^1.0.13", + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/hiccup-canvas": "^1.1.15", + "@thi.ng/rdom": "^0.3.2", + "@thi.ng/rstream": "^5.0.12", + "@thi.ng/transducers": "^7.5.4" }, "files": [ "*.js", diff --git a/packages/rdom-components/CHANGELOG.md b/packages/rdom-components/CHANGELOG.md index e473a4bf66..b64f4e06aa 100644 --- a/packages/rdom-components/CHANGELOG.md +++ b/packages/rdom-components/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.20](https://github.com/thi-ng/umbrella/compare/@thi.ng/rdom-components@0.1.19...@thi.ng/rdom-components@0.1.20) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/rdom-components + + + + + ## [0.1.19](https://github.com/thi-ng/umbrella/compare/@thi.ng/rdom-components@0.1.18...@thi.ng/rdom-components@0.1.19) (2020-12-22) **Note:** Version bump only for package @thi.ng/rdom-components diff --git a/packages/rdom-components/package.json b/packages/rdom-components/package.json index 93ebd40107..30e8c6d2b0 100644 --- a/packages/rdom-components/package.json +++ b/packages/rdom-components/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/rdom-components", - "version": "0.1.19", + "version": "0.1.20", "description": "Collection of unstyled, customizable components for @thi.ng/rdom", "module": "./index.js", "main": "./lib/index.js", @@ -48,13 +48,13 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/associative": "^5.0.12", - "@thi.ng/hiccup-html": "^0.3.10", - "@thi.ng/rdom": "^0.3.1", - "@thi.ng/rstream": "^5.0.11", - "@thi.ng/strings": "^1.11.3", - "@thi.ng/transducers": "^7.5.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/associative": "^5.0.13", + "@thi.ng/hiccup-html": "^0.3.11", + "@thi.ng/rdom": "^0.3.2", + "@thi.ng/rstream": "^5.0.12", + "@thi.ng/strings": "^1.11.4", + "@thi.ng/transducers": "^7.5.4" }, "files": [ "*.js", diff --git a/packages/rdom/CHANGELOG.md b/packages/rdom/CHANGELOG.md index d80d062307..5c595e9074 100644 --- a/packages/rdom/CHANGELOG.md +++ b/packages/rdom/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.3.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/rdom@0.3.1...@thi.ng/rdom@0.3.2) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/rdom + + + + + ## [0.3.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/rdom@0.3.0...@thi.ng/rdom@0.3.1) (2020-12-22) **Note:** Version bump only for package @thi.ng/rdom diff --git a/packages/rdom/package.json b/packages/rdom/package.json index 92ce119303..2f6a2b9b78 100644 --- a/packages/rdom/package.json +++ b/packages/rdom/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/rdom", - "version": "0.3.1", + "version": "0.3.2", "description": "Lightweight, reactive, VDOM-less UI/DOM components with async lifecycle and @thi.ng/hiccup compatible", "module": "./index.js", "main": "./lib/index.js", @@ -49,14 +49,14 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/hiccup": "^3.6.5", - "@thi.ng/paths": "^4.1.11", - "@thi.ng/prefixes": "^0.1.9", - "@thi.ng/rstream": "^5.0.11", - "@thi.ng/strings": "^1.11.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/hiccup": "^3.6.6", + "@thi.ng/paths": "^4.1.12", + "@thi.ng/prefixes": "^0.1.10", + "@thi.ng/rstream": "^5.0.12", + "@thi.ng/strings": "^1.11.4" }, "files": [ "*.js", diff --git a/packages/resolve-map/CHANGELOG.md b/packages/resolve-map/CHANGELOG.md index e53e4b9d5d..0303e7d7e8 100644 --- a/packages/resolve-map/CHANGELOG.md +++ b/packages/resolve-map/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.2.11](https://github.com/thi-ng/umbrella/compare/@thi.ng/resolve-map@4.2.10...@thi.ng/resolve-map@4.2.11) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/resolve-map + + + + + ## [4.2.10](https://github.com/thi-ng/umbrella/compare/@thi.ng/resolve-map@4.2.9...@thi.ng/resolve-map@4.2.10) (2020-12-22) **Note:** Version bump only for package @thi.ng/resolve-map diff --git a/packages/resolve-map/package.json b/packages/resolve-map/package.json index 81afa1da76..5dcee4a3ff 100644 --- a/packages/resolve-map/package.json +++ b/packages/resolve-map/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/resolve-map", - "version": "4.2.10", + "version": "4.2.11", "description": "DAG resolution of vanilla objects & arrays with internally linked values", "module": "./index.js", "main": "./lib/index.js", @@ -48,10 +48,10 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/paths": "^4.1.11" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/paths": "^4.1.12" }, "files": [ "*.js", diff --git a/packages/rle-pack/CHANGELOG.md b/packages/rle-pack/CHANGELOG.md index d74f631f39..27bab68936 100644 --- a/packages/rle-pack/CHANGELOG.md +++ b/packages/rle-pack/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.31](https://github.com/thi-ng/umbrella/compare/@thi.ng/rle-pack@2.1.30...@thi.ng/rle-pack@2.1.31) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/rle-pack + + + + + ## [2.1.30](https://github.com/thi-ng/umbrella/compare/@thi.ng/rle-pack@2.1.29...@thi.ng/rle-pack@2.1.30) (2020-12-22) **Note:** Version bump only for package @thi.ng/rle-pack diff --git a/packages/rle-pack/package.json b/packages/rle-pack/package.json index e9a7b85a87..235b9517c4 100644 --- a/packages/rle-pack/package.json +++ b/packages/rle-pack/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/rle-pack", - "version": "2.1.30", + "version": "2.1.31", "description": "Binary run-length encoding packer w/ flexible repeat bit widths", "module": "./index.js", "main": "./lib/index.js", @@ -50,8 +50,8 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/bitstream": "^1.1.30", - "@thi.ng/errors": "^1.2.25" + "@thi.ng/bitstream": "^1.1.31", + "@thi.ng/errors": "^1.2.26" }, "files": [ "*.js", diff --git a/packages/router/CHANGELOG.md b/packages/router/CHANGELOG.md index 17d74aa789..7901cfb159 100644 --- a/packages/router/CHANGELOG.md +++ b/packages/router/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.0.38](https://github.com/thi-ng/umbrella/compare/@thi.ng/router@2.0.37...@thi.ng/router@2.0.38) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/router + + + + + ## [2.0.37](https://github.com/thi-ng/umbrella/compare/@thi.ng/router@2.0.36...@thi.ng/router@2.0.37) (2020-12-22) **Note:** Version bump only for package @thi.ng/router diff --git a/packages/router/package.json b/packages/router/package.json index 46adcecab5..c4a56cb20b 100644 --- a/packages/router/package.json +++ b/packages/router/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/router", - "version": "2.0.37", + "version": "2.0.38", "description": "Generic router for browser & non-browser based applications", "module": "./index.js", "main": "./lib/index.js", @@ -49,10 +49,10 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/equiv": "^1.0.34", - "@thi.ng/errors": "^1.2.25", + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/equiv": "^1.0.35", + "@thi.ng/errors": "^1.2.26", "tslib": "2.0.1" }, "files": [ diff --git a/packages/rstream-csp/CHANGELOG.md b/packages/rstream-csp/CHANGELOG.md index 308c4bed6b..489ad4fe48 100644 --- a/packages/rstream-csp/CHANGELOG.md +++ b/packages/rstream-csp/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.0.47](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-csp@2.0.46...@thi.ng/rstream-csp@2.0.47) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/rstream-csp + + + + + ## [2.0.46](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-csp@2.0.45...@thi.ng/rstream-csp@2.0.46) (2020-12-22) **Note:** Version bump only for package @thi.ng/rstream-csp diff --git a/packages/rstream-csp/package.json b/packages/rstream-csp/package.json index c180d51bba..a1902fdc61 100644 --- a/packages/rstream-csp/package.json +++ b/packages/rstream-csp/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/rstream-csp", - "version": "2.0.46", + "version": "2.0.47", "description": "@thi.ng/csp bridge module for @thi.ng/rstream", "module": "./index.js", "main": "./lib/index.js", @@ -49,8 +49,8 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/csp": "^1.1.44", - "@thi.ng/rstream": "^5.0.11" + "@thi.ng/csp": "^1.1.45", + "@thi.ng/rstream": "^5.0.12" }, "files": [ "*.js", diff --git a/packages/rstream-dot/CHANGELOG.md b/packages/rstream-dot/CHANGELOG.md index bb312966b2..cb95b68787 100644 --- a/packages/rstream-dot/CHANGELOG.md +++ b/packages/rstream-dot/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.1.54](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-dot@1.1.53...@thi.ng/rstream-dot@1.1.54) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/rstream-dot + + + + + ## [1.1.53](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-dot@1.1.52...@thi.ng/rstream-dot@1.1.53) (2020-12-22) **Note:** Version bump only for package @thi.ng/rstream-dot diff --git a/packages/rstream-dot/package.json b/packages/rstream-dot/package.json index 2cf57a01e1..2ff98e0aed 100644 --- a/packages/rstream-dot/package.json +++ b/packages/rstream-dot/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/rstream-dot", - "version": "1.1.53", + "version": "1.1.54", "description": "Graphviz DOT conversion of @thi.ng/rstream dataflow graph topologies", "module": "./index.js", "main": "./lib/index.js", @@ -49,7 +49,7 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/rstream": "^5.0.11" + "@thi.ng/rstream": "^5.0.12" }, "files": [ "*.js", diff --git a/packages/rstream-gestures/CHANGELOG.md b/packages/rstream-gestures/CHANGELOG.md index c2fa6b0a1a..9d2322cd8b 100644 --- a/packages/rstream-gestures/CHANGELOG.md +++ b/packages/rstream-gestures/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [3.0.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-gestures@3.0.0...@thi.ng/rstream-gestures@3.0.1) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/rstream-gestures + + + + + # [3.0.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-gestures@2.0.45...@thi.ng/rstream-gestures@3.0.0) (2020-12-22) diff --git a/packages/rstream-gestures/package.json b/packages/rstream-gestures/package.json index 5c893b5473..0b0b9085e4 100644 --- a/packages/rstream-gestures/package.json +++ b/packages/rstream-gestures/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/rstream-gestures", - "version": "3.0.0", + "version": "3.0.1", "description": "Unified mouse, mouse wheel & multi-touch event stream abstraction", "module": "./index.js", "main": "./lib/index.js", @@ -49,11 +49,11 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/math": "^3.0.0", - "@thi.ng/rstream": "^5.0.11", - "@thi.ng/transducers": "^7.5.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/math": "^3.0.1", + "@thi.ng/rstream": "^5.0.12", + "@thi.ng/transducers": "^7.5.4" }, "files": [ "*.js", diff --git a/packages/rstream-graph/CHANGELOG.md b/packages/rstream-graph/CHANGELOG.md index 437ea7049b..539e119ee4 100644 --- a/packages/rstream-graph/CHANGELOG.md +++ b/packages/rstream-graph/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [3.2.48](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-graph@3.2.47...@thi.ng/rstream-graph@3.2.48) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/rstream-graph + + + + + ## [3.2.47](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-graph@3.2.46...@thi.ng/rstream-graph@3.2.47) (2020-12-22) **Note:** Version bump only for package @thi.ng/rstream-graph diff --git a/packages/rstream-graph/package.json b/packages/rstream-graph/package.json index e3566eb8a1..7d0daf77a3 100644 --- a/packages/rstream-graph/package.json +++ b/packages/rstream-graph/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/rstream-graph", - "version": "3.2.47", + "version": "3.2.48", "description": "Declarative dataflow graph construction for @thi.ng/rstream", "module": "./index.js", "main": "./lib/index.js", @@ -49,14 +49,14 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/atom": "^4.1.25", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/paths": "^4.1.11", - "@thi.ng/resolve-map": "^4.2.10", - "@thi.ng/rstream": "^5.0.11", - "@thi.ng/transducers": "^7.5.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/atom": "^4.1.26", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/paths": "^4.1.12", + "@thi.ng/resolve-map": "^4.2.11", + "@thi.ng/rstream": "^5.0.12", + "@thi.ng/transducers": "^7.5.4" }, "files": [ "*.js", diff --git a/packages/rstream-log-file/CHANGELOG.md b/packages/rstream-log-file/CHANGELOG.md index 714b2337ad..59dae42821 100644 --- a/packages/rstream-log-file/CHANGELOG.md +++ b/packages/rstream-log-file/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.69](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-log-file@0.1.68...@thi.ng/rstream-log-file@0.1.69) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/rstream-log-file + + + + + ## [0.1.68](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-log-file@0.1.67...@thi.ng/rstream-log-file@0.1.68) (2020-12-22) **Note:** Version bump only for package @thi.ng/rstream-log-file diff --git a/packages/rstream-log-file/package.json b/packages/rstream-log-file/package.json index 4b2ee48630..1c284ce462 100644 --- a/packages/rstream-log-file/package.json +++ b/packages/rstream-log-file/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/rstream-log-file", - "version": "0.1.68", + "version": "0.1.69", "description": "File output handler for structured, multilevel & hierarchical loggers based on @thi.ng/rstream", "module": "./index.js", "main": "./lib/index.js", @@ -49,7 +49,7 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/rstream": "^5.0.11" + "@thi.ng/rstream": "^5.0.12" }, "files": [ "*.js", diff --git a/packages/rstream-log/CHANGELOG.md b/packages/rstream-log/CHANGELOG.md index b58a50b1f4..47aaa1665b 100644 --- a/packages/rstream-log/CHANGELOG.md +++ b/packages/rstream-log/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [3.1.54](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-log@3.1.53...@thi.ng/rstream-log@3.1.54) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/rstream-log + + + + + ## [3.1.53](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-log@3.1.52...@thi.ng/rstream-log@3.1.53) (2020-12-22) **Note:** Version bump only for package @thi.ng/rstream-log diff --git a/packages/rstream-log/package.json b/packages/rstream-log/package.json index da16ad85d7..45fe181beb 100644 --- a/packages/rstream-log/package.json +++ b/packages/rstream-log/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/rstream-log", - "version": "3.1.53", + "version": "3.1.54", "description": "Structured, multilevel & hierarchical loggers based on @thi.ng/rstream", "module": "./index.js", "main": "./lib/index.js", @@ -49,11 +49,11 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/rstream": "^5.0.11", - "@thi.ng/transducers": "^7.5.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/rstream": "^5.0.12", + "@thi.ng/transducers": "^7.5.4" }, "files": [ "*.js", diff --git a/packages/rstream-query/CHANGELOG.md b/packages/rstream-query/CHANGELOG.md index 1e4aa12a4d..66fb30f2a7 100644 --- a/packages/rstream-query/CHANGELOG.md +++ b/packages/rstream-query/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.1.54](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-query@1.1.53...@thi.ng/rstream-query@1.1.54) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/rstream-query + + + + + ## [1.1.53](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-query@1.1.52...@thi.ng/rstream-query@1.1.53) (2020-12-22) **Note:** Version bump only for package @thi.ng/rstream-query diff --git a/packages/rstream-query/package.json b/packages/rstream-query/package.json index c9265a39a1..610921b854 100644 --- a/packages/rstream-query/package.json +++ b/packages/rstream-query/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/rstream-query", - "version": "1.1.53", + "version": "1.1.54", "description": "@thi.ng/rstream based triple store & reactive query engine", "module": "./index.js", "main": "./lib/index.js", @@ -49,15 +49,15 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/associative": "^5.0.12", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/equiv": "^1.0.34", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/math": "^3.0.0", - "@thi.ng/rstream": "^5.0.11", - "@thi.ng/rstream-dot": "^1.1.53", - "@thi.ng/transducers": "^7.5.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/associative": "^5.0.13", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/equiv": "^1.0.35", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/math": "^3.0.1", + "@thi.ng/rstream": "^5.0.12", + "@thi.ng/rstream-dot": "^1.1.54", + "@thi.ng/transducers": "^7.5.4" }, "files": [ "*.js", diff --git a/packages/rstream/CHANGELOG.md b/packages/rstream/CHANGELOG.md index 33fb0d19bf..d174974bf8 100644 --- a/packages/rstream/CHANGELOG.md +++ b/packages/rstream/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.12](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream@5.0.11...@thi.ng/rstream@5.0.12) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/rstream + + + + + ## [5.0.11](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream@5.0.10...@thi.ng/rstream@5.0.11) (2020-12-22) **Note:** Version bump only for package @thi.ng/rstream diff --git a/packages/rstream/package.json b/packages/rstream/package.json index f20d7514bb..d1e4bb9e0f 100644 --- a/packages/rstream/package.json +++ b/packages/rstream/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/rstream", - "version": "5.0.11", + "version": "5.0.12", "description": "Reactive streams & subscription primitives for constructing dataflow graphs / pipelines", "module": "./index.js", "main": "./lib/index.js", @@ -49,13 +49,13 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/arrays": "^0.8.5", - "@thi.ng/associative": "^5.0.12", - "@thi.ng/atom": "^4.1.25", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/transducers": "^7.5.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/arrays": "^0.9.0", + "@thi.ng/associative": "^5.0.13", + "@thi.ng/atom": "^4.1.26", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/transducers": "^7.5.4" }, "files": [ "*.js", diff --git a/packages/sax/CHANGELOG.md b/packages/sax/CHANGELOG.md index 18e2b18254..c38f302867 100644 --- a/packages/sax/CHANGELOG.md +++ b/packages/sax/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.1.44](https://github.com/thi-ng/umbrella/compare/@thi.ng/sax@1.1.43...@thi.ng/sax@1.1.44) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/sax + + + + + ## [1.1.43](https://github.com/thi-ng/umbrella/compare/@thi.ng/sax@1.1.42...@thi.ng/sax@1.1.43) (2020-12-22) **Note:** Version bump only for package @thi.ng/sax diff --git a/packages/sax/package.json b/packages/sax/package.json index 8ee24cb8c9..0f0880ad2b 100644 --- a/packages/sax/package.json +++ b/packages/sax/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/sax", - "version": "1.1.43", + "version": "1.1.44", "description": "Transducer-based, SAX-like, non-validating, speedy & tiny XML parser", "module": "./index.js", "main": "./lib/index.js", @@ -49,9 +49,9 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/transducers": "^7.5.3", - "@thi.ng/transducers-fsm": "^1.1.43" + "@thi.ng/api": "^6.13.6", + "@thi.ng/transducers": "^7.5.4", + "@thi.ng/transducers-fsm": "^1.1.44" }, "files": [ "*.js", diff --git a/packages/scenegraph/CHANGELOG.md b/packages/scenegraph/CHANGELOG.md index c6365c8704..401e5a2886 100644 --- a/packages/scenegraph/CHANGELOG.md +++ b/packages/scenegraph/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.3.13](https://github.com/thi-ng/umbrella/compare/@thi.ng/scenegraph@0.3.12...@thi.ng/scenegraph@0.3.13) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/scenegraph + + + + + ## [0.3.12](https://github.com/thi-ng/umbrella/compare/@thi.ng/scenegraph@0.3.11...@thi.ng/scenegraph@0.3.12) (2020-12-22) **Note:** Version bump only for package @thi.ng/scenegraph diff --git a/packages/scenegraph/package.json b/packages/scenegraph/package.json index 666c0e5a4c..94cb40fd94 100644 --- a/packages/scenegraph/package.json +++ b/packages/scenegraph/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/scenegraph", - "version": "0.3.12", + "version": "0.3.13", "description": "Extensible 2D/3D scene graph with @thi.ng/hiccup-canvas support", "module": "./index.js", "main": "./lib/index.js", @@ -49,10 +49,10 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/matrices": "^0.6.38", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/matrices": "^0.6.39", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/seq/CHANGELOG.md b/packages/seq/CHANGELOG.md index 575f813624..2bab81f850 100644 --- a/packages/seq/CHANGELOG.md +++ b/packages/seq/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.29](https://github.com/thi-ng/umbrella/compare/@thi.ng/seq@0.2.28...@thi.ng/seq@0.2.29) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/seq + + + + + ## [0.2.28](https://github.com/thi-ng/umbrella/compare/@thi.ng/seq@0.2.27...@thi.ng/seq@0.2.28) (2020-12-22) **Note:** Version bump only for package @thi.ng/seq diff --git a/packages/seq/package.json b/packages/seq/package.json index 1e39faa3e2..a0218de53e 100644 --- a/packages/seq/package.json +++ b/packages/seq/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/seq", - "version": "0.2.28", + "version": "0.2.29", "description": "Various implementations of the @thi.ng/api `ISeq` interface / sequence abstraction", "module": "./index.js", "main": "./lib/index.js", @@ -49,8 +49,8 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13" }, "files": [ "*.js", diff --git a/packages/sexpr/CHANGELOG.md b/packages/sexpr/CHANGELOG.md index 2f1dfe97c1..0a4b4fd88c 100644 --- a/packages/sexpr/CHANGELOG.md +++ b/packages/sexpr/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.32](https://github.com/thi-ng/umbrella/compare/@thi.ng/sexpr@0.2.31...@thi.ng/sexpr@0.2.32) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/sexpr + + + + + ## [0.2.31](https://github.com/thi-ng/umbrella/compare/@thi.ng/sexpr@0.2.30...@thi.ng/sexpr@0.2.31) (2020-12-22) **Note:** Version bump only for package @thi.ng/sexpr diff --git a/packages/sexpr/package.json b/packages/sexpr/package.json index a7d73d3231..8400a96534 100644 --- a/packages/sexpr/package.json +++ b/packages/sexpr/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/sexpr", - "version": "0.2.31", + "version": "0.2.32", "description": "Extensible S-Expression parser & runtime infrastructure", "module": "./index.js", "main": "./lib/index.js", @@ -49,9 +49,9 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/defmulti": "^1.3.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/defmulti": "^1.3.4" }, "files": [ "*.js", diff --git a/packages/shader-ast-glsl/CHANGELOG.md b/packages/shader-ast-glsl/CHANGELOG.md index dca1a813a3..8c530209d1 100644 --- a/packages/shader-ast-glsl/CHANGELOG.md +++ b/packages/shader-ast-glsl/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.16](https://github.com/thi-ng/umbrella/compare/@thi.ng/shader-ast-glsl@0.2.15...@thi.ng/shader-ast-glsl@0.2.16) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/shader-ast-glsl + + + + + ## [0.2.15](https://github.com/thi-ng/umbrella/compare/@thi.ng/shader-ast-glsl@0.2.14...@thi.ng/shader-ast-glsl@0.2.15) (2020-12-22) **Note:** Version bump only for package @thi.ng/shader-ast-glsl diff --git a/packages/shader-ast-glsl/package.json b/packages/shader-ast-glsl/package.json index b65c9c6fde..e9acabeb8c 100644 --- a/packages/shader-ast-glsl/package.json +++ b/packages/shader-ast-glsl/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/shader-ast-glsl", - "version": "0.2.15", + "version": "0.2.16", "description": "Customizable GLSL codegen for @thi.ng/shader-ast", "module": "./index.js", "main": "./lib/index.js", @@ -49,10 +49,10 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/shader-ast": "^0.7.7" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/shader-ast": "^0.7.8" }, "files": [ "*.js", diff --git a/packages/shader-ast-js/CHANGELOG.md b/packages/shader-ast-js/CHANGELOG.md index 482d634be9..4a97abd548 100644 --- a/packages/shader-ast-js/CHANGELOG.md +++ b/packages/shader-ast-js/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.5.14](https://github.com/thi-ng/umbrella/compare/@thi.ng/shader-ast-js@0.5.13...@thi.ng/shader-ast-js@0.5.14) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/shader-ast-js + + + + + ## [0.5.13](https://github.com/thi-ng/umbrella/compare/@thi.ng/shader-ast-js@0.5.12...@thi.ng/shader-ast-js@0.5.13) (2020-12-22) **Note:** Version bump only for package @thi.ng/shader-ast-js diff --git a/packages/shader-ast-js/package.json b/packages/shader-ast-js/package.json index a45c0b7a06..807c6e9353 100644 --- a/packages/shader-ast-js/package.json +++ b/packages/shader-ast-js/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/shader-ast-js", - "version": "0.5.13", + "version": "0.5.14", "description": "Customizable JS codegen, compiler & runtime for @thi.ng/shader-ast", "module": "./index.js", "main": "./lib/index.js", @@ -49,14 +49,14 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/math": "^3.0.0", - "@thi.ng/matrices": "^0.6.38", - "@thi.ng/pixel": "^0.4.10", - "@thi.ng/shader-ast": "^0.7.7", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/math": "^3.0.1", + "@thi.ng/matrices": "^0.6.39", + "@thi.ng/pixel": "^0.5.0", + "@thi.ng/shader-ast": "^0.7.8", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/shader-ast-stdlib/CHANGELOG.md b/packages/shader-ast-stdlib/CHANGELOG.md index 48ec7ce258..7c0720a77a 100644 --- a/packages/shader-ast-stdlib/CHANGELOG.md +++ b/packages/shader-ast-stdlib/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.5.8](https://github.com/thi-ng/umbrella/compare/@thi.ng/shader-ast-stdlib@0.5.7...@thi.ng/shader-ast-stdlib@0.5.8) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/shader-ast-stdlib + + + + + ## [0.5.7](https://github.com/thi-ng/umbrella/compare/@thi.ng/shader-ast-stdlib@0.5.6...@thi.ng/shader-ast-stdlib@0.5.7) (2020-12-22) **Note:** Version bump only for package @thi.ng/shader-ast-stdlib diff --git a/packages/shader-ast-stdlib/package.json b/packages/shader-ast-stdlib/package.json index f22e95089b..bdd071fbb0 100644 --- a/packages/shader-ast-stdlib/package.json +++ b/packages/shader-ast-stdlib/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/shader-ast-stdlib", - "version": "0.5.7", + "version": "0.5.8", "description": "Function collection for modular GPGPU / shader programming with @thi.ng/shader-ast", "module": "./index.js", "main": "./lib/index.js", @@ -49,8 +49,8 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/shader-ast": "^0.7.7" + "@thi.ng/api": "^6.13.6", + "@thi.ng/shader-ast": "^0.7.8" }, "files": [ "*.js", diff --git a/packages/shader-ast/CHANGELOG.md b/packages/shader-ast/CHANGELOG.md index 4f62f2daaa..b0a34c7833 100644 --- a/packages/shader-ast/CHANGELOG.md +++ b/packages/shader-ast/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.7.8](https://github.com/thi-ng/umbrella/compare/@thi.ng/shader-ast@0.7.7...@thi.ng/shader-ast@0.7.8) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/shader-ast + + + + + ## [0.7.7](https://github.com/thi-ng/umbrella/compare/@thi.ng/shader-ast@0.7.6...@thi.ng/shader-ast@0.7.7) (2020-12-22) **Note:** Version bump only for package @thi.ng/shader-ast diff --git a/packages/shader-ast/package.json b/packages/shader-ast/package.json index a907c61fcf..f2fcef41f2 100644 --- a/packages/shader-ast/package.json +++ b/packages/shader-ast/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/shader-ast", - "version": "0.7.7", + "version": "0.7.8", "description": "DSL to define shader code in TypeScript and cross-compile to GLSL, JS and other targets", "module": "./index.js", "main": "./lib/index.js", @@ -49,11 +49,11 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/defmulti": "^1.3.3", - "@thi.ng/dgraph": "^1.3.3", - "@thi.ng/errors": "^1.2.25" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/defmulti": "^1.3.4", + "@thi.ng/dgraph": "^1.3.4", + "@thi.ng/errors": "^1.2.26" }, "files": [ "*.js", diff --git a/packages/simd/CHANGELOG.md b/packages/simd/CHANGELOG.md index d6a93396b7..d309d4d179 100644 --- a/packages/simd/CHANGELOG.md +++ b/packages/simd/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.4.12](https://github.com/thi-ng/umbrella/compare/@thi.ng/simd@0.4.11...@thi.ng/simd@0.4.12) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/simd + + + + + ## [0.4.11](https://github.com/thi-ng/umbrella/compare/@thi.ng/simd@0.4.10...@thi.ng/simd@0.4.11) (2020-12-22) **Note:** Version bump only for package @thi.ng/simd diff --git a/packages/simd/package.json b/packages/simd/package.json index cf7f9da917..c487479e1a 100644 --- a/packages/simd/package.json +++ b/packages/simd/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/simd", - "version": "0.4.11", + "version": "0.4.12", "description": "WASM based SIMD vector operations for batch processing", "module": "./index.js", "main": "./lib/index.js", @@ -52,7 +52,7 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/transducers-binary": "^0.6.0" + "@thi.ng/transducers-binary": "^0.6.1" }, "files": [ "*.js", diff --git a/packages/soa/CHANGELOG.md b/packages/soa/CHANGELOG.md index addc1f46af..2e2f0816c2 100644 --- a/packages/soa/CHANGELOG.md +++ b/packages/soa/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.43](https://github.com/thi-ng/umbrella/compare/@thi.ng/soa@0.1.42...@thi.ng/soa@0.1.43) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/soa + + + + + ## [0.1.42](https://github.com/thi-ng/umbrella/compare/@thi.ng/soa@0.1.41...@thi.ng/soa@0.1.42) (2020-12-22) **Note:** Version bump only for package @thi.ng/soa diff --git a/packages/soa/package.json b/packages/soa/package.json index 5cb7f6e3db..93d3efb7e7 100644 --- a/packages/soa/package.json +++ b/packages/soa/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/soa", - "version": "0.1.42", + "version": "0.1.43", "description": "SOA & AOS memory mapped structured views with optional & extensible serialization", "module": "./index.js", "main": "./lib/index.js", @@ -40,7 +40,7 @@ "devDependencies": { "@istanbuljs/nyc-config-typescript": "^1.0.1", "@microsoft/api-extractor": "^7.12.1", - "@thi.ng/equiv": "^1.0.34", + "@thi.ng/equiv": "^1.0.35", "@types/mocha": "^8.2.0", "@types/node": "^14.14.14", "mocha": "^8.2.1", @@ -50,10 +50,10 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/binary": "^2.0.20", - "@thi.ng/transducers-binary": "^0.6.0", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/binary": "^2.0.21", + "@thi.ng/transducers-binary": "^0.6.1", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/sparse/CHANGELOG.md b/packages/sparse/CHANGELOG.md index 54a7183e4b..7dca1f7dc8 100644 --- a/packages/sparse/CHANGELOG.md +++ b/packages/sparse/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.60](https://github.com/thi-ng/umbrella/compare/@thi.ng/sparse@0.1.59...@thi.ng/sparse@0.1.60) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/sparse + + + + + ## [0.1.59](https://github.com/thi-ng/umbrella/compare/@thi.ng/sparse@0.1.58...@thi.ng/sparse@0.1.59) (2020-12-22) **Note:** Version bump only for package @thi.ng/sparse diff --git a/packages/sparse/package.json b/packages/sparse/package.json index 3c21ad2b45..99b21f4411 100644 --- a/packages/sparse/package.json +++ b/packages/sparse/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/sparse", - "version": "0.1.59", + "version": "0.1.60", "description": "Sparse vector & matrix implementations", "module": "./index.js", "main": "./lib/index.js", @@ -49,8 +49,8 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/transducers": "^7.5.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/transducers": "^7.5.4" }, "files": [ "*.js", diff --git a/packages/strings/CHANGELOG.md b/packages/strings/CHANGELOG.md index ad341e18f1..51d7b70aaa 100644 --- a/packages/strings/CHANGELOG.md +++ b/packages/strings/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.11.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/strings@1.11.3...@thi.ng/strings@1.11.4) (2021-01-02) + + +### Bug Fixes + +* **strings:** update slugifyGH() replacements ([#174](https://github.com/thi-ng/umbrella/issues/174)) ([98a9135](https://github.com/thi-ng/umbrella/commit/98a91351728d730446f9654fc93317c1bece77ed)) + + + + + ## [1.11.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/strings@1.11.2...@thi.ng/strings@1.11.3) (2020-12-22) **Note:** Version bump only for package @thi.ng/strings diff --git a/packages/strings/package.json b/packages/strings/package.json index e7f6e9ba4d..fef5c06307 100644 --- a/packages/strings/package.json +++ b/packages/strings/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/strings", - "version": "1.11.3", + "version": "1.11.4", "description": "Various string formatting & utility functions", "module": "./index.js", "main": "./lib/index.js", @@ -49,10 +49,10 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/hex": "^0.1.2", - "@thi.ng/memoize": "^2.1.7" + "@thi.ng/api": "^6.13.6", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/hex": "^0.1.3", + "@thi.ng/memoize": "^2.1.8" }, "files": [ "*.js", diff --git a/packages/system/CHANGELOG.md b/packages/system/CHANGELOG.md index 3d0b491891..b949211f43 100644 --- a/packages/system/CHANGELOG.md +++ b/packages/system/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.33](https://github.com/thi-ng/umbrella/compare/@thi.ng/system@0.2.32...@thi.ng/system@0.2.33) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/system + + + + + ## [0.2.32](https://github.com/thi-ng/umbrella/compare/@thi.ng/system@0.2.31...@thi.ng/system@0.2.32) (2020-12-22) **Note:** Version bump only for package @thi.ng/system diff --git a/packages/system/package.json b/packages/system/package.json index 1e457c2b9c..2696bc5c4c 100644 --- a/packages/system/package.json +++ b/packages/system/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/system", - "version": "0.2.32", + "version": "0.2.33", "description": "Minimal DI / life cycle container for stateful app components", "module": "./index.js", "main": "./lib/index.js", @@ -49,8 +49,8 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/dgraph": "^1.3.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/dgraph": "^1.3.4" }, "files": [ "*.js", diff --git a/packages/text-canvas/CHANGELOG.md b/packages/text-canvas/CHANGELOG.md index 9065a36254..5b6d0c2db4 100644 --- a/packages/text-canvas/CHANGELOG.md +++ b/packages/text-canvas/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [0.3.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/text-canvas@0.2.36...@thi.ng/text-canvas@0.3.0) (2021-01-02) + + +### Features + +* **text-canvas:** add ANSI256 & HTML_565 formatters ([1f2d35b](https://github.com/thi-ng/umbrella/commit/1f2d35b306c30bfecd168f25abd0ead18e2fdf2a)) +* **text-canvas:** add imageRaw(), update image() ([34037ad](https://github.com/thi-ng/umbrella/commit/34037ad4ec87027779c72b683c3a4194f1995e79)) + + + + + ## [0.2.36](https://github.com/thi-ng/umbrella/compare/@thi.ng/text-canvas@0.2.35...@thi.ng/text-canvas@0.2.36) (2020-12-22) **Note:** Version bump only for package @thi.ng/text-canvas diff --git a/packages/text-canvas/package.json b/packages/text-canvas/package.json index 17464b60e9..2e21c4a52d 100644 --- a/packages/text-canvas/package.json +++ b/packages/text-canvas/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/text-canvas", - "version": "0.2.36", + "version": "0.3.0", "description": "Text based canvas, drawing, tables with arbitrary formatting (incl. ANSI/HTML)", "module": "./index.js", "main": "./lib/index.js", @@ -49,14 +49,14 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/arrays": "^0.8.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/geom-clip-line": "^1.2.14", - "@thi.ng/math": "^3.0.0", - "@thi.ng/memoize": "^2.1.7", - "@thi.ng/strings": "^1.11.3", - "@thi.ng/transducers": "^7.5.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/arrays": "^0.9.0", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/geom-clip-line": "^1.2.15", + "@thi.ng/math": "^3.0.1", + "@thi.ng/memoize": "^2.1.8", + "@thi.ng/strings": "^1.11.4", + "@thi.ng/transducers": "^7.5.4" }, "files": [ "*.js", diff --git a/packages/transducers-binary/CHANGELOG.md b/packages/transducers-binary/CHANGELOG.md index 84778b54fd..0d167f7064 100644 --- a/packages/transducers-binary/CHANGELOG.md +++ b/packages/transducers-binary/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.6.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-binary@0.6.0...@thi.ng/transducers-binary@0.6.1) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/transducers-binary + + + + + # [0.6.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-binary@0.5.33...@thi.ng/transducers-binary@0.6.0) (2020-12-22) diff --git a/packages/transducers-binary/package.json b/packages/transducers-binary/package.json index 1667b2c3a6..c8905f7b54 100644 --- a/packages/transducers-binary/package.json +++ b/packages/transducers-binary/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/transducers-binary", - "version": "0.6.0", + "version": "0.6.1", "description": "Binary data related transducers & reducers", "module": "./index.js", "main": "./lib/index.js", @@ -49,12 +49,12 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/binary": "^2.0.20", - "@thi.ng/compose": "^1.4.22", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/hex": "^0.1.2", - "@thi.ng/random": "^2.1.3", - "@thi.ng/transducers": "^7.5.3" + "@thi.ng/binary": "^2.0.21", + "@thi.ng/compose": "^1.4.23", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/hex": "^0.1.3", + "@thi.ng/random": "^2.1.4", + "@thi.ng/transducers": "^7.5.4" }, "files": [ "*.js", diff --git a/packages/transducers-fsm/CHANGELOG.md b/packages/transducers-fsm/CHANGELOG.md index b2f381c88b..612e6b6168 100644 --- a/packages/transducers-fsm/CHANGELOG.md +++ b/packages/transducers-fsm/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.1.44](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-fsm@1.1.43...@thi.ng/transducers-fsm@1.1.44) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/transducers-fsm + + + + + ## [1.1.43](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-fsm@1.1.42...@thi.ng/transducers-fsm@1.1.43) (2020-12-22) **Note:** Version bump only for package @thi.ng/transducers-fsm diff --git a/packages/transducers-fsm/package.json b/packages/transducers-fsm/package.json index e77906dd8c..440e9b4df3 100644 --- a/packages/transducers-fsm/package.json +++ b/packages/transducers-fsm/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/transducers-fsm", - "version": "1.1.43", + "version": "1.1.44", "description": "Transducer-based Finite State Machine transformer", "module": "./index.js", "main": "./lib/index.js", @@ -49,8 +49,8 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/transducers": "^7.5.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/transducers": "^7.5.4" }, "files": [ "*.js", diff --git a/packages/transducers-hdom/CHANGELOG.md b/packages/transducers-hdom/CHANGELOG.md index aa46aa2448..eaee82f37c 100644 --- a/packages/transducers-hdom/CHANGELOG.md +++ b/packages/transducers-hdom/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.0.76](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-hdom@2.0.75...@thi.ng/transducers-hdom@2.0.76) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/transducers-hdom + + + + + ## [2.0.75](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-hdom@2.0.74...@thi.ng/transducers-hdom@2.0.75) (2020-12-22) **Note:** Version bump only for package @thi.ng/transducers-hdom diff --git a/packages/transducers-hdom/package.json b/packages/transducers-hdom/package.json index b18aaf5a5a..182b7c1937 100644 --- a/packages/transducers-hdom/package.json +++ b/packages/transducers-hdom/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/transducers-hdom", - "version": "2.0.75", + "version": "2.0.76", "description": "Transducer based UI updater for @thi.ng/hdom", "module": "./index.js", "main": "./lib/index.js", @@ -49,9 +49,9 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/hdom": "^8.2.14", - "@thi.ng/hiccup": "^3.6.5", - "@thi.ng/transducers": "^7.5.3" + "@thi.ng/hdom": "^8.2.15", + "@thi.ng/hiccup": "^3.6.6", + "@thi.ng/transducers": "^7.5.4" }, "files": [ "*.js", diff --git a/packages/transducers-patch/CHANGELOG.md b/packages/transducers-patch/CHANGELOG.md index 5950dd97d7..d4d45f84fd 100644 --- a/packages/transducers-patch/CHANGELOG.md +++ b/packages/transducers-patch/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-patch@0.2.0...@thi.ng/transducers-patch@0.2.1) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/transducers-patch + + + + + # [0.2.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-patch@0.1.33...@thi.ng/transducers-patch@0.2.0) (2020-12-22) diff --git a/packages/transducers-patch/package.json b/packages/transducers-patch/package.json index d5d81ad934..8a30884071 100644 --- a/packages/transducers-patch/package.json +++ b/packages/transducers-patch/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/transducers-patch", - "version": "0.2.0", + "version": "0.2.1", "description": "Reducers for patch-based, immutable-by-default array & object editing", "module": "./index.js", "main": "./lib/index.js", @@ -49,11 +49,11 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/paths": "^4.1.11", - "@thi.ng/transducers": "^7.5.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/paths": "^4.1.12", + "@thi.ng/transducers": "^7.5.4" }, "files": [ "*.js", diff --git a/packages/transducers-stats/CHANGELOG.md b/packages/transducers-stats/CHANGELOG.md index c1f19d28a4..428b9171b7 100644 --- a/packages/transducers-stats/CHANGELOG.md +++ b/packages/transducers-stats/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.1.45](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-stats@1.1.44...@thi.ng/transducers-stats@1.1.45) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/transducers-stats + + + + + ## [1.1.44](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-stats@1.1.43...@thi.ng/transducers-stats@1.1.44) (2020-12-22) **Note:** Version bump only for package @thi.ng/transducers-stats diff --git a/packages/transducers-stats/package.json b/packages/transducers-stats/package.json index 8108b7a504..3b25288e27 100644 --- a/packages/transducers-stats/package.json +++ b/packages/transducers-stats/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/transducers-stats", - "version": "1.1.44", + "version": "1.1.45", "description": "Transducers for statistical / technical analysis", "module": "./index.js", "main": "./lib/index.js", @@ -49,10 +49,10 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/checks": "^2.7.12", - "@thi.ng/dcons": "^2.3.4", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/transducers": "^7.5.3" + "@thi.ng/checks": "^2.7.13", + "@thi.ng/dcons": "^2.3.5", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/transducers": "^7.5.4" }, "files": [ "*.js", diff --git a/packages/transducers/CHANGELOG.md b/packages/transducers/CHANGELOG.md index e0c6048437..97f4bd416b 100644 --- a/packages/transducers/CHANGELOG.md +++ b/packages/transducers/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [7.5.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers@7.5.3...@thi.ng/transducers@7.5.4) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/transducers + + + + + ## [7.5.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers@7.5.2...@thi.ng/transducers@7.5.3) (2020-12-22) **Note:** Version bump only for package @thi.ng/transducers diff --git a/packages/transducers/package.json b/packages/transducers/package.json index 97590889e3..720d885aae 100644 --- a/packages/transducers/package.json +++ b/packages/transducers/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/transducers", - "version": "7.5.3", + "version": "7.5.4", "description": "Lightweight transducer implementations for ES6 / TypeScript", "module": "./index.js", "main": "./lib/index.js", @@ -49,14 +49,14 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/arrays": "^0.8.5", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/compare": "^1.3.21", - "@thi.ng/compose": "^1.4.22", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/math": "^3.0.0", - "@thi.ng/random": "^2.1.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/arrays": "^0.9.0", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/compare": "^1.3.22", + "@thi.ng/compose": "^1.4.23", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/math": "^3.0.1", + "@thi.ng/random": "^2.1.4" }, "files": [ "*.js", diff --git a/packages/unionstruct/CHANGELOG.md b/packages/unionstruct/CHANGELOG.md index e33819fbe2..5254f1291b 100644 --- a/packages/unionstruct/CHANGELOG.md +++ b/packages/unionstruct/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.1.29](https://github.com/thi-ng/umbrella/compare/@thi.ng/unionstruct@1.1.28...@thi.ng/unionstruct@1.1.29) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/unionstruct + + + + + ## [1.1.28](https://github.com/thi-ng/umbrella/compare/@thi.ng/unionstruct@1.1.27...@thi.ng/unionstruct@1.1.28) (2020-12-22) **Note:** Version bump only for package @thi.ng/unionstruct diff --git a/packages/unionstruct/package.json b/packages/unionstruct/package.json index 7fb99b2de3..b334246d0f 100644 --- a/packages/unionstruct/package.json +++ b/packages/unionstruct/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/unionstruct", - "version": "1.1.28", + "version": "1.1.29", "description": "C-style struct, union and bitfield read/write views of ArrayBuffers", "module": "./index.js", "main": "./lib/index.js", diff --git a/packages/vclock/CHANGELOG.md b/packages/vclock/CHANGELOG.md index b67839de75..7116ad48d7 100644 --- a/packages/vclock/CHANGELOG.md +++ b/packages/vclock/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/vclock@0.1.2...@thi.ng/vclock@0.1.3) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/vclock + + + + + ## [0.1.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/vclock@0.1.1...@thi.ng/vclock@0.1.2) (2020-12-22) **Note:** Version bump only for package @thi.ng/vclock diff --git a/packages/vclock/package.json b/packages/vclock/package.json index 3940b5c93f..5afe46441d 100644 --- a/packages/vclock/package.json +++ b/packages/vclock/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/vclock", - "version": "0.1.2", + "version": "0.1.3", "description": "Vector clock functions for synchronizing distributed states & processes", "module": "./index.js", "main": "./lib/index.js", @@ -49,7 +49,7 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5" + "@thi.ng/api": "^6.13.6" }, "files": [ "*.js", diff --git a/packages/vector-pools/CHANGELOG.md b/packages/vector-pools/CHANGELOG.md index 0b155da0e6..0499987256 100644 --- a/packages/vector-pools/CHANGELOG.md +++ b/packages/vector-pools/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.0.53](https://github.com/thi-ng/umbrella/compare/@thi.ng/vector-pools@1.0.52...@thi.ng/vector-pools@1.0.53) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/vector-pools + + + + + ## [1.0.52](https://github.com/thi-ng/umbrella/compare/@thi.ng/vector-pools@1.0.51...@thi.ng/vector-pools@1.0.52) (2020-12-22) **Note:** Version bump only for package @thi.ng/vector-pools diff --git a/packages/vector-pools/package.json b/packages/vector-pools/package.json index 4bde712785..f6c981e84c 100644 --- a/packages/vector-pools/package.json +++ b/packages/vector-pools/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/vector-pools", - "version": "1.0.52", + "version": "1.0.53", "description": "Data structures for managing & working with strided, memory mapped vectors", "module": "./index.js", "main": "./lib/index.js", @@ -49,12 +49,12 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/binary": "^2.0.20", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/malloc": "^4.2.4", - "@thi.ng/transducers": "^7.5.3", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/binary": "^2.0.21", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/malloc": "^4.2.5", + "@thi.ng/transducers": "^7.5.4", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/vectors/CHANGELOG.md b/packages/vectors/CHANGELOG.md index 0090fd5bbc..b3bc22e78e 100644 --- a/packages/vectors/CHANGELOG.md +++ b/packages/vectors/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.8.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/vectors@4.8.3...@thi.ng/vectors@4.8.4) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/vectors + + + + + ## [4.8.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/vectors@4.8.2...@thi.ng/vectors@4.8.3) (2020-12-22) **Note:** Version bump only for package @thi.ng/vectors diff --git a/packages/vectors/package.json b/packages/vectors/package.json index 56d70c6298..2b03ea6043 100644 --- a/packages/vectors/package.json +++ b/packages/vectors/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/vectors", - "version": "4.8.3", + "version": "4.8.4", "description": "Optimized 2d/3d/4d and arbitrary length vector operations", "module": "./index.js", "main": "./lib/index.js", @@ -49,15 +49,15 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/binary": "^2.0.20", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/equiv": "^1.0.34", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/math": "^3.0.0", - "@thi.ng/memoize": "^2.1.7", - "@thi.ng/random": "^2.1.3", - "@thi.ng/transducers": "^7.5.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/binary": "^2.0.21", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/equiv": "^1.0.35", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/math": "^3.0.1", + "@thi.ng/memoize": "^2.1.8", + "@thi.ng/random": "^2.1.4", + "@thi.ng/transducers": "^7.5.4" }, "files": [ "*.js", diff --git a/packages/viz/CHANGELOG.md b/packages/viz/CHANGELOG.md index 8c28badacf..b469c86009 100644 --- a/packages/viz/CHANGELOG.md +++ b/packages/viz/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/viz@0.2.3...@thi.ng/viz@0.2.4) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/viz + + + + + ## [0.2.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/viz@0.2.2...@thi.ng/viz@0.2.3) (2020-12-22) **Note:** Version bump only for package @thi.ng/viz diff --git a/packages/viz/package.json b/packages/viz/package.json index 55bace6b39..e900abefa2 100644 --- a/packages/viz/package.json +++ b/packages/viz/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/viz", - "version": "0.2.3", + "version": "0.2.4", "description": "Declarative, functional & multi-format data visualization toolkit based around @thi.ng/hiccup", "module": "./index.js", "main": "./lib/index.js", @@ -46,7 +46,7 @@ "devDependencies": { "@istanbuljs/nyc-config-typescript": "^1.0.1", "@microsoft/api-extractor": "^7.12.1", - "@thi.ng/date": "^0.2.4", + "@thi.ng/date": "^0.2.5", "@types/mocha": "^8.2.0", "@types/node": "^14.14.14", "mocha": "^8.2.1", @@ -56,13 +56,13 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/arrays": "^0.8.5", - "@thi.ng/associative": "^5.0.12", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/math": "^3.0.0", - "@thi.ng/strings": "^1.11.3", - "@thi.ng/transducers": "^7.5.3" + "@thi.ng/api": "^6.13.6", + "@thi.ng/arrays": "^0.9.0", + "@thi.ng/associative": "^5.0.13", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/math": "^3.0.1", + "@thi.ng/strings": "^1.11.4", + "@thi.ng/transducers": "^7.5.4" }, "files": [ "*.js", diff --git a/packages/webgl-msdf/CHANGELOG.md b/packages/webgl-msdf/CHANGELOG.md index b6f19f9fad..7119e5a156 100644 --- a/packages/webgl-msdf/CHANGELOG.md +++ b/packages/webgl-msdf/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.67](https://github.com/thi-ng/umbrella/compare/@thi.ng/webgl-msdf@0.1.66...@thi.ng/webgl-msdf@0.1.67) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/webgl-msdf + + + + + ## [0.1.66](https://github.com/thi-ng/umbrella/compare/@thi.ng/webgl-msdf@0.1.65...@thi.ng/webgl-msdf@0.1.66) (2020-12-22) **Note:** Version bump only for package @thi.ng/webgl-msdf diff --git a/packages/webgl-msdf/package.json b/packages/webgl-msdf/package.json index 43916c89b8..576c5010c9 100644 --- a/packages/webgl-msdf/package.json +++ b/packages/webgl-msdf/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/webgl-msdf", - "version": "0.1.66", + "version": "0.1.67", "description": "Multi-channel SDF font rendering & basic text layout for WebGL", "module": "./index.js", "main": "./lib/index.js", @@ -49,12 +49,12 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/shader-ast": "^0.7.7", - "@thi.ng/transducers": "^7.5.3", - "@thi.ng/vector-pools": "^1.0.52", - "@thi.ng/vectors": "^4.8.3", - "@thi.ng/webgl": "^3.3.9" + "@thi.ng/api": "^6.13.6", + "@thi.ng/shader-ast": "^0.7.8", + "@thi.ng/transducers": "^7.5.4", + "@thi.ng/vector-pools": "^1.0.53", + "@thi.ng/vectors": "^4.8.4", + "@thi.ng/webgl": "^3.3.10" }, "files": [ "*.js", diff --git a/packages/webgl-shadertoy/CHANGELOG.md b/packages/webgl-shadertoy/CHANGELOG.md index 30b3819f88..841e049a42 100644 --- a/packages/webgl-shadertoy/CHANGELOG.md +++ b/packages/webgl-shadertoy/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.54](https://github.com/thi-ng/umbrella/compare/@thi.ng/webgl-shadertoy@0.2.53...@thi.ng/webgl-shadertoy@0.2.54) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/webgl-shadertoy + + + + + ## [0.2.53](https://github.com/thi-ng/umbrella/compare/@thi.ng/webgl-shadertoy@0.2.52...@thi.ng/webgl-shadertoy@0.2.53) (2020-12-22) **Note:** Version bump only for package @thi.ng/webgl-shadertoy diff --git a/packages/webgl-shadertoy/package.json b/packages/webgl-shadertoy/package.json index 39e031309b..c0e75b2459 100644 --- a/packages/webgl-shadertoy/package.json +++ b/packages/webgl-shadertoy/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/webgl-shadertoy", - "version": "0.2.53", + "version": "0.2.54", "description": "Basic WebGL scaffolding for running interactive fragment shaders via @thi.ng/shader-ast", "module": "./index.js", "main": "./lib/index.js", @@ -49,10 +49,10 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/shader-ast": "^0.7.7", - "@thi.ng/shader-ast-glsl": "^0.2.15", - "@thi.ng/webgl": "^3.3.9" + "@thi.ng/api": "^6.13.6", + "@thi.ng/shader-ast": "^0.7.8", + "@thi.ng/shader-ast-glsl": "^0.2.16", + "@thi.ng/webgl": "^3.3.10" }, "files": [ "*.js", diff --git a/packages/webgl/CHANGELOG.md b/packages/webgl/CHANGELOG.md index de45d727bb..8f0c25f4f3 100644 --- a/packages/webgl/CHANGELOG.md +++ b/packages/webgl/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [3.3.10](https://github.com/thi-ng/umbrella/compare/@thi.ng/webgl@3.3.9...@thi.ng/webgl@3.3.10) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/webgl + + + + + ## [3.3.9](https://github.com/thi-ng/umbrella/compare/@thi.ng/webgl@3.3.8...@thi.ng/webgl@3.3.9) (2020-12-22) **Note:** Version bump only for package @thi.ng/webgl diff --git a/packages/webgl/package.json b/packages/webgl/package.json index ece2a337d1..ce66d8997d 100644 --- a/packages/webgl/package.json +++ b/packages/webgl/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/webgl", - "version": "3.3.9", + "version": "3.3.10", "description": "WebGL & GLSL abstraction layer", "module": "./index.js", "main": "./lib/index.js", @@ -49,21 +49,21 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/adapt-dpi": "^1.0.12", - "@thi.ng/api": "^6.13.5", - "@thi.ng/associative": "^5.0.12", - "@thi.ng/checks": "^2.7.12", - "@thi.ng/equiv": "^1.0.34", - "@thi.ng/errors": "^1.2.25", - "@thi.ng/matrices": "^0.6.38", - "@thi.ng/memoize": "^2.1.7", - "@thi.ng/pixel": "^0.4.10", - "@thi.ng/shader-ast": "^0.7.7", - "@thi.ng/shader-ast-glsl": "^0.2.15", - "@thi.ng/shader-ast-stdlib": "^0.5.7", - "@thi.ng/transducers": "^7.5.3", - "@thi.ng/vector-pools": "^1.0.52", - "@thi.ng/vectors": "^4.8.3" + "@thi.ng/adapt-dpi": "^1.0.13", + "@thi.ng/api": "^6.13.6", + "@thi.ng/associative": "^5.0.13", + "@thi.ng/checks": "^2.7.13", + "@thi.ng/equiv": "^1.0.35", + "@thi.ng/errors": "^1.2.26", + "@thi.ng/matrices": "^0.6.39", + "@thi.ng/memoize": "^2.1.8", + "@thi.ng/pixel": "^0.5.0", + "@thi.ng/shader-ast": "^0.7.8", + "@thi.ng/shader-ast-glsl": "^0.2.16", + "@thi.ng/shader-ast-stdlib": "^0.5.8", + "@thi.ng/transducers": "^7.5.4", + "@thi.ng/vector-pools": "^1.0.53", + "@thi.ng/vectors": "^4.8.4" }, "files": [ "*.js", diff --git a/packages/zipper/CHANGELOG.md b/packages/zipper/CHANGELOG.md index ac9c8fffb6..3431b748bb 100644 --- a/packages/zipper/CHANGELOG.md +++ b/packages/zipper/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.31](https://github.com/thi-ng/umbrella/compare/@thi.ng/zipper@0.1.30...@thi.ng/zipper@0.1.31) (2021-01-02) + +**Note:** Version bump only for package @thi.ng/zipper + + + + + ## [0.1.30](https://github.com/thi-ng/umbrella/compare/@thi.ng/zipper@0.1.29...@thi.ng/zipper@0.1.30) (2020-12-22) **Note:** Version bump only for package @thi.ng/zipper diff --git a/packages/zipper/package.json b/packages/zipper/package.json index 355560b601..7f1b7c837e 100644 --- a/packages/zipper/package.json +++ b/packages/zipper/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/zipper", - "version": "0.1.30", + "version": "0.1.31", "description": "Functional tree editing, manipulation & navigation", "module": "./index.js", "main": "./lib/index.js", @@ -49,9 +49,9 @@ "typescript": "^4.1.3" }, "dependencies": { - "@thi.ng/api": "^6.13.5", - "@thi.ng/arrays": "^0.8.5", - "@thi.ng/checks": "^2.7.12" + "@thi.ng/api": "^6.13.6", + "@thi.ng/arrays": "^0.9.0", + "@thi.ng/checks": "^2.7.13" }, "files": [ "*.js",
    -//
    see
    -//

    Dispatcher.EVENT_BEGIN

    -//
    see
    -//

    Dispatcher.EVENT_BEGIN_RESOLVE

    -//
    see
    -//

    Dispatcher.EVENT_END_RESOLVE

    -//