@livechart/sharp-vibrant 0.2.0 → 0.2.1

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 (88) hide show
  1. package/.eslintcache +1 -1
  2. package/.vscode/settings.json +1 -1
  3. package/lib/builder.js +31 -38
  4. package/lib/builder.js.map +1 -1
  5. package/lib/color.d.ts +1 -1
  6. package/lib/color.js +46 -51
  7. package/lib/color.js.map +1 -1
  8. package/lib/filter/default.js +1 -4
  9. package/lib/filter/default.js.map +1 -1
  10. package/lib/filter/index.js +2 -6
  11. package/lib/filter/index.js.map +1 -1
  12. package/lib/generator/default.js +12 -14
  13. package/lib/generator/default.js.map +1 -1
  14. package/lib/generator/index.js +2 -7
  15. package/lib/generator/index.js.map +1 -1
  16. package/lib/image/base.js +1 -3
  17. package/lib/image/base.js.map +1 -1
  18. package/lib/image/sharp.js +20 -27
  19. package/lib/image/sharp.js.map +1 -1
  20. package/lib/index.d.ts +1 -1
  21. package/lib/index.js +4 -8
  22. package/lib/index.js.map +1 -1
  23. package/lib/quantizer/index.js +2 -7
  24. package/lib/quantizer/index.js.map +1 -1
  25. package/lib/quantizer/mmcq.js +8 -13
  26. package/lib/quantizer/mmcq.js.map +1 -1
  27. package/lib/quantizer/pqueue.js +23 -27
  28. package/lib/quantizer/pqueue.js.map +1 -1
  29. package/lib/quantizer/vbox.js +51 -55
  30. package/lib/quantizer/vbox.js.map +1 -1
  31. package/lib/src/builder.d.ts +17 -0
  32. package/lib/src/builder.js +80 -0
  33. package/lib/src/builder.js.map +1 -0
  34. package/lib/src/color.d.ts +30 -0
  35. package/lib/src/color.js +81 -0
  36. package/lib/src/color.js.map +1 -0
  37. package/lib/src/filter/default.d.ts +1 -0
  38. package/lib/src/filter/default.js +7 -0
  39. package/lib/src/filter/default.js.map +1 -0
  40. package/lib/src/filter/index.d.ts +3 -0
  41. package/lib/src/filter/index.js +24 -0
  42. package/lib/src/filter/index.js.map +1 -0
  43. package/lib/src/generator/default.d.ts +20 -0
  44. package/lib/src/generator/default.js +143 -0
  45. package/lib/src/generator/default.js.map +1 -0
  46. package/lib/src/generator/index.d.ts +3 -0
  47. package/lib/src/generator/index.js +9 -0
  48. package/lib/src/generator/index.js.map +1 -0
  49. package/lib/src/image/base.d.ts +11 -0
  50. package/lib/src/image/base.js +29 -0
  51. package/lib/src/image/base.js.map +1 -0
  52. package/lib/src/image/sharp.d.ts +11 -0
  53. package/lib/src/image/sharp.js +81 -0
  54. package/lib/src/image/sharp.js.map +1 -0
  55. package/lib/src/index.d.ts +2 -0
  56. package/lib/src/index.js +9 -0
  57. package/lib/src/index.js.map +1 -0
  58. package/lib/src/quantizer/index.d.ts +2 -0
  59. package/lib/src/quantizer/index.js +8 -0
  60. package/lib/src/quantizer/index.js.map +1 -0
  61. package/lib/src/quantizer/mmcq.d.ts +3 -0
  62. package/lib/src/quantizer/mmcq.js +57 -0
  63. package/lib/src/quantizer/mmcq.js.map +1 -0
  64. package/lib/src/quantizer/pqueue.d.ts +14 -0
  65. package/lib/src/quantizer/pqueue.js +51 -0
  66. package/lib/src/quantizer/pqueue.js.map +1 -0
  67. package/lib/src/quantizer/vbox.d.ts +26 -0
  68. package/lib/src/quantizer/vbox.js +253 -0
  69. package/lib/src/quantizer/vbox.js.map +1 -0
  70. package/lib/src/typing.d.ts +57 -0
  71. package/lib/src/typing.js +3 -0
  72. package/lib/src/typing.js.map +1 -0
  73. package/lib/src/util.d.ts +31 -0
  74. package/lib/src/util.js +201 -0
  75. package/lib/src/util.js.map +1 -0
  76. package/lib/src/vibrant.d.ts +21 -0
  77. package/lib/src/vibrant.js +117 -0
  78. package/lib/src/vibrant.js.map +1 -0
  79. package/lib/typing.d.ts +5 -6
  80. package/lib/typing.js +1 -2
  81. package/lib/util.js +22 -37
  82. package/lib/util.js.map +1 -1
  83. package/lib/vibrant.js +31 -45
  84. package/lib/vibrant.js.map +1 -1
  85. package/package.json +8 -8
  86. package/src/index.ts +1 -1
  87. package/src/typing.ts +1 -1
  88. package/tsconfig.json +4 -14
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /* eslint-disable no-param-reassign */
4
+ const color_1 = require("../color");
5
+ const util_1 = require("../util");
6
+ const DefaultOpts = {
7
+ targetDarkLuma: 0.26,
8
+ maxDarkLuma: 0.45,
9
+ minLightLuma: 0.55,
10
+ targetLightLuma: 0.74,
11
+ minNormalLuma: 0.3,
12
+ targetNormalLuma: 0.5,
13
+ maxNormalLuma: 0.7,
14
+ targetMutesSaturation: 0.3,
15
+ maxMutesSaturation: 0.4,
16
+ targetVibrantSaturation: 1.0,
17
+ minVibrantSaturation: 0.35,
18
+ weightSaturation: 3,
19
+ weightLuma: 6.5,
20
+ weightPopulation: 0.5,
21
+ };
22
+ function findMaxPopulation(swatches) {
23
+ let p = 0;
24
+ swatches.forEach((s) => { p = Math.max(p, s.population); });
25
+ return p;
26
+ }
27
+ function isAlreadySelected(palette, s) {
28
+ return palette.Vibrant === s
29
+ || palette.DarkVibrant === s
30
+ || palette.LightVibrant === s
31
+ || palette.Muted === s
32
+ || palette.DarkMuted === s
33
+ || palette.LightMuted === s;
34
+ }
35
+ function createComparisonValue(saturation, targetSaturation, luma, targetLuma, population, maxPopulation, opts) {
36
+ function weightedMean(...values) {
37
+ let sum = 0;
38
+ let weightSum = 0;
39
+ for (let i = 0; i < values.length; i += 2) {
40
+ const value = values[i];
41
+ const weight = values[i + 1];
42
+ sum += value * weight;
43
+ weightSum += weight;
44
+ }
45
+ return sum / weightSum;
46
+ }
47
+ function invertDiff(value, targetValue) {
48
+ return 1 - Math.abs(value - targetValue);
49
+ }
50
+ return weightedMean(invertDiff(saturation, targetSaturation), opts.weightSaturation, invertDiff(luma, targetLuma), opts.weightLuma, population / maxPopulation, opts.weightPopulation);
51
+ }
52
+ function findColorVariation(palette, swatches, maxPopulation, targetLuma, minLuma, maxLuma, targetSaturation, minSaturation, maxSaturation, opts) {
53
+ let max = null;
54
+ let maxValue = 0;
55
+ swatches.forEach((swatch) => {
56
+ const [, s, l] = swatch.hsl;
57
+ if (s >= minSaturation && s <= maxSaturation
58
+ && l >= minLuma && l <= maxLuma
59
+ && !isAlreadySelected(palette, swatch)) {
60
+ const value = createComparisonValue(s, targetSaturation, l, targetLuma, swatch.population, maxPopulation, opts);
61
+ if (max === null || value > maxValue) {
62
+ max = swatch;
63
+ maxValue = value;
64
+ }
65
+ }
66
+ });
67
+ return max;
68
+ }
69
+ function generateVariationColors(swatches, maxPopulation, opts) {
70
+ const palette = {};
71
+ // mVibrantSwatch = findColor(TARGET_NORMAL_LUMA, MIN_NORMAL_LUMA, MAX_NORMAL_LUMA,
72
+ // TARGET_VIBRANT_SATURATION, MIN_VIBRANT_SATURATION, 1f);
73
+ palette.Vibrant = findColorVariation(palette, swatches, maxPopulation, opts.targetNormalLuma, opts.minNormalLuma, opts.maxNormalLuma, opts.targetVibrantSaturation, opts.minVibrantSaturation, 1, opts);
74
+ // mLightVibrantSwatch = findColor(TARGET_LIGHT_LUMA, MIN_LIGHT_LUMA, 1f,
75
+ // TARGET_VIBRANT_SATURATION, MIN_VIBRANT_SATURATION, 1f);
76
+ palette.LightVibrant = findColorVariation(palette, swatches, maxPopulation, opts.targetLightLuma, opts.minLightLuma, 1, opts.targetVibrantSaturation, opts.minVibrantSaturation, 1, opts);
77
+ // mDarkVibrantSwatch = findColor(TARGET_DARK_LUMA, 0f, MAX_DARK_LUMA,
78
+ // TARGET_VIBRANT_SATURATION, MIN_VIBRANT_SATURATION, 1f);
79
+ palette.DarkVibrant = findColorVariation(palette, swatches, maxPopulation, opts.targetDarkLuma, 0, opts.maxDarkLuma, opts.targetVibrantSaturation, opts.minVibrantSaturation, 1, opts);
80
+ // mMutedSwatch = findColor(TARGET_NORMAL_LUMA, MIN_NORMAL_LUMA, MAX_NORMAL_LUMA,
81
+ // TARGET_MUTED_SATURATION, 0f, MAX_MUTED_SATURATION);
82
+ palette.Muted = findColorVariation(palette, swatches, maxPopulation, opts.targetNormalLuma, opts.minNormalLuma, opts.maxNormalLuma, opts.targetMutesSaturation, 0, opts.maxMutesSaturation, opts);
83
+ // mLightMutedColor = findColor(TARGET_LIGHT_LUMA, MIN_LIGHT_LUMA, 1f,
84
+ // TARGET_MUTED_SATURATION, 0f, MAX_MUTED_SATURATION);
85
+ palette.LightMuted = findColorVariation(palette, swatches, maxPopulation, opts.targetLightLuma, opts.minLightLuma, 1, opts.targetMutesSaturation, 0, opts.maxMutesSaturation, opts);
86
+ // mDarkMutedSwatch = findColor(TARGET_DARK_LUMA, 0f, MAX_DARK_LUMA,
87
+ // TARGET_MUTED_SATURATION, 0f, MAX_MUTED_SATURATION);
88
+ palette.DarkMuted = findColorVariation(palette, swatches, maxPopulation, opts.targetDarkLuma, 0, opts.maxDarkLuma, opts.targetMutesSaturation, 0, opts.maxMutesSaturation, opts);
89
+ return palette;
90
+ }
91
+ function withLuminance(hsl, l) {
92
+ const [h, s] = hsl;
93
+ return [h, s, l];
94
+ }
95
+ function generateEmptySwatches(palette, maxPopulation, opts) {
96
+ if (palette.Vibrant === null && palette.DarkVibrant === null && palette.LightVibrant === null) {
97
+ if (palette.DarkVibrant === null && palette.DarkMuted !== null) {
98
+ const [h, s, l] = withLuminance(palette.DarkMuted.hsl, opts.targetDarkLuma);
99
+ palette.DarkVibrant = new color_1.Swatch((0, util_1.hslToRgb)(h, s, l), 0);
100
+ }
101
+ if (palette.LightVibrant === null && palette.LightMuted !== null) {
102
+ const [h, s, l] = withLuminance(palette.LightMuted.hsl, opts.targetDarkLuma);
103
+ palette.DarkVibrant = new color_1.Swatch((0, util_1.hslToRgb)(h, s, l), 0);
104
+ }
105
+ }
106
+ if (palette.Vibrant === null && palette.DarkVibrant !== null) {
107
+ const [h, s, l] = withLuminance(palette.DarkVibrant.hsl, opts.targetNormalLuma);
108
+ palette.Vibrant = new color_1.Swatch((0, util_1.hslToRgb)(h, s, l), 0);
109
+ }
110
+ else if (palette.Vibrant === null && palette.LightVibrant !== null) {
111
+ const [h, s, l] = withLuminance(palette.LightVibrant.hsl, opts.targetNormalLuma);
112
+ palette.Vibrant = new color_1.Swatch((0, util_1.hslToRgb)(h, s, l), 0);
113
+ }
114
+ if (palette.DarkVibrant === null && palette.Vibrant !== null) {
115
+ const [h, s, l] = withLuminance(palette.Vibrant.hsl, opts.targetDarkLuma);
116
+ palette.DarkVibrant = new color_1.Swatch((0, util_1.hslToRgb)(h, s, l), 0);
117
+ }
118
+ if (palette.LightVibrant === null && palette.Vibrant !== null) {
119
+ const [h, s, l] = withLuminance(palette.Vibrant.hsl, opts.targetLightLuma);
120
+ palette.LightVibrant = new color_1.Swatch((0, util_1.hslToRgb)(h, s, l), 0);
121
+ }
122
+ if (palette.Muted === null && palette.Vibrant !== null) {
123
+ const [h, s, l] = withLuminance(palette.Vibrant.hsl, opts.targetMutesSaturation);
124
+ palette.Muted = new color_1.Swatch((0, util_1.hslToRgb)(h, s, l), 0);
125
+ }
126
+ if (palette.DarkMuted === null && palette.DarkVibrant !== null) {
127
+ const [h, s, l] = withLuminance(palette.DarkVibrant.hsl, opts.targetMutesSaturation);
128
+ palette.DarkMuted = new color_1.Swatch((0, util_1.hslToRgb)(h, s, l), 0);
129
+ }
130
+ if (palette.LightMuted === null && palette.LightVibrant !== null) {
131
+ const [h, s, l] = withLuminance(palette.LightVibrant.hsl, opts.targetMutesSaturation);
132
+ palette.LightMuted = new color_1.Swatch((0, util_1.hslToRgb)(h, s, l), 0);
133
+ }
134
+ }
135
+ const DefaultGenerator = (swatches, opts) => {
136
+ const optsWithDefaults = Object.assign(Object.assign({}, DefaultOpts), opts);
137
+ const maxPopulation = findMaxPopulation(swatches);
138
+ const palette = generateVariationColors(swatches, maxPopulation, optsWithDefaults);
139
+ generateEmptySwatches(palette, maxPopulation, optsWithDefaults);
140
+ return palette;
141
+ };
142
+ exports.default = DefaultGenerator;
143
+ //# sourceMappingURL=default.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default.js","sourceRoot":"","sources":["../../../src/generator/default.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import Default from './default';
2
+ import type { Generator } from '../typing';
3
+ export { Generator, Default };
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Default = void 0;
7
+ const default_1 = __importDefault(require("./default"));
8
+ exports.Default = default_1.default;
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generator/index.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAgC;AAGZ,kBAHb,iBAAO,CAGa"}
@@ -0,0 +1,11 @@
1
+ import type { Filter, Image, ImageData, ImageSource, ComputedOptions } from '../typing';
2
+ declare abstract class ImageBase implements Image {
3
+ abstract load(image: ImageSource, opts: ComputedOptions): Promise<ImageBase>;
4
+ abstract readonly pixelCount: number;
5
+ abstract readonly imageData: ImageData;
6
+ abstract readonly width: number;
7
+ abstract readonly height: number;
8
+ abstract cleanup(): void;
9
+ applyFilter(filter: Filter): Promise<ImageData>;
10
+ }
11
+ export default ImageBase;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class ImageBase {
4
+ applyFilter(filter) {
5
+ const { imageData } = this;
6
+ if (typeof filter === 'function') {
7
+ const pixels = imageData.data;
8
+ const n = pixels.length / 4;
9
+ let offset;
10
+ let r;
11
+ let g;
12
+ let b;
13
+ let a;
14
+ for (let i = 0; i < n; i += 1) {
15
+ offset = i * 4;
16
+ r = pixels[offset + 0];
17
+ g = pixels[offset + 1];
18
+ b = pixels[offset + 2];
19
+ a = pixels[offset + 3];
20
+ // Mark ignored color
21
+ if (!filter(r, g, b, a))
22
+ pixels[offset + 3] = 0;
23
+ }
24
+ }
25
+ return Promise.resolve(imageData);
26
+ }
27
+ }
28
+ exports.default = ImageBase;
29
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/image/base.ts"],"names":[],"mappings":";;AAIA,MAAe,SAAS;IAatB,WAAW,CAAC,MAAc;QACxB,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QAE3B,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC;YAC9B,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAC5B,IAAI,MAAM,CAAC;YACX,IAAI,CAAC,CAAC;YACN,IAAI,CAAC,CAAC;YACN,IAAI,CAAC,CAAC;YACN,IAAI,CAAC,CAAC;YAEN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;gBACf,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACvB,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACvB,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACvB,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACvB,qBAAqB;gBACrB,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;CACF;AAED,kBAAe,SAAS,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { ImageData, ImageSource, ComputedOptions } from '../typing';
2
+ import ImageBase from './base';
3
+ export default class SharpImage extends ImageBase {
4
+ #private;
5
+ load(image: ImageSource, opts: ComputedOptions): Promise<ImageBase>;
6
+ get pixelCount(): number;
7
+ get imageData(): ImageData;
8
+ get width(): number;
9
+ get height(): number;
10
+ cleanup(): void;
11
+ }
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
12
+ if (kind === "m") throw new TypeError("Private method is not writable");
13
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
14
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
15
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
16
+ };
17
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
18
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
19
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
20
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
21
+ };
22
+ var __importDefault = (this && this.__importDefault) || function (mod) {
23
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
+ };
25
+ var _SharpImage_imageData;
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ const sharp_1 = __importDefault(require("sharp"));
28
+ const base_1 = __importDefault(require("./base"));
29
+ class SharpImage extends base_1.default {
30
+ constructor() {
31
+ super(...arguments);
32
+ _SharpImage_imageData.set(this, void 0);
33
+ }
34
+ load(image, opts) {
35
+ return __awaiter(this, void 0, void 0, function* () {
36
+ let sharpInstance;
37
+ // Check to see if image is a sharp instance.
38
+ // Because sharp doesn't return a class, there's not much else we can do to verify type.
39
+ if (typeof image === 'object' && 'resize' in image) {
40
+ sharpInstance = image;
41
+ }
42
+ else if (typeof image === 'string' || image instanceof Buffer) {
43
+ sharpInstance = (0, sharp_1.default)(image);
44
+ }
45
+ else {
46
+ return Promise.reject(new Error(`Cannot load image of type ${typeof image}`));
47
+ }
48
+ if (opts.maxDimension > 0) {
49
+ sharpInstance = sharpInstance.resize(opts.maxDimension, opts.maxDimension, {
50
+ fit: 'inside',
51
+ withoutEnlargement: true,
52
+ });
53
+ }
54
+ const buffer = yield sharpInstance.ensureAlpha().raw().toBuffer({ resolveWithObject: true });
55
+ __classPrivateFieldSet(this, _SharpImage_imageData, {
56
+ data: buffer.data,
57
+ width: buffer.info.width,
58
+ height: buffer.info.height,
59
+ }, "f");
60
+ return this;
61
+ });
62
+ }
63
+ get pixelCount() {
64
+ return this.imageData.width * this.imageData.height;
65
+ }
66
+ get imageData() {
67
+ return __classPrivateFieldGet(this, _SharpImage_imageData, "f");
68
+ }
69
+ get width() {
70
+ return this.imageData.width;
71
+ }
72
+ get height() {
73
+ return this.imageData.height;
74
+ }
75
+ // eslint-disable-next-line class-methods-use-this
76
+ cleanup() {
77
+ }
78
+ }
79
+ _SharpImage_imageData = new WeakMap();
80
+ exports.default = SharpImage;
81
+ //# sourceMappingURL=sharp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sharp.js","sourceRoot":"","sources":["../../../src/image/sharp.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA0B;AAG1B,kDAA+B;AAE/B,MAAqB,UAAW,SAAQ,cAAS;IAAjD;;QACE,wCAAuB;IAqDzB,CAAC;IAnDO,IAAI,CAAC,KAAkB,EAAE,IAAqB;;YAClD,IAAI,aAAoB,CAAC;YAEzB,6CAA6C;YAC7C,wFAAwF;YACxF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;gBACnD,aAAa,GAAmB,KAAK,CAAC;YACxC,CAAC;iBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,YAAY,MAAM,EAAE,CAAC;gBAChE,aAAa,GAAG,IAAA,eAAK,EAAC,KAAK,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC;YAChF,CAAC;YAED,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;gBAC1B,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;oBACzE,GAAG,EAAE,QAAQ;oBACb,kBAAkB,EAAE,IAAI;iBACzB,CAAC,CAAC;YACL,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;YAE7F,uBAAA,IAAI,yBAAc;gBAChB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;gBACxB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;aAC3B,MAAA,CAAC;YAEF,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IACtD,CAAC;IAED,IAAI,SAAS;QACX,OAAO,uBAAA,IAAI,6BAAY,CAAC;IAC1B,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;IAC9B,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED,kDAAkD;IAClD,OAAO;IAEP,CAAC;CACF;;kBAtDoB,UAAU"}
@@ -0,0 +1,2 @@
1
+ import Vibrant from './vibrant';
2
+ export = Vibrant;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ const vibrant_1 = __importDefault(require("./vibrant"));
6
+ const sharp_1 = __importDefault(require("./image/sharp"));
7
+ vibrant_1.default.DefaultOpts.ImageClass = sharp_1.default;
8
+ module.exports = vibrant_1.default;
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;AAAA,wDAAgC;AAChC,0DAAuC;AAEvC,iBAAO,CAAC,WAAW,CAAC,UAAU,GAAG,eAAU,CAAC;AAE5C,iBAAS,iBAAO,CAAC"}
@@ -0,0 +1,2 @@
1
+ import MMCQ from './mmcq';
2
+ export default MMCQ;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const mmcq_1 = __importDefault(require("./mmcq"));
7
+ exports.default = mmcq_1.default;
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/quantizer/index.ts"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAE1B,kBAAe,cAAI,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Quantizer } from '../typing';
2
+ declare const MMCQ: Quantizer;
3
+ export default MMCQ;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const color_1 = require("../color");
7
+ const vbox_1 = __importDefault(require("./vbox"));
8
+ const pqueue_1 = __importDefault(require("./pqueue"));
9
+ const fractByPopulations = 0.75;
10
+ function splitBoxes(pq, target) {
11
+ let lastSize = pq.size;
12
+ while (pq.size < target) {
13
+ const vbox = pq.pop();
14
+ if (!vbox || vbox.count < 1) {
15
+ break;
16
+ }
17
+ const [vbox1, vbox2] = vbox.split();
18
+ pq.push(vbox1);
19
+ if (vbox2 && vbox2.count > 0)
20
+ pq.push(vbox2);
21
+ // No more new boxes, converged
22
+ if (pq.size === lastSize) {
23
+ break;
24
+ }
25
+ else {
26
+ lastSize = pq.size;
27
+ }
28
+ }
29
+ }
30
+ function generateSwatches(pq) {
31
+ const swatches = [];
32
+ while (pq.size) {
33
+ const v = pq.pop();
34
+ const color = v.avg;
35
+ swatches.push(new color_1.Swatch(color, v.count));
36
+ }
37
+ return swatches;
38
+ }
39
+ const MMCQ = (pixels, opts) => {
40
+ if (pixels.length === 0 || opts.colorCount < 2 || opts.colorCount > 256) {
41
+ throw new Error('Wrong MMCQ parameters');
42
+ }
43
+ const vbox = vbox_1.default.build(pixels);
44
+ const pq = new pqueue_1.default((a, b) => a.count - b.count);
45
+ pq.push(vbox);
46
+ // first set of colors, sorted by population
47
+ splitBoxes(pq, fractByPopulations * opts.colorCount);
48
+ // Re-order
49
+ const pq2 = new pqueue_1.default((a, b) => a.count * a.volume - b.count * b.volume);
50
+ pq2.contents = pq.contents;
51
+ // next set - generate the median cuts using the (npix * vol) sorting.
52
+ splitBoxes(pq2, opts.colorCount - pq2.size);
53
+ // calculate the actual colors
54
+ return generateSwatches(pq2);
55
+ };
56
+ exports.default = MMCQ;
57
+ //# sourceMappingURL=mmcq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mmcq.js","sourceRoot":"","sources":["../../../src/quantizer/mmcq.ts"],"names":[],"mappings":";;;;;AAKA,oCAAkC;AAClC,kDAA0B;AAC1B,sDAA8B;AAE9B,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC,SAAS,UAAU,CAAC,EAAgB,EAAE,MAAc;IAClD,IAAI,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC;IAEvB,OAAO,EAAE,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;QAEtB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM;QACR,CAAC;QAED,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAEpC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACf,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC;YAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE7C,+BAA+B;QAC/B,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACzB,MAAM;QACR,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAgB;IACxC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;QACpB,QAAQ,CAAC,IAAI,CAAC,IAAI,cAAM,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,IAAI,GAAc,CAAC,MAAc,EAAE,IAAqB,EAAiB,EAAE;IAC/E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,IAAI,GAAG,cAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,EAAE,GAAG,IAAI,gBAAM,CAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAEzD,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,4CAA4C;IAC5C,UAAU,CAAC,EAAE,EAAE,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IAErD,WAAW;IACX,MAAM,GAAG,GAAG,IAAI,gBAAM,CAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAChF,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC;IAE3B,sEAAsE;IACtE,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;IAE5C,8BAA8B;IAC9B,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC,CAAC;AAEF,kBAAe,IAAI,CAAC"}
@@ -0,0 +1,14 @@
1
+ export interface PQueueComparator<T> {
2
+ (a: T, b: T): number;
3
+ }
4
+ export default class PQueue<T> {
5
+ #private;
6
+ contents: T[];
7
+ private sort;
8
+ constructor(comparator: PQueueComparator<T>);
9
+ push(item: T): void;
10
+ peek(index?: number): T;
11
+ pop(): T;
12
+ get size(): number;
13
+ map<U>(mapper: (item: T, index: number) => any): U[];
14
+ }
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
5
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
+ };
7
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
8
+ if (kind === "m") throw new TypeError("Private method is not writable");
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
11
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
12
+ };
13
+ var _PQueue_sorted, _PQueue_comparator;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ class PQueue {
16
+ sort() {
17
+ if (!__classPrivateFieldGet(this, _PQueue_sorted, "f")) {
18
+ this.contents.sort(__classPrivateFieldGet(this, _PQueue_comparator, "f"));
19
+ __classPrivateFieldSet(this, _PQueue_sorted, true, "f");
20
+ }
21
+ }
22
+ constructor(comparator) {
23
+ _PQueue_sorted.set(this, void 0);
24
+ _PQueue_comparator.set(this, void 0);
25
+ __classPrivateFieldSet(this, _PQueue_comparator, comparator, "f");
26
+ this.contents = [];
27
+ __classPrivateFieldSet(this, _PQueue_sorted, false, "f");
28
+ }
29
+ push(item) {
30
+ this.contents.push(item);
31
+ __classPrivateFieldSet(this, _PQueue_sorted, false, "f");
32
+ }
33
+ peek(index) {
34
+ this.sort();
35
+ return this.contents[typeof index === 'number' ? index : this.contents.length - 1];
36
+ }
37
+ pop() {
38
+ this.sort();
39
+ return this.contents.pop();
40
+ }
41
+ get size() {
42
+ return this.contents.length;
43
+ }
44
+ map(mapper) {
45
+ this.sort();
46
+ return this.contents.map(mapper);
47
+ }
48
+ }
49
+ _PQueue_sorted = new WeakMap(), _PQueue_comparator = new WeakMap();
50
+ exports.default = PQueue;
51
+ //# sourceMappingURL=pqueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pqueue.js","sourceRoot":"","sources":["../../../src/quantizer/pqueue.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAIA,MAAqB,MAAM;IAOjB,IAAI;QACV,IAAI,CAAC,uBAAA,IAAI,sBAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAA,IAAI,0BAAY,CAAC,CAAC;YACrC,uBAAA,IAAI,kBAAW,IAAI,MAAA,CAAC;QACtB,CAAC;IACH,CAAC;IAED,YAAY,UAA+B;QAX3C,iCAAiB;QAEjB,qCAAiC;QAU/B,uBAAA,IAAI,sBAAe,UAAU,MAAA,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,uBAAA,IAAI,kBAAW,KAAK,MAAA,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,IAAO;QACV,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,uBAAA,IAAI,kBAAW,KAAK,MAAA,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,KAAc;QACjB,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrF,CAAC;IAED,GAAG;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAG,CAAC;IAC9B,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,GAAG,CAAI,MAAuC;QAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;CACF;;kBA3CoB,MAAM"}
@@ -0,0 +1,26 @@
1
+ import type { Vec3 } from '../color';
2
+ import type { Pixels } from '../typing';
3
+ export interface Dimension {
4
+ r1: number;
5
+ r2: number;
6
+ g1: number;
7
+ g2: number;
8
+ b1: number;
9
+ b2: number;
10
+ [d: string]: number;
11
+ }
12
+ export default class VBox {
13
+ #private;
14
+ static build(pixels: Pixels): VBox;
15
+ dimension: Dimension;
16
+ hist: Uint32Array;
17
+ constructor(r1: number, r2: number, g1: number, g2: number, b1: number, b2: number, hist: Uint32Array);
18
+ invalidate(): void;
19
+ get volume(): number;
20
+ get count(): number;
21
+ clone(): VBox;
22
+ get avg(): Vec3;
23
+ contains(rgb: Vec3): boolean;
24
+ split(): VBox[];
25
+ private doCut;
26
+ }