From 9f4d7a643941194965c0be9261e00379573fd57e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 12 Mar 2021 23:49:49 +0000 Subject: [PATCH 01/25] build(deps): bump elliptic from 6.5.3 to 6.5.4 Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.3 to 6.5.4. - [Release notes](https://github.com/indutny/elliptic/releases) - [Commits](https://github.com/indutny/elliptic/compare/v6.5.3...v6.5.4) Signed-off-by: dependabot[bot] --- yarn.lock | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5f65c5e32f..afc296a766 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2807,10 +2807,10 @@ bluebird@^3.5.5: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: - version "4.11.9" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" - integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== bn.js@^5.1.1: version "5.1.3" @@ -2860,7 +2860,7 @@ braces@^3.0.1, braces@~3.0.2: dependencies: fill-range "^7.0.1" -brorand@^1.0.1: +brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= @@ -4216,17 +4216,17 @@ electron-to-chromium@^1.3.612: integrity sha512-CI8L38UN2BEnqXw3/oRIQTmde0LiSeqWSRlPA42ZTYgJQ8fYenzAM2Z3ni+jtILTcrs5aiXZCGJ96Pm+3/yGyQ== elliptic@^6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" - integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" + bn.js "^4.11.9" + brorand "^1.1.0" hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" emoji-regex@^8.0.0: version "8.0.0" @@ -5159,7 +5159,7 @@ 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== -hmac-drbg@^1.0.0: +hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= @@ -6551,7 +6551,7 @@ minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: +minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= From fb5ca0a7f8a4a6648d3c8485a9108e9154ee4400 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Sat, 13 Mar 2021 11:01:17 +0000 Subject: [PATCH 02/25] feat(errors): add outOfBounds(), ensureIndex() --- packages/errors/src/index.ts | 1 + packages/errors/src/out-of-bounds.ts | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 packages/errors/src/out-of-bounds.ts diff --git a/packages/errors/src/index.ts b/packages/errors/src/index.ts index ac23228467..c40b9f3874 100644 --- a/packages/errors/src/index.ts +++ b/packages/errors/src/index.ts @@ -2,4 +2,5 @@ export * from "./deferror"; export * from "./illegal-arguments"; export * from "./illegal-arity"; export * from "./illegal-state"; +export * from "./out-of-bounds"; export * from "./unsupported"; diff --git a/packages/errors/src/out-of-bounds.ts b/packages/errors/src/out-of-bounds.ts new file mode 100644 index 0000000000..48707d804d --- /dev/null +++ b/packages/errors/src/out-of-bounds.ts @@ -0,0 +1,17 @@ +import { defError } from "./deferror"; + +export const OutOfBoundsError = defError(() => "index out of bounds"); + +export const outOfBounds = (index: number): never => { + throw new OutOfBoundsError(index); +}; + +/** + * Throws an {@link OutOfBoundsError} if `index` outside the `[min..max)` range. + * + * @param index + * @param min + * @param max + */ +export const ensureIndex = (index: number, min: number, max: number) => + (index < min || index >= max) && outOfBounds(index); From a6d97310873411a094617cb21f99639aed16aba0 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Sat, 13 Mar 2021 11:02:30 +0000 Subject: [PATCH 03/25] refactor(bitfield): dedupe OOB error handling --- packages/bitfield/package.json | 1 + packages/bitfield/src/bitmatrix.ts | 17 +++++------------ 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/packages/bitfield/package.json b/packages/bitfield/package.json index bb697a2ca1..7a8da8d936 100644 --- a/packages/bitfield/package.json +++ b/packages/bitfield/package.json @@ -51,6 +51,7 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/binary": "^2.2.4", + "@thi.ng/errors": "^1.2.32", "@thi.ng/strings": "^1.15.5" }, "files": [ diff --git a/packages/bitfield/src/bitmatrix.ts b/packages/bitfield/src/bitmatrix.ts index 59520861e4..c8a522e90b 100644 --- a/packages/bitfield/src/bitmatrix.ts +++ b/packages/bitfield/src/bitmatrix.ts @@ -1,5 +1,6 @@ import { assert, Fn2, IClear, ICopy } from "@thi.ng/api"; import { align, bitAnd, bitNot, bitOr, bitXor } from "@thi.ng/binary"; +import { ensureIndex } from "@thi.ng/errors"; import { BitField } from "./bitfield"; import { binOp, popCount, toString } from "./util"; @@ -126,13 +127,13 @@ export class BitMatrix implements IClear, ICopy { } popCountRow(m: number) { - this.ensureRow(m); + ensureIndex(m, 0, this.m); m *= this.stride; return popCount(this.data.subarray(m, m + this.stride)); } popCountColumn(n: number) { - this.ensureColumn(n); + ensureIndex(n, 0, this.n); const { data, stride, m } = this; const mask = 1 << (~n & 31); let res = 0; @@ -143,7 +144,7 @@ export class BitMatrix implements IClear, ICopy { } row(m: number) { - this.ensureRow(m); + ensureIndex(m, 0, this.m); const row = new BitField(this.n); m *= this.stride; row.data.set(this.data.subarray(m, m + this.stride)); @@ -151,7 +152,7 @@ export class BitMatrix implements IClear, ICopy { } column(n: number) { - this.ensureColumn(n); + ensureIndex(n, 0, this.n); const { data, stride, m } = this; const column = new BitField(m); const mask = 1 << (~n & 31); @@ -181,14 +182,6 @@ export class BitMatrix implements IClear, ICopy { `matrices must be same size` ); } - - protected ensureRow(m: number) { - assert(m >= 0 && m < this.m, `row index out of range: ${m}`); - } - - protected ensureColumn(n: number) { - assert(n >= 0 && n < this.n, `column index out of range: ${n}`); - } } export const defBitMatrix = (rows: number, cols = rows) => From c14a8fbfef00269dd24dc3d5960bb777eae8e198 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Sat, 13 Mar 2021 11:03:04 +0000 Subject: [PATCH 04/25] refactor(dcons): dedupe OOB error handling --- packages/dcons/src/dcons.ts | 17 ++++++----------- packages/dcons/src/sol.ts | 4 ++-- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/packages/dcons/src/dcons.ts b/packages/dcons/src/dcons.ts index a1f9df65f3..c887a32ba5 100644 --- a/packages/dcons/src/dcons.ts +++ b/packages/dcons/src/dcons.ts @@ -1,5 +1,4 @@ -import { - assert, +import type { Comparator, Fn, IClear, @@ -12,12 +11,12 @@ import { ISeq, ISeqable, IStack, - Predicate, + Predicate } from "@thi.ng/api"; import { isArrayLike } from "@thi.ng/checks"; import { compare } from "@thi.ng/compare"; import { equiv } from "@thi.ng/equiv"; -import { illegalArgs } from "@thi.ng/errors"; +import { ensureIndex, illegalArgs } from "@thi.ng/errors"; import { IRandom, SYSTEM } from "@thi.ng/random"; import { IReducible, isReduced, ReductionFn } from "@thi.ng/transducers"; @@ -223,7 +222,7 @@ export class DCons if (n <= 0) { return this.cons(x); } else { - this.ensureIndex(n); + ensureIndex(n, 0, this._length); return this.insertBefore(this.nthCellUnsafe(n), x); } } @@ -235,7 +234,7 @@ export class DCons if (n >= this._length - 1) { return this.push(x); } else { - this.ensureIndex(n); + ensureIndex(n, 0, this._length); return this.insertAfter(this.nthCellUnsafe(n), x); } } @@ -307,7 +306,7 @@ export class DCons if (at < 0) { at += this._length; } - this.ensureIndex(at); + ensureIndex(at, 0, this._length); cell = this.nthCellUnsafe(at); } else { cell = at; @@ -640,10 +639,6 @@ export class DCons return [...this]; } - protected ensureIndex(i: number) { - assert(i >= 0 && i < this._length, `index out of range: ${i}`); - } - protected nthCellUnsafe(n: number) { let cell: ConsCell, dir: keyof ConsCell; if (n <= this._length >> 1) { diff --git a/packages/dcons/src/sol.ts b/packages/dcons/src/sol.ts index 075602a775..9cbfebcd68 100644 --- a/packages/dcons/src/sol.ts +++ b/packages/dcons/src/sol.ts @@ -1,5 +1,5 @@ import type { Fn2, Predicate } from "@thi.ng/api"; -import { illegalArgs } from "@thi.ng/errors"; +import { outOfBounds } from "@thi.ng/errors"; import { ConsCell, DCons } from "./dcons"; /** @@ -44,7 +44,7 @@ export class SOL extends DCons { setNth(n: number, v: T) { const cell = this.nthCell(n); - !cell && illegalArgs(`index out of bounds: ${n}`); + !cell && outOfBounds(n); this._reorder(this, cell!).value = v; return this; } From 1988ccdd8e10244b692ec79258e1978364074f1d Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Sat, 13 Mar 2021 11:03:28 +0000 Subject: [PATCH 05/25] refactor(soa): dedupe OOB error handling --- packages/soa/package.json | 1 + packages/soa/src/soa.ts | 31 ++++++++++++++----------------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/packages/soa/package.json b/packages/soa/package.json index 99c5f82f21..6265c16cc6 100644 --- a/packages/soa/package.json +++ b/packages/soa/package.json @@ -52,6 +52,7 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/binary": "^2.2.4", + "@thi.ng/errors": "^1.2.32", "@thi.ng/transducers-binary": "^0.6.12", "@thi.ng/vectors": "^5.1.4" }, diff --git a/packages/soa/src/soa.ts b/packages/soa/src/soa.ts index d18bfaa995..b92013c7a3 100644 --- a/packages/soa/src/soa.ts +++ b/packages/soa/src/soa.ts @@ -1,4 +1,5 @@ import { assert, ILength, SIZEOF, TypedArray, typedArray } from "@thi.ng/api"; +import { ensureIndex } from "@thi.ng/errors"; import type { ReadonlyVec, Vec } from "@thi.ng/vectors"; import type { SOAAttribSpec, SOASpecs, SOATuple } from "./api"; import { prepareSpec } from "./utils"; @@ -20,8 +21,8 @@ export class SOA implements ILength { } *values(from = 0, to = this.length): IterableIterator> { - this.ensureIndex(from); - this.ensureIndex(to, from, this.length); + ensureIndex(from, 0, this.length); + ensureIndex(to, from, this.length + 1); for (; from < to; from++) { yield this.indexUnsafe(from); } @@ -29,8 +30,8 @@ export class SOA implements ILength { attribValues(id: K, from = 0, to = this.length) { this.ensureAttrib(id); - this.ensureIndex(from); - this.ensureIndex(to, from, this.length); + ensureIndex(from, 0, this.length); + ensureIndex(to, from, this.length + 1); let { size, stride, type } = this.specs[id]; const buf = this.buffers[id].buffer; stride! *= SIZEOF[type!]; @@ -45,7 +46,7 @@ export class SOA implements ILength { attribValue(id: K, i: number): Vec { this.ensureAttrib(id); - this.ensureIndex(i); + ensureIndex(i, 0, this.length); return this.attribValueUnsafe(id, i); } @@ -57,7 +58,7 @@ export class SOA implements ILength { setAttribValue(id: K, i: number, val: ReadonlyVec) { this.ensureAttrib(id); - this.ensureIndex(i); + ensureIndex(i, 0, this.length); const spec = this.specs[id]; assert(val.length <= spec.size!, `${id} value too large`); this.buffers[id].set(val, i * spec.stride!); @@ -70,7 +71,7 @@ export class SOA implements ILength { setAttribValues(id: K, vals: Iterable, from = 0) { this.ensureAttrib(id); - this.ensureIndex(from); + ensureIndex(from, 0, this.length); const buf = this.buffers[id]; const stride = this.specs[id].stride!; const end = this.length * stride; @@ -86,7 +87,7 @@ export class SOA implements ILength { index(i: number): SOATuple; index(i: number, ids: ID[]): SOATuple; index(i: number, ids?: K[]): any { - this.ensureIndex(i); + ensureIndex(i, 0, this.length); return this.indexUnsafe(i, ids!); } @@ -108,7 +109,7 @@ export class SOA implements ILength { } setIndex(i: number, vals: Partial>) { - this.ensureIndex(i); + ensureIndex(i, 0, this.length); for (let id in vals) { this.setAttribValue(id, i, vals[id]!); } @@ -136,11 +137,11 @@ export class SOA implements ILength { srcFrom = 0, srcTo = this.length ) { - this.ensureIndex(srcFrom); - this.ensureIndex(srcTo, srcFrom, this.length); + ensureIndex(srcFrom, 0, this.length); + ensureIndex(srcTo, srcFrom, this.length + 1); const num = srcTo - srcFrom; - dest.ensureIndex(destFrom); - dest.ensureIndex(destFrom + num, destFrom, dest.length); + ensureIndex(destFrom, 0, dest.length); + ensureIndex(destFrom + num, destFrom, dest.length + 1); ids = ids || Object.keys(this.specs); for (let k = ids.length; --k >= 0; ) { const id = ids[k]; @@ -189,10 +190,6 @@ export class SOA implements ILength { protected ensureAttrib(id: K) { assert(!!this.specs[id], `invalid attrib ${id}`); } - - protected ensureIndex(i: number, min = 0, max = this.length - 1) { - assert(i >= min && i <= max, `index out of bounds: ${i}`); - } } export const soa = (num: number, specs: SOASpecs) => From ab007d6b502c3d1650c7e9cf50da05f0ac042ef3 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Sat, 13 Mar 2021 11:22:38 +0000 Subject: [PATCH 06/25] feat(errors): add ensureIndex2(), update outOfBounds() arg type --- packages/errors/src/out-of-bounds.ts | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/errors/src/out-of-bounds.ts b/packages/errors/src/out-of-bounds.ts index 48707d804d..b11271f395 100644 --- a/packages/errors/src/out-of-bounds.ts +++ b/packages/errors/src/out-of-bounds.ts @@ -2,7 +2,7 @@ import { defError } from "./deferror"; export const OutOfBoundsError = defError(() => "index out of bounds"); -export const outOfBounds = (index: number): never => { +export const outOfBounds = (index: any): never => { throw new OutOfBoundsError(index); }; @@ -15,3 +15,20 @@ export const outOfBounds = (index: number): never => { */ export const ensureIndex = (index: number, min: number, max: number) => (index < min || index >= max) && outOfBounds(index); + +/** + * Throws an {@link OutOfBoundsError} if either `x` or `y` is outside their + * respective `[0..max)` range. + * + * @param x + * @param y + * @param maxX + * @param maxY + * @returns + */ +export const ensureIndex2 = ( + x: number, + y: number, + maxX: number, + maxY: number +) => (x < 0 || x >= maxX || y < 0 || y >= maxY) && outOfBounds([x, y]); From b387d6538eaf4c5b4676a2d12ed0e6c949323803 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Sat, 13 Mar 2021 11:24:51 +0000 Subject: [PATCH 07/25] refactor(sparse): dedupe OOB error handling - remove ASparseMatrix.ensureIndex() - replace w/ ensureIndex2() from @thi.ng/errors --- packages/sparse/package.json | 1 + packages/sparse/src/amatrix.ts | 7 ------- packages/sparse/src/coo.ts | 5 +++-- packages/sparse/src/csc.ts | 5 +++-- packages/sparse/src/csr.ts | 5 +++-- packages/sparse/src/diag.ts | 3 ++- packages/sparse/src/vec.ts | 9 +++------ 7 files changed, 15 insertions(+), 20 deletions(-) diff --git a/packages/sparse/package.json b/packages/sparse/package.json index da566e5ab0..036e4b764d 100644 --- a/packages/sparse/package.json +++ b/packages/sparse/package.json @@ -50,6 +50,7 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", + "@thi.ng/errors": "^1.2.32", "@thi.ng/transducers": "^7.6.6" }, "files": [ diff --git a/packages/sparse/src/amatrix.ts b/packages/sparse/src/amatrix.ts index d99450e2e4..e1f123b4b6 100644 --- a/packages/sparse/src/amatrix.ts +++ b/packages/sparse/src/amatrix.ts @@ -41,13 +41,6 @@ export abstract class ASparseMatrix { return trace; } - protected ensureIndex(m: number, n: number) { - assert( - m >= 0 && m < this.m && n >= 0 && n < this.n, - `index out of bounds (${m}, ${n})` - ); - } - protected ensureSize(mat: ASparseMatrix) { assert( mat.m === this.m && mat.n === this.n, diff --git a/packages/sparse/src/coo.ts b/packages/sparse/src/coo.ts index ec397bbac6..48c7d81672 100644 --- a/packages/sparse/src/coo.ts +++ b/packages/sparse/src/coo.ts @@ -1,3 +1,4 @@ +import { ensureIndex2 } from "@thi.ng/errors"; import { partition } from "@thi.ng/transducers"; import { ASparseMatrix } from "./amatrix"; import type { NzEntry } from "./api"; @@ -42,7 +43,7 @@ export class COO extends ASparseMatrix { } at(m: number, n: number, safe = true) { - safe && this.ensureIndex(m, n); + safe && ensureIndex2(m, n, this.m, this.n); const d = this.data; for (let i = 0, l = d.length; i < l && d[i] <= m; i += 3) { if (d[i] === m && d[i + 1] === n) { @@ -53,7 +54,7 @@ export class COO extends ASparseMatrix { } setAt(m: number, n: number, v: number, safe = true) { - safe && this.ensureIndex(m, n); + safe && ensureIndex2(m, n, this.m, this.n); const d = this.data; for (let i = 0, l = d.length; i < l; i += 3) { const r = d[i]; diff --git a/packages/sparse/src/csc.ts b/packages/sparse/src/csc.ts index 9ea5d16259..6f63e2cea0 100644 --- a/packages/sparse/src/csc.ts +++ b/packages/sparse/src/csc.ts @@ -1,4 +1,5 @@ import { assert } from "@thi.ng/api"; +import { ensureIndex2 } from "@thi.ng/errors"; import { ASparseMatrix } from "./amatrix"; import type { NzEntry } from "./api"; import { at, compress, diag, setAt } from "./compressed"; @@ -81,12 +82,12 @@ export class CSC extends ASparseMatrix { } at(m: number, n: number, safe = true) { - safe && this.ensureIndex(m, n); + safe && ensureIndex2(m, n, this.m, this.n); return at(n, m, this.cols, this.rows, this.data); } setAt(m: number, n: number, x: number, safe = true, compact = true) { - safe && this.ensureIndex(m, n); + safe && ensureIndex2(m, n, this.m, this.n); const state = setAt( n, m, diff --git a/packages/sparse/src/csr.ts b/packages/sparse/src/csr.ts index ed58b7fcfb..e2608eabfb 100644 --- a/packages/sparse/src/csr.ts +++ b/packages/sparse/src/csr.ts @@ -1,4 +1,5 @@ import { assert } from "@thi.ng/api"; +import { ensureIndex2 } from "@thi.ng/errors"; import { ASparseMatrix } from "./amatrix"; import type { NzEntry } from "./api"; import { at, compress, diag, remove, setAt } from "./compressed"; @@ -134,12 +135,12 @@ export class CSR extends ASparseMatrix { } at(m: number, n: number, safe = true) { - safe && this.ensureIndex(m, n); + safe && ensureIndex2(m, n, this.m, this.n); return at(m, n, this.rows, this.cols, this.data); } setAt(m: number, n: number, x: number, safe = true, compact = true) { - safe && this.ensureIndex(m, n); + safe && ensureIndex2(m, n, this.m, this.n); const state = setAt( m, n, diff --git a/packages/sparse/src/diag.ts b/packages/sparse/src/diag.ts index 7a211e0f20..e24590c07e 100644 --- a/packages/sparse/src/diag.ts +++ b/packages/sparse/src/diag.ts @@ -1,4 +1,5 @@ import { assert } from "@thi.ng/api"; +import { ensureIndex2 } from "@thi.ng/errors"; import { ASparseMatrix } from "./amatrix"; import type { NzEntry } from "./api"; import { CSC } from "./csc"; @@ -29,7 +30,7 @@ export class Diag extends ASparseMatrix { } at(m: number, n: number, safe = true) { - safe && this.ensureIndex(m, n); + safe && ensureIndex2(m, n, this.m, this.n); return m === n ? this.data.at(m, false) : 0; } diff --git a/packages/sparse/src/vec.ts b/packages/sparse/src/vec.ts index d280f21ca3..87581d5d8f 100644 --- a/packages/sparse/src/vec.ts +++ b/packages/sparse/src/vec.ts @@ -1,4 +1,5 @@ import { assert, FnN2 } from "@thi.ng/api"; +import { ensureIndex } from "@thi.ng/errors"; import type { NzEntry } from "./api"; export type BinOp = FnN2; @@ -47,7 +48,7 @@ export class SparseVec { } at(m: number, safe = true) { - safe && this.ensureIndex(m); + safe && ensureIndex(m, 0, this.m); const d = this.data; for (let i = 0, n = d.length; i < n && d[i] <= m; i += 2) { if (m === d[i]) { @@ -58,7 +59,7 @@ export class SparseVec { } setAt(m: number, v: number, safe = true) { - safe && this.ensureIndex(m); + safe && ensureIndex(m, 0, this.m); const d = this.data; for (let i = 0, n = d.length; i < n; i += 2) { if (m < d[i]) { @@ -214,10 +215,6 @@ export class SparseVec { return res; } - protected ensureIndex(m: number) { - assert(m >= 0 && m < this.m, `index out of bounds: ${m}`); - } - protected ensureSize(v: SparseVec) { assert(this.m === v.m, `wrong vector size: ${v.m}`); } From 84bbaaa8dc68168cb2eaf8206990a6cfc077d2ac Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Sat, 13 Mar 2021 11:25:35 +0000 Subject: [PATCH 08/25] refactor(adjacency): dedupe OOB error handling --- packages/adjacency/package.json | 1 + packages/adjacency/src/sparse.ts | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/adjacency/package.json b/packages/adjacency/package.json index cee286e98e..189ad9303a 100644 --- a/packages/adjacency/package.json +++ b/packages/adjacency/package.json @@ -54,6 +54,7 @@ "@thi.ng/arrays": "^0.10.8", "@thi.ng/bitfield": "^0.4.5", "@thi.ng/dcons": "^2.3.16", + "@thi.ng/errors": "^1.2.32", "@thi.ng/sparse": "^0.1.71" }, "files": [ diff --git a/packages/adjacency/src/sparse.ts b/packages/adjacency/src/sparse.ts index e66b7ea17a..0acb321b28 100644 --- a/packages/adjacency/src/sparse.ts +++ b/packages/adjacency/src/sparse.ts @@ -1,3 +1,4 @@ +import { ensureIndex2 } from "@thi.ng/errors"; import { CSR } from "@thi.ng/sparse"; import type { DegreeType, Edge, IGraph } from "./api"; import { into, invert, toDot } from "./utils"; @@ -63,7 +64,7 @@ export class AdjacencyMatrix extends CSR implements IGraph { degree(id: number, type: DegreeType = "out") { let degree = 0; - this.ensureIndex(id, id); + ensureIndex2(id, id, this.m, this.n); if (this.undirected || type !== "in") degree += this.nnzRow(id); if (!this.undirected && type !== "out") degree += this.nnzCol(id); return degree; From f7eabec276a6a08b58d93512421bae1df1817f2d Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Mon, 15 Mar 2021 23:23:38 +0000 Subject: [PATCH 09/25] fix(heaps): update return types (#283) - add explicit return types for Heap.peek()/pop()/pushPop() --- packages/heaps/src/heap.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/heaps/src/heap.ts b/packages/heaps/src/heap.ts index c9458ec55f..887d9b393b 100644 --- a/packages/heaps/src/heap.ts +++ b/packages/heaps/src/heap.ts @@ -76,7 +76,7 @@ export class Heap return new Heap(null, { compare: this.compare }); } - peek() { + peek(): T | undefined { return this.values[0]; } @@ -86,7 +86,7 @@ export class Heap return this; } - pop() { + pop(): T | undefined { const vals = this.values; const tail = vals.pop(); let res: T; @@ -100,7 +100,7 @@ export class Heap return res; } - pushPop(val: T, vals = this.values) { + pushPop(val: T, vals = this.values): T | undefined { const head = vals[0]; if (vals.length > 0 && this.compare(head, val) <= 0) { vals[0] = val; @@ -124,7 +124,7 @@ export class Heap * * @param vals - values to insert */ - pushPopAll(vals: Iterable) { + pushPopAll(vals: Iterable): T | undefined { let res: any; for (let v of vals) { res = this.pushPop(v); From e7cd6f134bb05d5d5e37e7e7ba241f984d94d98c Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Mon, 15 Mar 2021 23:24:59 +0000 Subject: [PATCH 10/25] fix(distance): update KNearest ctor & heap handling (#283) - add k>0 assertion in ctor --- packages/distance/src/knearest.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/distance/src/knearest.ts b/packages/distance/src/knearest.ts index f5faadbeb1..598f53ed7e 100644 --- a/packages/distance/src/knearest.ts +++ b/packages/distance/src/knearest.ts @@ -1,4 +1,4 @@ -import type { IDeref } from "@thi.ng/api"; +import { assert, IDeref } from "@thi.ng/api"; import { Heap } from "@thi.ng/heaps"; import { clamp0 } from "@thi.ng/math"; import type { ReadonlyVec } from "@thi.ng/vectors"; @@ -35,6 +35,7 @@ export class KNearest radius = Infinity, public sorted = false ) { + assert(k > 0, `invalid k (must be > 0)`); this.radius = clamp0(radius); this.reset(); } @@ -76,7 +77,7 @@ export class KNearest const heap = this._heap; if (heap.length === this.k) { heap.pushPop([d, val]); - this._currR = heap.peek()[0]; + this._currR = heap.peek()![0]; } else { heap.push([d, val]); } From 01bd77cf446d88e36e431f2b9f308e663aed5401 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Mon, 15 Mar 2021 23:25:59 +0000 Subject: [PATCH 11/25] minor(geom-accel): minor update KdTreeMap - update heap handling (#283) --- packages/geom-accel/src/kd-tree-map.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/geom-accel/src/kd-tree-map.ts b/packages/geom-accel/src/kd-tree-map.ts index 65a9138b74..331aa423a1 100644 --- a/packages/geom-accel/src/kd-tree-map.ts +++ b/packages/geom-accel/src/kd-tree-map.ts @@ -383,7 +383,7 @@ const collect = ( node: KdNode, ndist: number ) => - (!acc.length || ndist < acc.peek()[0]) && + (!acc.length || ndist < acc.peek()![0]) && (acc.length >= maxNum ? acc.pushPop([ndist, node]) : acc.push([ndist, node])); From b5833cbf3a41458982660851c7cb6ef71d9640d5 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 15 Mar 2021 23:49:39 +0000 Subject: [PATCH 12/25] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index eda8980ec6..a04e491888 100644 --- a/README.md +++ b/README.md @@ -460,6 +460,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
d3v53c

🐛 🛡️ +
Jannis Pohlmann

🐛 From 841d6562e43e21fe4ad18a1a3e7d8b85741f6dbb Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 15 Mar 2021 23:49:40 +0000 Subject: [PATCH 13/25] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index b8c483fcd4..e4b8bd889f 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -298,6 +298,15 @@ "bug", "security" ] + }, + { + "login": "Jannis", + "name": "Jannis Pohlmann", + "avatar_url": "https://avatars.githubusercontent.com/u/19324?v=4", + "profile": "https://edgeandnode.com", + "contributions": [ + "bug" + ] } ], "contributorsPerLine": 7, From c13a5687fac6d08c14d80f380b5c664422b18a3e Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Tue, 16 Mar 2021 11:48:18 +0000 Subject: [PATCH 14/25] feat(pixel): add defIndexed() HOF pixel format --- packages/pixel/src/format/indexed.ts | 49 ++++++++++++++++++++++++++++ packages/pixel/src/index.ts | 1 + 2 files changed, 50 insertions(+) create mode 100644 packages/pixel/src/format/indexed.ts diff --git a/packages/pixel/src/format/indexed.ts b/packages/pixel/src/format/indexed.ts new file mode 100644 index 0000000000..4da5ce81c2 --- /dev/null +++ b/packages/pixel/src/format/indexed.ts @@ -0,0 +1,49 @@ +import { assert, NumericArray } from "@thi.ng/api"; +import { swapLane13 } from "@thi.ng/binary"; +import { Lane } from "../api"; +import { defPackedFormat } from "./packed-format"; + +/** + * Creates an indexed color {@link PackedFormat} using the provided palette (in + * {@link ARGB8888} or {@link ABGR8888} formats, max. 256 colors). + * + * @remarks + * If `isABGR` is false (default), the palette colors are assumed to be in ARGB + * order. When converting colors to indices, palette indices are chosen via the + * minimum cartesian distance. + * + * @param palette + * @param isABGR + */ +export const defIndexed = (palette: NumericArray, isABGR = false) => { + const n = palette.length; + assert(n > 0 && n <= 256, `invalid palette size: ${n}`); + palette = isABGR ? palette : palette.map(swapLane13); + return defPackedFormat({ + type: "u8", + size: 8, + channels: [{ size: 8, lane: Lane.RED }], + fromABGR: (x) => closestColor(x, palette), + toABGR: (x) => palette[x], + }); +}; + +const distBGR = (a: number, b: number) => + Math.hypot( + ((a >> 16) & 0xff) - ((b >> 16) & 0xff), + ((a >> 8) & 0xff) - ((b >> 8) & 0xff), + (a & 0xff) - (b & 0xff) + ); + +const closestColor = (col: number, palette: NumericArray) => { + let closest = 0; + let minD = Infinity; + for (let i = palette.length; --i >= 0; ) { + const d = distBGR(col, palette[i]); + if (d < minD) { + closest = i; + minD = d; + } + } + return closest; +}; diff --git a/packages/pixel/src/index.ts b/packages/pixel/src/index.ts index 3417bc2952..221396a24b 100644 --- a/packages/pixel/src/index.ts +++ b/packages/pixel/src/index.ts @@ -19,6 +19,7 @@ export * from "./format/gray16"; export * from "./format/gray-alpha16"; export * from "./format/gray8"; export * from "./format/gray-alpha8"; +export * from "./format/indexed"; export * from "./format/rgb565"; export * from "./format/rgb888"; From aa71eb7a2ccf02fa543c68308371143882ae5e5f Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Tue, 16 Mar 2021 19:02:02 +0000 Subject: [PATCH 15/25] feat(pixel): add defSampler(), resize() - replace `Filter` & `Wrap` enums w/ type aliases (#256) - add HOF `defSampler()` w/ impls for PackedBuffer only (so far) - add `resize()` (also PackedBuffer only) --- packages/pixel/src/api.ts | 12 +--- packages/pixel/src/index.ts | 2 + packages/pixel/src/resize.ts | 21 +++++++ packages/pixel/src/sample.ts | 114 +++++++++++++++++++++++++++++++++++ 4 files changed, 139 insertions(+), 10 deletions(-) create mode 100644 packages/pixel/src/resize.ts create mode 100644 packages/pixel/src/sample.ts diff --git a/packages/pixel/src/api.ts b/packages/pixel/src/api.ts index 9497314e88..15e1168b09 100644 --- a/packages/pixel/src/api.ts +++ b/packages/pixel/src/api.ts @@ -23,20 +23,12 @@ export enum Lane { /** * Wrap behaviors (currently unused) */ -export enum Wrap { - NONE, - U, - V, - UV, -} +export type Wrap = "clamp" | "wrap" | "repeat"; /** * Filtered access types (currently unused) */ -export enum Filter { - NEAREST, - LINEAR, -} +export type Filter = "nearest" | "linear"; /** * Blend function (for packed integers) given to IBlend implementations. diff --git a/packages/pixel/src/index.ts b/packages/pixel/src/index.ts index 221396a24b..5c7acda926 100644 --- a/packages/pixel/src/index.ts +++ b/packages/pixel/src/index.ts @@ -6,6 +6,8 @@ export * from "./dither"; export * from "./float"; export * from "./normal-map"; export * from "./packed"; +export * from "./resize"; +export * from "./sample"; export * from "./utils"; export * from "./format/packed-format"; diff --git a/packages/pixel/src/resize.ts b/packages/pixel/src/resize.ts new file mode 100644 index 0000000000..750a335f1b --- /dev/null +++ b/packages/pixel/src/resize.ts @@ -0,0 +1,21 @@ +import type { Filter } from "./api"; +import { packedBuffer, PackedBuffer } from "./packed"; +import { defSampler } from "./sample"; + +export const resize = ( + src: PackedBuffer, + w: number, + h: number, + filter: Filter = "linear" +) => { + const dest = packedBuffer(w, h, src.format); + const s = defSampler(src, filter, "clamp"); + const scaleX = (src.width - 1) / (w - 1); + const scaleY = (src.height - 1) / (h - 1); + for (let y = 0, i = 0; y < h; y++) { + for (let x = 0; x < w; x++, i++) { + dest.pixels[i] = s(x * scaleX, y * scaleY); + } + } + return dest; +}; diff --git a/packages/pixel/src/sample.ts b/packages/pixel/src/sample.ts new file mode 100644 index 0000000000..0207b420cb --- /dev/null +++ b/packages/pixel/src/sample.ts @@ -0,0 +1,114 @@ +import { assert, FloatArray, Fn, FnU2, IObjectOf } from "@thi.ng/api"; +import { clamp, fmod, fract, mixBilinear } from "@thi.ng/math"; +import type { Filter, IPixelBuffer, Wrap } from "./api"; +import type { FloatBuffer } from "./float"; +import type { PackedBuffer } from "./packed"; + +type IntSampler = FnU2; +type FloatSampler = FnU2; + +export function defSampler( + src: PackedBuffer, + filter?: Filter, + wrap?: Wrap +): IntSampler; +export function defSampler( + src: FloatBuffer, + filter?: Filter, + wrap?: Wrap +): FloatSampler; +export function defSampler( + src: IPixelBuffer, + filter: Filter = "linear", + wrap: Wrap = "clamp" +) { + const isFloat = !!(src.format).__float; + const suffix = (src.format).channels.length === 1 ? "1" : ""; + const id = `${filter[0]}${wrap[0]}${suffix}`; + const impl = (isFloat + ? >>{ + // TODO + // "nearest-clamp": sampleFloatNC, + // "linear-clamp": sampleFloatNC, + } + : >>{ + nc1: sampleIntNC1, + nw1: sampleIntNW1, + nr1: sampleIntNR1, + nc: sampleIntNC1, + nw: sampleIntNW1, + nr: sampleIntNR1, + lc1: (src) => bilinearGray(sampleIntNC1(src)), + lw1: (src) => bilinearGray(sampleIntNW1(src)), + lr1: (src) => bilinearGray(sampleIntNR1(src)), + lc: (src) => bilinearABGR(src, sampleIntNC1(src)), + lw: (src) => bilinearABGR(src, sampleIntNW1(src)), + lr: (src) => bilinearABGR(src, sampleIntNR1(src)), + })[id]; + assert(!!impl, `missing impl for ${id}`); + return impl(src); +} + +const sampleIntNC1 = ({ pixels, width, height }: PackedBuffer): IntSampler => ( + x, + y +) => + x >= 0 && x < width && y >= 0 && y < height + ? pixels[(y | 0) * width + (x | 0)] + : 0; + +const sampleIntNW1 = ({ pixels, width, height }: PackedBuffer): IntSampler => ( + x, + y +) => pixels[fmod(y | 0, height) * width + fmod(x | 0, width)]; + +const sampleIntNR1 = ({ pixels, width, height }: PackedBuffer): IntSampler => { + const w1 = width - 1; + const h1 = height - 1; + return (x, y) => pixels[clamp(y | 0, 0, h1) * width + clamp(x | 0, 0, w1)]; +}; + +const bilinearGray = (sample: IntSampler): IntSampler => (x, y) => + mixBilinear( + sample(x, y), + sample(x + 1, y), + sample(x, y + 1), + sample(x + 1, y + 1), + fract(x), + fract(y) + ); + +const bilinearABGR = (src: PackedBuffer, sample1: IntSampler): IntSampler => { + const { fromABGR, toABGR } = src.format; + return (x, y) => { + const p1 = toABGR(sample1(x, y)); + const p2 = toABGR(sample1(x + 1, y)); + const p3 = toABGR(sample1(x, y + 1)); + const p4 = toABGR(sample1(x + 1, y + 1)); + const u = fract(x); + const v = fract(y); + return fromABGR( + (mixBilinear(p1 >>> 24, p2 >>> 24, p3 >>> 24, p4 >>> 24, u, v) << + 24) | + (mixBilinear( + (p1 >> 16) & 0xff, + (p2 >> 16) & 0xff, + (p3 >> 16) & 0xff, + (p4 >> 16) & 0xff, + u, + v + ) << + 16) | + (mixBilinear( + (p1 >> 8) & 0xff, + (p2 >> 8) & 0xff, + (p3 >> 8) & 0xff, + (p4 >> 8) & 0xff, + u, + v + ) << + 8) | + mixBilinear(p1 & 0xff, p2 & 0xff, p3 & 0xff, p4 & 0xff, u, v) + ); + }; +}; From bb16dc591dd9455b8d0061a664375a9dc8c74a36 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Tue, 16 Mar 2021 19:11:48 +0000 Subject: [PATCH 16/25] perf(math): replace mixBilinear() w/ inline impl - new impl ~1.7x faster --- packages/math/src/mix.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/math/src/mix.ts b/packages/math/src/mix.ts index 86b4c405a4..eb16039899 100644 --- a/packages/math/src/mix.ts +++ b/packages/math/src/mix.ts @@ -27,8 +27,11 @@ export const mix: FnN3 = (a, b, t) => a + (b - a) * t; * @param u - 1st interpolation factor * @param v - 2nd interpolation factor */ -export const mixBilinear: FnN6 = (a, b, c, d, u, v) => - mix(mix(a, b, u), mix(c, d, u), v); +export const mixBilinear: FnN6 = (a, b, c, d, u, v) => { + const iu = 1 - u; + const iv = 1 - v; + return a * iu * iv + b * u * iv + c * iu * v + d * u * v; +}; export const mixQuadratic: FnN4 = (a, b, c, t) => { const s = 1 - t; From 30dda424cc1a433a71dfa762f0b8c453114466a0 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Wed, 17 Mar 2021 11:47:56 +0000 Subject: [PATCH 17/25] feat(math): add mixBicubic(), mixCubicHermiteFromPoints() --- packages/math/src/mix.ts | 79 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/packages/math/src/mix.ts b/packages/math/src/mix.ts index eb16039899..725abc98dd 100644 --- a/packages/math/src/mix.ts +++ b/packages/math/src/mix.ts @@ -11,6 +11,8 @@ import { EPS, HALF_PI, PI } from "./api"; export const mix: FnN3 = (a, b, t) => a + (b - a) * t; /** + * Bilinear interpolation of given values (`a`,`b`,`c`,`d`). + * * @example * ```ts * c d @@ -103,6 +105,83 @@ export const mixCubicHermite: FnN5 = (a, ta, b, tb, t) => { return h00 * a + h10 * ta + h01 * b + h11 * tb; }; +/** + * Similar to {@link mixCubicHermite}, but takes 4 control values (uniformly + * spaced) and computes tangents automatically. Returns `b` iff `t=0` and `c` + * iff `t=1.0`. + * + * @param a + * @param b + * @param c + * @param d + * @param t + */ +export const mixCubicHermiteFromPoints: FnN5 = (a, b, c, d, t) => { + d *= 0.5; + const aa = -0.5 * a + 1.5 * b - 1.5 * c + d; + const bb = a - 2.5 * b + 2 * c - d; + const cc = -0.5 * a + 0.5 * c; + const dd = b; + const t2 = t * t; + return t * t2 * aa + t2 * bb + t * cc + dd; +}; + +/** + * Bicubic interpolation of given 4x4 sample values (in row major order, i.e. + * `s00..s03` = 1st row). + * + * @remarks + * Result will not be clamped and might fall outside the total range of the + * input samples. + * + * @param s00 + * @param s01 + * @param s02 + * @param s03 + * @param s10 + * @param s11 + * @param s12 + * @param s13 + * @param s20 + * @param s21 + * @param s22 + * @param s23 + * @param s30 + * @param s31 + * @param s32 + * @param s33 + * @param u + * @param v + * @returns + */ +export const mixBicubic = ( + s00: number, + s01: number, + s02: number, + s03: number, + s10: number, + s11: number, + s12: number, + s13: number, + s20: number, + s21: number, + s22: number, + s23: number, + s30: number, + s31: number, + s32: number, + s33: number, + u: number, + v: number +) => + mixCubicHermiteFromPoints( + mixCubicHermiteFromPoints(s00, s01, s02, s03, u), + mixCubicHermiteFromPoints(s10, s11, s12, s13, u), + mixCubicHermiteFromPoints(s20, s21, s22, s23, u), + mixCubicHermiteFromPoints(s30, s31, s32, s33, u), + v + ); + /** * Helper function for {@link mixCubicHermite}. Computes cardinal tangents * based on point neighbors of a point B (not given), i.e. `a` From 951fa9e1263db6f165dcaee3c951c09b43e42fef Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Wed, 17 Mar 2021 11:49:59 +0000 Subject: [PATCH 18/25] feat(pixel): add bicubic samplers, fix resize() --- packages/pixel/src/api.ts | 2 +- packages/pixel/src/resize.ts | 9 +- packages/pixel/src/sample.ts | 222 +++++++++++++++++++++++++++++------ 3 files changed, 189 insertions(+), 44 deletions(-) diff --git a/packages/pixel/src/api.ts b/packages/pixel/src/api.ts index 15e1168b09..ec45a3e086 100644 --- a/packages/pixel/src/api.ts +++ b/packages/pixel/src/api.ts @@ -28,7 +28,7 @@ export type Wrap = "clamp" | "wrap" | "repeat"; /** * Filtered access types (currently unused) */ -export type Filter = "nearest" | "linear"; +export type Filter = "nearest" | "linear" | "cubic"; /** * Blend function (for packed integers) given to IBlend implementations. diff --git a/packages/pixel/src/resize.ts b/packages/pixel/src/resize.ts index 750a335f1b..64df311f74 100644 --- a/packages/pixel/src/resize.ts +++ b/packages/pixel/src/resize.ts @@ -9,12 +9,13 @@ export const resize = ( filter: Filter = "linear" ) => { const dest = packedBuffer(w, h, src.format); - const s = defSampler(src, filter, "clamp"); - const scaleX = (src.width - 1) / (w - 1); - const scaleY = (src.height - 1) / (h - 1); + const sample = defSampler(src, filter, "repeat"); + const scaleX = w > 0 ? src.width / w : 0; + const scaleY = h > 0 ? src.height / h : 0; for (let y = 0, i = 0; y < h; y++) { + const yy = y * scaleY; for (let x = 0; x < w; x++, i++) { - dest.pixels[i] = s(x * scaleX, y * scaleY); + dest.pixels[i] = sample(x * scaleX, yy); } } return dest; diff --git a/packages/pixel/src/sample.ts b/packages/pixel/src/sample.ts index 0207b420cb..0eaeca9bd0 100644 --- a/packages/pixel/src/sample.ts +++ b/packages/pixel/src/sample.ts @@ -1,5 +1,12 @@ -import { assert, FloatArray, Fn, FnU2, IObjectOf } from "@thi.ng/api"; -import { clamp, fmod, fract, mixBilinear } from "@thi.ng/math"; +import { + assert, + FloatArray, + Fn, + FnU2, + IObjectOf, + NumericArray, +} from "@thi.ng/api"; +import { clamp, fmod, fract, mixBilinear, mixBicubic } from "@thi.ng/math"; import type { Filter, IPixelBuffer, Wrap } from "./api"; import type { FloatBuffer } from "./float"; import type { PackedBuffer } from "./packed"; @@ -28,28 +35,32 @@ export function defSampler( const impl = (isFloat ? >>{ // TODO - // "nearest-clamp": sampleFloatNC, - // "linear-clamp": sampleFloatNC, } : >>{ - nc1: sampleIntNC1, - nw1: sampleIntNW1, - nr1: sampleIntNR1, - nc: sampleIntNC1, - nw: sampleIntNW1, - nr: sampleIntNR1, - lc1: (src) => bilinearGray(sampleIntNC1(src)), - lw1: (src) => bilinearGray(sampleIntNW1(src)), - lr1: (src) => bilinearGray(sampleIntNR1(src)), - lc: (src) => bilinearABGR(src, sampleIntNC1(src)), - lw: (src) => bilinearABGR(src, sampleIntNW1(src)), - lr: (src) => bilinearABGR(src, sampleIntNR1(src)), + nc1: sampleINC, + nw1: sampleINW, + nr1: sampleINR, + nc: sampleINC, + nw: sampleINW, + nr: sampleINR, + lc1: (src) => bilinearGray(sampleINC(src)), + lw1: (src) => bilinearGray(sampleINW(src)), + lr1: (src) => bilinearGray(sampleINR(src)), + cc1: (src) => bicubicGray(src, sampleINC(src)), + cw1: (src) => bicubicGray(src, sampleINW(src)), + cr1: (src) => bicubicGray(src, sampleINR(src)), + lc: (src) => bilinearABGR(src, sampleINC(src)), + lw: (src) => bilinearABGR(src, sampleINW(src)), + lr: (src) => bilinearABGR(src, sampleINR(src)), + cc: (src) => bicubicABGR(src, sampleINC(src)), + cw: (src) => bicubicABGR(src, sampleINW(src)), + cr: (src) => bicubicABGR(src, sampleINR(src)), })[id]; assert(!!impl, `missing impl for ${id}`); return impl(src); } -const sampleIntNC1 = ({ pixels, width, height }: PackedBuffer): IntSampler => ( +const sampleINC = ({ pixels, width, height }: PackedBuffer): IntSampler => ( x, y ) => @@ -57,19 +68,21 @@ const sampleIntNC1 = ({ pixels, width, height }: PackedBuffer): IntSampler => ( ? pixels[(y | 0) * width + (x | 0)] : 0; -const sampleIntNW1 = ({ pixels, width, height }: PackedBuffer): IntSampler => ( +const sampleINW = ({ pixels, width, height }: PackedBuffer): IntSampler => ( x, y ) => pixels[fmod(y | 0, height) * width + fmod(x | 0, width)]; -const sampleIntNR1 = ({ pixels, width, height }: PackedBuffer): IntSampler => { +const sampleINR = ({ pixels, width, height }: PackedBuffer): IntSampler => { const w1 = width - 1; const h1 = height - 1; return (x, y) => pixels[clamp(y | 0, 0, h1) * width + clamp(x | 0, 0, w1)]; }; -const bilinearGray = (sample: IntSampler): IntSampler => (x, y) => - mixBilinear( +const bilinearGray = (sample: IntSampler): IntSampler => (x, y) => { + x -= 0.5; + y -= 0.5; + return mixBilinear( sample(x, y), sample(x + 1, y), sample(x, y + 1), @@ -77,38 +90,169 @@ const bilinearGray = (sample: IntSampler): IntSampler => (x, y) => fract(x), fract(y) ); +}; const bilinearABGR = (src: PackedBuffer, sample1: IntSampler): IntSampler => { const { fromABGR, toABGR } = src.format; return (x, y) => { + x -= 0.5; + y -= 0.5; const p1 = toABGR(sample1(x, y)); const p2 = toABGR(sample1(x + 1, y)); const p3 = toABGR(sample1(x, y + 1)); const p4 = toABGR(sample1(x + 1, y + 1)); const u = fract(x); const v = fract(y); - return fromABGR( - (mixBilinear(p1 >>> 24, p2 >>> 24, p3 >>> 24, p4 >>> 24, u, v) << - 24) | - (mixBilinear( - (p1 >> 16) & 0xff, - (p2 >> 16) & 0xff, - (p3 >> 16) & 0xff, - (p4 >> 16) & 0xff, - u, - v - ) << - 16) | + return ( + fromABGR( (mixBilinear( - (p1 >> 8) & 0xff, - (p2 >> 8) & 0xff, - (p3 >> 8) & 0xff, - (p4 >> 8) & 0xff, + p1 >>> 24, + p2 >>> 24, + p3 >>> 24, + p4 >>> 24, u, v ) << - 8) | - mixBilinear(p1 & 0xff, p2 & 0xff, p3 & 0xff, p4 & 0xff, u, v) + 24) | + (mixBilinear( + (p1 >> 16) & 0xff, + (p2 >> 16) & 0xff, + (p3 >> 16) & 0xff, + (p4 >> 16) & 0xff, + u, + v + ) << + 16) | + (mixBilinear( + (p1 >> 8) & 0xff, + (p2 >> 8) & 0xff, + (p3 >> 8) & 0xff, + (p4 >> 8) & 0xff, + u, + v + ) << + 8) | + mixBilinear( + p1 & 0xff, + p2 & 0xff, + p3 & 0xff, + p4 & 0xff, + u, + v + ) + ) >>> 0 + ); + }; +}; + +const bicubicGray = (src: PackedBuffer, sample: IntSampler): IntSampler => { + const max = src.format.channels[0].mask0; + return (x, y) => { + x -= 0.5; + y -= 0.5; + const x1 = x - 1; + const x2 = x + 1; + const x3 = x + 2; + const y1 = y - 1; + const y2 = y + 1; + const y3 = y + 2; + return clamp( + mixBicubic( + sample(x1, y1), + sample(x, y1), + sample(x2, y1), + sample(x3, y1), + sample(x1, y), + sample(x, y), + sample(x2, y), + sample(x3, y), + sample(x1, y2), + sample(x, y2), + sample(x2, y2), + sample(x3, y2), + sample(x1, y3), + sample(x, y3), + sample(x2, y3), + sample(x3, y3), + fract(x), + fract(y) + ), + 0, + max + ); + }; +}; + +const mixBicubicChan = ( + buf: NumericArray, + u: number, + v: number, + i: number, + s = 4 +) => + clamp( + mixBicubic( + buf[i], + buf[i + s], + buf[i + 2 * s], + buf[i + 3 * s], + buf[i + 4 * s], + buf[i + 5 * s], + buf[i + 6 * s], + buf[i + 7 * s], + buf[i + 8 * s], + buf[i + 9 * s], + buf[i + 10 * s], + buf[i + 11 * s], + buf[i + 12 * s], + buf[i + 13 * s], + buf[i + 14 * s], + buf[i + 15 * s], + u, + v + ), + 0, + 255 + ); + +const bicubicABGR = (src: PackedBuffer, sample: IntSampler): IntSampler => { + const { fromABGR, toABGR } = src.format; + const buf32 = new Uint32Array(16); + const buf8 = new Uint8Array(buf32.buffer); + return (x, y) => { + x -= 0.5; + y -= 0.5; + const x1 = x - 1; + const x2 = x + 1; + const x3 = x + 2; + const y1 = y - 1; + const y2 = y + 1; + const y3 = y + 2; + const u = fract(x); + const v = fract(y); + buf32[0] = toABGR(sample(x1, y1)); + buf32[1] = toABGR(sample(x, y1)); + buf32[2] = toABGR(sample(x2, y1)); + buf32[3] = toABGR(sample(x3, y1)); + buf32[4] = toABGR(sample(x1, y)); + buf32[5] = toABGR(sample(x, y)); + buf32[6] = toABGR(sample(x2, y)); + buf32[7] = toABGR(sample(x3, y)); + buf32[8] = toABGR(sample(x1, y2)); + buf32[9] = toABGR(sample(x, y2)); + buf32[10] = toABGR(sample(x2, y2)); + buf32[11] = toABGR(sample(x3, y2)); + buf32[12] = toABGR(sample(x1, y3)); + buf32[13] = toABGR(sample(x, y3)); + buf32[14] = toABGR(sample(x2, y3)); + buf32[15] = toABGR(sample(x3, y3)); + return ( + fromABGR( + (mixBicubicChan(buf8, u, v, 3) << 24) | + (mixBicubicChan(buf8, u, v, 2) << 16) | + (mixBicubicChan(buf8, u, v, 1) << 8) | + mixBicubicChan(buf8, u, v, 0) + ) >>> 0 ); }; }; From 03f588dc6299ff24e680240f45ed56ca83716899 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Wed, 17 Mar 2021 12:27:30 +0000 Subject: [PATCH 19/25] doc(pixel): update readme, add images --- assets/pixel/resize-bicubic.jpg | Bin 0 -> 25165 bytes assets/pixel/resize-bilinear.jpg | Bin 0 -> 23863 bytes assets/pixel/resize-nearest.png | Bin 0 -> 5774 bytes packages/pixel/README.md | 47 +++++++++++++++++++++++++++++-- packages/pixel/tpl.readme.md | 42 ++++++++++++++++++++++++++- 5 files changed, 86 insertions(+), 3 deletions(-) create mode 100644 assets/pixel/resize-bicubic.jpg create mode 100644 assets/pixel/resize-bilinear.jpg create mode 100644 assets/pixel/resize-nearest.png diff --git a/assets/pixel/resize-bicubic.jpg b/assets/pixel/resize-bicubic.jpg new file mode 100644 index 0000000000000000000000000000000000000000..feef0fb00ade6e6c6f3f0efacebb749dd9d11637 GIT binary patch literal 25165 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∾m&|Z<ho&VRqJAwfDfz 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 QjX@*Fp00i_>zopr0Q#^F4FCWD literal 0 HcmV?d00001 diff --git a/packages/pixel/README.md b/packages/pixel/README.md index 0b73a6138b..865991f80d 100644 --- a/packages/pixel/README.md +++ b/packages/pixel/README.md @@ -13,6 +13,9 @@ This project is part of the - [WIP features](#wip-features) - [Packed integer pixel formats](#packed-integer-pixel-formats) - [Floating point pixel formats](#floating-point-pixel-formats) + - [Filtered image sampling and resizing](#filtered-image-sampling-and-resizing) + - [Filters](#filters) + - [Wrap mode](#wrap-mode) - [Strided convolution & pooling](#strided-convolution--pooling) - [Normal map generation](#normal-map-generation) - [Status](#status) @@ -44,7 +47,7 @@ Typedarray integer & float pixel buffers w/ customizable formats, blitting, dith - Convolution kernel & pooling kernels presets - Customizable normal map generation (i.e. X/Y gradients plus static Z component) - Inversion -- Image downsampling (nearest neighbor, mean/min/max pooling) +- Image sampling, resizing, pooling (nearest neighbor, bilinear, bicubic, mean/min/max pooling) - XY full pixel & channel-only accessors - 12 packed integer and 6 floating point preset formats (see table below) - Ordered dithering w/ customizable Bayer matrix size and target color @@ -116,6 +119,46 @@ formats can be defined via `defFloatFormat()`. [0..1] interval, with exception of `FLOAT_NORMAL` which uses [-1..1] range) - Conversion between float formats is currently unsupported +### Filtered image sampling and resizing + +Currently only available for integer formats, image samplers can be created with +the following filters & wrap modes: + +#### Filters + +- `"nearest"` - nearest neighbor +- `"linear"` - bilinear interpolation +- `"cubic"` - bicubic interpolation + +#### Wrap mode + +- `"clamp"` - outside values return 0 +- `"wrap"` - infinite tiling +- `"repeat"` - edge pixels are repeated + +```ts +const src = packedBuffer(4, 4, ABGR8888); + +// fill w/ random colors +src.pixels.forEach((_,i) => src.pixels[i] = 0xff << 24 | (Math.random() * 0xffffff)); + +// create bilinear sampler w/ repeated edge pixels +const sampler = defSampler(src, "linear", "repeat"); + +// sample at fractional positions (even outside image) +sampler(-1.1, 0.5).toString(16) +// 'ff79643a' + +// resize image to 1024x256 using bicubic sampling +const img = resize(src, 1024, 256, "cubic"); +``` + +| Filter | | +|-------------|------------------------------------------------------------------------------------------------------------------------------------------| +| `"nearest"` | ![resized image w/ nearest neighbor sampling](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/pixel/resize-nearest.png) | +| `"linear"` | ![resized image w/ bilinear sampling](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/pixel/resize-bilinear.jpg) | +| `"cubic"` | ![resized image w/ bicubic sampling](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/pixel/resize-bicubic.jpg) | + ### Strided convolution & pooling Floating point buffers can be processed using arbitrary convolution kernels. The @@ -216,7 +259,7 @@ yarn add @thi.ng/pixel ``` -Package sizes (gzipped, pre-treeshake): ESM: 7.18 KB / CJS: 7.45 KB / UMD: 7.29 KB +Package sizes (gzipped, pre-treeshake): ESM: 8.17 KB / CJS: 8.45 KB / UMD: 8.20 KB ## Dependencies diff --git a/packages/pixel/tpl.readme.md b/packages/pixel/tpl.readme.md index 04a585e460..010b563013 100644 --- a/packages/pixel/tpl.readme.md +++ b/packages/pixel/tpl.readme.md @@ -28,7 +28,7 @@ ${pkg.description} - Convolution kernel & pooling kernels presets - Customizable normal map generation (i.e. X/Y gradients plus static Z component) - Inversion -- Image downsampling (nearest neighbor, mean/min/max pooling) +- Image sampling, resizing, pooling (nearest neighbor, bilinear, bicubic, mean/min/max pooling) - XY full pixel & channel-only accessors - 12 packed integer and 6 floating point preset formats (see table below) - Ordered dithering w/ customizable Bayer matrix size and target color @@ -100,6 +100,46 @@ formats can be defined via `defFloatFormat()`. [0..1] interval, with exception of `FLOAT_NORMAL` which uses [-1..1] range) - Conversion between float formats is currently unsupported +### Filtered image sampling and resizing + +Currently only available for integer formats, image samplers can be created with +the following filters & wrap modes: + +#### Filters + +- `"nearest"` - nearest neighbor +- `"linear"` - bilinear interpolation +- `"cubic"` - bicubic interpolation + +#### Wrap mode + +- `"clamp"` - outside values return 0 +- `"wrap"` - infinite tiling +- `"repeat"` - edge pixels are repeated + +```ts +const src = packedBuffer(4, 4, ABGR8888); + +// fill w/ random colors +src.pixels.forEach((_,i) => src.pixels[i] = 0xff << 24 | (Math.random() * 0xffffff)); + +// create bilinear sampler w/ repeated edge pixels +const sampler = defSampler(src, "linear", "repeat"); + +// sample at fractional positions (even outside image) +sampler(-1.1, 0.5).toString(16) +// 'ff79643a' + +// resize image to 1024x256 using bicubic sampling +const img = resize(src, 1024, 256, "cubic"); +``` + +| Filter | | +|-------------|------------------------------------------------------------------------------------------------------------------------------------------| +| `"nearest"` | ![resized image w/ nearest neighbor sampling](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/pixel/resize-nearest.png) | +| `"linear"` | ![resized image w/ bilinear sampling](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/pixel/resize-bilinear.jpg) | +| `"cubic"` | ![resized image w/ bicubic sampling](https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/pixel/resize-bicubic.jpg) | + ### Strided convolution & pooling Floating point buffers can be processed using arbitrary convolution kernels. The From 1c4dcaa85eb0ebe002e419ce3501285633408c10 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Wed, 17 Mar 2021 13:35:39 +0000 Subject: [PATCH 20/25] refactor(pixel): convert resize() into class method - move `IntSampler`, `FloatSampler` types to api.ts - migrate `resize()` to `PackedBuffer.resize()` - replace `PackedBuffer.downsample()` w/ new `PackedBuffer.scale()` - update resize filter arg to also accept custom sampler --- assets/pixel/resize-bicubic.jpg | Bin 25165 -> 18706 bytes assets/pixel/resize-bilinear.jpg | Bin 23863 -> 17488 bytes assets/pixel/resize-nearest.png | Bin 5774 -> 5723 bytes packages/pixel/README.md | 4 +- packages/pixel/src/api.ts | 5 +++ packages/pixel/src/index.ts | 1 - packages/pixel/src/packed.ts | 49 +++++++++++--------- packages/pixel/src/resize.ts | 22 --------- packages/pixel/src/sample.ts | 74 +++++++++++++++---------------- packages/pixel/tpl.readme.md | 2 +- 10 files changed, 73 insertions(+), 84 deletions(-) delete mode 100644 packages/pixel/src/resize.ts diff --git a/assets/pixel/resize-bicubic.jpg b/assets/pixel/resize-bicubic.jpg index feef0fb00ade6e6c6f3f0efacebb749dd9d11637..567c1c8842676ccd6d0700a891d28861f65de698 100644 GIT binary patch literal 18706 zcmbTe2{@GB`}nU-rQ}_fqEJZ~OW7h>Dj{Q^4U;81BSj(xX|ooSJ!8u<#>^P|NQAdN zTf)rHR4Qc~NtPid{Lb|GeLuhJ`d`=Yx_;OHG0%9;eeQEV&oSq`&VBB4#@6W87ruX> z#-_%6+qUuXT?IdUTVMI?j6!@o`S>g>_#k|Ie0%t|Z#%@d16*wbKYTGhd^`VM^YNVq zzxnufyx8`Ca$ju!pWK~%FLwOTH7Ev-tvNnzYwufkZUuVZ@;|Pwa+Xi~vZ=*Ro;7g% zy_WrZ`43(4>3bYs)y|pwd!PUKefi$jzkCPxYy;MIY&*%f{ouA82e)mt^GSmz+O_TP z@wXUw+qQkj&RzVw_v{te2NY=kfJfi4WBbk>yLRzzvn>MT^X)vi>(B|+OZ>t%F1t?# zh^ReC%HJb%xw1tRHu&q5y6f$Sdj-S}9}$<3JuN4%0MXDqr=@*f$MA}gvB_0aC>()A z+1lBo-P}Dqy}W%efp>y}?}mh8A3ctWj){$nPfkfqOV4xnBZS5VMU2nR3hKA`3=E&%K*4OcG-zO%grf1j-i%ZL#mDS&C>%4k_zvq9d1>XNt zv;R-M4uX1Z-??+g&fUCvZQFjASMh^8cb!n>KXl1vw@ZNVNwo)iL@p=gSGMexQHT8! zb-g_(Aa+XQtLy@=YJY3?|5mYw|G#SX--`X8dVSzCd6^=#*jf@%*mJ-yna{MLc6-)<@{W7V>fz9=V7rgB)F+l+tC{FI`%{^z zp9DS4oK2!kUdD{ReZ~x@-Gk;UNAOEZ^&fhgX2hOl9NyxSSUo#Mxk~2PlY1Gca?iMF z_)#Mf+i<}vdXUp3D`*_0DXH5ofh;x;*S!2`mR=OXSbwHzi>dg;Zm=!C@+&|#xLDW< z6W@rDd+T=Yu!d)H{IZXl3M^?MPSjolAOm*%VmlCZW8LIdjhgeX0>HD=e$8ls^7%e^p= zPpALO2qK~CkKc=Y-q;JlB6=|O^g`O5i@%jxe%is|Byul2kyfQIEw!qoKnciAGu2_d z;i8_d=^9T=bCK;ch~W~7k9~D7*#TOU10f?zX3vFk_W7cQX$W*}&Mps`hok_=#~>SU zrsDMTG5QQ2NNEI_g*xPwXI-0v8440b>M&~9in%7cE)OAVW|6|QYtFL{i@NJkMHC<8 zVZt>_M*nGlq!JNYn}*a8s7dQrkIwhdiLXgR>(t~>(r%k1@Q{S+l)kz_ic~51}{j)Gg zaX0PCdl7fUh3U^mk5~ma;?*FM%Qp*J=4{RxiHja!Yr!XkFmcs*^rH}wT+FbI5XQc{ zIAab^_7oMiKz9meh&xohRkc=+FB=wkP+Ug7^L}`*a5cjO6E{g7kS|+Dyk(n*KZT?w zTwOvcoGynx6@oq5dknc3opXwI+0+QTd^{|~=U@*bM-frgYroj*#FX0o&c*$bI?A2O zEH#t$?3E3x^OiP!oP=_-SC?qeNXt;?lt&5*&s0#=^#kpNrD#O;1HLB%K}*-i?SJ}e zU7|aiSu|O78gwkfY5z_Hug5T-FWC#*4!Qj8FRQ#xRr5*E!(yx{Ltp@OA$49C^0gSM zniO3QL52MegrNIUQAMCzgS2PZ9r29g&Y87vygq^ONl8=FL&7cC)*p3HK3eBene7GW_&(1WNuMad-Bez&lGiOnRRo_8Y1 zbhV#sKn7EkAcu+@F-pHG<;iUttu$W`xeOcF#jeN z9kji18g!nv+kCW>B+7P3s*$6A(%MfC3-(0{EQ-{QgmgGs^Ex9>00${?CRJ0`n2^q50E$~MugMLM`fDB1-2DGz9&Ei;8S-2r8 zbwmT?8MRZqG0FIA5do5by9Ja%*toI`=w2C#y*UUHHYsy&yXGD-akWC|Z;>^-sd6j#Ifd+}n9BD@ zTV~C9q1j7@ISHX%8jj35JfKI+#8`J>ncDEHBPQru{5o{MU_IXy zo%^%+r)(+CYyaYfvP4o@7xm(Z8}n6QNf=!@a^BIpHOIOvG3Vz7yZVz5dXlxpM`r{# zOVK`9?Y|2vO^o{)1y7zGtB~T3ksDVVu^JU!q|5bM?yp3R&GN7vVV|)?*=bHWD)HD# z1!u5Q_6?_W?dEQ(hiT|M;#9+Gxogyp&uzBG*)OFyIZB*7*|9LjUX{jKR@j z81rA<+-82&JvLD-CE?JOO0+zsv}JAIJku!3p;ShOrZ;r0bjHs1-PfWBehJ_FOifR7 zMU;cY+f*Pb4y!rk-lM2vMD-CXfzp<>F)`JbjjvD;r_duwkkq7+#uzfT1|xn*7Ji3% z7g{po^htn7up}kVAm1z67n0{B!!$5C?@B$Y5XL&gs_^~DnIZC>&dPLax{)BJ1}Prh zsDm^oBVVPu0WgSD-46H^AMhO_Af=Gl=u7b_-PFjFDL*zDGqBQ-5YmxN3n_~m5qYef zm7AmG#%XSo0r=-*7H5)u-LJtn`<)UXUEOX;ao@w>kEIy3$`PdT5mv*@i2em>%T?8# zQuKvw%hVR%IoLic%skQV_tVx#^foch@t4#=pE=kQ%im?Jpn>Q<{{i^UYkAN#zl2*) z3@~XoHYl~CxJP~dejoq67B~anhxvR>eFmQrY4}a8(;05r*WhsF%H^_z8xdrWO8vBYa(MBXQyFeq z*PJn#einD0xXr<+IGQ&(Pc!ZfVRTAtls>y-Gep>xaB z4q!m-eVFxk-050V>&`1T$4d+FBiGJga=_zUGs(0)UFz|IA}{Do&7;|Yy4p8LMVRMS zUV`)>88s`EeLiz`-7*i0t*%vCSfCA2>F?GNGnfcPaie4KZpw;cAu>%-)k3Oct{kRxuL{9vntXwZV$*%N88t;3gVX5(D`Xm6Sc5MRowQ zuO=*x4Sij26Tw#yNVA6lXGb(h&&^^WO^*;XI~biJX-RTeEOt|oC|Te0iZr4@PJ>Vb zdy-PV;&Y;`!{}_md zRC$I0t6XD~vBihU;3C%PTYO&n?XO*CB3Xq@+?>s{Ea*sEXjAJ8k8(`ZHK~qcuIf%YrGw0T=;JP@et|B6mB`cd z_uo{&+tq!?{ zO3?ucU)~#-Gh4ZZSthw!O3=z&fGFd~7^4ZmuXTjgC}5Y;Q?Aa3=E9@OX?ISJun1zg zjOpR_Tq!wtj#v|&Q&X07V}p#WS^*zI;Z%V2tA4<|RC}(id94!zK*Bac*JkNR&*4{n z`_2FsHd08}qyZ-)C{4NYYvwl(O+kR3&M4Ow1vuk!LyuAqgz#IX@4B9FR->=CJnBYM=9u zY#m@;ez=kH%2A6&0B0?7K%jYVQ`dftc}yCw1b@~XEJ2G^gT$SDxuY*_mAsNZ1E|)rIypoYnvGFzzFA0>u?`@Tqg;{k82rf zADHiGqQ`4Xv(58%7)+?9e{O_UgrVwQc47P>X%tI>g#D?$L;!7n9a0Sf~5bxqR0UHzRUY2I8XuQ7Cu-Z(>qtx{#uHQ)UtIOZ(Sm;NBd z>5a3GHV0RWb4vI!dpJ%|8%L`Ka1y%<@?TKCxFoSmfq|;!ehNZ=VWsXow#(t(0PaVuUCtY zHe;7(Kp3ZWJn=!<2AjWrwNxf(-X;sbJpE1|xA)08)|4KbzpnIAz`RZ7#_Vt*lm|`E zLaTXe4MwhKvA8e2aG$hkROewd`au!76Y2seUO02MZpafGh0m(b#B=2HE=6}fl87T; z4z%b5>M~<(->zOQ>0u<)_?5#F3|aXJOA4vQN7$P^y7kM`3_Y~nut87p8j>&piv_-< z!?MD+{R46=+;L__boTL;a^v*l(}_xN78P2@YI$DaEyv{rSzVh%wiCSmQHyjdDW|(u2l9=ZW#U>|yhNuNeTa zZBX*ftT0vS_ZXk8#6mTPymSB|U6dLrg=Pkrnsi6)GImH|M?2hnGP#RYO2E_y-TWwGN{ zD&_luE&iN2nBWDv?M)5f(mb;ZL-qdSPygx-`gyzH1y(Mg=3LbMWdc`7Qqd^h@vZ5v zf*%2HmVkl8rJ;rsu6hceT~>&k_CT}8aITz$k{*c%RiR2DsD7uO{5tz=#_sZo^U@Vy z+ynl2vuhW|suBm)uY2mzLRqu4whx0hb?PaWaHVO|?mRo5zm+2udN)$Q%;Kyf;ao0# z*w<{46YlmUjbZ0*x|+J z&0Z@6t^w`F5hJbc!Vf1ROM2JLai_4bwUab+jbTx#!QJamn^XH1qt2xJ8uk|d&{%uM z(}7Ak9>pvqW=-JH`!IL5l)%RTo;&w=b<nmy(BInLv4Qe7;zzjX_rhZMNmrBbI z_q#kj9LO5iXGM5(12~1;^T7(%NgpD;xq};p^A1)Y8fWf-EO5&Nx63BJ8wC+Q1~pdH zfJi^RerZ3s#xp;@-;z+f;5;Wh3nBm!zE8P690J!%5|l7O$X8cwzFVC!UD@Kpe%l<4 z@VPe%ObwX$>6p)MexCm;|K2n*Z?;l6i>g{0F0{z;`p`HHOq5wWh7C6j&tGdhv#5vu z$IE8rGgkloyu$#?bl&o?K4*BpP|}>s_*>ju?s7!=*sDQ*pVmn1Z1kR0|Cub%+E)wb zSr=6Abj7ge9ta!VMJILyqpsoZ#x*Th!+!%y7$R6?~QHO(`#dehX9QZq8octb) zjS$US2`T@C)!@U_`4*=R=F-O>v1-~ik4HE7j6m!PHLsJ>g)l>Q7>{T$yFQyM|JF{A z+}bjSRur_eQ>@QDJ^@5#*qU_Ci)YBxhk#!PAkPaPUIHPlvGP-*e#gt$L2o7M3gWMU zIP}XE3TcXZf{uw2KcbH>&LZP-)7^%sgy+jtk?67_%@04d(&r?q^;JB!ZUq_IkSSaIc#o6>eETY$4Pcg`^!?NN)YkmF`ZOrvA*Y};6 zf$dYBapb#?g?H2e=Dj`t<;3W}V)y6;eOTMe$5)7<+ezQVpY(nmox0bROP>d5n$~}- zM+$#12j_Ge_PX%ob0+WgDEW)}sYm43Kge)ZBoprf4B@JPuI>Yiv+?Cr)ku#^%jcIc zdJ4@RQfW=sSBj5d(iL#rlafz`ef!UT2tzGAeC{IZY%kHBKib08JNp4O^RVzN7xm;H z&1A#M*z2OwNpsgcPuSET3)&@=;w7KL`HGMDUhe?&5Tpa`*`;OGK8-e^a8zY{p(-lA zvf%6QU^R0@n_(N5rd@IC_a@_2j>Wj?c9|=n`3;~?yU>uR zG6|gP1GEeJHLOr!7DYb1S=v=;<)`I$O~EE@g^WDt8!hvP;9B#knCd4o)STd4V+iKh z-$u)8hOQ$fd>VYXS8Ug*Qtd}AP7kBbZ77@@oI5GaE)DzV`rsqDpNOAG*wvVIid4I{ z#&vpw(dl6e#HCGgSEZDotl1-DK?CoGzqtrRoyPUymDosj>4k$|1|PvdX)~6}IJlMD zD31TBM2ZiArJxgQz_42}*kY{x`!Nq~RU?h=S@O|sbAI#ry|9jxiAv{7)-`6voU*-? zOJSczq`Ot+8JP?>=Q(8)7P|6Jn@J|{0?oPmxQ84Qa5XeJ7P>0D&E&cFW_RB8&Grnp zYjdYo35VsFRl02#)1y+YD$PJ?w>kagh~la%k5>sxdsc}XIF-(%ZrM>L_Y&do?lNC_ z(|PDAU{<3+qDz){FaA_ZD{RjpEc|ga$$g-5@L0NIg0n&PaC;ZC>QM@_NC;KsHOeNY zm{k_bX)I`Z-Xg|O>_Gi4hzHEY1vXmLTDw@iXOz?yg_0+9Jbe2SCwQaG3art zl0Dc%7=3+;v@`9hCREV(7;QxlEAIBgK?t^+e4pNnE^RD}p&2S?xW2)Fl`nLrk>4>M z=@wVwT1X;vD8vKJ)Haj)w10onani1nRCCHTll@^K;YW9gs>O>!f}mp>LYQdL1SAQG zF-j!b&3X@4{uq4mCJo|Yi9sfoD&1oY9?7LiD3y_hitX5~?GcdHj%yvc1bMZpF1QlX z$Cbo{Oh3gL<2{VxiFRaG2TJUi?G=pVGe41ZVR)%M<%y{I$+B3a7E%d*5K#cB;|1qI zknT_!+>RU+Pc22dxR$-KJx_EfsbD;grWPSRP5@u&!1-|jlA!%n49gIe4DcX7PKt#T zY5JU?mv^{vWP`a+2Vf`Ahg)i&Eh60^}~m)PUb$~Ie=MAb7!O{}fEDly0QknL5> zcYns?SY*v5$7h|n9yicGFCEhiIzh5Ax@IIgvfpQd*=6`j!Vs9a4Hm=R^8|g@>mLFr zK`@M>vNvv4kXj#$pkqk_HAx4+;=ISzvN|{2fpcZIEP`b1x}a4h>eeI@BPz)7NGL53 zAJNU&Wl4tY!sOW5B2;5`ng5jRW?+yu)`|kpwFq~*jsy(o#@xP6lee+n%^`tkU;t6K z`pwa*%euK6EX=U-oVs%Vocs(|sqlv6K`oiDoZEVWpK^hChrB-QoHoi^2&+pjL! zJZE>GEYvhRdSD8n`Yr-WfSgRbfq%+SYTYv%4N)pa(9LQ7@p0)?Pivj8=rbhK^a2-K zC|wqk?z@Amu24~OwZp-^L>vObQ~4jKpC(z;El`;lF*G5o?bWbYeAigPDMmCpmPFjB zl$u=dxE)4!$LFLMC|Yhw@ugU_6pH-K zmfm8n83q)6n!jqKCAt>5-uOKdP>y`7Vq}qGy$k>@!d(e+bHj5^JVCP*@n}if`8Tz)4Ji8Ve~r%8Nej$tL>kn z2c&=TiMhM9+Qy8^L?e5y3Q=_>;)}!y8xOwwN{L0pZ6j^dF8P`61^t+P@Lfd2IlruUr(56IFjcT$Ym-OB$`m@V;F&YDUGi>peOjE{zrnXcB zTY*f|p&IstQP4CQih`tJtKBlmL;s4Rq-7<2R?^;%EG5-NFjIVaxxQl# zB?hTVLZ-zRj*c!XOiUQXmzDw)P!tbqs_edT_8de>)5V2ic7(*(C8kpteU)56pB1&+ z2j4~XL?$1%W4lP23p0xmRAE_q<@PRonj2-GqER|?6A+VU`%jVp&^Q5u z(Al)%{Vw0fRTpC8pUysgjC{Y1M6zI%Cc^zKCY)hI4hK$d# z2sS(t{!`JwjO2F!(t|Ic!YL!}sxfcJ>ylIm9Iz~B-^0=A1}Krf5I_F79uH->I8~*i zGd=!NA+LP_?d;98-(^{ay4(+oqm&&PZfOs|I(xsj$9SYyUK!)a=hlO%u`cG1d-L-T zhv==CHeve1@p_rWC0+b$@8;*9gb@#KVcQN%agNtfzu}g2*RyXlKmRBkOxnqKtfDYJ zHAb_K$?R3pa_+ksM{0Gkd-w$&)!|)z$Y3PuPvyNF6?G$-anzaW77IoB@!+oKZa0NvEc)^gmUEQu_Yya_tM-% zvV0G>10x7^?KcH(CFV$C?Q_?D!||{n5Hl!g%uF7nD@*#;Aom%WZTL98ts7A@589hZ zd#btj$xz<v=c<;UV2f?F)-fM_ZL?qRB?a>Dr1COJMhCPKn zg&V$(Z69QGWmVc{Z2y#FbjvXY%#M#v@1?g!)(iozGW?GEP8(EYxNV%=;zNwMN|=Ws zxZWSExO;yd1t4*kh zbWv&9B$c&?`Ly_aam{&Ty(qsTy-xbBA>c1ge89@yO*MNnavgY7k@Xq}7{^7v(2hH! zW0F=2C zARbL72(?r7f>$Vtl6n9>wjzsLd@{x7A&&e?K|V6X0wHKktYTt_v`n%1Wyd{3IyFgf zhLN2$5UGbuR9<^}l|0lncbPuxkkV4sMBNi#8DBwGcmgje^Ksc5VCJr8LVz9~!WR&c zWuY#mZs!HWijny!BC^!u%4BLgf|RD`(?fHCH@bdxOAq3Q+$E(!kkA~r(%cv&c9K$% zP8S@4j7qG&ecsFN0gpnKm5j8+e7g3O-2)kl>0zpQ5~C6kH*}A;S;p_feJY>Qe!k3H7mJ1e=Q@3yufd^Ar;L{US^R(lDx){Piwz`i7D@ z*GSr$@|t#LinF3ZNb_F2o@vS!y4>4WB05IeuZQld39Y$E^+8M`lEB>te=hnL= z=-Y~SDn}IFaX>u$Hde8#t5Mqlwa^s`)*-(cHx0hqhr>Q|7|~G)7|T|PnDxNvDw!N@ zp42g@;SP5UGzRARtP-E#8Eyk7%a0jM>Zk@P%Is%_L z`@SIk$6IfVu;7i*(BkKT_WBAD15UZhdYQ5BxCmp34`=CqyUuV3t2#1qs^1IE>Ult#8nS&)-+EFw`b~`5*95m8@U;8h?_M1@%0{qt#@l)ey1Uy zQ%q9koNFUcySb(taR)lgVaS0~Sex%4WJlrKY>#ox5e@8?N)446%3~at9)0!$PN3Yo zx?BikO{BjH#R|cUa$b=^j@|B+Qx`-R;{8Pp(#$5p=o_$Y8*$tJ(Np*W|5I&NLDxOD zYa?zOABnGsZ+KSWdV$%SZ=?RA@**t*=rjvA-9s|mLwa!{h#rV6i9VwA%R3{*q!JRJ zV|0b4Gji;gxAXghKg?esqtHD3V4bwwCsce4*BrO&C4q{rV5Lxt< zGKti;I%)h6WGWPEf`aLclZ4|5Fpb30(t8ZZUjbg5j67k-?g7)OAdiz}rrAM?{}h2M zQaYr9yz6$4`B##o@|z)@3X&xse3t+H_wj&*_>X+VZ5N4%PkE{d{f7fC5(O@q;cHl6 zQ$<$j6D$5qyg4)8Px|0F*m|=RdGd(qfk%CTU1fx3wTwRUwHYnuLVMos=Tqg5W@CO*e%4D0x;@j0^1mJ0^waC{ zQhsN0?3+BK{QQpDFKGYSM6-R?=%I{^$)QkMRj2gPgz>$;B4%6ulzyqX>y7hly9i^Qf{%-i{DnpcgST9W&?^6MkeW$|1!Q4dYE zUI(PQ+{bk#xqo_JRh=eXp(R$)XJrEreR+Xw|L{vHlXdBYLriElyfm%FRxM(n?BA)y zpO`oZ65D4F3BrCMW$I6jehGYkS0jy$#14RsS+fs|-MM*Q_XnhJuh(L(GmM;wsB--> z50xp_b@i7Y>ja_2WJLs<(E?Y?2%I}BK0FNT!KWgFFq!B&j3?}8MB={lOQ*LJw&(K~ z^VgAilHh&XOQ&`W740+UCx~|G_LwkS)FV}OD}0J2DsyZc!MZ_^3XgRVIIEx~VbPhv%m`RKF)H#UfVW6#y&&%pTSbK{BL88i z(L8h()N?ePQ6vWWAnY?(mm5*vlP z-KvZ>B2Twc3k8nA>;IwNI>N1Zoo%2S~yLlqWH_-GO6-5eYygb%b(!s{1L4 z#q}vgz-1~q1g%N7-32vY!c1ypz*{6SCT-cD;KBvN{${g=O4@{UqP>IFo7rT3sK0v^^lg zEQ@p(X`qHv%YWz9^{wu~1-8Q{GQ@%R6{*?uyM0~S-?K`mHDxuC*MLeMOv(y4Z2jgsr73F?zRtiUblKjVXjV(Pu!~tTas3PL$Nfz4j@8rCM6;+g^v)Rft|$YeBdo zO1Mw=?K;HxVK++5(4O4JEVeDP|7PVBqgqnsNwn8fRCXt&LnqReR)19`Yoef;PE|~3 zj(eHUxczdS4pkzaOiuv-eHE^L?P=-$@i3qey3SQUSn}Z@+zRj%7BO(6)^qs-MO-Kx-AJgt7Hb>>$~^*sR)(B z29Et_ImfYmhv)_9R{J{*(uOhPBK7!72oscUBc zx+($(%{$ojDr}+sMest#qj6-hSX11853)%|9)@quoAxBLNimbqfu1f2* znkMf;?m42HQSRVRGoHvM6zrwa8pHiyYU&Ul=A)VF7aNsqU_R*=2R-eGI?OQGE1CimXhM2zw zh?yo?CM!KZk3}_t(e>V~M!BqcE3V7k({CE;6F4UQ#hDo9jfQ6|qb)wr7?;WVH+>8l zN{qW|X;+@GIckkw6nf8cE~X({GhnX-Z+ovN1$=f{eJSivTBVN!hT|bs#b5^|SBEUG z=OS-l9W4;arKM@9RmjK5l_70!$}?r@Bc_lZQ~Q0g_V$Vjt~W#Ko_FC&k)eCc z9u*;y+gNu)VXn_HI8y>=M$d3M+yh?1Mcwa^@&`^@8K(oPj0Ow;LhRBRfV&i z4aQ!1Jy_Ha6a|w33$1P)N_6$RE`8u=gtLI? zHA|QEJx5Vm^GW|L`a9qY4Pf(mzD}2>+vI{BH{(x_m0C$?YG_*b`O&pLl+5#nNdYT0 zQfO+f$8Ad*E~mY=w_!%Nhd2qlRc1e48gc}$oS`*zi<~w6*EY5olw!ciT562Oj?A>JTS&D%!~D-RqleBeC{oSS5TspqCBLf}Y#v^V{) z0Km(GDzh(_DJ3W|3;4mj+zVHt6|~icg@lfd+GB#!D|wMID(b*gLv)87>#sx%lj%uy zOMm%p_19WLeHQSnmcE-#yrD>UOrMy>^s(T^<|ED^G2rZa?tE5L2vq1sm%@2_=`7Dwg;AV zK5acuFTQV%4q91jHyG4FFm<8pGifR0HS3dwI{+W;SruYd_KwNnz=?&-k<5xJMjB{p z(26SNV0qv~KqjZ0RFlj|{fo4!kt<$-6RO!pH;aeNP$*2hJ*KtS@u01~)zNk)uT{Bt zmdd6Bn>9Wk*K}`*d?3}QAX5RVZUI)IdWCpp(IYIabPPyt??;JY2VGRc%haDrFC7I< z&)$AxHqV~jI)JLsH|cZz4R-IUHdS-!vwGK+IBEl66wu!g!gmA|Zn{NykF_rrQmxc@QI!&&@quCh+Q3(j;=cb91mtju^^#dYTwV>8IXb z)MaN|eulff1ysF=&zZ7KySCfyA@QG=bmkHuW%rWLm|v*qFQzt#X^}`%ur*rdWCTT3TJ}+2?$BO?gb&QH@^=+zKu; zNrf0Y+oV;sj!N2`r*wk@hq z=nvSuRys$Ft=r80UC&_=5tr^#cNrzz7G4gx|1&?cJE&|Mz{Q@R@Ud!P`0dCt)uA zVZf~2No+{AEy*N${@q}JXnj`eH$C>H0K1a`vsNH{HZ$}!Y+1v>dITOeC$bRu!0zNX zy_vDdMy$wh*cP8Vt)rG}a#1COa9HM5={5rp_zN4kp=}hY;QLg9mk}}3I;A(8$Gt?1 zc!3=;4>8~pBFiGjbcAY>#xmygIRhI+5x|<4IR5ep>2)?QI;TH8Z^<>~lts=d&YG<} zK$q=z?lIte;C5Y9F*?JFn9b#0ES%d;^+#{oZ1I)NuO-I(hgYw_WS%>?0>XxD^d{K# z=_I`*xf=iu5HoO#@4pyq{u#6W>wn(|@DDtjRim`eDq)jQJ|V;bA2e931n{egpK5w1 z&%Ia#HigMYg4^J>=)b{o9~(DgacX3#u{j?oB&ZxCgSth4$wLSu&V zdu`GSxt4}2kH^3!0nG#GMDNYvXF88R%-ltY6N;-%#p{bckXp$5Co=-boAijcp$sK{ zf}k}&fuHJ$d({Oaxr3lBO3+FW-K8EephE>~?YyQ}BzUb01OZMr2453|@sl5rjldRY zS8nbB#eW=7q%`s~Fpmfx?y8=w3@LU3u>f`~CROw9P-pdoYF(!@@Zs6_F==S9p}u(F zS(n@Uf^ra6$OiLKTcXLq!10B(6k9qNihe$#}JJKH8hX(O?47q0qqLcOr;O z3qAJ|4AK-s1Ngysq8!=4arOOdGw?ldMpSxL8X)R2>EiFF_rjEeG}C!%&_>HD+d|8@ z1?|n_8G-h^X~Y}eZ5l{l2NJphL>ln3%9hor%iVA#upSQ4HxzHbJpy;}B&B2C90IeP zJ0^Q@X{C;5Y;>!+xGxc+Hya(&=8EAktw3Vgd;EaUMBE*v zXi0^y6L?`CV-hg)K~jF zF-DVfM0dL`yN)7p5*?CW9p2-gG6ssJ6W=Ydzp*sho0bnF`JQZjBU%`Haa@5b& z;~!!obL?HA&g$T6sW&o%wIRH=c?B#c@-+RzeupRN$LwF~Rw*vQ=gO^?Cdr<``+mrO z*0FqEF0c0$b&5MU#k9qP0SQ}EcTX?Tp4S))0xiKzzzXjZ{uw(TBVVH&DZPB z`c=9t-FfIt;w6haYT>5(lg+@z3SY9@3@secta?NG=XY{Mf1dU_u&I^nz0{BH_D7`lW0gUbnaU;Q`BC<5)r(fuDZiHLtBu;mo z{u+;SDLa)H=mnf9eOdyqtQl7W^<|F zSsz}_CwSea<{h%VTVosEU!-R58*|shW~dNBng6znk%+a+IgvtUa?Z58m!$mx0)KKk zF|)9r-1TUzh`&JOE83W%`_%9>e-VGa=<%|iAp51!SHd6ul{!Eq|j@?iZ=2;0`)J| z5(6+6&76uv(0hDYFTxLaII_W)+9*gPO&w4|=8L+LA-$GY!iZ-=Ugk^SF*v=B7c=8& za7x;Lo41K@lqn#BX<>!Uw7{mm2-i0dfaYay2TjepwpBW6z>bn*KtyU*u@A_5h;!f>Ulw_e2Mpx*SYg3!oJHw=u8vr6#l&I z3Gi(OpNr$UyEWU8M|un|53da0?@)!EUCf~!twF$wNN13@2l@|BiX#GfTT-w5HgDkd*4KG(c(GM_)sSv@{!&icx~!!0E- zQ2+Am_CC(^zo`--r}Ig>LhRyWNYG4KU5UqtLe1~=tQ*S;Ls#w(cNi;t%T0S5WSo48 zAUzci4OwS;a8D^~OZbUA&pCN9Lg5Sj;`%TJgA^aox$*+R1tW|FbM-<}JhP87^Z9e|>wSlG zZ(NoWG^;PzE%IVy`Z zeGCyhQeY+X&Sp_H)^Q^@~JP`mK@|p4oha86&J}{Iw&s;Qw6M z9Jpj8FHZa>l6CsqS)btH64K=V3ibjC{QPeDrKCM8`E36HaZnDFw1cHB1%(t* zK}iJ^Q9&YiG_;-RXd*#H6i{I>r*|JpZ9BN3oOMSEC=^sP&Z{K-8@maH#Yfk*38 zt$TD2fXup+FKV4?1r<8iu|WL$GEVHBYGv(EtxUbE*r3mY%v02vYIUeqrdstW9}SO8 znQCRImZnC@cj znB}KaM@n^i*mH)c<)=~sidy%u$nz@>T6G}lPOqfG9!+t}(w*9x1_e8{eNGJVaRY}+ zT0y|2udcx!CM1w_qKYf*FdYvE5!8~3C>?9;um^*P98Eft6t(tP9*2R63X+?Ob$x~h zq2S^WQ}e|$6#muq_$RU9Vi2_Drqht5vp2@j%*E2z!v6j4P45>ZGFX=^YFQOTsDfFz=jH7x)XQAGe0QAGe0QAGe0QAxN^ G2mjeFT496$ literal 25165 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 literal 23863 zcmeFZ2Ut_v(=UvoaxBQPU_r_`Vg(UFqksuHiV_9sHBZy2f1$qI_z&tPp_jt{xCg_)u{JBDqVMA2?cwF(ap#Y-r_Ttf zT)wWeNx%&p>-R_3Z-1vsMfOJv6>XaOd+UptAD4sI-U{vdZ3EyYyy39W#$6kPcWqev zAS44c+Pq=?SRV#X8#W4W+Pp>Nx2@Z@gAU~1f$GA-8#f7W-YgKaAqdcgHtpKH`%k4y zTlN^(i5&Las~i%O{+sOO!gu0^UEhzKwZD6R>$ZLS4;+*@dhGa#lXB-E=P#(Js%c!g zs)@LEUCYSW#MI0jY2k3o(aG7x73Jmaww(P!SAY$ja=dg0fZ+kDt zq!+&1Dtp%OySV+`u5J5{ocnTgUNE)wnf>=o?Ee4I%>Hd+|7Bi-LK@&pCO9^NAK{G~ z!AB(wj!j?+;Mlxn^ZK#n*CDcgY!w{a{_R);Og4a#;MfFywux*J`8V2s_s!ZT@J0G- zZ9r&;@CNW@65b^Q7vjBq6(LWBr*Din@$z5&{w8K*LNPL3KbsrN9T8j36=53H4QI;` zJ&pT@kL>o%mLcdJM}=_AL^bY-j}ZP^6Y|Xpju++)EKVP4vajL|gk@r@^m|2(T*Rk^ zsZ`d6X>?e6WgiKHBbw?NndIHi$-kCHG{x4K+6vBA;^)<5JM%HPeBN}+G^%)+BoWqX zFY|d7b?~C`$h#j@Wna>^8r?@TCfFL2kvWraF3pi+p1hWA1+r*ONUQ6% zzmMMu?e1cyDGS4;{QgSQ>_xdaTcTq-oh-9{M#LMZD`F^VWEbt>V#ch60!6McS&@~i zyqwp)CS;MJi0N|o_lfMs67^%#^Aa4kwK8C43+%?zx&TkOb>Cnyf(_hShzrO-;kR*b24U3ZD&6cUKgqDh+= zhO+W2D(M;P=j?^tI54GD_$3QvK<-F;N!-UsGHy%c&<+OBrm#eV#2S|}Xyss1(NAs6 zzVgYJb;HPrc=J~nTqFxFc-#l4gX5>{d=Y<&UtSZ!WMzdG6CL)QIEA5%laW2SCq*vzdnotreqm4roQ|V$zsJ{tiMpt0l zI9(G#sPGh*#iugnmsm|hbrV4@i|S;Jj&uHv(fNOH#=hD9R{|0A--A4t6<5+MpcJD1 z;#0t#`I~w#YQOx!x53jm8!h?%)3v@^_UU#5S&*&b4TesI zZGj)hWjytFnf6~=&i1erG(X^E{As|3*6ffE3oHnfDdb^75U22_I z`YSLMzqOyEN!tp7G9YNe!G7$x@$Gg*39? z^Zqogjs!~2DnB0e_?;1?&L}jYqnJ?KJY_vpie;=ubR=|?80&7Ui07mnNeCx8YrBa0 z-R)W87xqvR#=)T0F7g@FJt2v61$Ni!sO9M-->FaAny5+7)F zot9VA*410#$G>{~&XCX{XKBR%I?=0;3YvQ2sR{*0?1@)CXMgj&JHR(dRv`L5A7De0 z70Spi@g3WqRW!Duf$U|{M{Nr*D1UL0c`F z60>>7OCI++);o}KK9!k$zLs{dgbkV>m+A96$}|$tdVrItk7j32aEr}^%)y(S@R*iE zP^xAtERV#McFhFWq582|s(Qw_=R`-wd7BZf867+(!mbE#NwUli(rz9Tjb<7oOU_5d z4fRo^Mo%E-LYY2?P^#keh9P8( z&|{NkrpDQsQgD(81ZjWP-`fD=t5r(Yv5#OV;!*xMUOOUCqw!NQ|O=v-|OC#03^J z5w1N4#94V4=(s6TjdsRUw3g4Tns}5*cQn07J)UC!O6_{{Xw6?!h|IG$)O7U(R7;N% z$pk2cdo-Khf?A@?#PCKISGsu5;Z=OB+T5Cu6}(z9auGh0kik8g*8?v?EMqAQ1p69) zZe?}yKRtP^o98Dm%DK{Z8Ep^-*KdfopIPg;CM2-<=@SyrdPG@J{r~2cu|Hs_vqw!9 zVLHc?CebH*B^nd_xIH)S=gqZW2)f(xhF>+IYYFG)+Sv`i8V=}oKQeFClM63ci9WtM z@!~_b`?2R0&iVzj+kJKh7~c{@J%2V)k)^aID)=Wc;#8 zhQZ1l8!{org{gf_uFyWaDCh4#Yfy4CqSB!WWpX15o#4RlDJ?q-&F2~gX5gp`6vDZt zS*somK5bFC%{Emjoh45E>P(Qn4rx`1=2})M-4J4DCS!?iD+i`eW{w=I$l6#(UTuRH zr)fD@vJY2^6&vYPe3MV`ZsHZXXTjNyutI~NIF8wMwgLa@mL7rWZCBGkQj*#anJ#6w zmw|6TJRZa}POQC$tRfv&`6lghM^7=UR2^LT*yhaS-_hCJ{TTI@S*zlg@L9spczcpm zPMU)ZV@-%=jqT&*WVY1E#5Zl z{hiP%C4XL95jE#j1WYOZBzJRP%fzw(Hn^s@OKoT)I?lMZgpO!?r$tMa%E{ZjJT=R+ zQ`Y09K1m8Mma=AU;2ndrwkiPo=L*o`ez9YTbQ~`xt`M+@MFL2=UzJ1@5m0+qK|mGU z+-Tm)QgL;I<(;>*_~uw5InT$+wI|Tiij@+M@pPpvE!q-#h<>{VfSsjo3rsj0k4}M> zz6OjQ?ATykUD`K`jJ1eGoQ%x!di;060N;B?(met{7&3I(f;1 zt9;`+$0h@tcscf;UxyJ8wiPR5=7Eo-nU>oL?w>#oKX)m|KHq6!PB!s8K8>;Tav;D= z*9}%j`TAGMk_=;^KsV|_Tl;5dlzBhbD7XpVPbxt&BJ>Jnw3c!lW~lS!EYTSV2-oxmI(Z|<1Y(z6L$~J9;`f`lByUL7p@IcvWey; z1fAfws>g$IPl8@a$+kx&&PM3XLzw-v|)=(qi5m^bO8v#i!7p9HETj=?n*oGo|j;65ix$Cqd*a$MCh|c znVEP1M(Cb8&=Kgt^T4)AhOhPT%okyki!dgqxTw^vl`>~Qqi;o{YL#0wYp z7goJS+j2(Raz0?*H6Z~j54zL&UyX@&m$5nrrC`7hWl{MFUdvS)z2Z;q+VEeQ^ZG; zt>Cp%zT>5BAj~w}D5mwUE%Al_6YcvLL!-B!I^c4RhJQ||-`w{!92yZP%*t{*Rv7o# zKQU=1MN2!WfteR-2OqB5zR=k&3UWijEqI%(RB$OMH9u8OGYy~8Mu+0cRH>} z;PdM(u9yWV;FXn-cl)EY60h_-nN8ohJ79XN)VaH=#Z6w>QqATA&0&uEd7_w|-{KYo z3F2RUllu*kcQDWqOLl&qC<^7q7M#@9wW2!E8O%5etQPErneHxjjn&_zqoGn zZ%DDyleQbZ_*f~M^d9Yn1icI=&PM@XUfmLV z33>P3taT)Pn3e=7v%ou;B#Z!C{z3+2fX2sHupI{Q3b|v3?-P*Yc2Dfpw)ypk+gZNv z9l)1X-!wBu_ci+a#ZY*-RJM`zZzWmVZ>)c^-UxB`ENIc3Y%2G7!3ytWaLcUqi4xdf zIhzUI^#|QEcek!a-9$1XjT-R&4c?=a-c^3wyyK*NrV7{ROoB-B*V+$CDTcg97&G%z zg?uc}d){$cK2tTmGG*cIisXwzqk&Ym5Sp}4b^7F*kX@5Hxn~Fcldk{G>L`sFk(|A+ z>MO+iw+mq+46-;8lTn^P;JXx$KHa-lRc~*F$&>d1f8~As@dKn6&NfcFffcu9dos0o z_~H1$H6dr`SVK{0Y)`~gSb#@~SL^oiJN0^FxH~d*k)FVpx4;tDgoe)wY`attT#sKP^K$?b*w^(A2=?_~&c5ZEP_<+@zy^nctf@7j z-i%)(fPMbih2H}I1itvGGED69x}o-2;=wsf*kAnx=KWWP{^Q&_#v-uY{Onr0Nj3d_{VdiuL;eG{JBQuU0jSV zU?Nh2uofMQ>T&*QTC2;<-xh1jT~?ZUSs5Mbbwp>-2&E7NnW1`wph4P`#Y10g;}}c? zoe<=iB-BBJi+~Su*tt9U?35rubf@dTWh_WGg+&V_LC2UJx?j=~$U_;h9sqy}1Pxsb z8C!aBHH9Dzcz~SKmkdEevfPYpMSX+(`&$5Ys(+Y<3!!+9rj;;3q2 z%5Bh=aElkl+Pwtb%^Im~HVzXiM{nfe<038^PpdR&$HWyYDs2pDzqaQ%FK!W>WawB;5`VyN#=_cd7Tij0!;dBkEG(%KwxD{&8C zxdvic8w>IwD&ZC4JC7;1SGRo;%g!+!@+Cq-VRDY8t8$V%9Ftd)>__OY_l^4!eL@R! z=!23G;Ws`ao01|+UsB%>ikFnW%XKWBHJm!os%qT^FXCd;KEAfJVi8#-0uUqUmj2Do z_I9^l%yR1pL~@MtoWu;QcMo8wOvgz%shtzb9pGhjL5`8NN^R~}`V=?kn6?fOzN|(P z@ct>c>E=@Mr!7zUPSk7z*wcb*t(B9OZj39gVnO+q>gdy!r^Uo4_aNz3bnAQhsluIv zb@XwZMH(SJyQ@}iSJJIYgU}bQES;Pvo4&IL$pJlmKxi?G^g?pBwRgd`AwhC!2R)dU z2ubxT7BET!iKq5%*fw)6OGWke3Il{l@d{Zoj8*v>T#wXMM;+HGWF;b9@8HB8FALTv zfFG&6DqMF_W=a01v$c3R##V(i2EYSpbS18*Ks+9j-tP3-uZQUMFrl|rHNS=E)gfPw z>vV=BK?)3z<@kpuhrT$Kj23+*t2D}2-~{1H4ARTu@9PatqnN#96<1<_JqRggV-4e9-4itmA zpi_+LOD&)+wd5SV(z;(>P}Dn+ubk#g?X4 zbXLEP8`8_t)E$woeR@GP#BIv(iG!v5Z8T{L{A~g z3R|I7&F}YBd^Wz{vp{5#bLhPTiF6`$3~xQ|mFH@tkcp*$HLObU5(fBk;7e*N+_R1> ztO?1cSi-g9kQ0?AB@~OK+cnu7UIOFDcXfnvsncsqxoOi@D7DoQPg7JbGfKFpC>y^| zwmZ{Ok|j>tF8yO7%ToFWftTZ+CHXxVaU=n{lyfzNa=7yA8`bt3rK+ljV>=Y61@{k62Arz#5OCvKlc##VTNzxX>4?|nIN3iS2aVvTq7HTd4zMu!4vHInIrC|6PjklBQ zg~dddU0BYG;@Yn}{nj$KZ5IJ<6*L8xbJNZ`6#mN|8O-Q%^O@kGk>QNlcHZ<@ZC@Qo zWb`5i_k)*^GYOU#_Fa?#tg{6i%I8WIL1@A1VmAQ0#;*hm3lF231mn~J1JcFWCju`i zs8I0jCPkCfzx*#1-0l(Pg-fx;;70dx!D}$&m%;R#c07^#euO)3x|=H*YjvWoNh{vt z@idBlY-0E0Pei_+_)XM-1LE(Vtor5b*I$BY)wCVmQ>UXbf=faD;niKfnX1%?x)kiy zl565_ccQqn*I>mTqKvX(G4gV5v2w!FDO+-M0jtT!+0iw)H@Gx=bbF7{EbdL^Gxx0% z#PePsMP5DCOPR<&oi&MWZ_K>(ncA8w+(|Qk_jV~JhXbViy#$$flEaZm^10!Yt6%Zp zB?g7Uhh#5v<^{{vb{)95@d zXqT~AAkzwm3D&m5M7x5{_r?@c9V>@e4(%arakx4KwI(!c+?p5Ch@$VF*qw=a&y;4_ z`9vGpT!REkPGnj;jEHM*4h{p9Q6`j?(~FdP>i;`km1#&S62XxFuG83R2>TnYzDjM) z=aBFHpchi9^~kqO<09tLnRwa0Sc|tZ5Z%fVuE`j7(0mf*N&L*4TU;^8FXHVudX4p% z3}Rk!C+&O=Zqe08aPQnobgsEkR41!tJcBtm(Bwu-I$bztkS8BkqqSlShqQA8=(j2}1A4`e<;@`%PplHU; z_!>?Jvl34e=B(l>(`uYsvl(^b0+LodTFPo5Dge|M`0T{=Djmzfdl?_0DxbwQd<{kr zw0AkY!mSBKk&_{FN1Q5F6pPg8fr-^V`Ht}`(oavBJZtF3 z!C^w@)DZnv5d(KCRwDfrIkJc%+eN_nKR%a=R(75~xuA_pKb4e^7w|7e`^bM}B`HbC z4HYnrkErH5Cinw|CO&EHF}?M^u8*n91&r)wY~OTwDBE%iW5Y^urh+D-g&E z;*D)H&Tp}wwcb?7p$8UvBDEEI9J&Y}_Hi{;p48|Tnvf%x#g!ZIn;lM(ea|Ogu_ea4 zLX2KpnGmA!@h2h*6D%_ul_`o;QXwvNcb56I-NAf9f=}Ut;wP*>jc1KEv2rd;#Qo83 zcdEF#5lP@g8nbfV@6k2RiN6l|tsKxkQ)eI!lk>Up{p4RWC=+4Hh(@Gs%!9(RX}JQJ zlF=XO`z3Kf4yQ=qyYjfs@QMuKMh4DZ#3KHZ)Kv$-^1X@W5gW3~Xu46PdHvx{#%f%3k&MebD$J!_LR7+KKVXzXrb3d{AmZF2SYQjSSs zgP`%fIeO`|e6Y_=IK$YausO$|xZP3E*Ia%{F+3+UWfA$M!#{_vD}T^2SaWylTxXYA zQ+JlxDjH(hNzFU{#k^H+;Y@;AaM-JsDWm-OxFX}$KOvDt1+rUjEl;BSfmH!m9u28$ z0S4F9XS91PU^%qpi3TU_Mg)Pe%M;Q#fb1eOR#U+EHE@G^fY)s6~xEsWUthMYYYIGZg)c zO*&#Lgz4cAXVmy0b~~I%eN)SVD37FBneBk=2rvQ&D}~M!|7Le0^)prJ?YX(x9Sfp& zumi%qd*^1Q{UJRPWlC|nEQsV?9j(d)OX3}2eagXi1c~sRDQo@IHY>d={O;u}60msf z{tR|PKu@9pELv+Sv?BCAY%j{WB4@uz)4>8Y>l^rzFFD*^WAQe}JzZ-;WD(-E$}Bjh zdI%L>(GEo=kzQP$*c~#ZVf;<>8pOk5Q7LDh{+drCWg9BRiRnnB3lpKJ+RW;=sJDJO zTXH{nS?j-akaNx=<%?kAQ2em!azIUi1p1L)*pUDs=cz4h`cmF!)@XG$>c^a(M5*Q_ zQnsDqI)L%}L~67ku}m9%$o-4mPaTFU)9=@595jNtpe4VfuF^eMO~%s(;j>1K#Z6l( z?Ep$0G=zEjx~J6#B(aJ1cVAy>N|4=NQ_Kph{ek6|3Fod9eJsA(}J(rwFA*#THeF?sWtz zd(n%6A$3PLt`nNhl^MDop=f0tiEB*AJBN=K;8mt7xiYlI&^PB`vB?VtPJlsOk`te< z9hu0v-c2mbosA{{`%Q?-cJ`e%h`E&O9u9f+R)W;BuG^n@kpKAj9B%P?{<%LfF&dAm zYWk_P0G9M0`DHz#lO7dQv|eb!fGJMB?Tvuf89r~KY$WWG?$5gqHM%d+{x$Wsn18Xfv$LJ%HbYk|MXw7?OJ=tH)MeoCK~z&V$5jgoU1eZ zBaWr(WteN6EJhd1(M__Er@474=XdE*e6EPrJ*)2+y5UDw-+;;>>-UW){g=M4f7_5X zCjO*V4YcJ&>5Ey!?bxvmmF1-;fN3|0UgW3MGm4L`0v&5(aiyml5ZCyq)G zxHE1ChEgPZXm9SK${{BNPR!E`t*?<0N!OwFxm( z5ECnqoY=BueYm7JXCLjyXr?Je>*WFGh}a;5U$^1dGC*>xmT(Df=u;^O3pF?8Kq&;50Yo+*&kn=$FDt9{DSXcL49 z(;2@mT=`~rp_x6ObAcwNByi$$qkmmy3jW|XSU=(ZzqrARszbTrzKU}hLHdj9F+=vR z3;*MS*#B%X@U>o+Vp$ND@&z$iTgUiL(wGfjk5jmI>j4S>I_JxmyBP&sKak7a8&n0V zo3@Rs_x+4VN@WBgQ3f;QV^rPji0$GJ1NL0O%BuXcUxWYAk0c_e2B7I*OHnVE%x3aG zv4F^jGVUB;;@?+@{o?*hAI|6hJzCTbUBnp#!_d#Tz9&V0u!vLk->$s!wRPKD=homE zwmcj=`(w`L;VB(XlGbrFd*KAvpG8vSUJ7zmAG#>97+?T+$%o~!={57T)p9PP3jh9QB8>Ca)D-Cn-!>0292q_>|yfTry5dvS{k`R zcgd68e#&uTmn1Tz;}&zu9Bh1e*-f=4;Uz2Mz3JBvd=$x86LRHtV^Lxjiv_bvk@`ND z1A5c7_AB3k$#C^KJz;r`TMN$fsqkR{F6w|A!Rz2(ONF`IE?(Z84VsthdEd2epl^~k z+5OT{&N*{U2o-JN$9}_S`9G#T;>+pH-j)OzGINLhx{U0nw!B<}d@+lKky$Ke=NklO z$rT_>OAqV@`oNqPB*m{lp5MnHikKe+xNu6Gb5JX0x^D0|%yne&IK4WBslFt2lMR{d zeruZ^nIm1yD+-W+m+~a46S>aR?oA8=@CH6sYXG1KD2~aMy2YU)%$5rj)mpx})(sxupQ7*nxEkK- z(4$MlvkubqZuH_(ZDBg+rZWl!K(UhzJ4m)==kBA45dEiUdJfloG??bVFP4Et{Q$Ag zA(RLS9m?-n&MZyGdkGw7F*k>DwXknq2FaiddQ^RQxTMZ~jA#eIqrk&G%f^G^U;tTR zk*oy4QAbm?yPKncIzq!6UYxLk;x~S6vMYf0VVkGBx zi(t{~MX7(w9|v(-s-zny=HVpjva*+Ugp~joqIDDGMveY%svrnU;;EmNkkI1hr76?$ zml&MSQH5Izb+SDf@=+q>YhqeY&V4~v7c?(T<~{ETX}FS^@*6}D$m+(+$8O0AYdV}4 zI;D+k2f=HWwrKFfXCEYcmLqbid&*e(c$0BV+#Rz?E3wc96?K26aeb(+7(RY|bb@X0 z!*}b8!uTW0xqtGeh8=G$6v%cH;z!a0uj}nLz4JVE!c3}Uxq z(Io$eF}=KB@?~zr1+Rux_#m9JaxSPCfKn`?7y7=L$^R$x0f4nGeq9qL-tHE7wm*j= z2E_y+Veg;oQ}{I<7UfJ4z@mS`7Ur{G3al%`VZ1;}`3>qEAFR>2du+MXHH=#b>DAaj zq4Bskc~nh8uPk=ByeB9s?1jf-XK$g#9%=l4?W}Ju_XKS%cXdnIeYZ z(}W{?u;lVabbCkM+zmG~YH#7?hn$0I∾m&|Z<ho&VRqJAwfDfz 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 QjX@*Fp00i_>zopr0Q#^F4FCWD diff --git a/packages/pixel/README.md b/packages/pixel/README.md index 865991f80d..fcdb49abf7 100644 --- a/packages/pixel/README.md +++ b/packages/pixel/README.md @@ -150,7 +150,7 @@ sampler(-1.1, 0.5).toString(16) // 'ff79643a' // resize image to 1024x256 using bicubic sampling -const img = resize(src, 1024, 256, "cubic"); +const img = src.resize(1024, 256, "cubic"); ``` | Filter | | @@ -259,7 +259,7 @@ yarn add @thi.ng/pixel ``` -Package sizes (gzipped, pre-treeshake): ESM: 8.17 KB / CJS: 8.45 KB / UMD: 8.20 KB +Package sizes (gzipped, pre-treeshake): ESM: 8.19 KB / CJS: 8.47 KB / UMD: 8.22 KB ## Dependencies diff --git a/packages/pixel/src/api.ts b/packages/pixel/src/api.ts index ec45a3e086..65ed60b379 100644 --- a/packages/pixel/src/api.ts +++ b/packages/pixel/src/api.ts @@ -4,6 +4,7 @@ import type { Fn2, Fn3, FnN, + FnU2, IObjectOf, NumericArray, TypedArray, @@ -439,3 +440,7 @@ export interface NormalMapOpts { */ z: number; } + +export type IntSampler = FnU2; + +export type FloatSampler = FnU2; diff --git a/packages/pixel/src/index.ts b/packages/pixel/src/index.ts index 5c7acda926..7f23051821 100644 --- a/packages/pixel/src/index.ts +++ b/packages/pixel/src/index.ts @@ -6,7 +6,6 @@ export * from "./dither"; export * from "./float"; export * from "./normal-map"; export * from "./packed"; -export * from "./resize"; export * from "./sample"; export * from "./utils"; diff --git a/packages/pixel/src/packed.ts b/packages/pixel/src/packed.ts index f5434adbed..5bf24c0dfb 100644 --- a/packages/pixel/src/packed.ts +++ b/packages/pixel/src/packed.ts @@ -1,4 +1,5 @@ import { + assert, Fn, ICopy, IEmpty, @@ -6,7 +7,7 @@ import { UIntArray, uintTypeForBits, } from "@thi.ng/api"; -import { isNumber } from "@thi.ng/checks"; +import { isNumber, isString } from "@thi.ng/checks"; import { isPremultipliedInt, postmultiplyInt, @@ -17,6 +18,8 @@ import { BayerSize, BlendFnInt, BlitOpts, + Filter, + IntSampler, IPixelBuffer, Lane, PackedChannel, @@ -28,6 +31,7 @@ import { compileGrayFromABGR, compileGrayToABGR } from "./codegen"; import { defBayer } from "./dither"; import { ABGR8888 } from "./format/abgr8888"; import { defPackedFormat } from "./format/packed-format"; +import { defSampler } from "./sample"; import { clampRegion, ensureChannel, @@ -425,27 +429,32 @@ export class PackedBuffer } /** - * Returns new buffer of downscaled version (by given integer factor) using - * simple nearest neighbor sampling. + * Returns scaled version of this buffer using given sampler or filter + * (default: `"linear"`) for interpolation. Syntax sugar for + * {@link PackedBuffer.resize}. * - * @param res + * @param scale */ - downsample(res: number) { - res |= 0; - const { width, height, pixels: sbuf } = this; - const dest = new PackedBuffer( - (width / res) | 0, - (height / res) | 0, - this.format - ); - const { width: dwidth, height: dheight, pixels: dbuf } = dest; - for (let y = 0, i = 0; y < dheight; y++) { - for ( - let x = 0, j = y * res * width; - x < dwidth; - x++, i++, j += res - ) { - dbuf[i] = sbuf[j]; + scale(scale: number, sampler: IntSampler | Filter = "linear") { + assert(scale > 0, `scale must be > 0`); + return this.resize(this.width * scale, this.height * scale, sampler); + } + + resize(w: number, h: number, sampler: IntSampler | Filter = "linear") { + w |= 0; + h |= 0; + assert(w > 0 && h > 0, `target width & height must be > 0`); + const dest = packedBuffer(w, h, this.format); + const dpix = dest.pixels; + const scaleX = w > 0 ? this.width / w : 0; + const scaleY = h > 0 ? this.height / h : 0; + sampler = isString(sampler) + ? defSampler(this, sampler, "repeat") + : sampler; + for (let y = 0, i = 0; y < h; y++) { + const yy = y * scaleY; + for (let x = 0; x < w; x++, i++) { + dpix[i] = sampler(x * scaleX, yy); } } return dest; diff --git a/packages/pixel/src/resize.ts b/packages/pixel/src/resize.ts deleted file mode 100644 index 64df311f74..0000000000 --- a/packages/pixel/src/resize.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { Filter } from "./api"; -import { packedBuffer, PackedBuffer } from "./packed"; -import { defSampler } from "./sample"; - -export const resize = ( - src: PackedBuffer, - w: number, - h: number, - filter: Filter = "linear" -) => { - const dest = packedBuffer(w, h, src.format); - const sample = defSampler(src, filter, "repeat"); - const scaleX = w > 0 ? src.width / w : 0; - const scaleY = h > 0 ? src.height / h : 0; - for (let y = 0, i = 0; y < h; y++) { - const yy = y * scaleY; - for (let x = 0; x < w; x++, i++) { - dest.pixels[i] = sample(x * scaleX, yy); - } - } - return dest; -}; diff --git a/packages/pixel/src/sample.ts b/packages/pixel/src/sample.ts index 0eaeca9bd0..4a7e01f57a 100644 --- a/packages/pixel/src/sample.ts +++ b/packages/pixel/src/sample.ts @@ -1,19 +1,15 @@ -import { - assert, - FloatArray, - Fn, - FnU2, - IObjectOf, - NumericArray, -} from "@thi.ng/api"; -import { clamp, fmod, fract, mixBilinear, mixBicubic } from "@thi.ng/math"; -import type { Filter, IPixelBuffer, Wrap } from "./api"; +import { assert, Fn, IObjectOf, NumericArray } from "@thi.ng/api"; +import { clamp, fmod, fract, mixBicubic, mixBilinear } from "@thi.ng/math"; +import type { + Filter, + FloatSampler, + IntSampler, + IPixelBuffer, + Wrap, +} from "./api"; import type { FloatBuffer } from "./float"; import type { PackedBuffer } from "./packed"; -type IntSampler = FnU2; -type FloatSampler = FnU2; - export function defSampler( src: PackedBuffer, filter?: Filter, @@ -188,7 +184,9 @@ const mixBicubicChan = ( u: number, v: number, i: number, - s = 4 + s = 4, + min = 0, + max = 255 ) => clamp( mixBicubic( @@ -211,14 +209,14 @@ const mixBicubicChan = ( u, v ), - 0, - 255 + min, + max ); const bicubicABGR = (src: PackedBuffer, sample: IntSampler): IntSampler => { const { fromABGR, toABGR } = src.format; - const buf32 = new Uint32Array(16); - const buf8 = new Uint8Array(buf32.buffer); + const u32 = new Uint32Array(16); + const u8 = new Uint8Array(u32.buffer); return (x, y) => { x -= 0.5; y -= 0.5; @@ -230,28 +228,28 @@ const bicubicABGR = (src: PackedBuffer, sample: IntSampler): IntSampler => { const y3 = y + 2; const u = fract(x); const v = fract(y); - buf32[0] = toABGR(sample(x1, y1)); - buf32[1] = toABGR(sample(x, y1)); - buf32[2] = toABGR(sample(x2, y1)); - buf32[3] = toABGR(sample(x3, y1)); - buf32[4] = toABGR(sample(x1, y)); - buf32[5] = toABGR(sample(x, y)); - buf32[6] = toABGR(sample(x2, y)); - buf32[7] = toABGR(sample(x3, y)); - buf32[8] = toABGR(sample(x1, y2)); - buf32[9] = toABGR(sample(x, y2)); - buf32[10] = toABGR(sample(x2, y2)); - buf32[11] = toABGR(sample(x3, y2)); - buf32[12] = toABGR(sample(x1, y3)); - buf32[13] = toABGR(sample(x, y3)); - buf32[14] = toABGR(sample(x2, y3)); - buf32[15] = toABGR(sample(x3, y3)); + u32[0] = toABGR(sample(x1, y1)); + u32[1] = toABGR(sample(x, y1)); + u32[2] = toABGR(sample(x2, y1)); + u32[3] = toABGR(sample(x3, y1)); + u32[4] = toABGR(sample(x1, y)); + u32[5] = toABGR(sample(x, y)); + u32[6] = toABGR(sample(x2, y)); + u32[7] = toABGR(sample(x3, y)); + u32[8] = toABGR(sample(x1, y2)); + u32[9] = toABGR(sample(x, y2)); + u32[10] = toABGR(sample(x2, y2)); + u32[11] = toABGR(sample(x3, y2)); + u32[12] = toABGR(sample(x1, y3)); + u32[13] = toABGR(sample(x, y3)); + u32[14] = toABGR(sample(x2, y3)); + u32[15] = toABGR(sample(x3, y3)); return ( fromABGR( - (mixBicubicChan(buf8, u, v, 3) << 24) | - (mixBicubicChan(buf8, u, v, 2) << 16) | - (mixBicubicChan(buf8, u, v, 1) << 8) | - mixBicubicChan(buf8, u, v, 0) + mixBicubicChan(u8, u, v, 0) | + (mixBicubicChan(u8, u, v, 1) << 8) | + (mixBicubicChan(u8, u, v, 2) << 16) | + (mixBicubicChan(u8, u, v, 3) << 24) ) >>> 0 ); }; diff --git a/packages/pixel/tpl.readme.md b/packages/pixel/tpl.readme.md index 010b563013..5d2b655a51 100644 --- a/packages/pixel/tpl.readme.md +++ b/packages/pixel/tpl.readme.md @@ -131,7 +131,7 @@ sampler(-1.1, 0.5).toString(16) // 'ff79643a' // resize image to 1024x256 using bicubic sampling -const img = resize(src, 1024, 256, "cubic"); +const img = src.resize(1024, 256, "cubic"); ``` | Filter | | From 1ec724c7a7aac7326a5fd687c7add09dd6b6af9d Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Wed, 17 Mar 2021 15:04:10 +0000 Subject: [PATCH 21/25] refactor(pixel): simplify bilinearABGR() --- packages/pixel/src/sample.ts | 57 ++++++++++++------------------------ 1 file changed, 18 insertions(+), 39 deletions(-) diff --git a/packages/pixel/src/sample.ts b/packages/pixel/src/sample.ts index 4a7e01f57a..23b2e4a6e5 100644 --- a/packages/pixel/src/sample.ts +++ b/packages/pixel/src/sample.ts @@ -75,6 +75,14 @@ const sampleINR = ({ pixels, width, height }: PackedBuffer): IntSampler => { return (x, y) => pixels[clamp(y | 0, 0, h1) * width + clamp(x | 0, 0, w1)]; }; +const mixBilinearChan = ( + buf: NumericArray, + u: number, + v: number, + i: number, + s = 4 +) => mixBilinear(buf[i], buf[i + s], buf[i + 2 * s], buf[i + 3 * s], u, v); + const bilinearGray = (sample: IntSampler): IntSampler => (x, y) => { x -= 0.5; y -= 0.5; @@ -90,52 +98,23 @@ const bilinearGray = (sample: IntSampler): IntSampler => (x, y) => { const bilinearABGR = (src: PackedBuffer, sample1: IntSampler): IntSampler => { const { fromABGR, toABGR } = src.format; + const u32 = new Uint32Array(4); + const u8 = new Uint8Array(u32.buffer); return (x, y) => { x -= 0.5; y -= 0.5; - const p1 = toABGR(sample1(x, y)); - const p2 = toABGR(sample1(x + 1, y)); - const p3 = toABGR(sample1(x, y + 1)); - const p4 = toABGR(sample1(x + 1, y + 1)); + u32[0] = toABGR(sample1(x, y)); + u32[1] = toABGR(sample1(x + 1, y)); + u32[2] = toABGR(sample1(x, y + 1)); + u32[3] = toABGR(sample1(x + 1, y + 1)); const u = fract(x); const v = fract(y); return ( fromABGR( - (mixBilinear( - p1 >>> 24, - p2 >>> 24, - p3 >>> 24, - p4 >>> 24, - u, - v - ) << - 24) | - (mixBilinear( - (p1 >> 16) & 0xff, - (p2 >> 16) & 0xff, - (p3 >> 16) & 0xff, - (p4 >> 16) & 0xff, - u, - v - ) << - 16) | - (mixBilinear( - (p1 >> 8) & 0xff, - (p2 >> 8) & 0xff, - (p3 >> 8) & 0xff, - (p4 >> 8) & 0xff, - u, - v - ) << - 8) | - mixBilinear( - p1 & 0xff, - p2 & 0xff, - p3 & 0xff, - p4 & 0xff, - u, - v - ) + mixBilinearChan(u8, u, v, 0) | + (mixBilinearChan(u8, u, v, 1) << 8) | + (mixBilinearChan(u8, u, v, 2) << 16) | + (mixBilinearChan(u8, u, v, 3) << 24) ) >>> 0 ); }; From 6f9dae6010118e491ed161fa4a5bd40ec4719ad4 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Wed, 17 Mar 2021 17:10:37 +0000 Subject: [PATCH 22/25] feat(pixel): add float format samplers, update various types - add IResizable and implement for Packed/FloatBuffer - add FloatBuffer.invert() - fix .forEach() impls (esp. FloatBuffer), use return values - update IBlit, IBlend, IInvert generics --- packages/pixel/src/api.ts | 20 ++-- packages/pixel/src/float.ts | 79 +++++++++------ packages/pixel/src/packed.ts | 14 ++- packages/pixel/src/sample.ts | 183 +++++++++++++++++++++++++++++++++-- 4 files changed, 251 insertions(+), 45 deletions(-) diff --git a/packages/pixel/src/api.ts b/packages/pixel/src/api.ts index 65ed60b379..7fc075f98d 100644 --- a/packages/pixel/src/api.ts +++ b/packages/pixel/src/api.ts @@ -242,7 +242,7 @@ export interface IPixelBuffer { ): IPixelBuffer; } -export interface IBlit { +export interface IBlit { /** * Blits pixels into given `dest` pixel buffer, using provided * options. If `dest` buffer is smaller than source buffer, only the @@ -254,7 +254,7 @@ export interface IBlit { * @param dest - * @param opts - */ - blit(dest: IPixelBuffer, opts?: Partial): void; + blit(dest: T, opts?: Partial): void; /** * Converts and blits pixels into given canvas at position `x`, `y` @@ -264,7 +264,7 @@ export interface IBlit { blitCanvas(canvas: HTMLCanvasElement, x?: number, y?: number): void; } -export interface IBlend { +export interface IBlend { /** * Uses given `op` function to blend / compose pixels of this buffer * with those of `dest` and writes results into `dest`. Supports @@ -274,11 +274,17 @@ export interface IBlend { * @param dest - * @param opts - */ - blend(op: F, dest: IPixelBuffer, opts?: Partial): void; + blend(op: F, dest: T, opts?: Partial): void; } -export interface IInvert { - invert(): this; +export interface IInvert { + invert(): T; +} + +export interface IResizable { + scale(scale: number, sampler?: F | Filter): T; + + resize(w: number, h: number, sampler?: F | Filter): T; } export interface IColorChannel { @@ -443,4 +449,4 @@ export interface NormalMapOpts { export type IntSampler = FnU2; -export type FloatSampler = FnU2; +export type FloatSampler = FnU2; diff --git a/packages/pixel/src/float.ts b/packages/pixel/src/float.ts index 26126afe58..277f1f602c 100644 --- a/packages/pixel/src/float.ts +++ b/packages/pixel/src/float.ts @@ -1,17 +1,24 @@ -import { assert, Fn, ICopy, IEmpty, NumericArray } from "@thi.ng/api"; -import { isNumber } from "@thi.ng/checks"; +import { assert, Fn2, ICopy, IEmpty, NumericArray } from "@thi.ng/api"; +import { isNumber, isString } from "@thi.ng/checks"; import { clamp01 } from "@thi.ng/math"; import type { BlendFnFloat, BlitOpts, + Filter, FloatFormat, FloatFormatSpec, + FloatSampler, + IBlend, + IBlit, + IInvert, IPixelBuffer, + IResizable, PackedFormat, } from "./api"; import { defFloatFormat } from "./format/float-format"; import { FLOAT_GRAY } from "./format/float-gray"; import { PackedBuffer } from "./packed"; +import { defSampler } from "./sample"; import { clampRegion, ensureChannel, ensureSize, prepRegions } from "./utils"; /** @@ -43,6 +50,10 @@ export function floatBuffer(...args: any[]) { export class FloatBuffer implements IPixelBuffer, + IResizable, + IBlend, + IBlit, + IInvert, ICopy, IEmpty { /** @@ -263,10 +274,10 @@ export class FloatBuffer }); } - forEach(f: Fn) { + forEach(f: Fn2) { const { pixels, stride } = this; - for (let i = 0, n = pixels.length; i < n; i + stride) { - f(pixels.subarray(i, i + stride)); + for (let i = 0, j = 0, n = pixels.length; i < n; i += stride, j++) { + pixels.set(f(pixels.subarray(i, i + stride), j), i); } return this; } @@ -305,29 +316,41 @@ export class FloatBuffer return this; } - /** - * Returns new buffer of downscaled version (by given integer factor) using - * simple nearest neighbor sampling. - * - * @param res - */ - downsample(res: number) { - res |= 0; - const { width, height, stride, pixels: sbuf } = this; - const dest = new FloatBuffer( - (width / res) | 0, - (height / res) | 0, - this.format - ); - const { width: dwidth, height: dheight, pixels: dbuf } = dest; - res *= stride; - for (let y = 0, i = 0; y < dheight; y++) { - for ( - let x = 0, j = y * res * width; - x < dwidth; - x++, i += stride, j += res - ) { - dbuf.set(sbuf.subarray(j, j + stride), i); + invert() { + const { pixels, format, stride } = this; + for ( + let i = 0, + n = pixels.length, + m = format.alpha ? stride - 1 : stride; + i < n; + i += stride + ) { + for (let j = 0; j < m; j++) pixels[i + j] = 1 - pixels[i + j]; + } + return this; + } + + scale(scale: number, sampler?: FloatSampler | Filter) { + assert(scale > 0, `scale must be > 0`); + return this.resize(this.width * scale, this.height * scale, sampler); + } + + resize(w: number, h: number, sampler: FloatSampler | Filter = "linear") { + w |= 0; + h |= 0; + assert(w > 0 && h > 0, `target width & height must be > 0`); + const dest = floatBuffer(w, h, this.format); + const dpix = dest.pixels; + const scaleX = w > 0 ? this.width / w : 0; + const scaleY = h > 0 ? this.height / h : 0; + const stride = this.stride; + sampler = isString(sampler) + ? defSampler(this, sampler, "repeat") + : sampler; + for (let y = 0, i = 0; y < h; y++) { + const yy = y * scaleY; + for (let x = 0; x < w; x++, i += stride) { + dpix.set(sampler(x * scaleX, yy), i); } } return dest; diff --git a/packages/pixel/src/packed.ts b/packages/pixel/src/packed.ts index 5bf24c0dfb..1489036b46 100644 --- a/packages/pixel/src/packed.ts +++ b/packages/pixel/src/packed.ts @@ -1,6 +1,6 @@ import { assert, - Fn, + Fn2, ICopy, IEmpty, typedArray, @@ -19,8 +19,12 @@ import { BlendFnInt, BlitOpts, Filter, + IBlend, + IBlit, + IInvert, IntSampler, IPixelBuffer, + IResizable, Lane, PackedChannel, PackedFormat, @@ -76,6 +80,10 @@ export const buffer = packedBuffer; export class PackedBuffer implements IPixelBuffer, + IResizable, + IBlend, + IBlit, + IInvert, ICopy, IEmpty { /** @@ -351,10 +359,10 @@ export class PackedBuffer return true; } - forEach(f: Fn) { + forEach(f: Fn2) { const pix = this.pixels; for (let i = pix.length; --i >= 0; ) { - pix[i] = f(pix[i]); + pix[i] = f(pix[i], i); } return this; } diff --git a/packages/pixel/src/sample.ts b/packages/pixel/src/sample.ts index 23b2e4a6e5..4bff2dba10 100644 --- a/packages/pixel/src/sample.ts +++ b/packages/pixel/src/sample.ts @@ -30,7 +30,24 @@ export function defSampler( const id = `${filter[0]}${wrap[0]}${suffix}`; const impl = (isFloat ? >>{ - // TODO + nc1: sampleFNC, + nw1: sampleFNW, + nr1: sampleFNR, + nc: sampleFNC, + nw: sampleFNW, + nr: sampleFNR, + lc1: (src) => bilinearGrayF(sampleINC(src)), + lw1: (src) => bilinearGrayF(sampleINW(src)), + lr1: (src) => bilinearGrayF(sampleINR(src)), + lc: (src) => bilinearFloat(src, sampleFNC(src)), + lw: (src) => bilinearFloat(src, sampleFNW(src)), + lr: (src) => bilinearFloat(src, sampleFNR(src)), + cc1: (src) => bicubicGrayF(sampleINC(src)), + cw1: (src) => bicubicGrayF(sampleINW(src)), + cr1: (src) => bicubicGrayF(sampleINR(src)), + cc: (src) => bicubicFloat(src, sampleFNC(src)), + cw: (src) => bicubicFloat(src, sampleFNW(src)), + cr: (src) => bicubicFloat(src, sampleFNR(src)), } : >>{ nc1: sampleINC, @@ -42,12 +59,12 @@ export function defSampler( lc1: (src) => bilinearGray(sampleINC(src)), lw1: (src) => bilinearGray(sampleINW(src)), lr1: (src) => bilinearGray(sampleINR(src)), - cc1: (src) => bicubicGray(src, sampleINC(src)), - cw1: (src) => bicubicGray(src, sampleINW(src)), - cr1: (src) => bicubicGray(src, sampleINR(src)), lc: (src) => bilinearABGR(src, sampleINC(src)), lw: (src) => bilinearABGR(src, sampleINW(src)), lr: (src) => bilinearABGR(src, sampleINR(src)), + cc1: (src) => bicubicGray(src, sampleINC(src)), + cw1: (src) => bicubicGray(src, sampleINW(src)), + cr1: (src) => bicubicGray(src, sampleINR(src)), cc: (src) => bicubicABGR(src, sampleINC(src)), cw: (src) => bicubicABGR(src, sampleINW(src)), cr: (src) => bicubicABGR(src, sampleINR(src)), @@ -56,7 +73,7 @@ export function defSampler( return impl(src); } -const sampleINC = ({ pixels, width, height }: PackedBuffer): IntSampler => ( +const sampleINC = ({ pixels, width, height }: IPixelBuffer): IntSampler => ( x, y ) => @@ -64,17 +81,57 @@ const sampleINC = ({ pixels, width, height }: PackedBuffer): IntSampler => ( ? pixels[(y | 0) * width + (x | 0)] : 0; -const sampleINW = ({ pixels, width, height }: PackedBuffer): IntSampler => ( +const sampleINW = ({ pixels, width, height }: IPixelBuffer): IntSampler => ( x, y ) => pixels[fmod(y | 0, height) * width + fmod(x | 0, width)]; -const sampleINR = ({ pixels, width, height }: PackedBuffer): IntSampler => { +const sampleINR = ({ pixels, width, height }: IPixelBuffer): IntSampler => { const w1 = width - 1; const h1 = height - 1; return (x, y) => pixels[clamp(y | 0, 0, h1) * width + clamp(x | 0, 0, w1)]; }; +const sampleFNC = ({ + pixels, + width, + height, + rowStride, + stride, +}: FloatBuffer): FloatSampler => (x, y) => { + let i: number; + return x >= 0 && x < width && y >= 0 && y < height + ? ((i = (y | 0) * rowStride + (x | 0) * stride), + pixels.slice(i, i + stride)) + : [0]; +}; + +const sampleFNW = ({ + pixels, + width, + height, + rowStride, + stride, +}: FloatBuffer): FloatSampler => (x, y) => { + let i = fmod(y | 0, height) * rowStride + fmod(x | 0, width) * stride; + return pixels.slice(i, i + stride); +}; + +const sampleFNR = ({ + pixels, + width, + height, + rowStride, + stride, +}: FloatBuffer): FloatSampler => { + const w1 = width - 1; + const h1 = height - 1; + return (x, y) => { + let i = clamp(y | 0, 0, h1) * rowStride + clamp(x | 0, 0, w1) * stride; + return pixels.slice(i, i + stride); + }; +}; + const mixBilinearChan = ( buf: NumericArray, u: number, @@ -96,6 +153,21 @@ const bilinearGray = (sample: IntSampler): IntSampler => (x, y) => { ); }; +const bilinearGrayF = (sample: IntSampler): FloatSampler => (x, y) => { + x -= 0.5; + y -= 0.5; + return [ + mixBilinear( + sample(x, y), + sample(x + 1, y), + sample(x, y + 1), + sample(x + 1, y + 1), + fract(x), + fract(y) + ), + ]; +}; + const bilinearABGR = (src: PackedBuffer, sample1: IntSampler): IntSampler => { const { fromABGR, toABGR } = src.format; const u32 = new Uint32Array(4); @@ -120,6 +192,28 @@ const bilinearABGR = (src: PackedBuffer, sample1: IntSampler): IntSampler => { }; }; +const bilinearFloat = ( + { stride }: FloatBuffer, + sample1: FloatSampler +): FloatSampler => { + const f32 = new Float32Array(stride * 4); + return (x, y) => { + x -= 0.5; + y -= 0.5; + f32.set(sample1(x, y), 0); + f32.set(sample1(x + 1, y), stride); + f32.set(sample1(x, y + 1), stride * 2); + f32.set(sample1(x + 1, y + 1), stride * 3); + const u = fract(x); + const v = fract(y); + let res = []; + for (let i = 0; i < stride; i++) { + res.push(mixBilinearChan(f32, u, v, i, stride)); + } + return res; + }; +}; + const bicubicGray = (src: PackedBuffer, sample: IntSampler): IntSampler => { const max = src.format.channels[0].mask0; return (x, y) => { @@ -158,6 +252,41 @@ const bicubicGray = (src: PackedBuffer, sample: IntSampler): IntSampler => { }; }; +const bicubicGrayF = (sample: IntSampler): FloatSampler => { + return (x, y) => { + x -= 0.5; + y -= 0.5; + const x1 = x - 1; + const x2 = x + 1; + const x3 = x + 2; + const y1 = y - 1; + const y2 = y + 1; + const y3 = y + 2; + return [ + mixBicubic( + sample(x1, y1), + sample(x, y1), + sample(x2, y1), + sample(x3, y1), + sample(x1, y), + sample(x, y), + sample(x2, y), + sample(x3, y), + sample(x1, y2), + sample(x, y2), + sample(x2, y2), + sample(x3, y2), + sample(x1, y3), + sample(x, y3), + sample(x2, y3), + sample(x3, y3), + fract(x), + fract(y) + ), + ]; + }; +}; + const mixBicubicChan = ( buf: NumericArray, u: number, @@ -233,3 +362,43 @@ const bicubicABGR = (src: PackedBuffer, sample: IntSampler): IntSampler => { ); }; }; + +const bicubicFloat = ( + { stride }: FloatBuffer, + sample: FloatSampler +): FloatSampler => { + const f32 = new Float32Array(stride * 16); + return (x, y) => { + x -= 0.5; + y -= 0.5; + const x1 = x - 1; + const x2 = x + 1; + const x3 = x + 2; + const y1 = y - 1; + const y2 = y + 1; + const y3 = y + 2; + const u = fract(x); + const v = fract(y); + f32.set(sample(x1, y1), 0); + f32.set(sample(x, y1), stride); + f32.set(sample(x2, y1), 2 * stride); + f32.set(sample(x3, y1), 3 * stride); + f32.set(sample(x1, y), 4 * stride); + f32.set(sample(x, y), 5 * stride); + f32.set(sample(x2, y), 6 * stride); + f32.set(sample(x3, y), 7 * stride); + f32.set(sample(x1, y2), 8 * stride); + f32.set(sample(x, y2), 9 * stride); + f32.set(sample(x2, y2), 10 * stride); + f32.set(sample(x3, y2), 11 * stride); + f32.set(sample(x1, y3), 12 * stride); + f32.set(sample(x, y3), 13 * stride); + f32.set(sample(x2, y3), 14 * stride); + f32.set(sample(x3, y3), 15 * stride); + let res = []; + for (let i = 0; i < stride; i++) { + res.push(mixBicubicChan(f32, u, v, i, stride, -Infinity, Infinity)); + } + return res; + }; +}; From be0b32aa0c7d8933afb4a2343dace9a3838cab18 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Wed, 17 Mar 2021 17:14:43 +0000 Subject: [PATCH 23/25] docs(pixel): update readme --- packages/pixel/README.md | 6 +++--- packages/pixel/tpl.readme.md | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/pixel/README.md b/packages/pixel/README.md index fcdb49abf7..1b741e6219 100644 --- a/packages/pixel/README.md +++ b/packages/pixel/README.md @@ -121,8 +121,8 @@ formats can be defined via `defFloatFormat()`. ### Filtered image sampling and resizing -Currently only available for integer formats, image samplers can be created with -the following filters & wrap modes: +Available (and optimized) for both integer & floating point formats, image +samplers can be created with the following filters & wrap modes: #### Filters @@ -259,7 +259,7 @@ yarn add @thi.ng/pixel ``` -Package sizes (gzipped, pre-treeshake): ESM: 8.19 KB / CJS: 8.47 KB / UMD: 8.22 KB +Package sizes (gzipped, pre-treeshake): ESM: 8.69 KB / CJS: 8.96 KB / UMD: 8.70 KB ## Dependencies diff --git a/packages/pixel/tpl.readme.md b/packages/pixel/tpl.readme.md index 5d2b655a51..3c4392751f 100644 --- a/packages/pixel/tpl.readme.md +++ b/packages/pixel/tpl.readme.md @@ -102,8 +102,8 @@ formats can be defined via `defFloatFormat()`. ### Filtered image sampling and resizing -Currently only available for integer formats, image samplers can be created with -the following filters & wrap modes: +Available (and optimized) for both integer & floating point formats, image +samplers can be created with the following filters & wrap modes: #### Filters From e0024d0308e5172ac5d54cfdf431da15735edfc3 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Wed, 17 Mar 2021 18:51:58 +0000 Subject: [PATCH 24/25] docs: update readmes --- packages/adjacency/README.md | 3 ++- packages/bitfield/README.md | 3 ++- packages/dcons/README.md | 2 +- packages/distance/README.md | 2 +- packages/errors/README.md | 2 +- packages/math/README.md | 2 +- packages/soa/README.md | 3 ++- packages/sparse/README.md | 3 ++- 8 files changed, 12 insertions(+), 8 deletions(-) diff --git a/packages/adjacency/README.md b/packages/adjacency/README.md index 36f090c8ec..a54094aa1f 100644 --- a/packages/adjacency/README.md +++ b/packages/adjacency/README.md @@ -42,7 +42,7 @@ yarn add @thi.ng/adjacency ``` -Package sizes (gzipped, pre-treeshake): ESM: 2.29 KB / CJS: 2.38 KB / UMD: 2.44 KB +Package sizes (gzipped, pre-treeshake): ESM: 2.31 KB / CJS: 2.40 KB / UMD: 2.46 KB ## Dependencies @@ -50,6 +50,7 @@ Package sizes (gzipped, pre-treeshake): ESM: 2.29 KB / CJS: 2.38 KB / UMD: 2.44 - [@thi.ng/arrays](https://github.com/thi-ng/umbrella/tree/develop/packages/arrays) - [@thi.ng/bitfield](https://github.com/thi-ng/umbrella/tree/develop/packages/bitfield) - [@thi.ng/dcons](https://github.com/thi-ng/umbrella/tree/develop/packages/dcons) +- [@thi.ng/errors](https://github.com/thi-ng/umbrella/tree/develop/packages/errors) - [@thi.ng/sparse](https://github.com/thi-ng/umbrella/tree/develop/packages/sparse) ## Usage examples diff --git a/packages/bitfield/README.md b/packages/bitfield/README.md index de0f39d584..27a08f88e0 100644 --- a/packages/bitfield/README.md +++ b/packages/bitfield/README.md @@ -44,12 +44,13 @@ yarn add @thi.ng/bitfield ``` -Package sizes (gzipped, pre-treeshake): ESM: 1.17 KB / CJS: 1.22 KB / UMD: 1.31 KB +Package sizes (gzipped, pre-treeshake): ESM: 1.14 KB / CJS: 1.19 KB / UMD: 1.29 KB ## Dependencies - [@thi.ng/api](https://github.com/thi-ng/umbrella/tree/develop/packages/api) - [@thi.ng/binary](https://github.com/thi-ng/umbrella/tree/develop/packages/binary) +- [@thi.ng/errors](https://github.com/thi-ng/umbrella/tree/develop/packages/errors) - [@thi.ng/strings](https://github.com/thi-ng/umbrella/tree/develop/packages/strings) ## API diff --git a/packages/dcons/README.md b/packages/dcons/README.md index 10eb4c463b..608d2386d4 100644 --- a/packages/dcons/README.md +++ b/packages/dcons/README.md @@ -85,7 +85,7 @@ yarn add @thi.ng/dcons ``` -Package sizes (gzipped, pre-treeshake): ESM: 2.12 KB / CJS: 2.21 KB / UMD: 2.31 KB +Package sizes (gzipped, pre-treeshake): ESM: 2.11 KB / CJS: 2.19 KB / UMD: 2.29 KB ## Dependencies diff --git a/packages/distance/README.md b/packages/distance/README.md index d33865b7b7..b9b50467ff 100644 --- a/packages/distance/README.md +++ b/packages/distance/README.md @@ -106,7 +106,7 @@ yarn add @thi.ng/distance ``` -Package sizes (gzipped, pre-treeshake): ESM: 825 bytes / CJS: 929 bytes / UMD: 970 bytes +Package sizes (gzipped, pre-treeshake): ESM: 860 bytes / CJS: 967 bytes / UMD: 1013 bytes ## Dependencies diff --git a/packages/errors/README.md b/packages/errors/README.md index 2c3de0550b..81e1748021 100644 --- a/packages/errors/README.md +++ b/packages/errors/README.md @@ -44,7 +44,7 @@ yarn add @thi.ng/errors ``` -Package sizes (gzipped, pre-treeshake): ESM: 264 bytes / CJS: 340 bytes / UMD: 418 bytes +Package sizes (gzipped, pre-treeshake): ESM: 356 bytes / CJS: 448 bytes / UMD: 508 bytes ## Dependencies diff --git a/packages/math/README.md b/packages/math/README.md index 7e056507b8..546597933c 100644 --- a/packages/math/README.md +++ b/packages/math/README.md @@ -51,7 +51,7 @@ yarn add @thi.ng/math ``` -Package sizes (gzipped, pre-treeshake): ESM: 3.60 KB / CJS: 4.17 KB / UMD: 3.43 KB +Package sizes (gzipped, pre-treeshake): ESM: 3.71 KB / CJS: 4.30 KB / UMD: 3.54 KB ## Dependencies diff --git a/packages/soa/README.md b/packages/soa/README.md index eb8cb34183..ff5e01dead 100644 --- a/packages/soa/README.md +++ b/packages/soa/README.md @@ -73,12 +73,13 @@ yarn add @thi.ng/soa ``` -Package sizes (gzipped, pre-treeshake): ESM: 1.42 KB / CJS: 1.49 KB / UMD: 1.59 KB +Package sizes (gzipped, pre-treeshake): ESM: 1.41 KB / CJS: 1.49 KB / UMD: 1.59 KB ## Dependencies - [@thi.ng/api](https://github.com/thi-ng/umbrella/tree/develop/packages/api) - [@thi.ng/binary](https://github.com/thi-ng/umbrella/tree/develop/packages/binary) +- [@thi.ng/errors](https://github.com/thi-ng/umbrella/tree/develop/packages/errors) - [@thi.ng/transducers-binary](https://github.com/thi-ng/umbrella/tree/develop/packages/transducers-binary) - [@thi.ng/vectors](https://github.com/thi-ng/umbrella/tree/develop/packages/vectors) diff --git a/packages/sparse/README.md b/packages/sparse/README.md index 986f0c862a..9cd8dd34d4 100644 --- a/packages/sparse/README.md +++ b/packages/sparse/README.md @@ -41,11 +41,12 @@ yarn add @thi.ng/sparse ``` -Package sizes (gzipped, pre-treeshake): ESM: 3.57 KB / CJS: 3.67 KB / UMD: 3.73 KB +Package sizes (gzipped, pre-treeshake): ESM: 3.54 KB / CJS: 3.64 KB / UMD: 3.71 KB ## Dependencies - [@thi.ng/api](https://github.com/thi-ng/umbrella/tree/develop/packages/api) +- [@thi.ng/errors](https://github.com/thi-ng/umbrella/tree/develop/packages/errors) - [@thi.ng/transducers](https://github.com/thi-ng/umbrella/tree/develop/packages/transducers) ## API From 15f3ea0e15805bc67ca61bf87ce5e8849a7d8e86 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Wed, 17 Mar 2021 18:54:24 +0000 Subject: [PATCH 25/25] Publish - @thi.ng/adjacency@0.3.7 - @thi.ng/args@0.2.7 - @thi.ng/arrays@0.10.9 - @thi.ng/associative@5.1.7 - @thi.ng/atom@4.1.34 - @thi.ng/bencode@0.3.57 - @thi.ng/bitfield@0.4.6 - @thi.ng/bitstream@1.1.38 - @thi.ng/cache@1.0.77 - @thi.ng/color@3.1.6 - @thi.ng/colored-noise@0.1.21 - @thi.ng/compose@1.4.30 - @thi.ng/csp@1.1.57 - @thi.ng/csv@0.1.17 - @thi.ng/dcons@2.3.17 - @thi.ng/defmulti@1.3.11 - @thi.ng/dgraph-dot@0.1.45 - @thi.ng/dgraph@1.3.16 - @thi.ng/distance@0.1.9 - @thi.ng/dsp-io-wav@0.1.47 - @thi.ng/dsp@3.0.13 - @thi.ng/ecs@0.5.7 - @thi.ng/egf@0.3.19 - @thi.ng/errors@1.3.0 - @thi.ng/fsm@2.4.44 - @thi.ng/fuzzy-viz@0.1.15 - @thi.ng/fuzzy@0.1.9 - @thi.ng/geom-accel@2.1.42 - @thi.ng/geom-api@2.0.13 - @thi.ng/geom-arc@0.3.31 - @thi.ng/geom-clip-line@1.2.27 - @thi.ng/geom-clip-poly@1.0.52 - @thi.ng/geom-closest-point@0.5.18 - @thi.ng/geom-fuzz@0.1.41 - @thi.ng/geom-hull@0.0.84 - @thi.ng/geom-io-obj@0.1.42 - @thi.ng/geom-isec@0.7.16 - @thi.ng/geom-isoline@0.1.82 - @thi.ng/geom-poly-utils@0.3.13 - @thi.ng/geom-resample@0.2.64 - @thi.ng/geom-splines@0.5.51 - @thi.ng/geom-subdiv-curve@0.1.82 - @thi.ng/geom-tessellate@0.2.65 - @thi.ng/geom-voronoi@0.2.27 - @thi.ng/geom@2.1.8 - @thi.ng/gp@0.2.13 - @thi.ng/grid-iterators@0.4.29 - @thi.ng/hdiff@0.1.34 - @thi.ng/hdom-canvas@3.0.39 - @thi.ng/hdom-components@4.0.31 - @thi.ng/hdom-mock@1.1.56 - @thi.ng/hdom@8.2.24 - @thi.ng/heaps@1.2.38 - @thi.ng/hiccup-canvas@1.1.29 - @thi.ng/hiccup-carbon-icons@2.0.17 - @thi.ng/hiccup-css@1.1.56 - @thi.ng/hiccup-markdown@1.3.8 - @thi.ng/hiccup-svg@3.7.14 - @thi.ng/hiccup@3.6.14 - @thi.ng/iges@1.1.67 - @thi.ng/imgui@0.2.61 - @thi.ng/interceptors@2.2.45 - @thi.ng/intervals@3.0.6 - @thi.ng/iterators@5.1.57 - @thi.ng/ksuid@0.1.8 - @thi.ng/leb128@1.0.51 - @thi.ng/lsys@0.2.79 - @thi.ng/malloc@5.0.6 - @thi.ng/math@3.3.0 - @thi.ng/matrices@0.6.51 - @thi.ng/morton@2.0.38 - @thi.ng/oquery@0.2.11 - @thi.ng/parse@0.9.19 - @thi.ng/paths@4.2.6 - @thi.ng/pixel-io-netpbm@0.1.6 - @thi.ng/pixel@0.8.0 - @thi.ng/pointfree-lang@1.4.27 - @thi.ng/pointfree@2.0.28 - @thi.ng/poisson@1.1.35 - @thi.ng/porter-duff@0.1.44 - @thi.ng/ramp@0.1.53 - @thi.ng/range-coder@1.0.76 - @thi.ng/rdom-canvas@0.1.37 - @thi.ng/rdom-components@0.1.34 - @thi.ng/rdom@0.4.6 - @thi.ng/resolve-map@4.2.19 - @thi.ng/rle-pack@2.1.38 - @thi.ng/router@2.0.46 - @thi.ng/rstream-csp@2.0.60 - @thi.ng/rstream-dot@1.2.7 - @thi.ng/rstream-gestures@3.0.14 - @thi.ng/rstream-graph@3.2.61 - @thi.ng/rstream-log-file@0.1.82 - @thi.ng/rstream-log@3.2.11 - @thi.ng/rstream-query@1.1.67 - @thi.ng/rstream@6.0.1 - @thi.ng/sax@1.1.56 - @thi.ng/scenegraph@0.3.25 - @thi.ng/sexpr@0.2.40 - @thi.ng/shader-ast-glsl@0.2.28 - @thi.ng/shader-ast-js@0.5.27 - @thi.ng/shader-ast-stdlib@0.5.20 - @thi.ng/shader-ast@0.8.6 - @thi.ng/simd@0.4.24 - @thi.ng/soa@0.2.7 - @thi.ng/sparse@0.1.72 - @thi.ng/strings@1.15.6 - @thi.ng/system@0.2.45 - @thi.ng/text-canvas@0.4.12 - @thi.ng/transducers-binary@0.6.13 - @thi.ng/transducers-fsm@1.1.56 - @thi.ng/transducers-hdom@2.0.88 - @thi.ng/transducers-patch@0.2.13 - @thi.ng/transducers-stats@1.1.57 - @thi.ng/transducers@7.6.7 - @thi.ng/vector-pools@2.0.7 - @thi.ng/vectors@5.1.5 - @thi.ng/viz@0.2.17 - @thi.ng/webgl-msdf@0.1.80 - @thi.ng/webgl-shadertoy@0.2.67 - @thi.ng/webgl@4.0.7 - @thi.ng/zipper@0.1.43 --- packages/adjacency/CHANGELOG.md | 8 ++++ packages/adjacency/package.json | 14 +++---- packages/args/CHANGELOG.md | 8 ++++ packages/args/package.json | 6 +-- packages/arrays/CHANGELOG.md | 8 ++++ packages/arrays/package.json | 4 +- packages/associative/CHANGELOG.md | 8 ++++ packages/associative/package.json | 8 ++-- packages/atom/CHANGELOG.md | 8 ++++ packages/atom/package.json | 6 +-- packages/bencode/CHANGELOG.md | 8 ++++ packages/bencode/package.json | 12 +++--- packages/bitfield/CHANGELOG.md | 8 ++++ packages/bitfield/package.json | 6 +-- packages/bitstream/CHANGELOG.md | 8 ++++ packages/bitstream/package.json | 4 +- packages/cache/CHANGELOG.md | 8 ++++ packages/cache/package.json | 6 +-- packages/color/CHANGELOG.md | 8 ++++ packages/color/package.json | 18 ++++----- packages/colored-noise/CHANGELOG.md | 8 ++++ packages/colored-noise/package.json | 12 +++--- packages/compose/CHANGELOG.md | 8 ++++ packages/compose/package.json | 4 +- packages/csp/CHANGELOG.md | 8 ++++ packages/csp/package.json | 10 ++--- packages/csv/CHANGELOG.md | 8 ++++ packages/csv/package.json | 6 +-- packages/dcons/CHANGELOG.md | 8 ++++ packages/dcons/package.json | 6 +-- packages/defmulti/CHANGELOG.md | 8 ++++ packages/defmulti/package.json | 4 +- packages/dgraph-dot/CHANGELOG.md | 8 ++++ packages/dgraph-dot/package.json | 4 +- packages/dgraph/CHANGELOG.md | 8 ++++ packages/dgraph/package.json | 8 ++-- packages/distance/CHANGELOG.md | 11 ++++++ packages/distance/package.json | 8 ++-- packages/dsp-io-wav/CHANGELOG.md | 8 ++++ packages/dsp-io-wav/package.json | 6 +-- packages/dsp/CHANGELOG.md | 8 ++++ packages/dsp/package.json | 8 ++-- packages/ecs/CHANGELOG.md | 8 ++++ packages/ecs/package.json | 10 ++--- packages/egf/CHANGELOG.md | 8 ++++ packages/egf/package.json | 10 ++--- packages/errors/CHANGELOG.md | 12 ++++++ packages/errors/package.json | 2 +- packages/fsm/CHANGELOG.md | 8 ++++ packages/fsm/package.json | 10 ++--- packages/fuzzy-viz/CHANGELOG.md | 8 ++++ packages/fuzzy-viz/package.json | 14 +++---- packages/fuzzy/CHANGELOG.md | 8 ++++ packages/fuzzy/package.json | 4 +- packages/geom-accel/CHANGELOG.md | 8 ++++ packages/geom-accel/package.json | 16 ++++---- packages/geom-api/CHANGELOG.md | 8 ++++ packages/geom-api/package.json | 4 +- packages/geom-arc/CHANGELOG.md | 8 ++++ packages/geom-arc/package.json | 10 ++--- packages/geom-clip-line/CHANGELOG.md | 8 ++++ packages/geom-clip-line/package.json | 6 +-- 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 | 6 +-- packages/geom-fuzz/CHANGELOG.md | 8 ++++ packages/geom-fuzz/package.json | 20 +++++----- 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 | 4 +- packages/geom-isec/CHANGELOG.md | 8 ++++ packages/geom-isec/package.json | 10 ++--- packages/geom-isoline/CHANGELOG.md | 8 ++++ packages/geom-isoline/package.json | 6 +-- packages/geom-poly-utils/CHANGELOG.md | 8 ++++ packages/geom-poly-utils/package.json | 10 ++--- packages/geom-resample/CHANGELOG.md | 8 ++++ packages/geom-resample/package.json | 10 ++--- packages/geom-splines/CHANGELOG.md | 8 ++++ packages/geom-splines/package.json | 12 +++--- packages/geom-subdiv-curve/CHANGELOG.md | 8 ++++ packages/geom-subdiv-curve/package.json | 8 ++-- packages/geom-tessellate/CHANGELOG.md | 8 ++++ packages/geom-tessellate/package.json | 12 +++--- packages/geom-voronoi/CHANGELOG.md | 8 ++++ packages/geom-voronoi/package.json | 14 +++---- packages/geom/CHANGELOG.md | 8 ++++ packages/geom/package.json | 46 +++++++++++------------ packages/gp/CHANGELOG.md | 8 ++++ packages/gp/package.json | 8 ++-- packages/grid-iterators/CHANGELOG.md | 8 ++++ packages/grid-iterators/package.json | 8 ++-- packages/hdiff/CHANGELOG.md | 8 ++++ packages/hdiff/package.json | 8 ++-- packages/hdom-canvas/CHANGELOG.md | 8 ++++ packages/hdom-canvas/package.json | 6 +-- packages/hdom-components/CHANGELOG.md | 8 ++++ packages/hdom-components/package.json | 8 ++-- packages/hdom-mock/CHANGELOG.md | 8 ++++ packages/hdom-mock/package.json | 4 +- packages/hdom/CHANGELOG.md | 8 ++++ packages/hdom/package.json | 8 ++-- packages/heaps/CHANGELOG.md | 11 ++++++ packages/heaps/package.json | 2 +- packages/hiccup-canvas/CHANGELOG.md | 8 ++++ packages/hiccup-canvas/package.json | 8 ++-- 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 | 6 +-- packages/hiccup-markdown/CHANGELOG.md | 8 ++++ packages/hiccup-markdown/package.json | 18 ++++----- packages/hiccup-svg/CHANGELOG.md | 8 ++++ packages/hiccup-svg/package.json | 4 +- packages/hiccup/CHANGELOG.md | 8 ++++ packages/hiccup/package.json | 6 +-- packages/iges/CHANGELOG.md | 8 ++++ packages/iges/package.json | 10 ++--- packages/imgui/CHANGELOG.md | 8 ++++ packages/imgui/package.json | 16 ++++---- packages/interceptors/CHANGELOG.md | 8 ++++ packages/interceptors/package.json | 8 ++-- packages/intervals/CHANGELOG.md | 8 ++++ packages/intervals/package.json | 4 +- packages/iterators/CHANGELOG.md | 8 ++++ packages/iterators/package.json | 6 +-- packages/ksuid/CHANGELOG.md | 8 ++++ packages/ksuid/package.json | 4 +- packages/leb128/CHANGELOG.md | 8 ++++ packages/leb128/package.json | 6 +-- packages/lsys/CHANGELOG.md | 8 ++++ packages/lsys/package.json | 12 +++--- packages/malloc/CHANGELOG.md | 8 ++++ packages/malloc/package.json | 4 +- packages/math/CHANGELOG.md | 16 ++++++++ packages/math/package.json | 2 +- packages/matrices/CHANGELOG.md | 8 ++++ packages/matrices/package.json | 6 +-- packages/morton/CHANGELOG.md | 8 ++++ packages/morton/package.json | 4 +- packages/oquery/CHANGELOG.md | 8 ++++ packages/oquery/package.json | 4 +- packages/parse/CHANGELOG.md | 8 ++++ packages/parse/package.json | 8 ++-- packages/paths/CHANGELOG.md | 8 ++++ packages/paths/package.json | 4 +- packages/pixel-io-netpbm/CHANGELOG.md | 8 ++++ packages/pixel-io-netpbm/package.json | 6 +-- packages/pixel/CHANGELOG.md | 14 +++++++ packages/pixel/package.json | 6 +-- packages/pointfree-lang/CHANGELOG.md | 8 ++++ packages/pointfree-lang/package.json | 6 +-- packages/pointfree/CHANGELOG.md | 8 ++++ packages/pointfree/package.json | 6 +-- packages/poisson/CHANGELOG.md | 8 ++++ packages/poisson/package.json | 8 ++-- packages/porter-duff/CHANGELOG.md | 8 ++++ packages/porter-duff/package.json | 4 +- packages/ramp/CHANGELOG.md | 8 ++++ packages/ramp/package.json | 10 ++--- packages/range-coder/CHANGELOG.md | 8 ++++ packages/range-coder/package.json | 6 +-- packages/rdom-canvas/CHANGELOG.md | 8 ++++ packages/rdom-canvas/package.json | 10 ++--- packages/rdom-components/CHANGELOG.md | 8 ++++ packages/rdom-components/package.json | 12 +++--- packages/rdom/CHANGELOG.md | 8 ++++ packages/rdom/package.json | 12 +++--- packages/resolve-map/CHANGELOG.md | 8 ++++ packages/resolve-map/package.json | 6 +-- packages/rle-pack/CHANGELOG.md | 8 ++++ packages/rle-pack/package.json | 6 +-- packages/router/CHANGELOG.md | 8 ++++ packages/router/package.json | 4 +- packages/rstream-csp/CHANGELOG.md | 8 ++++ packages/rstream-csp/package.json | 6 +-- packages/rstream-dot/CHANGELOG.md | 8 ++++ packages/rstream-dot/package.json | 8 ++-- packages/rstream-gestures/CHANGELOG.md | 8 ++++ packages/rstream-gestures/package.json | 8 ++-- packages/rstream-graph/CHANGELOG.md | 8 ++++ packages/rstream-graph/package.json | 14 +++---- 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 | 10 ++--- packages/rstream-query/CHANGELOG.md | 8 ++++ packages/rstream-query/package.json | 14 +++---- packages/rstream/CHANGELOG.md | 8 ++++ packages/rstream/package.json | 12 +++--- packages/sax/CHANGELOG.md | 8 ++++ packages/sax/package.json | 6 +-- packages/scenegraph/CHANGELOG.md | 8 ++++ packages/scenegraph/package.json | 6 +-- packages/sexpr/CHANGELOG.md | 8 ++++ packages/sexpr/package.json | 4 +- packages/shader-ast-glsl/CHANGELOG.md | 8 ++++ packages/shader-ast-glsl/package.json | 6 +-- packages/shader-ast-js/CHANGELOG.md | 8 ++++ packages/shader-ast-js/package.json | 14 +++---- packages/shader-ast-stdlib/CHANGELOG.md | 8 ++++ packages/shader-ast-stdlib/package.json | 4 +- packages/shader-ast/CHANGELOG.md | 8 ++++ packages/shader-ast/package.json | 8 ++-- packages/simd/CHANGELOG.md | 8 ++++ packages/simd/package.json | 4 +- packages/soa/CHANGELOG.md | 8 ++++ packages/soa/package.json | 8 ++-- packages/sparse/CHANGELOG.md | 8 ++++ packages/sparse/package.json | 6 +-- packages/strings/CHANGELOG.md | 8 ++++ packages/strings/package.json | 4 +- packages/system/CHANGELOG.md | 8 ++++ packages/system/package.json | 4 +- packages/text-canvas/CHANGELOG.md | 8 ++++ packages/text-canvas/package.json | 12 +++--- packages/transducers-binary/CHANGELOG.md | 8 ++++ packages/transducers-binary/package.json | 8 ++-- packages/transducers-fsm/CHANGELOG.md | 8 ++++ packages/transducers-fsm/package.json | 4 +- packages/transducers-hdom/CHANGELOG.md | 8 ++++ packages/transducers-hdom/package.json | 8 ++-- packages/transducers-patch/CHANGELOG.md | 8 ++++ packages/transducers-patch/package.json | 8 ++-- packages/transducers-stats/CHANGELOG.md | 8 ++++ packages/transducers-stats/package.json | 8 ++-- packages/transducers/CHANGELOG.md | 8 ++++ packages/transducers/package.json | 10 ++--- packages/vector-pools/CHANGELOG.md | 8 ++++ packages/vector-pools/package.json | 8 ++-- packages/vectors/CHANGELOG.md | 8 ++++ packages/vectors/package.json | 8 ++-- packages/viz/CHANGELOG.md | 8 ++++ packages/viz/package.json | 12 +++--- packages/webgl-msdf/CHANGELOG.md | 8 ++++ packages/webgl-msdf/package.json | 12 +++--- packages/webgl-shadertoy/CHANGELOG.md | 8 ++++ packages/webgl-shadertoy/package.json | 8 ++-- packages/webgl/CHANGELOG.md | 8 ++++ packages/webgl/package.json | 22 +++++------ packages/zipper/CHANGELOG.md | 8 ++++ packages/zipper/package.json | 4 +- 244 files changed, 1500 insertions(+), 500 deletions(-) diff --git a/packages/adjacency/CHANGELOG.md b/packages/adjacency/CHANGELOG.md index 59a57268d6..bd4cdc9bc6 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.3.7](https://github.com/thi-ng/umbrella/compare/@thi.ng/adjacency@0.3.6...@thi.ng/adjacency@0.3.7) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/adjacency + + + + + ## [0.3.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/adjacency@0.3.5...@thi.ng/adjacency@0.3.6) (2021-03-12) **Note:** Version bump only for package @thi.ng/adjacency diff --git a/packages/adjacency/package.json b/packages/adjacency/package.json index 189ad9303a..9a138e6db3 100644 --- a/packages/adjacency/package.json +++ b/packages/adjacency/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/adjacency", - "version": "0.3.6", + "version": "0.3.7", "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.13.1", - "@thi.ng/vectors": "^5.1.4", + "@thi.ng/vectors": "^5.1.5", "@types/mocha": "^8.2.0", "@types/node": "^14.14.14", "mocha": "^8.3.0", @@ -51,11 +51,11 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/arrays": "^0.10.8", - "@thi.ng/bitfield": "^0.4.5", - "@thi.ng/dcons": "^2.3.16", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/sparse": "^0.1.71" + "@thi.ng/arrays": "^0.10.9", + "@thi.ng/bitfield": "^0.4.6", + "@thi.ng/dcons": "^2.3.17", + "@thi.ng/errors": "^1.3.0", + "@thi.ng/sparse": "^0.1.72" }, "files": [ "*.js", diff --git a/packages/args/CHANGELOG.md b/packages/args/CHANGELOG.md index 6f4cd73215..48a2e4e869 100644 --- a/packages/args/CHANGELOG.md +++ b/packages/args/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.7](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@0.2.6...@thi.ng/args@0.2.7) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/args + + + + + ## [0.2.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/args@0.2.5...@thi.ng/args@0.2.6) (2021-03-12) **Note:** Version bump only for package @thi.ng/args diff --git a/packages/args/package.json b/packages/args/package.json index 7506ef1559..af5948c5db 100644 --- a/packages/args/package.json +++ b/packages/args/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/args", - "version": "0.2.6", + "version": "0.2.7", "description": "Declarative, functional & typechecked CLI argument/options parser, value coercions etc.", "module": "./index.js", "main": "./lib/index.js", @@ -51,8 +51,8 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/strings": "^1.15.5" + "@thi.ng/errors": "^1.3.0", + "@thi.ng/strings": "^1.15.6" }, "files": [ "*.js", diff --git a/packages/arrays/CHANGELOG.md b/packages/arrays/CHANGELOG.md index b4db9785f8..c4d2a3b086 100644 --- a/packages/arrays/CHANGELOG.md +++ b/packages/arrays/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.10.9](https://github.com/thi-ng/umbrella/compare/@thi.ng/arrays@0.10.8...@thi.ng/arrays@0.10.9) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/arrays + + + + + ## [0.10.8](https://github.com/thi-ng/umbrella/compare/@thi.ng/arrays@0.10.7...@thi.ng/arrays@0.10.8) (2021-03-12) **Note:** Version bump only for package @thi.ng/arrays diff --git a/packages/arrays/package.json b/packages/arrays/package.json index 5ae1af43c0..00e9f95202 100644 --- a/packages/arrays/package.json +++ b/packages/arrays/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/arrays", - "version": "0.10.8", + "version": "0.10.9", "description": "Array / Arraylike utilities", "module": "./index.js", "main": "./lib/index.js", @@ -53,7 +53,7 @@ "@thi.ng/checks": "^2.9.5", "@thi.ng/compare": "^1.3.28", "@thi.ng/equiv": "^1.0.41", - "@thi.ng/errors": "^1.2.32", + "@thi.ng/errors": "^1.3.0", "@thi.ng/random": "^2.3.6" }, "files": [ diff --git a/packages/associative/CHANGELOG.md b/packages/associative/CHANGELOG.md index b7ee410ae8..f501e684f1 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.1.7](https://github.com/thi-ng/umbrella/compare/@thi.ng/associative@5.1.6...@thi.ng/associative@5.1.7) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/associative + + + + + ## [5.1.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/associative@5.1.5...@thi.ng/associative@5.1.6) (2021-03-12) **Note:** Version bump only for package @thi.ng/associative diff --git a/packages/associative/package.json b/packages/associative/package.json index 5ad04f4b07..8cd3308347 100644 --- a/packages/associative/package.json +++ b/packages/associative/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/associative", - "version": "5.1.6", + "version": "5.1.7", "description": "Alternative Map and Set implementations with customizable equality semantics & supporting operations", "module": "./index.js", "main": "./lib/index.js", @@ -53,10 +53,10 @@ "@thi.ng/binary": "^2.2.4", "@thi.ng/checks": "^2.9.5", "@thi.ng/compare": "^1.3.28", - "@thi.ng/dcons": "^2.3.16", + "@thi.ng/dcons": "^2.3.17", "@thi.ng/equiv": "^1.0.41", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/transducers": "^7.6.6", + "@thi.ng/errors": "^1.3.0", + "@thi.ng/transducers": "^7.6.7", "tslib": "^2.1.0" }, "files": [ diff --git a/packages/atom/CHANGELOG.md b/packages/atom/CHANGELOG.md index 0da26de1d0..3eae66a7b4 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.34](https://github.com/thi-ng/umbrella/compare/@thi.ng/atom@4.1.33...@thi.ng/atom@4.1.34) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/atom + + + + + ## [4.1.33](https://github.com/thi-ng/umbrella/compare/@thi.ng/atom@4.1.32...@thi.ng/atom@4.1.33) (2021-03-12) **Note:** Version bump only for package @thi.ng/atom diff --git a/packages/atom/package.json b/packages/atom/package.json index 53d358f305..1e2a23e221 100644 --- a/packages/atom/package.json +++ b/packages/atom/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/atom", - "version": "4.1.33", + "version": "4.1.34", "description": "Mutable wrappers for nested immutable values with optional undo/redo history and transaction support", "module": "./index.js", "main": "./lib/index.js", @@ -51,8 +51,8 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/equiv": "^1.0.41", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/paths": "^4.2.5", + "@thi.ng/errors": "^1.3.0", + "@thi.ng/paths": "^4.2.6", "tslib": "^2.1.0" }, "files": [ diff --git a/packages/bencode/CHANGELOG.md b/packages/bencode/CHANGELOG.md index 26ad1e1a69..be0258938f 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.57](https://github.com/thi-ng/umbrella/compare/@thi.ng/bencode@0.3.56...@thi.ng/bencode@0.3.57) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/bencode + + + + + ## [0.3.56](https://github.com/thi-ng/umbrella/compare/@thi.ng/bencode@0.3.55...@thi.ng/bencode@0.3.56) (2021-03-12) **Note:** Version bump only for package @thi.ng/bencode diff --git a/packages/bencode/package.json b/packages/bencode/package.json index 505a58f4ac..e4f7a76757 100644 --- a/packages/bencode/package.json +++ b/packages/bencode/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/bencode", - "version": "0.3.56", + "version": "0.3.57", "description": "Bencode binary encoder / decoder with optional UTF8 encoding & floating point support", "module": "./index.js", "main": "./lib/index.js", @@ -50,12 +50,12 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/arrays": "^0.10.8", + "@thi.ng/arrays": "^0.10.9", "@thi.ng/checks": "^2.9.5", - "@thi.ng/defmulti": "^1.3.10", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/transducers": "^7.6.6", - "@thi.ng/transducers-binary": "^0.6.12" + "@thi.ng/defmulti": "^1.3.11", + "@thi.ng/errors": "^1.3.0", + "@thi.ng/transducers": "^7.6.7", + "@thi.ng/transducers-binary": "^0.6.13" }, "files": [ "*.js", diff --git a/packages/bitfield/CHANGELOG.md b/packages/bitfield/CHANGELOG.md index dac488c962..abeea9a8e5 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.4.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/bitfield@0.4.5...@thi.ng/bitfield@0.4.6) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/bitfield + + + + + ## [0.4.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/bitfield@0.4.4...@thi.ng/bitfield@0.4.5) (2021-03-12) **Note:** Version bump only for package @thi.ng/bitfield diff --git a/packages/bitfield/package.json b/packages/bitfield/package.json index 7a8da8d936..4c6054db78 100644 --- a/packages/bitfield/package.json +++ b/packages/bitfield/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/bitfield", - "version": "0.4.5", + "version": "0.4.6", "description": "1D / 2D bit field implementations", "module": "./index.js", "main": "./lib/index.js", @@ -51,8 +51,8 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/binary": "^2.2.4", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/strings": "^1.15.5" + "@thi.ng/errors": "^1.3.0", + "@thi.ng/strings": "^1.15.6" }, "files": [ "*.js", diff --git a/packages/bitstream/CHANGELOG.md b/packages/bitstream/CHANGELOG.md index 5819d67099..6470ac2e81 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.38](https://github.com/thi-ng/umbrella/compare/@thi.ng/bitstream@1.1.37...@thi.ng/bitstream@1.1.38) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/bitstream + + + + + ## [1.1.37](https://github.com/thi-ng/umbrella/compare/@thi.ng/bitstream@1.1.36...@thi.ng/bitstream@1.1.37) (2021-03-12) **Note:** Version bump only for package @thi.ng/bitstream diff --git a/packages/bitstream/package.json b/packages/bitstream/package.json index 29ba732794..63a795466b 100644 --- a/packages/bitstream/package.json +++ b/packages/bitstream/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/bitstream", - "version": "1.1.37", + "version": "1.1.38", "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.2.3" }, "dependencies": { - "@thi.ng/errors": "^1.2.32" + "@thi.ng/errors": "^1.3.0" }, "files": [ "*.js", diff --git a/packages/cache/CHANGELOG.md b/packages/cache/CHANGELOG.md index 921b02256c..fe1b78f333 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.77](https://github.com/thi-ng/umbrella/compare/@thi.ng/cache@1.0.76...@thi.ng/cache@1.0.77) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/cache + + + + + ## [1.0.76](https://github.com/thi-ng/umbrella/compare/@thi.ng/cache@1.0.75...@thi.ng/cache@1.0.76) (2021-03-12) **Note:** Version bump only for package @thi.ng/cache diff --git a/packages/cache/package.json b/packages/cache/package.json index a19b14e414..84e6a1cf0a 100644 --- a/packages/cache/package.json +++ b/packages/cache/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/cache", - "version": "1.0.76", + "version": "1.0.77", "description": "In-memory cache implementations with ES6 Map-like API and different eviction strategies", "module": "./index.js", "main": "./lib/index.js", @@ -50,8 +50,8 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/dcons": "^2.3.16", - "@thi.ng/transducers": "^7.6.6" + "@thi.ng/dcons": "^2.3.17", + "@thi.ng/transducers": "^7.6.7" }, "files": [ "*.js", diff --git a/packages/color/CHANGELOG.md b/packages/color/CHANGELOG.md index 34c6168f7b..2d55f6067c 100644 --- a/packages/color/CHANGELOG.md +++ b/packages/color/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.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/color@3.1.5...@thi.ng/color@3.1.6) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/color + + + + + ## [3.1.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/color@3.1.4...@thi.ng/color@3.1.5) (2021-03-12) **Note:** Version bump only for package @thi.ng/color diff --git a/packages/color/package.json b/packages/color/package.json index 2c99fa9294..bd8a769cc3 100644 --- a/packages/color/package.json +++ b/packages/color/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/color", - "version": "3.1.5", + "version": "3.1.6", "description": "Array-based color types, CSS parsing, conversions, transformations, declarative theme generation, gradients, presets", "module": "./index.js", "main": "./lib/index.js", @@ -51,18 +51,18 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/arrays": "^0.10.8", + "@thi.ng/arrays": "^0.10.9", "@thi.ng/binary": "^2.2.4", "@thi.ng/checks": "^2.9.5", "@thi.ng/compare": "^1.3.28", - "@thi.ng/compose": "^1.4.29", - "@thi.ng/defmulti": "^1.3.10", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/math": "^3.2.5", + "@thi.ng/compose": "^1.4.30", + "@thi.ng/defmulti": "^1.3.11", + "@thi.ng/errors": "^1.3.0", + "@thi.ng/math": "^3.3.0", "@thi.ng/random": "^2.3.6", - "@thi.ng/strings": "^1.15.5", - "@thi.ng/transducers": "^7.6.6", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/strings": "^1.15.6", + "@thi.ng/transducers": "^7.6.7", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/colored-noise/CHANGELOG.md b/packages/colored-noise/CHANGELOG.md index 0747fb0f9c..6fec4ad988 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.21](https://github.com/thi-ng/umbrella/compare/@thi.ng/colored-noise@0.1.20...@thi.ng/colored-noise@0.1.21) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/colored-noise + + + + + ## [0.1.20](https://github.com/thi-ng/umbrella/compare/@thi.ng/colored-noise@0.1.19...@thi.ng/colored-noise@0.1.20) (2021-03-12) **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 c6efa8b0d8..48112f9958 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.20", + "version": "0.1.21", "description": "Customizable O(1) ES6 generators for colored noise", "module": "./index.js", "main": "./lib/index.js", @@ -41,11 +41,11 @@ "@istanbuljs/nyc-config-typescript": "^1.0.1", "@microsoft/api-extractor": "^7.13.1", "@thi.ng/api": "^7.1.4", - "@thi.ng/dsp": "^3.0.12", - "@thi.ng/dsp-io-wav": "^0.1.46", - "@thi.ng/text-canvas": "^0.4.11", - "@thi.ng/transducers": "^7.6.6", - "@thi.ng/vectors": "^5.1.4", + "@thi.ng/dsp": "^3.0.13", + "@thi.ng/dsp-io-wav": "^0.1.47", + "@thi.ng/text-canvas": "^0.4.12", + "@thi.ng/transducers": "^7.6.7", + "@thi.ng/vectors": "^5.1.5", "@types/mocha": "^8.2.0", "@types/node": "^14.14.14", "mocha": "^8.3.0", diff --git a/packages/compose/CHANGELOG.md b/packages/compose/CHANGELOG.md index 018d14a7c2..f9f90755bb 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.30](https://github.com/thi-ng/umbrella/compare/@thi.ng/compose@1.4.29...@thi.ng/compose@1.4.30) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/compose + + + + + ## [1.4.29](https://github.com/thi-ng/umbrella/compare/@thi.ng/compose@1.4.28...@thi.ng/compose@1.4.29) (2021-03-12) **Note:** Version bump only for package @thi.ng/compose diff --git a/packages/compose/package.json b/packages/compose/package.json index a5f2508c54..f12ab53ef0 100644 --- a/packages/compose/package.json +++ b/packages/compose/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/compose", - "version": "1.4.29", + "version": "1.4.30", "description": "Optimized functional composition helpers", "module": "./index.js", "main": "./lib/index.js", @@ -50,7 +50,7 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/errors": "^1.2.32" + "@thi.ng/errors": "^1.3.0" }, "files": [ "*.js", diff --git a/packages/csp/CHANGELOG.md b/packages/csp/CHANGELOG.md index bc20ecc890..748e0aa781 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.57](https://github.com/thi-ng/umbrella/compare/@thi.ng/csp@1.1.56...@thi.ng/csp@1.1.57) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/csp + + + + + ## [1.1.56](https://github.com/thi-ng/umbrella/compare/@thi.ng/csp@1.1.55...@thi.ng/csp@1.1.56) (2021-03-12) **Note:** Version bump only for package @thi.ng/csp diff --git a/packages/csp/package.json b/packages/csp/package.json index 07cd98dd08..b14f6e60a2 100644 --- a/packages/csp/package.json +++ b/packages/csp/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/csp", - "version": "1.1.56", + "version": "1.1.57", "description": "ES6 promise based CSP primitives & operations", "module": "./index.js", "main": "./lib/index.js", @@ -54,11 +54,11 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/arrays": "^0.10.8", + "@thi.ng/arrays": "^0.10.9", "@thi.ng/checks": "^2.9.5", - "@thi.ng/dcons": "^2.3.16", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/transducers": "^7.6.6" + "@thi.ng/dcons": "^2.3.17", + "@thi.ng/errors": "^1.3.0", + "@thi.ng/transducers": "^7.6.7" }, "files": [ "*.js", diff --git a/packages/csv/CHANGELOG.md b/packages/csv/CHANGELOG.md index 1ca1be766a..3fef02c300 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.17](https://github.com/thi-ng/umbrella/compare/@thi.ng/csv@0.1.16...@thi.ng/csv@0.1.17) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/csv + + + + + ## [0.1.16](https://github.com/thi-ng/umbrella/compare/@thi.ng/csv@0.1.15...@thi.ng/csv@0.1.16) (2021-03-12) **Note:** Version bump only for package @thi.ng/csv diff --git a/packages/csv/package.json b/packages/csv/package.json index 50797b3df5..6f93e8a8c6 100644 --- a/packages/csv/package.json +++ b/packages/csv/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/csv", - "version": "0.1.16", + "version": "0.1.17", "description": "Customizable, transducer-based CSV parser/object mapper and transformer", "module": "./index.js", "main": "./lib/index.js", @@ -51,8 +51,8 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/strings": "^1.15.5", - "@thi.ng/transducers": "^7.6.6" + "@thi.ng/strings": "^1.15.6", + "@thi.ng/transducers": "^7.6.7" }, "files": [ "*.js", diff --git a/packages/dcons/CHANGELOG.md b/packages/dcons/CHANGELOG.md index 1d211bda9e..1ccac71e11 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.17](https://github.com/thi-ng/umbrella/compare/@thi.ng/dcons@2.3.16...@thi.ng/dcons@2.3.17) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/dcons + + + + + ## [2.3.16](https://github.com/thi-ng/umbrella/compare/@thi.ng/dcons@2.3.15...@thi.ng/dcons@2.3.16) (2021-03-12) **Note:** Version bump only for package @thi.ng/dcons diff --git a/packages/dcons/package.json b/packages/dcons/package.json index 0e64b02db2..c713a1b381 100644 --- a/packages/dcons/package.json +++ b/packages/dcons/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/dcons", - "version": "2.3.16", + "version": "2.3.17", "description": "Double-linked lists with comprehensive set of operations (incl. optional self-organizing behaviors)", "module": "./index.js", "main": "./lib/index.js", @@ -53,9 +53,9 @@ "@thi.ng/checks": "^2.9.5", "@thi.ng/compare": "^1.3.28", "@thi.ng/equiv": "^1.0.41", - "@thi.ng/errors": "^1.2.32", + "@thi.ng/errors": "^1.3.0", "@thi.ng/random": "^2.3.6", - "@thi.ng/transducers": "^7.6.6" + "@thi.ng/transducers": "^7.6.7" }, "files": [ "*.js", diff --git a/packages/defmulti/CHANGELOG.md b/packages/defmulti/CHANGELOG.md index ae938cf2a0..e1dffdb0eb 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.11](https://github.com/thi-ng/umbrella/compare/@thi.ng/defmulti@1.3.10...@thi.ng/defmulti@1.3.11) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/defmulti + + + + + ## [1.3.10](https://github.com/thi-ng/umbrella/compare/@thi.ng/defmulti@1.3.9...@thi.ng/defmulti@1.3.10) (2021-03-12) **Note:** Version bump only for package @thi.ng/defmulti diff --git a/packages/defmulti/package.json b/packages/defmulti/package.json index 15708590e4..df3ce7b394 100644 --- a/packages/defmulti/package.json +++ b/packages/defmulti/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/defmulti", - "version": "1.3.10", + "version": "1.3.11", "description": "Dynamic, extensible multiple dispatch via user supplied dispatch function.", "module": "./index.js", "main": "./lib/index.js", @@ -50,7 +50,7 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/errors": "^1.2.32" + "@thi.ng/errors": "^1.3.0" }, "files": [ "*.js", diff --git a/packages/dgraph-dot/CHANGELOG.md b/packages/dgraph-dot/CHANGELOG.md index 3c556f0307..a352344c3f 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.45](https://github.com/thi-ng/umbrella/compare/@thi.ng/dgraph-dot@0.1.44...@thi.ng/dgraph-dot@0.1.45) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/dgraph-dot + + + + + ## [0.1.44](https://github.com/thi-ng/umbrella/compare/@thi.ng/dgraph-dot@0.1.43...@thi.ng/dgraph-dot@0.1.44) (2021-03-12) **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 2178750f31..95cae448f5 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.44", + "version": "0.1.45", "description": "Customizable Graphviz DOT serialization for @thi.ng/dgraph", "module": "./index.js", "main": "./lib/index.js", @@ -50,7 +50,7 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/dgraph": "^1.3.15", + "@thi.ng/dgraph": "^1.3.16", "@thi.ng/dot": "^1.2.30" }, "files": [ diff --git a/packages/dgraph/CHANGELOG.md b/packages/dgraph/CHANGELOG.md index ba36691f72..5e96a0b64b 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.16](https://github.com/thi-ng/umbrella/compare/@thi.ng/dgraph@1.3.15...@thi.ng/dgraph@1.3.16) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/dgraph + + + + + ## [1.3.15](https://github.com/thi-ng/umbrella/compare/@thi.ng/dgraph@1.3.14...@thi.ng/dgraph@1.3.15) (2021-03-12) **Note:** Version bump only for package @thi.ng/dgraph diff --git a/packages/dgraph/package.json b/packages/dgraph/package.json index 77ab497bd2..f0dd9c9749 100644 --- a/packages/dgraph/package.json +++ b/packages/dgraph/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/dgraph", - "version": "1.3.15", + "version": "1.3.16", "description": "Type-agnostic directed acyclic graph (DAG) & graph operations", "module": "./index.js", "main": "./lib/index.js", @@ -50,10 +50,10 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/associative": "^5.1.6", + "@thi.ng/associative": "^5.1.7", "@thi.ng/equiv": "^1.0.41", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/transducers": "^7.6.6" + "@thi.ng/errors": "^1.3.0", + "@thi.ng/transducers": "^7.6.7" }, "files": [ "*.js", diff --git a/packages/distance/CHANGELOG.md b/packages/distance/CHANGELOG.md index b0ae1072e4..6dab071157 100644 --- a/packages/distance/CHANGELOG.md +++ b/packages/distance/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.1.9](https://github.com/thi-ng/umbrella/compare/@thi.ng/distance@0.1.8...@thi.ng/distance@0.1.9) (2021-03-17) + + +### Bug Fixes + +* **distance:** update KNearest ctor & heap handling ([#283](https://github.com/thi-ng/umbrella/issues/283)) ([e7cd6f1](https://github.com/thi-ng/umbrella/commit/e7cd6f134bb05d5d5e37e7e7ba241f984d94d98c)) + + + + + ## [0.1.8](https://github.com/thi-ng/umbrella/compare/@thi.ng/distance@0.1.7...@thi.ng/distance@0.1.8) (2021-03-12) **Note:** Version bump only for package @thi.ng/distance diff --git a/packages/distance/package.json b/packages/distance/package.json index 57f008f6e1..8a84682bb8 100644 --- a/packages/distance/package.json +++ b/packages/distance/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/distance", - "version": "0.1.8", + "version": "0.1.9", "description": "N-dimensional distance metrics & K-nearest neighborhoods for point queries", "module": "./index.js", "main": "./lib/index.js", @@ -50,9 +50,9 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/heaps": "^1.2.37", - "@thi.ng/math": "^3.2.5", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/heaps": "^1.2.38", + "@thi.ng/math": "^3.3.0", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/dsp-io-wav/CHANGELOG.md b/packages/dsp-io-wav/CHANGELOG.md index 468118fa39..c9d305c125 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.47](https://github.com/thi-ng/umbrella/compare/@thi.ng/dsp-io-wav@0.1.46...@thi.ng/dsp-io-wav@0.1.47) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/dsp-io-wav + + + + + ## [0.1.46](https://github.com/thi-ng/umbrella/compare/@thi.ng/dsp-io-wav@0.1.45...@thi.ng/dsp-io-wav@0.1.46) (2021-03-12) **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 b8cf936464..1d0c44f98d 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.46", + "version": "0.1.47", "description": "WAV file format generation", "module": "./index.js", "main": "./lib/index.js", @@ -51,8 +51,8 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/binary": "^2.2.4", - "@thi.ng/transducers": "^7.6.6", - "@thi.ng/transducers-binary": "^0.6.12" + "@thi.ng/transducers": "^7.6.7", + "@thi.ng/transducers-binary": "^0.6.13" }, "files": [ "*.js", diff --git a/packages/dsp/CHANGELOG.md b/packages/dsp/CHANGELOG.md index 1e9105c9aa..e62078d5e6 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.13](https://github.com/thi-ng/umbrella/compare/@thi.ng/dsp@3.0.12...@thi.ng/dsp@3.0.13) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/dsp + + + + + ## [3.0.12](https://github.com/thi-ng/umbrella/compare/@thi.ng/dsp@3.0.11...@thi.ng/dsp@3.0.12) (2021-03-12) **Note:** Version bump only for package @thi.ng/dsp diff --git a/packages/dsp/package.json b/packages/dsp/package.json index c85c5c7c2e..6de211d20f 100644 --- a/packages/dsp/package.json +++ b/packages/dsp/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/dsp", - "version": "3.0.12", + "version": "3.0.13", "description": "Composable signal generators, oscillators, filters, FFT, spectrum, windowing & related DSP utils", "module": "./index.js", "main": "./lib/index.js", @@ -51,10 +51,10 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/math": "^3.2.5", + "@thi.ng/errors": "^1.3.0", + "@thi.ng/math": "^3.3.0", "@thi.ng/random": "^2.3.6", - "@thi.ng/transducers": "^7.6.6" + "@thi.ng/transducers": "^7.6.7" }, "files": [ "*.js", diff --git a/packages/ecs/CHANGELOG.md b/packages/ecs/CHANGELOG.md index ec95a51e7c..245e004ec2 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.5.7](https://github.com/thi-ng/umbrella/compare/@thi.ng/ecs@0.5.6...@thi.ng/ecs@0.5.7) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/ecs + + + + + ## [0.5.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/ecs@0.5.5...@thi.ng/ecs@0.5.6) (2021-03-12) **Note:** Version bump only for package @thi.ng/ecs diff --git a/packages/ecs/package.json b/packages/ecs/package.json index cbcfd8e218..67fb19bda2 100644 --- a/packages/ecs/package.json +++ b/packages/ecs/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/ecs", - "version": "0.5.6", + "version": "0.5.7", "description": "Entity Component System based around typed arrays & sparse sets", "module": "./index.js", "main": "./lib/index.js", @@ -51,13 +51,13 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/associative": "^5.1.6", + "@thi.ng/associative": "^5.1.7", "@thi.ng/binary": "^2.2.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/dcons": "^2.3.16", + "@thi.ng/dcons": "^2.3.17", "@thi.ng/idgen": "^0.2.35", - "@thi.ng/malloc": "^5.0.5", - "@thi.ng/transducers": "^7.6.6", + "@thi.ng/malloc": "^5.0.6", + "@thi.ng/transducers": "^7.6.7", "tslib": "^2.1.0" }, "files": [ diff --git a/packages/egf/CHANGELOG.md b/packages/egf/CHANGELOG.md index 0b56c8e1da..374ef7aa37 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.19](https://github.com/thi-ng/umbrella/compare/@thi.ng/egf@0.3.18...@thi.ng/egf@0.3.19) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/egf + + + + + ## [0.3.18](https://github.com/thi-ng/umbrella/compare/@thi.ng/egf@0.3.17...@thi.ng/egf@0.3.18) (2021-03-12) **Note:** Version bump only for package @thi.ng/egf diff --git a/packages/egf/package.json b/packages/egf/package.json index 2b66d536c5..cd7cc92330 100644 --- a/packages/egf/package.json +++ b/packages/egf/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/egf", - "version": "0.3.18", + "version": "0.3.19", "description": "Extensible Graph Format", "module": "./index.js", "main": "./lib/index.js", @@ -46,13 +46,13 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/associative": "^5.1.6", + "@thi.ng/associative": "^5.1.7", "@thi.ng/checks": "^2.9.5", "@thi.ng/dot": "^1.2.30", - "@thi.ng/errors": "^1.2.32", + "@thi.ng/errors": "^1.3.0", "@thi.ng/prefixes": "^0.1.17", - "@thi.ng/strings": "^1.15.5", - "@thi.ng/transducers-binary": "^0.6.12" + "@thi.ng/strings": "^1.15.6", + "@thi.ng/transducers-binary": "^0.6.13" }, "files": [ "*.js", diff --git a/packages/errors/CHANGELOG.md b/packages/errors/CHANGELOG.md index 0feb6713b3..f6d1a302ed 100644 --- a/packages/errors/CHANGELOG.md +++ b/packages/errors/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. +# [1.3.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/errors@1.2.32...@thi.ng/errors@1.3.0) (2021-03-17) + + +### Features + +* **errors:** add ensureIndex2(), update outOfBounds() arg type ([ab007d6](https://github.com/thi-ng/umbrella/commit/ab007d6b502c3d1650c7e9cf50da05f0ac042ef3)) +* **errors:** add outOfBounds(), ensureIndex() ([fb5ca0a](https://github.com/thi-ng/umbrella/commit/fb5ca0a7f8a4a6648d3c8485a9108e9154ee4400)) + + + + + ## [1.2.32](https://github.com/thi-ng/umbrella/compare/@thi.ng/errors@1.2.31...@thi.ng/errors@1.2.32) (2021-03-12) **Note:** Version bump only for package @thi.ng/errors diff --git a/packages/errors/package.json b/packages/errors/package.json index 545c6e1246..d6df3fc54d 100644 --- a/packages/errors/package.json +++ b/packages/errors/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/errors", - "version": "1.2.32", + "version": "1.3.0", "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 2b837ff318..7db37a29de 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.44](https://github.com/thi-ng/umbrella/compare/@thi.ng/fsm@2.4.43...@thi.ng/fsm@2.4.44) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/fsm + + + + + ## [2.4.43](https://github.com/thi-ng/umbrella/compare/@thi.ng/fsm@2.4.42...@thi.ng/fsm@2.4.43) (2021-03-12) **Note:** Version bump only for package @thi.ng/fsm diff --git a/packages/fsm/package.json b/packages/fsm/package.json index 5ef1eb41a9..720c53b5a4 100644 --- a/packages/fsm/package.json +++ b/packages/fsm/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/fsm", - "version": "2.4.43", + "version": "2.4.44", "description": "Composable primitives for building declarative, transducer based Finite-State Machines & matchers for arbitrary data streams", "module": "./index.js", "main": "./lib/index.js", @@ -50,11 +50,11 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/arrays": "^0.10.8", + "@thi.ng/arrays": "^0.10.9", "@thi.ng/equiv": "^1.0.41", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/strings": "^1.15.5", - "@thi.ng/transducers": "^7.6.6" + "@thi.ng/errors": "^1.3.0", + "@thi.ng/strings": "^1.15.6", + "@thi.ng/transducers": "^7.6.7" }, "files": [ "*.js", diff --git a/packages/fuzzy-viz/CHANGELOG.md b/packages/fuzzy-viz/CHANGELOG.md index 94ce455909..e5767492cc 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.15](https://github.com/thi-ng/umbrella/compare/@thi.ng/fuzzy-viz@0.1.14...@thi.ng/fuzzy-viz@0.1.15) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/fuzzy-viz + + + + + ## [0.1.14](https://github.com/thi-ng/umbrella/compare/@thi.ng/fuzzy-viz@0.1.13...@thi.ng/fuzzy-viz@0.1.14) (2021-03-12) **Note:** Version bump only for package @thi.ng/fuzzy-viz diff --git a/packages/fuzzy-viz/package.json b/packages/fuzzy-viz/package.json index 9dbe3f0877..385905bf72 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.14", + "version": "0.1.15", "description": "Visualization, instrumentation & introspection utils for @thi.ng/fuzzy", "module": "./index.js", "main": "./lib/index.js", @@ -50,12 +50,12 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/fuzzy": "^0.1.8", - "@thi.ng/hiccup": "^3.6.13", - "@thi.ng/hiccup-svg": "^3.7.13", - "@thi.ng/math": "^3.2.5", - "@thi.ng/strings": "^1.15.5", - "@thi.ng/text-canvas": "^0.4.11" + "@thi.ng/fuzzy": "^0.1.9", + "@thi.ng/hiccup": "^3.6.14", + "@thi.ng/hiccup-svg": "^3.7.14", + "@thi.ng/math": "^3.3.0", + "@thi.ng/strings": "^1.15.6", + "@thi.ng/text-canvas": "^0.4.12" }, "files": [ "*.js", diff --git a/packages/fuzzy/CHANGELOG.md b/packages/fuzzy/CHANGELOG.md index 05934a3650..9e20510df6 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.9](https://github.com/thi-ng/umbrella/compare/@thi.ng/fuzzy@0.1.8...@thi.ng/fuzzy@0.1.9) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/fuzzy + + + + + ## [0.1.8](https://github.com/thi-ng/umbrella/compare/@thi.ng/fuzzy@0.1.7...@thi.ng/fuzzy@0.1.8) (2021-03-12) **Note:** Version bump only for package @thi.ng/fuzzy diff --git a/packages/fuzzy/package.json b/packages/fuzzy/package.json index 922d7553e7..c055b773b5 100644 --- a/packages/fuzzy/package.json +++ b/packages/fuzzy/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/fuzzy", - "version": "0.1.8", + "version": "0.1.9", "description": "Fuzzy logic operators & configurable rule inferencing engine", "module": "./index.js", "main": "./lib/index.js", @@ -50,7 +50,7 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/math": "^3.2.5" + "@thi.ng/math": "^3.3.0" }, "files": [ "*.js", diff --git a/packages/geom-accel/CHANGELOG.md b/packages/geom-accel/CHANGELOG.md index 233f58454d..36b237815e 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.42](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-accel@2.1.41...@thi.ng/geom-accel@2.1.42) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/geom-accel + + + + + ## [2.1.41](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-accel@2.1.40...@thi.ng/geom-accel@2.1.41) (2021-03-12) **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 fe3d454c5e..d56c995bdf 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.41", + "version": "2.1.42", "description": "n-D spatial indexing data structures with a shared ES6 Map/Set-like API", "module": "./index.js", "main": "./lib/index.js", @@ -51,15 +51,15 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/arrays": "^0.10.8", + "@thi.ng/arrays": "^0.10.9", "@thi.ng/checks": "^2.9.5", "@thi.ng/equiv": "^1.0.41", - "@thi.ng/geom-api": "^2.0.12", - "@thi.ng/geom-isec": "^0.7.15", - "@thi.ng/heaps": "^1.2.37", - "@thi.ng/math": "^3.2.5", - "@thi.ng/transducers": "^7.6.6", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/geom-api": "^2.0.13", + "@thi.ng/geom-isec": "^0.7.16", + "@thi.ng/heaps": "^1.2.38", + "@thi.ng/math": "^3.3.0", + "@thi.ng/transducers": "^7.6.7", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/geom-api/CHANGELOG.md b/packages/geom-api/CHANGELOG.md index ba641abcc0..0b0b033041 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.13](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-api@2.0.12...@thi.ng/geom-api@2.0.13) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/geom-api + + + + + ## [2.0.12](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-api@2.0.11...@thi.ng/geom-api@2.0.12) (2021-03-12) **Note:** Version bump only for package @thi.ng/geom-api diff --git a/packages/geom-api/package.json b/packages/geom-api/package.json index 061fa4cde4..86c04d3896 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.12", + "version": "2.0.13", "description": "Shared type & interface declarations for @thi.ng/geom packages", "module": "./index.js", "main": "./lib/index.js", @@ -50,7 +50,7 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/geom-arc/CHANGELOG.md b/packages/geom-arc/CHANGELOG.md index abdc5483e2..fb7b10fe24 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.31](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-arc@0.3.30...@thi.ng/geom-arc@0.3.31) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/geom-arc + + + + + ## [0.3.30](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-arc@0.3.29...@thi.ng/geom-arc@0.3.30) (2021-03-12) **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 9b10bb8e72..d97deab009 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.30", + "version": "0.3.31", "description": "2D circular / elliptic arc operations", "module": "./index.js", "main": "./lib/index.js", @@ -50,10 +50,10 @@ }, "dependencies": { "@thi.ng/checks": "^2.9.5", - "@thi.ng/geom-api": "^2.0.12", - "@thi.ng/geom-resample": "^0.2.63", - "@thi.ng/math": "^3.2.5", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/geom-api": "^2.0.13", + "@thi.ng/geom-resample": "^0.2.64", + "@thi.ng/math": "^3.3.0", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/geom-clip-line/CHANGELOG.md b/packages/geom-clip-line/CHANGELOG.md index 2efd93c021..d6403e0854 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.27](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-clip-line@1.2.26...@thi.ng/geom-clip-line@1.2.27) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/geom-clip-line + + + + + ## [1.2.26](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-clip-line@1.2.25...@thi.ng/geom-clip-line@1.2.26) (2021-03-12) **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 31d70df688..aa0a6adcca 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.26", + "version": "1.2.27", "description": "2D line clipping (Liang-Barsky)", "module": "./index.js", "main": "./lib/index.js", @@ -50,8 +50,8 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/geom-isec": "^0.7.15", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/geom-isec": "^0.7.16", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/geom-clip-poly/CHANGELOG.md b/packages/geom-clip-poly/CHANGELOG.md index 19583f391f..3b8861651d 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.52](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-clip-poly@1.0.51...@thi.ng/geom-clip-poly@1.0.52) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/geom-clip-poly + + + + + ## [1.0.51](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-clip-poly@1.0.50...@thi.ng/geom-clip-poly@1.0.51) (2021-03-12) **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 6f12991165..83a8aac970 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.51", + "version": "1.0.52", "description": "2D convex polygon clipping (Sutherland-Hodgeman)", "module": "./index.js", "main": "./lib/index.js", @@ -49,10 +49,10 @@ "typescript": "^4.2.3" }, "dependencies": { - "@thi.ng/geom-isec": "^0.7.15", - "@thi.ng/geom-poly-utils": "^0.3.12", - "@thi.ng/math": "^3.2.5", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/geom-isec": "^0.7.16", + "@thi.ng/geom-poly-utils": "^0.3.13", + "@thi.ng/math": "^3.3.0", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/geom-closest-point/CHANGELOG.md b/packages/geom-closest-point/CHANGELOG.md index ea8276b81a..915b216ed4 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.18](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-closest-point@0.5.17...@thi.ng/geom-closest-point@0.5.18) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/geom-closest-point + + + + + ## [0.5.17](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-closest-point@0.5.16...@thi.ng/geom-closest-point@0.5.17) (2021-03-12) **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 bd50286f0c..8951480138 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.17", + "version": "0.5.18", "description": "2D / 3D closest point / proximity helpers", "module": "./index.js", "main": "./lib/index.js", @@ -50,8 +50,8 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/math": "^3.2.5", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/math": "^3.3.0", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/geom-fuzz/CHANGELOG.md b/packages/geom-fuzz/CHANGELOG.md index 16c809fe83..88d21ad699 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.41](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-fuzz@0.1.40...@thi.ng/geom-fuzz@0.1.41) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/geom-fuzz + + + + + ## [0.1.40](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-fuzz@0.1.39...@thi.ng/geom-fuzz@0.1.40) (2021-03-12) **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 9bd1bdc356..57f16bb858 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.40", + "version": "0.1.41", "description": "Highly configurable, fuzzy line & polygon creation with presets and composable fill & stroke styles. Canvas & SVG support", "module": "./index.js", "main": "./lib/index.js", @@ -49,15 +49,15 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/associative": "^5.1.6", - "@thi.ng/color": "^3.1.5", - "@thi.ng/geom": "^2.1.7", - "@thi.ng/geom-api": "^2.0.12", - "@thi.ng/geom-clip-line": "^1.2.26", - "@thi.ng/geom-resample": "^0.2.63", - "@thi.ng/grid-iterators": "^0.4.28", - "@thi.ng/transducers": "^7.6.6", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/associative": "^5.1.7", + "@thi.ng/color": "^3.1.6", + "@thi.ng/geom": "^2.1.8", + "@thi.ng/geom-api": "^2.0.13", + "@thi.ng/geom-clip-line": "^1.2.27", + "@thi.ng/geom-resample": "^0.2.64", + "@thi.ng/grid-iterators": "^0.4.29", + "@thi.ng/transducers": "^7.6.7", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/geom-hull/CHANGELOG.md b/packages/geom-hull/CHANGELOG.md index 1b4c355d86..b0a462fcd3 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.84](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-hull@0.0.83...@thi.ng/geom-hull@0.0.84) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/geom-hull + + + + + ## [0.0.83](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-hull@0.0.82...@thi.ng/geom-hull@0.0.83) (2021-03-12) **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 cd41802ef1..766648627c 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.83", + "version": "0.0.84", "description": "Fast 2D convex hull (Graham Scan)", "module": "./index.js", "main": "./lib/index.js", @@ -49,8 +49,8 @@ "typescript": "^4.2.3" }, "dependencies": { - "@thi.ng/math": "^3.2.5", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/math": "^3.3.0", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/geom-io-obj/CHANGELOG.md b/packages/geom-io-obj/CHANGELOG.md index 9947c36207..b56f9cc4a3 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.42](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-io-obj@0.1.41...@thi.ng/geom-io-obj@0.1.42) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/geom-io-obj + + + + + ## [0.1.41](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-io-obj@0.1.40...@thi.ng/geom-io-obj@0.1.41) (2021-03-12) **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 e4c005483e..c51dc20a01 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.41", + "version": "0.1.42", "description": "Wavefront OBJ parser (& exporter soon)", "module": "./index.js", "main": "./lib/index.js", @@ -50,7 +50,7 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/geom-isec/CHANGELOG.md b/packages/geom-isec/CHANGELOG.md index b8bf62efc3..32bab86ce2 100644 --- a/packages/geom-isec/CHANGELOG.md +++ b/packages/geom-isec/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.16](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-isec@0.7.15...@thi.ng/geom-isec@0.7.16) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/geom-isec + + + + + ## [0.7.15](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-isec@0.7.14...@thi.ng/geom-isec@0.7.15) (2021-03-12) **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 c7221ad815..386fc1389c 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.15", + "version": "0.7.16", "description": "2D/3D shape intersection checks", "module": "./index.js", "main": "./lib/index.js", @@ -50,10 +50,10 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/geom-api": "^2.0.12", - "@thi.ng/geom-closest-point": "^0.5.17", - "@thi.ng/math": "^3.2.5", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/geom-api": "^2.0.13", + "@thi.ng/geom-closest-point": "^0.5.18", + "@thi.ng/math": "^3.3.0", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/geom-isoline/CHANGELOG.md b/packages/geom-isoline/CHANGELOG.md index d6bf54cd1d..59762f1290 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.82](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-isoline@0.1.81...@thi.ng/geom-isoline@0.1.82) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/geom-isoline + + + + + ## [0.1.81](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-isoline@0.1.80...@thi.ng/geom-isoline@0.1.81) (2021-03-12) **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 2590982b02..c2705a63b9 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.81", + "version": "0.1.82", "description": "Fast 2D contour line extraction / generation", "module": "./index.js", "main": "./lib/index.js", @@ -50,8 +50,8 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/transducers": "^7.6.6", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/transducers": "^7.6.7", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/geom-poly-utils/CHANGELOG.md b/packages/geom-poly-utils/CHANGELOG.md index b04f7b7fb8..e13ac88351 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.13](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-poly-utils@0.3.12...@thi.ng/geom-poly-utils@0.3.13) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/geom-poly-utils + + + + + ## [0.3.12](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-poly-utils@0.3.11...@thi.ng/geom-poly-utils@0.3.12) (2021-03-12) **Note:** Version bump only for package @thi.ng/geom-poly-utils diff --git a/packages/geom-poly-utils/package.json b/packages/geom-poly-utils/package.json index b13a0a3d37..ba4db3cf93 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.12", + "version": "0.3.13", "description": "2D polygon/polyline analysis & processing utilities", "module": "./index.js", "main": "./lib/index.js", @@ -50,10 +50,10 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/geom-api": "^2.0.12", - "@thi.ng/math": "^3.2.5", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/errors": "^1.3.0", + "@thi.ng/geom-api": "^2.0.13", + "@thi.ng/math": "^3.3.0", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/geom-resample/CHANGELOG.md b/packages/geom-resample/CHANGELOG.md index a8527c9023..35f906e6f5 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.64](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-resample@0.2.63...@thi.ng/geom-resample@0.2.64) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/geom-resample + + + + + ## [0.2.63](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-resample@0.2.62...@thi.ng/geom-resample@0.2.63) (2021-03-12) **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 cb21b288dc..e5a1ac801b 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.63", + "version": "0.2.64", "description": "Customizable nD polyline interpolation, re-sampling, splitting & nearest point computation", "module": "./index.js", "main": "./lib/index.js", @@ -50,10 +50,10 @@ }, "dependencies": { "@thi.ng/checks": "^2.9.5", - "@thi.ng/geom-api": "^2.0.12", - "@thi.ng/geom-closest-point": "^0.5.17", - "@thi.ng/math": "^3.2.5", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/geom-api": "^2.0.13", + "@thi.ng/geom-closest-point": "^0.5.18", + "@thi.ng/math": "^3.3.0", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/geom-splines/CHANGELOG.md b/packages/geom-splines/CHANGELOG.md index 4845d26042..d42cb5203b 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.51](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-splines@0.5.50...@thi.ng/geom-splines@0.5.51) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/geom-splines + + + + + ## [0.5.50](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-splines@0.5.49...@thi.ng/geom-splines@0.5.50) (2021-03-12) **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 78b78c18f1..4e81d9c880 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.50", + "version": "0.5.51", "description": "nD cubic & quadratic curve analysis, conversion, interpolation, splitting", "module": "./index.js", "main": "./lib/index.js", @@ -51,11 +51,11 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/geom-api": "^2.0.12", - "@thi.ng/geom-arc": "^0.3.30", - "@thi.ng/geom-resample": "^0.2.63", - "@thi.ng/math": "^3.2.5", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/geom-api": "^2.0.13", + "@thi.ng/geom-arc": "^0.3.31", + "@thi.ng/geom-resample": "^0.2.64", + "@thi.ng/math": "^3.3.0", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/geom-subdiv-curve/CHANGELOG.md b/packages/geom-subdiv-curve/CHANGELOG.md index a2fa0837ed..041ef53636 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.82](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-subdiv-curve@0.1.81...@thi.ng/geom-subdiv-curve@0.1.82) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/geom-subdiv-curve + + + + + ## [0.1.81](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-subdiv-curve@0.1.80...@thi.ng/geom-subdiv-curve@0.1.81) (2021-03-12) **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 9ad89c2526..17538d539d 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.81", + "version": "0.1.82", "description": "Freely customizable, iterative nD subdivision curves for open / closed geometries", "module": "./index.js", "main": "./lib/index.js", @@ -50,9 +50,9 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/geom-api": "^2.0.12", - "@thi.ng/transducers": "^7.6.6", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/geom-api": "^2.0.13", + "@thi.ng/transducers": "^7.6.7", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/geom-tessellate/CHANGELOG.md b/packages/geom-tessellate/CHANGELOG.md index a2fac0bd46..7294dc4f44 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.65](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-tessellate@0.2.64...@thi.ng/geom-tessellate@0.2.65) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/geom-tessellate + + + + + ## [0.2.64](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-tessellate@0.2.63...@thi.ng/geom-tessellate@0.2.64) (2021-03-12) **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 d1a892308d..b0b94eba76 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.64", + "version": "0.2.65", "description": "2D/3D convex polygon tessellators", "module": "./index.js", "main": "./lib/index.js", @@ -50,11 +50,11 @@ }, "dependencies": { "@thi.ng/checks": "^2.9.5", - "@thi.ng/geom-api": "^2.0.12", - "@thi.ng/geom-isec": "^0.7.15", - "@thi.ng/geom-poly-utils": "^0.3.12", - "@thi.ng/transducers": "^7.6.6", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/geom-api": "^2.0.13", + "@thi.ng/geom-isec": "^0.7.16", + "@thi.ng/geom-poly-utils": "^0.3.13", + "@thi.ng/transducers": "^7.6.7", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/geom-voronoi/CHANGELOG.md b/packages/geom-voronoi/CHANGELOG.md index c2cd3120c2..1b19db1bc9 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.27](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-voronoi@0.2.26...@thi.ng/geom-voronoi@0.2.27) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/geom-voronoi + + + + + ## [0.2.26](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom-voronoi@0.2.25...@thi.ng/geom-voronoi@0.2.26) (2021-03-12) **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 b8e6294ce0..a6c19443fc 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.26", + "version": "0.2.27", "description": "Fast, incremental 2D Delaunay & Voronoi mesh implementation", "module": "./index.js", "main": "./lib/index.js", @@ -51,13 +51,13 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/geom-clip-line": "^1.2.26", - "@thi.ng/geom-clip-poly": "^1.0.51", - "@thi.ng/geom-isec": "^0.7.15", - "@thi.ng/geom-poly-utils": "^0.3.12", - "@thi.ng/math": "^3.2.5", + "@thi.ng/geom-clip-line": "^1.2.27", + "@thi.ng/geom-clip-poly": "^1.0.52", + "@thi.ng/geom-isec": "^0.7.16", + "@thi.ng/geom-poly-utils": "^0.3.13", + "@thi.ng/math": "^3.3.0", "@thi.ng/quad-edge": "^0.2.34", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/geom/CHANGELOG.md b/packages/geom/CHANGELOG.md index bdaeca36e1..90b91d4919 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.1.8](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom@2.1.7...@thi.ng/geom@2.1.8) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/geom + + + + + ## [2.1.7](https://github.com/thi-ng/umbrella/compare/@thi.ng/geom@2.1.6...@thi.ng/geom@2.1.7) (2021-03-12) **Note:** Version bump only for package @thi.ng/geom diff --git a/packages/geom/package.json b/packages/geom/package.json index 42c0a95aba..c59795f4ba 100644 --- a/packages/geom/package.json +++ b/packages/geom/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/geom", - "version": "2.1.7", + "version": "2.1.8", "description": "Functional, polymorphic API for 2D geometry types & SVG generation", "module": "./index.js", "main": "./lib/index.js", @@ -50,31 +50,31 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/arrays": "^0.10.8", + "@thi.ng/arrays": "^0.10.9", "@thi.ng/checks": "^2.9.5", - "@thi.ng/defmulti": "^1.3.10", + "@thi.ng/defmulti": "^1.3.11", "@thi.ng/equiv": "^1.0.41", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/geom-api": "^2.0.12", - "@thi.ng/geom-arc": "^0.3.30", - "@thi.ng/geom-clip-line": "^1.2.26", - "@thi.ng/geom-clip-poly": "^1.0.51", - "@thi.ng/geom-closest-point": "^0.5.17", - "@thi.ng/geom-hull": "^0.0.83", - "@thi.ng/geom-isec": "^0.7.15", - "@thi.ng/geom-poly-utils": "^0.3.12", - "@thi.ng/geom-resample": "^0.2.63", - "@thi.ng/geom-splines": "^0.5.50", - "@thi.ng/geom-subdiv-curve": "^0.1.81", - "@thi.ng/geom-tessellate": "^0.2.64", - "@thi.ng/hiccup": "^3.6.13", - "@thi.ng/hiccup-svg": "^3.7.13", - "@thi.ng/math": "^3.2.5", - "@thi.ng/matrices": "^0.6.50", + "@thi.ng/errors": "^1.3.0", + "@thi.ng/geom-api": "^2.0.13", + "@thi.ng/geom-arc": "^0.3.31", + "@thi.ng/geom-clip-line": "^1.2.27", + "@thi.ng/geom-clip-poly": "^1.0.52", + "@thi.ng/geom-closest-point": "^0.5.18", + "@thi.ng/geom-hull": "^0.0.84", + "@thi.ng/geom-isec": "^0.7.16", + "@thi.ng/geom-poly-utils": "^0.3.13", + "@thi.ng/geom-resample": "^0.2.64", + "@thi.ng/geom-splines": "^0.5.51", + "@thi.ng/geom-subdiv-curve": "^0.1.82", + "@thi.ng/geom-tessellate": "^0.2.65", + "@thi.ng/hiccup": "^3.6.14", + "@thi.ng/hiccup-svg": "^3.7.14", + "@thi.ng/math": "^3.3.0", + "@thi.ng/matrices": "^0.6.51", "@thi.ng/random": "^2.3.6", - "@thi.ng/strings": "^1.15.5", - "@thi.ng/transducers": "^7.6.6", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/strings": "^1.15.6", + "@thi.ng/transducers": "^7.6.7", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/gp/CHANGELOG.md b/packages/gp/CHANGELOG.md index c64b31a94c..7b85c4cb2e 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.13](https://github.com/thi-ng/umbrella/compare/@thi.ng/gp@0.2.12...@thi.ng/gp@0.2.13) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/gp + + + + + ## [0.2.12](https://github.com/thi-ng/umbrella/compare/@thi.ng/gp@0.2.11...@thi.ng/gp@0.2.12) (2021-03-12) **Note:** Version bump only for package @thi.ng/gp diff --git a/packages/gp/package.json b/packages/gp/package.json index 2c5c2749a0..b7a6aee43f 100644 --- a/packages/gp/package.json +++ b/packages/gp/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/gp", - "version": "0.2.12", + "version": "0.2.13", "description": "Genetic programming helpers & strategies (tree based & multi-expression programming)", "module": "./index.js", "main": "./lib/index.js", @@ -50,10 +50,10 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/math": "^3.2.5", + "@thi.ng/math": "^3.3.0", "@thi.ng/random": "^2.3.6", - "@thi.ng/transducers": "^7.6.6", - "@thi.ng/zipper": "^0.1.42" + "@thi.ng/transducers": "^7.6.7", + "@thi.ng/zipper": "^0.1.43" }, "files": [ "*.js", diff --git a/packages/grid-iterators/CHANGELOG.md b/packages/grid-iterators/CHANGELOG.md index e617e4fea9..2b70b670c8 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.29](https://github.com/thi-ng/umbrella/compare/@thi.ng/grid-iterators@0.4.28...@thi.ng/grid-iterators@0.4.29) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/grid-iterators + + + + + ## [0.4.28](https://github.com/thi-ng/umbrella/compare/@thi.ng/grid-iterators@0.4.27...@thi.ng/grid-iterators@0.4.28) (2021-03-12) **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 ec74aaa813..e43978d8f2 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.28", + "version": "0.4.29", "description": "2D grid iterators w/ multiple orderings", "module": "./index.js", "main": "./lib/index.js", @@ -50,11 +50,11 @@ "typescript": "^4.2.3" }, "dependencies": { - "@thi.ng/arrays": "^0.10.8", + "@thi.ng/arrays": "^0.10.9", "@thi.ng/binary": "^2.2.4", - "@thi.ng/morton": "^2.0.37", + "@thi.ng/morton": "^2.0.38", "@thi.ng/random": "^2.3.6", - "@thi.ng/transducers": "^7.6.6" + "@thi.ng/transducers": "^7.6.7" }, "files": [ "*.js", diff --git a/packages/hdiff/CHANGELOG.md b/packages/hdiff/CHANGELOG.md index 964123163e..9db56f9970 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.34](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdiff@0.1.33...@thi.ng/hdiff@0.1.34) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/hdiff + + + + + ## [0.1.33](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdiff@0.1.32...@thi.ng/hdiff@0.1.33) (2021-03-12) **Note:** Version bump only for package @thi.ng/hdiff diff --git a/packages/hdiff/package.json b/packages/hdiff/package.json index 6341854921..eb172202f9 100644 --- a/packages/hdiff/package.json +++ b/packages/hdiff/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/hdiff", - "version": "0.1.33", + "version": "0.1.34", "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", @@ -53,9 +53,9 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/diff": "^4.0.7", - "@thi.ng/hiccup": "^3.6.13", - "@thi.ng/hiccup-css": "^1.1.55", - "@thi.ng/strings": "^1.15.5" + "@thi.ng/hiccup": "^3.6.14", + "@thi.ng/hiccup-css": "^1.1.56", + "@thi.ng/strings": "^1.15.6" }, "files": [ "*.js", diff --git a/packages/hdom-canvas/CHANGELOG.md b/packages/hdom-canvas/CHANGELOG.md index 8a573af98a..2d1427196c 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.39](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom-canvas@3.0.38...@thi.ng/hdom-canvas@3.0.39) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/hdom-canvas + + + + + ## [3.0.38](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom-canvas@3.0.37...@thi.ng/hdom-canvas@3.0.38) (2021-03-12) **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 c2edcee524..0e83de69fa 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.38", + "version": "3.0.39", "description": "@thi.ng/hdom component wrapper for declarative canvas scenegraphs", "module": "./index.js", "main": "./lib/index.js", @@ -52,8 +52,8 @@ "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", "@thi.ng/diff": "^4.0.7", - "@thi.ng/hdom": "^8.2.23", - "@thi.ng/hiccup-canvas": "^1.1.28" + "@thi.ng/hdom": "^8.2.24", + "@thi.ng/hiccup-canvas": "^1.1.29" }, "files": [ "*.js", diff --git a/packages/hdom-components/CHANGELOG.md b/packages/hdom-components/CHANGELOG.md index 32a6055bdd..352ab2a34e 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.31](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom-components@4.0.30...@thi.ng/hdom-components@4.0.31) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/hdom-components + + + + + ## [4.0.30](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom-components@4.0.29...@thi.ng/hdom-components@4.0.30) (2021-03-12) **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 c4919d4d25..071d00ab43 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.30", + "version": "4.0.31", "description": "Raw, skinnable UI & SVG components for @thi.ng/hdom", "module": "./index.js", "main": "./lib/index.js", @@ -52,9 +52,9 @@ "@thi.ng/adapt-dpi": "^1.0.19", "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/math": "^3.2.5", - "@thi.ng/transducers": "^7.6.6", - "@thi.ng/transducers-stats": "^1.1.56" + "@thi.ng/math": "^3.3.0", + "@thi.ng/transducers": "^7.6.7", + "@thi.ng/transducers-stats": "^1.1.57" }, "files": [ "*.js", diff --git a/packages/hdom-mock/CHANGELOG.md b/packages/hdom-mock/CHANGELOG.md index eee0582d2b..6f294f0d81 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.56](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom-mock@1.1.55...@thi.ng/hdom-mock@1.1.56) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/hdom-mock + + + + + ## [1.1.55](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom-mock@1.1.54...@thi.ng/hdom-mock@1.1.55) (2021-03-12) **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 08577f0d2d..07f16b1bc6 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.55", + "version": "1.1.56", "description": "Mock base implementation for @thi.ng/hdom API", "module": "./index.js", "main": "./lib/index.js", @@ -51,7 +51,7 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/hdom": "^8.2.23" + "@thi.ng/hdom": "^8.2.24" }, "files": [ "*.js", diff --git a/packages/hdom/CHANGELOG.md b/packages/hdom/CHANGELOG.md index 3ad69829b4..f0e2e528a4 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.24](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom@8.2.23...@thi.ng/hdom@8.2.24) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/hdom + + + + + ## [8.2.23](https://github.com/thi-ng/umbrella/compare/@thi.ng/hdom@8.2.22...@thi.ng/hdom@8.2.23) (2021-03-12) **Note:** Version bump only for package @thi.ng/hdom diff --git a/packages/hdom/package.json b/packages/hdom/package.json index 9fa023a291..0d787cbec8 100644 --- a/packages/hdom/package.json +++ b/packages/hdom/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/hdom", - "version": "8.2.23", + "version": "8.2.24", "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.13.1", - "@thi.ng/atom": "^4.1.33", + "@thi.ng/atom": "^4.1.34", "@types/mocha": "^8.2.0", "@types/node": "^14.14.14", "mocha": "^8.3.0", @@ -54,8 +54,8 @@ "@thi.ng/checks": "^2.9.5", "@thi.ng/diff": "^4.0.7", "@thi.ng/equiv": "^1.0.41", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/hiccup": "^3.6.13", + "@thi.ng/errors": "^1.3.0", + "@thi.ng/hiccup": "^3.6.14", "@thi.ng/prefixes": "^0.1.17" }, "files": [ diff --git a/packages/heaps/CHANGELOG.md b/packages/heaps/CHANGELOG.md index 18a9daddcc..562ac89e37 100644 --- a/packages/heaps/CHANGELOG.md +++ b/packages/heaps/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.2.38](https://github.com/thi-ng/umbrella/compare/@thi.ng/heaps@1.2.37...@thi.ng/heaps@1.2.38) (2021-03-17) + + +### Bug Fixes + +* **heaps:** update return types ([#283](https://github.com/thi-ng/umbrella/issues/283)) ([f7eabec](https://github.com/thi-ng/umbrella/commit/f7eabec276a6a08b58d93512421bae1df1817f2d)) + + + + + ## [1.2.37](https://github.com/thi-ng/umbrella/compare/@thi.ng/heaps@1.2.36...@thi.ng/heaps@1.2.37) (2021-03-12) **Note:** Version bump only for package @thi.ng/heaps diff --git a/packages/heaps/package.json b/packages/heaps/package.json index 05e053180c..48879c7742 100644 --- a/packages/heaps/package.json +++ b/packages/heaps/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/heaps", - "version": "1.2.37", + "version": "1.2.38", "description": "Various heap implementations for arbitrary values and with customizable ordering", "module": "./index.js", "main": "./lib/index.js", diff --git a/packages/hiccup-canvas/CHANGELOG.md b/packages/hiccup-canvas/CHANGELOG.md index 3168fc5be0..2af7aeb3b7 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.29](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-canvas@1.1.28...@thi.ng/hiccup-canvas@1.1.29) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/hiccup-canvas + + + + + ## [1.1.28](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-canvas@1.1.27...@thi.ng/hiccup-canvas@1.1.28) (2021-03-12) **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 845c31187f..1831c5ac51 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.28", + "version": "1.1.29", "description": "Hiccup shape tree renderer for vanilla Canvas 2D contexts", "module": "./index.js", "main": "./lib/index.js", @@ -50,9 +50,9 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/color": "^3.1.5", - "@thi.ng/math": "^3.2.5", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/color": "^3.1.6", + "@thi.ng/math": "^3.3.0", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/hiccup-carbon-icons/CHANGELOG.md b/packages/hiccup-carbon-icons/CHANGELOG.md index 8fe7c1fa56..7ac065b81e 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.17](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-carbon-icons@2.0.16...@thi.ng/hiccup-carbon-icons@2.0.17) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/hiccup-carbon-icons + + + + + ## [2.0.16](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-carbon-icons@2.0.15...@thi.ng/hiccup-carbon-icons@2.0.16) (2021-03-12) **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 f208f93508..b83ed29c0c 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.16", + "version": "2.0.17", "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.13.1", - "@thi.ng/hiccup": "^3.6.13", + "@thi.ng/hiccup": "^3.6.14", "@types/mocha": "^8.2.0", "@types/node": "^14.14.14", "mocha": "^8.3.0", diff --git a/packages/hiccup-css/CHANGELOG.md b/packages/hiccup-css/CHANGELOG.md index 7a9e99df0d..254eda3bed 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.56](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-css@1.1.55...@thi.ng/hiccup-css@1.1.56) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/hiccup-css + + + + + ## [1.1.55](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-css@1.1.54...@thi.ng/hiccup-css@1.1.55) (2021-03-12) **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 73e826eaeb..8cf448f0d0 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.55", + "version": "1.1.56", "description": "CSS from nested JS data structures", "module": "./index.js", "main": "./lib/index.js", @@ -51,8 +51,8 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/transducers": "^7.6.6" + "@thi.ng/errors": "^1.3.0", + "@thi.ng/transducers": "^7.6.7" }, "files": [ "*.js", diff --git a/packages/hiccup-markdown/CHANGELOG.md b/packages/hiccup-markdown/CHANGELOG.md index a9db415947..f38631d874 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.3.8](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-markdown@1.3.7...@thi.ng/hiccup-markdown@1.3.8) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/hiccup-markdown + + + + + ## [1.3.7](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-markdown@1.3.6...@thi.ng/hiccup-markdown@1.3.7) (2021-03-12) **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 4f7875c420..19daf36662 100644 --- a/packages/hiccup-markdown/package.json +++ b/packages/hiccup-markdown/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/hiccup-markdown", - "version": "1.3.7", + "version": "1.3.8", "description": "Markdown parser & serializer from/to Hiccup format", "module": "./index.js", "main": "./lib/index.js", @@ -50,15 +50,15 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/arrays": "^0.10.8", + "@thi.ng/arrays": "^0.10.9", "@thi.ng/checks": "^2.9.5", - "@thi.ng/defmulti": "^1.3.10", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/fsm": "^2.4.43", - "@thi.ng/hiccup": "^3.6.13", - "@thi.ng/strings": "^1.15.5", - "@thi.ng/text-canvas": "^0.4.11", - "@thi.ng/transducers": "^7.6.6" + "@thi.ng/defmulti": "^1.3.11", + "@thi.ng/errors": "^1.3.0", + "@thi.ng/fsm": "^2.4.44", + "@thi.ng/hiccup": "^3.6.14", + "@thi.ng/strings": "^1.15.6", + "@thi.ng/text-canvas": "^0.4.12", + "@thi.ng/transducers": "^7.6.7" }, "files": [ "*.js", diff --git a/packages/hiccup-svg/CHANGELOG.md b/packages/hiccup-svg/CHANGELOG.md index 663f6fc84b..81ddfa8369 100644 --- a/packages/hiccup-svg/CHANGELOG.md +++ b/packages/hiccup-svg/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.7.14](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-svg@3.7.13...@thi.ng/hiccup-svg@3.7.14) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/hiccup-svg + + + + + ## [3.7.13](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup-svg@3.7.12...@thi.ng/hiccup-svg@3.7.13) (2021-03-12) **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 329ffd039d..0e37e05a07 100644 --- a/packages/hiccup-svg/package.json +++ b/packages/hiccup-svg/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/hiccup-svg", - "version": "3.7.13", + "version": "3.7.14", "description": "SVG element functions for @thi.ng/hiccup & @thi.ng/hdom", "module": "./index.js", "main": "./lib/index.js", @@ -50,7 +50,7 @@ }, "dependencies": { "@thi.ng/checks": "^2.9.5", - "@thi.ng/color": "^3.1.5", + "@thi.ng/color": "^3.1.6", "@thi.ng/prefixes": "^0.1.17" }, "files": [ diff --git a/packages/hiccup/CHANGELOG.md b/packages/hiccup/CHANGELOG.md index f7ab09aeb2..957c94c52c 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.14](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup@3.6.13...@thi.ng/hiccup@3.6.14) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/hiccup + + + + + ## [3.6.13](https://github.com/thi-ng/umbrella/compare/@thi.ng/hiccup@3.6.12...@thi.ng/hiccup@3.6.13) (2021-03-12) **Note:** Version bump only for package @thi.ng/hiccup diff --git a/packages/hiccup/package.json b/packages/hiccup/package.json index a551c3797a..418b992fbd 100644 --- a/packages/hiccup/package.json +++ b/packages/hiccup/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/hiccup", - "version": "3.6.13", + "version": "3.6.14", "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.13.1", - "@thi.ng/atom": "^4.1.33", + "@thi.ng/atom": "^4.1.34", "@types/mocha": "^8.2.0", "@types/node": "^14.14.14", "mocha": "^8.3.0", @@ -52,7 +52,7 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/errors": "^1.2.32" + "@thi.ng/errors": "^1.3.0" }, "files": [ "*.js", diff --git a/packages/iges/CHANGELOG.md b/packages/iges/CHANGELOG.md index 27fec7c1d9..714e7861bd 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.67](https://github.com/thi-ng/umbrella/compare/@thi.ng/iges@1.1.66...@thi.ng/iges@1.1.67) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/iges + + + + + ## [1.1.66](https://github.com/thi-ng/umbrella/compare/@thi.ng/iges@1.1.65...@thi.ng/iges@1.1.66) (2021-03-12) **Note:** Version bump only for package @thi.ng/iges diff --git a/packages/iges/package.json b/packages/iges/package.json index b40774cfa2..07471eb2e1 100644 --- a/packages/iges/package.json +++ b/packages/iges/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/iges", - "version": "1.1.66", + "version": "1.1.67", "description": "IGES 5.3 serializer for (currently only) polygonal geometry, both open & closed", "module": "./index.js", "main": "./lib/index.js", @@ -51,10 +51,10 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/defmulti": "^1.3.10", - "@thi.ng/strings": "^1.15.5", - "@thi.ng/transducers": "^7.6.6", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/defmulti": "^1.3.11", + "@thi.ng/strings": "^1.15.6", + "@thi.ng/transducers": "^7.6.7", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/imgui/CHANGELOG.md b/packages/imgui/CHANGELOG.md index d007f05b05..ebe0a6bc66 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.61](https://github.com/thi-ng/umbrella/compare/@thi.ng/imgui@0.2.60...@thi.ng/imgui@0.2.61) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/imgui + + + + + ## [0.2.60](https://github.com/thi-ng/umbrella/compare/@thi.ng/imgui@0.2.59...@thi.ng/imgui@0.2.60) (2021-03-12) **Note:** Version bump only for package @thi.ng/imgui diff --git a/packages/imgui/package.json b/packages/imgui/package.json index ad8be1a702..396d9c5504 100644 --- a/packages/imgui/package.json +++ b/packages/imgui/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/imgui", - "version": "0.2.60", + "version": "0.2.61", "description": "Immediate mode GUI with flexible state handling & data only shape output", "module": "./index.js", "main": "./lib/index.js", @@ -51,14 +51,14 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/geom": "^2.1.7", - "@thi.ng/geom-api": "^2.0.12", - "@thi.ng/geom-isec": "^0.7.15", - "@thi.ng/geom-tessellate": "^0.2.64", + "@thi.ng/geom": "^2.1.8", + "@thi.ng/geom-api": "^2.0.13", + "@thi.ng/geom-isec": "^0.7.16", + "@thi.ng/geom-tessellate": "^0.2.65", "@thi.ng/layout": "^0.1.34", - "@thi.ng/math": "^3.2.5", - "@thi.ng/transducers": "^7.6.6", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/math": "^3.3.0", + "@thi.ng/transducers": "^7.6.7", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/interceptors/CHANGELOG.md b/packages/interceptors/CHANGELOG.md index 414dbe63d5..bc45ae16af 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.45](https://github.com/thi-ng/umbrella/compare/@thi.ng/interceptors@2.2.44...@thi.ng/interceptors@2.2.45) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/interceptors + + + + + ## [2.2.44](https://github.com/thi-ng/umbrella/compare/@thi.ng/interceptors@2.2.43...@thi.ng/interceptors@2.2.44) (2021-03-12) **Note:** Version bump only for package @thi.ng/interceptors diff --git a/packages/interceptors/package.json b/packages/interceptors/package.json index ee61360cba..2f2e7e5416 100644 --- a/packages/interceptors/package.json +++ b/packages/interceptors/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/interceptors", - "version": "2.2.44", + "version": "2.2.45", "description": "Interceptor based event bus, side effect & immutable state handling", "module": "./index.js", "main": "./lib/index.js", @@ -50,10 +50,10 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/atom": "^4.1.33", + "@thi.ng/atom": "^4.1.34", "@thi.ng/checks": "^2.9.5", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/paths": "^4.2.5" + "@thi.ng/errors": "^1.3.0", + "@thi.ng/paths": "^4.2.6" }, "files": [ "*.js", diff --git a/packages/intervals/CHANGELOG.md b/packages/intervals/CHANGELOG.md index c6e3441b0a..2f5ed6103a 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. +## [3.0.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/intervals@3.0.5...@thi.ng/intervals@3.0.6) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/intervals + + + + + ## [3.0.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/intervals@3.0.4...@thi.ng/intervals@3.0.5) (2021-03-12) **Note:** Version bump only for package @thi.ng/intervals diff --git a/packages/intervals/package.json b/packages/intervals/package.json index 476af2549b..3e7247b3d5 100644 --- a/packages/intervals/package.json +++ b/packages/intervals/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/intervals", - "version": "3.0.5", + "version": "3.0.6", "description": "Closed/open/semi-open interval data type, queries & operations", "module": "./index.js", "main": "./lib/index.js", @@ -52,7 +52,7 @@ "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", "@thi.ng/dlogic": "^1.0.43", - "@thi.ng/errors": "^1.2.32" + "@thi.ng/errors": "^1.3.0" }, "files": [ "*.js", diff --git a/packages/iterators/CHANGELOG.md b/packages/iterators/CHANGELOG.md index b88b47094f..1f0adc144c 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.57](https://github.com/thi-ng/umbrella/compare/@thi.ng/iterators@5.1.56...@thi.ng/iterators@5.1.57) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/iterators + + + + + ## [5.1.56](https://github.com/thi-ng/umbrella/compare/@thi.ng/iterators@5.1.55...@thi.ng/iterators@5.1.56) (2021-03-12) **Note:** Version bump only for package @thi.ng/iterators diff --git a/packages/iterators/package.json b/packages/iterators/package.json index b81218ec13..4d7801fe89 100644 --- a/packages/iterators/package.json +++ b/packages/iterators/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/iterators", - "version": "5.1.56", + "version": "5.1.57", "description": "Clojure inspired, composable ES6 iterators & generators", "module": "./index.js", "main": "./lib/index.js", @@ -50,8 +50,8 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/dcons": "^2.3.16", - "@thi.ng/errors": "^1.2.32" + "@thi.ng/dcons": "^2.3.17", + "@thi.ng/errors": "^1.3.0" }, "files": [ "*.js", diff --git a/packages/ksuid/CHANGELOG.md b/packages/ksuid/CHANGELOG.md index 6a76fa88e3..c400c73180 100644 --- a/packages/ksuid/CHANGELOG.md +++ b/packages/ksuid/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/ksuid@0.1.7...@thi.ng/ksuid@0.1.8) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/ksuid + + + + + ## [0.1.7](https://github.com/thi-ng/umbrella/compare/@thi.ng/ksuid@0.1.6...@thi.ng/ksuid@0.1.7) (2021-03-12) **Note:** Version bump only for package @thi.ng/ksuid diff --git a/packages/ksuid/package.json b/packages/ksuid/package.json index ba9e37e8db..9c6cb4afb7 100644 --- a/packages/ksuid/package.json +++ b/packages/ksuid/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/ksuid", - "version": "0.1.7", + "version": "0.1.8", "description": "Configurable K-sortable unique identifiers, binary & base-N encoded", "module": "./index.js", "main": "./lib/index.js", @@ -53,7 +53,7 @@ "@thi.ng/api": "^7.1.4", "@thi.ng/base-n": "^0.1.6", "@thi.ng/random": "^2.3.6", - "@thi.ng/strings": "^1.15.5" + "@thi.ng/strings": "^1.15.6" }, "files": [ "*.js", diff --git a/packages/leb128/CHANGELOG.md b/packages/leb128/CHANGELOG.md index 14d3676a27..3d3b7938bd 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.51](https://github.com/thi-ng/umbrella/compare/@thi.ng/leb128@1.0.50...@thi.ng/leb128@1.0.51) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/leb128 + + + + + ## [1.0.50](https://github.com/thi-ng/umbrella/compare/@thi.ng/leb128@1.0.49...@thi.ng/leb128@1.0.50) (2021-03-12) **Note:** Version bump only for package @thi.ng/leb128 diff --git a/packages/leb128/package.json b/packages/leb128/package.json index e73b82ba3d..5f8bef9606 100644 --- a/packages/leb128/package.json +++ b/packages/leb128/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/leb128", - "version": "1.0.50", + "version": "1.0.51", "description": "WASM based LEB128 encoder / decoder (signed & unsigned)", "module": "./index.js", "main": "./lib/index.js", @@ -51,8 +51,8 @@ }, "dependencies": { "@thi.ng/checks": "^2.9.5", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/transducers-binary": "^0.6.12" + "@thi.ng/errors": "^1.3.0", + "@thi.ng/transducers-binary": "^0.6.13" }, "files": [ "*.js", diff --git a/packages/lsys/CHANGELOG.md b/packages/lsys/CHANGELOG.md index 879ff236ba..cea1997bf2 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.79](https://github.com/thi-ng/umbrella/compare/@thi.ng/lsys@0.2.78...@thi.ng/lsys@0.2.79) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/lsys + + + + + ## [0.2.78](https://github.com/thi-ng/umbrella/compare/@thi.ng/lsys@0.2.77...@thi.ng/lsys@0.2.78) (2021-03-12) **Note:** Version bump only for package @thi.ng/lsys diff --git a/packages/lsys/package.json b/packages/lsys/package.json index 4c5c10cbf3..fdd8da977c 100644 --- a/packages/lsys/package.json +++ b/packages/lsys/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/lsys", - "version": "0.2.78", + "version": "0.2.79", "description": "Functional, extensible L-System architecture w/ support for probabilistic rules", "module": "./index.js", "main": "./lib/index.js", @@ -50,12 +50,12 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/compose": "^1.4.29", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/math": "^3.2.5", + "@thi.ng/compose": "^1.4.30", + "@thi.ng/errors": "^1.3.0", + "@thi.ng/math": "^3.3.0", "@thi.ng/random": "^2.3.6", - "@thi.ng/transducers": "^7.6.6", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/transducers": "^7.6.7", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/malloc/CHANGELOG.md b/packages/malloc/CHANGELOG.md index bae96bebf1..4d77a7163c 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. +## [5.0.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/malloc@5.0.5...@thi.ng/malloc@5.0.6) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/malloc + + + + + ## [5.0.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/malloc@5.0.4...@thi.ng/malloc@5.0.5) (2021-03-12) **Note:** Version bump only for package @thi.ng/malloc diff --git a/packages/malloc/package.json b/packages/malloc/package.json index 5e89576389..b917ef389d 100644 --- a/packages/malloc/package.json +++ b/packages/malloc/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/malloc", - "version": "5.0.5", + "version": "5.0.6", "description": "ArrayBuffer based malloc() impl for hybrid JS/WASM use cases, based on thi.ng/tinyalloc", "module": "./index.js", "main": "./lib/index.js", @@ -52,7 +52,7 @@ "@thi.ng/api": "^7.1.4", "@thi.ng/binary": "^2.2.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/errors": "^1.2.32" + "@thi.ng/errors": "^1.3.0" }, "files": [ "*.js", diff --git a/packages/math/CHANGELOG.md b/packages/math/CHANGELOG.md index 06643c50a0..d62eb39ed3 100644 --- a/packages/math/CHANGELOG.md +++ b/packages/math/CHANGELOG.md @@ -3,6 +3,22 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [3.3.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/math@3.2.5...@thi.ng/math@3.3.0) (2021-03-17) + + +### Features + +* **math:** add mixBicubic(), mixCubicHermiteFromPoints() ([30dda42](https://github.com/thi-ng/umbrella/commit/30dda424cc1a433a71dfa762f0b8c453114466a0)) + + +### Performance Improvements + +* **math:** replace mixBilinear() w/ inline impl ([bb16dc5](https://github.com/thi-ng/umbrella/commit/bb16dc591dd9455b8d0061a664375a9dc8c74a36)) + + + + + ## [3.2.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/math@3.2.4...@thi.ng/math@3.2.5) (2021-03-12) **Note:** Version bump only for package @thi.ng/math diff --git a/packages/math/package.json b/packages/math/package.json index f8bc928271..64775fce78 100644 --- a/packages/math/package.json +++ b/packages/math/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/math", - "version": "3.2.5", + "version": "3.3.0", "description": "Assorted common math functions & utilities", "module": "./index.js", "main": "./lib/index.js", diff --git a/packages/matrices/CHANGELOG.md b/packages/matrices/CHANGELOG.md index 312657688c..b9f8c43044 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.51](https://github.com/thi-ng/umbrella/compare/@thi.ng/matrices@0.6.50...@thi.ng/matrices@0.6.51) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/matrices + + + + + ## [0.6.50](https://github.com/thi-ng/umbrella/compare/@thi.ng/matrices@0.6.49...@thi.ng/matrices@0.6.50) (2021-03-12) **Note:** Version bump only for package @thi.ng/matrices diff --git a/packages/matrices/package.json b/packages/matrices/package.json index 25b72eb6f7..24b745d7f1 100644 --- a/packages/matrices/package.json +++ b/packages/matrices/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/matrices", - "version": "0.6.50", + "version": "0.6.51", "description": "Matrix & quaternion operations for 2D/3D geometry processing", "module": "./index.js", "main": "./lib/index.js", @@ -51,8 +51,8 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/math": "^3.2.5", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/math": "^3.3.0", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/morton/CHANGELOG.md b/packages/morton/CHANGELOG.md index 624e0434bc..e97748d250 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.38](https://github.com/thi-ng/umbrella/compare/@thi.ng/morton@2.0.37...@thi.ng/morton@2.0.38) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/morton + + + + + ## [2.0.37](https://github.com/thi-ng/umbrella/compare/@thi.ng/morton@2.0.36...@thi.ng/morton@2.0.37) (2021-03-12) **Note:** Version bump only for package @thi.ng/morton diff --git a/packages/morton/package.json b/packages/morton/package.json index 303f1240be..2d4fa1308c 100644 --- a/packages/morton/package.json +++ b/packages/morton/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/morton", - "version": "2.0.37", + "version": "2.0.38", "description": "Z-order curve / Morton encoding, decoding & range extraction for arbitrary dimensions", "module": "./index.js", "main": "./lib/index.js", @@ -51,7 +51,7 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/binary": "^2.2.4", - "@thi.ng/math": "^3.2.5" + "@thi.ng/math": "^3.3.0" }, "files": [ "*.js", diff --git a/packages/oquery/CHANGELOG.md b/packages/oquery/CHANGELOG.md index 7f2f578c88..2de93978a7 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.11](https://github.com/thi-ng/umbrella/compare/@thi.ng/oquery@0.2.10...@thi.ng/oquery@0.2.11) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/oquery + + + + + ## [0.2.10](https://github.com/thi-ng/umbrella/compare/@thi.ng/oquery@0.2.9...@thi.ng/oquery@0.2.10) (2021-03-12) **Note:** Version bump only for package @thi.ng/oquery diff --git a/packages/oquery/package.json b/packages/oquery/package.json index 2891dedb2a..aedeebcc98 100644 --- a/packages/oquery/package.json +++ b/packages/oquery/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/oquery", - "version": "0.2.10", + "version": "0.2.11", "description": "Datalog-inspired, optimized pattern/predicate query engine for JS objects & arrays", "module": "./index.js", "main": "./lib/index.js", @@ -50,7 +50,7 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/defmulti": "^1.3.10", + "@thi.ng/defmulti": "^1.3.11", "@thi.ng/equiv": "^1.0.41" }, "files": [ diff --git a/packages/parse/CHANGELOG.md b/packages/parse/CHANGELOG.md index e1ece624bd..00e57022d8 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.19](https://github.com/thi-ng/umbrella/compare/@thi.ng/parse@0.9.18...@thi.ng/parse@0.9.19) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/parse + + + + + ## [0.9.18](https://github.com/thi-ng/umbrella/compare/@thi.ng/parse@0.9.17...@thi.ng/parse@0.9.18) (2021-03-12) **Note:** Version bump only for package @thi.ng/parse diff --git a/packages/parse/package.json b/packages/parse/package.json index 9f8a7697de..2638e40c7a 100644 --- a/packages/parse/package.json +++ b/packages/parse/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/parse", - "version": "0.9.18", + "version": "0.9.19", "description": "Purely functional parser combinators & AST generation for generic inputs", "module": "./index.js", "main": "./lib/index.js", @@ -51,9 +51,9 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/defmulti": "^1.3.10", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/strings": "^1.15.5" + "@thi.ng/defmulti": "^1.3.11", + "@thi.ng/errors": "^1.3.0", + "@thi.ng/strings": "^1.15.6" }, "files": [ "*.js", diff --git a/packages/paths/CHANGELOG.md b/packages/paths/CHANGELOG.md index ee4aecb8d5..12f3513988 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.2.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/paths@4.2.5...@thi.ng/paths@4.2.6) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/paths + + + + + ## [4.2.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/paths@4.2.4...@thi.ng/paths@4.2.5) (2021-03-12) **Note:** Version bump only for package @thi.ng/paths diff --git a/packages/paths/package.json b/packages/paths/package.json index 4c6a88b062..197b9ef8cd 100644 --- a/packages/paths/package.json +++ b/packages/paths/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/paths", - "version": "4.2.5", + "version": "4.2.6", "description": "Immutable, optimized and optionally typed path-based object property / array accessors with structural sharing", "module": "./index.js", "main": "./lib/index.js", @@ -51,7 +51,7 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/errors": "^1.2.32" + "@thi.ng/errors": "^1.3.0" }, "files": [ "*.js", diff --git a/packages/pixel-io-netpbm/CHANGELOG.md b/packages/pixel-io-netpbm/CHANGELOG.md index 1ed013a878..edd4702a6c 100644 --- a/packages/pixel-io-netpbm/CHANGELOG.md +++ b/packages/pixel-io-netpbm/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/pixel-io-netpbm@0.1.5...@thi.ng/pixel-io-netpbm@0.1.6) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/pixel-io-netpbm + + + + + ## [0.1.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/pixel-io-netpbm@0.1.4...@thi.ng/pixel-io-netpbm@0.1.5) (2021-03-12) **Note:** Version bump only for package @thi.ng/pixel-io-netpbm diff --git a/packages/pixel-io-netpbm/package.json b/packages/pixel-io-netpbm/package.json index a0924ff981..7c774dd711 100644 --- a/packages/pixel-io-netpbm/package.json +++ b/packages/pixel-io-netpbm/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/pixel-io-netpbm", - "version": "0.1.5", + "version": "0.1.6", "description": "Multi-format NetPBM reader & writer support for @thi.ng/pixel", "module": "./index.js", "main": "./lib/index.js", @@ -50,8 +50,8 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/pixel": "^0.7.4" + "@thi.ng/errors": "^1.3.0", + "@thi.ng/pixel": "^0.8.0" }, "files": [ "*.js", diff --git a/packages/pixel/CHANGELOG.md b/packages/pixel/CHANGELOG.md index 00449ad327..1acd1150a7 100644 --- a/packages/pixel/CHANGELOG.md +++ b/packages/pixel/CHANGELOG.md @@ -3,6 +3,20 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [0.8.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/pixel@0.7.4...@thi.ng/pixel@0.8.0) (2021-03-17) + + +### Features + +* **pixel:** add bicubic samplers, fix resize() ([951fa9e](https://github.com/thi-ng/umbrella/commit/951fa9e1263db6f165dcaee3c951c09b43e42fef)) +* **pixel:** add defIndexed() HOF pixel format ([c13a568](https://github.com/thi-ng/umbrella/commit/c13a5687fac6d08c14d80f380b5c664422b18a3e)) +* **pixel:** add defSampler(), resize() ([aa71eb7](https://github.com/thi-ng/umbrella/commit/aa71eb7a2ccf02fa543c68308371143882ae5e5f)), closes [#256](https://github.com/thi-ng/umbrella/issues/256) +* **pixel:** add float format samplers, update various types ([6f9dae6](https://github.com/thi-ng/umbrella/commit/6f9dae6010118e491ed161fa4a5bd40ec4719ad4)) + + + + + ## [0.7.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/pixel@0.7.3...@thi.ng/pixel@0.7.4) (2021-03-12) **Note:** Version bump only for package @thi.ng/pixel diff --git a/packages/pixel/package.json b/packages/pixel/package.json index d0e0545097..20422334de 100644 --- a/packages/pixel/package.json +++ b/packages/pixel/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/pixel", - "version": "0.7.4", + "version": "0.8.0", "description": "Typedarray integer & float pixel buffers w/ customizable formats, blitting, dithering, convolution", "module": "./index.js", "main": "./lib/index.js", @@ -52,8 +52,8 @@ "@thi.ng/api": "^7.1.4", "@thi.ng/binary": "^2.2.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/math": "^3.2.5", - "@thi.ng/porter-duff": "^0.1.43" + "@thi.ng/math": "^3.3.0", + "@thi.ng/porter-duff": "^0.1.44" }, "files": [ "*.js", diff --git a/packages/pointfree-lang/CHANGELOG.md b/packages/pointfree-lang/CHANGELOG.md index a508034f83..c1ac3d5721 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.27](https://github.com/thi-ng/umbrella/compare/@thi.ng/pointfree-lang@1.4.26...@thi.ng/pointfree-lang@1.4.27) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/pointfree-lang + + + + + ## [1.4.26](https://github.com/thi-ng/umbrella/compare/@thi.ng/pointfree-lang@1.4.25...@thi.ng/pointfree-lang@1.4.26) (2021-03-12) **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 3c2291d68a..6de4fec084 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.26", + "version": "1.4.27", "description": "Forth style syntax layer/compiler & CLI for the @thi.ng/pointfree DSL", "module": "./index.js", "main": "./lib/index.js", @@ -55,8 +55,8 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/bench": "^2.1.0", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/pointfree": "^2.0.27", + "@thi.ng/errors": "^1.3.0", + "@thi.ng/pointfree": "^2.0.28", "commander": "^6.2.0" }, "files": [ diff --git a/packages/pointfree/CHANGELOG.md b/packages/pointfree/CHANGELOG.md index 4bbde16de1..0fda7e67a5 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.28](https://github.com/thi-ng/umbrella/compare/@thi.ng/pointfree@2.0.27...@thi.ng/pointfree@2.0.28) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/pointfree + + + + + ## [2.0.27](https://github.com/thi-ng/umbrella/compare/@thi.ng/pointfree@2.0.26...@thi.ng/pointfree@2.0.27) (2021-03-12) **Note:** Version bump only for package @thi.ng/pointfree diff --git a/packages/pointfree/package.json b/packages/pointfree/package.json index 7685360262..44bcbd7e54 100644 --- a/packages/pointfree/package.json +++ b/packages/pointfree/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/pointfree", - "version": "2.0.27", + "version": "2.0.28", "description": "Pointfree functional composition / Forth style stack execution engine", "module": "./index.js", "main": "./lib/index.js", @@ -51,9 +51,9 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/compose": "^1.4.29", + "@thi.ng/compose": "^1.4.30", "@thi.ng/equiv": "^1.0.41", - "@thi.ng/errors": "^1.2.32" + "@thi.ng/errors": "^1.3.0" }, "files": [ "*.js", diff --git a/packages/poisson/CHANGELOG.md b/packages/poisson/CHANGELOG.md index cafee73ad7..05ddcf3540 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.35](https://github.com/thi-ng/umbrella/compare/@thi.ng/poisson@1.1.34...@thi.ng/poisson@1.1.35) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/poisson + + + + + ## [1.1.34](https://github.com/thi-ng/umbrella/compare/@thi.ng/poisson@1.1.33...@thi.ng/poisson@1.1.34) (2021-03-12) **Note:** Version bump only for package @thi.ng/poisson diff --git a/packages/poisson/package.json b/packages/poisson/package.json index 139eaa16eb..a4be9ce8d4 100644 --- a/packages/poisson/package.json +++ b/packages/poisson/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/poisson", - "version": "1.1.34", + "version": "1.1.35", "description": "nD Stratified grid and Poisson-disc sampling w/ support for spatial density functions and custom PRNGs", "module": "./index.js", "main": "./lib/index.js", @@ -51,10 +51,10 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/geom-api": "^2.0.12", + "@thi.ng/geom-api": "^2.0.13", "@thi.ng/random": "^2.3.6", - "@thi.ng/transducers": "^7.6.6", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/transducers": "^7.6.7", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/porter-duff/CHANGELOG.md b/packages/porter-duff/CHANGELOG.md index ef81eb073a..5e64062271 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.44](https://github.com/thi-ng/umbrella/compare/@thi.ng/porter-duff@0.1.43...@thi.ng/porter-duff@0.1.44) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/porter-duff + + + + + ## [0.1.43](https://github.com/thi-ng/umbrella/compare/@thi.ng/porter-duff@0.1.42...@thi.ng/porter-duff@0.1.43) (2021-03-12) **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 86e1891d8b..b6cb7ae9ec 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.43", + "version": "0.1.44", "description": "Porter-Duff operators for packed ints & float-array alpha compositing", "module": "./index.js", "main": "./lib/index.js", @@ -50,7 +50,7 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/math": "^3.2.5" + "@thi.ng/math": "^3.3.0" }, "files": [ "*.js", diff --git a/packages/ramp/CHANGELOG.md b/packages/ramp/CHANGELOG.md index e4589182d0..bd83eb458d 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.53](https://github.com/thi-ng/umbrella/compare/@thi.ng/ramp@0.1.52...@thi.ng/ramp@0.1.53) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/ramp + + + + + ## [0.1.52](https://github.com/thi-ng/umbrella/compare/@thi.ng/ramp@0.1.51...@thi.ng/ramp@0.1.52) (2021-03-12) **Note:** Version bump only for package @thi.ng/ramp diff --git a/packages/ramp/package.json b/packages/ramp/package.json index 0d0778fd23..b4cffad620 100644 --- a/packages/ramp/package.json +++ b/packages/ramp/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/ramp", - "version": "0.1.52", + "version": "0.1.53", "description": "Parametric interpolated 1D lookup tables for remapping values", "module": "./index.js", "main": "./lib/index.js", @@ -49,11 +49,11 @@ "typescript": "^4.2.3" }, "dependencies": { - "@thi.ng/arrays": "^0.10.8", + "@thi.ng/arrays": "^0.10.9", "@thi.ng/compare": "^1.3.28", - "@thi.ng/math": "^3.2.5", - "@thi.ng/transducers": "^7.6.6", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/math": "^3.3.0", + "@thi.ng/transducers": "^7.6.7", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/range-coder/CHANGELOG.md b/packages/range-coder/CHANGELOG.md index 7d07a162e0..79e8e4609b 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.76](https://github.com/thi-ng/umbrella/compare/@thi.ng/range-coder@1.0.75...@thi.ng/range-coder@1.0.76) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/range-coder + + + + + ## [1.0.75](https://github.com/thi-ng/umbrella/compare/@thi.ng/range-coder@1.0.74...@thi.ng/range-coder@1.0.75) (2021-03-12) **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 fe9f530612..9b4eb6afef 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.75", + "version": "1.0.76", "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.13.1", - "@thi.ng/transducers": "^7.6.6", + "@thi.ng/transducers": "^7.6.7", "@types/mocha": "^8.2.0", "@types/node": "^14.14.14", "mocha": "^8.3.0", @@ -50,7 +50,7 @@ "typescript": "^4.2.3" }, "dependencies": { - "@thi.ng/bitstream": "^1.1.37" + "@thi.ng/bitstream": "^1.1.38" }, "files": [ "*.js", diff --git a/packages/rdom-canvas/CHANGELOG.md b/packages/rdom-canvas/CHANGELOG.md index 0e2fdd99c6..8d1d0b1d3e 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.37](https://github.com/thi-ng/umbrella/compare/@thi.ng/rdom-canvas@0.1.36...@thi.ng/rdom-canvas@0.1.37) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/rdom-canvas + + + + + ## [0.1.36](https://github.com/thi-ng/umbrella/compare/@thi.ng/rdom-canvas@0.1.35...@thi.ng/rdom-canvas@0.1.36) (2021-03-12) **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 bc217a93df..4ae27622f0 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.36", + "version": "0.1.37", "description": "@thi.ng/rdom component wrapper for @thi.ng/hiccup-canvas and declarative canvas drawing", "module": "./index.js", "main": "./lib/index.js", @@ -51,10 +51,10 @@ "@thi.ng/adapt-dpi": "^1.0.19", "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/hiccup-canvas": "^1.1.28", - "@thi.ng/rdom": "^0.4.5", - "@thi.ng/rstream": "^6.0.0", - "@thi.ng/transducers": "^7.6.6" + "@thi.ng/hiccup-canvas": "^1.1.29", + "@thi.ng/rdom": "^0.4.6", + "@thi.ng/rstream": "^6.0.1", + "@thi.ng/transducers": "^7.6.7" }, "files": [ "*.js", diff --git a/packages/rdom-components/CHANGELOG.md b/packages/rdom-components/CHANGELOG.md index 9b8aeab02a..999fb910b4 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.34](https://github.com/thi-ng/umbrella/compare/@thi.ng/rdom-components@0.1.33...@thi.ng/rdom-components@0.1.34) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/rdom-components + + + + + ## [0.1.33](https://github.com/thi-ng/umbrella/compare/@thi.ng/rdom-components@0.1.32...@thi.ng/rdom-components@0.1.33) (2021-03-12) **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 364fbcc418..18c3e552a1 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.33", + "version": "0.1.34", "description": "Collection of unstyled, customizable components for @thi.ng/rdom", "module": "./index.js", "main": "./lib/index.js", @@ -49,12 +49,12 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/associative": "^5.1.6", + "@thi.ng/associative": "^5.1.7", "@thi.ng/hiccup-html": "^0.3.17", - "@thi.ng/rdom": "^0.4.5", - "@thi.ng/rstream": "^6.0.0", - "@thi.ng/strings": "^1.15.5", - "@thi.ng/transducers": "^7.6.6" + "@thi.ng/rdom": "^0.4.6", + "@thi.ng/rstream": "^6.0.1", + "@thi.ng/strings": "^1.15.6", + "@thi.ng/transducers": "^7.6.7" }, "files": [ "*.js", diff --git a/packages/rdom/CHANGELOG.md b/packages/rdom/CHANGELOG.md index 9727061c0b..770fcbff03 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.4.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/rdom@0.4.5...@thi.ng/rdom@0.4.6) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/rdom + + + + + ## [0.4.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/rdom@0.4.4...@thi.ng/rdom@0.4.5) (2021-03-12) **Note:** Version bump only for package @thi.ng/rdom diff --git a/packages/rdom/package.json b/packages/rdom/package.json index e9d2c3da87..649b0b18b2 100644 --- a/packages/rdom/package.json +++ b/packages/rdom/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/rdom", - "version": "0.4.5", + "version": "0.4.6", "description": "Lightweight, reactive, VDOM-less UI/DOM components with async lifecycle and @thi.ng/hiccup compatible", "module": "./index.js", "main": "./lib/index.js", @@ -51,12 +51,12 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/hiccup": "^3.6.13", - "@thi.ng/paths": "^4.2.5", + "@thi.ng/errors": "^1.3.0", + "@thi.ng/hiccup": "^3.6.14", + "@thi.ng/paths": "^4.2.6", "@thi.ng/prefixes": "^0.1.17", - "@thi.ng/rstream": "^6.0.0", - "@thi.ng/strings": "^1.15.5" + "@thi.ng/rstream": "^6.0.1", + "@thi.ng/strings": "^1.15.6" }, "files": [ "*.js", diff --git a/packages/resolve-map/CHANGELOG.md b/packages/resolve-map/CHANGELOG.md index 7e4e248529..c423f21d96 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.19](https://github.com/thi-ng/umbrella/compare/@thi.ng/resolve-map@4.2.18...@thi.ng/resolve-map@4.2.19) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/resolve-map + + + + + ## [4.2.18](https://github.com/thi-ng/umbrella/compare/@thi.ng/resolve-map@4.2.17...@thi.ng/resolve-map@4.2.18) (2021-03-12) **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 6fa118a0c3..a2324ecbe8 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.18", + "version": "4.2.19", "description": "DAG resolution of vanilla objects & arrays with internally linked values", "module": "./index.js", "main": "./lib/index.js", @@ -50,8 +50,8 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/paths": "^4.2.5" + "@thi.ng/errors": "^1.3.0", + "@thi.ng/paths": "^4.2.6" }, "files": [ "*.js", diff --git a/packages/rle-pack/CHANGELOG.md b/packages/rle-pack/CHANGELOG.md index 5b2a4c02d2..bc71ff8f0f 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.38](https://github.com/thi-ng/umbrella/compare/@thi.ng/rle-pack@2.1.37...@thi.ng/rle-pack@2.1.38) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/rle-pack + + + + + ## [2.1.37](https://github.com/thi-ng/umbrella/compare/@thi.ng/rle-pack@2.1.36...@thi.ng/rle-pack@2.1.37) (2021-03-12) **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 6ebfa22a7f..7ff5b4c942 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.37", + "version": "2.1.38", "description": "Binary run-length encoding packer w/ flexible repeat bit widths", "module": "./index.js", "main": "./lib/index.js", @@ -50,8 +50,8 @@ "typescript": "^4.2.3" }, "dependencies": { - "@thi.ng/bitstream": "^1.1.37", - "@thi.ng/errors": "^1.2.32" + "@thi.ng/bitstream": "^1.1.38", + "@thi.ng/errors": "^1.3.0" }, "files": [ "*.js", diff --git a/packages/router/CHANGELOG.md b/packages/router/CHANGELOG.md index 683c0e80bb..0913d792e1 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.46](https://github.com/thi-ng/umbrella/compare/@thi.ng/router@2.0.45...@thi.ng/router@2.0.46) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/router + + + + + ## [2.0.45](https://github.com/thi-ng/umbrella/compare/@thi.ng/router@2.0.44...@thi.ng/router@2.0.45) (2021-03-12) **Note:** Version bump only for package @thi.ng/router diff --git a/packages/router/package.json b/packages/router/package.json index f55c5b9e0d..b2755bdb04 100644 --- a/packages/router/package.json +++ b/packages/router/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/router", - "version": "2.0.45", + "version": "2.0.46", "description": "Generic router for browser & non-browser based applications", "module": "./index.js", "main": "./lib/index.js", @@ -52,7 +52,7 @@ "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", "@thi.ng/equiv": "^1.0.41", - "@thi.ng/errors": "^1.2.32", + "@thi.ng/errors": "^1.3.0", "tslib": "^2.1.0" }, "files": [ diff --git a/packages/rstream-csp/CHANGELOG.md b/packages/rstream-csp/CHANGELOG.md index 5967eee8c2..03be26dda0 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.60](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-csp@2.0.59...@thi.ng/rstream-csp@2.0.60) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/rstream-csp + + + + + ## [2.0.59](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-csp@2.0.58...@thi.ng/rstream-csp@2.0.59) (2021-03-12) **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 7db24a8ff4..e6a765bebe 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.59", + "version": "2.0.60", "description": "@thi.ng/csp bridge module for @thi.ng/rstream", "module": "./index.js", "main": "./lib/index.js", @@ -49,8 +49,8 @@ "typescript": "^4.2.3" }, "dependencies": { - "@thi.ng/csp": "^1.1.56", - "@thi.ng/rstream": "^6.0.0" + "@thi.ng/csp": "^1.1.57", + "@thi.ng/rstream": "^6.0.1" }, "files": [ "*.js", diff --git a/packages/rstream-dot/CHANGELOG.md b/packages/rstream-dot/CHANGELOG.md index 137df74fc4..d7afe01e01 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.2.7](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-dot@1.2.6...@thi.ng/rstream-dot@1.2.7) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/rstream-dot + + + + + ## [1.2.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-dot@1.2.5...@thi.ng/rstream-dot@1.2.6) (2021-03-12) **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 8fbf50ffc3..5c615a42e2 100644 --- a/packages/rstream-dot/package.json +++ b/packages/rstream-dot/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/rstream-dot", - "version": "1.2.6", + "version": "1.2.7", "description": "Graphviz DOT conversion of @thi.ng/rstream dataflow graph topologies", "module": "./index.js", "main": "./lib/index.js", @@ -49,9 +49,9 @@ "typescript": "^4.2.3" }, "dependencies": { - "@thi.ng/rstream": "^6.0.0", - "@thi.ng/strings": "^1.15.5", - "@thi.ng/transducers": "^7.6.6" + "@thi.ng/rstream": "^6.0.1", + "@thi.ng/strings": "^1.15.6", + "@thi.ng/transducers": "^7.6.7" }, "files": [ "*.js", diff --git a/packages/rstream-gestures/CHANGELOG.md b/packages/rstream-gestures/CHANGELOG.md index 5431087a85..a07673829b 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.14](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-gestures@3.0.13...@thi.ng/rstream-gestures@3.0.14) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/rstream-gestures + + + + + ## [3.0.13](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-gestures@3.0.12...@thi.ng/rstream-gestures@3.0.13) (2021-03-12) **Note:** Version bump only for package @thi.ng/rstream-gestures diff --git a/packages/rstream-gestures/package.json b/packages/rstream-gestures/package.json index 86215986e5..70bdea540e 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.13", + "version": "3.0.14", "description": "Unified mouse, mouse wheel & multi-touch event stream abstraction", "module": "./index.js", "main": "./lib/index.js", @@ -51,9 +51,9 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/math": "^3.2.5", - "@thi.ng/rstream": "^6.0.0", - "@thi.ng/transducers": "^7.6.6" + "@thi.ng/math": "^3.3.0", + "@thi.ng/rstream": "^6.0.1", + "@thi.ng/transducers": "^7.6.7" }, "files": [ "*.js", diff --git a/packages/rstream-graph/CHANGELOG.md b/packages/rstream-graph/CHANGELOG.md index a72366541a..ad270294b6 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.61](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-graph@3.2.60...@thi.ng/rstream-graph@3.2.61) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/rstream-graph + + + + + ## [3.2.60](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-graph@3.2.59...@thi.ng/rstream-graph@3.2.60) (2021-03-12) **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 c1b404e222..56265b6867 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.60", + "version": "3.2.61", "description": "Declarative dataflow graph construction for @thi.ng/rstream", "module": "./index.js", "main": "./lib/index.js", @@ -50,13 +50,13 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/atom": "^4.1.33", + "@thi.ng/atom": "^4.1.34", "@thi.ng/checks": "^2.9.5", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/paths": "^4.2.5", - "@thi.ng/resolve-map": "^4.2.18", - "@thi.ng/rstream": "^6.0.0", - "@thi.ng/transducers": "^7.6.6" + "@thi.ng/errors": "^1.3.0", + "@thi.ng/paths": "^4.2.6", + "@thi.ng/resolve-map": "^4.2.19", + "@thi.ng/rstream": "^6.0.1", + "@thi.ng/transducers": "^7.6.7" }, "files": [ "*.js", diff --git a/packages/rstream-log-file/CHANGELOG.md b/packages/rstream-log-file/CHANGELOG.md index 3b936d7507..ff3b116ac9 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.82](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-log-file@0.1.81...@thi.ng/rstream-log-file@0.1.82) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/rstream-log-file + + + + + ## [0.1.81](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-log-file@0.1.80...@thi.ng/rstream-log-file@0.1.81) (2021-03-12) **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 6c929d0d34..c2f65fa91d 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.81", + "version": "0.1.82", "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.2.3" }, "dependencies": { - "@thi.ng/rstream": "^6.0.0" + "@thi.ng/rstream": "^6.0.1" }, "files": [ "*.js", diff --git a/packages/rstream-log/CHANGELOG.md b/packages/rstream-log/CHANGELOG.md index 19684a96d1..9274417f6e 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.2.11](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-log@3.2.10...@thi.ng/rstream-log@3.2.11) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/rstream-log + + + + + ## [3.2.10](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-log@3.2.9...@thi.ng/rstream-log@3.2.10) (2021-03-12) **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 3e7acfc974..551744fe59 100644 --- a/packages/rstream-log/package.json +++ b/packages/rstream-log/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/rstream-log", - "version": "3.2.10", + "version": "3.2.11", "description": "Structured, multilevel & hierarchical loggers based on @thi.ng/rstream", "module": "./index.js", "main": "./lib/index.js", @@ -51,10 +51,10 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/rstream": "^6.0.0", - "@thi.ng/strings": "^1.15.5", - "@thi.ng/transducers": "^7.6.6" + "@thi.ng/errors": "^1.3.0", + "@thi.ng/rstream": "^6.0.1", + "@thi.ng/strings": "^1.15.6", + "@thi.ng/transducers": "^7.6.7" }, "files": [ "*.js", diff --git a/packages/rstream-query/CHANGELOG.md b/packages/rstream-query/CHANGELOG.md index b550e8bfd0..af76e44856 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.67](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-query@1.1.66...@thi.ng/rstream-query@1.1.67) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/rstream-query + + + + + ## [1.1.66](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream-query@1.1.65...@thi.ng/rstream-query@1.1.66) (2021-03-12) **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 c1409e645e..dbf9ba8327 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.66", + "version": "1.1.67", "description": "@thi.ng/rstream based triple store & reactive query engine", "module": "./index.js", "main": "./lib/index.js", @@ -50,14 +50,14 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/associative": "^5.1.6", + "@thi.ng/associative": "^5.1.7", "@thi.ng/checks": "^2.9.5", "@thi.ng/equiv": "^1.0.41", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/math": "^3.2.5", - "@thi.ng/rstream": "^6.0.0", - "@thi.ng/rstream-dot": "^1.2.6", - "@thi.ng/transducers": "^7.6.6" + "@thi.ng/errors": "^1.3.0", + "@thi.ng/math": "^3.3.0", + "@thi.ng/rstream": "^6.0.1", + "@thi.ng/rstream-dot": "^1.2.7", + "@thi.ng/transducers": "^7.6.7" }, "files": [ "*.js", diff --git a/packages/rstream/CHANGELOG.md b/packages/rstream/CHANGELOG.md index f328f62644..bd3311ff47 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. +## [6.0.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream@6.0.0...@thi.ng/rstream@6.0.1) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/rstream + + + + + # [6.0.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/rstream@5.1.7...@thi.ng/rstream@6.0.0) (2021-03-12) diff --git a/packages/rstream/package.json b/packages/rstream/package.json index 49519edf25..dab63742ca 100644 --- a/packages/rstream/package.json +++ b/packages/rstream/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/rstream", - "version": "6.0.0", + "version": "6.0.1", "description": "Reactive streams & subscription primitives for constructing dataflow graphs / pipelines", "module": "./index.js", "main": "./lib/index.js", @@ -50,12 +50,12 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/arrays": "^0.10.8", - "@thi.ng/associative": "^5.1.6", - "@thi.ng/atom": "^4.1.33", + "@thi.ng/arrays": "^0.10.9", + "@thi.ng/associative": "^5.1.7", + "@thi.ng/atom": "^4.1.34", "@thi.ng/checks": "^2.9.5", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/transducers": "^7.6.6" + "@thi.ng/errors": "^1.3.0", + "@thi.ng/transducers": "^7.6.7" }, "files": [ "*.js", diff --git a/packages/sax/CHANGELOG.md b/packages/sax/CHANGELOG.md index 84b92666a2..ff0bdac1a4 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.56](https://github.com/thi-ng/umbrella/compare/@thi.ng/sax@1.1.55...@thi.ng/sax@1.1.56) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/sax + + + + + ## [1.1.55](https://github.com/thi-ng/umbrella/compare/@thi.ng/sax@1.1.54...@thi.ng/sax@1.1.55) (2021-03-12) **Note:** Version bump only for package @thi.ng/sax diff --git a/packages/sax/package.json b/packages/sax/package.json index 74089974f7..5ccbbbaebd 100644 --- a/packages/sax/package.json +++ b/packages/sax/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/sax", - "version": "1.1.55", + "version": "1.1.56", "description": "Transducer-based, SAX-like, non-validating, speedy & tiny XML parser", "module": "./index.js", "main": "./lib/index.js", @@ -50,8 +50,8 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/transducers": "^7.6.6", - "@thi.ng/transducers-fsm": "^1.1.55" + "@thi.ng/transducers": "^7.6.7", + "@thi.ng/transducers-fsm": "^1.1.56" }, "files": [ "*.js", diff --git a/packages/scenegraph/CHANGELOG.md b/packages/scenegraph/CHANGELOG.md index 9fe8af4068..3b39cd6656 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.25](https://github.com/thi-ng/umbrella/compare/@thi.ng/scenegraph@0.3.24...@thi.ng/scenegraph@0.3.25) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/scenegraph + + + + + ## [0.3.24](https://github.com/thi-ng/umbrella/compare/@thi.ng/scenegraph@0.3.23...@thi.ng/scenegraph@0.3.24) (2021-03-12) **Note:** Version bump only for package @thi.ng/scenegraph diff --git a/packages/scenegraph/package.json b/packages/scenegraph/package.json index 3a35289540..138f198dce 100644 --- a/packages/scenegraph/package.json +++ b/packages/scenegraph/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/scenegraph", - "version": "0.3.24", + "version": "0.3.25", "description": "Extensible 2D/3D scene graph with @thi.ng/hiccup-canvas support", "module": "./index.js", "main": "./lib/index.js", @@ -51,8 +51,8 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/matrices": "^0.6.50", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/matrices": "^0.6.51", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/sexpr/CHANGELOG.md b/packages/sexpr/CHANGELOG.md index 3dff9804f7..7dddc82146 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.40](https://github.com/thi-ng/umbrella/compare/@thi.ng/sexpr@0.2.39...@thi.ng/sexpr@0.2.40) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/sexpr + + + + + ## [0.2.39](https://github.com/thi-ng/umbrella/compare/@thi.ng/sexpr@0.2.38...@thi.ng/sexpr@0.2.39) (2021-03-12) **Note:** Version bump only for package @thi.ng/sexpr diff --git a/packages/sexpr/package.json b/packages/sexpr/package.json index 670a00d5bc..6a1025eb72 100644 --- a/packages/sexpr/package.json +++ b/packages/sexpr/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/sexpr", - "version": "0.2.39", + "version": "0.2.40", "description": "Extensible S-Expression parser & runtime infrastructure", "module": "./index.js", "main": "./lib/index.js", @@ -51,7 +51,7 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/defmulti": "^1.3.10" + "@thi.ng/defmulti": "^1.3.11" }, "files": [ "*.js", diff --git a/packages/shader-ast-glsl/CHANGELOG.md b/packages/shader-ast-glsl/CHANGELOG.md index c2aea05a66..3b49e3074a 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.28](https://github.com/thi-ng/umbrella/compare/@thi.ng/shader-ast-glsl@0.2.27...@thi.ng/shader-ast-glsl@0.2.28) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/shader-ast-glsl + + + + + ## [0.2.27](https://github.com/thi-ng/umbrella/compare/@thi.ng/shader-ast-glsl@0.2.26...@thi.ng/shader-ast-glsl@0.2.27) (2021-03-12) **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 30eb6926cd..4fc974b2a2 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.27", + "version": "0.2.28", "description": "Customizable GLSL codegen for @thi.ng/shader-ast", "module": "./index.js", "main": "./lib/index.js", @@ -51,8 +51,8 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/shader-ast": "^0.8.5" + "@thi.ng/errors": "^1.3.0", + "@thi.ng/shader-ast": "^0.8.6" }, "files": [ "*.js", diff --git a/packages/shader-ast-js/CHANGELOG.md b/packages/shader-ast-js/CHANGELOG.md index 1ffd73c8be..47eac6941b 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.27](https://github.com/thi-ng/umbrella/compare/@thi.ng/shader-ast-js@0.5.26...@thi.ng/shader-ast-js@0.5.27) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/shader-ast-js + + + + + ## [0.5.26](https://github.com/thi-ng/umbrella/compare/@thi.ng/shader-ast-js@0.5.25...@thi.ng/shader-ast-js@0.5.26) (2021-03-12) **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 36be947591..f0474b4dae 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.26", + "version": "0.5.27", "description": "Customizable JS codegen, compiler & runtime for @thi.ng/shader-ast", "module": "./index.js", "main": "./lib/index.js", @@ -51,12 +51,12 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/math": "^3.2.5", - "@thi.ng/matrices": "^0.6.50", - "@thi.ng/pixel": "^0.7.4", - "@thi.ng/shader-ast": "^0.8.5", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/errors": "^1.3.0", + "@thi.ng/math": "^3.3.0", + "@thi.ng/matrices": "^0.6.51", + "@thi.ng/pixel": "^0.8.0", + "@thi.ng/shader-ast": "^0.8.6", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/shader-ast-stdlib/CHANGELOG.md b/packages/shader-ast-stdlib/CHANGELOG.md index b43affba29..4c418e56eb 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.20](https://github.com/thi-ng/umbrella/compare/@thi.ng/shader-ast-stdlib@0.5.19...@thi.ng/shader-ast-stdlib@0.5.20) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/shader-ast-stdlib + + + + + ## [0.5.19](https://github.com/thi-ng/umbrella/compare/@thi.ng/shader-ast-stdlib@0.5.18...@thi.ng/shader-ast-stdlib@0.5.19) (2021-03-12) **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 4aa561ba36..3aa3ea932b 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.19", + "version": "0.5.20", "description": "Function collection for modular GPGPU / shader programming with @thi.ng/shader-ast", "module": "./index.js", "main": "./lib/index.js", @@ -50,7 +50,7 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/shader-ast": "^0.8.5" + "@thi.ng/shader-ast": "^0.8.6" }, "files": [ "*.js", diff --git a/packages/shader-ast/CHANGELOG.md b/packages/shader-ast/CHANGELOG.md index 0108ae6460..76f98baebd 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.8.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/shader-ast@0.8.5...@thi.ng/shader-ast@0.8.6) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/shader-ast + + + + + ## [0.8.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/shader-ast@0.8.4...@thi.ng/shader-ast@0.8.5) (2021-03-12) **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 00dbe9197e..9c26f32bde 100644 --- a/packages/shader-ast/package.json +++ b/packages/shader-ast/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/shader-ast", - "version": "0.8.5", + "version": "0.8.6", "description": "DSL to define shader code in TypeScript and cross-compile to GLSL, JS and other targets", "module": "./index.js", "main": "./lib/index.js", @@ -51,9 +51,9 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/defmulti": "^1.3.10", - "@thi.ng/dgraph": "^1.3.15", - "@thi.ng/errors": "^1.2.32" + "@thi.ng/defmulti": "^1.3.11", + "@thi.ng/dgraph": "^1.3.16", + "@thi.ng/errors": "^1.3.0" }, "files": [ "*.js", diff --git a/packages/simd/CHANGELOG.md b/packages/simd/CHANGELOG.md index 8553f8af44..66ce1bbc80 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.24](https://github.com/thi-ng/umbrella/compare/@thi.ng/simd@0.4.23...@thi.ng/simd@0.4.24) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/simd + + + + + ## [0.4.23](https://github.com/thi-ng/umbrella/compare/@thi.ng/simd@0.4.22...@thi.ng/simd@0.4.23) (2021-03-12) **Note:** Version bump only for package @thi.ng/simd diff --git a/packages/simd/package.json b/packages/simd/package.json index 5f679a70be..2eff64d1a4 100644 --- a/packages/simd/package.json +++ b/packages/simd/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/simd", - "version": "0.4.23", + "version": "0.4.24", "description": "WASM based SIMD vector operations for batch processing", "module": "./index.js", "main": "./lib/index.js", @@ -52,7 +52,7 @@ "typescript": "^4.2.3" }, "dependencies": { - "@thi.ng/transducers-binary": "^0.6.12" + "@thi.ng/transducers-binary": "^0.6.13" }, "files": [ "*.js", diff --git a/packages/soa/CHANGELOG.md b/packages/soa/CHANGELOG.md index 3ceb6b2085..efa8ec6d65 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.2.7](https://github.com/thi-ng/umbrella/compare/@thi.ng/soa@0.2.6...@thi.ng/soa@0.2.7) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/soa + + + + + ## [0.2.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/soa@0.2.5...@thi.ng/soa@0.2.6) (2021-03-12) **Note:** Version bump only for package @thi.ng/soa diff --git a/packages/soa/package.json b/packages/soa/package.json index 6265c16cc6..fb4050b512 100644 --- a/packages/soa/package.json +++ b/packages/soa/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/soa", - "version": "0.2.6", + "version": "0.2.7", "description": "SOA & AOS memory mapped structured views with optional & extensible serialization", "module": "./index.js", "main": "./lib/index.js", @@ -52,9 +52,9 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/binary": "^2.2.4", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/transducers-binary": "^0.6.12", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/errors": "^1.3.0", + "@thi.ng/transducers-binary": "^0.6.13", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/sparse/CHANGELOG.md b/packages/sparse/CHANGELOG.md index 138fd0239b..553e589439 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.72](https://github.com/thi-ng/umbrella/compare/@thi.ng/sparse@0.1.71...@thi.ng/sparse@0.1.72) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/sparse + + + + + ## [0.1.71](https://github.com/thi-ng/umbrella/compare/@thi.ng/sparse@0.1.70...@thi.ng/sparse@0.1.71) (2021-03-12) **Note:** Version bump only for package @thi.ng/sparse diff --git a/packages/sparse/package.json b/packages/sparse/package.json index 036e4b764d..3c4be3fb52 100644 --- a/packages/sparse/package.json +++ b/packages/sparse/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/sparse", - "version": "0.1.71", + "version": "0.1.72", "description": "Sparse vector & matrix implementations", "module": "./index.js", "main": "./lib/index.js", @@ -50,8 +50,8 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/transducers": "^7.6.6" + "@thi.ng/errors": "^1.3.0", + "@thi.ng/transducers": "^7.6.7" }, "files": [ "*.js", diff --git a/packages/strings/CHANGELOG.md b/packages/strings/CHANGELOG.md index 43dbe83abe..a27f64b545 100644 --- a/packages/strings/CHANGELOG.md +++ b/packages/strings/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.15.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/strings@1.15.5...@thi.ng/strings@1.15.6) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/strings + + + + + ## [1.15.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/strings@1.15.4...@thi.ng/strings@1.15.5) (2021-03-12) **Note:** Version bump only for package @thi.ng/strings diff --git a/packages/strings/package.json b/packages/strings/package.json index 303db22f89..3ec78572e0 100644 --- a/packages/strings/package.json +++ b/packages/strings/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/strings", - "version": "1.15.5", + "version": "1.15.6", "description": "Various string formatting & utility functions", "module": "./index.js", "main": "./lib/index.js", @@ -50,7 +50,7 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/errors": "^1.2.32", + "@thi.ng/errors": "^1.3.0", "@thi.ng/hex": "^0.2.5", "@thi.ng/memoize": "^2.1.14" }, diff --git a/packages/system/CHANGELOG.md b/packages/system/CHANGELOG.md index 1a3f2d2153..55fcaf5b2d 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.45](https://github.com/thi-ng/umbrella/compare/@thi.ng/system@0.2.44...@thi.ng/system@0.2.45) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/system + + + + + ## [0.2.44](https://github.com/thi-ng/umbrella/compare/@thi.ng/system@0.2.43...@thi.ng/system@0.2.44) (2021-03-12) **Note:** Version bump only for package @thi.ng/system diff --git a/packages/system/package.json b/packages/system/package.json index f214c03251..fefd304eb2 100644 --- a/packages/system/package.json +++ b/packages/system/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/system", - "version": "0.2.44", + "version": "0.2.45", "description": "Minimal DI / life cycle container for stateful app components", "module": "./index.js", "main": "./lib/index.js", @@ -50,7 +50,7 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/dgraph": "^1.3.15" + "@thi.ng/dgraph": "^1.3.16" }, "files": [ "*.js", diff --git a/packages/text-canvas/CHANGELOG.md b/packages/text-canvas/CHANGELOG.md index 0b6e391bdc..ed84ddd0e7 100644 --- a/packages/text-canvas/CHANGELOG.md +++ b/packages/text-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.4.12](https://github.com/thi-ng/umbrella/compare/@thi.ng/text-canvas@0.4.11...@thi.ng/text-canvas@0.4.12) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/text-canvas + + + + + ## [0.4.11](https://github.com/thi-ng/umbrella/compare/@thi.ng/text-canvas@0.4.10...@thi.ng/text-canvas@0.4.11) (2021-03-12) **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 1ce7a874e3..4c871be275 100644 --- a/packages/text-canvas/package.json +++ b/packages/text-canvas/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/text-canvas", - "version": "0.4.11", + "version": "0.4.12", "description": "Text based canvas, drawing, tables with arbitrary formatting (incl. ANSI/HTML)", "module": "./index.js", "main": "./lib/index.js", @@ -50,13 +50,13 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/arrays": "^0.10.8", + "@thi.ng/arrays": "^0.10.9", "@thi.ng/checks": "^2.9.5", - "@thi.ng/geom-clip-line": "^1.2.26", - "@thi.ng/math": "^3.2.5", + "@thi.ng/geom-clip-line": "^1.2.27", + "@thi.ng/math": "^3.3.0", "@thi.ng/memoize": "^2.1.14", - "@thi.ng/strings": "^1.15.5", - "@thi.ng/transducers": "^7.6.6" + "@thi.ng/strings": "^1.15.6", + "@thi.ng/transducers": "^7.6.7" }, "files": [ "*.js", diff --git a/packages/transducers-binary/CHANGELOG.md b/packages/transducers-binary/CHANGELOG.md index 6b54f8480c..649e498755 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.13](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-binary@0.6.12...@thi.ng/transducers-binary@0.6.13) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/transducers-binary + + + + + ## [0.6.12](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-binary@0.6.11...@thi.ng/transducers-binary@0.6.12) (2021-03-12) **Note:** Version bump only for package @thi.ng/transducers-binary diff --git a/packages/transducers-binary/package.json b/packages/transducers-binary/package.json index 0a85bf1e37..9e5c779516 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.12", + "version": "0.6.13", "description": "Binary data related transducers & reducers", "module": "./index.js", "main": "./lib/index.js", @@ -50,11 +50,11 @@ }, "dependencies": { "@thi.ng/binary": "^2.2.4", - "@thi.ng/compose": "^1.4.29", - "@thi.ng/errors": "^1.2.32", + "@thi.ng/compose": "^1.4.30", + "@thi.ng/errors": "^1.3.0", "@thi.ng/hex": "^0.2.5", "@thi.ng/random": "^2.3.6", - "@thi.ng/transducers": "^7.6.6" + "@thi.ng/transducers": "^7.6.7" }, "files": [ "*.js", diff --git a/packages/transducers-fsm/CHANGELOG.md b/packages/transducers-fsm/CHANGELOG.md index fd4753a4b9..29e1ccfaad 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.56](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-fsm@1.1.55...@thi.ng/transducers-fsm@1.1.56) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/transducers-fsm + + + + + ## [1.1.55](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-fsm@1.1.54...@thi.ng/transducers-fsm@1.1.55) (2021-03-12) **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 3e3a3ef92d..95182843e5 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.55", + "version": "1.1.56", "description": "Transducer-based Finite State Machine transformer", "module": "./index.js", "main": "./lib/index.js", @@ -50,7 +50,7 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/transducers": "^7.6.6" + "@thi.ng/transducers": "^7.6.7" }, "files": [ "*.js", diff --git a/packages/transducers-hdom/CHANGELOG.md b/packages/transducers-hdom/CHANGELOG.md index f81be07434..49792a0002 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.88](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-hdom@2.0.87...@thi.ng/transducers-hdom@2.0.88) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/transducers-hdom + + + + + ## [2.0.87](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-hdom@2.0.86...@thi.ng/transducers-hdom@2.0.87) (2021-03-12) **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 68d9ecfd34..557e3377da 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.87", + "version": "2.0.88", "description": "Transducer based UI updater for @thi.ng/hdom", "module": "./index.js", "main": "./lib/index.js", @@ -49,9 +49,9 @@ "typescript": "^4.2.3" }, "dependencies": { - "@thi.ng/hdom": "^8.2.23", - "@thi.ng/hiccup": "^3.6.13", - "@thi.ng/transducers": "^7.6.6" + "@thi.ng/hdom": "^8.2.24", + "@thi.ng/hiccup": "^3.6.14", + "@thi.ng/transducers": "^7.6.7" }, "files": [ "*.js", diff --git a/packages/transducers-patch/CHANGELOG.md b/packages/transducers-patch/CHANGELOG.md index 5e8e37d467..3e24605ac2 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.13](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-patch@0.2.12...@thi.ng/transducers-patch@0.2.13) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/transducers-patch + + + + + ## [0.2.12](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-patch@0.2.11...@thi.ng/transducers-patch@0.2.12) (2021-03-12) **Note:** Version bump only for package @thi.ng/transducers-patch diff --git a/packages/transducers-patch/package.json b/packages/transducers-patch/package.json index 68c3562154..1b355c9b6c 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.12", + "version": "0.2.13", "description": "Reducers for patch-based, immutable-by-default array & object editing", "module": "./index.js", "main": "./lib/index.js", @@ -51,9 +51,9 @@ "dependencies": { "@thi.ng/api": "^7.1.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/paths": "^4.2.5", - "@thi.ng/transducers": "^7.6.6" + "@thi.ng/errors": "^1.3.0", + "@thi.ng/paths": "^4.2.6", + "@thi.ng/transducers": "^7.6.7" }, "files": [ "*.js", diff --git a/packages/transducers-stats/CHANGELOG.md b/packages/transducers-stats/CHANGELOG.md index 0c57fc47de..c8bee8985d 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.57](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-stats@1.1.56...@thi.ng/transducers-stats@1.1.57) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/transducers-stats + + + + + ## [1.1.56](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers-stats@1.1.55...@thi.ng/transducers-stats@1.1.56) (2021-03-12) **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 fa3fb306f5..547a331054 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.56", + "version": "1.1.57", "description": "Transducers for statistical / technical analysis", "module": "./index.js", "main": "./lib/index.js", @@ -50,9 +50,9 @@ }, "dependencies": { "@thi.ng/checks": "^2.9.5", - "@thi.ng/dcons": "^2.3.16", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/transducers": "^7.6.6" + "@thi.ng/dcons": "^2.3.17", + "@thi.ng/errors": "^1.3.0", + "@thi.ng/transducers": "^7.6.7" }, "files": [ "*.js", diff --git a/packages/transducers/CHANGELOG.md b/packages/transducers/CHANGELOG.md index 6f4c9273d1..18200d06ac 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.6.7](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers@7.6.6...@thi.ng/transducers@7.6.7) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/transducers + + + + + ## [7.6.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/transducers@7.6.5...@thi.ng/transducers@7.6.6) (2021-03-12) **Note:** Version bump only for package @thi.ng/transducers diff --git a/packages/transducers/package.json b/packages/transducers/package.json index 596384037f..3cad2a7640 100644 --- a/packages/transducers/package.json +++ b/packages/transducers/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/transducers", - "version": "7.6.6", + "version": "7.6.7", "description": "Lightweight transducer implementations for ES6 / TypeScript", "module": "./index.js", "main": "./lib/index.js", @@ -50,12 +50,12 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/arrays": "^0.10.8", + "@thi.ng/arrays": "^0.10.9", "@thi.ng/checks": "^2.9.5", "@thi.ng/compare": "^1.3.28", - "@thi.ng/compose": "^1.4.29", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/math": "^3.2.5", + "@thi.ng/compose": "^1.4.30", + "@thi.ng/errors": "^1.3.0", + "@thi.ng/math": "^3.3.0", "@thi.ng/random": "^2.3.6" }, "files": [ diff --git a/packages/vector-pools/CHANGELOG.md b/packages/vector-pools/CHANGELOG.md index d67010e90f..7f7651d6d8 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. +## [2.0.7](https://github.com/thi-ng/umbrella/compare/@thi.ng/vector-pools@2.0.6...@thi.ng/vector-pools@2.0.7) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/vector-pools + + + + + ## [2.0.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/vector-pools@2.0.5...@thi.ng/vector-pools@2.0.6) (2021-03-12) **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 4c4a517677..e27599837d 100644 --- a/packages/vector-pools/package.json +++ b/packages/vector-pools/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/vector-pools", - "version": "2.0.6", + "version": "2.0.7", "description": "Data structures for managing & working with strided, memory mapped vectors", "module": "./index.js", "main": "./lib/index.js", @@ -52,9 +52,9 @@ "@thi.ng/api": "^7.1.4", "@thi.ng/binary": "^2.2.4", "@thi.ng/checks": "^2.9.5", - "@thi.ng/malloc": "^5.0.5", - "@thi.ng/transducers": "^7.6.6", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/malloc": "^5.0.6", + "@thi.ng/transducers": "^7.6.7", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/vectors/CHANGELOG.md b/packages/vectors/CHANGELOG.md index c0a1cbf261..a4f60b46e5 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. +## [5.1.5](https://github.com/thi-ng/umbrella/compare/@thi.ng/vectors@5.1.4...@thi.ng/vectors@5.1.5) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/vectors + + + + + ## [5.1.4](https://github.com/thi-ng/umbrella/compare/@thi.ng/vectors@5.1.3...@thi.ng/vectors@5.1.4) (2021-03-12) **Note:** Version bump only for package @thi.ng/vectors diff --git a/packages/vectors/package.json b/packages/vectors/package.json index e770541520..e907b71a7b 100644 --- a/packages/vectors/package.json +++ b/packages/vectors/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/vectors", - "version": "5.1.4", + "version": "5.1.5", "description": "Optimized 2d/3d/4d and arbitrary length vector operations", "module": "./index.js", "main": "./lib/index.js", @@ -53,11 +53,11 @@ "@thi.ng/binary": "^2.2.4", "@thi.ng/checks": "^2.9.5", "@thi.ng/equiv": "^1.0.41", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/math": "^3.2.5", + "@thi.ng/errors": "^1.3.0", + "@thi.ng/math": "^3.3.0", "@thi.ng/memoize": "^2.1.14", "@thi.ng/random": "^2.3.6", - "@thi.ng/transducers": "^7.6.6" + "@thi.ng/transducers": "^7.6.7" }, "files": [ "*.js", diff --git a/packages/viz/CHANGELOG.md b/packages/viz/CHANGELOG.md index 18cbd4e09f..22e1c4d207 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.17](https://github.com/thi-ng/umbrella/compare/@thi.ng/viz@0.2.16...@thi.ng/viz@0.2.17) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/viz + + + + + ## [0.2.16](https://github.com/thi-ng/umbrella/compare/@thi.ng/viz@0.2.15...@thi.ng/viz@0.2.16) (2021-03-12) **Note:** Version bump only for package @thi.ng/viz diff --git a/packages/viz/package.json b/packages/viz/package.json index bd8f44b9ef..d36c36f369 100644 --- a/packages/viz/package.json +++ b/packages/viz/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/viz", - "version": "0.2.16", + "version": "0.2.17", "description": "Declarative, functional & multi-format data visualization toolkit based around @thi.ng/hiccup", "module": "./index.js", "main": "./lib/index.js", @@ -57,12 +57,12 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/arrays": "^0.10.8", - "@thi.ng/associative": "^5.1.6", + "@thi.ng/arrays": "^0.10.9", + "@thi.ng/associative": "^5.1.7", "@thi.ng/checks": "^2.9.5", - "@thi.ng/math": "^3.2.5", - "@thi.ng/strings": "^1.15.5", - "@thi.ng/transducers": "^7.6.6" + "@thi.ng/math": "^3.3.0", + "@thi.ng/strings": "^1.15.6", + "@thi.ng/transducers": "^7.6.7" }, "files": [ "*.js", diff --git a/packages/webgl-msdf/CHANGELOG.md b/packages/webgl-msdf/CHANGELOG.md index afdebaff74..b601749349 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.80](https://github.com/thi-ng/umbrella/compare/@thi.ng/webgl-msdf@0.1.79...@thi.ng/webgl-msdf@0.1.80) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/webgl-msdf + + + + + ## [0.1.79](https://github.com/thi-ng/umbrella/compare/@thi.ng/webgl-msdf@0.1.78...@thi.ng/webgl-msdf@0.1.79) (2021-03-12) **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 9f5b51398e..1761f6d6ff 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.79", + "version": "0.1.80", "description": "Multi-channel SDF font rendering & basic text layout for WebGL", "module": "./index.js", "main": "./lib/index.js", @@ -50,11 +50,11 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/shader-ast": "^0.8.5", - "@thi.ng/transducers": "^7.6.6", - "@thi.ng/vector-pools": "^2.0.6", - "@thi.ng/vectors": "^5.1.4", - "@thi.ng/webgl": "^4.0.6" + "@thi.ng/shader-ast": "^0.8.6", + "@thi.ng/transducers": "^7.6.7", + "@thi.ng/vector-pools": "^2.0.7", + "@thi.ng/vectors": "^5.1.5", + "@thi.ng/webgl": "^4.0.7" }, "files": [ "*.js", diff --git a/packages/webgl-shadertoy/CHANGELOG.md b/packages/webgl-shadertoy/CHANGELOG.md index 4df5e0e705..44297f21ec 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.67](https://github.com/thi-ng/umbrella/compare/@thi.ng/webgl-shadertoy@0.2.66...@thi.ng/webgl-shadertoy@0.2.67) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/webgl-shadertoy + + + + + ## [0.2.66](https://github.com/thi-ng/umbrella/compare/@thi.ng/webgl-shadertoy@0.2.65...@thi.ng/webgl-shadertoy@0.2.66) (2021-03-12) **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 e741ca9a8c..e57ed896c7 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.66", + "version": "0.2.67", "description": "Basic WebGL scaffolding for running interactive fragment shaders via @thi.ng/shader-ast", "module": "./index.js", "main": "./lib/index.js", @@ -50,9 +50,9 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/shader-ast": "^0.8.5", - "@thi.ng/shader-ast-glsl": "^0.2.27", - "@thi.ng/webgl": "^4.0.6" + "@thi.ng/shader-ast": "^0.8.6", + "@thi.ng/shader-ast-glsl": "^0.2.28", + "@thi.ng/webgl": "^4.0.7" }, "files": [ "*.js", diff --git a/packages/webgl/CHANGELOG.md b/packages/webgl/CHANGELOG.md index a6c3477d7e..bbc066acce 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. +## [4.0.7](https://github.com/thi-ng/umbrella/compare/@thi.ng/webgl@4.0.6...@thi.ng/webgl@4.0.7) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/webgl + + + + + ## [4.0.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/webgl@4.0.5...@thi.ng/webgl@4.0.6) (2021-03-12) **Note:** Version bump only for package @thi.ng/webgl diff --git a/packages/webgl/package.json b/packages/webgl/package.json index cdf713688a..85ffe443f7 100644 --- a/packages/webgl/package.json +++ b/packages/webgl/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/webgl", - "version": "4.0.6", + "version": "4.0.7", "description": "WebGL & GLSL abstraction layer", "module": "./index.js", "main": "./lib/index.js", @@ -51,19 +51,19 @@ "dependencies": { "@thi.ng/adapt-dpi": "^1.0.19", "@thi.ng/api": "^7.1.4", - "@thi.ng/associative": "^5.1.6", + "@thi.ng/associative": "^5.1.7", "@thi.ng/checks": "^2.9.5", "@thi.ng/equiv": "^1.0.41", - "@thi.ng/errors": "^1.2.32", - "@thi.ng/matrices": "^0.6.50", + "@thi.ng/errors": "^1.3.0", + "@thi.ng/matrices": "^0.6.51", "@thi.ng/memoize": "^2.1.14", - "@thi.ng/pixel": "^0.7.4", - "@thi.ng/shader-ast": "^0.8.5", - "@thi.ng/shader-ast-glsl": "^0.2.27", - "@thi.ng/shader-ast-stdlib": "^0.5.19", - "@thi.ng/transducers": "^7.6.6", - "@thi.ng/vector-pools": "^2.0.6", - "@thi.ng/vectors": "^5.1.4" + "@thi.ng/pixel": "^0.8.0", + "@thi.ng/shader-ast": "^0.8.6", + "@thi.ng/shader-ast-glsl": "^0.2.28", + "@thi.ng/shader-ast-stdlib": "^0.5.20", + "@thi.ng/transducers": "^7.6.7", + "@thi.ng/vector-pools": "^2.0.7", + "@thi.ng/vectors": "^5.1.5" }, "files": [ "*.js", diff --git a/packages/zipper/CHANGELOG.md b/packages/zipper/CHANGELOG.md index d0b411da16..eaad115160 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.43](https://github.com/thi-ng/umbrella/compare/@thi.ng/zipper@0.1.42...@thi.ng/zipper@0.1.43) (2021-03-17) + +**Note:** Version bump only for package @thi.ng/zipper + + + + + ## [0.1.42](https://github.com/thi-ng/umbrella/compare/@thi.ng/zipper@0.1.41...@thi.ng/zipper@0.1.42) (2021-03-12) **Note:** Version bump only for package @thi.ng/zipper diff --git a/packages/zipper/package.json b/packages/zipper/package.json index db1fc5bd47..408f7fa543 100644 --- a/packages/zipper/package.json +++ b/packages/zipper/package.json @@ -1,6 +1,6 @@ { "name": "@thi.ng/zipper", - "version": "0.1.42", + "version": "0.1.43", "description": "Functional tree editing, manipulation & navigation", "module": "./index.js", "main": "./lib/index.js", @@ -50,7 +50,7 @@ }, "dependencies": { "@thi.ng/api": "^7.1.4", - "@thi.ng/arrays": "^0.10.8", + "@thi.ng/arrays": "^0.10.9", "@thi.ng/checks": "^2.9.5" }, "files": [