@xivdyetools/core 2.3.0 → 2.4.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.
@@ -2,7 +2,7 @@
2
2
  "locale": "de",
3
3
  "meta": {
4
4
  "version": "1.0.0",
5
- "generated": "2026-04-01T14:29:36.924Z",
5
+ "generated": "2026-04-03T22:41:12.360Z",
6
6
  "dyeCount": 125
7
7
  },
8
8
  "labels": {
@@ -2,7 +2,7 @@
2
2
  "locale": "en",
3
3
  "meta": {
4
4
  "version": "1.0.0",
5
- "generated": "2026-04-01T14:29:36.923Z",
5
+ "generated": "2026-04-03T22:41:12.359Z",
6
6
  "dyeCount": 125
7
7
  },
8
8
  "labels": {
@@ -2,7 +2,7 @@
2
2
  "locale": "fr",
3
3
  "meta": {
4
4
  "version": "1.0.0",
5
- "generated": "2026-04-01T14:29:36.925Z",
5
+ "generated": "2026-04-03T22:41:12.361Z",
6
6
  "dyeCount": 125
7
7
  },
8
8
  "labels": {
@@ -2,7 +2,7 @@
2
2
  "locale": "ja",
3
3
  "meta": {
4
4
  "version": "1.0.0",
5
- "generated": "2026-04-01T14:29:36.924Z",
5
+ "generated": "2026-04-03T22:41:12.360Z",
6
6
  "dyeCount": 125
7
7
  },
8
8
  "labels": {
@@ -2,7 +2,7 @@
2
2
  "locale": "ko",
3
3
  "meta": {
4
4
  "version": "1.0.0",
5
- "generated": "2026-04-01T14:29:36.925Z",
5
+ "generated": "2026-04-03T22:41:12.361Z",
6
6
  "dyeCount": 125
7
7
  },
8
8
  "labels": {
@@ -2,7 +2,7 @@
2
2
  "locale": "zh",
3
3
  "meta": {
4
4
  "version": "1.0.0",
5
- "generated": "2026-04-01T14:29:36.926Z",
5
+ "generated": "2026-04-03T22:41:12.362Z",
6
6
  "dyeCount": 125
7
7
  },
8
8
  "labels": {
package/dist/index.d.ts CHANGED
@@ -14,6 +14,7 @@ export type { HarmonyOptions, HarmonyMatchingAlgorithm, HarmonyColorSpace, } fro
14
14
  export type { DeltaEFormula } from './services/color/ColorConverter.js';
15
15
  export type { RYB } from './services/ColorService.js';
16
16
  export type { FindClosestOptions, FindWithinDistanceOptions } from './services/dye/DyeSearch.js';
17
+ export { isDyeExcluded, filterDyes, hasActiveFilters, EXPENSIVE_DYE_IDS, VENDOR_ACQUISITIONS, CRAFT_ACQUISITIONS, ALLIED_SOCIETY_ACQUISITIONS, } from './services/dye/DyeFilter.js';
17
18
  export { MATCHING_PRESETS, } from './types/index.js';
18
19
  export { CONSOLIDATED_IDS, isConsolidationActive, getMarketItemID, } from './config/consolidated-ids.js';
19
20
  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';
@@ -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,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,YAAY,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,YAAY,EACV,wBAAwB,EACxB,cAAc,EACd,YAAY,EACZ,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,qBAAqB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,qCAAqC,CAAC;AAG7C,YAAY,EACV,cAAc,EACd,YAAY,EACZ,cAAc,GACf,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EACV,cAAc,EACd,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,oCAAoC,CAAC;AAG5C,YAAY,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACxE,YAAY,EAAE,GAAG,EAAE,MAAM,4BAA4B,CAAC;AAGtD,YAAY,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACjG,OAAO,EAEL,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,GAChB,MAAM,8BAA8B,CAAC;AAGtC,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;AAGlF,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,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,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,YAAY,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,YAAY,EACV,wBAAwB,EACxB,cAAc,EACd,YAAY,EACZ,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,qBAAqB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,qCAAqC,CAAC;AAG7C,YAAY,EACV,cAAc,EACd,YAAY,EACZ,cAAc,GACf,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EACV,cAAc,EACd,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,oCAAoC,CAAC;AAG5C,YAAY,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACxE,YAAY,EAAE,GAAG,EAAE,MAAM,4BAA4B,CAAC;AAGtD,YAAY,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAGjG,OAAO,EACL,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAEL,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,GAChB,MAAM,8BAA8B,CAAC;AAGtC,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;AAGlF,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js CHANGED
@@ -7,6 +7,8 @@ export { LocalizationService } from './services/LocalizationService.js';
7
7
  export { PresetService } from './services/PresetService.js';
8
8
  export { PaletteService } from './services/PaletteService.js';
9
9
  export { CharacterColorService, } from './services/CharacterColorService.js';
10
+ // Dye filtering
11
+ export { isDyeExcluded, filterDyes, hasActiveFilters, EXPENSIVE_DYE_IDS, VENDOR_ACQUISITIONS, CRAFT_ACQUISITIONS, ALLIED_SOCIETY_ACQUISITIONS, } from './services/dye/DyeFilter.js';
10
12
  export {
11
13
  // Color matching presets (core-specific, not deprecated)
12
14
  MATCHING_PRESETS, } from './types/index.js';
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,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,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;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAO9D,OAAO,EACL,qBAAqB,GAEtB,MAAM,qCAAqC,CAAC;AAsB7C,OAAO;AACL,yDAAyD;AACzD,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAE1B,gCAAgC;AAChC,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,GAChB,MAAM,8BAA8B,CAAC;AAEtC,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;AAElF,0DAA0D;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,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,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,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;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAO9D,OAAO,EACL,qBAAqB,GAEtB,MAAM,qCAAqC,CAAC;AAuB7C,gBAAgB;AAChB,OAAO,EACL,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,6BAA6B,CAAC;AAErC,OAAO;AACL,yDAAyD;AACzD,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAE1B,gCAAgC;AAChC,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,GAChB,MAAM,8BAA8B,CAAC;AAEtC,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;AAElF,0DAA0D;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Dye Filter Utilities
3
+ *
4
+ * Pure functions for filtering dyes by type and acquisition source.
5
+ * Shared across web-app, discord-worker, api-worker, and bot-logic.
6
+ *
7
+ * @module services/dye/DyeFilter
8
+ */
9
+ import type { Dye, DyeTypeFilters } from '@xivdyetools/types';
10
+ /** Item IDs for Pure White and Jet Black dyes */
11
+ export declare const EXPENSIVE_DYE_IDS: readonly number[];
12
+ /** Acquisition strings for vendor-sold (base) dyes */
13
+ export declare const VENDOR_ACQUISITIONS: readonly string[];
14
+ /** Acquisition strings for crafted dyes */
15
+ export declare const CRAFT_ACQUISITIONS: readonly string[];
16
+ /** Acquisition strings for allied society dyes */
17
+ export declare const ALLIED_SOCIETY_ACQUISITIONS: readonly string[];
18
+ /**
19
+ * Check if a dye should be excluded based on filter configuration.
20
+ *
21
+ * @param filters - The active dye filters (undefined fields = not excluded)
22
+ * @param dye - The dye to check
23
+ * @returns `true` if the dye should be excluded from results
24
+ */
25
+ export declare function isDyeExcluded(filters: DyeTypeFilters, dye: Dye): boolean;
26
+ /**
27
+ * Filter an array of dyes, removing excluded ones.
28
+ *
29
+ * @param filters - The active dye filters
30
+ * @param dyes - Array of dyes to filter
31
+ * @returns Filtered array with excluded dyes removed
32
+ */
33
+ export declare function filterDyes<T extends Dye>(filters: DyeTypeFilters, dyes: T[]): T[];
34
+ /**
35
+ * Check if any filters are active (any exclusion enabled).
36
+ *
37
+ * @param filters - The filter configuration to check
38
+ * @returns `true` if at least one filter is enabled
39
+ */
40
+ export declare function hasActiveFilters(filters: DyeTypeFilters): boolean;
41
+ //# sourceMappingURL=DyeFilter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DyeFilter.d.ts","sourceRoot":"","sources":["../../../src/services/dye/DyeFilter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAM9D,iDAAiD;AACjD,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAAmB,CAAC;AAEnE,sDAAsD;AACtD,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAAmB,CAAC;AAErE,2CAA2C;AAC3C,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAAmC,CAAC;AAEpF,kDAAkD;AAClD,eAAO,MAAM,2BAA2B,EAAE,SAAS,MAAM,EAMxD,CAAC;AAMF;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAexE;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,GAAG,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAEjF;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAYjE"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Dye Filter Utilities
3
+ *
4
+ * Pure functions for filtering dyes by type and acquisition source.
5
+ * Shared across web-app, discord-worker, api-worker, and bot-logic.
6
+ *
7
+ * @module services/dye/DyeFilter
8
+ */
9
+ // ============================================================================
10
+ // Constants
11
+ // ============================================================================
12
+ /** Item IDs for Pure White and Jet Black dyes */
13
+ export const EXPENSIVE_DYE_IDS = [13114, 13115];
14
+ /** Acquisition strings for vendor-sold (base) dyes */
15
+ export const VENDOR_ACQUISITIONS = ['Dye Vendor'];
16
+ /** Acquisition strings for crafted dyes */
17
+ export const CRAFT_ACQUISITIONS = ['Crafting', 'Treasure Chest'];
18
+ /** Acquisition strings for allied society dyes */
19
+ export const ALLIED_SOCIETY_ACQUISITIONS = [
20
+ "Amalj'aa Vendor",
21
+ 'Ixali Vendor',
22
+ 'Sahagin Vendor',
23
+ 'Kobold Vendor',
24
+ 'Sylphic Vendor',
25
+ ];
26
+ // ============================================================================
27
+ // Functions
28
+ // ============================================================================
29
+ /**
30
+ * Check if a dye should be excluded based on filter configuration.
31
+ *
32
+ * @param filters - The active dye filters (undefined fields = not excluded)
33
+ * @param dye - The dye to check
34
+ * @returns `true` if the dye should be excluded from results
35
+ */
36
+ export function isDyeExcluded(filters, dye) {
37
+ // Type-based exclusions
38
+ if (filters.excludeMetallic && dye.isMetallic)
39
+ return true;
40
+ if (filters.excludePastel && dye.isPastel)
41
+ return true;
42
+ if (filters.excludeDark && dye.isDark)
43
+ return true;
44
+ if (filters.excludeCosmic && dye.isCosmic)
45
+ return true;
46
+ if (filters.excludeIshgardian && dye.isIshgardian)
47
+ return true;
48
+ if (filters.excludeExpensive && EXPENSIVE_DYE_IDS.includes(dye.itemID))
49
+ return true;
50
+ // Acquisition-based exclusions
51
+ if (filters.excludeVendorDyes && VENDOR_ACQUISITIONS.includes(dye.acquisition))
52
+ return true;
53
+ if (filters.excludeCraftDyes && CRAFT_ACQUISITIONS.includes(dye.acquisition))
54
+ return true;
55
+ if (filters.excludeAlliedSocietyDyes && ALLIED_SOCIETY_ACQUISITIONS.includes(dye.acquisition))
56
+ return true;
57
+ return false;
58
+ }
59
+ /**
60
+ * Filter an array of dyes, removing excluded ones.
61
+ *
62
+ * @param filters - The active dye filters
63
+ * @param dyes - Array of dyes to filter
64
+ * @returns Filtered array with excluded dyes removed
65
+ */
66
+ export function filterDyes(filters, dyes) {
67
+ return dyes.filter((dye) => !isDyeExcluded(filters, dye));
68
+ }
69
+ /**
70
+ * Check if any filters are active (any exclusion enabled).
71
+ *
72
+ * @param filters - The filter configuration to check
73
+ * @returns `true` if at least one filter is enabled
74
+ */
75
+ export function hasActiveFilters(filters) {
76
+ return !!(filters.excludeMetallic ||
77
+ filters.excludePastel ||
78
+ filters.excludeDark ||
79
+ filters.excludeCosmic ||
80
+ filters.excludeIshgardian ||
81
+ filters.excludeExpensive ||
82
+ filters.excludeVendorDyes ||
83
+ filters.excludeCraftDyes ||
84
+ filters.excludeAlliedSocietyDyes);
85
+ }
86
+ //# sourceMappingURL=DyeFilter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DyeFilter.js","sourceRoot":"","sources":["../../../src/services/dye/DyeFilter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,iDAAiD;AACjD,MAAM,CAAC,MAAM,iBAAiB,GAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAEnE,sDAAsD;AACtD,MAAM,CAAC,MAAM,mBAAmB,GAAsB,CAAC,YAAY,CAAC,CAAC;AAErE,2CAA2C;AAC3C,MAAM,CAAC,MAAM,kBAAkB,GAAsB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;AAEpF,kDAAkD;AAClD,MAAM,CAAC,MAAM,2BAA2B,GAAsB;IAC5D,iBAAiB;IACjB,cAAc;IACd,gBAAgB;IAChB,eAAe;IACf,gBAAgB;CACjB,CAAC;AAEF,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,OAAuB,EAAE,GAAQ;IAC7D,wBAAwB;IACxB,IAAI,OAAO,CAAC,eAAe,IAAI,GAAG,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC3D,IAAI,OAAO,CAAC,aAAa,IAAI,GAAG,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,OAAO,CAAC,WAAW,IAAI,GAAG,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACnD,IAAI,OAAO,CAAC,aAAa,IAAI,GAAG,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,OAAO,CAAC,iBAAiB,IAAI,GAAG,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/D,IAAI,OAAO,CAAC,gBAAgB,IAAI,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpF,+BAA+B;IAC/B,IAAI,OAAO,CAAC,iBAAiB,IAAI,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5F,IAAI,OAAO,CAAC,gBAAgB,IAAI,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1F,IAAI,OAAO,CAAC,wBAAwB,IAAI,2BAA2B,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3G,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAgB,OAAuB,EAAE,IAAS;IAC1E,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAuB;IACtD,OAAO,CAAC,CAAC,CACP,OAAO,CAAC,eAAe;QACvB,OAAO,CAAC,aAAa;QACrB,OAAO,CAAC,WAAW;QACnB,OAAO,CAAC,aAAa;QACrB,OAAO,CAAC,iBAAiB;QACzB,OAAO,CAAC,gBAAgB;QACxB,OAAO,CAAC,iBAAiB;QACzB,OAAO,CAAC,gBAAgB;QACxB,OAAO,CAAC,wBAAwB,CACjC,CAAC;AACJ,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 = "2.3.0";
10
+ export declare const VERSION = "2.4.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 = '2.3.0';
10
+ export const VERSION = '2.4.0';
11
11
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xivdyetools/core",
3
- "version": "2.3.0",
3
+ "version": "2.4.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",
@@ -35,8 +35,8 @@
35
35
  },
36
36
  "dependencies": {
37
37
  "spectral.js": "^3.0.0",
38
- "@xivdyetools/logger": "1.2.2",
39
- "@xivdyetools/types": "1.11.0"
38
+ "@xivdyetools/types": "1.12.0",
39
+ "@xivdyetools/logger": "1.2.2"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@types/node": "^25.5.0",