From b797f66721c5f4a272b1e981d261cdf66f215210 Mon Sep 17 00:00:00 2001 From: arne Date: Thu, 18 Jul 2024 21:39:48 +0200 Subject: [PATCH] Basic hitomezashi pattern --- .envrc | 1 + .gitignore | 24 + flake.lock | 25 + flake.nix | 18 + index.html | 14 + package-lock.json | 2134 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 22 + public/vite.svg | 1 + src/main.ts | 76 ++ src/vite-env.d.ts | 1 + tsconfig.json | 24 + vite.config.ts | 5 + 12 files changed, 2345 insertions(+) create mode 100644 .envrc create mode 100644 .gitignore create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/vite.svg create mode 100644 src/main.ts create mode 100644 src/vite-env.d.ts create mode 100644 tsconfig.json create mode 100644 vite.config.ts diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..3550a30 --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..c4acf45 --- /dev/null +++ b/flake.lock @@ -0,0 +1,25 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1701718080, + "narHash": "sha256-6ovz0pG76dE0P170pmmZex1wWcQoeiomUZGggfH9XPs=", + "path": "/nix/store/aiv01710wqn2b7hms2253d1cq89kdzh8-source", + "rev": "2c7f3c0fb7c08a0814627611d9d7d45ab6d75335", + "type": "path" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..fd660b8 --- /dev/null +++ b/flake.nix @@ -0,0 +1,18 @@ +{ + description = "compost.party"; + inputs.nixpkgs.url = github:NixOS/nixpkgs; + + outputs = { self, nixpkgs }: + let + system = "x86_64-linux"; + pkgs = import nixpkgs { inherit system; }; + lib = pkgs.lib; + in { + devShell.${system} = pkgs.mkShell rec { + buildInputs = [ + pkgs.nodejs-18_x + pkgs.nodePackages.pnpm + ]; + }; + }; +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..96f0051 --- /dev/null +++ b/index.html @@ -0,0 +1,14 @@ + + + + + + + Thi.ng rdom + + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..ebefa6e --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2134 @@ +{ + "name": "thi.ng-meadows", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "thi.ng-meadows", + "version": "0.0.0", + "dependencies": { + "@thi.ng/geom": "^8.0.3", + "@thi.ng/rdom-canvas": "*", + "@thi.ng/rstream": "*", + "@thi.ng/transducers": "*" + }, + "devDependencies": { + "typescript": "^5.2.2", + "typescript-language-server": "*", + "vite": "^5.3.4" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.1.tgz", + "integrity": "sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.1.tgz", + "integrity": "sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.1.tgz", + "integrity": "sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.1.tgz", + "integrity": "sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.1.tgz", + "integrity": "sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.1.tgz", + "integrity": "sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.1.tgz", + "integrity": "sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.1.tgz", + "integrity": "sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.1.tgz", + "integrity": "sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.1.tgz", + "integrity": "sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.1.tgz", + "integrity": "sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.1.tgz", + "integrity": "sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.1.tgz", + "integrity": "sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.1.tgz", + "integrity": "sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.1.tgz", + "integrity": "sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.1.tgz", + "integrity": "sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@thi.ng/adjacency": { + "version": "2.5.55", + "resolved": "https://registry.npmjs.org/@thi.ng/adjacency/-/adjacency-2.5.55.tgz", + "integrity": "sha512-i2syE9fJDl2g0nCbCaElYcwxeCEecDVNTD2uLR5KzruaMyAq71GtcLPsiOxNoBRjCxJhc5M4Z9Y37zSF5TlWTQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/arrays": "^2.9.10", + "@thi.ng/bitfield": "^2.3.45", + "@thi.ng/dcons": "^3.2.117", + "@thi.ng/errors": "^2.5.11", + "@thi.ng/sparse": "^0.3.122" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/api": { + "version": "8.11.5", + "resolved": "https://registry.npmjs.org/@thi.ng/api/-/api-8.11.5.tgz", + "integrity": "sha512-Q9tjW+RrVYwdMOW3T1CFltt7W2VYisvX9sFZfYBHKGn9LJWzk3JrnvU49SGMRaxv8fIPCMlAotSZ2OX1AfQy1Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/arrays": { + "version": "2.9.10", + "resolved": "https://registry.npmjs.org/@thi.ng/arrays/-/arrays-2.9.10.tgz", + "integrity": "sha512-FFPy/Re6mGTJnReZUGsAtySs2r9qGfMzMrCiAQXwPQA5ef/7TSZne7Hk7TfPMUd1RLxlmYkl+/vS773OQJPxtQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/checks": "^3.6.7", + "@thi.ng/compare": "^2.3.8", + "@thi.ng/equiv": "^2.1.61", + "@thi.ng/errors": "^2.5.11", + "@thi.ng/random": "^3.8.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/associative": { + "version": "6.3.64", + "resolved": "https://registry.npmjs.org/@thi.ng/associative/-/associative-6.3.64.tgz", + "integrity": "sha512-m3Tzr+kgxGs56ZNmL3qZrrXgCjymaD2nU49bV3K6GgjD6TX4cRWWH17Qm2YOeiYPfH/9vmkRhmQDSbcyBgIxQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/arrays": "^2.9.10", + "@thi.ng/binary": "^3.4.28", + "@thi.ng/checks": "^3.6.7", + "@thi.ng/compare": "^2.3.8", + "@thi.ng/dcons": "^3.2.117", + "@thi.ng/equiv": "^2.1.61", + "@thi.ng/errors": "^2.5.11", + "@thi.ng/random": "^3.8.4", + "@thi.ng/transducers": "^9.0.9", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/atom": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/@thi.ng/atom/-/atom-5.3.5.tgz", + "integrity": "sha512-OIVoVc/JAr7kdIBe9cczRJrv5z1aNT54ltheW/fXbBzp7hAYE9++0YxynblNHnZB66mB47/LAZ3/MqZmwk980Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/equiv": "^2.1.61", + "@thi.ng/errors": "^2.5.11", + "@thi.ng/paths": "^5.1.85", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/binary": { + "version": "3.4.28", + "resolved": "https://registry.npmjs.org/@thi.ng/binary/-/binary-3.4.28.tgz", + "integrity": "sha512-9RVFexVYJX25Dd1pd925Mi75W/8IYeBCL8TJcc8eYAdmyqobEJVRe+TMElNKWtd0uTZh3/xrPpXWi09zUQq45Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/bitfield": { + "version": "2.3.45", + "resolved": "https://registry.npmjs.org/@thi.ng/bitfield/-/bitfield-2.3.45.tgz", + "integrity": "sha512-rs2vKbIguSnheieLyzDi1dxs1f7UBOz2J9diAM4Kenfna1NsGl/akB4d7iLEhICF38EK0TgkDXJpphN8HxUdeg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/binary": "^3.4.28", + "@thi.ng/errors": "^2.5.11", + "@thi.ng/strings": "^3.7.37" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/canvas": { + "version": "0.2.22", + "resolved": "https://registry.npmjs.org/@thi.ng/canvas/-/canvas-0.2.22.tgz", + "integrity": "sha512-zFRYdWUQF1CMj97Bs/dgEmTuk2JcrkpJk2quPx+lOS6Ef+U+XencvEIoPjHCAY9BCa81OrJNi45zLcuRTq/OJg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/checks": { + "version": "3.6.7", + "resolved": "https://registry.npmjs.org/@thi.ng/checks/-/checks-3.6.7.tgz", + "integrity": "sha512-JbxB+/7qZk0YbcKWi5bE+ZV4ALt82InOpAHUCSUxQdVs4ynCmI5MAiO/NJVHbcWCMGXW8SC7xVxWu11ZET1C4g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/color": { + "version": "5.6.49", + "resolved": "https://registry.npmjs.org/@thi.ng/color/-/color-5.6.49.tgz", + "integrity": "sha512-pHwj8WoTWUmwcDGKO/XnvkSkZY5KH5xqyzbdE1FxK9A/CwpNOOiVBFvzDTgMrnV0fMzqxzBpEUKvvfir64+1zQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/arrays": "^2.9.10", + "@thi.ng/binary": "^3.4.28", + "@thi.ng/checks": "^3.6.7", + "@thi.ng/compare": "^2.3.8", + "@thi.ng/compose": "^3.0.8", + "@thi.ng/defmulti": "^3.0.43", + "@thi.ng/errors": "^2.5.11", + "@thi.ng/math": "^5.11.3", + "@thi.ng/random": "^3.8.4", + "@thi.ng/strings": "^3.7.37", + "@thi.ng/transducers": "^9.0.9", + "@thi.ng/vectors": "^7.11.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/compare": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@thi.ng/compare/-/compare-2.3.8.tgz", + "integrity": "sha512-1chvS1rOGc0uFZJYatBHNPNAX32nQHm1nF1ZMK5wIOq/r2kA+u3Lg3/AiGkJ8wPDZIi3l6oxMjKkvDP9WIBLcA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/compose": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@thi.ng/compose/-/compose-3.0.8.tgz", + "integrity": "sha512-LPobsGpcWV5CyPNF9chBs1pCvYUywzHagWITk/hDmTNoC2Pk5ybDX/+FUwt6MgUZe7sgDCrfCc5EUPhx3CZ8+Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/errors": "^2.5.11" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/dcons": { + "version": "3.2.117", + "resolved": "https://registry.npmjs.org/@thi.ng/dcons/-/dcons-3.2.117.tgz", + "integrity": "sha512-cyp8i55K0rRjjK10OTXM8+3bm8vyLSDcaIYt635YH0PAjtwFevHmstzDQDMpq73emEzYsqFBVpEcbvynXrjLvw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/checks": "^3.6.7", + "@thi.ng/compare": "^2.3.8", + "@thi.ng/equiv": "^2.1.61", + "@thi.ng/errors": "^2.5.11", + "@thi.ng/random": "^3.8.4", + "@thi.ng/transducers": "^9.0.9" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/defmulti": { + "version": "3.0.43", + "resolved": "https://registry.npmjs.org/@thi.ng/defmulti/-/defmulti-3.0.43.tgz", + "integrity": "sha512-o7D0aQHihNiwa+geX8P71+eintBXsfCQzot7Bznc9FAwYFS7vmkr5xTuM6Trq+cPXYWB0i/TPJeKZp6lqkDG4g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/errors": "^2.5.11", + "@thi.ng/logger": "^3.0.15" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/distance": { + "version": "2.4.77", + "resolved": "https://registry.npmjs.org/@thi.ng/distance/-/distance-2.4.77.tgz", + "integrity": "sha512-6s5IRhWSWyiC+gNYY4RnXI0fOuojw0abSRsfD27bVYiQwar8E//Bg+zf+X5vP7obGYWq+slykTmoc16vwZNzog==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/checks": "^3.6.7", + "@thi.ng/errors": "^2.5.11", + "@thi.ng/heaps": "^2.1.77", + "@thi.ng/math": "^5.11.3", + "@thi.ng/vectors": "^7.11.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/equiv": { + "version": "2.1.61", + "resolved": "https://registry.npmjs.org/@thi.ng/equiv/-/equiv-2.1.61.tgz", + "integrity": "sha512-8iydosYk6z59TKUQpGNWIHJ+PyI3fsxGgc4LrTjTMadxUEpaBp3D9aSeSvnjmccYhVz8b6VgoHRX9aGwrg/rxw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/errors": { + "version": "2.5.11", + "resolved": "https://registry.npmjs.org/@thi.ng/errors/-/errors-2.5.11.tgz", + "integrity": "sha512-3UfAj5jelzTzALtgGFRoi/lIikeF8Ag1a1umKtehVd9OgGYrDnD0FcXvG6gdSqkKcDAvT7jI3i0Nt23Z1sA3CQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/geom": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@thi.ng/geom/-/geom-8.0.3.tgz", + "integrity": "sha512-+A4uxM4QNamsAbkpWGWFM08YLAJPiU221HB/lrZAMpf+BGimQQcttF5c1y4uP1mYNg2270xs299LCpNwPd6iZQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/adjacency": "^2.5.55", + "@thi.ng/api": "^8.11.5", + "@thi.ng/arrays": "^2.9.10", + "@thi.ng/associative": "^6.3.64", + "@thi.ng/checks": "^3.6.7", + "@thi.ng/defmulti": "^3.0.43", + "@thi.ng/equiv": "^2.1.61", + "@thi.ng/errors": "^2.5.11", + "@thi.ng/geom-arc": "^2.1.136", + "@thi.ng/geom-clip-line": "^2.3.93", + "@thi.ng/geom-clip-poly": "^2.1.135", + "@thi.ng/geom-closest-point": "^2.1.131", + "@thi.ng/geom-hull": "^2.1.131", + "@thi.ng/geom-isec": "^4.0.3", + "@thi.ng/geom-poly-utils": "^3.0.3", + "@thi.ng/geom-resample": "^3.0.3", + "@thi.ng/geom-splines": "^2.3.3", + "@thi.ng/geom-subdiv-curve": "^3.0.3", + "@thi.ng/geom-tessellate": "^3.0.3", + "@thi.ng/hiccup": "^5.2.5", + "@thi.ng/hiccup-svg": "^5.3.3", + "@thi.ng/math": "^5.11.3", + "@thi.ng/matrices": "^2.4.3", + "@thi.ng/random": "^3.8.4", + "@thi.ng/strings": "^3.7.37", + "@thi.ng/transducers": "^9.0.9", + "@thi.ng/vectors": "^7.11.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/geom-accel": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@thi.ng/geom-accel/-/geom-accel-4.0.3.tgz", + "integrity": "sha512-0H5hqrHA21cMR4a/HUIuXI/FuvUUT7m6u+mL7KQSy6uDmj2YxKuAc7c8sqAf6qbdQ6oVkpnVa4ZuXOQuJ2cTDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/arrays": "^2.9.10", + "@thi.ng/checks": "^3.6.7", + "@thi.ng/distance": "^2.4.77", + "@thi.ng/equiv": "^2.1.61", + "@thi.ng/errors": "^2.5.11", + "@thi.ng/geom-isec": "^4.0.3", + "@thi.ng/heaps": "^2.1.77", + "@thi.ng/math": "^5.11.3", + "@thi.ng/transducers": "^9.0.9", + "@thi.ng/vectors": "^7.11.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/geom-arc": { + "version": "2.1.136", + "resolved": "https://registry.npmjs.org/@thi.ng/geom-arc/-/geom-arc-2.1.136.tgz", + "integrity": "sha512-op5bgNDLCFdLKp6jQlGOdK/n8da2MVBHzo5S8waYdKd/sXWc13Zr+SA8Vcuexg9UqEwOSmND5AA4ybP54Q5MeQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/checks": "^3.6.7", + "@thi.ng/geom-resample": "^3.0.3", + "@thi.ng/math": "^5.11.3", + "@thi.ng/vectors": "^7.11.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/geom-clip-line": { + "version": "2.3.93", + "resolved": "https://registry.npmjs.org/@thi.ng/geom-clip-line/-/geom-clip-line-2.3.93.tgz", + "integrity": "sha512-wUFWSeowwWGU9dPRoZGKOUSBzXVudh3+agwBCYNEsVltF8i24wlqsi11W6CijvaKFo+vrM5suyDP+mTStYCP6g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/geom-isec": "^4.0.3", + "@thi.ng/vectors": "^7.11.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/geom-clip-poly": { + "version": "2.1.135", + "resolved": "https://registry.npmjs.org/@thi.ng/geom-clip-poly/-/geom-clip-poly-2.1.135.tgz", + "integrity": "sha512-tad+CQpiez8RtUnt/tOhQaxWaWM0Zjxf0x8lh+5/Vhqr0ZiK+ZZD0L5oLIl9twUU1+RWRBvDvewxbppY2TewTA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/geom-isec": "^4.0.3", + "@thi.ng/geom-poly-utils": "^3.0.3", + "@thi.ng/math": "^5.11.3", + "@thi.ng/vectors": "^7.11.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/geom-closest-point": { + "version": "2.1.131", + "resolved": "https://registry.npmjs.org/@thi.ng/geom-closest-point/-/geom-closest-point-2.1.131.tgz", + "integrity": "sha512-nGBNRmuwReL50CYBQMmBc4UIdkQGmeoeVGCpzOLmijvYztXZEufoopY90xUNygFw0o3rnL5te9bc3IDFQVtSpA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/math": "^5.11.3", + "@thi.ng/vectors": "^7.11.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/geom-hull": { + "version": "2.1.131", + "resolved": "https://registry.npmjs.org/@thi.ng/geom-hull/-/geom-hull-2.1.131.tgz", + "integrity": "sha512-/urfACSfmwHU4qcMc6iOIat0oLduwqEAnXLjwUJn0nXsJLjzI41o1S41UJ48nddVe/DFDIs/UAjDToQoOXOYUw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/math": "^5.11.3", + "@thi.ng/vectors": "^7.11.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/geom-isec": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@thi.ng/geom-isec/-/geom-isec-4.0.3.tgz", + "integrity": "sha512-7uGe1X+bK51jtczwI16E5Gl2cIXAguKag6ByF0e0+VFV7ZVX70Av3a3s3KYIafewGYfg/l91W5/pbBqwNK5Pfw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/geom-closest-point": "^2.1.131", + "@thi.ng/math": "^5.11.3", + "@thi.ng/vectors": "^7.11.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/geom-poly-utils": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@thi.ng/geom-poly-utils/-/geom-poly-utils-3.0.3.tgz", + "integrity": "sha512-id6PsYd4p49gejxggnVwQ0jJnwKgG4h1jsIvSGO5MA75jD0QqJqZ2Ali0myiP8z31uIyWBp1kTUWgMCG/XknFQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/errors": "^2.5.11", + "@thi.ng/math": "^5.11.3", + "@thi.ng/vectors": "^7.11.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/geom-resample": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@thi.ng/geom-resample/-/geom-resample-3.0.3.tgz", + "integrity": "sha512-K2406l9V2mkgaojy70krJYeKt8yo2U7hHyBzWrHTdM9Rzyx4BJM4TnfOijCBxkIgmgw8Zw0HGZZJ370bcJogwg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/checks": "^3.6.7", + "@thi.ng/geom-closest-point": "^2.1.131", + "@thi.ng/geom-isec": "^4.0.3", + "@thi.ng/math": "^5.11.3", + "@thi.ng/vectors": "^7.11.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/geom-splines": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@thi.ng/geom-splines/-/geom-splines-2.3.3.tgz", + "integrity": "sha512-oyplhY4NC8wZUC67219fk1i4oY6IKOYBszJX/WFnNMRr8IJHRWtWSEYZaZfx1fRvuAIR64KYGYMTNXtwIf4wMA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/checks": "^3.6.7", + "@thi.ng/geom-arc": "^2.1.136", + "@thi.ng/geom-resample": "^3.0.3", + "@thi.ng/math": "^5.11.3", + "@thi.ng/vectors": "^7.11.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/geom-subdiv-curve": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@thi.ng/geom-subdiv-curve/-/geom-subdiv-curve-3.0.3.tgz", + "integrity": "sha512-m4r/Ju8L497eA7u/9K33TtbAVw+iSLJFjxT01ysdw1gRS4tuRWBLaKSiTniIDr9ZJ8US22Wglu0wUMmmnaKLjQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/transducers": "^9.0.9", + "@thi.ng/vectors": "^7.11.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/geom-tessellate": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@thi.ng/geom-tessellate/-/geom-tessellate-3.0.3.tgz", + "integrity": "sha512-g+0mjG/G/SXSDXjOGeQmiAwbsHxXqdaq44CAFvPQv/avthy+CgqfElYd5cno75SYTcnIEBPIR5RJ39jRRefNdQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/checks": "^3.6.7", + "@thi.ng/geom-accel": "^4.0.3", + "@thi.ng/geom-isec": "^4.0.3", + "@thi.ng/geom-poly-utils": "^3.0.3", + "@thi.ng/math": "^5.11.3", + "@thi.ng/morton": "^3.1.90", + "@thi.ng/transducers": "^9.0.9", + "@thi.ng/vectors": "^7.11.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/heaps": { + "version": "2.1.77", + "resolved": "https://registry.npmjs.org/@thi.ng/heaps/-/heaps-2.1.77.tgz", + "integrity": "sha512-28iiA1cjvrtCuZCNiKfHBS6TGn1pigeFtH2IuK7bOtQ+O7D1js9gn7lez17XFmIXPgoYQDM8DcaiMNdc52tu0w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/compare": "^2.3.8", + "@thi.ng/equiv": "^2.1.61" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/hex": { + "version": "2.3.49", + "resolved": "https://registry.npmjs.org/@thi.ng/hex/-/hex-2.3.49.tgz", + "integrity": "sha512-TwywG5hl+dwBkoFW1MXQbaE+e0j/GNwQqp7mNBTHkG7MGWgdzfVmKItIVHedeqGGpLCaXyZ8mog1Ua4CbjZfTw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/hiccup": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/@thi.ng/hiccup/-/hiccup-5.2.5.tgz", + "integrity": "sha512-P8OXv5a+XrFK7FkaWZ37vnRMCau0cSV6VesH6XiVRtZflvUOqGsebb7nuhTEE8MV9PBXpntwqXfrs9Koha+p4A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/checks": "^3.6.7", + "@thi.ng/errors": "^2.5.11", + "@thi.ng/strings": "^3.7.37" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/hiccup-canvas": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@thi.ng/hiccup-canvas/-/hiccup-canvas-3.1.3.tgz", + "integrity": "sha512-KQdaqVJNCaCi3a21ahFG8vf1lKm4CKOrgOXtoPysq7W9kyAfdCsNvZ7DWtrSE7ihOeLKqmMSEVT44VXCYazZYg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/checks": "^3.6.7", + "@thi.ng/color": "^5.6.49", + "@thi.ng/geom-arc": "^2.1.136", + "@thi.ng/math": "^5.11.3", + "@thi.ng/pixel": "^6.1.36", + "@thi.ng/vectors": "^7.11.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/hiccup-svg": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@thi.ng/hiccup-svg/-/hiccup-svg-5.3.3.tgz", + "integrity": "sha512-tQAAROSKcUspu/zcFc8ck2Id0X2Ii34qJIfIik+PC0plAkMWFCO6/4QT5u5MI1ykvHmqzVl4iLGxtEjAmfPiPw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/checks": "^3.6.7", + "@thi.ng/color": "^5.6.49", + "@thi.ng/prefixes": "^2.3.22" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/k-means": { + "version": "0.6.92", + "resolved": "https://registry.npmjs.org/@thi.ng/k-means/-/k-means-0.6.92.tgz", + "integrity": "sha512-/ey9ieqcTKoVFzP1U1Xu/dh2KPMuH1LgylMOu8NpFMp4C5jiBTzgH4jE4bbhs6bLYmXWfo1+E0ewfBekvxtSNQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/distance": "^2.4.77", + "@thi.ng/errors": "^2.5.11", + "@thi.ng/random": "^3.8.4", + "@thi.ng/vectors": "^7.11.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/logger": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@thi.ng/logger/-/logger-3.0.15.tgz", + "integrity": "sha512-r4Y85cQFsvNoN5La4kOiDExLilch2ekVQF1J0o3Hr5Nkqu2fc1h7Di2QklxMMhPN+1soiYgrhUhighH+k7trMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/math": { + "version": "5.11.3", + "resolved": "https://registry.npmjs.org/@thi.ng/math/-/math-5.11.3.tgz", + "integrity": "sha512-SQSkG1htYwxjZAlHBBitSIc15Cm2C0B85IdH6RwfbcLoIS6lA9ulPwBqki+qWHYsCGXHRqGvnEGLFWSRlhyTOQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/matrices": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@thi.ng/matrices/-/matrices-2.4.3.tgz", + "integrity": "sha512-vWv5NEC5kG8vGrN4msCpv8HVkls1U638N3YgUOfc6phWK4zVw/Pa92R0itJYv1969MzLzwv8BkCGujvylNgGiQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/checks": "^3.6.7", + "@thi.ng/math": "^5.11.3", + "@thi.ng/vectors": "^7.11.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/memoize": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/@thi.ng/memoize/-/memoize-3.3.7.tgz", + "integrity": "sha512-xWmZNxoa/YjuJ/sZ7qBSfKL9bEr1xaxR8Th35wxuDFWGWa4M+R/2yalk5X596C1mHBYA0sKjMzKRdlGp34bHzA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/morton": { + "version": "3.1.90", + "resolved": "https://registry.npmjs.org/@thi.ng/morton/-/morton-3.1.90.tgz", + "integrity": "sha512-bL3wp1GcfM/HNq0L5e7LQZ8Yo3rjtRJKbz5RKMIi1CI8s+I0tV1UrYFaLCzdC09j5e9IaKTjpwE0rFPWPj/XqA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/binary": "^3.4.28", + "@thi.ng/errors": "^2.5.11", + "@thi.ng/math": "^5.11.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/paths": { + "version": "5.1.85", + "resolved": "https://registry.npmjs.org/@thi.ng/paths/-/paths-5.1.85.tgz", + "integrity": "sha512-n0llYqv8MXh5OSt8kaT2VAw622QcLer7aIid6aMZKxLA4LPluMwyenIdpimz50N6TazjbPvcekCpuXcjVV1G3w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/checks": "^3.6.7", + "@thi.ng/errors": "^2.5.11" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/pixel": { + "version": "6.1.36", + "resolved": "https://registry.npmjs.org/@thi.ng/pixel/-/pixel-6.1.36.tgz", + "integrity": "sha512-yBVp7BDNcNVVMGkwfY8qn3PvG2NNdhvjweQM2doyssh/HQgQVXpYt3mlEdo84VL8UVPjHSxWKUdpbjZ2J+KbYg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/binary": "^3.4.28", + "@thi.ng/canvas": "^0.2.22", + "@thi.ng/checks": "^3.6.7", + "@thi.ng/distance": "^2.4.77", + "@thi.ng/errors": "^2.5.11", + "@thi.ng/k-means": "^0.6.92", + "@thi.ng/math": "^5.11.3", + "@thi.ng/porter-duff": "^2.1.83" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/porter-duff": { + "version": "2.1.83", + "resolved": "https://registry.npmjs.org/@thi.ng/porter-duff/-/porter-duff-2.1.83.tgz", + "integrity": "sha512-30zuIcCAPOwQA/n4D5vu4TP1ILVyIu0dH0NzR3io9VlRaaVYtXr2mfv6RS2DEPp0zLD2gABB9rf0XyZcGlFqKg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/math": "^5.11.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/prefixes": { + "version": "2.3.22", + "resolved": "https://registry.npmjs.org/@thi.ng/prefixes/-/prefixes-2.3.22.tgz", + "integrity": "sha512-yJsnzyE46dyVasaPMFXQf9XLxof3uFX6nqf0zG1UHpB7bBCmP0vj7T7m76NeohGSOxlKCoIyAdnTCyMEBmFDrw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/random": { + "version": "3.8.4", + "resolved": "https://registry.npmjs.org/@thi.ng/random/-/random-3.8.4.tgz", + "integrity": "sha512-gRPC9kzI6/MohfFscnGjGWwaKwRdprlmXFF4SuWzuqwDjk27+EYGNqXLDDuHbtl7nJn98IzRkLY4jNkPMwohqQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/checks": "^3.6.7", + "@thi.ng/errors": "^2.5.11", + "@thi.ng/hex": "^2.3.49" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/rdom": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@thi.ng/rdom/-/rdom-1.5.2.tgz", + "integrity": "sha512-FPdMHm5X5tRn6qtTmFyIDDe7QKCNFLWwoOp/kyVlJJfc3ezf9T2wbieADMgSfM1+tx/AN2PoV5oDO3PNRGcBbQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/checks": "^3.6.7", + "@thi.ng/errors": "^2.5.11", + "@thi.ng/hiccup": "^5.2.5", + "@thi.ng/paths": "^5.1.85", + "@thi.ng/prefixes": "^2.3.22", + "@thi.ng/rstream": "^8.5.5", + "@thi.ng/strings": "^3.7.37" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/rdom-canvas": { + "version": "0.5.95", + "resolved": "https://registry.npmjs.org/@thi.ng/rdom-canvas/-/rdom-canvas-0.5.95.tgz", + "integrity": "sha512-MPKm6UHkceKIId+l8FTFQJ75R6f99K3DvVDssxxpfGVDD4Enl4NnvOnfVEWKgf/b8gAt0z3aUG6x+Ifc4GvsHg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/associative": "^6.3.64", + "@thi.ng/canvas": "^0.2.22", + "@thi.ng/checks": "^3.6.7", + "@thi.ng/hiccup-canvas": "^3.1.3", + "@thi.ng/rdom": "^1.5.2", + "@thi.ng/rstream": "^8.5.5" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/rstream": { + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@thi.ng/rstream/-/rstream-8.5.5.tgz", + "integrity": "sha512-ulGNMpfv3T3IT5im54caFoIMCNNuxd123VUhefUvVWh2EAN0451+1HLXVNdWWuJfWCYHZXybmjggdJOagaZ9Yw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/arrays": "^2.9.10", + "@thi.ng/associative": "^6.3.64", + "@thi.ng/atom": "^5.3.5", + "@thi.ng/checks": "^3.6.7", + "@thi.ng/errors": "^2.5.11", + "@thi.ng/logger": "^3.0.15", + "@thi.ng/transducers": "^9.0.9" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/sparse": { + "version": "0.3.122", + "resolved": "https://registry.npmjs.org/@thi.ng/sparse/-/sparse-0.3.122.tgz", + "integrity": "sha512-wuIZCJV+dB4aOjihlD3JruNYmLco8h1mEiyhe9jT3oEUFXZAMAM2XQYUVlWkVc12ALLp9TkGBtgddJM2/PjJhA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/errors": "^2.5.11", + "@thi.ng/transducers": "^9.0.9" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/strings": { + "version": "3.7.37", + "resolved": "https://registry.npmjs.org/@thi.ng/strings/-/strings-3.7.37.tgz", + "integrity": "sha512-26R8/RknfedycFGS6NZOe6S2EkseqGfgQRFurNS5/092vcmyCpqK1xzAB8it/VZIq3Gn8ER1rocon5sJno421Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/errors": "^2.5.11", + "@thi.ng/hex": "^2.3.49", + "@thi.ng/memoize": "^3.3.7" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/transducers": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/@thi.ng/transducers/-/transducers-9.0.9.tgz", + "integrity": "sha512-tSx3i6+CM25WA70yDKlDUPnkPhSjKn6G5fXidbRx3wN481NyIlUgepACMRsTI9LxLkIf86mEGi1xG6Lv+RbSpA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/arrays": "^2.9.10", + "@thi.ng/checks": "^3.6.7", + "@thi.ng/compare": "^2.3.8", + "@thi.ng/compose": "^3.0.8", + "@thi.ng/errors": "^2.5.11", + "@thi.ng/math": "^5.11.3", + "@thi.ng/random": "^3.8.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@thi.ng/vectors": { + "version": "7.11.3", + "resolved": "https://registry.npmjs.org/@thi.ng/vectors/-/vectors-7.11.3.tgz", + "integrity": "sha512-9k7qXR2vFX+ntq2z58hysANK/XDs3cXdwrU92YgQIgGLuBWqNN2XJpNw4J2LtZpeqAEN0U1uJi88Gcj3N0tCiw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/postspectacular" + }, + { + "type": "patreon", + "url": "https://patreon.com/thing_umbrella" + } + ], + "dependencies": { + "@thi.ng/api": "^8.11.5", + "@thi.ng/binary": "^3.4.28", + "@thi.ng/checks": "^3.6.7", + "@thi.ng/equiv": "^2.1.61", + "@thi.ng/errors": "^2.5.11", + "@thi.ng/math": "^5.11.3", + "@thi.ng/memoize": "^3.3.7", + "@thi.ng/random": "^3.8.4", + "@thi.ng/strings": "^3.7.37", + "@thi.ng/transducers": "^9.0.9" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/postcss": { + "version": "8.4.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", + "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/rollup": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.1.tgz", + "integrity": "sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.18.1", + "@rollup/rollup-android-arm64": "4.18.1", + "@rollup/rollup-darwin-arm64": "4.18.1", + "@rollup/rollup-darwin-x64": "4.18.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.18.1", + "@rollup/rollup-linux-arm-musleabihf": "4.18.1", + "@rollup/rollup-linux-arm64-gnu": "4.18.1", + "@rollup/rollup-linux-arm64-musl": "4.18.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.18.1", + "@rollup/rollup-linux-riscv64-gnu": "4.18.1", + "@rollup/rollup-linux-s390x-gnu": "4.18.1", + "@rollup/rollup-linux-x64-gnu": "4.18.1", + "@rollup/rollup-linux-x64-musl": "4.18.1", + "@rollup/rollup-win32-arm64-msvc": "4.18.1", + "@rollup/rollup-win32-ia32-msvc": "4.18.1", + "@rollup/rollup-win32-x64-msvc": "4.18.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + }, + "node_modules/typescript": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", + "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-language-server": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/typescript-language-server/-/typescript-language-server-4.3.3.tgz", + "integrity": "sha512-3QLj57Ru9S6zv10sa4z1pA3TIR1Rdkd04Ke0EszbO4fx5PLdlYhlC/PMxwlyxls9wrZs7wPCME1Ru0s1Gabz4Q==", + "dev": true, + "bin": { + "typescript-language-server": "lib/cli.mjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/vite": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.4.tgz", + "integrity": "sha512-Cw+7zL3ZG9/NZBB8C+8QbQZmR54GwqIz+WMI4b3JgdYJvX+ny9AjJXqkGQlDXSXRP9rP0B4tbciRMOVEKulVOA==", + "dev": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.39", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..d810a85 --- /dev/null +++ b/package.json @@ -0,0 +1,22 @@ +{ + "name": "computersandblues.hitomezashi", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview" + }, + "dependencies": { + "@thi.ng/geom": "^8.0.3", + "@thi.ng/rdom-canvas": "*", + "@thi.ng/rstream": "*", + "@thi.ng/transducers": "*" + }, + "devDependencies": { + "typescript": "^5.2.2", + "typescript-language-server": "*", + "vite": "^5.3.4" + } +} diff --git a/public/vite.svg b/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..a0efd3b --- /dev/null +++ b/src/main.ts @@ -0,0 +1,76 @@ +import { line, group, translate, asSvg, svgDoc } from "@thi.ng/geom"; +import { $canvas } from "@thi.ng/rdom-canvas"; +import { reactive } from "@thi.ng/rstream"; +import { cycle, takeWhile, comp, mapIndexed, transduce, push, map } from "@thi.ng/transducers" + +const xs = cycle([0,1,0,1,0,1]) +const ys = cycle([1,0,1,1,0,1]) + +const cellSize = 25 + +// available size for a2: 420 * 594 +const width = 420 +const height = 594 + +const minPadding = cellSize + +// calculate available drawing area + +const xCells = Math.floor((width - 2 * minPadding) / cellSize) +const xPadding = (width - (xCells * cellSize)) / 2 + +const yCells = Math.floor((height - 2 * minPadding) / cellSize) +const yPadding = (height - (yCells * cellSize)) / 2 + +const size = [width, height] + +// build a list of start positions + +const startPoints = (pattern: Iterable, maxCoord: number) => + transduce( + comp( + mapIndexed((cell, val) => [cell * cellSize, val] as const), + takeWhile(([coord, _]) => coord <= maxCoord), + ), + push(), + pattern + ) + +const xStarts = startPoints(xs, width - 2 * xPadding) +const yStarts = startPoints(ys, height - 2 * yPadding) + +const yLines = xStarts.flatMap( + ([xCoord, val]: [number, number]) => + Array + .from({ length: yCells }) + .map((_, cell) => (cell + val) % 2 === 0 // start at the beginning or skip it + ? line([xCoord, cell * cellSize], [xCoord, (cell + 1) * cellSize]) + : null) + .filter(v => v != null) +) + +console.log({ xStarts, yStarts }) + +const xLines = yStarts.flatMap( + ([yCoord, val]: [number, number]) => + Array + .from({ length: xCells }) + .map((_, cell) => (cell + val) % 2 === 0 // start at the beginning or skip it + ? line([cell * cellSize, yCoord], [(cell + 1) * cellSize, yCoord]) + : null) + .filter(v => v != null) +) + +const scene = reactive( + translate( + group( + {__background: '#eee', stroke: '#222' }, + [...yLines, ...xLines] + ), + [xPadding, yPadding] + ) +) + +$canvas(scene, size).mount(document.body) + +// console.log(asSvg(svgDoc({ viewBox: `0 0 ${size[0]} ${size[1]}` }, scene.deref()))) diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..7bb0db2 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..12b0fe2 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,5 @@ +export default { + build: { + sourcemap: true + } +}