@xivdyetools/core 2.7.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 +7 -61
- package/dist/services/APIService.d.ts.map +1 -1
- package/dist/services/APIService.js +43 -154
- 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 +16 -68
- package/dist/services/CharacterColorService.js.map +1 -1
- package/dist/services/ColorService.d.ts +55 -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 +10 -103
- package/dist/services/DyeService.d.ts.map +1 -1
- package/dist/services/DyeService.js +13 -156
- package/dist/services/DyeService.js.map +1 -1
- package/dist/services/LocalizationService.d.ts +1 -33
- package/dist/services/LocalizationService.d.ts.map +1 -1
- package/dist/services/LocalizationService.js +0 -44
- 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 +2 -21
- 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 +107 -35
- package/dist/services/color/ColorConverter.d.ts.map +1 -1
- package/dist/services/color/ColorConverter.js +159 -48
- 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 +14 -0
- 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 +53 -1
- 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 +0 -21
- package/dist/services/dye/DyeDatabase.d.ts.map +1 -1
- package/dist/services/dye/DyeDatabase.js +78 -103
- 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 +31 -67
- 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 +24 -35
- 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 +35 -122
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +45 -422
- 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 +19 -10
- 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
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* /manual topic roster + learn-more link table — shared data for every
|
|
3
|
+
* surface (web MetricHelp rows, bot /manual embeds, og-worker redirect page).
|
|
4
|
+
*
|
|
5
|
+
* Per the confirmed 5.0 rules (design register, cross-cutting):
|
|
6
|
+
* - Authority order when sourcing: clinical body → medical portal →
|
|
7
|
+
* encyclopaedia. Read the target, not its name.
|
|
8
|
+
* - **A missing URL degrades to no link, never the English one.**
|
|
9
|
+
* - Embeds print authority + host, never the path; web `<a>`s still name the
|
|
10
|
+
* authority.
|
|
11
|
+
* - The lead sentence and its tail are authored together per locale (JA
|
|
12
|
+
* `をご覧ください`; KO takes no tail — position-dependent). Those live in
|
|
13
|
+
* the locale string tables, not here.
|
|
14
|
+
* - Every URL here passed a liveness check on 2026-08-07. Two of five had
|
|
15
|
+
* already moved once before that — keep the liveness test in CI-reachable
|
|
16
|
+
* form and treat a dead link as an absent link at render time.
|
|
17
|
+
*
|
|
18
|
+
* Roster decisions:
|
|
19
|
+
* - Colour Vision: EN = NEI (clinical body) · DE = Portal der Augenmedizin
|
|
20
|
+
* (medical portal) · FR = Wikipédia *Daltonisme* (encyclopaedia; no
|
|
21
|
+
* endorsed FR clinical page) · JA = 日本眼科医会 (the JA copy names
|
|
22
|
+
* achromatopsia as separate, not a fourth 色覚異常) · KO = KDCA 국가건강정보포털.
|
|
23
|
+
* **ZH is deliberately absent** — blocked on a Simplified-Chinese reader.
|
|
24
|
+
* - Contrast: cite WCAG 1.4.11 in all six locales, but **link only en/fr/zh**
|
|
25
|
+
* (the W3C-authorized translations). DE's endorsed 2.0 translation lacks the
|
|
26
|
+
* criterion; KO's translation is unofficial http; JA's waic.jp needs its own
|
|
27
|
+
* check before it can join.
|
|
28
|
+
* - Matching Methods: our own docs — no localised authority exists.
|
|
29
|
+
* - Spectrum & Prices: Lodestone **by game region, not locale**.
|
|
30
|
+
* - Image Matching Tips and Character File link nothing.
|
|
31
|
+
*/
|
|
32
|
+
const W3C = 'W3C';
|
|
33
|
+
/** Our own documentation site (Matching Methods target, all locales). */
|
|
34
|
+
export const XIVDYETOOLS_DOCS_URL = 'https://developers.xivdyetools.app/';
|
|
35
|
+
/** Lodestone by region — Spectrum & Prices resolves region from the user's world. */
|
|
36
|
+
export const LODESTONE_BY_REGION = {
|
|
37
|
+
na: {
|
|
38
|
+
authority: 'The Lodestone',
|
|
39
|
+
host: 'na.finalfantasyxiv.com',
|
|
40
|
+
url: 'https://na.finalfantasyxiv.com/lodestone/',
|
|
41
|
+
},
|
|
42
|
+
eu: {
|
|
43
|
+
authority: 'The Lodestone',
|
|
44
|
+
host: 'eu.finalfantasyxiv.com',
|
|
45
|
+
url: 'https://eu.finalfantasyxiv.com/lodestone/',
|
|
46
|
+
},
|
|
47
|
+
jp: {
|
|
48
|
+
authority: 'The Lodestone',
|
|
49
|
+
host: 'jp.finalfantasyxiv.com',
|
|
50
|
+
url: 'https://jp.finalfantasyxiv.com/lodestone/',
|
|
51
|
+
},
|
|
52
|
+
de: {
|
|
53
|
+
authority: 'The Lodestone',
|
|
54
|
+
host: 'de.finalfantasyxiv.com',
|
|
55
|
+
url: 'https://de.finalfantasyxiv.com/lodestone/',
|
|
56
|
+
},
|
|
57
|
+
fr: {
|
|
58
|
+
authority: 'The Lodestone',
|
|
59
|
+
host: 'fr.finalfantasyxiv.com',
|
|
60
|
+
url: 'https://fr.finalfantasyxiv.com/lodestone/',
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
const MATCHING_METHODS_LINK = {
|
|
64
|
+
authority: 'XIV Dye Tools Docs',
|
|
65
|
+
host: 'developers.xivdyetools.app',
|
|
66
|
+
url: XIVDYETOOLS_DOCS_URL,
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* The /manual topic roster. `match_image` ships today; the other five need
|
|
70
|
+
* handler + choice registration in the bot (they are part of the 5.0 port).
|
|
71
|
+
*/
|
|
72
|
+
export const MANUAL_TOPICS = [
|
|
73
|
+
{
|
|
74
|
+
id: 'match_image',
|
|
75
|
+
emoji: '📸',
|
|
76
|
+
links: {},
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
id: 'color_vision',
|
|
80
|
+
emoji: '♿',
|
|
81
|
+
links: {
|
|
82
|
+
en: {
|
|
83
|
+
authority: 'National Eye Institute',
|
|
84
|
+
host: 'www.nei.nih.gov',
|
|
85
|
+
url: 'https://www.nei.nih.gov/learn-about-eye-health/eye-conditions-and-diseases/color-blindness',
|
|
86
|
+
},
|
|
87
|
+
de: {
|
|
88
|
+
authority: 'Portal der Augenmedizin',
|
|
89
|
+
host: 'www.portal-der-augenmedizin.de',
|
|
90
|
+
url: 'https://www.portal-der-augenmedizin.de/aktuelles/20110405-farbenblindheit-im-alltag.html',
|
|
91
|
+
},
|
|
92
|
+
fr: {
|
|
93
|
+
authority: 'Wikipédia — Daltonisme',
|
|
94
|
+
host: 'fr.wikipedia.org',
|
|
95
|
+
url: 'https://fr.wikipedia.org/wiki/Daltonisme',
|
|
96
|
+
},
|
|
97
|
+
ja: {
|
|
98
|
+
authority: '日本眼科医会',
|
|
99
|
+
host: 'www.gankaikai.or.jp',
|
|
100
|
+
url: 'https://www.gankaikai.or.jp/health/50/',
|
|
101
|
+
},
|
|
102
|
+
ko: {
|
|
103
|
+
authority: '질병관리청 국가건강정보포털',
|
|
104
|
+
host: 'health.kdca.go.kr',
|
|
105
|
+
url: 'https://health.kdca.go.kr/healthinfo/biz/health/gnrlzHealthInfo/gnrlzHealthInfo/gnrlzHealthInfoView.do?cntnts_sn=1469',
|
|
106
|
+
},
|
|
107
|
+
// zh: deliberately absent — needs a Simplified-Chinese source found via
|
|
108
|
+
// a community reader. Absent = no link, never the English one.
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
id: 'contrast',
|
|
113
|
+
emoji: '🔲',
|
|
114
|
+
links: {
|
|
115
|
+
en: {
|
|
116
|
+
authority: `${W3C} — WCAG 2.1 (1.4.11)`,
|
|
117
|
+
host: 'www.w3.org',
|
|
118
|
+
url: 'https://www.w3.org/TR/WCAG21/#non-text-contrast',
|
|
119
|
+
},
|
|
120
|
+
fr: {
|
|
121
|
+
authority: `${W3C} — WCAG 2.1, traduction autorisée (1.4.11)`,
|
|
122
|
+
host: 'www.w3.org',
|
|
123
|
+
url: 'https://www.w3.org/Translations/WCAG21-fr/',
|
|
124
|
+
},
|
|
125
|
+
zh: {
|
|
126
|
+
authority: `${W3C} — WCAG 2.1 授权翻译 (1.4.11)`,
|
|
127
|
+
host: 'www.w3.org',
|
|
128
|
+
url: 'https://www.w3.org/Translations/WCAG21-zh/',
|
|
129
|
+
},
|
|
130
|
+
// de: endorsed WCAG 2.0 translation lacks 1.4.11 (a 2.1 criterion).
|
|
131
|
+
// ko: only an unofficial http translation exists.
|
|
132
|
+
// ja: waic.jp candidate not yet verified.
|
|
133
|
+
// All three cite 1.4.11 in copy but render the absent-link state.
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
id: 'matching_methods',
|
|
138
|
+
emoji: '📐',
|
|
139
|
+
links: {
|
|
140
|
+
en: MATCHING_METHODS_LINK,
|
|
141
|
+
de: MATCHING_METHODS_LINK,
|
|
142
|
+
fr: MATCHING_METHODS_LINK,
|
|
143
|
+
ja: MATCHING_METHODS_LINK,
|
|
144
|
+
ko: MATCHING_METHODS_LINK,
|
|
145
|
+
zh: MATCHING_METHODS_LINK,
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
id: 'spectrum_prices',
|
|
150
|
+
emoji: '🪙',
|
|
151
|
+
links: {}, // region-keyed — resolve via LODESTONE_BY_REGION, not locale
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
id: 'character_file',
|
|
155
|
+
emoji: '👤',
|
|
156
|
+
links: {}, // links nothing by decision
|
|
157
|
+
},
|
|
158
|
+
];
|
|
159
|
+
/**
|
|
160
|
+
* Learn-more link for a topic + locale. Returns null for the absent state —
|
|
161
|
+
* consumers render "no link", never the English URL.
|
|
162
|
+
*/
|
|
163
|
+
export function getLearnLink(topic, locale) {
|
|
164
|
+
const entry = MANUAL_TOPICS.find((t) => t.id === topic);
|
|
165
|
+
return entry?.links[locale] ?? null;
|
|
166
|
+
}
|
|
167
|
+
/** Lodestone link for a game region (Spectrum & Prices topic). */
|
|
168
|
+
export function getLodestoneLink(region) {
|
|
169
|
+
return LODESTONE_BY_REGION[region];
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=learn-links.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learn-links.js","sourceRoot":"","sources":["../../src/config/learn-links.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where the product can be found — one home, because both surfaces print it.
|
|
3
|
+
*
|
|
4
|
+
* The web app's About modal and the bot's `/about` show the same seven
|
|
5
|
+
* places. Kept here rather than in each surface for the reason the 5.0
|
|
6
|
+
* design register keeps giving: a list duplicated across two apps is a list
|
|
7
|
+
* that drifts, and the drift is invisible until somebody notices the bot is
|
|
8
|
+
* advertising a repo that moved two releases ago.
|
|
9
|
+
*
|
|
10
|
+
* Only `label` and `url` live here. Icons are presentation and stay with the
|
|
11
|
+
* surface that draws them — the web app maps these onto its SVG set, the bot
|
|
12
|
+
* renders markdown links.
|
|
13
|
+
*
|
|
14
|
+
* @module config/product-links
|
|
15
|
+
*/
|
|
16
|
+
export interface ProductLink {
|
|
17
|
+
/** Display name. Proper nouns — never localised. */
|
|
18
|
+
label: string;
|
|
19
|
+
url: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Social presence, in the order both surfaces display it.
|
|
23
|
+
*
|
|
24
|
+
* `github.com/FlashGalatine` is the profile rather than a repository: the
|
|
25
|
+
* project has moved repos once already (the standalone discord-worker into
|
|
26
|
+
* the monorepo), and a profile link survives the next move too.
|
|
27
|
+
*/
|
|
28
|
+
export declare const SOCIAL_LINKS: readonly ProductLink[];
|
|
29
|
+
/**
|
|
30
|
+
* The product itself. The web app does not print these (a modal linking to
|
|
31
|
+
* the page it is drawn on says nothing); the bot does, because a Discord
|
|
32
|
+
* reader has no other way in.
|
|
33
|
+
*/
|
|
34
|
+
export declare const PRODUCT_LINKS: {
|
|
35
|
+
readonly webApp: {
|
|
36
|
+
readonly label: "Web App";
|
|
37
|
+
readonly url: "https://xivdyetools.app/";
|
|
38
|
+
};
|
|
39
|
+
readonly inviteBot: {
|
|
40
|
+
readonly label: "Invite Bot";
|
|
41
|
+
readonly url: "https://discord.com/oauth2/authorize?client_id=1447108133020369048";
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=product-links.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"product-links.d.ts","sourceRoot":"","sources":["../../src/config/product-links.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,WAAW;IAC1B,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,EAAE,SAAS,WAAW,EAQrC,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,aAAa;;;;;;;;;CAMsB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where the product can be found — one home, because both surfaces print it.
|
|
3
|
+
*
|
|
4
|
+
* The web app's About modal and the bot's `/about` show the same seven
|
|
5
|
+
* places. Kept here rather than in each surface for the reason the 5.0
|
|
6
|
+
* design register keeps giving: a list duplicated across two apps is a list
|
|
7
|
+
* that drifts, and the drift is invisible until somebody notices the bot is
|
|
8
|
+
* advertising a repo that moved two releases ago.
|
|
9
|
+
*
|
|
10
|
+
* Only `label` and `url` live here. Icons are presentation and stay with the
|
|
11
|
+
* surface that draws them — the web app maps these onto its SVG set, the bot
|
|
12
|
+
* renders markdown links.
|
|
13
|
+
*
|
|
14
|
+
* @module config/product-links
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Social presence, in the order both surfaces display it.
|
|
18
|
+
*
|
|
19
|
+
* `github.com/FlashGalatine` is the profile rather than a repository: the
|
|
20
|
+
* project has moved repos once already (the standalone discord-worker into
|
|
21
|
+
* the monorepo), and a profile link survives the next move too.
|
|
22
|
+
*/
|
|
23
|
+
export const SOCIAL_LINKS = [
|
|
24
|
+
{ label: 'GitHub', url: 'https://github.com/FlashGalatine' },
|
|
25
|
+
{ label: 'X/Twitter', url: 'https://x.com/AsheJunius' },
|
|
26
|
+
{ label: 'Twitch', url: 'https://www.twitch.tv/flashgalatine' },
|
|
27
|
+
{ label: 'Bluesky', url: 'https://bsky.app/profile/projectgalatine.com' },
|
|
28
|
+
{ label: 'Discord', url: 'https://discord.gg/5VUSKTZCe5' },
|
|
29
|
+
{ label: 'Patreon', url: 'https://patreon.com/ProjectGalatine' },
|
|
30
|
+
{ label: 'Ko-fi', url: 'https://ko-fi.com/flashgalatine' },
|
|
31
|
+
];
|
|
32
|
+
/**
|
|
33
|
+
* The product itself. The web app does not print these (a modal linking to
|
|
34
|
+
* the page it is drawn on says nothing); the bot does, because a Discord
|
|
35
|
+
* reader has no other way in.
|
|
36
|
+
*/
|
|
37
|
+
export const PRODUCT_LINKS = {
|
|
38
|
+
webApp: { label: 'Web App', url: 'https://xivdyetools.app/' },
|
|
39
|
+
inviteBot: {
|
|
40
|
+
label: 'Invite Bot',
|
|
41
|
+
url: 'https://discord.com/oauth2/authorize?client_id=1447108133020369048',
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=product-links.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"product-links.js","sourceRoot":"","sources":["../../src/config/product-links.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,kCAAkC,EAAE;IAC5D,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,0BAA0B,EAAE;IACvD,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,qCAAqC,EAAE;IAC/D,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,8CAA8C,EAAE;IACzE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,+BAA+B,EAAE;IAC1D,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,qCAAqC,EAAE;IAChE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,iCAAiC,EAAE;CAClD,CAAC;AAEX;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,0BAA0B,EAAE;IAC7D,SAAS,EAAE;QACT,KAAK,EAAE,YAAY;QACnB,GAAG,EAAE,oEAAoE;KAC1E;CAC6C,CAAC"}
|
|
@@ -25,12 +25,25 @@ export declare const VALUE_MAX = 100;
|
|
|
25
25
|
* These matrices transform RGB values to simulate different types of colorblindness
|
|
26
26
|
*/
|
|
27
27
|
export declare const BRETTEL_MATRICES: ColorblindMatrices;
|
|
28
|
+
/**
|
|
29
|
+
* Machado, Oliveira & Fernandes (2009) transformation matrices at severity 1.0.
|
|
30
|
+
*
|
|
31
|
+
* Unlike {@link BRETTEL_MATRICES} (applied to gamma-encoded sRGB by the legacy
|
|
32
|
+
* simulator), these matrices are defined over **linear RGB** — use them only
|
|
33
|
+
* through `ColorblindnessSimulator.simulateColorblindnessMachado`, which
|
|
34
|
+
* linearizes, transforms, and re-encodes.
|
|
35
|
+
*
|
|
36
|
+
* The 5.0 band calibration (SEPARATION cuts) was computed against this set, so
|
|
37
|
+
* any recomputation of those bands must use the Machado path, not Brettel.
|
|
38
|
+
* Achromatopsia is not part of the Machado dichromacy model; it is represented
|
|
39
|
+
* here as Rec. 709 luminance grayscale in linear light.
|
|
40
|
+
*/
|
|
41
|
+
export declare const MACHADO_MATRICES: ColorblindMatrices;
|
|
28
42
|
/**
|
|
29
43
|
* Regex patterns for validation
|
|
30
44
|
*/
|
|
31
45
|
export declare const PATTERNS: {
|
|
32
46
|
readonly HEX_COLOR: RegExp;
|
|
33
|
-
readonly RGB_COLOR: RegExp;
|
|
34
47
|
};
|
|
35
48
|
/**
|
|
36
49
|
* Universalis API configuration
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAM7D;;GAEG;AACH,eAAO,MAAM,OAAO,IAAI,CAAC;AACzB,eAAO,MAAM,OAAO,MAAM,CAAC;AAE3B;;GAEG;AACH,eAAO,MAAM,OAAO,IAAI,CAAC;AACzB,eAAO,MAAM,OAAO,MAAM,CAAC;AAC3B,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B,eAAO,MAAM,SAAS,MAAM,CAAC;AAY7B;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,kBAqB9B,CAAC;AAMF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB,EAAE,kBAqB9B,CAAC;AAMF;;GAEG;AACH,eAAO,MAAM,QAAQ;;CAEX,CAAC;AAMX;;GAEG;AACH,eAAO,MAAM,oBAAoB,mCAAmC,CAAC;AACrE,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAC7C,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAEhD;;GAEG;AACH,eAAO,MAAM,aAAa,QAAgB,CAAC;AAC3C,eAAO,MAAM,iBAAiB,UAAU,CAAC;AACzC,eAAO,MAAM,qBAAqB,QAAc,CAAC;AACjD,eAAO,MAAM,oBAAoB,MAAM,CAAC"}
|
package/dist/constants/index.js
CHANGED
|
@@ -28,25 +28,6 @@ export const VALUE_MAX = 100;
|
|
|
28
28
|
*/
|
|
29
29
|
export const COLOR_DISTANCE_MAX = Math.sqrt(255 ** 2 + 255 ** 2 + 255 ** 2); // ~441.67
|
|
30
30
|
// ============================================================================
|
|
31
|
-
// Vision Type Configuration
|
|
32
|
-
// ============================================================================
|
|
33
|
-
/** @internal */
|
|
34
|
-
export const VISION_TYPES = [
|
|
35
|
-
'normal',
|
|
36
|
-
'deuteranopia',
|
|
37
|
-
'protanopia',
|
|
38
|
-
'tritanopia',
|
|
39
|
-
'achromatopsia',
|
|
40
|
-
];
|
|
41
|
-
/** @internal */
|
|
42
|
-
export const VISION_TYPE_LABELS = {
|
|
43
|
-
normal: 'Normal Vision',
|
|
44
|
-
deuteranopia: 'Deuteranopia (Red-Green Colorblindness)',
|
|
45
|
-
protanopia: 'Protanopia (Red-Green Colorblindness)',
|
|
46
|
-
tritanopia: 'Tritanopia (Blue-Yellow Colorblindness)',
|
|
47
|
-
achromatopsia: 'Achromatopsia (Total Colorblindness)',
|
|
48
|
-
};
|
|
49
|
-
// ============================================================================
|
|
50
31
|
// Colorblindness Transformation Matrices (Brettel 1997)
|
|
51
32
|
// ============================================================================
|
|
52
33
|
/**
|
|
@@ -76,6 +57,44 @@ export const BRETTEL_MATRICES = {
|
|
|
76
57
|
],
|
|
77
58
|
};
|
|
78
59
|
// ============================================================================
|
|
60
|
+
// Colorblindness Transformation Matrices (Machado et al. 2009, severity 1.0)
|
|
61
|
+
// ============================================================================
|
|
62
|
+
/**
|
|
63
|
+
* Machado, Oliveira & Fernandes (2009) transformation matrices at severity 1.0.
|
|
64
|
+
*
|
|
65
|
+
* Unlike {@link BRETTEL_MATRICES} (applied to gamma-encoded sRGB by the legacy
|
|
66
|
+
* simulator), these matrices are defined over **linear RGB** — use them only
|
|
67
|
+
* through `ColorblindnessSimulator.simulateColorblindnessMachado`, which
|
|
68
|
+
* linearizes, transforms, and re-encodes.
|
|
69
|
+
*
|
|
70
|
+
* The 5.0 band calibration (SEPARATION cuts) was computed against this set, so
|
|
71
|
+
* any recomputation of those bands must use the Machado path, not Brettel.
|
|
72
|
+
* Achromatopsia is not part of the Machado dichromacy model; it is represented
|
|
73
|
+
* here as Rec. 709 luminance grayscale in linear light.
|
|
74
|
+
*/
|
|
75
|
+
export const MACHADO_MATRICES = {
|
|
76
|
+
protanopia: [
|
|
77
|
+
[0.152286, 1.052583, -0.204868],
|
|
78
|
+
[0.114503, 0.786281, 0.099216],
|
|
79
|
+
[-0.003882, -0.048116, 1.051998],
|
|
80
|
+
],
|
|
81
|
+
deuteranopia: [
|
|
82
|
+
[0.367322, 0.860646, -0.227968],
|
|
83
|
+
[0.280085, 0.672501, 0.047413],
|
|
84
|
+
[-0.01182, 0.04294, 0.968881],
|
|
85
|
+
],
|
|
86
|
+
tritanopia: [
|
|
87
|
+
[1.255528, -0.076749, -0.178779],
|
|
88
|
+
[-0.078411, 0.930809, 0.147602],
|
|
89
|
+
[0.004733, 0.691367, 0.3039],
|
|
90
|
+
],
|
|
91
|
+
achromatopsia: [
|
|
92
|
+
[0.2126, 0.7152, 0.0722],
|
|
93
|
+
[0.2126, 0.7152, 0.0722],
|
|
94
|
+
[0.2126, 0.7152, 0.0722],
|
|
95
|
+
],
|
|
96
|
+
};
|
|
97
|
+
// ============================================================================
|
|
79
98
|
// Regular Expressions
|
|
80
99
|
// ============================================================================
|
|
81
100
|
/**
|
|
@@ -83,7 +102,6 @@ export const BRETTEL_MATRICES = {
|
|
|
83
102
|
*/
|
|
84
103
|
export const PATTERNS = {
|
|
85
104
|
HEX_COLOR: /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,
|
|
86
|
-
RGB_COLOR: /^rgb\(\d+,\s*\d+,\s*\d+\)$/,
|
|
87
105
|
};
|
|
88
106
|
// ============================================================================
|
|
89
107
|
// API Configuration (Universalis)
|
|
@@ -99,8 +117,6 @@ export const UNIVERSALIS_API_RETRY_DELAY = 1000; // milliseconds
|
|
|
99
117
|
* API caching and rate limiting
|
|
100
118
|
*/
|
|
101
119
|
export const API_CACHE_TTL = 5 * 60 * 1000; // 5 minutes
|
|
102
|
-
/** @internal */
|
|
103
|
-
export const API_DEBOUNCE_DELAY = 500; // milliseconds
|
|
104
120
|
export const API_CACHE_VERSION = '1.0.0'; // Increment to invalidate all cached data
|
|
105
121
|
export const API_MAX_RESPONSE_SIZE = 1024 * 1024; // 1 MB maximum response size
|
|
106
122
|
export const API_RATE_LIMIT_DELAY = 200; // milliseconds between requests
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,+EAA+E;AAC/E,+BAA+B;AAC/B,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC;AACzB,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC;AAE3B;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC;AACzB,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC;AAC3B,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAChC,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAClC,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC;AAC3B,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,CAAC;AAE7B;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU;AAEvF,+EAA+E;AAC/E,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -41543,7 +41543,7 @@
|
|
|
41543
41543
|
}
|
|
41544
41544
|
]
|
|
41545
41545
|
},
|
|
41546
|
-
"
|
|
41546
|
+
"Helions": {
|
|
41547
41547
|
"Male": [
|
|
41548
41548
|
{
|
|
41549
41549
|
"index": 0,
|
|
@@ -41543,7 +41543,7 @@
|
|
|
41543
41543
|
}
|
|
41544
41544
|
]
|
|
41545
41545
|
},
|
|
41546
|
-
"
|
|
41546
|
+
"Helions": {
|
|
41547
41547
|
"Male": [
|
|
41548
41548
|
{
|
|
41549
41549
|
"index": 0,
|