@xivdyetools/core 2.5.0 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/data/locales/de.json +27 -6
  2. package/dist/data/locales/en.json +27 -6
  3. package/dist/data/locales/fr.json +27 -6
  4. package/dist/data/locales/ja.json +27 -6
  5. package/dist/data/locales/ko.json +27 -6
  6. package/dist/data/locales/zh.json +27 -6
  7. package/dist/index.d.ts +5 -2
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +7 -2
  10. package/dist/index.js.map +1 -1
  11. package/dist/services/APIService.d.ts +32 -1
  12. package/dist/services/APIService.d.ts.map +1 -1
  13. package/dist/services/APIService.js +142 -25
  14. package/dist/services/APIService.js.map +1 -1
  15. package/dist/services/CharacterColorService.d.ts.map +1 -1
  16. package/dist/services/CharacterColorService.js +41 -11
  17. package/dist/services/CharacterColorService.js.map +1 -1
  18. package/dist/services/ColorService.d.ts +2 -0
  19. package/dist/services/ColorService.d.ts.map +1 -1
  20. package/dist/services/ColorService.js.map +1 -1
  21. package/dist/services/DyeService.d.ts +5 -5
  22. package/dist/services/DyeService.d.ts.map +1 -1
  23. package/dist/services/DyeService.js +19 -14
  24. package/dist/services/DyeService.js.map +1 -1
  25. package/dist/services/LocalizationService.d.ts +81 -27
  26. package/dist/services/LocalizationService.d.ts.map +1 -1
  27. package/dist/services/LocalizationService.js +131 -51
  28. package/dist/services/LocalizationService.js.map +1 -1
  29. package/dist/services/PaletteService.d.ts.map +1 -1
  30. package/dist/services/PaletteService.js +8 -1
  31. package/dist/services/PaletteService.js.map +1 -1
  32. package/dist/services/color/ColorConverter.d.ts +5 -0
  33. package/dist/services/color/ColorConverter.d.ts.map +1 -1
  34. package/dist/services/color/ColorConverter.js +46 -41
  35. package/dist/services/color/ColorConverter.js.map +1 -1
  36. package/dist/services/color/ColorManipulator.d.ts.map +1 -1
  37. package/dist/services/color/ColorManipulator.js +10 -9
  38. package/dist/services/color/ColorManipulator.js.map +1 -1
  39. package/dist/services/color/ColorblindnessSimulator.d.ts.map +1 -1
  40. package/dist/services/color/ColorblindnessSimulator.js +4 -2
  41. package/dist/services/color/ColorblindnessSimulator.js.map +1 -1
  42. package/dist/services/dye/DyeDatabase.d.ts +5 -0
  43. package/dist/services/dye/DyeDatabase.d.ts.map +1 -1
  44. package/dist/services/dye/DyeDatabase.js +23 -30
  45. package/dist/services/dye/DyeDatabase.js.map +1 -1
  46. package/dist/services/dye/DyeFilter.d.ts +0 -2
  47. package/dist/services/dye/DyeFilter.d.ts.map +1 -1
  48. package/dist/services/dye/DyeFilter.js +2 -13
  49. package/dist/services/dye/DyeFilter.js.map +1 -1
  50. package/dist/services/dye/DyeSearch.d.ts.map +1 -1
  51. package/dist/services/dye/DyeSearch.js +14 -74
  52. package/dist/services/dye/DyeSearch.js.map +1 -1
  53. package/dist/services/dye/HarmonyGenerator.d.ts.map +1 -1
  54. package/dist/services/dye/HarmonyGenerator.js +9 -3
  55. package/dist/services/dye/HarmonyGenerator.js.map +1 -1
  56. package/dist/services/localization/TranslationProvider.d.ts +53 -1
  57. package/dist/services/localization/TranslationProvider.d.ts.map +1 -1
  58. package/dist/services/localization/TranslationProvider.js +99 -0
  59. package/dist/services/localization/TranslationProvider.js.map +1 -1
  60. package/dist/utils/index.d.ts +1 -1
  61. package/dist/utils/index.d.ts.map +1 -1
  62. package/dist/utils/index.js +20 -2
  63. package/dist/utils/index.js.map +1 -1
  64. package/dist/version.d.ts +1 -1
  65. package/dist/version.js +1 -1
  66. package/package.json +11 -11
@@ -24,7 +24,7 @@
24
24
  * const harmonies = dyeService.findTriadicDyes('#FF0000');
25
25
  * ```
26
26
  */
27
- import type { Dye, LocalizedDye } from '@xivdyetools/types';
27
+ import type { Dye, LocalizedDye, LocaleCode } from '@xivdyetools/types';
28
28
  import type { Logger } from '@xivdyetools/logger/library';
29
29
  import type { FindClosestOptions, FindWithinDistanceOptions } from './dye/DyeSearch.js';
30
30
  export type { FindClosestOptions, FindWithinDistanceOptions } from './dye/DyeSearch.js';
@@ -241,7 +241,7 @@ export declare class DyeService {
241
241
  * // Finds "Snow White" (スノウホワイト)
242
242
  * ```
243
243
  */
244
- searchByLocalizedName(query: string): Dye[];
244
+ searchByLocalizedName(query: string, locale?: LocaleCode): Dye[];
245
245
  /**
246
246
  * Get dye by ID with localized name
247
247
  * Returns Dye with localizedName property if locale loaded
@@ -256,7 +256,7 @@ export declare class DyeService {
256
256
  * // "スノウホワイト" (ja) or "Snow White" (en)
257
257
  * ```
258
258
  */
259
- getLocalizedDyeById(id: number): LocalizedDye | null;
259
+ getLocalizedDyeById(id: number, locale?: LocaleCode): LocalizedDye | null;
260
260
  /**
261
261
  * Get dye by stainID with localized name
262
262
  * Returns Dye with localizedName property if locale loaded
@@ -266,7 +266,7 @@ export declare class DyeService {
266
266
  *
267
267
  * @since 2.2.0
268
268
  */
269
- getLocalizedDyeByStainId(stainId: number): LocalizedDye | null;
269
+ getLocalizedDyeByStainId(stainId: number, locale?: LocaleCode): LocalizedDye | null;
270
270
  /**
271
271
  * Get all dyes with localized names
272
272
  * Returns array of dyes with localizedName property if locale loaded
@@ -282,7 +282,7 @@ export declare class DyeService {
282
282
  * });
283
283
  * ```
284
284
  */
285
- getAllLocalizedDyes(): LocalizedDye[];
285
+ getAllLocalizedDyes(locale?: LocaleCode): LocalizedDye[];
286
286
  /**
287
287
  * Get all non-metallic dyes (locale-aware)
288
288
  * Excludes dyes based on metallic dye IDs from current locale
@@ -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,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAG1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAGxF,YAAY,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAExF,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGlF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,OAAO,CAAmB;IAElC;;;;OAIG;gBACS,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,GAAE,iBAAsB;IAe9D;;OAEG;IACH,UAAU,IAAI,GAAG,EAAE;IAInB;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;IAIlC;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,EAAE;IAIlC;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;IAIzC;;;;;;;;;OASG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAG,EAAE;IAI5C;;OAEG;IACH,cAAc,IAAI,OAAO;IAIzB;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACH,aAAa,IAAI,MAAM,EAAE;IAQzB;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE;IAIlC;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,EAAE;IAIzC;;OAEG;IACH,UAAU,CACR,MAAM,GAAE;QACN,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACd,GACL,GAAG,EAAE;IAIR;;;;;;;;;OASG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,mBAAmB,GAAE,MAAM,EAAE,GAAG,kBAAuB,GAAG,GAAG,GAAG,IAAI;IAIhG;;;;;;;;;;OAUG;IACH,sBAAsB,CACpB,GAAG,EAAE,MAAM,EACX,oBAAoB,EAAE,MAAM,GAAG,yBAAyB,EACxD,KAAK,CAAC,EAAE,MAAM,GACb,GAAG,EAAE;IAIR;;OAEG;IACH,yBAAyB,CAAC,SAAS,GAAE,OAAc,GAAG,GAAG,EAAE;IAI3D;;OAEG;IACH,yBAAyB,CAAC,SAAS,GAAE,OAAc,GAAG,GAAG,EAAE;IAI3D;;OAEG;IACH,kBAAkB,CAAC,SAAS,GAAE,OAAc,GAAG,GAAG,EAAE;IAQpD;;;;OAIG;IACH,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,GAAG,GAAG,IAAI;IAIxE;;;;;;OAMG;IACH,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,GAAG,EAAE;IAInF;;;;OAIG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,GAAG,EAAE;IAI7D;;;;OAIG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,GAAG,EAAE;IAI5D;;;;OAIG;IACH,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,GAAG,EAAE;IAI9D;;;;;OAKG;IACH,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,GAAG,EAAE;IAItF;;;;OAIG;IACH,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,GAAG,EAAE;IAI9D;;;;OAIG;IACH,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,GAAG,EAAE;IAIxE;;;;OAIG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,GAAG,EAAE;IAQ5D;;;;;;;;;;;;;OAaG;IACH,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE;IAwB3C;;;;;;;;;;;;;OAaG;IACH,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAcpD;;;;;;;;OAQG;IACH,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAc9D;;;;;;;;;;;;;;OAcG;IACH,mBAAmB,IAAI,YAAY,EAAE;IAarC;;;;;;;;;;;;OAYG;IACH,kBAAkB,IAAI,GAAG,EAAE;CAI5B"}
1
+ {"version":3,"file":"DyeService.d.ts","sourceRoot":"","sources":["../../src/services/DyeService.ts"],"names":[],"mappings":"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"}
@@ -299,8 +299,11 @@ export class DyeService {
299
299
  * // Finds "Snow White" (スノウホワイト)
300
300
  * ```
301
301
  */
302
- searchByLocalizedName(query) {
303
- if (!LocalizationService.isLocaleLoaded()) {
302
+ searchByLocalizedName(query, locale) {
303
+ // BUG-006 (2026-07-18 audit): pass an explicit locale in concurrent
304
+ // multi-locale servers — reading the singleton's current locale races
305
+ // across requests
306
+ if (!LocalizationService.isLocaleLoaded(locale)) {
304
307
  return this.searchByName(query); // Fallback to English-only
305
308
  }
306
309
  const lowerQuery = query.toLowerCase().trim();
@@ -311,7 +314,7 @@ export class DyeService {
311
314
  return true;
312
315
  }
313
316
  // Search localized name (not pre-computed as it's dynamically loaded)
314
- const localizedName = LocalizationService.getDyeName(dye.itemID);
317
+ const localizedName = LocalizationService.getDyeName(dye.itemID, locale);
315
318
  if (localizedName?.toLowerCase().includes(lowerQuery)) {
316
319
  return true;
317
320
  }
@@ -332,16 +335,16 @@ export class DyeService {
332
335
  * // "スノウホワイト" (ja) or "Snow White" (en)
333
336
  * ```
334
337
  */
335
- getLocalizedDyeById(id) {
338
+ getLocalizedDyeById(id, locale) {
336
339
  const dye = this.getDyeById(id);
337
340
  if (!dye)
338
341
  return null;
339
- if (!LocalizationService.isLocaleLoaded()) {
342
+ if (!LocalizationService.isLocaleLoaded(locale)) {
340
343
  return dye;
341
344
  }
342
345
  return {
343
346
  ...dye,
344
- localizedName: LocalizationService.getDyeName(dye.itemID) || undefined,
347
+ localizedName: LocalizationService.getDyeName(dye.itemID, locale) || undefined,
345
348
  };
346
349
  }
347
350
  /**
@@ -353,16 +356,16 @@ export class DyeService {
353
356
  *
354
357
  * @since 2.2.0
355
358
  */
356
- getLocalizedDyeByStainId(stainId) {
359
+ getLocalizedDyeByStainId(stainId, locale) {
357
360
  const dye = this.getByStainId(stainId);
358
361
  if (!dye)
359
362
  return null;
360
- if (!LocalizationService.isLocaleLoaded()) {
363
+ if (!LocalizationService.isLocaleLoaded(locale)) {
361
364
  return dye;
362
365
  }
363
366
  return {
364
367
  ...dye,
365
- localizedName: LocalizationService.getDyeName(dye.itemID) || undefined,
368
+ localizedName: LocalizationService.getDyeName(dye.itemID, locale) || undefined,
366
369
  };
367
370
  }
368
371
  /**
@@ -380,14 +383,14 @@ export class DyeService {
380
383
  * });
381
384
  * ```
382
385
  */
383
- getAllLocalizedDyes() {
386
+ getAllLocalizedDyes(locale) {
384
387
  const dyes = this.getAllDyes();
385
- if (!LocalizationService.isLocaleLoaded()) {
388
+ if (!LocalizationService.isLocaleLoaded(locale)) {
386
389
  return dyes;
387
390
  }
388
391
  return dyes.map((dye) => ({
389
392
  ...dye,
390
- localizedName: LocalizationService.getDyeName(dye.itemID) || undefined,
393
+ localizedName: LocalizationService.getDyeName(dye.itemID, locale) || undefined,
391
394
  }));
392
395
  }
393
396
  /**
@@ -404,8 +407,10 @@ export class DyeService {
404
407
  * ```
405
408
  */
406
409
  getNonMetallicDyes() {
407
- const metallicIds = new Set(LocalizationService.getMetallicDyeIds());
408
- return this.getAllDyes().filter((dye) => !metallicIds.has(dye.itemID));
410
+ // BUG-045 (2026-07-18 audit): source the exclusion from the dye data's own
411
+ // isMetallic flag — the previous locale-derived ID list silently returned
412
+ // ALL dyes (metallics included) when no locale had ever been loaded
413
+ return this.getAllDyes().filter((dye) => !dye.isMetallic);
409
414
  }
410
415
  }
411
416
  //# sourceMappingURL=DyeService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DyeService.js","sourceRoot":"","sources":["../../src/services/DyeService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DyeService.js","sourceRoot":"","sources":["../../src/services/DyeService.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * @module services
8
8
  */
9
- import type { LocaleCode, TranslationKey, HarmonyTypeKey, VisionType, JobKey, GrandCompanyKey, RaceKey, ClanKey, LocalePreference } from '@xivdyetools/types';
9
+ import type { LocaleCode, TranslationKey, HarmonyTypeKey, VisionType, ToolKey, SheetKey, JobKey, GrandCompanyKey, RaceKey, ClanKey, LocalePreference } from '@xivdyetools/types';
10
10
  import { LocaleLoader } from './localization/LocaleLoader.js';
11
11
  import { LocaleRegistry } from './localization/LocaleRegistry.js';
12
12
  import { TranslationProvider } from './localization/TranslationProvider.js';
@@ -121,6 +121,16 @@ export declare class LocalizationService {
121
121
  /**
122
122
  * Set active locale (loads locale file if not cached)
123
123
  *
124
+ * ⚠️ CONCURRENCY (BUG-006, 2026-07-18 audit): `currentLocale` is shared
125
+ * mutable state on this instance (and on the process-wide singleton for the
126
+ * static API). In concurrent multi-locale servers (Cloudflare Workers,
127
+ * Node servers), a per-request `setLocale` races with other requests —
128
+ * request A can read another request's locale after any `await`. Such
129
+ * servers must NOT call `setLocale` per request; instead call
130
+ * `ensureLocaleLoaded(locale)` once and pass the request's locale
131
+ * explicitly to every getter (`getDyeName(id, locale)`), or use the
132
+ * stateless `LocaleLoader`/`LocaleRegistry`/`TranslationProvider` trio.
133
+ *
124
134
  * @param locale - Locale code ('en', 'ja', 'de', 'fr')
125
135
  * @throws {AppError} If locale file fails to load
126
136
  *
@@ -135,6 +145,17 @@ export declare class LocalizationService {
135
145
  * Static method: Set locale using default instance
136
146
  */
137
147
  static setLocale(locale: LocaleCode): Promise<void>;
148
+ /**
149
+ * Ensure a locale's data is loaded/registered WITHOUT mutating the current
150
+ * locale. BUG-006 (2026-07-18 audit): the race-safe alternative to a
151
+ * per-request `setLocale` — combine with explicit-locale getters
152
+ * (`getDyeName(id, locale)`).
153
+ */
154
+ ensureLocaleLoaded(locale: LocaleCode): Promise<void>;
155
+ /**
156
+ * Static method: Ensure a locale is loaded in the default instance
157
+ */
158
+ static ensureLocaleLoaded(locale: LocaleCode): Promise<void>;
138
159
  /**
139
160
  * Set locale from preference object with priority chain
140
161
  * Uses pure function resolveLocaleFromPreference for resolution logic
@@ -187,142 +208,175 @@ export declare class LocalizationService {
187
208
  * }
188
209
  * ```
189
210
  */
190
- isLocaleLoaded(): boolean;
211
+ isLocaleLoaded(locale?: LocaleCode): boolean;
191
212
  /**
192
213
  * Static method: Check if locale is loaded in default instance
193
214
  */
194
- static isLocaleLoaded(): boolean;
215
+ static isLocaleLoaded(locale?: LocaleCode): boolean;
195
216
  /**
196
217
  * Get localized UI label (with fallback to English)
197
218
  *
198
219
  * @param key - Translation key
199
220
  * @returns Localized label
200
221
  */
201
- getLabel(key: TranslationKey): string;
222
+ getLabel(key: TranslationKey, locale?: LocaleCode): string;
202
223
  /**
203
224
  * Static method: Get localized label using default instance
204
225
  */
205
- static getLabel(key: TranslationKey): string;
226
+ static getLabel(key: TranslationKey, locale?: LocaleCode): string;
206
227
  /**
207
228
  * Get localized dye name by itemID
208
229
  *
209
230
  * @param itemID - Dye item ID (5729-48227)
210
231
  * @returns Localized name or null if not found
211
232
  */
212
- getDyeName(itemID: number): string | null;
233
+ getDyeName(itemID: number, locale?: LocaleCode): string | null;
213
234
  /**
214
235
  * Static method: Get localized dye name using default instance
215
236
  */
216
- static getDyeName(itemID: number): string | null;
237
+ static getDyeName(itemID: number, locale?: LocaleCode): string | null;
217
238
  /**
218
239
  * Get localized category name
219
240
  *
220
241
  * @param category - Category key (e.g., "Reds", "Blues")
221
242
  * @returns Localized category name
222
243
  */
223
- getCategory(category: string): string;
244
+ getCategory(category: string, locale?: LocaleCode): string;
224
245
  /**
225
246
  * Static method: Get localized category using default instance
226
247
  */
227
- static getCategory(category: string): string;
248
+ static getCategory(category: string, locale?: LocaleCode): string;
228
249
  /**
229
250
  * Get localized acquisition method
230
251
  *
231
252
  * @param acquisition - Acquisition key (e.g., "Dye Vendor", "Crafting")
232
253
  * @returns Localized acquisition method
233
254
  */
234
- getAcquisition(acquisition: string): string;
255
+ getAcquisition(acquisition: string, locale?: LocaleCode): string;
235
256
  /**
236
257
  * Static method: Get localized acquisition using default instance
237
258
  */
238
- static getAcquisition(acquisition: string): string;
259
+ static getAcquisition(acquisition: string, locale?: LocaleCode): string;
239
260
  /**
240
261
  * Get localized currency display label
241
262
  *
242
263
  * @param currency - Currency key (e.g., "Gil", "Cosmocredits")
243
264
  * @returns Localized currency label
244
265
  */
245
- getCurrency(currency: string): string;
266
+ getCurrency(currency: string, locale?: LocaleCode): string;
246
267
  /**
247
268
  * Static method: Get localized currency using default instance
248
269
  */
249
- static getCurrency(currency: string): string;
270
+ static getCurrency(currency: string, locale?: LocaleCode): string;
250
271
  /**
251
272
  * Get all metallic dye IDs (for exclusion filtering)
252
273
  *
253
274
  * @returns Array of metallic dye item IDs
254
275
  */
255
- getMetallicDyeIds(): number[];
276
+ getMetallicDyeIds(locale?: LocaleCode): number[];
256
277
  /**
257
278
  * Static method: Get metallic dye IDs using default instance
258
279
  */
259
- static getMetallicDyeIds(): number[];
280
+ static getMetallicDyeIds(locale?: LocaleCode): number[];
260
281
  /**
261
282
  * Get localized harmony type name
262
283
  *
263
284
  * @param key - Harmony type key
264
285
  * @returns Localized harmony type
265
286
  */
266
- getHarmonyType(key: HarmonyTypeKey): string;
287
+ getHarmonyType(key: HarmonyTypeKey, locale?: LocaleCode): string;
267
288
  /**
268
289
  * Static method: Get localized harmony type using default instance
269
290
  */
270
- static getHarmonyType(key: HarmonyTypeKey): string;
291
+ static getHarmonyType(key: HarmonyTypeKey, locale?: LocaleCode): string;
271
292
  /**
272
293
  * Get localized vision type name
273
294
  *
274
295
  * @param key - Vision type key
275
296
  * @returns Localized vision type
276
297
  */
277
- getVisionType(key: VisionType): string;
298
+ getVisionType(key: VisionType, locale?: LocaleCode): string;
278
299
  /**
279
300
  * Static method: Get localized vision type using default instance
280
301
  */
281
- static getVisionType(key: VisionType): string;
302
+ static getVisionType(key: VisionType, locale?: LocaleCode): string;
303
+ /**
304
+ * Get localized short vision-name (compact form, no parenthetical)
305
+ *
306
+ * @param key - Vision type key
307
+ * @returns Localized short vision name
308
+ */
309
+ getVisionShort(key: VisionType, locale?: LocaleCode): string;
310
+ /**
311
+ * Static method: Get localized short vision-name using default instance
312
+ */
313
+ static getVisionShort(key: VisionType, locale?: LocaleCode): string;
314
+ /**
315
+ * Get localized tool display name
316
+ *
317
+ * @param key - Tool key
318
+ * @returns Localized tool display name
319
+ */
320
+ getToolName(key: ToolKey, locale?: LocaleCode): string;
321
+ /**
322
+ * Static method: Get localized tool display name using default instance
323
+ */
324
+ static getToolName(key: ToolKey, locale?: LocaleCode): string;
325
+ /**
326
+ * Get localized color-sheet category name
327
+ *
328
+ * @param key - Sheet key
329
+ * @returns Localized sheet name
330
+ */
331
+ getSheetName(key: SheetKey, locale?: LocaleCode): string;
332
+ /**
333
+ * Static method: Get localized sheet name using default instance
334
+ */
335
+ static getSheetName(key: SheetKey, locale?: LocaleCode): string;
282
336
  /**
283
337
  * Get localized job name
284
338
  *
285
339
  * @param key - Job key
286
340
  * @returns Localized job name
287
341
  */
288
- getJobName(key: JobKey): string;
342
+ getJobName(key: JobKey, locale?: LocaleCode): string;
289
343
  /**
290
344
  * Static method: Get localized job name using default instance
291
345
  */
292
- static getJobName(key: JobKey): string;
346
+ static getJobName(key: JobKey, locale?: LocaleCode): string;
293
347
  /**
294
348
  * Get localized Grand Company name
295
349
  *
296
350
  * @param key - Grand Company key
297
351
  * @returns Localized Grand Company name
298
352
  */
299
- getGrandCompanyName(key: GrandCompanyKey): string;
353
+ getGrandCompanyName(key: GrandCompanyKey, locale?: LocaleCode): string;
300
354
  /**
301
355
  * Static method: Get localized Grand Company name using default instance
302
356
  */
303
- static getGrandCompanyName(key: GrandCompanyKey): string;
357
+ static getGrandCompanyName(key: GrandCompanyKey, locale?: LocaleCode): string;
304
358
  /**
305
359
  * Get localized race name
306
360
  *
307
361
  * @param key - Race key
308
362
  * @returns Localized race name
309
363
  */
310
- getRace(key: RaceKey): string;
364
+ getRace(key: RaceKey, locale?: LocaleCode): string;
311
365
  /**
312
366
  * Static method: Get localized race name using default instance
313
367
  */
314
- static getRace(key: RaceKey): string;
368
+ static getRace(key: RaceKey, locale?: LocaleCode): string;
315
369
  /**
316
370
  * Get localized clan (subrace) name
317
371
  *
318
372
  * @param key - Clan key
319
373
  * @returns Localized clan name
320
374
  */
321
- getClan(key: ClanKey): string;
375
+ getClan(key: ClanKey, locale?: LocaleCode): string;
322
376
  /**
323
377
  * Static method: Get localized clan name using default instance
324
378
  */
325
- static getClan(key: ClanKey): string;
379
+ static getClan(key: ClanKey, locale?: LocaleCode): string;
326
380
  /**
327
381
  * Get all available locale codes
328
382
  *
@@ -1 +1 @@
1
- {"version":3,"file":"LocalizationService.d.ts","sourceRoot":"","sources":["../../src/services/LocalizationService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LocalizationService.d.ts","sourceRoot":"","sources":["../../src/services/LocalizationService.ts"],"names":[],"mappings":"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"}