@thi.ng/color-palettes 1.2.16 → 1.2.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Change Log
2
2
 
3
- - **Last updated**: 2023-12-09T19:12:03Z
3
+ - **Last updated**: 2023-12-11T10:07:09Z
4
4
  - **Generator**: [thi.ng/monopub](https://thi.ng/monopub)
5
5
 
6
6
  All notable changes to this project will be documented in this file.
package/api.js CHANGED
@@ -1 +0,0 @@
1
- export {};
package/binary.js CHANGED
@@ -1,6 +1,10 @@
1
- // thing:no-export
2
- // generated @ 20230425-163127 - DO NOT EDIT!
3
1
  import { BASE64 } from "@thi.ng/base-n/64";
4
- export const NUM_THEMES = 220;
5
- /** @internal */
6
- export const BINARY = BASE64.decodeBytes("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", new Uint8Array(NUM_THEMES * 18));
2
+ const NUM_THEMES = 220;
3
+ const BINARY = BASE64.decodeBytes(
4
+ "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",
5
+ new Uint8Array(NUM_THEMES * 18)
6
+ );
7
+ export {
8
+ BINARY,
9
+ NUM_THEMES
10
+ };
package/filter.js CHANGED
@@ -5,139 +5,52 @@ import { hue as $hue } from "@thi.ng/color/hue";
5
5
  import { lch } from "@thi.ng/color/lch/lch";
6
6
  import { luminance } from "@thi.ng/color/luminance";
7
7
  import { srgb } from "@thi.ng/color/srgb/srgb";
8
- /**
9
- * Higher order theme filter. Takes a predicate function which will be applied
10
- * to a single {@link ThemeColor}. Returns a new function which accepts a single
11
- * {@link Theme} and returns true iff the given predicate succeeds for at least
12
- * `threshold` colors in the theme (all colors by default).
13
- *
14
- * @param pred
15
- * @param threshold
16
- */
17
- export const defFilter = (pred, threshold) => (theme) => {
18
- const $thresh = threshold ?? theme.length;
19
- for (let i = theme.length, n = 0; i-- > 0;) {
20
- if (pred(theme[i])) {
21
- if (++n >= $thresh)
22
- return true;
23
- }
8
+ const defFilter = (pred, threshold) => (theme) => {
9
+ const $thresh = threshold ?? theme.length;
10
+ for (let i = theme.length, n = 0; i-- > 0; ) {
11
+ if (pred(theme[i])) {
12
+ if (++n >= $thresh)
13
+ return true;
24
14
  }
25
- return false;
15
+ }
16
+ return false;
26
17
  };
27
- /**
28
- * Higher order theme filter. Takes a number of theme predicate (e.g. those
29
- * provided by this package) and composes them into a new predicate function
30
- * which only succeeds if *all* given predicates pass.
31
- *
32
- * @example
33
- * ```ts
34
- * // pre-compose combined query filter
35
- * const pastels = compFilter(
36
- * // require all theme colors to have max 25% chroma
37
- * chroma(0, 0.25),
38
- * // require at least 3 theme colors to have min 50% luma
39
- * luma(0.5, 1, 3)
40
- * );
41
- *
42
- * [...cssThemes(pastels)]
43
- * // [
44
- * // [ '#453f38', '#746b5d', '#b39777', '#c1c2b2', '#e3dccf', '#f1ede7' ],
45
- * // [ '#857b84', '#b1a7b0', '#d0c7d0', '#e7e0e8', '#faeceb', '#e4e9fa' ]
46
- * // ]
47
- * ```
48
- *
49
- * @param filters
50
- = */
51
- export const compFilter = (...filters) => filters.length > 1
52
- ? (theme) => filters.every((f) => f(theme))
53
- : (theme) => filters[0](theme);
54
- /**
55
- * Theme predicate which ensures colors are within the given normalized hue
56
- * range ([0..1] interval). See {@link defFilter} for more details.
57
- *
58
- * @remarks
59
- * Since LCH uses different hue values than the more familiar HSV/HSL color
60
- * wheel, LCH colors too will be first converted to HSV to ensure uniform
61
- * results.
62
- *
63
- * If `max < min`, the filter will consider hues in both the `[min..1] and
64
- * [0..max]` intervals (i.e. angular wraparound on color wheel).
65
- *
66
- * @param min
67
- * @param max
68
- * @param threshold
69
- */
70
- export const hue = (min, max, threshold) => defFilter((col) => {
71
- let h = $hue(isPrimitive(col) ? hsv(col) : col);
72
- h = h - Math.floor(h);
73
- return min <= max ? h >= min && h <= max : h >= min || h <= max;
18
+ const compFilter = (...filters) => filters.length > 1 ? (theme) => filters.every((f) => f(theme)) : (theme) => filters[0](theme);
19
+ const hue = (min, max, threshold) => defFilter((col) => {
20
+ let h = $hue(isPrimitive(col) ? hsv(col) : col);
21
+ h = h - Math.floor(h);
22
+ return min <= max ? h >= min && h <= max : h >= min || h <= max;
74
23
  }, threshold);
75
- /**
76
- * Theme predicate which ensures colors are within the given normalized chroma
77
- * range ([0..1] interval). See {@link defFilter} for more details.
78
- *
79
- * @remarks
80
- * Internally converts colors to LCH (unless already the case).
81
- *
82
- * @param min
83
- * @param max
84
- * @param threshold
85
- */
86
- export const chroma = (min, max, threshold) => defFilter((col) => {
87
- const sat = __isLCH(col) ? col[1] : lch(col)[1];
88
- return sat >= min && sat <= max;
24
+ const chroma = (min, max, threshold) => defFilter((col) => {
25
+ const sat = __isLCH(col) ? col[1] : lch(col)[1];
26
+ return sat >= min && sat <= max;
89
27
  }, threshold);
90
- /**
91
- * Theme predicate which ensures colors are within the given normalized
92
- * luminance range ([0..1] interval). See {@link defFilter} for more details.
93
- *
94
- * @param min
95
- * @param max
96
- * @param threshold
97
- */
98
- export const luma = (min, max, threshold) => defFilter((col) => {
99
- const l = luminance(col);
100
- return l >= min && l <= max;
28
+ const luma = (min, max, threshold) => defFilter((col) => {
29
+ const l = luminance(col);
30
+ return l >= min && l <= max;
101
31
  }, threshold);
102
- /**
103
- * Theme predicate which ensures colors are within the given normalized distance
104
- * in LCH space.
105
- *
106
- * @remarks
107
- * Internally converts colors to LCH (unless already the case).
108
- *
109
- * See {@link defFilter} &
110
- * [`distLch()`](https://docs.thi.ng/umbrella/color/functions/distLch.html) for
111
- * more details.
112
- *
113
- * @param min
114
- * @param max
115
- * @param threshold
116
- */
117
- export const proximityLCH = (color, eps, threshold) => {
118
- const $color = __isLCH(color) ? color : lch(color);
119
- return defFilter((x) => distLch($color, __isLCH(x) ? x : lch(x)) < eps, threshold);
32
+ const proximityLCH = (color, eps, threshold) => {
33
+ const $color = __isLCH(color) ? color : lch(color);
34
+ return defFilter(
35
+ (x) => distLch($color, __isLCH(x) ? x : lch(x)) < eps,
36
+ threshold
37
+ );
120
38
  };
121
- /**
122
- * Theme predicate which ensures colors are within the given normalized distance
123
- * in RGB space.
124
- *
125
- * @remarks
126
- * Internally converts colors to sRGB (unless already the case).
127
- *
128
- * See {@link defFilter} &
129
- * [`distEucledian3()`](https://docs.thi.ng/umbrella/color/functions/distEucledian3.html)
130
- * for more details.
131
- *
132
- * @param min
133
- * @param max
134
- * @param threshold
135
- */
136
- export const proximityRGB = (color, eps, threshold) => {
137
- const $color = __isRGB(color) ? color : srgb(color);
138
- return defFilter((x) => distEucledian3($color, __isRGB(x) ? x : srgb(x)) < eps, threshold);
39
+ const proximityRGB = (color, eps, threshold) => {
40
+ const $color = __isRGB(color) ? color : srgb(color);
41
+ return defFilter(
42
+ (x) => distEucledian3($color, __isRGB(x) ? x : srgb(x)) < eps,
43
+ threshold
44
+ );
139
45
  };
140
- /** @internal */
141
46
  const __isLCH = (x) => !isPrimitive(x) && x.mode === "lch";
142
- /** @internal */
143
47
  const __isRGB = (x) => !isPrimitive(x) && x.mode === "srgb";
48
+ export {
49
+ chroma,
50
+ compFilter,
51
+ defFilter,
52
+ hue,
53
+ luma,
54
+ proximityLCH,
55
+ proximityRGB
56
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thi.ng/color-palettes",
3
- "version": "1.2.16",
3
+ "version": "1.2.17",
4
4
  "description": "Collection of 200+ image based color themes & composable theme query filters",
5
5
  "type": "module",
6
6
  "module": "./index.js",
@@ -24,26 +24,29 @@
24
24
  "author": "Karsten Schmidt (https://thi.ng)",
25
25
  "license": "Apache-2.0",
26
26
  "scripts": {
27
- "build": "yarn clean && tsc --declaration",
27
+ "build": "yarn build:esbuild && yarn build:decl",
28
+ "build:binary": "tools:node-esm tools/encode.ts",
29
+ "build:decl": "tsc --declaration --emitDeclarationOnly",
30
+ "build:esbuild": "esbuild --format=esm --platform=neutral --target=es2022 --tsconfig=tsconfig.json --outdir=. src/**/*.ts",
28
31
  "clean": "rimraf --glob '*.js' '*.d.ts' '*.map' doc",
29
32
  "doc": "typedoc --excludePrivate --excludeInternal --out doc src/index.ts",
30
33
  "doc:ae": "mkdir -p .ae/doc .ae/temp && api-extractor run --local --verbose",
31
34
  "doc:readme": "bun ../../tools/src/module-stats.ts && bun ../../tools/src/readme.ts",
32
35
  "pub": "yarn npm publish --access public",
33
36
  "test": "bun test",
34
- "build:binary": "tools:node-esm tools/encode.ts",
35
37
  "tool:swatches": "tools:node-esm tools/swatches.ts"
36
38
  },
37
39
  "dependencies": {
38
- "@thi.ng/api": "^8.9.11",
39
- "@thi.ng/base-n": "^2.5.19",
40
- "@thi.ng/checks": "^3.4.11",
41
- "@thi.ng/color": "^5.6.3",
42
- "@thi.ng/errors": "^2.4.5",
43
- "@thi.ng/hex": "^2.3.23"
40
+ "@thi.ng/api": "^8.9.12",
41
+ "@thi.ng/base-n": "^2.5.20",
42
+ "@thi.ng/checks": "^3.4.12",
43
+ "@thi.ng/color": "^5.6.4",
44
+ "@thi.ng/errors": "^2.4.6",
45
+ "@thi.ng/hex": "^2.3.24"
44
46
  },
45
47
  "devDependencies": {
46
48
  "@microsoft/api-extractor": "^7.38.3",
49
+ "esbuild": "^0.19.8",
47
50
  "rimraf": "^5.0.5",
48
51
  "tools": "^0.0.1",
49
52
  "typedoc": "^0.25.4",
@@ -88,5 +91,5 @@
88
91
  "parent": "@thi.ng/color",
89
92
  "year": 2021
90
93
  },
91
- "gitHead": "25f2ac8ff795a432a930119661b364d4d93b59a0\n"
94
+ "gitHead": "5e7bafedfc3d53bc131469a28de31dd8e5b4a3ff\n"
92
95
  }
package/theme.js CHANGED
@@ -4,116 +4,73 @@ import { assert } from "@thi.ng/errors/assert";
4
4
  import { U24 } from "@thi.ng/hex";
5
5
  import { BINARY, NUM_THEMES } from "./binary.js";
6
6
  import { compFilter } from "./filter.js";
7
- /**
8
- * Returns theme for given ID as CSS hex colors. If `reverse` is true (default:
9
- * false), the theme colors will be returned in reverse order.
10
- *
11
- * @param id
12
- * @param reverse
13
- */
14
- export const asCSS = (id, reverse = false) => {
15
- __ensureID(id);
16
- const theme = [];
17
- // (<any>theme).__id = id;
18
- id *= 18;
19
- for (let i = 0; i < 6; i++, id += 3) {
20
- theme.push("#" +
21
- U24((BINARY[id] << 16) | (BINARY[id + 1] << 8) | BINARY[id + 2]));
22
- }
23
- return reverse ? theme.reverse() : theme;
7
+ const asCSS = (id, reverse = false) => {
8
+ __ensureID(id);
9
+ const theme = [];
10
+ id *= 18;
11
+ for (let i = 0; i < 6; i++, id += 3) {
12
+ theme.push(
13
+ "#" + U24(BINARY[id] << 16 | BINARY[id + 1] << 8 | BINARY[id + 2])
14
+ );
15
+ }
16
+ return reverse ? theme.reverse() : theme;
24
17
  };
25
- /**
26
- * Returns theme for given ID as packed ARGB integers (alpha channel will always
27
- * be set to 0xff). If `reverse` is true (default: false), the theme colors will
28
- * be returned in reverse order.
29
- *
30
- * @param id
31
- * @param reverse
32
- */
33
- export const asInt = (id, reverse = false) => {
34
- __ensureID(id);
35
- const theme = [];
36
- id *= 18;
37
- for (let i = 0; i < 6; i++, id += 3) {
38
- theme.push((0xff000000 |
39
- (BINARY[id] << 16) |
40
- (BINARY[id + 1] << 8) |
41
- BINARY[id + 2]) >>>
42
- 0);
43
- }
44
- return reverse ? theme.reverse() : theme;
18
+ const asInt = (id, reverse = false) => {
19
+ __ensureID(id);
20
+ const theme = [];
21
+ id *= 18;
22
+ for (let i = 0; i < 6; i++, id += 3) {
23
+ theme.push(
24
+ (4278190080 | BINARY[id] << 16 | BINARY[id + 1] << 8 | BINARY[id + 2]) >>> 0
25
+ );
26
+ }
27
+ return reverse ? theme.reverse() : theme;
45
28
  };
46
- /**
47
- * Returns theme for given ID as thi.ng/color LCH color vectors. If `reverse` is
48
- * true (default: false), the theme colors will be returned in reverse order.
49
- *
50
- * @param id
51
- * @param reverse
52
- */
53
- export const asLCH = (id, reverse = false) => asRGB(id, reverse).map((x) => lch(x));
54
- /**
55
- * Returns theme for given ID as thi.ng/color sRGB color vectors. If `reverse`
56
- * is true (default: false), the theme colors will be returned in reverse order.
57
- *
58
- * @param id
59
- * @param reverse
60
- */
61
- export const asRGB = (id, reverse = false) => {
62
- __ensureID(id);
63
- const theme = [];
64
- // (<any>theme).__id = id;
65
- id *= 18;
66
- for (let i = 0; i < 6; i++, id += 3) {
67
- theme.push(srgb(BINARY[id] / 255, BINARY[id + 1] / 255, BINARY[id + 2] / 255, 1));
68
- }
69
- return reverse ? theme.reverse() : theme;
29
+ const asLCH = (id, reverse = false) => asRGB(id, reverse).map((x) => lch(x));
30
+ const asRGB = (id, reverse = false) => {
31
+ __ensureID(id);
32
+ const theme = [];
33
+ id *= 18;
34
+ for (let i = 0; i < 6; i++, id += 3) {
35
+ theme.push(
36
+ srgb(
37
+ BINARY[id] / 255,
38
+ BINARY[id + 1] / 255,
39
+ BINARY[id + 2] / 255,
40
+ 1
41
+ )
42
+ );
43
+ }
44
+ return reverse ? theme.reverse() : theme;
70
45
  };
71
- /**
72
- * Yields iterator of CSS themes (via {@link asCSS}). Yields all
73
- * themes unless specific theme IDs or filter predicates are provided.
74
- *
75
- * @param preds
76
- */
77
- export const cssThemes = (...preds) => __themes(asCSS, preds);
78
- /**
79
- * Yields iterator of packed ARGB integer themes (via {@link asInt}). Yields all
80
- * themes unless specific theme IDs or filter predicates are provided.
81
- *
82
- * @param preds
83
- */
84
- export const intThemes = (...preds) => __themes(asInt, preds);
85
- /**
86
- * Yields iterator of LCH themes (via {@link asLCH}). Yields all
87
- * themes unless specific theme IDs or filter predicates are provided.
88
- *
89
- * @param preds
90
- */
91
- export const lchThemes = (...preds) => __themes(asLCH, preds);
92
- /**
93
- * Yields iterator of RGB themes (via {@link asRGB}). Yields all
94
- * themes unless specific theme IDs or filter predicates are provided.
95
- *
96
- * @param preds
97
- */
98
- export const rgbThemes = (...preds) => __themes(asRGB, preds);
99
- /** @internal */
46
+ const cssThemes = (...preds) => __themes(asCSS, preds);
47
+ const intThemes = (...preds) => __themes(asInt, preds);
48
+ const lchThemes = (...preds) => __themes(asLCH, preds);
49
+ const rgbThemes = (...preds) => __themes(asRGB, preds);
100
50
  function* __themes(fn, preds) {
101
- if (preds.length && typeof preds[0] === "function") {
102
- const pred = compFilter(...preds);
103
- for (let i = 0; i < NUM_THEMES; i++) {
104
- const theme = fn(i);
105
- if (pred(theme))
106
- yield theme;
107
- }
108
- }
109
- else if (preds.length) {
110
- for (let id of preds)
111
- yield fn(id);
112
- }
113
- else {
114
- for (let i = 0; i < NUM_THEMES; i++)
115
- yield fn(i);
51
+ if (preds.length && typeof preds[0] === "function") {
52
+ const pred = compFilter(...preds);
53
+ for (let i = 0; i < NUM_THEMES; i++) {
54
+ const theme = fn(i);
55
+ if (pred(theme))
56
+ yield theme;
116
57
  }
58
+ } else if (preds.length) {
59
+ for (let id of preds)
60
+ yield fn(id);
61
+ } else {
62
+ for (let i = 0; i < NUM_THEMES; i++)
63
+ yield fn(i);
64
+ }
117
65
  }
118
- /** @internal */
119
66
  const __ensureID = (id) => assert(id >= 0 && id < NUM_THEMES, `invalid theme ID`);
67
+ export {
68
+ asCSS,
69
+ asInt,
70
+ asLCH,
71
+ asRGB,
72
+ cssThemes,
73
+ intThemes,
74
+ lchThemes,
75
+ rgbThemes
76
+ };