@xivdyetools/core 1.7.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.
- package/README.md +17 -2
- package/dist/data/locales/de.json +1 -1
- package/dist/data/locales/en.json +1 -1
- package/dist/data/locales/fr.json +1 -1
- package/dist/data/locales/ja.json +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/services/DyeService.d.ts +30 -9
- package/dist/services/DyeService.d.ts.map +1 -1
- package/dist/services/DyeService.js +38 -18
- package/dist/services/DyeService.js.map +1 -1
- package/dist/services/color/ColorConverter.d.ts +74 -1
- package/dist/services/color/ColorConverter.d.ts.map +1 -1
- package/dist/services/color/ColorConverter.js +212 -0
- package/dist/services/color/ColorConverter.js.map +1 -1
- package/dist/services/dye/DyeDatabase.d.ts +5 -2
- package/dist/services/dye/DyeDatabase.d.ts.map +1 -1
- package/dist/services/dye/DyeDatabase.js +21 -1
- package/dist/services/dye/DyeDatabase.js.map +1 -1
- package/dist/services/dye/HarmonyGenerator.d.ts +82 -11
- package/dist/services/dye/HarmonyGenerator.d.ts.map +1 -1
- package/dist/services/dye/HarmonyGenerator.js +130 -21
- package/dist/services/dye/HarmonyGenerator.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -102,6 +102,11 @@ const simulated = ColorService.simulateColorblindness(
|
|
|
102
102
|
// Color distance (Euclidean in RGB space)
|
|
103
103
|
const distance = ColorService.getColorDistance('#FF0000', '#00FF00');
|
|
104
104
|
|
|
105
|
+
// LAB color space and DeltaE (perceptual color difference)
|
|
106
|
+
const lab = ColorService.hexToLab('#FF6B6B');
|
|
107
|
+
const deltaE = ColorService.getDeltaE('#FF0000', '#FF6B6B'); // CIE76 by default
|
|
108
|
+
const deltaE2000 = ColorService.getDeltaE('#FF0000', '#FF6B6B', 'cie2000'); // CIEDE2000
|
|
109
|
+
|
|
105
110
|
// Color inversion
|
|
106
111
|
const inverted = ColorService.invert('#FF6B6B');
|
|
107
112
|
|
|
@@ -129,13 +134,19 @@ const categories = dyeService.getCategories(); // ['Neutral', 'Red', 'Blue', ...
|
|
|
129
134
|
const closest = dyeService.findClosestDye('#FF6B6B');
|
|
130
135
|
const nearby = dyeService.findDyesWithinDistance('#FF6B6B', 50, 5);
|
|
131
136
|
|
|
132
|
-
// Harmony generation
|
|
137
|
+
// Harmony generation (default: fast hue-based matching)
|
|
133
138
|
const triadic = dyeService.findTriadicDyes('#FF6B6B');
|
|
134
139
|
const complementary = dyeService.findComplementaryPair('#FF6B6B');
|
|
135
140
|
const analogous = dyeService.findAnalogousDyes('#FF6B6B', 30);
|
|
136
141
|
const monochromatic = dyeService.findMonochromaticDyes('#FF6B6B', 6);
|
|
137
142
|
const splitComplementary = dyeService.findSplitComplementaryDyes('#FF6B6B');
|
|
138
143
|
|
|
144
|
+
// DeltaE-based harmony (perceptually accurate matching)
|
|
145
|
+
const triadicDeltaE = dyeService.findTriadicDyes('#FF6B6B', {
|
|
146
|
+
algorithm: 'deltaE',
|
|
147
|
+
deltaEFormula: 'cie2000', // or 'cie76' (faster, default)
|
|
148
|
+
});
|
|
149
|
+
|
|
139
150
|
// Filtering
|
|
140
151
|
const redDyes = dyeService.searchByCategory('Red');
|
|
141
152
|
const searchResults = dyeService.searchByName('black');
|
|
@@ -262,12 +273,16 @@ import type {
|
|
|
262
273
|
Dye,
|
|
263
274
|
RGB,
|
|
264
275
|
HSV,
|
|
276
|
+
LAB,
|
|
265
277
|
HexColor,
|
|
266
278
|
PriceData,
|
|
267
279
|
CachedData,
|
|
268
280
|
VisionType,
|
|
269
281
|
ErrorSeverity,
|
|
270
|
-
ICacheBackend
|
|
282
|
+
ICacheBackend,
|
|
283
|
+
HarmonyOptions,
|
|
284
|
+
HarmonyMatchingAlgorithm,
|
|
285
|
+
DeltaEFormula
|
|
271
286
|
} from 'xivdyetools-core';
|
|
272
287
|
```
|
|
273
288
|
|
package/dist/index.d.ts
CHANGED
|
@@ -7,7 +7,9 @@ export { PresetService } from './services/PresetService.js';
|
|
|
7
7
|
export { PaletteService } from './services/PaletteService.js';
|
|
8
8
|
export type { PaletteExtractionOptions, ExtractedColor, PaletteMatch, PaletteServiceOptions, } from './services/PaletteService.js';
|
|
9
9
|
export { CharacterColorService } from './services/CharacterColorService.js';
|
|
10
|
-
export type { Dye, LocalizedDye, RGB, HSV, HexColor, VisionType, Matrix3x3, ColorblindMatrices, ErrorSeverity, PriceData, CachedData, LocaleCode, TranslationKey, HarmonyTypeKey, JobKey, GrandCompanyKey, LocaleData, LocalePreference, Logger, PresetCategory, CategoryMeta, PresetPalette, ResolvedPreset, PresetData, PresetStatus, CommunityPreset, PresetSubmission, PresetListResponse, PresetSubmitResponse, VoteResponse, PresetFilters, CharacterColor, CharacterColorMatch, SubRace, Gender, Race, } from './types/index.js';
|
|
10
|
+
export type { Dye, LocalizedDye, RGB, HSV, LAB, HexColor, VisionType, Matrix3x3, ColorblindMatrices, ErrorSeverity, PriceData, CachedData, LocaleCode, TranslationKey, HarmonyTypeKey, JobKey, GrandCompanyKey, LocaleData, LocalePreference, Logger, PresetCategory, CategoryMeta, PresetPalette, ResolvedPreset, PresetData, PresetStatus, CommunityPreset, PresetSubmission, PresetListResponse, PresetSubmitResponse, VoteResponse, PresetFilters, CharacterColor, CharacterColorMatch, SubRace, Gender, Race, } from './types/index.js';
|
|
11
|
+
export type { HarmonyOptions, HarmonyMatchingAlgorithm, } from './services/dye/HarmonyGenerator.js';
|
|
12
|
+
export type { DeltaEFormula } from './services/color/ColorConverter.js';
|
|
11
13
|
export { AppError, ErrorCode, createHexColor, NoOpLogger, ConsoleLogger, RACE_SUBRACES, SUBRACE_TO_RACE, COLOR_GRID_DIMENSIONS, } from './types/index.js';
|
|
12
14
|
export { RGB_MIN, RGB_MAX, HUE_MIN, HUE_MAX, SATURATION_MIN, SATURATION_MAX, VALUE_MIN, VALUE_MAX, COLOR_DISTANCE_MAX, VISION_TYPES, VISION_TYPE_LABELS, BRETTEL_MATRICES, PATTERNS, UNIVERSALIS_API_BASE, UNIVERSALIS_API_TIMEOUT, UNIVERSALIS_API_RETRY_COUNT, UNIVERSALIS_API_RETRY_DELAY, API_CACHE_TTL, API_DEBOUNCE_DELAY, API_CACHE_VERSION, API_MAX_RESPONSE_SIZE, API_RATE_LIMIT_DELAY, } from './constants/index.js';
|
|
13
15
|
export { clamp, lerp, round, distance, unique, groupBy, sortByProperty, filterNulls, isValidHexColor, isValidRGB, isValidHSV, isString, isNumber, isArray, isObject, isNullish, sleep, retry, isAbortError, generateChecksum, } from './utils/index.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,YAAY,EACV,wBAAwB,EACxB,cAAc,EACd,YAAY,EACZ,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAG5E,YAAY,EACV,GAAG,EACH,YAAY,EACZ,GAAG,EACH,GAAG,EACH,QAAQ,EACR,UAAU,EACV,SAAS,EACT,kBAAkB,EAClB,aAAa,EACb,SAAS,EACT,UAAU,EACV,UAAU,EACV,cAAc,EACd,cAAc,EACd,MAAM,EACN,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,MAAM,EAEN,cAAc,EACd,YAAY,EACZ,aAAa,EACb,cAAc,EACd,UAAU,EAEV,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,aAAa,EAEb,cAAc,EACd,mBAAmB,EACnB,OAAO,EACP,MAAM,EACN,IAAI,GACL,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,YAAY,EACV,wBAAwB,EACxB,cAAc,EACd,YAAY,EACZ,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAG5E,YAAY,EACV,GAAG,EACH,YAAY,EACZ,GAAG,EACH,GAAG,EACH,GAAG,EACH,QAAQ,EACR,UAAU,EACV,SAAS,EACT,kBAAkB,EAClB,aAAa,EACb,SAAS,EACT,UAAU,EACV,UAAU,EACV,cAAc,EACd,cAAc,EACd,MAAM,EACN,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,MAAM,EAEN,cAAc,EACd,YAAY,EACZ,aAAa,EACb,cAAc,EACd,UAAU,EAEV,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,aAAa,EAEb,cAAc,EACd,mBAAmB,EACnB,OAAO,EACP,MAAM,EACN,IAAI,GACL,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EACV,cAAc,EACd,wBAAwB,GACzB,MAAM,oCAAoC,CAAC;AAG5C,YAAY,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EACL,QAAQ,EACR,SAAS,EACT,cAAc,EACd,UAAU,EACV,aAAa,EAEb,aAAa,EACb,eAAe,EACf,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,cAAc,EACd,cAAc,EACd,SAAS,EACT,SAAS,EACT,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,QAAQ,EACR,oBAAoB,EACpB,uBAAuB,EACvB,2BAA2B,EAC3B,2BAA2B,EAC3B,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,KAAK,EACL,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,MAAM,EACN,OAAO,EACP,cAAc,EACd,WAAW,EACX,eAAe,EACf,UAAU,EACV,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,SAAS,EACT,KAAK,EACL,KAAK,EACL,YAAY,EACZ,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,wBAAwB,CAAuB;AACtF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAuB;AAClF,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,8BAA8B,CAAuB;AAGnG,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAO9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAO9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAsD5E,OAAO,EACL,QAAQ,EACR,SAAS,EACT,cAAc,EACd,UAAU,EACV,aAAa;AACb,sBAAsB;AACtB,aAAa,EACb,eAAe,EACf,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAE1B,YAAY;AACZ,OAAO,EACL,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,cAAc,EACd,cAAc,EACd,SAAS,EACT,SAAS,EACT,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,QAAQ,EACR,oBAAoB,EACpB,uBAAuB,EACvB,2BAA2B,EAC3B,2BAA2B,EAC3B,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAE9B,QAAQ;AACR,OAAO,EACL,KAAK,EACL,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,MAAM,EACN,OAAO,EACP,cAAc,EACd,WAAW,EACX,eAAe,EACf,UAAU,EACV,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,SAAS,EACT,KAAK,EACL,KAAK,EACL,YAAY,EACZ,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAE1B,mDAAmD;AACnD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,wBAAwB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,8BAA8B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAEnG,0DAA0D;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
27
|
import type { Dye, LocalizedDye, Logger } from '../types/index.js';
|
|
28
|
+
import { type HarmonyOptions } from './dye/HarmonyGenerator.js';
|
|
28
29
|
/**
|
|
29
30
|
* Configuration options for DyeService
|
|
30
31
|
*/
|
|
@@ -131,41 +132,61 @@ export declare class DyeService {
|
|
|
131
132
|
getDyesSortedByHue(ascending?: boolean): Dye[];
|
|
132
133
|
/**
|
|
133
134
|
* Find dyes that form a complementary color pair
|
|
135
|
+
* @param hex Base hex color
|
|
136
|
+
* @param options Matching algorithm options (optional)
|
|
134
137
|
*/
|
|
135
|
-
findComplementaryPair(hex: string): Dye | null;
|
|
138
|
+
findComplementaryPair(hex: string, options?: HarmonyOptions): Dye | null;
|
|
136
139
|
/**
|
|
137
140
|
* Find analogous dyes (adjacent on color wheel)
|
|
138
141
|
* Returns dyes at ±angle degrees from the base color
|
|
142
|
+
* @param hex Base hex color
|
|
143
|
+
* @param angle Hue offset in degrees (default: 30)
|
|
144
|
+
* @param options Matching algorithm options (optional)
|
|
139
145
|
*/
|
|
140
|
-
findAnalogousDyes(hex: string, angle?: number): Dye[];
|
|
146
|
+
findAnalogousDyes(hex: string, angle?: number, options?: HarmonyOptions): Dye[];
|
|
141
147
|
/**
|
|
142
148
|
* Find triadic color scheme (colors 120° apart on color wheel)
|
|
149
|
+
* @param hex Base hex color
|
|
150
|
+
* @param options Matching algorithm options (optional)
|
|
143
151
|
*/
|
|
144
|
-
findTriadicDyes(hex: string): Dye[];
|
|
152
|
+
findTriadicDyes(hex: string, options?: HarmonyOptions): Dye[];
|
|
145
153
|
/**
|
|
146
154
|
* Find square color scheme (colors 90° apart on color wheel)
|
|
155
|
+
* @param hex Base hex color
|
|
156
|
+
* @param options Matching algorithm options (optional)
|
|
147
157
|
*/
|
|
148
|
-
findSquareDyes(hex: string): Dye[];
|
|
158
|
+
findSquareDyes(hex: string, options?: HarmonyOptions): Dye[];
|
|
149
159
|
/**
|
|
150
160
|
* Find tetradic color scheme (two complementary pairs)
|
|
161
|
+
* @param hex Base hex color
|
|
162
|
+
* @param options Matching algorithm options (optional)
|
|
151
163
|
*/
|
|
152
|
-
findTetradicDyes(hex: string): Dye[];
|
|
164
|
+
findTetradicDyes(hex: string, options?: HarmonyOptions): Dye[];
|
|
153
165
|
/**
|
|
154
166
|
* Find monochromatic dyes (same hue, varying saturation/brightness)
|
|
167
|
+
* @param hex Base hex color
|
|
168
|
+
* @param limit Maximum number of dyes to return (default: 6)
|
|
169
|
+
* @param options Matching algorithm options (optional)
|
|
155
170
|
*/
|
|
156
|
-
findMonochromaticDyes(hex: string, limit?: number): Dye[];
|
|
171
|
+
findMonochromaticDyes(hex: string, limit?: number, options?: HarmonyOptions): Dye[];
|
|
157
172
|
/**
|
|
158
173
|
* Find compound harmony (analogous + complementary)
|
|
174
|
+
* @param hex Base hex color
|
|
175
|
+
* @param options Matching algorithm options (optional)
|
|
159
176
|
*/
|
|
160
|
-
findCompoundDyes(hex: string): Dye[];
|
|
177
|
+
findCompoundDyes(hex: string, options?: HarmonyOptions): Dye[];
|
|
161
178
|
/**
|
|
162
179
|
* Find split-complementary harmony (±30° from the complementary hue)
|
|
180
|
+
* @param hex Base hex color
|
|
181
|
+
* @param options Matching algorithm options (optional)
|
|
163
182
|
*/
|
|
164
|
-
findSplitComplementaryDyes(hex: string): Dye[];
|
|
183
|
+
findSplitComplementaryDyes(hex: string, options?: HarmonyOptions): Dye[];
|
|
165
184
|
/**
|
|
166
185
|
* Find shades (similar tones, ±15°)
|
|
186
|
+
* @param hex Base hex color
|
|
187
|
+
* @param options Matching algorithm options (optional)
|
|
167
188
|
*/
|
|
168
|
-
findShadesDyes(hex: string): Dye[];
|
|
189
|
+
findShadesDyes(hex: string, options?: HarmonyOptions): Dye[];
|
|
169
190
|
/**
|
|
170
191
|
* Search dyes by name (searches both English + localized names)
|
|
171
192
|
* If no locale is loaded, falls back to English-only search
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DyeService.d.ts","sourceRoot":"","sources":["../../src/services/DyeService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"DyeService.d.ts","sourceRoot":"","sources":["../../src/services/DyeService.ts"],"names":[],"mappings":"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"}
|
|
@@ -165,58 +165,78 @@ export class DyeService {
|
|
|
165
165
|
// ============================================================================
|
|
166
166
|
/**
|
|
167
167
|
* Find dyes that form a complementary color pair
|
|
168
|
+
* @param hex Base hex color
|
|
169
|
+
* @param options Matching algorithm options (optional)
|
|
168
170
|
*/
|
|
169
|
-
findComplementaryPair(hex) {
|
|
170
|
-
return this.harmony.findComplementaryPair(hex);
|
|
171
|
+
findComplementaryPair(hex, options) {
|
|
172
|
+
return this.harmony.findComplementaryPair(hex, options);
|
|
171
173
|
}
|
|
172
174
|
/**
|
|
173
175
|
* Find analogous dyes (adjacent on color wheel)
|
|
174
176
|
* Returns dyes at ±angle degrees from the base color
|
|
177
|
+
* @param hex Base hex color
|
|
178
|
+
* @param angle Hue offset in degrees (default: 30)
|
|
179
|
+
* @param options Matching algorithm options (optional)
|
|
175
180
|
*/
|
|
176
|
-
findAnalogousDyes(hex, angle = 30) {
|
|
177
|
-
return this.harmony.findAnalogousDyes(hex, angle);
|
|
181
|
+
findAnalogousDyes(hex, angle = 30, options) {
|
|
182
|
+
return this.harmony.findAnalogousDyes(hex, angle, options);
|
|
178
183
|
}
|
|
179
184
|
/**
|
|
180
185
|
* Find triadic color scheme (colors 120° apart on color wheel)
|
|
186
|
+
* @param hex Base hex color
|
|
187
|
+
* @param options Matching algorithm options (optional)
|
|
181
188
|
*/
|
|
182
|
-
findTriadicDyes(hex) {
|
|
183
|
-
return this.harmony.findTriadicDyes(hex);
|
|
189
|
+
findTriadicDyes(hex, options) {
|
|
190
|
+
return this.harmony.findTriadicDyes(hex, options);
|
|
184
191
|
}
|
|
185
192
|
/**
|
|
186
193
|
* Find square color scheme (colors 90° apart on color wheel)
|
|
194
|
+
* @param hex Base hex color
|
|
195
|
+
* @param options Matching algorithm options (optional)
|
|
187
196
|
*/
|
|
188
|
-
findSquareDyes(hex) {
|
|
189
|
-
return this.harmony.findSquareDyes(hex);
|
|
197
|
+
findSquareDyes(hex, options) {
|
|
198
|
+
return this.harmony.findSquareDyes(hex, options);
|
|
190
199
|
}
|
|
191
200
|
/**
|
|
192
201
|
* Find tetradic color scheme (two complementary pairs)
|
|
202
|
+
* @param hex Base hex color
|
|
203
|
+
* @param options Matching algorithm options (optional)
|
|
193
204
|
*/
|
|
194
|
-
findTetradicDyes(hex) {
|
|
195
|
-
return this.harmony.findTetradicDyes(hex);
|
|
205
|
+
findTetradicDyes(hex, options) {
|
|
206
|
+
return this.harmony.findTetradicDyes(hex, options);
|
|
196
207
|
}
|
|
197
208
|
/**
|
|
198
209
|
* Find monochromatic dyes (same hue, varying saturation/brightness)
|
|
210
|
+
* @param hex Base hex color
|
|
211
|
+
* @param limit Maximum number of dyes to return (default: 6)
|
|
212
|
+
* @param options Matching algorithm options (optional)
|
|
199
213
|
*/
|
|
200
|
-
findMonochromaticDyes(hex, limit = 6) {
|
|
201
|
-
return this.harmony.findMonochromaticDyes(hex, limit);
|
|
214
|
+
findMonochromaticDyes(hex, limit = 6, options) {
|
|
215
|
+
return this.harmony.findMonochromaticDyes(hex, limit, options);
|
|
202
216
|
}
|
|
203
217
|
/**
|
|
204
218
|
* Find compound harmony (analogous + complementary)
|
|
219
|
+
* @param hex Base hex color
|
|
220
|
+
* @param options Matching algorithm options (optional)
|
|
205
221
|
*/
|
|
206
|
-
findCompoundDyes(hex) {
|
|
207
|
-
return this.harmony.findCompoundDyes(hex);
|
|
222
|
+
findCompoundDyes(hex, options) {
|
|
223
|
+
return this.harmony.findCompoundDyes(hex, options);
|
|
208
224
|
}
|
|
209
225
|
/**
|
|
210
226
|
* Find split-complementary harmony (±30° from the complementary hue)
|
|
227
|
+
* @param hex Base hex color
|
|
228
|
+
* @param options Matching algorithm options (optional)
|
|
211
229
|
*/
|
|
212
|
-
findSplitComplementaryDyes(hex) {
|
|
213
|
-
return this.harmony.findSplitComplementaryDyes(hex);
|
|
230
|
+
findSplitComplementaryDyes(hex, options) {
|
|
231
|
+
return this.harmony.findSplitComplementaryDyes(hex, options);
|
|
214
232
|
}
|
|
215
233
|
/**
|
|
216
234
|
* Find shades (similar tones, ±15°)
|
|
235
|
+
* @param hex Base hex color
|
|
236
|
+
* @param options Matching algorithm options (optional)
|
|
217
237
|
*/
|
|
218
|
-
findShadesDyes(hex) {
|
|
219
|
-
return this.harmony.findShadesDyes(hex);
|
|
238
|
+
findShadesDyes(hex, options) {
|
|
239
|
+
return this.harmony.findShadesDyes(hex, options);
|
|
220
240
|
}
|
|
221
241
|
// ============================================================================
|
|
222
242
|
// Localization Support (NEW)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DyeService.js","sourceRoot":"","sources":["../../src/services/DyeService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"DyeService.js","sourceRoot":"","sources":["../../src/services/DyeService.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,13 @@
|
|
|
3
3
|
* Per R-4: Focused class for color format conversions
|
|
4
4
|
* Handles conversions between hex, RGB, and HSV color formats
|
|
5
5
|
*/
|
|
6
|
-
import type { RGB, HSV, HexColor } from '../../types/index.js';
|
|
6
|
+
import type { RGB, HSV, HexColor, LAB } from '../../types/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* DeltaE formula for color difference calculations
|
|
9
|
+
* - cie76: Simple Euclidean distance in LAB space (fast)
|
|
10
|
+
* - cie2000: CIEDE2000 formula (perceptually accurate, industry standard)
|
|
11
|
+
*/
|
|
12
|
+
export type DeltaEFormula = 'cie76' | 'cie2000';
|
|
7
13
|
/**
|
|
8
14
|
* Configuration for ColorConverter caches
|
|
9
15
|
*/
|
|
@@ -22,6 +28,7 @@ export declare class ColorConverter {
|
|
|
22
28
|
private readonly rgbToHsvCache;
|
|
23
29
|
private readonly hsvToRgbCache;
|
|
24
30
|
private readonly hexToHsvCache;
|
|
31
|
+
private readonly rgbToLabCache;
|
|
25
32
|
private static defaultInstance;
|
|
26
33
|
/**
|
|
27
34
|
* Constructor with optional cache configuration
|
|
@@ -50,6 +57,7 @@ export declare class ColorConverter {
|
|
|
50
57
|
rgbToHsv: number;
|
|
51
58
|
hsvToRgb: number;
|
|
52
59
|
hexToHsv: number;
|
|
60
|
+
rgbToLab: number;
|
|
53
61
|
};
|
|
54
62
|
/**
|
|
55
63
|
* Static method: Get cache statistics from default instance
|
|
@@ -60,6 +68,7 @@ export declare class ColorConverter {
|
|
|
60
68
|
rgbToHsv: number;
|
|
61
69
|
hsvToRgb: number;
|
|
62
70
|
hexToHsv: number;
|
|
71
|
+
rgbToLab: number;
|
|
63
72
|
};
|
|
64
73
|
/**
|
|
65
74
|
* Convert hexadecimal color to RGB
|
|
@@ -142,5 +151,69 @@ export declare class ColorConverter {
|
|
|
142
151
|
* Static method: Calculate color distance using default instance
|
|
143
152
|
*/
|
|
144
153
|
static getColorDistance(hex1: string, hex2: string): number;
|
|
154
|
+
/**
|
|
155
|
+
* Convert RGB to CIE XYZ color space (intermediate step for LAB)
|
|
156
|
+
* Uses sRGB to XYZ conversion with D65 illuminant
|
|
157
|
+
* @internal
|
|
158
|
+
*/
|
|
159
|
+
private rgbToXyz;
|
|
160
|
+
/**
|
|
161
|
+
* Convert RGB to CIE LAB color space
|
|
162
|
+
* Per P-1: Cached for performance
|
|
163
|
+
* @example rgbToLab(255, 0, 0) -> { L: 53.23, a: 80.11, b: 67.22 }
|
|
164
|
+
*/
|
|
165
|
+
rgbToLab(r: number, g: number, b: number): LAB;
|
|
166
|
+
/**
|
|
167
|
+
* Static method: Convert RGB to LAB using default instance
|
|
168
|
+
*/
|
|
169
|
+
static rgbToLab(r: number, g: number, b: number): LAB;
|
|
170
|
+
/**
|
|
171
|
+
* Convert hex color to CIE LAB
|
|
172
|
+
* @example hexToLab("#FF0000") -> { L: 53.23, a: 80.11, b: 67.22 }
|
|
173
|
+
*/
|
|
174
|
+
hexToLab(hex: string): LAB;
|
|
175
|
+
/**
|
|
176
|
+
* Static method: Convert hex to LAB using default instance
|
|
177
|
+
*/
|
|
178
|
+
static hexToLab(hex: string): LAB;
|
|
179
|
+
/**
|
|
180
|
+
* Calculate DeltaE (CIE76) between two LAB colors
|
|
181
|
+
* Simple Euclidean distance in LAB space
|
|
182
|
+
* Fast but less perceptually accurate than CIE2000
|
|
183
|
+
* @returns DeltaE value (0 = identical, <1 imperceptible, <3 barely noticeable, >5 clearly different)
|
|
184
|
+
*/
|
|
185
|
+
getDeltaE76(lab1: LAB, lab2: LAB): number;
|
|
186
|
+
/**
|
|
187
|
+
* Static method: Calculate DeltaE76 using default instance
|
|
188
|
+
*/
|
|
189
|
+
static getDeltaE76(lab1: LAB, lab2: LAB): number;
|
|
190
|
+
/**
|
|
191
|
+
* Calculate DeltaE (CIEDE2000) between two LAB colors
|
|
192
|
+
* Industry standard for perceptual color difference
|
|
193
|
+
* More accurate but computationally expensive
|
|
194
|
+
* @returns DeltaE value (0 = identical, <1 imperceptible, <3 barely noticeable, >5 clearly different)
|
|
195
|
+
*/
|
|
196
|
+
getDeltaE2000(lab1: LAB, lab2: LAB): number;
|
|
197
|
+
/**
|
|
198
|
+
* Helper to calculate hue angle in degrees from a' and b'
|
|
199
|
+
* @internal
|
|
200
|
+
*/
|
|
201
|
+
private hueAngle;
|
|
202
|
+
/**
|
|
203
|
+
* Static method: Calculate DeltaE2000 using default instance
|
|
204
|
+
*/
|
|
205
|
+
static getDeltaE2000(lab1: LAB, lab2: LAB): number;
|
|
206
|
+
/**
|
|
207
|
+
* Calculate DeltaE between two hex colors using specified formula
|
|
208
|
+
* @param hex1 First hex color
|
|
209
|
+
* @param hex2 Second hex color
|
|
210
|
+
* @param formula DeltaE formula to use ('cie76' or 'cie2000')
|
|
211
|
+
* @returns DeltaE value
|
|
212
|
+
*/
|
|
213
|
+
getDeltaE(hex1: string, hex2: string, formula?: DeltaEFormula): number;
|
|
214
|
+
/**
|
|
215
|
+
* Static method: Calculate DeltaE using default instance
|
|
216
|
+
*/
|
|
217
|
+
static getDeltaE(hex1: string, hex2: string, formula?: DeltaEFormula): number;
|
|
145
218
|
}
|
|
146
219
|
//# sourceMappingURL=ColorConverter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColorConverter.d.ts","sourceRoot":"","sources":["../../../src/services/color/ColorConverter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"ColorConverter.d.ts","sourceRoot":"","sources":["../../../src/services/color/ColorConverter.ts"],"names":[],"mappings":"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"}
|