{"_id":"@texel/color","_rev":"19-f171bb7f7eceed9b4ab876d21ae64a74","name":"@texel/color","dist-tags":{"latest":"1.1.11"},"versions":{"1.0.0":{"name":"@texel/color","version":"1.0.0","keywords":["oklch","oklab","okhsl","okhsv","display-p3","p3","displayp3","prophoto","a98rgb","adobe1998","prophotorgb","color","colour","picker","tool","rgb","srgb","convert","saturation","chroma","perceptual","uniform","perceptually"],"author":{"url":"https://github.com/mattdesl","name":"Matt DesLauriers"},"license":"MIT","_id":"@texel/color@1.0.0","maintainers":[{"name":"texel","email":"info@mattdesl.studio"}],"homepage":"https://github.com/texel-org/color","bugs":{"url":"https://github.com/texel-org/color/issues"},"dist":{"shasum":"be1ec25f8175cab2e01c8e62f03d5788d570e122","tarball":"https://registry.npmjs.org/@texel/color/-/color-1.0.0.tgz","fileCount":32,"integrity":"sha512-HRoxNhZCDCV6TpFwNN/wA133uZJByUf9b3dGHEBFm2XClED8Q1Fef2I5jEOgmMZdy+vC8pjYZT4vDc3EJ1jAOA==","signatures":[{"sig":"MEUCIHedKAWhUPD66Ufxu+PgwVM6lV1TJ4POXYcg/uIqndidAiEAyhb/v3bf71RDOaUoRUhf7jbNi/7y/yhLkBPJUXJmg3c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":141238},"main":"./src/index.js","type":"module","gitHead":"fa568741d30a1fcc4d554d1e06447061e3519536","scripts":{"test":"faucet test/test*.js","bench":"node test/bench-colorjs.js","matrices":"python3 tools/print_matrices.py > src/conversion_matrices.js && prettier src/conversion_matrices.js --write","visualize":"canvas-sketch-cli test/canvas-graph.js --open","bench:node":"NODE_ENV=production node --prof --no-logfile-per-isolate test/bench-node.js && node --prof-process v8.log","bench:size":"esbuild test/bench-size.js --format=esm --bundle --minify --tree-shaking=true | wc -c"},"_npmUser":{"name":"texel","email":"info@mattdesl.studio"},"repository":{"url":"git://github.com/texel-org/color.git","type":"git"},"_npmVersion":"10.5.2","description":"an esoteric colour picker in OKLCH","directories":{},"_nodeVersion":"20.13.1","_hasShrinkwrap":false,"devDependencies":{"pako":"^2.1.0","tape":"^5.8.1","faucet":"^0.0.4","terser":"^5.31.3","esbuild":"^0.23.0","prettier":"^3.3.3","png-tools":"^1.0.4","colorjs.io":"^0.5.2","canvas-sketch":"^0.7.7","canvas-sketch-cli":"^1.11.21"},"_npmOperationalInternal":{"tmp":"tmp/color_1.0.0_1722614384391_0.9112960931294991","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"@texel/color","version":"1.0.1","keywords":["oklch","oklab","okhsl","okhsv","display-p3","p3","displayp3","prophoto","a98rgb","adobe1998","prophotorgb","color","colour","picker","tool","rgb","srgb","convert","saturation","chroma","perceptual","uniform","perceptually"],"author":{"url":"https://github.com/mattdesl","name":"Matt DesLauriers"},"license":"MIT","_id":"@texel/color@1.0.1","maintainers":[{"name":"texel","email":"info@mattdesl.studio"}],"homepage":"https://github.com/texel-org/color","bugs":{"url":"https://github.com/texel-org/color/issues"},"dist":{"shasum":"6d3ec75aeacf5ec78835f0b2b420bf0b78298f43","tarball":"https://registry.npmjs.org/@texel/color/-/color-1.0.1.tgz","fileCount":32,"integrity":"sha512-knxptUDaIq3FC5G909YkWfv4ynaYusUGyOjILqYOSX1UM22YdZ/oM2UZSUtG48POp3qTzqP71kQ8s0KQllKS0w==","signatures":[{"sig":"MEYCIQCg1Csc9pXoed5+de8WOegRgtPRU9PmAclAJopddlCnBAIhAJ4JdTTRI5XElEWKWIi41uuD1UAK+QEzbKbaXMrrT9vr","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":141238},"main":"./src/index.js","type":"module","gitHead":"0dfc01784aab8116c36d8dc03415e85db81e0452","scripts":{"test":"faucet test/test*.js","bench":"node test/bench-colorjs.js","matrices":"python3 tools/print_matrices.py > src/conversion_matrices.js && prettier src/conversion_matrices.js --write","visualize":"canvas-sketch-cli test/canvas-graph.js --open","bench:node":"NODE_ENV=production node --prof --no-logfile-per-isolate test/bench-node.js && node --prof-process v8.log","bench:size":"esbuild test/bench-size.js --format=esm --bundle --minify --tree-shaking=true | wc -c"},"_npmUser":{"name":"texel","email":"info@mattdesl.studio"},"repository":{"url":"git://github.com/texel-org/color.git","type":"git"},"_npmVersion":"10.5.2","description":"a minimal and modern color library","directories":{},"_nodeVersion":"20.13.1","_hasShrinkwrap":false,"devDependencies":{"pako":"^2.1.0","tape":"^5.8.1","faucet":"^0.0.4","terser":"^5.31.3","esbuild":"^0.23.0","prettier":"^3.3.3","png-tools":"^1.0.4","colorjs.io":"^0.5.2","canvas-sketch":"^0.7.7","canvas-sketch-cli":"^1.11.21"},"_npmOperationalInternal":{"tmp":"tmp/color_1.0.1_1722614547013_0.7389139097073594","host":"s3://npm-registry-packages"}},"1.0.2":{"name":"@texel/color","version":"1.0.2","keywords":["oklch","oklab","okhsl","okhsv","display-p3","p3","displayp3","prophoto","a98rgb","adobe1998","prophotorgb","color","colour","picker","tool","rgb","srgb","convert","saturation","chroma","perceptual","uniform","perceptually"],"author":{"url":"https://github.com/mattdesl","name":"Matt DesLauriers"},"license":"MIT","_id":"@texel/color@1.0.2","maintainers":[{"name":"texel","email":"info@mattdesl.studio"}],"homepage":"https://github.com/texel-org/color","bugs":{"url":"https://github.com/texel-org/color/issues"},"dist":{"shasum":"2ffa0053ecdad715f3be30af98a205da5b4b72d9","tarball":"https://registry.npmjs.org/@texel/color/-/color-1.0.2.tgz","fileCount":33,"integrity":"sha512-reRIQay6sYaqPvahJXAx2ZoVH8TU1l8bq+SMMNGlONyAFtOAhbMR2nGg929yyw7Zlow8kfKXbbj2Wy0p5WSl3w==","signatures":[{"sig":"MEUCICwwyyxOqH5xKlF2yIirST9N7NLQLEP3Y5Pki+D7PCqoAiEAjhucGH2jrgfyKSgrZDuzE23LOhaSqpLoX4OeO+Pbgzo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":144830},"main":"./src/index.js","type":"module","gitHead":"c46247d3c32ce8f73c299020bc8dd387991651d5","scripts":{"test":"faucet test/test*.js","bench":"node test/bench-colorjs.js","matrices":"python3 tools/print_matrices.py > src/conversion_matrices.js && prettier src/conversion_matrices.js --write","visualize":"canvas-sketch-cli test/canvas-graph.js --open","bench:node":"NODE_ENV=production node --prof --no-logfile-per-isolate test/bench-node.js && node --prof-process v8.log","bench:size":"esbuild test/bench-size.js --format=esm --bundle --minify --tree-shaking=true | wc -c"},"_npmUser":{"name":"texel","email":"info@mattdesl.studio"},"repository":{"url":"git://github.com/texel-org/color.git","type":"git"},"_npmVersion":"10.5.2","description":"a minimal and modern color library","directories":{},"_nodeVersion":"20.13.1","_hasShrinkwrap":false,"devDependencies":{"pako":"^2.1.0","tape":"^5.8.1","culori":"^4.0.1","faucet":"^0.0.4","terser":"^5.31.3","esbuild":"^0.23.0","prettier":"^3.3.3","png-tools":"^1.0.4","colorjs.io":"^0.5.2","canvas-sketch":"^0.7.7","canvas-sketch-cli":"^1.11.21"},"_npmOperationalInternal":{"tmp":"tmp/color_1.0.2_1722673265166_0.7036760279560703","host":"s3://npm-registry-packages"}},"1.0.3":{"name":"@texel/color","version":"1.0.3","keywords":["oklch","oklab","okhsl","okhsv","display-p3","p3","displayp3","prophoto","a98rgb","adobe1998","prophotorgb","color","colour","picker","tool","rgb","srgb","convert","saturation","chroma","perceptual","uniform","perceptually"],"author":{"url":"https://github.com/mattdesl","name":"Matt DesLauriers"},"license":"MIT","_id":"@texel/color@1.0.3","maintainers":[{"name":"texel","email":"info@mattdesl.studio"}],"homepage":"https://github.com/texel-org/color","bugs":{"url":"https://github.com/texel-org/color/issues"},"dist":{"shasum":"cc53673e149bceb51803c47028c4c8017629e342","tarball":"https://registry.npmjs.org/@texel/color/-/color-1.0.3.tgz","fileCount":34,"integrity":"sha512-70PJgXScDbPxPaXy1hC0RyHDSDwm0pTSRnuz7AMzckPOE+CjnIiZcE4NFkmwJblVZbTTYxbsHFqQB0NrMobXYA==","signatures":[{"sig":"MEUCIQCBMf4MDIE+24ZmdQ9QJxvrq+Tv5GB72bDiA+h2bmPQEwIgM/QQOy/FtsAOhyEHfn3G/y1jIJeN71FxVN66o+g78os=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":148422},"main":"./src/index.js","type":"module","gitHead":"af7d7b7aee1183fcef63d4475a63280eec0f8a6e","scripts":{"test":"faucet test/test*.js","bench":"node test/bench-colorjs.js","matrices":"python3 tools/print_matrices.py > src/conversion_matrices.js && prettier src/conversion_matrices.js --write","visualize":"canvas-sketch-cli test/canvas-graph.js --open","bench:node":"NODE_ENV=production node --prof --no-logfile-per-isolate test/bench-node.js && node --prof-process v8.log","bench:size":"esbuild test/bench-size.js --format=esm --bundle --minify --tree-shaking=true | wc -c"},"_npmUser":{"name":"texel","email":"info@mattdesl.studio"},"repository":{"url":"git://github.com/texel-org/color.git","type":"git"},"_npmVersion":"10.5.2","description":"a minimal and modern color library","directories":{},"_nodeVersion":"20.13.1","_hasShrinkwrap":false,"devDependencies":{"pako":"^2.1.0","tape":"^5.8.1","culori":"^4.0.1","faucet":"^0.0.4","terser":"^5.31.3","esbuild":"^0.23.0","prettier":"^3.3.3","png-tools":"^1.0.4","colorjs.io":"^0.5.2","canvas-sketch":"^0.7.7","canvas-sketch-cli":"^1.11.21"},"_npmOperationalInternal":{"tmp":"tmp/color_1.0.3_1722677011108_0.3018676434357197","host":"s3://npm-registry-packages"}},"1.0.4":{"name":"@texel/color","version":"1.0.4","keywords":["oklch","oklab","okhsl","okhsv","display-p3","p3","displayp3","prophoto","a98rgb","adobe1998","prophotorgb","color","colour","picker","tool","rgb","srgb","convert","saturation","chroma","perceptual","uniform","perceptually"],"author":{"url":"https://github.com/mattdesl","name":"Matt DesLauriers"},"license":"MIT","_id":"@texel/color@1.0.4","maintainers":[{"name":"texel","email":"info@mattdesl.studio"}],"homepage":"https://github.com/texel-org/color","bugs":{"url":"https://github.com/texel-org/color/issues"},"dist":{"shasum":"0e2925a59beed41fdd67182a904a6bb122ebd06e","tarball":"https://registry.npmjs.org/@texel/color/-/color-1.0.4.tgz","fileCount":34,"integrity":"sha512-X5c9KQcXOsI1dGLkEtwxOvVVT78aD8ToTDlfACVnrSUXwZm6RpO9Jw5gdiQWqjG6GflaOKLCcLrFee6aWtHgdw==","signatures":[{"sig":"MEYCIQCmMdyf/HeT3O+9ZIg/m4s52uaWB/uCRwTl8jwdbkOQFgIhAOJ8BrT29lKefVItHeQnofWzexPD17SP1c4jz/ytvEVl","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":151188},"main":"./src/index.js","type":"module","gitHead":"7bf40cf360f9a3abc579340e7a6b643b355fa835","scripts":{"test":"faucet test/test*.js","bench":"node test/bench-colorjs.js","matrices":"python3 tools/print_matrices.py > src/conversion_matrices.js && prettier src/conversion_matrices.js --write","visualize":"canvas-sketch-cli test/canvas-graph.js --open","bench:node":"NODE_ENV=production node --prof --no-logfile-per-isolate test/bench-node.js && node --prof-process v8.log","bench:size":"esbuild test/bench-size.js --format=esm --bundle --minify --tree-shaking=true | wc -c"},"_npmUser":{"name":"texel","email":"info@mattdesl.studio"},"repository":{"url":"git://github.com/texel-org/color.git","type":"git"},"_npmVersion":"10.5.2","description":"a minimal and modern color library","directories":{},"_nodeVersion":"20.13.1","_hasShrinkwrap":false,"devDependencies":{"pako":"^2.1.0","tape":"^5.8.1","culori":"^4.0.1","faucet":"^0.0.4","terser":"^5.31.3","esbuild":"^0.23.0","prettier":"^3.3.3","png-tools":"^1.0.4","colorjs.io":"^0.5.2","canvas-sketch":"^0.7.7","canvas-sketch-cli":"^1.11.21"},"_npmOperationalInternal":{"tmp":"tmp/color_1.0.4_1722680825313_0.04127070059635862","host":"s3://npm-registry-packages"}},"1.0.5":{"name":"@texel/color","version":"1.0.5","keywords":["oklch","oklab","okhsl","okhsv","display-p3","p3","displayp3","prophoto","a98rgb","adobe1998","prophotorgb","color","colour","picker","tool","rgb","srgb","convert","saturation","chroma","perceptual","uniform","perceptually"],"author":{"url":"https://github.com/mattdesl","name":"Matt DesLauriers"},"license":"MIT","_id":"@texel/color@1.0.5","maintainers":[{"name":"texel","email":"info@mattdesl.studio"}],"homepage":"https://github.com/texel-org/color","bugs":{"url":"https://github.com/texel-org/color/issues"},"dist":{"shasum":"785b247ec0a4c7672a3e181f27ba2109b60963ec","tarball":"https://registry.npmjs.org/@texel/color/-/color-1.0.5.tgz","fileCount":34,"integrity":"sha512-BY1wo2jIK/FsSIzk31RJGt/u/RVRUUDZCuTmxnby79sPhO9aHZoT78XiQcNiTU1AEbmb3UbEww5+7o2aea/aFQ==","signatures":[{"sig":"MEQCIG1hJRi6sbuGNZ+a+Y/wWLqFhkrQwMq1o+6TX/sPfFpoAiAtcTKT5iDIStHGTJ8VyLV8pkk5ockJE6oeAEEm/wFr3Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":158126},"main":"./src/index.js","type":"module","gitHead":"f89cbe572b97b70e391ee7d2cf4e9576b47e56ed","scripts":{"test":"faucet test/test*.js","bench":"node test/bench-colorjs.js","matrices":"python3 tools/print_matrices.py > src/conversion_matrices.js && prettier src/conversion_matrices.js --write","visualize":"canvas-sketch-cli test/canvas-graph.js --open","bench:node":"NODE_ENV=production node --prof --no-logfile-per-isolate test/bench-node.js && node --prof-process v8.log","bench:size":"esbuild test/bench-size.js --format=esm --bundle --minify --tree-shaking=true | wc -c"},"_npmUser":{"name":"texel","email":"info@mattdesl.studio"},"repository":{"url":"git://github.com/texel-org/color.git","type":"git"},"_npmVersion":"10.5.2","description":"a minimal and modern color library","directories":{},"_nodeVersion":"20.13.1","_hasShrinkwrap":false,"devDependencies":{"pako":"^2.1.0","tape":"^5.8.1","culori":"^4.0.1","faucet":"^0.0.4","terser":"^5.31.3","esbuild":"^0.23.0","prettier":"^3.3.3","png-tools":"^1.0.4","colorjs.io":"^0.5.2","canvas-sketch":"^0.7.7","canvas-sketch-cli":"^1.11.21"},"_npmOperationalInternal":{"tmp":"tmp/color_1.0.5_1722702591394_0.1505340202896841","host":"s3://npm-registry-packages"}},"1.0.6":{"name":"@texel/color","version":"1.0.6","keywords":["oklch","oklab","okhsl","okhsv","display-p3","p3","displayp3","prophoto","a98rgb","adobe1998","prophotorgb","color","colour","picker","tool","rgb","srgb","convert","saturation","chroma","perceptual","uniform","perceptually"],"author":{"url":"https://github.com/mattdesl","name":"Matt DesLauriers"},"license":"MIT","_id":"@texel/color@1.0.6","maintainers":[{"name":"texel","email":"info@mattdesl.studio"}],"homepage":"https://github.com/texel-org/color","bugs":{"url":"https://github.com/texel-org/color/issues"},"dist":{"shasum":"b0d28f57b03568752b84dfb943c77dc7686d1552","tarball":"https://registry.npmjs.org/@texel/color/-/color-1.0.6.tgz","fileCount":34,"integrity":"sha512-bs/y+JzaHWxOhVZ+NmdFx+fLn4CA7C9ViBtPQ/eH8xqsKzgMFQ4QlZF21ai9YMx1A8oCZBLooJMpehrkyDgYAg==","signatures":[{"sig":"MEUCIQC3Njzy8jARzUzEJaUlNjZBDOLQDXf9VawfQZ+KBTSouQIgMV+q4c5teCKTNWryaRsFQOWG7pXC7vyuKyYRHWBWC7c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":158265},"main":"./src/index.js","type":"module","gitHead":"2457bcf246af5a04e59077808299fc71feb4abd2","scripts":{"test":"faucet test/test*.js","bench":"node test/bench-colorjs.js","matrices":"python3 tools/print_matrices.py > src/conversion_matrices.js && prettier src/conversion_matrices.js --write","visualize":"canvas-sketch-cli test/canvas-graph.js --open","bench:node":"NODE_ENV=production node --prof --no-logfile-per-isolate test/bench-node.js && node --prof-process v8.log","bench:size":"esbuild test/bench-size.js --format=esm --bundle --minify --tree-shaking=true | wc -c"},"_npmUser":{"name":"texel","email":"info@mattdesl.studio"},"repository":{"url":"git://github.com/texel-org/color.git","type":"git"},"_npmVersion":"10.5.2","description":"a minimal and modern color library","directories":{},"_nodeVersion":"20.13.1","_hasShrinkwrap":false,"devDependencies":{"pako":"^2.1.0","tape":"^5.8.1","culori":"^4.0.1","faucet":"^0.0.4","terser":"^5.31.3","esbuild":"^0.23.0","prettier":"^3.3.3","png-tools":"^1.0.4","colorjs.io":"^0.5.2","canvas-sketch":"^0.7.7","canvas-sketch-cli":"^1.11.21"},"_npmOperationalInternal":{"tmp":"tmp/color_1.0.6_1723143343244_0.6830236838527755","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"@texel/color","version":"1.1.0","keywords":["oklch","oklab","okhsl","okhsv","display-p3","p3","displayp3","prophoto","a98rgb","adobe1998","prophotorgb","color","colour","picker","tool","rgb","srgb","convert","saturation","chroma","perceptual","uniform","perceptually"],"author":{"url":"https://github.com/mattdesl","name":"Matt DesLauriers"},"license":"MIT","_id":"@texel/color@1.1.0","maintainers":[{"name":"texel","email":"info@mattdesl.studio"}],"homepage":"https://github.com/texel-org/color","bugs":{"url":"https://github.com/texel-org/color/issues"},"dist":{"shasum":"8df7e4e1f81a6c6f3b80caa5e581e6280a96b67d","tarball":"https://registry.npmjs.org/@texel/color/-/color-1.1.0.tgz","fileCount":39,"integrity":"sha512-VhsJru4O1jA1KOibrzNfVwHhyn3s44YjCmr7EuKEr2IwqzCJBzSHkLYBqJOCoLiMw5SSZtT6CyscRqI6QEi9Sw==","signatures":[{"sig":"MEQCIGJOhRv2Hq2wYs6PCpCmSLQhoNX6ySK9FTzJxY+Su/loAiBF9VEwlNaBc+SH9sWgofa5eYnZbYqyuhJwXZRU74SI9Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":175101},"main":"./src/index.js","type":"module","gitHead":"dd0fd033d016a05f6c2eabd24ecddfb1fbe3cc8f","scripts":{"test":"faucet test/test*.js","bench":"node test/bench-colorjs.js","matrices":"python3 tools/print_matrices.py > src/conversion_matrices.js && prettier src/conversion_matrices.js --write","visualize":"canvas-sketch-cli test/canvas-graph.js --open","bench:node":"NODE_ENV=production node --prof --no-logfile-per-isolate test/bench-node.js && node --prof-process v8.log","bench:size":"esbuild test/bench-size.js --format=esm --bundle --minify --tree-shaking=true | wc -c"},"_npmUser":{"name":"texel","email":"info@mattdesl.studio"},"repository":{"url":"git://github.com/texel-org/color.git","type":"git"},"_npmVersion":"10.5.2","description":"a minimal and modern color library","directories":{},"_nodeVersion":"20.13.1","_hasShrinkwrap":false,"devDependencies":{"pako":"^2.1.0","tape":"^5.8.1","culori":"^4.0.1","faucet":"^0.0.4","terser":"^5.31.3","esbuild":"^0.23.0","prettier":"^3.3.3","png-tools":"^1.0.4","colorjs.io":"^0.5.2","canvas-sketch":"^0.7.7","canvas-sketch-cli":"^1.11.21"},"_npmOperationalInternal":{"tmp":"tmp/color_1.1.0_1723729343930_0.37989064082887225","host":"s3://npm-registry-packages"}},"1.1.1":{"name":"@texel/color","version":"1.1.1","keywords":["oklch","oklab","okhsl","okhsv","display-p3","p3","displayp3","prophoto","a98rgb","adobe1998","prophotorgb","color","colour","picker","tool","rgb","srgb","convert","saturation","chroma","perceptual","uniform","perceptually"],"author":{"url":"https://github.com/mattdesl","name":"Matt DesLauriers"},"license":"MIT","_id":"@texel/color@1.1.1","maintainers":[{"name":"texel","email":"info@mattdesl.studio"}],"homepage":"https://github.com/texel-org/color","bugs":{"url":"https://github.com/texel-org/color/issues"},"dist":{"shasum":"dd17fe0edc6b88ed7e1e3ecb363bf9dc432244f7","tarball":"https://registry.npmjs.org/@texel/color/-/color-1.1.1.tgz","fileCount":39,"integrity":"sha512-kks3b2rVDDP0wKHrAWUOg10MLLg5n1ylg0+Lx/PC6//2ZjdU5fdAWolpFKXoKDaDv/02/FDsYje9AFghWMN4MA==","signatures":[{"sig":"MEUCIGWSNL5517VDaznTCmEOXW31X6uMLdS5hoR42thEwMJ4AiEA16elKLRYFIScRl/UoCDVkQr0orYpAWyUPpRq05GlTYI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":175092},"main":"./src/index.js","type":"module","gitHead":"dda9b32af091b1d9d819934d8bc162f38a8aea53","scripts":{"test":"faucet test/test*.js","bench":"node test/bench-colorjs.js","matrices":"python3 tools/print_matrices.py > src/conversion_matrices.js && prettier src/conversion_matrices.js --write","visualize":"canvas-sketch-cli test/canvas-graph.js --open","bench:node":"NODE_ENV=production node --prof --no-logfile-per-isolate test/bench-node.js && node --prof-process v8.log","bench:size":"esbuild test/bench-size.js --format=esm --bundle --minify --tree-shaking=true | wc -c"},"_npmUser":{"name":"texel","email":"info@mattdesl.studio"},"repository":{"url":"git://github.com/texel-org/color.git","type":"git"},"_npmVersion":"10.5.2","description":"a minimal and modern color library","directories":{},"_nodeVersion":"20.13.1","_hasShrinkwrap":false,"devDependencies":{"pako":"^2.1.0","tape":"^5.8.1","culori":"^4.0.1","faucet":"^0.0.4","terser":"^5.31.3","esbuild":"^0.23.0","prettier":"^3.3.3","png-tools":"^1.0.4","colorjs.io":"^0.5.2","canvas-sketch":"^0.7.7","canvas-sketch-cli":"^1.11.21"},"_npmOperationalInternal":{"tmp":"tmp/color_1.1.1_1723729508396_0.08986373912697587","host":"s3://npm-registry-packages"}},"1.1.2":{"name":"@texel/color","version":"1.1.2","keywords":["oklch","oklab","okhsl","okhsv","display-p3","p3","displayp3","prophoto","a98rgb","adobe1998","prophotorgb","color","colour","picker","tool","rgb","srgb","convert","saturation","chroma","perceptual","uniform","perceptually"],"author":{"url":"https://github.com/mattdesl","name":"Matt DesLauriers"},"license":"MIT","_id":"@texel/color@1.1.2","maintainers":[{"name":"texel","email":"info@mattdesl.studio"}],"homepage":"https://github.com/texel-org/color","bugs":{"url":"https://github.com/texel-org/color/issues"},"dist":{"shasum":"c3a8659aabd685fa6900fcf52d142b3ea1b4e10b","tarball":"https://registry.npmjs.org/@texel/color/-/color-1.1.2.tgz","fileCount":39,"integrity":"sha512-PlBKHFSJZc52rTOW5EbKtQ/btl0kcuAXZes3ca+swA759GcxbCrTX45b36hTchBNSTQFOIm3p1qddXR1nvniHQ==","signatures":[{"sig":"MEUCIGyMZpoaimYB4Y+0qNBtXhojzHGHCU8EdhlpZyNfRgRfAiEAwW0LcSXSIsNFfnddpDo572ku/1hDu3kYVn0ddAdAHU4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":177055},"main":"./src/index.js","type":"module","gitHead":"3a0b3e5df03db7e1eaabd2b65797a9227ca5b125","scripts":{"test":"faucet test/test*.js","bench":"node test/bench-colorjs.js","matrices":"python3 tools/print_matrices.py > src/conversion_matrices.js && prettier src/conversion_matrices.js --write","visualize":"canvas-sketch-cli test/canvas-graph.js --open","bench:node":"NODE_ENV=production node --prof --no-logfile-per-isolate test/bench-node.js && node --prof-process v8.log","bench:size":"esbuild test/bench-size.js --format=esm --bundle --minify --tree-shaking=true | wc -c"},"_npmUser":{"name":"texel","email":"info@mattdesl.studio"},"repository":{"url":"git://github.com/texel-org/color.git","type":"git"},"_npmVersion":"10.5.2","description":"a minimal and modern color library","directories":{},"_nodeVersion":"20.13.1","_hasShrinkwrap":false,"devDependencies":{"pako":"^2.1.0","tape":"^5.8.1","culori":"^4.0.1","faucet":"^0.0.4","terser":"^5.31.3","esbuild":"^0.23.0","prettier":"^3.3.3","png-tools":"^1.0.4","colorjs.io":"^0.5.2","canvas-sketch":"^0.7.7","canvas-sketch-cli":"^1.11.21"},"_npmOperationalInternal":{"tmp":"tmp/color_1.1.2_1724921935428_0.6383161466397227","host":"s3://npm-registry-packages"}},"1.1.3":{"name":"@texel/color","version":"1.1.3","keywords":["oklch","oklab","okhsl","okhsv","display-p3","p3","displayp3","prophoto","a98rgb","adobe1998","prophotorgb","color","colour","picker","tool","rgb","srgb","convert","saturation","chroma","perceptual","uniform","perceptually"],"author":{"url":"https://github.com/mattdesl","name":"Matt DesLauriers"},"license":"MIT","_id":"@texel/color@1.1.3","maintainers":[{"name":"texel","email":"info@mattdesl.studio"}],"homepage":"https://github.com/texel-org/color","bugs":{"url":"https://github.com/texel-org/color/issues"},"dist":{"shasum":"1e10e7eb50bad2c7fa394c235dd06372ed93aa38","tarball":"https://registry.npmjs.org/@texel/color/-/color-1.1.3.tgz","fileCount":39,"integrity":"sha512-CTqoqlTMQDTYI4kK7H2r4JWgt8ZRx/ZPNKKxoW9sbzO4bQqGDNLhRcU7cwoGF0d4ztLgw5Eacz6cl8gms1z04g==","signatures":[{"sig":"MEUCIQCNmC7Q7Mm9EEkHCkb60+w7YzNRT/yQx9TmUSBoOK96lwIgDpiZfQf5dM/aE+11kklt4Y87q1msLYVi4z0dCWUEkDY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":177960},"main":"./src/index.js","type":"module","gitHead":"f23daf0694895e55abc812710191ea2c80247ee7","scripts":{"test":"faucet test/test*.js","bench":"node test/bench-colorjs.js","matrices":"python3 tools/print_matrices.py > src/conversion_matrices.js && prettier src/conversion_matrices.js --write","visualize":"canvas-sketch-cli test/canvas-graph.js --open","bench:node":"NODE_ENV=production node --prof --no-logfile-per-isolate test/bench-node.js && node --prof-process v8.log","bench:size":"esbuild test/bench-size.js --format=esm --bundle --minify --tree-shaking=true | wc -c"},"_npmUser":{"name":"texel","email":"info@mattdesl.studio"},"repository":{"url":"git://github.com/texel-org/color.git","type":"git"},"_npmVersion":"10.5.2","description":"a minimal and modern color library","directories":{},"_nodeVersion":"20.13.1","_hasShrinkwrap":false,"devDependencies":{"pako":"^2.1.0","tape":"^5.8.1","culori":"^4.0.1","faucet":"^0.0.4","terser":"^5.31.3","esbuild":"^0.23.0","prettier":"^3.3.3","png-tools":"^1.0.4","colorjs.io":"^0.5.2","canvas-sketch":"^0.7.7","canvas-sketch-cli":"^1.11.21"},"_npmOperationalInternal":{"tmp":"tmp/color_1.1.3_1726244736213_0.9664908990174619","host":"s3://npm-registry-packages"}},"1.1.4":{"name":"@texel/color","version":"1.1.4","keywords":["oklch","oklab","okhsl","okhsv","display-p3","p3","displayp3","prophoto","a98rgb","adobe1998","prophotorgb","color","colour","picker","tool","rgb","srgb","convert","saturation","chroma","perceptual","uniform","perceptually"],"author":{"url":"https://github.com/mattdesl","name":"Matt DesLauriers"},"license":"MIT","_id":"@texel/color@1.1.4","maintainers":[{"name":"texel","email":"info@mattdesl.studio"}],"homepage":"https://github.com/texel-org/color","bugs":{"url":"https://github.com/texel-org/color/issues"},"dist":{"shasum":"dc9a29c18b3e42ea6cdeb89a9ea7731e849720ea","tarball":"https://registry.npmjs.org/@texel/color/-/color-1.1.4.tgz","fileCount":18,"integrity":"sha512-bXGnwyntJllyIh0Gu8QWWO138PKEV2I966YVju4S70ZjjMcDa5oly14zjewDvsIvSGJPzzdsvc4Iz1h8vRrjog==","signatures":[{"sig":"MEYCIQDvTaTCS7xokrd3G/UPata1ukoQIkMkGG4/8sMzWy9PYwIhAP1haeXzgmojcLsbo9TAX6TPIdZxbF4n+ERZgHHDHinF","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":74351},"main":"./src/index.js","type":"module","gitHead":"99ec01147b50f406b82bc4a6bda301fcdb9e0114","scripts":{"test":"faucet test/test*.js","bench":"node test/bench-colorjs.js","matrices":"python3 tools/print_matrices.py > src/conversion_matrices.js && prettier src/conversion_matrices.js --write","visualize":"canvas-sketch-cli test/canvas-graph.js --open","bench:node":"NODE_ENV=production node --prof --no-logfile-per-isolate test/bench-node.js && node --prof-process v8.log","bench:size":"esbuild test/bench-size.js --format=esm --bundle --minify --tree-shaking=true | wc -c"},"_npmUser":{"name":"texel","email":"info@mattdesl.studio"},"repository":{"url":"git://github.com/texel-org/color.git","type":"git"},"_npmVersion":"10.5.2","description":"a minimal and modern color library","directories":{},"_nodeVersion":"20.13.1","_hasShrinkwrap":false,"devDependencies":{"pako":"^2.1.0","tape":"^5.8.1","culori":"^4.0.1","faucet":"^0.0.4","terser":"^5.31.3","esbuild":"^0.23.0","prettier":"^3.3.3","png-tools":"^1.0.4","colorjs.io":"^0.5.2","canvas-sketch":"^0.7.7","canvas-sketch-cli":"^1.11.21"},"_npmOperationalInternal":{"tmp":"tmp/color_1.1.4_1727177798758_0.07699408692937104","host":"s3://npm-registry-packages"}},"1.1.5":{"name":"@texel/color","version":"1.1.5","keywords":["oklch","oklab","okhsl","okhsv","display-p3","p3","displayp3","prophoto","a98rgb","adobe1998","prophotorgb","color","colour","picker","tool","rgb","srgb","convert","saturation","chroma","perceptual","uniform","perceptually"],"author":{"url":"https://github.com/mattdesl","name":"Matt DesLauriers"},"license":"MIT","_id":"@texel/color@1.1.5","maintainers":[{"name":"texel","email":"info@mattdesl.studio"}],"homepage":"https://github.com/texel-org/color","bugs":{"url":"https://github.com/texel-org/color/issues"},"dist":{"shasum":"714e8c045ebfb7263c9cee168f3063ec1e419121","tarball":"https://registry.npmjs.org/@texel/color/-/color-1.1.5.tgz","fileCount":21,"integrity":"sha512-q5YRMthr3VOz+XAOV+PrI7BO3Vg+sMvhfuj37i3X+5wC6+zf5eR/iqFYy1uXfhmtwAalJUzgQ9/A9GPzrsfa7Q==","signatures":[{"sig":"MEQCIAjHKEHL0nwG2AlRwHpSzrnxys/JvkpbeLrOlFtIDRLvAiBzdPnkHDVDDRPFPILrRmiX+xEPOQ+4Ak5IY4JO7k6i/Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":109408},"main":"./src/index.js","type":"module","types":"./types/types.d.ts","gitHead":"8aedba808466058e6a19d78b0bb1d6cd587ad862","scripts":{"docs":"jsdoc -t node_modules/better-docs -c .jsdoc.json -d docs -R DOC.md","test":"faucet test/test*.js","bench":"node test/bench-colorjs.js","types":"jsdoc -t node_modules/tsd-jsdoc/dist -c .jsdoc.json -d types","matrices":"python3 tools/print_matrices.py > src/conversion_matrices.js && prettier src/conversion_matrices.js --write","visualize":"canvas-sketch-cli test/canvas-graph.js --open","bench:node":"NODE_ENV=production node --prof --no-logfile-per-isolate test/bench-node.js && node --prof-process v8.log","bench:size":"esbuild test/bench-size.js --format=esm --bundle --minify --tree-shaking=true | wc -c"},"_npmUser":{"name":"texel","email":"info@mattdesl.studio"},"repository":{"url":"git://github.com/texel-org/color.git","type":"git"},"_npmVersion":"10.5.2","description":"a minimal and modern color library","directories":{},"_nodeVersion":"20.13.1","_hasShrinkwrap":false,"devDependencies":{"pako":"^2.1.0","tape":"^5.8.1","jsdoc":"^4.0.4","culori":"^4.0.1","faucet":"^0.0.4","terser":"^5.31.3","esbuild":"^0.23.0","prettier":"^3.3.3","png-tools":"^1.0.4","tsd-jsdoc":"^2.5.0","colorjs.io":"^0.5.2","better-docs":"^2.7.3","canvas-sketch":"^0.7.7","canvas-sketch-cli":"^1.11.21"},"_npmOperationalInternal":{"tmp":"tmp/color_1.1.5_1735311502543_0.8265069594760357","host":"s3://npm-registry-packages-npm-production"}},"1.1.6":{"name":"@texel/color","version":"1.1.6","keywords":["oklch","oklab","okhsl","okhsv","display-p3","p3","displayp3","prophoto","a98rgb","adobe1998","prophotorgb","color","colour","picker","tool","rgb","srgb","convert","saturation","chroma","perceptual","uniform","perceptually"],"author":{"url":"https://github.com/mattdesl","name":"Matt DesLauriers"},"license":"MIT","_id":"@texel/color@1.1.6","maintainers":[{"name":"texel","email":"info@mattdesl.studio"}],"homepage":"https://github.com/texel-org/color","bugs":{"url":"https://github.com/texel-org/color/issues"},"dist":{"shasum":"ac78fd817c88e22785f6c282bbcf1348658edd01","tarball":"https://registry.npmjs.org/@texel/color/-/color-1.1.6.tgz","fileCount":20,"integrity":"sha512-diTT+DTBdo76q9CB7JN38DQF6f1wXIguTXOvfRGLX2IVgyxWB7vfPI0vHYSU1uD6V+YKDuXTy673AmxgMYAcYA==","signatures":[{"sig":"MEUCIE5VQqG3OxOJkYbblR71RZORs7GD0X+ZMi1IHOPwgmzOAiEAz5jMtvtYSIIMhdQaGhmoUHt1xf2tLq/5PIKCuqxB4tI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":105587},"main":"./src/index.js","type":"module","types":"./types/types.d.ts","gitHead":"225279bf69ccb72fe3f605ddd5b420b0f336b982","scripts":{"docs":"jsdoc src -t node_modules/better-docs -c tools/.jsdoc.json -d docs -R DOC.md","test":"faucet test/test*.js","bench":"node test/bench-colorjs.js","types":"jsdoc src -t node_modules/tsd-jsdoc/dist -c tools/.jsdoc.types.json -d types","matrices":"python3 tools/print_matrices.py > src/conversion_matrices.js && prettier src/conversion_matrices.js --write","visualize":"canvas-sketch-cli test/canvas-graph.js --open","bench:node":"NODE_ENV=production node --prof --no-logfile-per-isolate test/bench-node.js && node --prof-process v8.log","bench:size":"esbuild test/bench-size.js --format=esm --bundle --minify --tree-shaking=true | wc -c"},"_npmUser":{"name":"texel","email":"info@mattdesl.studio"},"repository":{"url":"git://github.com/texel-org/color.git","type":"git"},"_npmVersion":"10.5.2","description":"a minimal and modern color library","directories":{},"_nodeVersion":"20.13.1","_hasShrinkwrap":false,"devDependencies":{"pako":"^2.1.0","tape":"^5.8.1","jsdoc":"^4.0.4","culori":"^4.0.1","faucet":"^0.0.4","terser":"^5.31.3","esbuild":"^0.23.0","prettier":"^3.3.3","png-tools":"^1.0.4","tsd-jsdoc":"^2.5.0","colorjs.io":"^0.5.2","better-docs":"^2.7.3","canvas-sketch":"^0.7.7","canvas-sketch-cli":"^1.11.21"},"_npmOperationalInternal":{"tmp":"tmp/color_1.1.6_1735316236370_0.3431364199495983","host":"s3://npm-registry-packages-npm-production"}},"1.1.7":{"name":"@texel/color","version":"1.1.7","keywords":["oklch","oklab","okhsl","okhsv","display-p3","p3","displayp3","prophoto","a98rgb","adobe1998","prophotorgb","color","colour","picker","tool","rgb","srgb","convert","saturation","chroma","perceptual","uniform","perceptually"],"author":{"url":"https://github.com/mattdesl","name":"Matt DesLauriers"},"license":"MIT","_id":"@texel/color@1.1.7","maintainers":[{"name":"texel","email":"info@mattdesl.studio"}],"homepage":"https://github.com/texel-org/color","bugs":{"url":"https://github.com/texel-org/color/issues"},"dist":{"shasum":"cd5822e294d9384a7bca9576cfac2f8c70ccaf77","tarball":"https://registry.npmjs.org/@texel/color/-/color-1.1.7.tgz","fileCount":20,"integrity":"sha512-5PDB0tKGtIsQvdROtL/HlZBaalIiFkIQ36JuHOtbeejuJXtrfJCsxbRRz18HG+XSqdc/68Vkg+Gu1pJdDgIniw==","signatures":[{"sig":"MEUCIQCZpfjGruqqNr2g+BI4pGMZDHsm9nIxNUt7mTkkWQX17AIgNt0I2fLsMQXGP72hjSgKrgDn9t7FITXbDdfx9zxZSyA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":105601},"main":"./src/index.js","type":"module","exports":{"import":"./src/index.js"},"gitHead":"570becb8c8548ccb3d30dce23e8c7560feee3f0f","scripts":{"docs":"jsdoc src -t node_modules/better-docs -c tools/.jsdoc.json -d docs -R DOC.md","test":"faucet test/test*.js","bench":"node test/bench-colorjs.js","types":"jsdoc src -t node_modules/tsd-jsdoc/dist -c tools/.jsdoc.types.json -d .","matrices":"python3 tools/print_matrices.py > src/conversion_matrices.js && prettier src/conversion_matrices.js --write","visualize":"canvas-sketch-cli test/canvas-graph.js --open","bench:node":"NODE_ENV=production node --prof --no-logfile-per-isolate test/bench-node.js && node --prof-process v8.log","bench:size":"esbuild test/bench-size.js --format=esm --bundle --minify --tree-shaking=true | wc -c"},"_npmUser":{"name":"texel","email":"info@mattdesl.studio"},"repository":{"url":"git://github.com/texel-org/color.git","type":"git"},"_npmVersion":"10.5.2","description":"a minimal and modern color library","directories":{},"_nodeVersion":"20.13.1","_hasShrinkwrap":false,"devDependencies":{"pako":"^2.1.0","tape":"^5.8.1","jsdoc":"^4.0.4","culori":"^4.0.1","faucet":"^0.0.4","terser":"^5.31.3","esbuild":"^0.23.0","prettier":"^3.3.3","png-tools":"^1.0.4","tsd-jsdoc":"^2.5.0","colorjs.io":"^0.5.2","better-docs":"^2.7.3","canvas-sketch":"^0.7.7","canvas-sketch-cli":"^1.11.21"},"_npmOperationalInternal":{"tmp":"tmp/color_1.1.7_1735316596183_0.8580926882195192","host":"s3://npm-registry-packages-npm-production"}},"1.1.8":{"name":"@texel/color","version":"1.1.8","keywords":["oklch","oklab","okhsl","okhsv","display-p3","p3","displayp3","prophoto","a98rgb","adobe1998","prophotorgb","color","colour","picker","tool","rgb","srgb","convert","saturation","chroma","perceptual","uniform","perceptually"],"author":{"url":"https://github.com/mattdesl","name":"Matt DesLauriers"},"license":"MIT","_id":"@texel/color@1.1.8","maintainers":[{"name":"texel","email":"info@mattdesl.studio"}],"homepage":"https://github.com/texel-org/color","bugs":{"url":"https://github.com/texel-org/color/issues"},"dist":{"shasum":"1733decce72c4e0d7b83551fe16cd431cc82aadb","tarball":"https://registry.npmjs.org/@texel/color/-/color-1.1.8.tgz","fileCount":20,"integrity":"sha512-gayi2s7fO++hyFRTR7DVjuuUUQLF8oEcrSarUeGkof2CunFx5UwNbvOVLl6/QihOn2RBgjuBmknDU7YNbHlisQ==","signatures":[{"sig":"MEUCIQCu7oMj9HRtNFeafyONf4JlEa1QDzmdZlm39AfpHJv56gIgOzY0a1ToY/YetqJHKoRKeV6jRmAXaTgCZVRGFfidG1k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":110624},"main":"./src/index.js","type":"module","exports":{"import":"./src/index.js"},"gitHead":"0248698519d2a4ce682274c53d1775bbbfaa3890","scripts":{"docs":"jsdoc src -r -t node_modules/better-docs -c tools/.jsdoc.json -d docs -R DOC.md","test":"faucet test/test*.js","bench":"node test/bench-colorjs.js","types":"jsdoc src -r -t node_modules/tsd-jsdoc/dist -c tools/.jsdoc.types.json -d .","matrices":"python3 tools/print_matrices.py > src/conversion_matrices.js && prettier src/conversion_matrices.js --write","visualize":"canvas-sketch-cli test/canvas-graph.js --open","bench:node":"NODE_ENV=production node --prof --no-logfile-per-isolate test/bench-node.js && node --prof-process v8.log","bench:size":"esbuild test/bench-size.js --format=esm --bundle --minify --tree-shaking=true | wc -c"},"_npmUser":{"name":"texel","email":"info@mattdesl.studio"},"repository":{"url":"git://github.com/texel-org/color.git","type":"git"},"_npmVersion":"10.5.2","description":"a minimal and modern color library","directories":{},"_nodeVersion":"20.13.1","_hasShrinkwrap":false,"devDependencies":{"pako":"^2.1.0","tape":"^5.8.1","jsdoc":"^4.0.4","culori":"^4.0.1","faucet":"^0.0.4","terser":"^5.31.3","esbuild":"^0.23.0","prettier":"^3.3.3","png-tools":"^1.0.4","tsd-jsdoc":"^2.5.0","colorjs.io":"^0.5.2","better-docs":"^2.7.3","canvas-sketch":"^0.7.7","canvas-sketch-cli":"^1.11.21"},"_npmOperationalInternal":{"tmp":"tmp/color_1.1.8_1735317335071_0.3100940352187085","host":"s3://npm-registry-packages-npm-production"}},"1.1.9":{"name":"@texel/color","version":"1.1.9","keywords":["oklch","oklab","okhsl","okhsv","display-p3","p3","displayp3","prophoto","a98rgb","adobe1998","prophotorgb","color","colour","picker","tool","rgb","srgb","convert","saturation","chroma","perceptual","uniform","perceptually"],"author":{"url":"https://github.com/mattdesl","name":"Matt DesLauriers"},"license":"MIT","_id":"@texel/color@1.1.9","maintainers":[{"name":"texel","email":"info@mattdesl.studio"}],"homepage":"https://github.com/texel-org/color","bugs":{"url":"https://github.com/texel-org/color/issues"},"dist":{"shasum":"7685d649a08a927fa73301f94c37b834809b68ce","tarball":"https://registry.npmjs.org/@texel/color/-/color-1.1.9.tgz","fileCount":20,"integrity":"sha512-dXGidZoaaHHdc/8L8PBHAEl3F74s/+rOufcL3yYcBjJgv4btRmPr28owjGYmijs5GRAJ10E9rEIoHnrB1eEAGA==","signatures":[{"sig":"MEUCIGBsGcLDY+3yrns4p6xDef7KXEOUKM76cPjclEO0ZaLGAiEA1RhH0QFE5Z347XGLAhifvgmexzIP5uaxC8y3NoBR7rQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":111047},"main":"./src/index.js","type":"module","types":"./types.d.ts","exports":{"types":"./types.d.ts","import":"./src/index.js"},"gitHead":"936b2299ce8d09b9ad929085458a18c195161a73","scripts":{"docs":"jsdoc src -r -t node_modules/better-docs -c tools/.jsdoc.json -d docs -R DOC.md","test":"faucet test/test*.js","bench":"node test/bench-colorjs.js","types":"jsdoc src -r -t node_modules/tsd-jsdoc/dist -c tools/.jsdoc.types.json -d .","matrices":"python3 tools/print_matrices.py > src/conversion_matrices.js && prettier src/conversion_matrices.js --write","visualize":"canvas-sketch-cli test/canvas-graph.js --open","bench:node":"NODE_ENV=production node --prof --no-logfile-per-isolate test/bench-node.js && node --prof-process v8.log","bench:size":"esbuild test/bench-size.js --format=esm --bundle --minify --tree-shaking=true | wc -c"},"_npmUser":{"name":"texel","email":"info@mattdesl.studio"},"repository":{"url":"git://github.com/texel-org/color.git","type":"git"},"_npmVersion":"10.5.2","description":"a minimal and modern color library","directories":{},"_nodeVersion":"20.13.1","_hasShrinkwrap":false,"devDependencies":{"pako":"^2.1.0","tape":"^5.8.1","jsdoc":"^4.0.4","culori":"^4.0.1","faucet":"^0.0.4","terser":"^5.31.3","esbuild":"^0.23.0","prettier":"^3.3.3","png-tools":"^1.0.4","tsd-jsdoc":"^2.5.0","colorjs.io":"^0.5.2","better-docs":"^2.7.3","canvas-sketch":"^0.7.7","canvas-sketch-cli":"^1.11.21"},"_npmOperationalInternal":{"tmp":"tmp/color_1.1.9_1735483587459_0.37978319487972856","host":"s3://npm-registry-packages-npm-production"}},"1.1.10":{"name":"@texel/color","version":"1.1.10","keywords":["oklch","oklab","okhsl","okhsv","display-p3","p3","displayp3","prophoto","a98rgb","adobe1998","prophotorgb","color","colour","picker","tool","rgb","srgb","convert","saturation","chroma","perceptual","uniform","perceptually"],"author":{"url":"https://github.com/mattdesl","name":"Matt DesLauriers"},"license":"MIT","_id":"@texel/color@1.1.10","maintainers":[{"name":"texel","email":"info@mattdesl.studio"}],"homepage":"https://github.com/texel-org/color","bugs":{"url":"https://github.com/texel-org/color/issues"},"dist":{"shasum":"5f70c6ea1dff1cbc911dbb40342325e0047a7bb1","tarball":"https://registry.npmjs.org/@texel/color/-/color-1.1.10.tgz","fileCount":20,"integrity":"sha512-0du+jhP68nvdXGoS/dxAyqkmWWzsogtU3chygmNf/u4QtDIbG1e5OfcVIWfx29B5ANCLEDOPEQIvOhrvwhlORg==","signatures":[{"sig":"MEUCIEN+D3bm+GlCkaWNtckPlaW4SkCCsFVU4IQ6R5p/8Hi/AiEAhYsPso0OeFx7O1EPsB52O+BgbgVglcC27kpwO/j0Zvw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111024},"main":"./src/index.js","type":"module","types":"./types.d.ts","exports":{"types":"./types.d.ts","import":"./src/index.js"},"gitHead":"464621d5e02d245b32ebbec8329c2a7b414a1c0b","scripts":{"docs":"jsdoc src -r -t node_modules/better-docs -c tools/.jsdoc.json -d docs -R DOC.md","test":"faucet test/test*.js","bench":"node test/bench-colorjs.js","types":"jsdoc src -r -t node_modules/tsd-jsdoc/dist -c tools/.jsdoc.types.json -d .","matrices":"python3 tools/print_matrices.py > src/conversion_matrices.js && prettier src/conversion_matrices.js --write","visualize":"canvas-sketch-cli test/canvas-graph.js --open","bench:node":"NODE_ENV=production node --prof --no-logfile-per-isolate test/bench-node.js && node --prof-process v8.log","bench:size":"esbuild test/bench-size.js --format=esm --bundle --minify --tree-shaking=true | wc -c"},"_npmUser":{"name":"texel","email":"info@mattdesl.studio"},"repository":{"url":"git://github.com/texel-org/color.git","type":"git"},"_npmVersion":"10.5.2","description":"a minimal and modern color library","directories":{},"_nodeVersion":"20.13.1","_hasShrinkwrap":false,"devDependencies":{"pako":"^2.1.0","tape":"^5.8.1","jsdoc":"^4.0.4","culori":"^4.0.1","faucet":"^0.0.4","terser":"^5.31.3","esbuild":"^0.23.0","prettier":"^3.3.3","png-tools":"^1.0.4","tsd-jsdoc":"^2.5.0","colorjs.io":"^0.5.2","better-docs":"^2.7.3","canvas-sketch":"^0.7.7","canvas-sketch-cli":"^1.11.21"},"_npmOperationalInternal":{"tmp":"tmp/color_1.1.10_1742464989940_0.6241978645915338","host":"s3://npm-registry-packages-npm-production"}},"1.1.11":{"name":"@texel/color","version":"1.1.11","description":"a minimal and modern color library","type":"module","main":"./src/index.js","types":"./types.d.ts","exports":{"import":"./src/index.js","types":"./types.d.ts"},"license":"MIT","author":{"name":"Matt DesLauriers","url":"https://github.com/mattdesl"},"devDependencies":{"better-docs":"^2.7.3","canvas-sketch":"^0.7.7","canvas-sketch-cli":"^1.11.21","colorjs.io":"^0.5.2","culori":"^4.0.1","esbuild":"^0.23.0","faucet":"^0.0.4","jsdoc":"^4.0.4","jsdoc-memberof-namespace":"^2.2.0","pako":"^2.1.0","png-tools":"^1.0.4","prettier":"^3.3.3","tape":"^5.8.1","terser":"^5.31.3","tsd-jsdoc":"^2.5.0"},"scripts":{"visualize":"canvas-sketch-cli test/canvas-graph.js --open","docs":"jsdoc src -r -t node_modules/better-docs -c tools/.jsdoc.json -d docs -R DOC.md","types":"jsdoc src -r -t node_modules/tsd-jsdoc/dist -c tools/.jsdoc.types.json -d .","test":"node test/test.js | faucet","bench":"node test/bench-colorjs.js","bench:node":"NODE_ENV=production node --prof --no-logfile-per-isolate test/bench-node.js && node --prof-process v8.log","bench:size":"esbuild test/bench-size.js --format=esm --bundle --minify --tree-shaking=true | wc -c","matrices":"python3 tools/print_matrices.py > src/conversion_matrices.js && prettier src/conversion_matrices.js --write"},"keywords":["oklch","oklab","okhsl","okhsv","display-p3","p3","displayp3","prophoto","a98rgb","adobe1998","prophotorgb","color","colour","picker","tool","rgb","srgb","convert","saturation","chroma","perceptual","uniform","perceptually"],"repository":{"type":"git","url":"git://github.com/texel-org/color.git"},"homepage":"https://github.com/texel-org/color","bugs":{"url":"https://github.com/texel-org/color/issues"},"_id":"@texel/color@1.1.11","gitHead":"43052d98d2de483cdc95da444f1ba8b846388b23","_nodeVersion":"24.1.0","_npmVersion":"11.3.0","dist":{"integrity":"sha512-/3kKgfBqzrRfLl4RsEccx+Yfj1kVL6Bh6DejVWZ+DPg/jJdcfdYZ5fpD1nXFwWd8OQNATjz+WqsfQfUynSsgRg==","shasum":"084f64b4f63576b760bc1c86eeb2f67bf7f1f198","tarball":"https://registry.npmjs.org/@texel/color/-/color-1.1.11.tgz","fileCount":21,"unpackedSize":111488,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD70ZFTJGKHkUENLgSV+//LrF0G/nLgolaDsrWHMUYziQIhAP4ziIkAkwd/sLhcU9CCWPC2RhjFHej75HVOMU59sNab"}]},"_npmUser":{"name":"texel","email":"info@mattdesl.studio"},"directories":{},"maintainers":[{"name":"texel","email":"info@mattdesl.studio"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/color_1.1.11_1767779837492_0.7393527429739157"},"_hasShrinkwrap":false}},"time":{"created":"2024-08-02T15:59:44.173Z","modified":"2026-01-07T09:57:17.833Z","1.0.0":"2024-08-02T15:59:44.587Z","1.0.1":"2024-08-02T16:02:27.269Z","1.0.2":"2024-08-03T08:21:05.423Z","1.0.3":"2024-08-03T09:23:31.305Z","1.0.4":"2024-08-03T10:27:05.493Z","1.0.5":"2024-08-03T16:29:51.572Z","1.0.6":"2024-08-08T18:55:43.480Z","1.1.0":"2024-08-15T13:42:24.114Z","1.1.1":"2024-08-15T13:45:08.577Z","1.1.2":"2024-08-29T08:58:55.670Z","1.1.3":"2024-09-13T16:25:36.564Z","1.1.4":"2024-09-24T11:36:38.952Z","1.1.5":"2024-12-27T14:58:22.736Z","1.1.6":"2024-12-27T16:17:16.585Z","1.1.7":"2024-12-27T16:23:16.369Z","1.1.8":"2024-12-27T16:35:35.237Z","1.1.9":"2024-12-29T14:46:27.645Z","1.1.10":"2025-03-20T10:03:10.140Z","1.1.11":"2026-01-07T09:57:17.646Z"},"bugs":{"url":"https://github.com/texel-org/color/issues"},"author":{"name":"Matt DesLauriers","url":"https://github.com/mattdesl"},"license":"MIT","homepage":"https://github.com/texel-org/color","keywords":["oklch","oklab","okhsl","okhsv","display-p3","p3","displayp3","prophoto","a98rgb","adobe1998","prophotorgb","color","colour","picker","tool","rgb","srgb","convert","saturation","chroma","perceptual","uniform","perceptually"],"repository":{"type":"git","url":"git://github.com/texel-org/color.git"},"description":"a minimal and modern color library","maintainers":[{"name":"texel","email":"info@mattdesl.studio"}],"readme":"# @texel/color\n\n![generated](./test/banner.png)\n\nA minimal and modern color library for JavaScript. Especially useful for real-time applications, generative art, and graphics on the web.\n\n- Features: fast color conversion, color difference, gamut mapping, and serialization\n- Optimized for speed: approx 5-125 times faster than [Colorjs.io](https://colorjs.io/) (see [benchmarks](#benchmarks))\n- Optimized for low memory and minimal allocations: no arrays or objects are created within conversion and gamut mapping functions\n- Optimized for compact bundles: zero dependencies, and unused color spaces can be automatically tree-shaked away for small sizes (e.g. ~3.5kb minified if you only require OKLCH to sRGB conversion)\n- Optimized for accuracy: [high precision](#accuracy) color space matrices\n- Focused on a minimal and modern set of color spaces:\n  - xyz (D65), xyz-d50, oklab, oklch, okhsv, okhsl, srgb, srgb-linear, display-p3, display-p3-linear, rec2020, rec2020-linear, a98-rgb, a98-rgb-linear, prophoto-rgb, prophoto-rgb-linear\n\n## Install\n\nUse [npm](https://npmjs.com/) to install and import the module.\n\n```sh\nnpm install @texel/color --save\n```\n\n## Examples\n\nConverting OKLCH (cylindrical form of OKLab) to sRGB:\n\n```js\nimport { convert, OKLCH, sRGB } from \"@texel/color\";\n\n// L = 0 .. 1\n// C = 0 .. 0.4\n// H = 0 .. 360 (degrees)\nconst rgb = convert([0.5, 0.15, 30], OKLCH, sRGB);\n\n// Note sRGB output is in range 0 .. 1\n// -> [ 0.658, 0.217, 0.165 ]\n```\n\nYou can also use wildcard imports:\n\n```js\nimport * as colors from \"@texel/color\";\n\nconst rgb = colors.convert([0.5, 0.15, 30], colors.OKLCH, colors.sRGB);\n```\n\n> :bulb: Modern bundlers (esbuild, vite) will apply tree-shaking and remove any features that aren't needed, such as color spaces and gamut mapping functions that you didn't reference in your code. The above script results in a ~3.5kb minified bundle with esbuild.\n\nAnother example with gamut mapping and serialization for wide-gamut Canvas2D:\n\n```js\nimport { gamutMapOKLCH, DisplayP3Gamut, sRGBGamut, serialize } from \"@texel/color\";\n\n// Some value that may or may not be in sRGB gamut\nconst oklch = [ 0.15, 0.425, 30 ];\n\n// decide what gamut you want to map to\nconst isDisplayP3Supported = /* check env */;\nconst gamut = isDisplayP3Supported ? DisplayP3Gamut : sRGBGamut;\n\n// map the input OKLCH to the R,G,B space (sRGB or DisplayP3)\nconst rgb = gamutMapOKLCH(oklch, gamut);\n\n// get a CSS color string for your output space\nconst color = serialize(rgb, gamut.space);\n\n// draw color to a Canvas2D context\nconst canvas = document.createElement('canvas');\nconst context = canvas.getContext('2d', {\n  colorSpace: gamut.id\n});\ncontext.fillStyle = color;\ncontext.fillRect(0,0, canvas.width, canvas.height);\n```\n\n## API Docs\n\nAuto-generated documentation with all exposed methods can be found here:\n\n[https://texel-org.github.io/color](https://texel-org.github.io/color)\n\n## API Details\n\n#### `output = convert(coords, fromSpace, toSpace, output = [0, 0, 0])`\n\nConverts the `coords` (typically `[r,g,b]` or `[l,c,h]` or similar), expected to be in `fromSpace`, to the specified `toSpace`. The from and to spaces are one of the [spaces](#color-spaces) interfaces.\n\nYou can pass `output`, which is a 3 dimensional vector, and the result will be stored into it. This can be used to avoid allocating any new memory in hot code paths.\n\nThe return value is the new coordinates in the destination space; such as `[r,g,b]` if `sRGB` space is the target. Note that most spaces use normalized and unbounded coordinates; so RGB spaces are in the range 0..1 and might be out of bounds (i.e. out of gamut). It's likely you will want to combine this with `gamutMapOKLCH`, see below.\n\n#### `output = gamutMapOKLCH(oklch, gamut = sRGBGamut, targetSpace = gamut.space, out = [0, 0, 0], mapping = MapToCuspL, [cusp])`\n\nPerforms fast gamut mapping in OKLCH as [described by Björn Ottosson](https://bottosson.github.io/posts/gamutclipping/) (2021). This takes an input `[l,c,h]` coords in OKLCH space, and ensures the final result will lie within the specified color `gamut` (default `sRGBGamut`). You can further specify a different target space (which default's to the gamut's space), for example to get a linear-light sRGB and avoid the transfer function, or to keep the result in OKLCH:\n\n```js\nimport { gamutMapOKLCH, sRGBGamut, sRGBLinear, OKLCH } from \"@texel/color\";\n\n// gamut map to sRGB but return linear sRGB\nconst lrgb = gamutMapOKLCH(oklch, sRGBGamut, sRGBLinear);\n\n// or gamut map to sRGB but return OKLCH (does not perform RGB clip)\nconst lch = gamutMapOKLCH(oklch, sRGBGamut, OKLCH);\n```\n\nYou can specify an `out` array to avoid allocations, and the result will be stored into that array. You can also specify a `mapping` function which determines the strategy to use when gamut mapping, and can be one of the following:\n\n```js\nimport {\n  // possible mappings\n  MapToL,\n  MapToGray,\n  MapToCuspL,\n  MapToAdaptiveGray,\n  MapToAdaptiveCuspL,\n} from \"@texel/color\";\n\n// preserve lightness when performing sRGB gamut mapping\nconst rgb = [0, 0, 0];\ngamutMapOKLCH(oklch, sRGBGamut, sRGB, rgb, MapToL);\n```\n\nThe `cusp` can also be passed as the last parameter, allowing for faster evaluation for known hues. See below for calculating the cusp.\n\n> **Note:** If you map to an OKLab-based target (OKLCH, OKHSL etc), the final step of RGB clipping will be skipped. This produces more predictable OKLab and OKLCH based results, but you will likely want to perform a final clampedRGB() step when converting to a displayable color.\n\n#### `LC = findCuspOKLCH(a, b, gamut, out = [0, 0])`\n\nFinds the 'cusp' of a given OKLab hue plane (denoted with normalized `a` and `b` values in OKLab space), returning the `[L, C]` (lightness and chroma). This is useful for pre-computing aspects of gamut mapping when you are working across a known hue:\n\n```js\nimport {\n  sRGBGamut,\n  findCuspOKLCH,\n  gamutMapOKLCH,\n  degToRad,\n  MapToCuspL,\n} from \"@texel/color\";\n\nconst gamut = sRGBGamut;\n\n// compute cusp once for this hue\nconst H = 30; // e.g. 30º hue\nconst hueAngle = degToRad(H);\nconst a = Math.cos(hueAngle);\nconst b = Math.sin(hueAngle);\nconst cuspLC = findCuspOKLCH(a, b, gamut);\n\n// ... somewhere else in your program ...\n// pass 'cusp' parameter for faster evaluation\n// expected that your OKLCH coord has the same hue as the cusp (H)\ngamutMapOKLCH(oklch, gamut, gamut.space, out, MapToCuspL, cuspLC);\n```\n\nThe `a` and `b` can also be from OKLab coordinates, but must be normalized so `a^2 + b^2 == 1`.\n\n#### `str = serialize(coords, inputSpace, outputSpace = inputSpace)`\n\nTurns the specified `coords` (assumed to be in `inputSpace`) into a string, first converting if needed to the specified `outputSpace`. If the space is sRGB, a plain `rgb(r,g,b)` string (in bytes) will be used for browser compatibility and performance, otherwise a CSS color string will be returned. Note that not all spaces, such as certain linear spaces, are currently supported by CSS. You can optionally pass an `alpha` component (0..1 range) as the fourth element in the `coords` array for it to be considered.\n\n```js\nimport { serialize, sRGB, DisplayP3, OKLCH } from \"@texel/color\";\n\nserialize([0, 0.5, 1], sRGB); // \"rgb(0, 128, 255)\"\nserialize([0, 0.5, 1, 0.5], sRGB); // \"rgba(0, 128, 255, 0.5)\"\nserialize([0, 0.5, 1], DisplayP3); // \"color(display-p3 0 0.5 1)\"\nserialize([0, 0.5, 1, 0.35], DisplayP3); // \"color(display-p3 0 0.5 1 / 0.35)\"\nserialize([1, 0, 0], OKLCH, sRGB); // \"rgb(255, 255, 255)\"\nserialize([1, 0, 0], OKLCH); // \"oklch(1 0 0)\"\n```\n\n#### `info = deserialize(colorString)`\n\nThe inverse of `serialize`, this will take a string and determine the color space `id` it is referencing, and the 3 or 4 (for alpha) `coords`. This is intentionally limited in functionality, only supporting hex RGB, `rgb()` and `rgba()` bytes, and `oklch()`, `oklab()`, and plain `color()` functions with no modifiers.\n\n```js\nimport { deserialize } from \"@texel/color\";\n\nconst { coords, id } = deserialize(\"color(display-p3 0 0.5 1 / 0.35)\");\nconsole.log(id); // \"display-p3\"\nconsole.log(coords); // [ 0, 0.5, 1, 0.35 ]\n```\n\n> **Note:** Parsing is still a WIP area of API design, and complex CSS color string handling is not within the scope of this library.\n\n#### `delta = deltaEOK(oklabA, oklabB)`\n\nPerforms a color difference in OKLab space between two coordinates. As this is a perceptually uniform color space that improves upon CIELAB and its flaws, it should be suitable as a replacement for the CIEDE2000 color difference equation in many situations.\n\n#### `[utils]`\n\nThere are also a host of other [utilities](#utilities) exported by the module.\n\n## Color Spaces\n\nThe module exports a set of color spaces:\n\n```js\nimport {\n  XYZ, // using D65 whitepoint\n  XYZD50, // using D50 whitepoint\n  sRGB,\n  sRGBLinear,\n  DisplayP3,\n  DisplayP3Linear,\n  Rec2020,\n  Rec2020Linear,\n  A98RGB, // Adobe® 1998 RGB\n  A98RGBLinear,\n  ProPhotoRGB,\n  ProPhotoRGBLinear,\n  OKLab,\n  OKLCH,\n  OKHSL, // in sRGB gamut\n  OKHSV, // in sRGB gamut\n\n  // a function to list all spaces\n  listColorSpaces,\n} from \"@texel/color\";\n\nconsole.log(listColorSpaces()); // [XYZ, sRGB, sRGBLinear, ...]\n\nconsole.log(sRGBLinear.id); // \"srgb-linear\"\nconsole.log(sRGB.base); // -> sRGBLinear\nconsole.log(sRGB.fromBase(someLinearRGB)); // -> [gamma-encoded sRGB...]\nconsole.log(sRGB.toBase(someGammaRGB)); // -> [linear sRGB...]\n```\n\nNote that not all spaces have a `base` field; if not specified, it's assumed the color space can pass through OKLab or XYZ as a root.\n\n## Color Gamuts\n\nThe module exports a set of \"gamuts\" which are boundaries defined by an approximation in OKLab space, allowing for fast gamut mapping. These interfaces are mainly used by the `gamutMapOKLCH` function.\n\n```js\nimport {\n  sRGBGamut,\n  DisplayP3Gamut,\n  Rec2020Gamut,\n  A98RGBGamut,\n\n  // a function to list all gamuts\n  listColorGamuts,\n} from \"@texel/color\";\n\nconsole.log(listColorGamuts()); // [sRGBGamut, ...]\n\nconsole.log(sRGBGamut.space); // sRGB space\nconsole.log(sRGBGamut.space.id); // 'srgb'\n```\n\nNote: ProPhoto gamut is not yet supported, I would be open to a PR fixing it within the Python script.\n\n## Utilities\n\nIn addition to the core API, the module exports a number of utilities:\n\n#### `b = floatToByte(f)`\n\nConverts the float in range 0..1 to a byte in range 0..255, rounded and clamped.\n\n#### `out = XYZ_to_xyY(xyz, out=[0,0,0])`\n\nConverts the XYZ coordinates to xyY form, storing the result in `out` if specified before returning.\n\n#### `out = xyY_to_XYZ(xyY, out=[0,0,0])`\n\nConverts the xyY coordinates to XYZ form, storing the results in `out` if specified before returning.\n\n#### `v = lerp(min, max, t)`\n\nPerforms linear interpolation between min and max with the factor `t`.\n\n#### `v = lerpAngle(min, max, t)`\n\nPerforms circular linear interpolation between min and max with the factor `t`, but where the min and max are considered to be angles (in degrees) allowing the value to wrap around within 0 to 360, interpolating to create the shortest arc.\n\n#### `c = clamp(value, min, max)`\n\nClamps the `value` between min and max and returns the result.\n\n#### `out = clampedRGB(inRGB, out=[0,0,0])`\n\nClamps (i.e. clips) the RGB into the range 0..1, storing the result in `out` if specified before returning.\n\n#### `inside = isRGBInGamut(rgb, epsilon = 0.000075)`\n\nReturns `true` if the given `rgb` is inside its 0..1 gamut boundary, with a threshold of `epsilon`.\n\n#### `rgb = hexToRGB(hex, out=[0,0,0])`\n\nConverts the specified hex string (with or without a leading `#`) into a floating point RGB triplet in the range 0..1, storing the result in `out` if specified before returning the result.\n\n#### `hex = RGBToHex(rgb)`\n\nConverts the specified RGB triplet (floating point in the range 0..1) into a 6-character hex color string with a leading `#`.\n\n#### `angle = constrainAngle(angle)`\n\nConstrains the `angle` (in degrees) to 0..360, wrapping around if needed.\n\n#### `degAngle = radToDeg(radAngle)`\n\nConverts the angle (given in radians) to degrees.\n\n#### `radAngle = degToRad(degAngle)`\n\nConverts the angle (given in degrees) to radians.\n\n## Transformation Matrices\n\nYou can also import the lower level functions and matrices; this may be useful for granular conversions, or for example uploading the buffers to WebGPU for compute shaders.\n\n```js\nimport {\n  OKLab_to,\n  OKLab_from,\n  transform,\n  XYZ_to_linear_sRGB_M,\n  LMS_to_XYZ_M,\n  XYZ_to_LMS_M,\n  sRGB,\n  OKHSLToOKLab,\n  DisplayP3Gamut,\n} from \"@texel/color\";\n\nconsole.log(XYZ_to_linear_sRGB_M); // [ [a,b,c], ... ]\nOKLab_to(oklab, LMS_to_XYZ_M); // OKLab -> XYZ D65\nOKLab_from(xyzD65, XYZ_to_LMS_M); // XYZ D65 -> OKLab\ntransform(xyzD65, XYZ_to_linear_sRGB_M); // XYZ D65 -> sRGBLinear\nsRGB.fromBase(in_linear_sRGB, out_sRGB); // linear to gamma transfer function\nsRGB.toBase(in_sRGB, out_linear_sRGB); // linear to gamma transfer function\n\n// OKHSL in a non-sRGB gamut\n// also see OKHSVToOKLab and their inverse functions\nOKHSLToOKLab([h, s, l], DisplayP3Gamut, optionalOutVec);\n```\n\n## Interpolation\n\nThe library currently only exposes `{ lerp, lerpAngle }` functions. To interpolate colors, you will need to build some additional logic, for example see the [example-interpolation.js](./test/example-interpolation.js) script which creates a color ramp in Canvas2D.\n\n## Custom Color Spaces\n\nYou can build custom color space objects to extend this library, such as adding support for CIELab and HSL. See [test/spaces/lab.js](./test/spaces/lab.js) and [test/spaces/hsl.js](./test/spaces/hsl.js) for examples of this. Some of these spaces may be added to the library at a later point, although the current focus is on \"modern\" spaces (such as OKLab that has largely made CIELab and HSL obsolete). Documentation on custom color spaces is WIP.\n\n## Notes\n\n### Why another library?\n\n[Colorjs](https://colorjs.io/) is fantastic and perhaps the current leading standard in JavaScript, but it's not very practical for creative coding and real-time web applications, where the requirements are often (1) leaner codebases, (2) highly optimized, and (3) minimal GC thrashing.\n\nColorjs, and similarly, [Culori](https://culorijs.org/), are focused on matching CSS spec, which means it will very likely continue to grow in complexity over time, and performance will often be marred (for example, `@texel/color` cusp intersection gamut mapping is ~125 times faster than Colorjs and ~60 times faster than culori).\n\nThere are many other options such as [color-space](https://www.npmjs.com/package/color-space) or [color-convert](https://www.npmjs.com/package/color-convert), however, these do not support modern spaces such as OKLab and OKHSL, and/or have dubious levels of accuracy (many libraries, for example, do not distinguish between D50 and D65 whitepoints in XYZ).\n\n### Supported Spaces\n\nThis library does not aim to target every color space; it only focuses on a limited \"modern\" set, i.e. OKLab, OKHSL and DeltaEOK have replaced CIELab, HSL, and CIEDE2000 for many practical purposes, allowing this library to be simpler and slimmer. Note that other spaces like CIELab and HSL are supported through 'custom color spaces'.\n\n### Improvements & Techniques\n\nThe module uses a few of the following practices for the significant optimization and bundle size improvements:\n\n- Loops, closures, destructuring, and other syntax sugars are replaced with more optimized code paths and plain array access.\n- Allocations in hot code paths have been removed, temporary arrays are re-used if needed.\n- Certain conversions, such as OKLab to sRGB, do not need to pass through XYZ first, and can be directly converted using a known matrix.\n- The API design is structured such that color spaces are generally not referenced internally, allowing them to be automatically tree-shaked.\n\n### Accuracy\n\nAll conversions have been tested to approximately equal Colorjs conversions, within a tolerance of 2<sup>-33</sup> (10 decimal places), in some cases it is more accurate than that.\n\nThis library uses [coloraide](https://github.com/facelessuser/coloraide) and its Python tools for computing conversion matrices and OKLab gamut approximations. Some matrices have been hard-coded into the script, and rational numbers are used where possible (as [suggested](https://github.com/w3c/csswg-drafts/pull/7320) by [CSS Color Module working draft spec](https://drafts.csswg.org/css-color-4/#color-conversion-code)).\n\nIf you think the matrices or accuracy could be improved, please open a PR.\n\n### Benchmarks\n\nThere are a few benchmarks inside [test](./test):\n\n- [bench-colorjs.js](./test/bench-colorjs.js) - run with `npm run bench` to compare against colorjs\n- [bench-culori.js](./test/bench-colorjs.js) - run with node to compare against [culori](https://culorijs.org/)\n- [bench-node.js](./test/bench-node.js) - run with `npm run bench:node` to get a node profile\n- [bench-size.js](./test/bench-size.js) - run with `npm run bench:size` to get a small bundle size with esbuild\n\nResults below, based on MacBook Air M2. Note that Colorjs performance depends on which API you use (the default class-based API is much slower than the procedural API).\n\n<details>\n  <summary>Benchmark Against Colorjs.io</summary>\n\n```\nconversion (Colorjs.io procedural API) --\nColorjs.io: 2955.88 ms\nOurs: 457.86 ms\nSpeedup: 6.5x faster\n\nconversion (Colorjs.io main API) --\nColorjs.io: 10034.38 ms\nOurs: 452.11 ms\nSpeedup: 22.2x faster\n\ngamut mapping OKLCH - sRGB (Colorjs.io procedural API) --\nColorjs.io: 5602.46 ms\nOurs: 49.10 ms\nSpeedup: 114.1x faster\n\ngamut mapping OKLCH - sRGB (Colorjs.io main API) --\nColorjs.io: 5913.80 ms\nOurs: 44.91 ms\nSpeedup: 131.7x faster\n\ngamut mapping all spaces to P3 (Colorjs.io procedural API) --\nColorjs.io: 4693.43 ms\nOurs: 150.16 ms\nSpeedup: 31.3x faster\n\ngamut mapping all spaces to P3 (Colorjs.io main API) --\nColorjs.io: 5478.16 ms\nOurs: 145.88 ms\nSpeedup: 37.6x faster\n```\n\n</details>\n\n<details>\n  <summary>Benchmark Against Culori</summary>\n\n```\nTesting with input type: Random Samling in OKLab L Planes\nConversion OKLCH to P3 --\nCulori: 43.30 ms\nOurs: 12.83 ms\nSpeedup: 3.4x faster\n\nGamut Mapping OKLCH to P3 Gamut --\nCulori: 1588.62 ms\nOurs: 23.05 ms\nSpeedup: 68.9x faster\n```\n\n</details>\n\n### Running Locally\n\nClone, `npm install`, then `npm run` to list the available scripts, or `npm t` to run the tests.\n\n## Attributions\n\nThis library was made possible due to the excellent prior work by many developers and engineers:\n\n- [Colorjs.io](https://colorjs.io)\n- [Coloraide](https://github.com/facelessuser/coloraide/)\n- [CSS Color Module Level 4 Spec](https://www.w3.org/TR/css-color-4/)\n\n## License\n\nMIT, see [LICENSE.md](https://github.com/texel-org/color/blob/main/LICENSE.md) for details.\n","readmeFilename":"README.md"}