@xivdyetools/core 1.6.0 → 1.8.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 (37) hide show
  1. package/README.md +17 -2
  2. package/dist/data/character_colors.json +1 -0
  3. package/dist/data/locales/de.json +1 -1
  4. package/dist/data/locales/en.json +1 -1
  5. package/dist/data/locales/fr.json +1 -1
  6. package/dist/data/locales/ja.json +1 -1
  7. package/dist/index.d.ts +6 -2
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +5 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/services/CharacterColorService.d.ts +125 -0
  12. package/dist/services/CharacterColorService.d.ts.map +1 -0
  13. package/dist/services/CharacterColorService.js +223 -0
  14. package/dist/services/CharacterColorService.js.map +1 -0
  15. package/dist/services/DyeService.d.ts +30 -9
  16. package/dist/services/DyeService.d.ts.map +1 -1
  17. package/dist/services/DyeService.js +38 -18
  18. package/dist/services/DyeService.js.map +1 -1
  19. package/dist/services/color/ColorConverter.d.ts +74 -1
  20. package/dist/services/color/ColorConverter.d.ts.map +1 -1
  21. package/dist/services/color/ColorConverter.js +212 -0
  22. package/dist/services/color/ColorConverter.js.map +1 -1
  23. package/dist/services/dye/DyeDatabase.d.ts +5 -2
  24. package/dist/services/dye/DyeDatabase.d.ts.map +1 -1
  25. package/dist/services/dye/DyeDatabase.js +21 -1
  26. package/dist/services/dye/DyeDatabase.js.map +1 -1
  27. package/dist/services/dye/HarmonyGenerator.d.ts +82 -11
  28. package/dist/services/dye/HarmonyGenerator.d.ts.map +1 -1
  29. package/dist/services/dye/HarmonyGenerator.js +130 -21
  30. package/dist/services/dye/HarmonyGenerator.js.map +1 -1
  31. package/dist/types/index.d.ts +6 -1
  32. package/dist/types/index.d.ts.map +1 -1
  33. package/dist/types/index.js +1 -0
  34. package/dist/types/index.js.map +1 -1
  35. package/dist/version.d.ts +1 -1
  36. package/dist/version.js +1 -1
  37. package/package.json +2 -2
@@ -4,8 +4,43 @@
4
4
  * Handles triadic, analogous, complementary, and other harmony schemes
5
5
  */
6
6
  import type { Dye } from '../../types/index.js';
7
+ import { type DeltaEFormula } from '../color/ColorConverter.js';
7
8
  import type { DyeDatabase } from './DyeDatabase.js';
8
9
  import type { DyeSearch } from './DyeSearch.js';
10
+ /**
11
+ * Algorithm used for finding matching dyes in harmony calculations
12
+ * - 'hue': Current algorithm - matches based on hue angle offsets (fast, hue-bucket indexed)
13
+ * - 'deltaE': DeltaE-based matching - matches based on perceptual color difference
14
+ */
15
+ export type HarmonyMatchingAlgorithm = 'hue' | 'deltaE';
16
+ /**
17
+ * Options for harmony generation methods
18
+ */
19
+ export interface HarmonyOptions {
20
+ /**
21
+ * Algorithm for finding matching dyes
22
+ * @default 'hue'
23
+ */
24
+ algorithm?: HarmonyMatchingAlgorithm;
25
+ /**
26
+ * DeltaE formula (only used when algorithm is 'deltaE')
27
+ * @default 'cie76'
28
+ */
29
+ deltaEFormula?: DeltaEFormula;
30
+ /**
31
+ * Tolerance for hue-based matching (degrees, 0-180)
32
+ * Only used when algorithm is 'hue'
33
+ * @default 45
34
+ */
35
+ hueTolerance?: number;
36
+ /**
37
+ * Maximum DeltaE distance for matching
38
+ * Only used when algorithm is 'deltaE'
39
+ * Higher values return more matches but less precise
40
+ * @default 40 (for cie76), 25 (for cie2000)
41
+ */
42
+ deltaETolerance?: number;
43
+ }
9
44
  /**
10
45
  * Color harmony generator
11
46
  * Per R-4: Single Responsibility - harmony generation only
@@ -17,8 +52,10 @@ export declare class HarmonyGenerator {
17
52
  /**
18
53
  * Find dyes that form a complementary color pair
19
54
  * Excludes Facewear dyes (generic names like "Red", "Blue")
55
+ * @param hex Base hex color
56
+ * @param options Matching algorithm options
20
57
  */
21
- findComplementaryPair(hex: string): Dye | null;
58
+ findComplementaryPair(hex: string, options?: HarmonyOptions): Dye | null;
22
59
  /**
23
60
  * Find the closest dye that is not Facewear
24
61
  *
@@ -31,61 +68,87 @@ export declare class HarmonyGenerator {
31
68
  * Find analogous dyes (adjacent on color wheel)
32
69
  * Returns dyes at ±angle degrees from the base color
33
70
  *
71
+ * @param hex Base hex color
72
+ * @param angle Hue offset in degrees (default: 30)
73
+ * @param options Matching algorithm options
74
+ *
34
75
  * @remarks
35
76
  * May return fewer dyes than expected if no suitable matches exist
36
77
  * at the target hue positions or if all candidates are excluded.
37
78
  */
38
- findAnalogousDyes(hex: string, angle?: number): Dye[];
79
+ findAnalogousDyes(hex: string, angle?: number, options?: HarmonyOptions): Dye[];
39
80
  /**
40
81
  * Find triadic color scheme (colors 120° apart on color wheel)
41
82
  *
83
+ * @param hex Base hex color
84
+ * @param options Matching algorithm options
85
+ *
42
86
  * @remarks
43
87
  * May return 0, 1, or 2 dyes depending on available matches.
44
88
  * Use the length of the returned array to determine actual results.
45
89
  */
46
- findTriadicDyes(hex: string): Dye[];
90
+ findTriadicDyes(hex: string, options?: HarmonyOptions): Dye[];
47
91
  /**
48
92
  * Find square color scheme (colors 90° apart on color wheel)
49
93
  *
94
+ * @param hex Base hex color
95
+ * @param options Matching algorithm options
96
+ *
50
97
  * @remarks
51
98
  * May return fewer than 3 dyes if suitable matches are not found.
52
99
  */
53
- findSquareDyes(hex: string): Dye[];
100
+ findSquareDyes(hex: string, options?: HarmonyOptions): Dye[];
54
101
  /**
55
102
  * Find tetradic color scheme (two complementary pairs)
56
103
  *
104
+ * @param hex Base hex color
105
+ * @param options Matching algorithm options
106
+ *
57
107
  * @remarks
58
108
  * May return fewer than 3 dyes if suitable matches are not found.
59
109
  */
60
- findTetradicDyes(hex: string): Dye[];
110
+ findTetradicDyes(hex: string, options?: HarmonyOptions): Dye[];
61
111
  /**
62
112
  * Find monochromatic dyes (same hue, varying saturation/brightness)
63
113
  * Excludes Facewear dyes (generic names like "Red", "Blue")
114
+ *
115
+ * @param hex Base hex color
116
+ * @param limit Maximum number of dyes to return (default: 6)
117
+ * @param options Matching algorithm options
64
118
  */
65
- findMonochromaticDyes(hex: string, limit?: number): Dye[];
119
+ findMonochromaticDyes(hex: string, limit?: number, options?: HarmonyOptions): Dye[];
66
120
  /**
67
121
  * Find compound harmony (analogous + complementary)
68
122
  *
123
+ * @param hex Base hex color
124
+ * @param options Matching algorithm options
125
+ *
69
126
  * @remarks
70
127
  * May return fewer than 3 dyes if suitable matches are not found.
71
128
  */
72
- findCompoundDyes(hex: string): Dye[];
129
+ findCompoundDyes(hex: string, options?: HarmonyOptions): Dye[];
73
130
  /**
74
131
  * Find split-complementary harmony (±30° from the complementary hue)
75
132
  *
133
+ * @param hex Base hex color
134
+ * @param options Matching algorithm options
135
+ *
76
136
  * @remarks
77
137
  * May return 0, 1, or 2 dyes depending on available matches.
78
138
  */
79
- findSplitComplementaryDyes(hex: string): Dye[];
139
+ findSplitComplementaryDyes(hex: string, options?: HarmonyOptions): Dye[];
80
140
  /**
81
141
  * Find shades (similar tones, ±15°)
82
142
  *
143
+ * @param hex Base hex color
144
+ * @param options Matching algorithm options
145
+ *
83
146
  * @remarks
84
147
  * May return 0, 1, or 2 dyes depending on available matches.
85
148
  */
86
- findShadesDyes(hex: string): Dye[];
149
+ findShadesDyes(hex: string, options?: HarmonyOptions): Dye[];
87
150
  /**
88
- * Generic helper for hue-based harmonies
151
+ * Generic helper for hue-based and DeltaE-based harmonies
89
152
  *
90
153
  * @remarks
91
154
  * This method may return fewer dyes than the number of offsets provided.
@@ -99,10 +162,18 @@ export declare class HarmonyGenerator {
99
162
  *
100
163
  * @param hex - Base hex color
101
164
  * @param offsets - Array of hue offsets in degrees
102
- * @param options - Options including tolerance (default: 45°)
165
+ * @param internalOptions - Internal options (tolerance for hue-based matching)
166
+ * @param harmonyOptions - User-provided harmony options
103
167
  * @returns Array of matched dyes (may be shorter than offsets array)
104
168
  */
105
169
  private findHarmonyDyesByOffsets;
170
+ /**
171
+ * Find closest dye using DeltaE color difference
172
+ * @param targetHex - Target color in hex format
173
+ * @param excludeIds - Dye IDs to exclude from results
174
+ * @param options - DeltaE options (formula, tolerance)
175
+ */
176
+ private findClosestByDeltaE;
106
177
  /**
107
178
  * Find closest dye by hue difference with graceful fallback
108
179
  * Per P-2: Uses hue-indexed map for 70-90% speedup
@@ -1 +1 @@
1
- {"version":3,"file":"HarmonyGenerator.d.ts","sourceRoot":"","sources":["../../../src/services/dye/HarmonyGenerator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;GAGG;AACH,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;gBADN,QAAQ,EAAE,WAAW,EACrB,MAAM,EAAE,SAAS;IAG3B;;;OAGG;IACH,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;IAa9C;;;;;;OAMG;IACH,OAAO,CAAC,yBAAyB;IAKjC;;;;;;;OAOG;IACH,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,GAAG,EAAE;IAKzD;;;;;;OAMG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE;IAInC;;;;;OAKG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE;IAIlC;;;;;OAKG;IACH,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE;IAKpC;;;OAGG;IACH,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,GAAG,EAAE;IAkC5D;;;;;OAKG;IACH,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE;IAKpC;;;;;OAKG;IACH,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE;IAI9C;;;;;OAKG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE;IAOlC;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,wBAAwB;IA2BhC;;;OAGG;IACH,OAAO,CAAC,mBAAmB;CAsC5B"}
1
+ {"version":3,"file":"HarmonyGenerator.d.ts","sourceRoot":"","sources":["../../../src/services/dye/HarmonyGenerator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAO,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;;GAIG;AACH,MAAM,MAAM,wBAAwB,GAAG,KAAK,GAAG,QAAQ,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,SAAS,CAAC,EAAE,wBAAwB,CAAC;IAErC;;;OAGG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAE9B;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;gBADN,QAAQ,EAAE,WAAW,EACrB,MAAM,EAAE,SAAS;IAG3B;;;;;OAKG;IACH,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,GAAG,GAAG,IAAI;IAmBxE;;;;;;OAMG;IACH,OAAO,CAAC,yBAAyB;IAKjC;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,GAAG,EAAE;IAKnF;;;;;;;;;OASG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,GAAG,EAAE;IAI7D;;;;;;;;OAQG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,GAAG,EAAE;IAI5D;;;;;;;;OAQG;IACH,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,GAAG,EAAE;IAK9D;;;;;;;OAOG;IACH,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,GAAG,EAAE;IAoEtF;;;;;;;;OAQG;IACH,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,GAAG,EAAE;IAK9D;;;;;;;;OAQG;IACH,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,GAAG,EAAE;IAIxE;;;;;;;;OAQG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,GAAG,EAAE;IAO5D;;;;;;;;;;;;;;;;;;OAkBG;IACH,OAAO,CAAC,wBAAwB;IAmDhC;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAoC3B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;CAsC5B"}
@@ -4,6 +4,7 @@
4
4
  * Handles triadic, analogous, complementary, and other harmony schemes
5
5
  */
6
6
  import { ColorManipulator } from '../color/ColorManipulator.js';
7
+ import { ColorConverter } from '../color/ColorConverter.js';
7
8
  /**
8
9
  * Color harmony generator
9
10
  * Per R-4: Single Responsibility - harmony generation only
@@ -16,11 +17,17 @@ export class HarmonyGenerator {
16
17
  /**
17
18
  * Find dyes that form a complementary color pair
18
19
  * Excludes Facewear dyes (generic names like "Red", "Blue")
20
+ * @param hex Base hex color
21
+ * @param options Matching algorithm options
19
22
  */
20
- findComplementaryPair(hex) {
23
+ findComplementaryPair(hex, options) {
21
24
  this.database.ensureLoaded();
22
25
  try {
23
26
  const complementaryHex = ColorManipulator.invert(hex);
27
+ // Use DeltaE matching if requested
28
+ if (options?.algorithm === 'deltaE') {
29
+ return this.findClosestByDeltaE(complementaryHex, new Set(), options);
30
+ }
24
31
  // Find closest dye, excluding Facewear
25
32
  return this.findClosestNonFacewearDye(complementaryHex);
26
33
  }
@@ -44,55 +51,99 @@ export class HarmonyGenerator {
44
51
  * Find analogous dyes (adjacent on color wheel)
45
52
  * Returns dyes at ±angle degrees from the base color
46
53
  *
54
+ * @param hex Base hex color
55
+ * @param angle Hue offset in degrees (default: 30)
56
+ * @param options Matching algorithm options
57
+ *
47
58
  * @remarks
48
59
  * May return fewer dyes than expected if no suitable matches exist
49
60
  * at the target hue positions or if all candidates are excluded.
50
61
  */
51
- findAnalogousDyes(hex, angle = 30) {
62
+ findAnalogousDyes(hex, angle = 30, options) {
52
63
  // Use harmony helper to find dyes at +angle and -angle positions
53
- return this.findHarmonyDyesByOffsets(hex, [angle, -angle]);
64
+ return this.findHarmonyDyesByOffsets(hex, [angle, -angle], {}, options);
54
65
  }
55
66
  /**
56
67
  * Find triadic color scheme (colors 120° apart on color wheel)
57
68
  *
69
+ * @param hex Base hex color
70
+ * @param options Matching algorithm options
71
+ *
58
72
  * @remarks
59
73
  * May return 0, 1, or 2 dyes depending on available matches.
60
74
  * Use the length of the returned array to determine actual results.
61
75
  */
62
- findTriadicDyes(hex) {
63
- return this.findHarmonyDyesByOffsets(hex, [120, 240]);
76
+ findTriadicDyes(hex, options) {
77
+ return this.findHarmonyDyesByOffsets(hex, [120, 240], {}, options);
64
78
  }
65
79
  /**
66
80
  * Find square color scheme (colors 90° apart on color wheel)
67
81
  *
82
+ * @param hex Base hex color
83
+ * @param options Matching algorithm options
84
+ *
68
85
  * @remarks
69
86
  * May return fewer than 3 dyes if suitable matches are not found.
70
87
  */
71
- findSquareDyes(hex) {
72
- return this.findHarmonyDyesByOffsets(hex, [90, 180, 270]);
88
+ findSquareDyes(hex, options) {
89
+ return this.findHarmonyDyesByOffsets(hex, [90, 180, 270], {}, options);
73
90
  }
74
91
  /**
75
92
  * Find tetradic color scheme (two complementary pairs)
76
93
  *
94
+ * @param hex Base hex color
95
+ * @param options Matching algorithm options
96
+ *
77
97
  * @remarks
78
98
  * May return fewer than 3 dyes if suitable matches are not found.
79
99
  */
80
- findTetradicDyes(hex) {
100
+ findTetradicDyes(hex, options) {
81
101
  // Two adjacent hues + their complements (e.g., base+60 and base+240)
82
- return this.findHarmonyDyesByOffsets(hex, [60, 180, 240]);
102
+ return this.findHarmonyDyesByOffsets(hex, [60, 180, 240], {}, options);
83
103
  }
84
104
  /**
85
105
  * Find monochromatic dyes (same hue, varying saturation/brightness)
86
106
  * Excludes Facewear dyes (generic names like "Red", "Blue")
107
+ *
108
+ * @param hex Base hex color
109
+ * @param limit Maximum number of dyes to return (default: 6)
110
+ * @param options Matching algorithm options
87
111
  */
88
- findMonochromaticDyes(hex, limit = 6) {
112
+ findMonochromaticDyes(hex, limit = 6, options) {
89
113
  this.database.ensureLoaded();
90
114
  const baseDye = this.findClosestNonFacewearDye(hex);
91
115
  if (!baseDye)
92
116
  return [];
117
+ const dyes = this.database.getDyesInternal();
118
+ // DeltaE-based monochromatic search
119
+ if (options?.algorithm === 'deltaE') {
120
+ const baseLab = ColorConverter.hexToLab(baseDye.hex);
121
+ const formula = options.deltaEFormula ?? 'cie76';
122
+ const tolerance = options.deltaETolerance ?? (formula === 'cie2000' ? 25 : 40);
123
+ const results = [];
124
+ for (const dye of dyes) {
125
+ if (dye.category === 'Facewear' || dye.id === baseDye.id)
126
+ continue;
127
+ // Use pre-computed LAB if available, otherwise compute
128
+ const dyeLab = dye.lab ?? ColorConverter.hexToLab(dye.hex);
129
+ const deltaE = formula === 'cie2000'
130
+ ? ColorConverter.getDeltaE2000(baseLab, dyeLab)
131
+ : ColorConverter.getDeltaE76(baseLab, dyeLab);
132
+ // For monochromatic, we want colors that are perceptually similar
133
+ // but have varying lightness (L component)
134
+ if (deltaE <= tolerance) {
135
+ const satDiff = Math.abs(dye.hsv.s - baseDye.hsv.s);
136
+ const valDiff = Math.abs(dye.hsv.v - baseDye.hsv.v);
137
+ results.push({ dye, deltaE, satValDiff: satDiff + valDiff });
138
+ }
139
+ }
140
+ // Sort by saturation/value difference (prefer more variety)
141
+ results.sort((a, b) => b.satValDiff - a.satValDiff);
142
+ return results.slice(0, limit).map((item) => item.dye);
143
+ }
144
+ // Hue-based monochromatic search (original algorithm)
93
145
  const baseHue = baseDye.hsv.h;
94
146
  const results = [];
95
- const dyes = this.database.getDyesInternal();
96
147
  // Find dyes with similar hue but different saturation/value
97
148
  for (const dye of dyes) {
98
149
  // Skip Facewear dyes (generic names)
@@ -115,35 +166,44 @@ export class HarmonyGenerator {
115
166
  /**
116
167
  * Find compound harmony (analogous + complementary)
117
168
  *
169
+ * @param hex Base hex color
170
+ * @param options Matching algorithm options
171
+ *
118
172
  * @remarks
119
173
  * May return fewer than 3 dyes if suitable matches are not found.
120
174
  */
121
- findCompoundDyes(hex) {
175
+ findCompoundDyes(hex, options) {
122
176
  // ±30° from base + complement
123
- return this.findHarmonyDyesByOffsets(hex, [30, -30, 180], { tolerance: 35 });
177
+ return this.findHarmonyDyesByOffsets(hex, [30, -30, 180], { tolerance: 35 }, options);
124
178
  }
125
179
  /**
126
180
  * Find split-complementary harmony (±30° from the complementary hue)
127
181
  *
182
+ * @param hex Base hex color
183
+ * @param options Matching algorithm options
184
+ *
128
185
  * @remarks
129
186
  * May return 0, 1, or 2 dyes depending on available matches.
130
187
  */
131
- findSplitComplementaryDyes(hex) {
132
- return this.findHarmonyDyesByOffsets(hex, [150, 210]);
188
+ findSplitComplementaryDyes(hex, options) {
189
+ return this.findHarmonyDyesByOffsets(hex, [150, 210], {}, options);
133
190
  }
134
191
  /**
135
192
  * Find shades (similar tones, ±15°)
136
193
  *
194
+ * @param hex Base hex color
195
+ * @param options Matching algorithm options
196
+ *
137
197
  * @remarks
138
198
  * May return 0, 1, or 2 dyes depending on available matches.
139
199
  */
140
- findShadesDyes(hex) {
200
+ findShadesDyes(hex, options) {
141
201
  this.database.ensureLoaded();
142
202
  // Use tighter tolerance (5°) for shades to ensure results are close to target hue
143
- return this.findHarmonyDyesByOffsets(hex, [15, -15], { tolerance: 5 });
203
+ return this.findHarmonyDyesByOffsets(hex, [15, -15], { tolerance: 5 }, options);
144
204
  }
145
205
  /**
146
- * Generic helper for hue-based harmonies
206
+ * Generic helper for hue-based and DeltaE-based harmonies
147
207
  *
148
208
  * @remarks
149
209
  * This method may return fewer dyes than the number of offsets provided.
@@ -157,18 +217,37 @@ export class HarmonyGenerator {
157
217
  *
158
218
  * @param hex - Base hex color
159
219
  * @param offsets - Array of hue offsets in degrees
160
- * @param options - Options including tolerance (default: 45°)
220
+ * @param internalOptions - Internal options (tolerance for hue-based matching)
221
+ * @param harmonyOptions - User-provided harmony options
161
222
  * @returns Array of matched dyes (may be shorter than offsets array)
162
223
  */
163
- findHarmonyDyesByOffsets(hex, offsets, options = {}) {
224
+ findHarmonyDyesByOffsets(hex, offsets, internalOptions = {}, harmonyOptions) {
164
225
  this.database.ensureLoaded();
165
226
  const baseDye = this.search.findClosestDye(hex);
166
227
  if (!baseDye)
167
228
  return [];
168
229
  const usedDyeIds = new Set([baseDye.id]);
169
230
  const results = [];
231
+ // Check if using DeltaE algorithm
232
+ if (harmonyOptions?.algorithm === 'deltaE') {
233
+ // For DeltaE, we still calculate target colors from hue offsets,
234
+ // but match using perceptual distance instead of hue distance
235
+ const baseHsv = baseDye.hsv;
236
+ for (const offset of offsets) {
237
+ const targetHue = (baseHsv.h + offset + 360) % 360;
238
+ // Generate target color at that hue (keeping same saturation/value)
239
+ const targetHex = ColorConverter.hsvToHex(targetHue, baseHsv.s, baseHsv.v);
240
+ const match = this.findClosestByDeltaE(targetHex, usedDyeIds, harmonyOptions);
241
+ if (match) {
242
+ results.push(match);
243
+ usedDyeIds.add(match.id);
244
+ }
245
+ }
246
+ return results;
247
+ }
248
+ // Original hue-based logic
170
249
  const baseHue = baseDye.hsv.h;
171
- const tolerance = options.tolerance ?? 45;
250
+ const tolerance = harmonyOptions?.hueTolerance ?? internalOptions.tolerance ?? 45;
172
251
  for (const offset of offsets) {
173
252
  const targetHue = (baseHue + offset + 360) % 360;
174
253
  const match = this.findClosestDyeByHue(targetHue, usedDyeIds, tolerance);
@@ -179,6 +258,36 @@ export class HarmonyGenerator {
179
258
  }
180
259
  return results;
181
260
  }
261
+ /**
262
+ * Find closest dye using DeltaE color difference
263
+ * @param targetHex - Target color in hex format
264
+ * @param excludeIds - Dye IDs to exclude from results
265
+ * @param options - DeltaE options (formula, tolerance)
266
+ */
267
+ findClosestByDeltaE(targetHex, excludeIds, options) {
268
+ const formula = options.deltaEFormula ?? 'cie76';
269
+ const tolerance = options.deltaETolerance ?? (formula === 'cie2000' ? 25 : 40);
270
+ const targetLab = ColorConverter.hexToLab(targetHex);
271
+ let bestMatch = null;
272
+ let bestDeltaE = Infinity;
273
+ const dyes = this.database.getDyesInternal();
274
+ for (const dye of dyes) {
275
+ if (excludeIds.has(dye.id) || dye.category === 'Facewear') {
276
+ continue;
277
+ }
278
+ // Use pre-computed LAB if available, otherwise compute
279
+ const dyeLab = dye.lab ?? ColorConverter.hexToLab(dye.hex);
280
+ const deltaE = formula === 'cie2000'
281
+ ? ColorConverter.getDeltaE2000(targetLab, dyeLab)
282
+ : ColorConverter.getDeltaE76(targetLab, dyeLab);
283
+ if (deltaE < bestDeltaE) {
284
+ bestDeltaE = deltaE;
285
+ bestMatch = dye;
286
+ }
287
+ }
288
+ // Only return if within tolerance
289
+ return bestDeltaE <= tolerance ? bestMatch : null;
290
+ }
182
291
  /**
183
292
  * Find closest dye by hue difference with graceful fallback
184
293
  * Per P-2: Uses hue-indexed map for 70-90% speedup
@@ -1 +1 @@
1
- {"version":3,"file":"HarmonyGenerator.js","sourceRoot":"","sources":["../../../src/services/dye/HarmonyGenerator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HarmonyGenerator.js","sourceRoot":"","sources":["../../../src/services/dye/HarmonyGenerator.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,7 @@ export { NoOpLogger, ConsoleLogger } from '@xivdyetools/logger/library';
20
20
  /**
21
21
  * @deprecated Removed in v2.0.0. Import directly from '@xivdyetools/types' instead.
22
22
  */
23
- export type { RGB, HSV, HexColor, DyeId, Hue, Saturation } from '@xivdyetools/types';
23
+ export type { RGB, HSV, LAB, HexColor, DyeId, Hue, Saturation } from '@xivdyetools/types';
24
24
  /**
25
25
  * @deprecated Removed in v2.0.0. Import directly from '@xivdyetools/types' instead.
26
26
  */
@@ -33,6 +33,11 @@ export type { VisionType, Matrix3x3, ColorblindMatrices } from '@xivdyetools/typ
33
33
  * @deprecated Removed in v2.0.0. Import directly from '@xivdyetools/types' instead.
34
34
  */
35
35
  export type { Dye, LocalizedDye, DyeWithDistance, DyeDatabase } from '@xivdyetools/types';
36
+ /**
37
+ * @deprecated Removed in v2.0.0. Import directly from '@xivdyetools/types' instead.
38
+ */
39
+ export type { CharacterColor, CharacterColorMatch, SharedColorCategory, RaceSpecificColorCategory, CharacterColorCategory, SubRace, Gender, Race, } from '@xivdyetools/types';
40
+ export { RACE_SUBRACES, SUBRACE_TO_RACE, COLOR_GRID_DIMENSIONS } from '@xivdyetools/types';
36
41
  /**
37
42
  * @deprecated Removed in v2.0.0. Import directly from '@xivdyetools/types' instead.
38
43
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;GAEG;AACH,YAAY,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAC1D;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAMxE;;GAEG;AACH,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrF;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC9F;;GAEG;AACH,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEpF;;GAEG;AACH,YAAY,EAAE,GAAG,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE1F;;GAEG;AACH,YAAY,EACV,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,cAAc,EACd,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,6BAA6B,EAC7B,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,YAAY,EACV,YAAY,EACZ,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,WAAW,EACX,oBAAoB,EACpB,gBAAgB,EAChB,4BAA4B,EAC5B,qBAAqB,EACrB,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,YAAY,EACV,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,SAAS,EACT,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,YAAY,EACV,UAAU,EACV,cAAc,EACd,cAAc,EACd,MAAM,EACN,eAAe,EACf,UAAU,EACV,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACzD;;GAEG;AACH,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD;;GAEG;AACH,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAClF;;GAEG;AACH,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;GAEG;AACH,YAAY,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAC1D;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAMxE;;GAEG;AACH,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC1F;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC9F;;GAEG;AACH,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEpF;;GAEG;AACH,YAAY,EAAE,GAAG,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE1F;;GAEG;AACH,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,OAAO,EACP,MAAM,EACN,IAAI,GACL,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3F;;GAEG;AACH,YAAY,EACV,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,cAAc,EACd,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,6BAA6B,EAC7B,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,YAAY,EACV,YAAY,EACZ,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,WAAW,EACX,oBAAoB,EACpB,gBAAgB,EAChB,4BAA4B,EAC5B,qBAAqB,EACrB,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,YAAY,EACV,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,SAAS,EACT,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,YAAY,EACV,UAAU,EACV,cAAc,EACd,cAAc,EACd,MAAM,EACN,eAAe,EACf,UAAU,EACV,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACzD;;GAEG;AACH,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD;;GAEG;AACH,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAClF;;GAEG;AACH,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC"}
@@ -17,6 +17,7 @@ export { NoOpLogger, ConsoleLogger } from '@xivdyetools/logger/library';
17
17
  * @deprecated Removed in v2.0.0. Import directly from '@xivdyetools/types' instead.
18
18
  */
19
19
  export { createHexColor, createDyeId, createHue, createSaturation } from '@xivdyetools/types';
20
+ export { RACE_SUBRACES, SUBRACE_TO_RACE, COLOR_GRID_DIMENSIONS } from '@xivdyetools/types';
20
21
  /**
21
22
  * @deprecated Removed in v2.0.0. Import directly from '@xivdyetools/types' instead.
22
23
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAUxE;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAoF9F;;GAEG;AACH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAUzD;;GAEG;AACH,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAUxE;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAwB9F,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AA2E3F;;GAEG;AACH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAUzD;;GAEG;AACH,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/version.d.ts CHANGED
@@ -7,5 +7,5 @@
7
7
  * Current library version
8
8
  * Automatically synced with package.json version
9
9
  */
10
- export declare const VERSION = "1.6.0";
10
+ export declare const VERSION = "1.8.0";
11
11
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -7,5 +7,5 @@
7
7
  * Current library version
8
8
  * Automatically synced with package.json version
9
9
  */
10
- export const VERSION = '1.6.0';
10
+ export const VERSION = '1.8.0';
11
11
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xivdyetools/core",
3
- "version": "1.6.0",
3
+ "version": "1.8.0",
4
4
  "description": "Core color algorithms and dye database for XIV Dye Tools",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -77,7 +77,7 @@
77
77
  },
78
78
  "dependencies": {
79
79
  "@xivdyetools/logger": "^1.0.2",
80
- "@xivdyetools/types": "^1.2.0"
80
+ "@xivdyetools/types": "^1.4.0"
81
81
  },
82
82
  "lint-staged": {
83
83
  "*.ts": [