colorsort-js 1.0.0

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.
Files changed (44) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +17 -0
  3. package/dist/colorsort.js +5412 -0
  4. package/dist/colorsort.js.map +1 -0
  5. package/dist/colorsort.umd.cjs +5 -0
  6. package/dist/colorsort.umd.cjs.map +1 -0
  7. package/dist/trained.json +1804 -0
  8. package/dist/types/src/auto-sort.d.ts +1 -0
  9. package/dist/types/src/auto.d.ts +6 -0
  10. package/dist/types/src/color.d.ts +42 -0
  11. package/dist/types/src/fft.d.ts +3 -0
  12. package/dist/types/src/genetic-algo.d.ts +63 -0
  13. package/dist/types/src/index.d.ts +23 -0
  14. package/dist/types/src/method-runner.d.ts +21 -0
  15. package/dist/types/src/metrics-extended.d.ts +27 -0
  16. package/dist/types/src/metrics-fft.d.ts +44 -0
  17. package/dist/types/src/metrics-hilbert.d.ts +9 -0
  18. package/dist/types/src/metrics-spectral-similarity.d.ts +21 -0
  19. package/dist/types/src/metrics-spectral.d.ts +55 -0
  20. package/dist/types/src/metrics.d.ts +8 -0
  21. package/dist/types/src/randomizer.d.ts +1 -0
  22. package/dist/types/src/resample.d.ts +6 -0
  23. package/dist/types/src/similarity.d.ts +8 -0
  24. package/dist/types/src/sorting-methods/clustering.d.ts +34 -0
  25. package/dist/types/src/sorting-methods/genetic.d.ts +3 -0
  26. package/dist/types/src/sorting-methods/graph.d.ts +14 -0
  27. package/dist/types/src/sorting-methods/harmonize.d.ts +22 -0
  28. package/dist/types/src/sorting-methods/hilbert.d.ts +14 -0
  29. package/dist/types/src/sorting-methods/index.d.ts +21 -0
  30. package/dist/types/src/sorting-methods/momentum.d.ts +12 -0
  31. package/dist/types/src/sorting-methods/principal.d.ts +9 -0
  32. package/dist/types/src/sorting-methods/radial.d.ts +17 -0
  33. package/dist/types/src/sorting-methods/ramp.d.ts +77 -0
  34. package/dist/types/src/sorting-methods/raw.d.ts +7 -0
  35. package/dist/types/src/sorting-methods/spectral.d.ts +26 -0
  36. package/dist/types/src/spectral-edit.d.ts +53 -0
  37. package/dist/types/src/statistics.d.ts +12 -0
  38. package/dist/types/src/type-detect.d.ts +16 -0
  39. package/dist/types/src/type-relative.d.ts +2 -0
  40. package/dist/types/src/type-variances.d.ts +19 -0
  41. package/dist/types/src/uni-neighbors.d.ts +6 -0
  42. package/dist/types/src/uni-tsp.d.ts +2 -0
  43. package/dist/types/src/vector.d.ts +15 -0
  44. package/package.json +61 -0
@@ -0,0 +1,53 @@
1
+ import { Vector3 } from './vector.ts';
2
+ export interface SpectralProcessingOptions {
3
+ eq?: {
4
+ lowGain: number;
5
+ midGain: number;
6
+ highGain: number;
7
+ };
8
+ dc?: number;
9
+ compression?: {
10
+ threshold: number;
11
+ ratio: number;
12
+ attack: number;
13
+ release: number;
14
+ };
15
+ exciter?: {
16
+ amount: number;
17
+ frequency: number;
18
+ };
19
+ phaseShift?: number;
20
+ reverb?: {
21
+ decay: number;
22
+ mix: number;
23
+ };
24
+ stereoWidth?: number;
25
+ distortion?: {
26
+ amount: number;
27
+ type: 'soft' | 'hard' | 'tube';
28
+ };
29
+ combFilter?: {
30
+ frequency: number;
31
+ feedback: number;
32
+ mix: number;
33
+ };
34
+ spectralBlur?: {
35
+ amount: number;
36
+ };
37
+ spectralGate?: {
38
+ threshold: number;
39
+ ratio: number;
40
+ };
41
+ partialExtraction?: {
42
+ fundamental: number;
43
+ harmonics: number;
44
+ bandwidth: number;
45
+ };
46
+ lightnessSmoothing?: number;
47
+ }
48
+ export declare function applySpectralProcessing(labColors: Vector3[], options?: SpectralProcessingOptions): {
49
+ colors: Vector3[];
50
+ resampled: Vector3[];
51
+ processed: Vector3[];
52
+ spectrum: any[][];
53
+ };
@@ -0,0 +1,12 @@
1
+ export declare function variance(arr: number[]): number;
2
+ export declare function mean(arr: number[]): number;
3
+ export declare function energy(magnitudes: number[]): number;
4
+ export declare function highFreqRatio(magnitudes: number[]): number;
5
+ export declare function round2(x: number): number;
6
+ export declare function round3(x: number): number;
7
+ export declare function round4(x: number): number;
8
+ /**
9
+ * Interpolate NaN values in a signal using surrounding valid values
10
+ * This prevents false discontinuities in FFT when achromatic colors produce NaN
11
+ */
12
+ export declare function interpolateNaNs(signal: number[]): number[];
@@ -0,0 +1,16 @@
1
+ import { TypeVariances } from './type-variances.ts';
2
+ import { Vector3 } from './vector.ts';
3
+ export type PaletteType = {
4
+ Kl: number;
5
+ Kc: number;
6
+ Kh: number;
7
+ type: string;
8
+ data: TypeVariances & {
9
+ lightnessRange: number;
10
+ chromaRange: number;
11
+ hueSpread: number;
12
+ };
13
+ };
14
+ export declare function detectPaletteType(lchColors: Vector3[]): PaletteType;
15
+ export declare function calculateHueSpread(hues: number[]): number;
16
+ export declare function lchColorsHueSpread(lchColors: Vector3[]): number;
@@ -0,0 +1,2 @@
1
+ import { Vector3 } from './vector.ts';
2
+ export declare function relativeDifference(palette: Vector3[]): number[];
@@ -0,0 +1,19 @@
1
+ import { Vector3 } from './vector.ts';
2
+ export type TypeVariances = {
3
+ L: number;
4
+ C: number;
5
+ H: number;
6
+ meanL: number;
7
+ meanC: number;
8
+ meanH: number;
9
+ };
10
+ export declare function calculateVariances(lchColors: Vector3[]): TypeVariances;
11
+ export declare function calculateAdaptiveWeights(variances: {
12
+ L: number;
13
+ C: number;
14
+ H: number;
15
+ }): {
16
+ Kl: number;
17
+ Kc: number;
18
+ Kh: number;
19
+ };
@@ -0,0 +1,6 @@
1
+ import { ColorHelper } from './method-runner.ts';
2
+ import { Vector3 } from './vector.ts';
3
+ export type ColorCompare = (a: Vector3, b: Vector3) => number;
4
+ export declare function closest(data: Vector3[], compareColors: ColorCompare): [Vector3, Vector3];
5
+ export declare function closestList(data: Vector3[], compareColors: ColorCompare): [Vector3, Vector3][];
6
+ export declare function inlinest(data: Vector3[], helper: ColorHelper): [Vector3, Vector3];
@@ -0,0 +1,2 @@
1
+ import { Distance } from './method-runner.ts';
2
+ export declare function tspVectors<T>(colors: T[], distance: Distance<T>): T[];
@@ -0,0 +1,15 @@
1
+ export type Vector3 = [number, number, number];
2
+ export type Vector4 = [number, number, number, number];
3
+ export declare function distance(a: Vector3, b: Vector3): number;
4
+ export declare function distance12(a: Vector3, b: Vector3): number;
5
+ export declare function distance4(a: Vector4, b: Vector4): number;
6
+ export declare function distanceRadial0(a: Vector3, b: Vector3): number;
7
+ export declare function distanceRadial2(a: Vector3, b: Vector3): number;
8
+ export declare function normalize(v: Vector3): Vector3;
9
+ export declare function subtract(a: Vector3, b: Vector3): Vector3;
10
+ export declare function add(a: Vector3, b: Vector3): Vector3;
11
+ export declare function dot(a: Vector3, b: Vector3): number;
12
+ export declare function centroid(colors: Vector3[]): Vector3;
13
+ export declare function compareColors(a: Vector3, b: Vector3): number;
14
+ export declare function compareColorsH(a: Vector3, b: Vector3): number;
15
+ export declare function compareColors210(a: Vector3, b: Vector3): number;
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "colorsort-js",
3
+ "description": "Various color sorting methods",
4
+ "version": "1.0.0",
5
+ "author": {
6
+ "name": "Jan Forst",
7
+ "email": "ensonador@gmail.com"
8
+ },
9
+ "bugs": "https://github.com/darosh/colorsort-js/issues",
10
+ "dependencies": {},
11
+ "devDependencies": {
12
+ "@types/chroma-js": "^3.1.2",
13
+ "@types/culori": "^4.0.1",
14
+ "@types/debug": "^4.1.12",
15
+ "@types/js-levenshtein": "^1.1.3",
16
+ "@types/node": "^25.0.3",
17
+ "chroma-js": "^3.2.0",
18
+ "colord": "2.9.3",
19
+ "colorgram": "^0.2.0",
20
+ "colorjs.io": "^0.6.0",
21
+ "commons-math-interpolation": "^2.2.4",
22
+ "culori": "^4.0.2",
23
+ "fft.js": "^4.0.4",
24
+ "js-levenshtein": "^1.1.6",
25
+ "ml-kmeans": "^7.0.0",
26
+ "poline": "^0.13.0"
27
+ },
28
+ "exports": {
29
+ ".": {
30
+ "types": "./dist/types/src/index.ts",
31
+ "import": "./dist/colorsort.js",
32
+ "require": "./dist/colorsort.umd.js"
33
+ },
34
+ "./trained.json": "./dist/trained.json"
35
+ },
36
+ "files": [
37
+ "dist/"
38
+ ],
39
+ "homepage": "https://github.com/darosh/colorsort-js",
40
+ "keywords": [
41
+ "color",
42
+ "sorting"
43
+ ],
44
+ "license": "MIT",
45
+ "main": "./dist/colorsort.js",
46
+ "private": false,
47
+ "repository": "https://github.com/darosh/colorsort-js.git",
48
+ "type": "module",
49
+ "types": "./dist/types/src/index.ts",
50
+ "scripts": {
51
+ "bench": "deno --allow-write scripts/bench.js",
52
+ "build": "tsc && vite build",
53
+ "postbuild": "cp ../colorsort-data-trained/dist/trained.json ./dist/trained.json",
54
+ "dev": "vite build --watch",
55
+ "lint": "tsc && oxlint ./src --fix && oxfmt ./src",
56
+ "range": "deno --allow-write scripts/range.js",
57
+ "test": "deno run -A npm:vitest run --bail=1",
58
+ "test:methods": "deno run -A npm:vitest run ./tests/methods.test.js",
59
+ "test:ramp": "deno run -A npm:vitest run ./tests/ramp.test.ts"
60
+ }
61
+ }