@xivdyetools/core 1.3.7
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/LICENSE +37 -0
- package/README.md +400 -0
- package/dist/constants/index.d.ts +56 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +103 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/data/colors_xiv.json +3130 -0
- package/dist/data/locales/de.json +231 -0
- package/dist/data/locales/en.json +231 -0
- package/dist/data/locales/fr.json +231 -0
- package/dist/data/locales/ja.json +231 -0
- package/dist/data/locales/ko.json +233 -0
- package/dist/data/locales/zh.json +233 -0
- package/dist/data/presets.json +390 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/services/APIService.d.ts +246 -0
- package/dist/services/APIService.d.ts.map +1 -0
- package/dist/services/APIService.js +499 -0
- package/dist/services/APIService.js.map +1 -0
- package/dist/services/ColorService.d.ts +146 -0
- package/dist/services/ColorService.d.ts.map +1 -0
- package/dist/services/ColorService.js +209 -0
- package/dist/services/ColorService.js.map +1 -0
- package/dist/services/DyeService.d.ts +230 -0
- package/dist/services/DyeService.d.ts.map +1 -0
- package/dist/services/DyeService.js +326 -0
- package/dist/services/DyeService.js.map +1 -0
- package/dist/services/LocalizationService.d.ts +338 -0
- package/dist/services/LocalizationService.d.ts.map +1 -0
- package/dist/services/LocalizationService.js +449 -0
- package/dist/services/LocalizationService.js.map +1 -0
- package/dist/services/PaletteService.d.ts +137 -0
- package/dist/services/PaletteService.d.ts.map +1 -0
- package/dist/services/PaletteService.js +349 -0
- package/dist/services/PaletteService.js.map +1 -0
- package/dist/services/PresetService.d.ts +196 -0
- package/dist/services/PresetService.d.ts.map +1 -0
- package/dist/services/PresetService.js +261 -0
- package/dist/services/PresetService.js.map +1 -0
- package/dist/services/color/ColorAccessibility.d.ts +39 -0
- package/dist/services/color/ColorAccessibility.d.ts.map +1 -0
- package/dist/services/color/ColorAccessibility.js +71 -0
- package/dist/services/color/ColorAccessibility.js.map +1 -0
- package/dist/services/color/ColorConverter.d.ts +146 -0
- package/dist/services/color/ColorConverter.d.ts.map +1 -0
- package/dist/services/color/ColorConverter.js +393 -0
- package/dist/services/color/ColorConverter.js.map +1 -0
- package/dist/services/color/ColorManipulator.d.ts +36 -0
- package/dist/services/color/ColorManipulator.d.ts.map +1 -0
- package/dist/services/color/ColorManipulator.js +56 -0
- package/dist/services/color/ColorManipulator.js.map +1 -0
- package/dist/services/color/ColorblindnessSimulator.d.ts +35 -0
- package/dist/services/color/ColorblindnessSimulator.d.ts.map +1 -0
- package/dist/services/color/ColorblindnessSimulator.js +110 -0
- package/dist/services/color/ColorblindnessSimulator.js.map +1 -0
- package/dist/services/dye/DyeDatabase.d.ts +131 -0
- package/dist/services/dye/DyeDatabase.d.ts.map +1 -0
- package/dist/services/dye/DyeDatabase.js +367 -0
- package/dist/services/dye/DyeDatabase.js.map +1 -0
- package/dist/services/dye/DyeSearch.d.ts +55 -0
- package/dist/services/dye/DyeSearch.d.ts.map +1 -0
- package/dist/services/dye/DyeSearch.js +196 -0
- package/dist/services/dye/DyeSearch.js.map +1 -0
- package/dist/services/dye/HarmonyGenerator.d.ts +110 -0
- package/dist/services/dye/HarmonyGenerator.d.ts.map +1 -0
- package/dist/services/dye/HarmonyGenerator.js +221 -0
- package/dist/services/dye/HarmonyGenerator.js.map +1 -0
- package/dist/services/localization/LocaleLoader.d.ts +38 -0
- package/dist/services/localization/LocaleLoader.d.ts.map +1 -0
- package/dist/services/localization/LocaleLoader.js +83 -0
- package/dist/services/localization/LocaleLoader.js.map +1 -0
- package/dist/services/localization/LocaleRegistry.d.ts +73 -0
- package/dist/services/localization/LocaleRegistry.d.ts.map +1 -0
- package/dist/services/localization/LocaleRegistry.js +84 -0
- package/dist/services/localization/LocaleRegistry.js.map +1 -0
- package/dist/services/localization/TranslationProvider.d.ts +157 -0
- package/dist/services/localization/TranslationProvider.d.ts.map +1 -0
- package/dist/services/localization/TranslationProvider.js +289 -0
- package/dist/services/localization/TranslationProvider.js.map +1 -0
- package/dist/types/index.d.ts +409 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +87 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/logger.d.ts +84 -0
- package/dist/types/logger.d.ts.map +1 -0
- package/dist/types/logger.js +54 -0
- package/dist/types/logger.js.map +1 -0
- package/dist/utils/index.d.ts +441 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +577 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/kd-tree.d.ts +76 -0
- package/dist/utils/kd-tree.d.ts.map +1 -0
- package/dist/utils/kd-tree.js +195 -0
- package/dist/utils/kd-tree.js.map +1 -0
- package/dist/version.d.ts +11 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +11 -0
- package/dist/version.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* k-d Tree implementation for 3D color space (RGB)
|
|
3
|
+
* Per P-7: Spatial indexing for fast nearest neighbor search
|
|
4
|
+
*
|
|
5
|
+
* k-d tree provides O(log n) average case for nearest neighbor queries
|
|
6
|
+
* vs O(n) for linear search, significant improvement for color matching
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* k-d Tree node
|
|
10
|
+
*/
|
|
11
|
+
class KDNode {
|
|
12
|
+
constructor(point, dimension) {
|
|
13
|
+
this.left = null;
|
|
14
|
+
this.right = null;
|
|
15
|
+
this.point = point;
|
|
16
|
+
this.dimension = dimension;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* k-d Tree for 3D color space (RGB)
|
|
21
|
+
* Optimized for nearest neighbor search in color matching
|
|
22
|
+
*/
|
|
23
|
+
export class KDTree {
|
|
24
|
+
/**
|
|
25
|
+
* Build k-d tree from array of points
|
|
26
|
+
* @param points - Array of 3D points (RGB colors)
|
|
27
|
+
*/
|
|
28
|
+
constructor(points) {
|
|
29
|
+
this.root = null;
|
|
30
|
+
this.size = 0;
|
|
31
|
+
if (points.length > 0) {
|
|
32
|
+
// CORE-PERF-002: Use index-based construction to reduce memory allocations
|
|
33
|
+
// Instead of slicing point arrays (O(n) copy each time), we pass index arrays
|
|
34
|
+
// which are much smaller and reduce GC pressure
|
|
35
|
+
const indices = points.map((_, i) => i);
|
|
36
|
+
this.root = this.buildTreeOptimized(points, indices, 0);
|
|
37
|
+
this.size = points.length;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Recursively build k-d tree using index arrays
|
|
42
|
+
* CORE-PERF-002: Optimized to reduce temporary array allocations
|
|
43
|
+
* @param points - Full points array (never copied)
|
|
44
|
+
* @param indices - Indices into points array for current subtree
|
|
45
|
+
* @param depth - Current depth (determines splitting dimension)
|
|
46
|
+
*/
|
|
47
|
+
buildTreeOptimized(points, indices, depth) {
|
|
48
|
+
if (indices.length === 0) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
if (indices.length === 1) {
|
|
52
|
+
return new KDNode(points[indices[0]], depth % 3);
|
|
53
|
+
}
|
|
54
|
+
// Select dimension to split on (alternate R, G, B)
|
|
55
|
+
const dimension = depth % 3;
|
|
56
|
+
// Sort indices by the value at that dimension (smaller allocations than sorting full points)
|
|
57
|
+
indices.sort((a, b) => {
|
|
58
|
+
const aPoint = points[a];
|
|
59
|
+
const bPoint = points[b];
|
|
60
|
+
const aVal = dimension === 0 ? aPoint.x : dimension === 1 ? aPoint.y : aPoint.z;
|
|
61
|
+
const bVal = dimension === 0 ? bPoint.x : dimension === 1 ? bPoint.y : bPoint.z;
|
|
62
|
+
return aVal - bVal;
|
|
63
|
+
});
|
|
64
|
+
// Find median
|
|
65
|
+
const median = Math.floor(indices.length / 2);
|
|
66
|
+
const medianPoint = points[indices[median]];
|
|
67
|
+
// Create node
|
|
68
|
+
const node = new KDNode(medianPoint, dimension);
|
|
69
|
+
// Recursively build left and right subtrees using index slices
|
|
70
|
+
// Index arrays are much smaller than point arrays (just numbers vs objects)
|
|
71
|
+
node.left = this.buildTreeOptimized(points, indices.slice(0, median), depth + 1);
|
|
72
|
+
node.right = this.buildTreeOptimized(points, indices.slice(median + 1), depth + 1);
|
|
73
|
+
return node;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Calculate Euclidean distance between two points
|
|
77
|
+
*/
|
|
78
|
+
distance(p1, p2) {
|
|
79
|
+
const dx = p1.x - p2.x;
|
|
80
|
+
const dy = p1.y - p2.y;
|
|
81
|
+
const dz = p1.z - p2.z;
|
|
82
|
+
return Math.sqrt(dx * dx + dy * dy + dz * dz);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Find nearest neighbor to target point
|
|
86
|
+
* @param target - Target point to search for
|
|
87
|
+
* @param excludeData - Optional function to exclude certain data points
|
|
88
|
+
* @returns Nearest point or null if tree is empty
|
|
89
|
+
*/
|
|
90
|
+
nearestNeighbor(target, excludeData) {
|
|
91
|
+
if (!this.root) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
const best = this.searchNearest(this.root, target, 0, null, excludeData);
|
|
95
|
+
return best?.point ?? null;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Recursive nearest neighbor search
|
|
99
|
+
*/
|
|
100
|
+
searchNearest(node, target, depth, best, excludeData) {
|
|
101
|
+
if (!node) {
|
|
102
|
+
return best;
|
|
103
|
+
}
|
|
104
|
+
const dimension = node.dimension;
|
|
105
|
+
const nodeValue = dimension === 0 ? node.point.x : dimension === 1 ? node.point.y : node.point.z;
|
|
106
|
+
const targetValue = dimension === 0 ? target.x : dimension === 1 ? target.y : target.z;
|
|
107
|
+
// Check if current node is better
|
|
108
|
+
if (!excludeData || !excludeData(node.point.data)) {
|
|
109
|
+
const dist = this.distance(target, node.point);
|
|
110
|
+
if (!best || dist < best.distance) {
|
|
111
|
+
best = { point: node.point, distance: dist };
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// Determine which side to search first
|
|
115
|
+
const isLeft = targetValue < nodeValue;
|
|
116
|
+
const nearChild = isLeft ? node.left : node.right;
|
|
117
|
+
const farChild = isLeft ? node.right : node.left;
|
|
118
|
+
// Search near side
|
|
119
|
+
if (nearChild) {
|
|
120
|
+
best = this.searchNearest(nearChild, target, depth + 1, best, excludeData);
|
|
121
|
+
}
|
|
122
|
+
// Check if we need to search far side
|
|
123
|
+
// Use <= to handle edge case where target is exactly on splitting plane
|
|
124
|
+
if (farChild && best) {
|
|
125
|
+
const axisDistance = Math.abs(targetValue - nodeValue);
|
|
126
|
+
if (axisDistance <= best.distance) {
|
|
127
|
+
best = this.searchNearest(farChild, target, depth + 1, best, excludeData);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return best;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Find all points within a distance threshold
|
|
134
|
+
* @param target - Target point
|
|
135
|
+
* @param maxDistance - Maximum distance
|
|
136
|
+
* @param excludeData - Optional function to exclude certain data points
|
|
137
|
+
* @returns Array of points within distance, sorted by distance
|
|
138
|
+
*/
|
|
139
|
+
pointsWithinDistance(target, maxDistance, excludeData) {
|
|
140
|
+
if (!this.root) {
|
|
141
|
+
return [];
|
|
142
|
+
}
|
|
143
|
+
const results = [];
|
|
144
|
+
this.searchWithinDistance(this.root, target, 0, maxDistance, results, excludeData);
|
|
145
|
+
// Sort by distance
|
|
146
|
+
results.sort((a, b) => a.distance - b.distance);
|
|
147
|
+
return results;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Recursive search for points within distance
|
|
151
|
+
*/
|
|
152
|
+
searchWithinDistance(node, target, depth, maxDistance, results, excludeData) {
|
|
153
|
+
if (!node) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
const dimension = node.dimension;
|
|
157
|
+
const nodeValue = dimension === 0 ? node.point.x : dimension === 1 ? node.point.y : node.point.z;
|
|
158
|
+
const targetValue = dimension === 0 ? target.x : dimension === 1 ? target.y : target.z;
|
|
159
|
+
// Check if current node is within distance
|
|
160
|
+
if (!excludeData || !excludeData(node.point.data)) {
|
|
161
|
+
const dist = this.distance(target, node.point);
|
|
162
|
+
if (dist <= maxDistance) {
|
|
163
|
+
results.push({ point: node.point, distance: dist });
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// Determine which side to search
|
|
167
|
+
const isLeft = targetValue < nodeValue;
|
|
168
|
+
const nearChild = isLeft ? node.left : node.right;
|
|
169
|
+
const farChild = isLeft ? node.right : node.left;
|
|
170
|
+
// Search near side
|
|
171
|
+
if (nearChild) {
|
|
172
|
+
this.searchWithinDistance(nearChild, target, depth + 1, maxDistance, results, excludeData);
|
|
173
|
+
}
|
|
174
|
+
// Check if we need to search far side
|
|
175
|
+
if (farChild) {
|
|
176
|
+
const axisDistance = Math.abs(targetValue - nodeValue);
|
|
177
|
+
if (axisDistance <= maxDistance) {
|
|
178
|
+
this.searchWithinDistance(farChild, target, depth + 1, maxDistance, results, excludeData);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Get tree size
|
|
184
|
+
*/
|
|
185
|
+
getSize() {
|
|
186
|
+
return this.size;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Check if tree is empty
|
|
190
|
+
*/
|
|
191
|
+
isEmpty() {
|
|
192
|
+
return this.size === 0;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=kd-tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kd-tree.js","sourceRoot":"","sources":["../../src/utils/kd-tree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-generated version file
|
|
3
|
+
* DO NOT EDIT MANUALLY - Generated from package.json during build
|
|
4
|
+
* @see scripts/generate-version.ts
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Current library version
|
|
8
|
+
* Automatically synced with package.json version
|
|
9
|
+
*/
|
|
10
|
+
export declare const VERSION = "1.3.7";
|
|
11
|
+
//# sourceMappingURL=version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,eAAO,MAAM,OAAO,UAAU,CAAC"}
|
package/dist/version.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-generated version file
|
|
3
|
+
* DO NOT EDIT MANUALLY - Generated from package.json during build
|
|
4
|
+
* @see scripts/generate-version.ts
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Current library version
|
|
8
|
+
* Automatically synced with package.json version
|
|
9
|
+
*/
|
|
10
|
+
export const VERSION = '1.3.7';
|
|
11
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@xivdyetools/core",
|
|
3
|
+
"version": "1.3.7",
|
|
4
|
+
"description": "Core color algorithms and dye database for XIV Dye Tools",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist",
|
|
10
|
+
"README.md"
|
|
11
|
+
],
|
|
12
|
+
"scripts": {
|
|
13
|
+
"build": "npm run build:version && npm run build:locales && tsc && npm run copy:locales",
|
|
14
|
+
"build:version": "tsx scripts/generate-version.ts",
|
|
15
|
+
"build:locales": "tsx scripts/build-locales.ts",
|
|
16
|
+
"copy:locales": "tsx scripts/copy-locales.ts",
|
|
17
|
+
"prebuild": "npm run build:locales",
|
|
18
|
+
"test": "vitest run",
|
|
19
|
+
"test:watch": "vitest",
|
|
20
|
+
"test:integration": "vitest run src/__tests__/integration",
|
|
21
|
+
"test:coverage": "vitest run --coverage",
|
|
22
|
+
"test:coverage:watch": "vitest --coverage",
|
|
23
|
+
"test:coverage:ui": "vitest --coverage --ui",
|
|
24
|
+
"test:threshold": "vitest run --coverage --reporter=verbose",
|
|
25
|
+
"lint": "eslint src --ext .ts",
|
|
26
|
+
"lint:fix": "eslint src --ext .ts --fix",
|
|
27
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
28
|
+
"format:check": "prettier --check \"src/**/*.ts\"",
|
|
29
|
+
"type-check": "tsc --noEmit",
|
|
30
|
+
"docs": "typedoc",
|
|
31
|
+
"docs:watch": "typedoc --watch",
|
|
32
|
+
"prepublishOnly": "npm run build",
|
|
33
|
+
"prepare": "husky install || true"
|
|
34
|
+
},
|
|
35
|
+
"keywords": [
|
|
36
|
+
"ffxiv",
|
|
37
|
+
"final-fantasy-xiv",
|
|
38
|
+
"color",
|
|
39
|
+
"dye",
|
|
40
|
+
"harmony",
|
|
41
|
+
"accessibility",
|
|
42
|
+
"colorblind",
|
|
43
|
+
"color-theory",
|
|
44
|
+
"rgb",
|
|
45
|
+
"hsv",
|
|
46
|
+
"universalis"
|
|
47
|
+
],
|
|
48
|
+
"author": "Flash Galatine",
|
|
49
|
+
"license": "MIT",
|
|
50
|
+
"homepage": "https://github.com/FlashGalatine/xivdyetools-core#readme",
|
|
51
|
+
"bugs": {
|
|
52
|
+
"url": "https://github.com/FlashGalatine/xivdyetools-core/issues"
|
|
53
|
+
},
|
|
54
|
+
"repository": {
|
|
55
|
+
"type": "git",
|
|
56
|
+
"url": "git+https://github.com/FlashGalatine/xivdyetools-core.git"
|
|
57
|
+
},
|
|
58
|
+
"devDependencies": {
|
|
59
|
+
"@types/node": "^20.10.0",
|
|
60
|
+
"@typescript-eslint/eslint-plugin": "^6.15.0",
|
|
61
|
+
"@typescript-eslint/parser": "^6.15.0",
|
|
62
|
+
"@vitest/coverage-v8": "^4.0.14",
|
|
63
|
+
"csv-parse": "^5.5.0",
|
|
64
|
+
"eslint": "^8.55.0",
|
|
65
|
+
"husky": "^8.0.3",
|
|
66
|
+
"lint-staged": "^15.2.0",
|
|
67
|
+
"prettier": "^3.1.1",
|
|
68
|
+
"tsx": "^4.7.0",
|
|
69
|
+
"typedoc": "^0.28.14",
|
|
70
|
+
"typedoc-plugin-markdown": "^4.9.0",
|
|
71
|
+
"typescript": "^5.3.2",
|
|
72
|
+
"vitest": "^4.0.13",
|
|
73
|
+
"yaml": "^2.3.4"
|
|
74
|
+
},
|
|
75
|
+
"engines": {
|
|
76
|
+
"node": ">=18.0.0"
|
|
77
|
+
},
|
|
78
|
+
"lint-staged": {
|
|
79
|
+
"*.ts": [
|
|
80
|
+
"eslint --fix",
|
|
81
|
+
"prettier --write"
|
|
82
|
+
]
|
|
83
|
+
}
|
|
84
|
+
}
|