diff --git a/.gitignore b/.gitignore index 1517c94..42eb368 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ -.direnv +.direnv/ +dist/ +node_modules/ # nixago: ignore-linked-files /treefmt.toml diff --git a/Justfile b/Justfile new file mode 100644 index 0000000..bd857bf --- /dev/null +++ b/Justfile @@ -0,0 +1,15 @@ +@default: + just --choose + +format: + treefmt + just --fmt --unstable + +build: generate-colors generate-theme + +generate-colors: format + node src/generate.mjs + +generate-theme: format + mkdir -p dist + cp src/theme.css dist/ diff --git a/flake.nix b/flake.nix index bcb993d..70495e2 100644 --- a/flake.nix +++ b/flake.nix @@ -29,7 +29,8 @@ # Shell default = pkgs.mkShell { packages = [ - pkgs.deno + pkgs.just + pkgs.nodejs_20 ] ++ project-config.packages; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..e430212 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,30 @@ +{ + "name": "@priduck-color-theme/base", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@priduck-color-theme/base", + "version": "0.0.0", + "license": "MIT", + "dependencies": { + "mkdirp": "^3.0.1" + } + }, + "node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..76db3bc --- /dev/null +++ b/package.json @@ -0,0 +1,22 @@ +{ + "name": "@priduck-color-theme/base", + "version": "0.0.0", + "description": "A color-theme based on a single hue in the LCH colorspace.", + "main": "dist/index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://src.mfgames.com/priduck-color-theme/priduck-color-theme-base-css.git" + }, + "keywords": [ + "css", + "color" + ], + "author": "D. Moonfire", + "license": "MIT", + "dependencies": { + "mkdirp": "^3.0.1" + } +} diff --git a/src/cli.ts b/src/generate.mjs similarity index 55% rename from src/cli.ts rename to src/generate.mjs index ddfe1e2..2f26e49 100644 --- a/src/cli.ts +++ b/src/generate.mjs @@ -1,8 +1,18 @@ -// We need an empty export for top-level await. -export {}; +import { mkdirp } from "mkdirp"; +import { fileURLToPath } from "url"; +import path from "path"; +import fs from "node:fs/promises"; + +// Figure out where we need to write the files. +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const distPath = __dirname + "/../dist"; + +console.log("writing", distPath); + +await mkdirp(distPath); // Start with the basic CSS header. -let lines: string[] = [":root {"]; +let lines = [":root {"]; // We have ten colors, with 0 being the base hue and the others being evenly // rotated around the color wheel. @@ -14,7 +24,7 @@ for (let color = 0; color < 10; color++) { // to very light. for (let brightness = 0; brightness < 10; brightness++) { // We use a standard code (--color-cXbY) for our codes. - const code = `--color-c${color}b${brightness}`; + const code = `--color-priduck-c${color}b${brightness}`; // Figure out the ramps we are using for brighteness. const l = brightness * 11; @@ -24,7 +34,7 @@ for (let color = 0; color < 10; color++) { lines.push( ` ${code}: lch(${l.toFixed(1)} ${s.toFixed( 1, - )} calc(var(--color-hue) + ${rotation}));`, + )} calc(var(--color-priduck-hue) + ${rotation}));`, ); } } @@ -33,6 +43,8 @@ for (let color = 0; color < 10; color++) { lines.push("}"); // Write out the files. -const text = new TextEncoder().encode(lines.join("\n")); +const colorsPath = path.join(distPath, "colors.css"); -await Deno.writeFile("src/colors.css", text, { mode: 0o644 }); +await fs.writeFile(colorsPath, Buffer.from(lines.join("\n"))); + +console.log("wrote", colorsPath);