@xivdyetools/core 2.6.0 → 4.0.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.
- package/README.md +85 -67
- package/dist/blending/blending.d.ts +22 -0
- package/dist/blending/blending.d.ts.map +1 -0
- package/dist/blending/blending.js +129 -0
- package/dist/blending/blending.js.map +1 -0
- package/dist/blending/conversions.d.ts +53 -0
- package/dist/blending/conversions.d.ts.map +1 -0
- package/dist/blending/conversions.js +256 -0
- package/dist/blending/conversions.js.map +1 -0
- package/dist/blending/index.d.ts +8 -0
- package/dist/blending/index.d.ts.map +1 -0
- package/dist/blending/index.js +3 -0
- package/dist/blending/index.js.map +1 -0
- package/dist/blending/types.d.ts +36 -0
- package/dist/blending/types.d.ts.map +1 -0
- package/dist/blending/types.js +21 -0
- package/dist/blending/types.js.map +1 -0
- package/dist/config/band-calibration.d.ts +68 -0
- package/dist/config/band-calibration.d.ts.map +1 -0
- package/dist/config/band-calibration.js +196 -0
- package/dist/config/band-calibration.js.map +1 -0
- package/dist/config/band-vocabulary.d.ts +82 -0
- package/dist/config/band-vocabulary.d.ts.map +1 -0
- package/dist/config/band-vocabulary.js +117 -0
- package/dist/config/band-vocabulary.js.map +1 -0
- package/dist/config/consolidated-ids.js +2 -2
- package/dist/config/consolidated-ids.js.map +1 -1
- package/dist/config/dye-vocabulary.d.ts +45 -0
- package/dist/config/dye-vocabulary.d.ts.map +1 -0
- package/dist/config/dye-vocabulary.js +58 -0
- package/dist/config/dye-vocabulary.js.map +1 -0
- package/dist/config/facewear.d.ts +24 -0
- package/dist/config/facewear.d.ts.map +1 -0
- package/dist/config/facewear.js +35 -0
- package/dist/config/facewear.js.map +1 -0
- package/dist/config/learn-links.d.ts +70 -0
- package/dist/config/learn-links.d.ts.map +1 -0
- package/dist/config/learn-links.js +171 -0
- package/dist/config/learn-links.js.map +1 -0
- package/dist/config/product-links.d.ts +44 -0
- package/dist/config/product-links.d.ts.map +1 -0
- package/dist/config/product-links.js +44 -0
- package/dist/config/product-links.js.map +1 -0
- package/dist/constants/index.d.ts +14 -1
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +38 -22
- package/dist/constants/index.js.map +1 -1
- package/dist/data/character_colors/race_specific/hair_colors.json +1 -1
- package/dist/data/character_colors/race_specific/skin_colors.json +1 -1
- package/dist/data/dyes.json +1127 -0
- package/dist/data/facewear_colors.json +57 -0
- package/dist/data/locales/de.json +4 -50
- package/dist/data/locales/en.json +4 -50
- package/dist/data/locales/fr.json +4 -50
- package/dist/data/locales/ja.json +4 -50
- package/dist/data/locales/ko.json +4 -50
- package/dist/data/locales/zh.json +4 -50
- package/dist/data/presets.json +59 -301
- package/dist/index.d.ts +156 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +114 -10
- package/dist/index.js.map +1 -1
- package/dist/services/APIService.d.ts +39 -62
- package/dist/services/APIService.d.ts.map +1 -1
- package/dist/services/APIService.js +156 -150
- package/dist/services/APIService.js.map +1 -1
- package/dist/services/CharacterColorService.d.ts +4 -36
- package/dist/services/CharacterColorService.d.ts.map +1 -1
- package/dist/services/CharacterColorService.js +57 -79
- package/dist/services/CharacterColorService.js.map +1 -1
- package/dist/services/ColorService.d.ts +57 -68
- package/dist/services/ColorService.d.ts.map +1 -1
- package/dist/services/ColorService.js +86 -94
- package/dist/services/ColorService.js.map +1 -1
- package/dist/services/DyeService.d.ts +11 -104
- package/dist/services/DyeService.d.ts.map +1 -1
- package/dist/services/DyeService.js +19 -157
- package/dist/services/DyeService.js.map +1 -1
- package/dist/services/LocalizationService.d.ts +48 -59
- package/dist/services/LocalizationService.d.ts.map +1 -1
- package/dist/services/LocalizationService.js +86 -95
- package/dist/services/LocalizationService.js.map +1 -1
- package/dist/services/PaletteService.d.ts +8 -9
- package/dist/services/PaletteService.d.ts.map +1 -1
- package/dist/services/PaletteService.js +10 -22
- package/dist/services/PaletteService.js.map +1 -1
- package/dist/services/PresetService.d.ts +2 -34
- package/dist/services/PresetService.d.ts.map +1 -1
- package/dist/services/PresetService.js +12 -59
- package/dist/services/PresetService.js.map +1 -1
- package/dist/services/chara/chara-models.d.ts +68 -0
- package/dist/services/chara/chara-models.d.ts.map +1 -0
- package/dist/services/chara/chara-models.js +87 -0
- package/dist/services/chara/chara-models.js.map +1 -0
- package/dist/services/chara/chara-parser.d.ts +95 -0
- package/dist/services/chara/chara-parser.d.ts.map +1 -0
- package/dist/services/chara/chara-parser.js +299 -0
- package/dist/services/chara/chara-parser.js.map +1 -0
- package/dist/services/chara/chara-resolver.d.ts +103 -0
- package/dist/services/chara/chara-resolver.d.ts.map +1 -0
- package/dist/services/chara/chara-resolver.js +233 -0
- package/dist/services/chara/chara-resolver.js.map +1 -0
- package/dist/services/color/ColorConverter.d.ts +112 -35
- package/dist/services/color/ColorConverter.d.ts.map +1 -1
- package/dist/services/color/ColorConverter.js +205 -89
- package/dist/services/color/ColorConverter.js.map +1 -1
- package/dist/services/color/ColorManipulator.d.ts +11 -0
- package/dist/services/color/ColorManipulator.d.ts.map +1 -1
- package/dist/services/color/ColorManipulator.js +24 -9
- package/dist/services/color/ColorManipulator.js.map +1 -1
- package/dist/services/color/ColorblindnessSimulator.d.ts +17 -0
- package/dist/services/color/ColorblindnessSimulator.d.ts.map +1 -1
- package/dist/services/color/ColorblindnessSimulator.js +57 -3
- package/dist/services/color/ColorblindnessSimulator.js.map +1 -1
- package/dist/services/color/SpectralMixer.d.ts +0 -34
- package/dist/services/color/SpectralMixer.d.ts.map +1 -1
- package/dist/services/color/SpectralMixer.js +0 -73
- package/dist/services/color/SpectralMixer.js.map +1 -1
- package/dist/services/dye/DyeDatabase.d.ts +5 -21
- package/dist/services/dye/DyeDatabase.d.ts.map +1 -1
- package/dist/services/dye/DyeDatabase.js +98 -130
- package/dist/services/dye/DyeDatabase.js.map +1 -1
- package/dist/services/dye/DyeSearch.d.ts +17 -31
- package/dist/services/dye/DyeSearch.d.ts.map +1 -1
- package/dist/services/dye/DyeSearch.js +45 -141
- package/dist/services/dye/DyeSearch.js.map +1 -1
- package/dist/services/dye/HarmonyGenerator.d.ts +11 -18
- package/dist/services/dye/HarmonyGenerator.d.ts.map +1 -1
- package/dist/services/dye/HarmonyGenerator.js +33 -38
- package/dist/services/dye/HarmonyGenerator.js.map +1 -1
- package/dist/services/localization/LocaleLoader.d.ts.map +1 -1
- package/dist/services/localization/LocaleLoader.js +0 -1
- package/dist/services/localization/LocaleLoader.js.map +1 -1
- package/dist/services/localization/TranslationProvider.d.ts +1 -42
- package/dist/services/localization/TranslationProvider.d.ts.map +1 -1
- package/dist/services/localization/TranslationProvider.js +4 -82
- package/dist/services/localization/TranslationProvider.js.map +1 -1
- package/dist/types/index.d.ts +39 -52
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +50 -10
- package/dist/types/index.js.map +1 -1
- package/dist/utils/index.d.ts +36 -123
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +54 -413
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/kd-tree.d.ts +0 -4
- package/dist/utils/kd-tree.d.ts.map +1 -1
- package/dist/utils/kd-tree.js +0 -6
- package/dist/utils/kd-tree.js.map +1 -1
- package/package.json +24 -15
- package/dist/data/character_colors/index.json +0 -40
- package/dist/data/colors_xiv.json +0 -3538
- package/dist/version.d.ts +0 -11
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js +0 -11
- package/dist/version.js.map +0 -1
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Per R-4: Focused class for dye search and matching operations
|
|
4
4
|
* Handles finding dyes by name, category, color distance, etc.
|
|
5
5
|
*/
|
|
6
|
+
import { COLOR_DISTANCE_MAX } from '../../constants/index.js';
|
|
6
7
|
import { ColorConverter } from '../color/ColorConverter.js';
|
|
7
8
|
/**
|
|
8
9
|
* Dye search and matching utilities
|
|
@@ -22,26 +23,27 @@ export class DyeSearch {
|
|
|
22
23
|
* @param hex1 - First color in hex format
|
|
23
24
|
* @param hex2 - Second color in hex format
|
|
24
25
|
* @param method - Matching algorithm to use
|
|
25
|
-
* @param weights - Custom weights for oklch-weighted method
|
|
26
26
|
* @returns Distance value (lower = more similar)
|
|
27
27
|
*/
|
|
28
|
-
calculateDistance(hex1, hex2, method
|
|
28
|
+
calculateDistance(hex1, hex2, method) {
|
|
29
29
|
switch (method) {
|
|
30
30
|
case 'rgb':
|
|
31
31
|
return ColorConverter.getColorDistance(hex1, hex2);
|
|
32
|
+
case 'redmean':
|
|
33
|
+
return ColorConverter.getRedmeanDistance(hex1, hex2);
|
|
34
|
+
case 'distinguish':
|
|
35
|
+
// Unrounded percent: identical ranks to RGB DIST (no ranking ties);
|
|
36
|
+
// display rounding happens at the consumer, where ties badge TIE.
|
|
37
|
+
return (ColorConverter.getColorDistance(hex1, hex2) / COLOR_DISTANCE_MAX) * 100;
|
|
38
|
+
// The three perceptual methods share their spelling with DeltaEFormula
|
|
39
|
+
// (DEAD-037, 2026-08-18 audit) — no translation switch needed.
|
|
32
40
|
case 'cie76':
|
|
33
|
-
return ColorConverter.getDeltaE(hex1, hex2, 'cie76');
|
|
34
41
|
case 'ciede2000':
|
|
35
|
-
return ColorConverter.getDeltaE(hex1, hex2, 'cie2000');
|
|
36
42
|
case 'oklab':
|
|
37
|
-
return ColorConverter.
|
|
38
|
-
case 'hyab':
|
|
39
|
-
return ColorConverter.getDeltaE_HyAB(hex1, hex2);
|
|
40
|
-
case 'oklch-weighted':
|
|
41
|
-
return ColorConverter.getDeltaE_OklchWeighted(hex1, hex2, weights);
|
|
43
|
+
return ColorConverter.getDeltaE(hex1, hex2, method);
|
|
42
44
|
default:
|
|
43
|
-
// Default to
|
|
44
|
-
return ColorConverter.
|
|
45
|
+
// Default to dE2000 for unknown methods (the suite default)
|
|
46
|
+
return ColorConverter.getDeltaE(hex1, hex2, 'ciede2000');
|
|
45
47
|
}
|
|
46
48
|
}
|
|
47
49
|
/**
|
|
@@ -100,25 +102,25 @@ export class DyeSearch {
|
|
|
100
102
|
* Per P-7: Uses k-d tree for O(log n) initial candidates, then re-ranks
|
|
101
103
|
* using the specified perceptual distance algorithm.
|
|
102
104
|
*
|
|
103
|
-
* Per COLOR-MATCH-001: Supports
|
|
104
|
-
* - '
|
|
105
|
+
* Per COLOR-MATCH-001 (5.0 suite): Supports the six `MatchingMethod`s:
|
|
106
|
+
* - 'ciede2000': CIEDE2000 (industry standard, accurate) — the default
|
|
107
|
+
* - 'oklab': OKLAB Euclidean (modern, good balance)
|
|
105
108
|
* - 'cie76': CIE76 LAB Euclidean (fast, fair accuracy)
|
|
106
|
-
* - '
|
|
107
|
-
* - '
|
|
108
|
-
* - '
|
|
109
|
-
*
|
|
109
|
+
* - 'redmean': Redmean-weighted RGB (cheap perceptual approximation)
|
|
110
|
+
* - 'rgb': RGB Euclidean (fastest, least accurate)
|
|
111
|
+
* - 'distinguish': RGB distance as an unrounded percent of the max (same
|
|
112
|
+
* ranking as 'rgb'; display-only rounding happens at the consumer)
|
|
113
|
+
*
|
|
114
|
+
* The v4 methods 'hyab' / 'oklch-weighted' are retired; unknown values fall
|
|
115
|
+
* back to CIEDE2000 (see `normalizeMatchingMethod`).
|
|
110
116
|
*
|
|
111
117
|
* @param hex - Target color in hex format
|
|
112
|
-
* @param
|
|
118
|
+
* @param options - Options object (excludeIds, matchingMethod)
|
|
113
119
|
* @returns Closest matching dye, or null if none found
|
|
114
120
|
*/
|
|
115
|
-
findClosestDye(hex,
|
|
121
|
+
findClosestDye(hex, options = {}) {
|
|
116
122
|
this.database.ensureLoaded();
|
|
117
|
-
|
|
118
|
-
const options = Array.isArray(excludeIdsOrOptions)
|
|
119
|
-
? { excludeIds: excludeIdsOrOptions }
|
|
120
|
-
: excludeIdsOrOptions;
|
|
121
|
-
const { excludeIds = [], matchingMethod = 'oklab', weights } = options;
|
|
123
|
+
const { excludeIds = [], matchingMethod = 'ciede2000' } = options;
|
|
122
124
|
try {
|
|
123
125
|
const targetRgb = ColorConverter.hexToRgb(hex);
|
|
124
126
|
const targetPoint = {
|
|
@@ -141,51 +143,14 @@ export class DyeSearch {
|
|
|
141
143
|
return nearest.data;
|
|
142
144
|
}
|
|
143
145
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
});
|
|
153
|
-
// If we got candidates, re-rank using perceptual distance
|
|
154
|
-
if (candidateResults.length > 0) {
|
|
155
|
-
let bestDye = null;
|
|
156
|
-
let bestDistance = Infinity;
|
|
157
|
-
for (const result of candidateResults) {
|
|
158
|
-
if (!result.point.data)
|
|
159
|
-
continue;
|
|
160
|
-
const dye = result.point.data;
|
|
161
|
-
try {
|
|
162
|
-
const distance = this.calculateDistance(hex, dye.hex, matchingMethod, weights);
|
|
163
|
-
if (distance < bestDistance) {
|
|
164
|
-
bestDistance = distance;
|
|
165
|
-
bestDye = dye;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
catch {
|
|
169
|
-
// CORE-REF-001: Silently skip individual dyes with invalid color data
|
|
170
|
-
// This is intentional - logging per-dye errors would be too noisy for large datasets
|
|
171
|
-
// The dye data is pre-validated at load time, so this rarely occurs
|
|
172
|
-
continue;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
if (bestDye) {
|
|
176
|
-
return bestDye;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
// If no candidates within threshold, fall back to nearest neighbor
|
|
180
|
-
// and use that as our only candidate
|
|
181
|
-
const nearest = kdTree.nearestNeighbor(targetPoint, (data) => {
|
|
182
|
-
const dye = data;
|
|
183
|
-
return excludeSet.has(dye.id) || dye.category === 'Facewear';
|
|
184
|
-
});
|
|
185
|
-
if (nearest && nearest.data) {
|
|
186
|
-
return nearest.data;
|
|
187
|
-
}
|
|
188
|
-
}
|
|
146
|
+
// REFACTOR-003 (2026-07-18 audit): for perceptual methods, fall
|
|
147
|
+
// through to the exact linear scan below. The previous k-d tree
|
|
148
|
+
// pre-filter capped candidates at a magic RGB radius (100 units) —
|
|
149
|
+
// but perceptual metrics can rank a dye "closest" that sits far away
|
|
150
|
+
// in RGB space, and the parity regression test proved real cases
|
|
151
|
+
// (e.g. #00FF55/oklab: the true winner sat outside the radius while a
|
|
152
|
+
// 2.5×-worse in-radius dye was returned). At n≈125 the exact scan is
|
|
153
|
+
// trivially cheap; the k-d tree remains the fast path for 'rgb'.
|
|
189
154
|
}
|
|
190
155
|
// Fallback to linear search (shouldn't happen if k-d tree is built)
|
|
191
156
|
let closest = null;
|
|
@@ -196,7 +161,7 @@ export class DyeSearch {
|
|
|
196
161
|
continue;
|
|
197
162
|
}
|
|
198
163
|
try {
|
|
199
|
-
const distance = this.calculateDistance(hex, dye.hex, matchingMethod
|
|
164
|
+
const distance = this.calculateDistance(hex, dye.hex, matchingMethod);
|
|
200
165
|
if (distance < minDistance) {
|
|
201
166
|
minDistance = distance;
|
|
202
167
|
closest = dye;
|
|
@@ -226,17 +191,12 @@ export class DyeSearch {
|
|
|
226
191
|
* Per COLOR-MATCH-001: Supports multiple matching algorithms.
|
|
227
192
|
*
|
|
228
193
|
* @param hex - Target color in hex format
|
|
229
|
-
* @param
|
|
230
|
-
* @param limit - Maximum results (legacy parameter, use options.limit instead)
|
|
194
|
+
* @param options - Options object (maxDistance, limit, matchingMethod)
|
|
231
195
|
* @returns Array of dyes within the distance threshold
|
|
232
196
|
*/
|
|
233
|
-
findDyesWithinDistance(hex,
|
|
197
|
+
findDyesWithinDistance(hex, options) {
|
|
234
198
|
this.database.ensureLoaded();
|
|
235
|
-
|
|
236
|
-
const options = typeof maxDistanceOrOptions === 'number'
|
|
237
|
-
? { maxDistance: maxDistanceOrOptions, limit }
|
|
238
|
-
: maxDistanceOrOptions;
|
|
239
|
-
const { maxDistance, limit: resultLimit, matchingMethod = 'rgb', weights } = options;
|
|
199
|
+
const { maxDistance, limit: resultLimit, matchingMethod = 'ciede2000' } = options;
|
|
240
200
|
try {
|
|
241
201
|
const targetRgb = ColorConverter.hexToRgb(hex);
|
|
242
202
|
const targetPoint = {
|
|
@@ -256,35 +216,12 @@ export class DyeSearch {
|
|
|
256
216
|
}
|
|
257
217
|
return dyes;
|
|
258
218
|
}
|
|
259
|
-
//
|
|
260
|
-
//
|
|
261
|
-
//
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
//
|
|
265
|
-
const results = [];
|
|
266
|
-
for (const item of kdResults) {
|
|
267
|
-
const dye = item.point.data;
|
|
268
|
-
if (dye.category === 'Facewear')
|
|
269
|
-
continue;
|
|
270
|
-
try {
|
|
271
|
-
const distance = this.calculateDistance(hex, dye.hex, matchingMethod, weights);
|
|
272
|
-
if (distance <= maxDistance) {
|
|
273
|
-
results.push({ dye, distance });
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
catch {
|
|
277
|
-
// CORE-REF-001: Silently skip individual dyes with invalid color data
|
|
278
|
-
// Logging per-dye errors would be too noisy for large datasets
|
|
279
|
-
continue;
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
// Sort by perceptual distance
|
|
283
|
-
results.sort((a, b) => a.distance - b.distance);
|
|
284
|
-
if (resultLimit && resultLimit > 0) {
|
|
285
|
-
return results.slice(0, resultLimit).map((item) => item.dye);
|
|
286
|
-
}
|
|
287
|
-
return results.map((item) => item.dye);
|
|
219
|
+
// REFACTOR-003 (2026-07-18 audit): for perceptual methods, fall
|
|
220
|
+
// through to the exact linear scan below. The previous RGB pre-filter
|
|
221
|
+
// (`Math.max(maxDistance * 2, 150)`) multiplied a PERCEPTUAL distance
|
|
222
|
+
// (DeltaE / OKLAB units) by 2 to derive an RGB radius — the scales
|
|
223
|
+
// have no principled relationship, so qualifying dyes could be
|
|
224
|
+
// silently dropped. At n≈125 the exact scan is trivially cheap.
|
|
288
225
|
}
|
|
289
226
|
// Fallback to linear search
|
|
290
227
|
const results = [];
|
|
@@ -294,7 +231,7 @@ export class DyeSearch {
|
|
|
294
231
|
if (dye.category === 'Facewear') {
|
|
295
232
|
continue;
|
|
296
233
|
}
|
|
297
|
-
const distance = this.calculateDistance(hex, dye.hex, matchingMethod
|
|
234
|
+
const distance = this.calculateDistance(hex, dye.hex, matchingMethod);
|
|
298
235
|
if (distance <= maxDistance) {
|
|
299
236
|
results.push({ dye, distance });
|
|
300
237
|
}
|
|
@@ -318,38 +255,5 @@ export class DyeSearch {
|
|
|
318
255
|
return [];
|
|
319
256
|
}
|
|
320
257
|
}
|
|
321
|
-
/**
|
|
322
|
-
* Get dyes sorted by brightness
|
|
323
|
-
*/
|
|
324
|
-
getDyesSortedByBrightness(ascending = true) {
|
|
325
|
-
this.database.ensureLoaded();
|
|
326
|
-
return [...this.database.getDyesInternal()].sort((a, b) => {
|
|
327
|
-
const brightnessA = a.hsv.v;
|
|
328
|
-
const brightnessB = b.hsv.v;
|
|
329
|
-
return ascending ? brightnessA - brightnessB : brightnessB - brightnessA;
|
|
330
|
-
});
|
|
331
|
-
}
|
|
332
|
-
/**
|
|
333
|
-
* Get dyes sorted by saturation
|
|
334
|
-
*/
|
|
335
|
-
getDyesSortedBySaturation(ascending = true) {
|
|
336
|
-
this.database.ensureLoaded();
|
|
337
|
-
return [...this.database.getDyesInternal()].sort((a, b) => {
|
|
338
|
-
const satA = a.hsv.s;
|
|
339
|
-
const satB = b.hsv.s;
|
|
340
|
-
return ascending ? satA - satB : satB - satA;
|
|
341
|
-
});
|
|
342
|
-
}
|
|
343
|
-
/**
|
|
344
|
-
* Get dyes sorted by hue
|
|
345
|
-
*/
|
|
346
|
-
getDyesSortedByHue(ascending = true) {
|
|
347
|
-
this.database.ensureLoaded();
|
|
348
|
-
return [...this.database.getDyesInternal()].sort((a, b) => {
|
|
349
|
-
const hueA = a.hsv.h;
|
|
350
|
-
const hueB = b.hsv.h;
|
|
351
|
-
return ascending ? hueA - hueB : hueB - hueA;
|
|
352
|
-
});
|
|
353
|
-
}
|
|
354
258
|
}
|
|
355
259
|
//# sourceMappingURL=DyeSearch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DyeSearch.js","sourceRoot":"","sources":["../../../src/services/dye/DyeSearch.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DyeSearch.js","sourceRoot":"","sources":["../../../src/services/dye/DyeSearch.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,7 +52,7 @@ export interface HarmonyOptions {
|
|
|
52
52
|
* Maximum DeltaE distance for matching
|
|
53
53
|
* Only used when algorithm is 'deltaE'
|
|
54
54
|
* Higher values return more matches but less precise
|
|
55
|
-
* @default 40 (for cie76), 25 (for cie2000)
|
|
55
|
+
* @default 40 (for cie76), 25 (for ciede2000 / its 'cie2000' alias)
|
|
56
56
|
*/
|
|
57
57
|
deltaETolerance?: number;
|
|
58
58
|
}
|
|
@@ -124,16 +124,10 @@ export declare class HarmonyGenerator {
|
|
|
124
124
|
*/
|
|
125
125
|
findTetradicDyes(hex: string, options?: HarmonyOptions): Dye[];
|
|
126
126
|
/**
|
|
127
|
-
* Find
|
|
128
|
-
* Excludes Facewear dyes (generic names like "Red", "Blue")
|
|
127
|
+
* Find inverted tetradic color scheme (two complementary pairs, mirrored)
|
|
129
128
|
*
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
* @param options Matching algorithm options
|
|
133
|
-
*/
|
|
134
|
-
findMonochromaticDyes(hex: string, limit?: number, options?: HarmonyOptions): Dye[];
|
|
135
|
-
/**
|
|
136
|
-
* Find compound harmony (analogous + complementary)
|
|
129
|
+
* The mirror rectangle of tetradic: the second pair sits at −60° (300°)
|
|
130
|
+
* instead of +60°, biasing the palette to the opposite side of the wheel.
|
|
137
131
|
*
|
|
138
132
|
* @param hex Base hex color
|
|
139
133
|
* @param options Matching algorithm options
|
|
@@ -141,19 +135,18 @@ export declare class HarmonyGenerator {
|
|
|
141
135
|
* @remarks
|
|
142
136
|
* May return fewer than 3 dyes if suitable matches are not found.
|
|
143
137
|
*/
|
|
144
|
-
|
|
138
|
+
findInvertedTetradicDyes(hex: string, options?: HarmonyOptions): Dye[];
|
|
145
139
|
/**
|
|
146
|
-
* Find
|
|
140
|
+
* Find monochromatic dyes (same hue, varying saturation/brightness)
|
|
141
|
+
* Excludes Facewear dyes (generic names like "Red", "Blue")
|
|
147
142
|
*
|
|
148
143
|
* @param hex Base hex color
|
|
144
|
+
* @param limit Maximum number of dyes to return (default: 6)
|
|
149
145
|
* @param options Matching algorithm options
|
|
150
|
-
*
|
|
151
|
-
* @remarks
|
|
152
|
-
* May return 0, 1, or 2 dyes depending on available matches.
|
|
153
146
|
*/
|
|
154
|
-
|
|
147
|
+
findMonochromaticDyes(hex: string, limit?: number, options?: HarmonyOptions): Dye[];
|
|
155
148
|
/**
|
|
156
|
-
* Find
|
|
149
|
+
* Find split-complementary harmony (±30° from the complementary hue)
|
|
157
150
|
*
|
|
158
151
|
* @param hex Base hex color
|
|
159
152
|
* @param options Matching algorithm options
|
|
@@ -161,7 +154,7 @@ export declare class HarmonyGenerator {
|
|
|
161
154
|
* @remarks
|
|
162
155
|
* May return 0, 1, or 2 dyes depending on available matches.
|
|
163
156
|
*/
|
|
164
|
-
|
|
157
|
+
findSplitComplementaryDyes(hex: string, options?: HarmonyOptions): Dye[];
|
|
165
158
|
/**
|
|
166
159
|
* Generic helper for hue-based and DeltaE-based harmonies
|
|
167
160
|
*
|
|
@@ -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,oBAAoB,CAAC;AAE9C,OAAO,
|
|
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,oBAAoB,CAAC;AAE9C,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;;GAIG;AACH,MAAM,MAAM,wBAAwB,GAAG,KAAK,GAAG,QAAQ,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,SAAS,CAAC,EAAE,wBAAwB,CAAC;IAErC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAE/B;;;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;IAkCxE;;;;;;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;;;;;;;;;;;OAWG;IACH,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,GAAG,EAAE;IAKtE;;;;;;;OAOG;IACH,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,GAAG,EAAE;IAoEtF;;;;;;;;OAQG;IACH,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,GAAG,EAAE;IAIxE;;;;;;;;;;;;;;;;;;OAkBG;IACH,OAAO,CAAC,wBAAwB;IAkEhC;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAmBxB;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAoC3B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;CAsC5B"}
|
|
@@ -4,7 +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
|
+
import { ColorConverter, normalizeDeltaEFormula, } from '../color/ColorConverter.js';
|
|
8
8
|
/**
|
|
9
9
|
* Color harmony generator
|
|
10
10
|
* Per R-4: Single Responsibility - harmony generation only
|
|
@@ -25,19 +25,25 @@ export class HarmonyGenerator {
|
|
|
25
25
|
findComplementaryPair(hex, options) {
|
|
26
26
|
this.database.ensureLoaded();
|
|
27
27
|
try {
|
|
28
|
+
// BUG-047 (2026-07-18 audit): exclude the base dye — mirroring
|
|
29
|
+
// findHarmonyDyesByOffsets. For near-neutral inputs the inverse of a
|
|
30
|
+
// mid-gray is essentially the same color, so without the exclusion the
|
|
31
|
+
// "complement" was the base dye itself.
|
|
32
|
+
const baseDye = this.search.findClosestDye(hex);
|
|
33
|
+
const exclude = baseDye ? [baseDye.id] : [];
|
|
28
34
|
const colorSpace = options?.colorSpace;
|
|
29
35
|
// Non-HSV color spaces: use 180° hue rotation instead of RGB invert
|
|
30
36
|
if (colorSpace && colorSpace !== 'hsv') {
|
|
31
37
|
const complementaryHex = this.rotateHueInSpace(hex, 180, colorSpace);
|
|
32
|
-
return this.findClosestNonFacewearDye(complementaryHex);
|
|
38
|
+
return this.findClosestNonFacewearDye(complementaryHex, exclude);
|
|
33
39
|
}
|
|
34
40
|
const complementaryHex = ColorManipulator.invert(hex);
|
|
35
41
|
// Use DeltaE matching if requested
|
|
36
42
|
if (options?.algorithm === 'deltaE') {
|
|
37
|
-
return this.findClosestByDeltaE(complementaryHex, new Set(), options);
|
|
43
|
+
return this.findClosestByDeltaE(complementaryHex, new Set(exclude), options);
|
|
38
44
|
}
|
|
39
45
|
// Find closest dye, excluding Facewear
|
|
40
|
-
return this.findClosestNonFacewearDye(complementaryHex);
|
|
46
|
+
return this.findClosestNonFacewearDye(complementaryHex, exclude);
|
|
41
47
|
}
|
|
42
48
|
catch {
|
|
43
49
|
// Invalid hex color
|
|
@@ -53,7 +59,7 @@ export class HarmonyGenerator {
|
|
|
53
59
|
*/
|
|
54
60
|
findClosestNonFacewearDye(hex, excludeIds = []) {
|
|
55
61
|
// DyeSearch.findClosestDye already excludes Facewear dyes (CORE-BUG-005)
|
|
56
|
-
return this.search.findClosestDye(hex, excludeIds);
|
|
62
|
+
return this.search.findClosestDye(hex, { excludeIds });
|
|
57
63
|
}
|
|
58
64
|
/**
|
|
59
65
|
* Find analogous dyes (adjacent on color wheel)
|
|
@@ -109,6 +115,22 @@ export class HarmonyGenerator {
|
|
|
109
115
|
// Two adjacent hues + their complements (e.g., base+60 and base+240)
|
|
110
116
|
return this.findHarmonyDyesByOffsets(hex, [60, 180, 240], {}, options);
|
|
111
117
|
}
|
|
118
|
+
/**
|
|
119
|
+
* Find inverted tetradic color scheme (two complementary pairs, mirrored)
|
|
120
|
+
*
|
|
121
|
+
* The mirror rectangle of tetradic: the second pair sits at −60° (300°)
|
|
122
|
+
* instead of +60°, biasing the palette to the opposite side of the wheel.
|
|
123
|
+
*
|
|
124
|
+
* @param hex Base hex color
|
|
125
|
+
* @param options Matching algorithm options
|
|
126
|
+
*
|
|
127
|
+
* @remarks
|
|
128
|
+
* May return fewer than 3 dyes if suitable matches are not found.
|
|
129
|
+
*/
|
|
130
|
+
findInvertedTetradicDyes(hex, options) {
|
|
131
|
+
// Two complementary pairs: base↔base+180 and base+120↔base+300 (−60)
|
|
132
|
+
return this.findHarmonyDyesByOffsets(hex, [120, 180, 300], {}, options);
|
|
133
|
+
}
|
|
112
134
|
/**
|
|
113
135
|
* Find monochromatic dyes (same hue, varying saturation/brightness)
|
|
114
136
|
* Excludes Facewear dyes (generic names like "Red", "Blue")
|
|
@@ -126,15 +148,15 @@ export class HarmonyGenerator {
|
|
|
126
148
|
// DeltaE-based monochromatic search
|
|
127
149
|
if (options?.algorithm === 'deltaE') {
|
|
128
150
|
const baseLab = ColorConverter.hexToLab(baseDye.hex);
|
|
129
|
-
const formula = options.deltaEFormula ?? 'cie76';
|
|
130
|
-
const tolerance = options.deltaETolerance ?? (formula === '
|
|
151
|
+
const formula = normalizeDeltaEFormula(options.deltaEFormula ?? 'cie76');
|
|
152
|
+
const tolerance = options.deltaETolerance ?? (formula === 'ciede2000' ? 25 : 40);
|
|
131
153
|
const results = [];
|
|
132
154
|
for (const dye of dyes) {
|
|
133
155
|
if (dye.category === 'Facewear' || dye.id === baseDye.id)
|
|
134
156
|
continue;
|
|
135
157
|
// Use pre-computed LAB (always available for DyeInternal)
|
|
136
158
|
const dyeLab = dye.lab;
|
|
137
|
-
const deltaE = formula === '
|
|
159
|
+
const deltaE = formula === 'ciede2000'
|
|
138
160
|
? ColorConverter.getDeltaE2000(baseLab, dyeLab)
|
|
139
161
|
: ColorConverter.getDeltaE76(baseLab, dyeLab);
|
|
140
162
|
// For monochromatic, we want colors that are perceptually similar
|
|
@@ -171,19 +193,6 @@ export class HarmonyGenerator {
|
|
|
171
193
|
results.sort((a, b) => b.satValDiff - a.satValDiff);
|
|
172
194
|
return results.slice(0, limit).map((item) => item.dye);
|
|
173
195
|
}
|
|
174
|
-
/**
|
|
175
|
-
* Find compound harmony (analogous + complementary)
|
|
176
|
-
*
|
|
177
|
-
* @param hex Base hex color
|
|
178
|
-
* @param options Matching algorithm options
|
|
179
|
-
*
|
|
180
|
-
* @remarks
|
|
181
|
-
* May return fewer than 3 dyes if suitable matches are not found.
|
|
182
|
-
*/
|
|
183
|
-
findCompoundDyes(hex, options) {
|
|
184
|
-
// ±30° from base + complement
|
|
185
|
-
return this.findHarmonyDyesByOffsets(hex, [30, -30, 180], { tolerance: 35 }, options);
|
|
186
|
-
}
|
|
187
196
|
/**
|
|
188
197
|
* Find split-complementary harmony (±30° from the complementary hue)
|
|
189
198
|
*
|
|
@@ -196,20 +205,6 @@ export class HarmonyGenerator {
|
|
|
196
205
|
findSplitComplementaryDyes(hex, options) {
|
|
197
206
|
return this.findHarmonyDyesByOffsets(hex, [150, 210], {}, options);
|
|
198
207
|
}
|
|
199
|
-
/**
|
|
200
|
-
* Find shades (similar tones, ±15°)
|
|
201
|
-
*
|
|
202
|
-
* @param hex Base hex color
|
|
203
|
-
* @param options Matching algorithm options
|
|
204
|
-
*
|
|
205
|
-
* @remarks
|
|
206
|
-
* May return 0, 1, or 2 dyes depending on available matches.
|
|
207
|
-
*/
|
|
208
|
-
findShadesDyes(hex, options) {
|
|
209
|
-
this.database.ensureLoaded();
|
|
210
|
-
// Use tighter tolerance (5°) for shades to ensure results are close to target hue
|
|
211
|
-
return this.findHarmonyDyesByOffsets(hex, [15, -15], { tolerance: 5 }, options);
|
|
212
|
-
}
|
|
213
208
|
/**
|
|
214
209
|
* Generic helper for hue-based and DeltaE-based harmonies
|
|
215
210
|
*
|
|
@@ -308,8 +303,8 @@ export class HarmonyGenerator {
|
|
|
308
303
|
* @param options - DeltaE options (formula, tolerance)
|
|
309
304
|
*/
|
|
310
305
|
findClosestByDeltaE(targetHex, excludeIds, options) {
|
|
311
|
-
const formula = options.deltaEFormula ?? 'cie76';
|
|
312
|
-
const tolerance = options.deltaETolerance ?? (formula === '
|
|
306
|
+
const formula = normalizeDeltaEFormula(options.deltaEFormula ?? 'cie76');
|
|
307
|
+
const tolerance = options.deltaETolerance ?? (formula === 'ciede2000' ? 25 : 40);
|
|
313
308
|
const targetLab = ColorConverter.hexToLab(targetHex);
|
|
314
309
|
let bestMatch = null;
|
|
315
310
|
let bestDeltaE = Infinity;
|
|
@@ -320,7 +315,7 @@ export class HarmonyGenerator {
|
|
|
320
315
|
}
|
|
321
316
|
// Use pre-computed LAB (always available for DyeInternal)
|
|
322
317
|
const dyeLab = dye.lab;
|
|
323
|
-
const deltaE = formula === '
|
|
318
|
+
const deltaE = formula === 'ciede2000'
|
|
324
319
|
? ColorConverter.getDeltaE2000(targetLab, dyeLab)
|
|
325
320
|
: ColorConverter.getDeltaE76(targetLab, dyeLab);
|
|
326
321
|
if (deltaE < bestDeltaE) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HarmonyGenerator.js","sourceRoot":"","sources":["../../../src/services/dye/HarmonyGenerator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,
|
|
1
|
+
{"version":3,"file":"HarmonyGenerator.js","sourceRoot":"","sources":["../../../src/services/dye/HarmonyGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocaleLoader.d.ts","sourceRoot":"","sources":["../../../src/services/localization/LocaleLoader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAqBjE;;GAEG;AACH,qBAAa,YAAY;IACvB;;;;;;;;;;;;;OAaG;IACH,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU;IAuB1C;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;
|
|
1
|
+
{"version":3,"file":"LocaleLoader.d.ts","sourceRoot":"","sources":["../../../src/services/localization/LocaleLoader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAqBjE;;GAEG;AACH,qBAAa,YAAY;IACvB;;;;;;;;;;;;;OAaG;IACH,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU;IAuB1C;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;CAkB1B"}
|
|
@@ -75,7 +75,6 @@ export class LocaleLoader {
|
|
|
75
75
|
typeof localeData.dyeNames === 'object' &&
|
|
76
76
|
typeof localeData.categories === 'object' &&
|
|
77
77
|
typeof localeData.acquisitions === 'object' &&
|
|
78
|
-
Array.isArray(localeData.metallicDyeIds) &&
|
|
79
78
|
typeof localeData.harmonyTypes === 'object' &&
|
|
80
79
|
typeof localeData.visionTypes === 'object');
|
|
81
80
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocaleLoader.js","sourceRoot":"","sources":["../../../src/services/localization/LocaleLoader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEzD,2DAA2D;AAC3D,OAAO,QAAQ,MAAM,4BAA4B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxE,OAAO,QAAQ,MAAM,4BAA4B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxE,OAAO,QAAQ,MAAM,4BAA4B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxE,OAAO,QAAQ,MAAM,4BAA4B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxE,OAAO,QAAQ,MAAM,4BAA4B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxE,OAAO,QAAQ,MAAM,4BAA4B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAExE,yCAAyC;AACzC,MAAM,SAAS,GAAgC;IAC7C,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;CACb,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,YAAY;IACvB;;;;;;;;;;;;;OAaG;IACH,UAAU,CAAC,MAAkB;QAC3B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;YAE/B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,gCAAgC,CAAC,CAAC;YACrE,CAAC;YAED,qBAAqB;YACrB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,qCAAqC,MAAM,EAAE,CAAC,CAAC;YACjE,CAAC;YAED,OAAO,IAAkB,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,kBAAkB,EAC5B,0BAA0B,MAAM,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,EAChG,OAAO,CACR,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACK,iBAAiB,CAAC,IAAa;QACrC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,UAAU,GAAG,IAA+B,CAAC;QAEnD,OAAO,CACL,OAAO,UAAU,CAAC,MAAM,KAAK,QAAQ;YACrC,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ;YACnC,OAAO,UAAU,CAAC,MAAM,KAAK,QAAQ;YACrC,OAAO,UAAU,CAAC,QAAQ,KAAK,QAAQ;YACvC,OAAO,UAAU,CAAC,UAAU,KAAK,QAAQ;YACzC,OAAO,UAAU,CAAC,YAAY,KAAK,QAAQ;YAC3C,
|
|
1
|
+
{"version":3,"file":"LocaleLoader.js","sourceRoot":"","sources":["../../../src/services/localization/LocaleLoader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEzD,2DAA2D;AAC3D,OAAO,QAAQ,MAAM,4BAA4B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxE,OAAO,QAAQ,MAAM,4BAA4B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxE,OAAO,QAAQ,MAAM,4BAA4B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxE,OAAO,QAAQ,MAAM,4BAA4B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxE,OAAO,QAAQ,MAAM,4BAA4B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxE,OAAO,QAAQ,MAAM,4BAA4B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAExE,yCAAyC;AACzC,MAAM,SAAS,GAAgC;IAC7C,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;CACb,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,YAAY;IACvB;;;;;;;;;;;;;OAaG;IACH,UAAU,CAAC,MAAkB;QAC3B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;YAE/B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,gCAAgC,CAAC,CAAC;YACrE,CAAC;YAED,qBAAqB;YACrB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,qCAAqC,MAAM,EAAE,CAAC,CAAC;YACjE,CAAC;YAED,OAAO,IAAkB,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,kBAAkB,EAC5B,0BAA0B,MAAM,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,EAChG,OAAO,CACR,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACK,iBAAiB,CAAC,IAAa;QACrC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,UAAU,GAAG,IAA+B,CAAC;QAEnD,OAAO,CACL,OAAO,UAAU,CAAC,MAAM,KAAK,QAAQ;YACrC,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ;YACnC,OAAO,UAAU,CAAC,MAAM,KAAK,QAAQ;YACrC,OAAO,UAAU,CAAC,QAAQ,KAAK,QAAQ;YACvC,OAAO,UAAU,CAAC,UAAU,KAAK,QAAQ;YACzC,OAAO,UAAU,CAAC,YAAY,KAAK,QAAQ;YAC3C,OAAO,UAAU,CAAC,YAAY,KAAK,QAAQ;YAC3C,OAAO,UAAU,CAAC,WAAW,KAAK,QAAQ,CAC3C,CAAC;IACJ,CAAC;CACF"}
|