@jjlmoya/utils-games-development 1.60.0 → 1.62.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.
- package/package.json +1 -1
- package/src/category/index.ts +2 -1
- package/src/entries.ts +2 -1
- package/src/index.ts +1 -0
- package/src/tests/locale_completeness.test.ts +2 -2
- package/src/tests/spanish_leakage.test.ts +25 -3
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tool/gameUIAccessibilityTester/bibliography.astro +6 -0
- package/src/tool/gameUIAccessibilityTester/bibliography.ts +10 -0
- package/src/tool/gameUIAccessibilityTester/component.astro +210 -0
- package/src/tool/gameUIAccessibilityTester/controller-actions.ts +92 -0
- package/src/tool/gameUIAccessibilityTester/controller.ts +237 -0
- package/src/tool/gameUIAccessibilityTester/dom-views.ts +193 -0
- package/src/tool/gameUIAccessibilityTester/entry.ts +28 -0
- package/src/tool/gameUIAccessibilityTester/evaluator.ts +43 -0
- package/src/tool/gameUIAccessibilityTester/game-ui-accessibility-stress-tester.css +982 -0
- package/src/tool/gameUIAccessibilityTester/i18n/de.ts +203 -0
- package/src/tool/gameUIAccessibilityTester/i18n/en.ts +199 -0
- package/src/tool/gameUIAccessibilityTester/i18n/es.ts +203 -0
- package/src/tool/gameUIAccessibilityTester/i18n/fr.ts +203 -0
- package/src/tool/gameUIAccessibilityTester/i18n/id.ts +203 -0
- package/src/tool/gameUIAccessibilityTester/i18n/it.ts +203 -0
- package/src/tool/gameUIAccessibilityTester/i18n/ja.ts +203 -0
- package/src/tool/gameUIAccessibilityTester/i18n/ko.ts +203 -0
- package/src/tool/gameUIAccessibilityTester/i18n/nl.ts +203 -0
- package/src/tool/gameUIAccessibilityTester/i18n/pl.ts +203 -0
- package/src/tool/gameUIAccessibilityTester/i18n/pt.ts +203 -0
- package/src/tool/gameUIAccessibilityTester/i18n/ru.ts +203 -0
- package/src/tool/gameUIAccessibilityTester/i18n/sv.ts +203 -0
- package/src/tool/gameUIAccessibilityTester/i18n/tr.ts +203 -0
- package/src/tool/gameUIAccessibilityTester/i18n/zh.ts +203 -0
- package/src/tool/gameUIAccessibilityTester/index.ts +11 -0
- package/src/tool/gameUIAccessibilityTester/logic.test.ts +57 -0
- package/src/tool/gameUIAccessibilityTester/logic.ts +157 -0
- package/src/tool/gameUIAccessibilityTester/report.ts +59 -0
- package/src/tool/gameUIAccessibilityTester/seo.astro +15 -0
- package/src/tool/gameUIAccessibilityTester/storage.ts +34 -0
- package/src/tool/gameUIAccessibilityTester/ui.ts +80 -0
- package/src/tools.ts +2 -0
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { GameUiAccessibilityTesterUI } from '../ui';
|
|
4
|
+
import { bibliographyEntries } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const slug = 'game-ui-tillganglighet-stresstesta';
|
|
7
|
+
const title = 'Stresstesta Tillgänglighet för Spel UI';
|
|
8
|
+
const description = 'Inspektera skärmdumpar från spel lokalt med färgblindhetssimuleringar, kontrastmätning, oskärpa, skalning och värmekartor.';
|
|
9
|
+
|
|
10
|
+
const faq = [
|
|
11
|
+
{
|
|
12
|
+
question: 'Certifierar detta verktyg att mitt spel-UI är tillgängligt?',
|
|
13
|
+
answer: 'Nej. Det kombinerar färgblindhetssimuleringar, kontrastmätningar och granskningsfrågor. Använd resultaten som stöd vid designgranskning och användartester.',
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
question: 'Laddas min skärmdump upp till någon server?',
|
|
17
|
+
answer: 'Nej. Bilden bearbetas helt och hållet i din webbläsare. Endast dina visningsinställningar sparas lokalt.',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
question: 'Vad bör jag mäta med de två färgprovarna?',
|
|
21
|
+
answer: 'Välj två färger som förmedlar olika betydelser, såsom allierad och fiende, aktiv och inaktiv, eller olika sällsynthetsgrader.',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
question: 'Varför kan manuell granskning behövas trots god kontrast?',
|
|
25
|
+
answer: 'Ett par färger kan ha god kontrast på papperet, men små ikoner, tunn text eller en rörlig bakgrund kan ändå göra elementen svåra att identifiera.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Vad visar värmekartan?',
|
|
29
|
+
answer: 'Värmekartan markerar områden där färgskillnaden minskar kraftigt efter den valda simuleringen.',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howTo = [
|
|
34
|
+
{ name: 'Ladda en skärmdump', text: 'Välj en PNG, JPEG eller WebP-bild från ditt spel. Bilden stannar i din webbläsares minne.' },
|
|
35
|
+
{ name: 'Välj simuleringslins', text: 'Jämför originalet med simuleringar för färgblindhet, gråskala eller reducerad kontrast.' },
|
|
36
|
+
{ name: 'Tillämpa visuella stresstester', text: 'Lägg till oskärpa, minska upplösningen, zooma in på pixlar eller aktivera värmekartan.' },
|
|
37
|
+
{ name: 'Mät två viktiga signaler', text: 'Välj Prov A eller B och klicka på originalbilden för att jämföra två färger.' },
|
|
38
|
+
{ name: 'Exportera dina slutsatser', text: 'Gå igenom granskningsfrågorna, skriv ner iakttagelser och ladda ner en jämförelsebild samt en JSON-rapport.' },
|
|
39
|
+
];
|
|
40
|
+
|
|
41
|
+
const softwareApplication: WithContext<SoftwareApplication> = {
|
|
42
|
+
'@context': 'https://schema.org',
|
|
43
|
+
'@type': 'SoftwareApplication',
|
|
44
|
+
name: title,
|
|
45
|
+
applicationCategory: 'DeveloperApplication',
|
|
46
|
+
operatingSystem: 'Any',
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const faqPage: WithContext<FAQPage> = {
|
|
50
|
+
'@context': 'https://schema.org',
|
|
51
|
+
'@type': 'FAQPage',
|
|
52
|
+
mainEntity: faq.map((item) => ({
|
|
53
|
+
'@type': 'Question',
|
|
54
|
+
name: item.question,
|
|
55
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
56
|
+
})),
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const howToSchema: WithContext<HowTo> = {
|
|
60
|
+
'@context': 'https://schema.org',
|
|
61
|
+
'@type': 'HowTo',
|
|
62
|
+
name: title,
|
|
63
|
+
step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })),
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
export const content: ToolLocaleContent<GameUiAccessibilityTesterUI> = {
|
|
67
|
+
slug,
|
|
68
|
+
title,
|
|
69
|
+
description,
|
|
70
|
+
ui: {
|
|
71
|
+
onboarding: 'Ladda en skärmdump från spelet, välj en simuleringslins och jämför två visuella signaler som spelare måste kunna skilja på.',
|
|
72
|
+
privacyNote: 'Lokal analys. Bilderna laddas inte upp.',
|
|
73
|
+
dropTitle: 'Släpp en skärmdump på granskningsytan',
|
|
74
|
+
dropHint: 'Dra en bild hit eller välj från din enhet. Använd en bild från en riktig spelsituation.',
|
|
75
|
+
chooseImage: 'Välj skärmdump',
|
|
76
|
+
replaceImage: 'Ersätt skärmdump',
|
|
77
|
+
supportedFiles: 'PNG, JPEG eller WebP upp till 16 MB. Stora bilder anpassas automatiskt.',
|
|
78
|
+
lensLabel: 'Simuleringslins',
|
|
79
|
+
lensOriginal: 'Original',
|
|
80
|
+
lensProtanopia: 'Protanopi',
|
|
81
|
+
lensDeuteranopia: 'Deuteranopi',
|
|
82
|
+
lensTritanopia: 'Tritanopi',
|
|
83
|
+
lensAchromatopsia: 'Gråskala',
|
|
84
|
+
lensReducedContrast: 'Minskad kontrast',
|
|
85
|
+
lensDesaturation: 'Avmättnad',
|
|
86
|
+
compareLabel: 'Jämförelseläge',
|
|
87
|
+
compareSideBySide: 'Sida vid sida',
|
|
88
|
+
compareSplit: 'Delad lins',
|
|
89
|
+
comparePress: 'Håll för original',
|
|
90
|
+
holdOriginal: 'Håll intryckt för original',
|
|
91
|
+
splitPosition: 'Linsposition',
|
|
92
|
+
stressLabel: 'Signalstresstester',
|
|
93
|
+
blurLabel: 'Oskärpa i pixlar',
|
|
94
|
+
downscaleLabel: 'Liten skärm-förhandsgranskning',
|
|
95
|
+
downscaleFull: 'Full',
|
|
96
|
+
downscaleHalf: 'Hälften',
|
|
97
|
+
downscaleQuarter: 'Fjärdedel',
|
|
98
|
+
downscaleEighth: 'Åttondel',
|
|
99
|
+
zoomLabel: 'Inspektionszoom',
|
|
100
|
+
heatmapLabel: 'Värmekarta för kanter',
|
|
101
|
+
heatmapHint: 'Markerar områden där färgseparationsgraden minskar kraftigt.',
|
|
102
|
+
originalView: 'Originalsignal',
|
|
103
|
+
simulatedView: 'Simulerad signal',
|
|
104
|
+
emptyCanvas: 'Välj en skärmdump för att starta analysen. Bilden stannar på din enhet.',
|
|
105
|
+
sampleTitle: 'Signalfärgprovar',
|
|
106
|
+
sampleInstructions: 'Välj A eller B och klicka på originalet för att ta färgprov.',
|
|
107
|
+
sampleA: 'Prov A',
|
|
108
|
+
sampleB: 'Prov B',
|
|
109
|
+
sampleAName: 'Betydelse Prov A',
|
|
110
|
+
sampleBName: 'Betydelse Prov B',
|
|
111
|
+
manualColor: 'Ange färg direkt',
|
|
112
|
+
sampleAInitial: 'Allierad',
|
|
113
|
+
sampleBInitial: 'Fiende',
|
|
114
|
+
noSample: 'Väntar på skärmdump',
|
|
115
|
+
originalContrast: 'Originalkontrast',
|
|
116
|
+
simulatedContrast: 'Simulerad kontrast',
|
|
117
|
+
separationRetained: 'Bevarad separation',
|
|
118
|
+
statusStrong: 'Signalen är tydligt separerad',
|
|
119
|
+
statusWatch: 'Granska i spelsammanhang',
|
|
120
|
+
statusReview: 'Signalen bör ses över',
|
|
121
|
+
statusPending: 'Ingen analys ännu',
|
|
122
|
+
measurementLabel: 'Mätning',
|
|
123
|
+
heuristicLabel: 'Heuristik',
|
|
124
|
+
manualReviewLabel: 'Manuell granskning',
|
|
125
|
+
measurementHint: 'Beräknar kontrastförhållandet för relativ luminans enligt WCAG för de valda färgerna.',
|
|
126
|
+
heuristicHint: 'Jämför färgavståndet före och efter den visuella simuleringen.',
|
|
127
|
+
promptTitle: 'Frågor för UI-granskning',
|
|
128
|
+
promptColorOnly: 'Kan spelare identifiera element utan att enbart förlita sig på färg?',
|
|
129
|
+
promptChangingBackground: 'Är texten läsbar mot ljusa, mörka eller rörliga bakgrunder?',
|
|
130
|
+
promptMinimap: 'Skiljer sig kartikoner med hjälp av form eller mönster utöver färg?',
|
|
131
|
+
promptStates: 'Är lägena vald, inaktiv och nedräkning tydliga?',
|
|
132
|
+
promptShape: 'Förstärker en ikon, text eller ljudeffekt varje färgsignal?',
|
|
133
|
+
findingLabel: 'Teamnotering',
|
|
134
|
+
findingPlaceholder: 'Exempel: Fiendens kontur flyter ihop med den röda skadeeffekten',
|
|
135
|
+
addFinding: 'Lägg till notering',
|
|
136
|
+
findingsEmpty: 'Inga sparade noteringar ännu.',
|
|
137
|
+
exportSheet: 'Ladda ner jämförelsebild',
|
|
138
|
+
exportReport: 'Ladda ner JSON-rapport',
|
|
139
|
+
resetTool: 'Återställ',
|
|
140
|
+
uploadError: 'Kunde inte läsa bilden. Välj en giltig PNG, JPEG eller WebP.',
|
|
141
|
+
fileTooLarge: 'Bilden är större än 16 MB. Välj en mindre fil.',
|
|
142
|
+
imageReady: 'Skärmdump laddad. Välj två färgprovar för att börja.',
|
|
143
|
+
reportDownloaded: 'JSON-rapport nedladdad.',
|
|
144
|
+
sheetDownloaded: 'Jämförelsebild nedladdad.',
|
|
145
|
+
localOnlyDisclosure: 'Bearbetningen sker helt lokalt i din webbläsare.',
|
|
146
|
+
limitationDisclosure: 'Verktyget stödjer designgranskning men ersätter inte tester med spelare.',
|
|
147
|
+
reportTitle: 'Granskningsrapport Spel-UI Tillgänglighet',
|
|
148
|
+
reportFindingReview: 'Det uppmätta färgparet tappar avsevärd kontrast i den valda simuleringen.',
|
|
149
|
+
},
|
|
150
|
+
seo: [
|
|
151
|
+
{
|
|
152
|
+
type: 'title',
|
|
153
|
+
level: 2,
|
|
154
|
+
text: 'Testa tillgängligheten i spel-UI utan att ladda upp bilder',
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'paragraph',
|
|
158
|
+
html: 'Spelgränssnitt måste fungera under dynamiska och visuelt komplexa förhållanden. Med detta lokala verktyg kan du granska dina skärmdumpar direkt i webbläsaren med hjälp av färgblindhetssimuleringar.',
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
type: 'title',
|
|
162
|
+
level: 2,
|
|
163
|
+
text: 'Mätningar, heuristik och mänsklig bedömning',
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
type: 'table',
|
|
167
|
+
headers: ['Typ av bevis', 'Vad verktyget ger', 'Vad det inte kan garantera'],
|
|
168
|
+
rows: [
|
|
169
|
+
['Mätning', 'Kontrastförhållande och relativ luminans enligt WCAG för två färger', 'Automatisk bekräftelse av hela spelets tillgänglighet'],
|
|
170
|
+
['Simulering', 'Vetenskapliga omvandlingar för protanopi, deuteranopi och tritanopi', 'Den exakta visuella upplevelsen för varje enskild spelare'],
|
|
171
|
+
['Heuristik', 'Oskärpa, minskad upplösning och kantförlustanalys', 'Automatisk bedömning av gränssnittets designkvalitet'],
|
|
172
|
+
['Manuell granskning', 'Checklista och exporterbara rapporter för teamet', 'Ersättning för tester med riktiga användare'],
|
|
173
|
+
],
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
type: 'title',
|
|
177
|
+
level: 2,
|
|
178
|
+
text: 'Mät färger som påverkar spelarens beslut',
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
type: 'paragraph',
|
|
182
|
+
html: 'Fokusera på färgpar som är avgörande för spelförloppet, till exempel allierad och fiende. Om kontrasten minskar under simulering bör du överväga att lägga till ikoner eller former.',
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
type: 'tip',
|
|
186
|
+
title: 'Testa skärmdumpar från intensiva spelsituationer',
|
|
187
|
+
html: 'Använd bilder från aktiva spelsituationer i stället för renskalade menyer för att få realistiska testresultat.',
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
type: 'title',
|
|
191
|
+
level: 2,
|
|
192
|
+
text: 'Använd den exporterade rapporten i teamarbetet',
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
type: 'paragraph',
|
|
196
|
+
html: 'JSON-rapporten och PNG-jämförelsebilden kan bifogas i ert projekthanteringsverktyg för att underlätta kommunikationen kring gränssnittsändringar.',
|
|
197
|
+
},
|
|
198
|
+
],
|
|
199
|
+
faq,
|
|
200
|
+
howTo,
|
|
201
|
+
schemas: [softwareApplication, faqPage, howToSchema],
|
|
202
|
+
bibliography: bibliographyEntries,
|
|
203
|
+
};
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { GameUiAccessibilityTesterUI } from '../ui';
|
|
4
|
+
import { bibliographyEntries } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const slug = 'oyun-ui-erisilebilirlik-stres-testi';
|
|
7
|
+
const title = 'Oyun UI Erişilebilirlik Stres Testi';
|
|
8
|
+
const description = 'Oyun ekran görüntülerini renk körlüğü simülasyonları, HUD kontrast ölçümü, bulanıklık ve ısı haritaları ile tarayıcınızda yerel olarak inceleyin.';
|
|
9
|
+
|
|
10
|
+
const faq = [
|
|
11
|
+
{
|
|
12
|
+
question: 'Bu araç oyun arayüzümün erişilebilir olduğunu sertifikalandırır mı?',
|
|
13
|
+
answer: 'Hayır. Renk körlüğü simülasyonlarını, kontrast ölçümlerini ve tasarım inceleme sorularını bir araya getirir. Sonuçları resmi sertifika yerine tasarım rehberi olarak kullanın.',
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
question: 'Ekran görüntüm bir sunucuya yükleniyor mu?',
|
|
17
|
+
answer: 'Hayır. Görsel tamamen tarayıcınızın içinde işlenir ve analiz edilir. Yalnızca görünüm ayarlarınız yerel depolamada saklanır.',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
question: 'İki renk probu ile neleri ölçmeliyim?',
|
|
21
|
+
answer: 'Dost ve düşمان göstergeleri, aktif ve pasif durumlar veya nadirlik seviyeleri gibi farklı anlam taşıyan iki renk seçin.',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
question: 'İyi bir kontrast oranına rağmen neden manuel inceleme gereklidir?',
|
|
25
|
+
answer: 'İki renk sayısal olarak iyi bir kontrasta sahip olsa da küçük bir simge, ince bir metin veya hareketli bir arka plan fark edilmeyi zorlaştırabilir.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Isı haritası neyi gösterir?',
|
|
29
|
+
answer: 'Isı haritası, seçilen simülasyondan sonra renk ayrımının belirgin şekilde düştüğü sınır bölgelerini vurgular.',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howTo = [
|
|
34
|
+
{ name: 'Ekran görüntüsü yükleyin', text: 'Oyununuzdan PNG, JPEG veya WebP formatında bir görsel seçin. Görsel tarayıcınızın belleğinde kalır.' },
|
|
35
|
+
{ name: 'Simülasyon merceği seçin', text: 'Orijinal görseli renk körlüğü, gri tonlama veya düşük kontrast simülasyonları ile karşılaştırın.' },
|
|
36
|
+
{ name: 'Görsel stres uygulayın', text: 'Bulanıklık ekleyin, çözünürlüğü düşürün, piksellere yakınlaştırın veya kenar ısı haritasını etkinleştirin.' },
|
|
37
|
+
{ name: 'İki kritik sinyali ölçün', text: 'Prob A veya B\'yi seçin ve iki rengi karşılaştırmak için orijinal görsele tıklayın.' },
|
|
38
|
+
{ name: 'Bulguları dışa aktarın', text: 'İnceleme sorularını gözden geçirin, notlarınızı ekleyin ve karşılaştırma görseli ile JSON raporunu indirin.' },
|
|
39
|
+
];
|
|
40
|
+
|
|
41
|
+
const softwareApplication: WithContext<SoftwareApplication> = {
|
|
42
|
+
'@context': 'https://schema.org',
|
|
43
|
+
'@type': 'SoftwareApplication',
|
|
44
|
+
name: title,
|
|
45
|
+
applicationCategory: 'DeveloperApplication',
|
|
46
|
+
operatingSystem: 'Any',
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const faqPage: WithContext<FAQPage> = {
|
|
50
|
+
'@context': 'https://schema.org',
|
|
51
|
+
'@type': 'FAQPage',
|
|
52
|
+
mainEntity: faq.map((item) => ({
|
|
53
|
+
'@type': 'Question',
|
|
54
|
+
name: item.question,
|
|
55
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
56
|
+
})),
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const howToSchema: WithContext<HowTo> = {
|
|
60
|
+
'@context': 'https://schema.org',
|
|
61
|
+
'@type': 'HowTo',
|
|
62
|
+
name: title,
|
|
63
|
+
step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })),
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
export const content: ToolLocaleContent<GameUiAccessibilityTesterUI> = {
|
|
67
|
+
slug,
|
|
68
|
+
title,
|
|
69
|
+
description,
|
|
70
|
+
ui: {
|
|
71
|
+
onboarding: 'Bir oyun ekran görüntüsü yükleyin, bir simülasyon merceği seçin ve oyuncuların ayırt etmesi gereken iki görsel sinyali karşılaştırın.',
|
|
72
|
+
privacyNote: 'Yerel analiz. Ekran görüntüleri sunucuya yüklenmez.',
|
|
73
|
+
dropTitle: 'Oyun ekran görüntüsünü çalışma alanına bırakın',
|
|
74
|
+
dropHint: 'Görseli buraya bırakın veya cihazınızdan seçin. Gerçek arka plan içeren bir oyun anı kullanın.',
|
|
75
|
+
chooseImage: 'Görsel seç',
|
|
76
|
+
replaceImage: 'Görseli değiştir',
|
|
77
|
+
supportedFiles: '16 MB\'a kadar PNG, JPEG veya WebP. Büyük görseller 1600 px boyutuna ölçeklenir.',
|
|
78
|
+
lensLabel: 'Simülasyon merceği',
|
|
79
|
+
lensOriginal: 'Orijinal',
|
|
80
|
+
lensProtanopia: 'Protanopi',
|
|
81
|
+
lensDeuteranopia: 'Deuteranopi',
|
|
82
|
+
lensTritanopia: 'Tritanopi',
|
|
83
|
+
lensAchromatopsia: 'Gri tonlama',
|
|
84
|
+
lensReducedContrast: 'Düşük kontrast',
|
|
85
|
+
lensDesaturation: 'Doygunluk azaltma',
|
|
86
|
+
compareLabel: 'Karşılaştırma modu',
|
|
87
|
+
compareSideBySide: 'Yan yana',
|
|
88
|
+
compareSplit: 'Bölünmüş mercek',
|
|
89
|
+
comparePress: 'Basılı tut Orijinal',
|
|
90
|
+
holdOriginal: 'Orijinal için basılı tutun',
|
|
91
|
+
splitPosition: 'Mercek konumu',
|
|
92
|
+
stressLabel: 'Sinyal stres testleri',
|
|
93
|
+
blurLabel: 'Piksel cinsinden bulanıklık',
|
|
94
|
+
downscaleLabel: 'Küçük ekran önizlemesi',
|
|
95
|
+
downscaleFull: 'Tam',
|
|
96
|
+
downscaleHalf: 'Yarım',
|
|
97
|
+
downscaleQuarter: 'Çeyrek',
|
|
98
|
+
downscaleEighth: 'Sekizde bir',
|
|
99
|
+
zoomLabel: 'Piksel yakınlaştırma',
|
|
100
|
+
heatmapLabel: 'Kenar ısı haritası',
|
|
101
|
+
heatmapHint: 'Seçilen mercek altında renk ayrımının düştüğü alanları vurgular.',
|
|
102
|
+
originalView: 'Orijinal sinyal',
|
|
103
|
+
simulatedView: 'Simüle edilen sinyal',
|
|
104
|
+
emptyCanvas: 'Karşılaştırmayı başlatmak için bir görsel seçin. Görseliniz cihazınızda kalacaktır.',
|
|
105
|
+
sampleTitle: 'Sinyal probları',
|
|
106
|
+
sampleInstructions: 'Prob A veya B\'yi seçin ve renk örneği almak için orijinal görsele tıklayın.',
|
|
107
|
+
sampleA: 'Prob A',
|
|
108
|
+
sampleB: 'Prob B',
|
|
109
|
+
sampleAName: 'Prob A anlamı',
|
|
110
|
+
sampleBName: 'Prob B anlamı',
|
|
111
|
+
manualColor: 'Rengi doğrudan belirle',
|
|
112
|
+
sampleAInitial: 'Dost göstergesi',
|
|
113
|
+
sampleBInitial: 'Düşman göstergesi',
|
|
114
|
+
noSample: 'Görsel bekleniyor',
|
|
115
|
+
originalContrast: 'Orijinal kontrast',
|
|
116
|
+
simulatedContrast: 'Simüle kontrast',
|
|
117
|
+
separationRetained: 'Korunan ayrım',
|
|
118
|
+
statusStrong: 'Sinyal net şekilde ayırt ediliyor',
|
|
119
|
+
statusWatch: 'Bağlam içinde kontrol edin',
|
|
120
|
+
statusReview: 'Sinyal tasarımını gözden geçirin',
|
|
121
|
+
statusPending: 'Henüz analiz yok',
|
|
122
|
+
measurementLabel: 'Ölçüm',
|
|
123
|
+
heuristicLabel: 'Sezgisel',
|
|
124
|
+
manualReviewLabel: 'Manuel inceleme',
|
|
125
|
+
measurementHint: 'Örneklenen iki renk için WCAG bağıl parlaklık kontrast oranını hesaplar.',
|
|
126
|
+
heuristicHint: 'Simülasyon öncesi ve sonrası renk mesafesini karşılaştırır.',
|
|
127
|
+
promptTitle: 'Arayüz inceleme rehberi',
|
|
128
|
+
promptColorOnly: 'Oyuncular elemanları sadece renge bağımlı kalmadan ayırt edebiliyor mu?',
|
|
129
|
+
promptChangingBackground: 'Metinler açık, koyu ve hareketli arka planlarda okunabilir mi?',
|
|
130
|
+
promptMinimap: 'Harita simgeleri renk dışında biçim veya desenle ayrışıyor mu?',
|
|
131
|
+
promptStates: 'Seçili, pasif ve bekleme durumları net mi?',
|
|
132
|
+
promptShape: 'Bir simge, metin veya ses efekti renk sinyalini destekliyor mu?',
|
|
133
|
+
findingLabel: 'Ekip notu',
|
|
134
|
+
findingPlaceholder: 'Örnek: Düşman hatları kırmızı efekt üzerinde kayboluyor',
|
|
135
|
+
addFinding: 'Not ekle',
|
|
136
|
+
findingsEmpty: 'Henüz kaydedilmiş bir not yok.',
|
|
137
|
+
exportSheet: 'Karşılaştırma görselini indir',
|
|
138
|
+
exportReport: 'JSON raporunu indir',
|
|
139
|
+
resetTool: 'Sıfırla',
|
|
140
|
+
uploadError: 'Görsel okunamadı. Lütfen geçerli bir PNG, JPEG veya WebP seçin.',
|
|
141
|
+
fileTooLarge: 'Görsel 16 MB\'tan büyük. Lütfen daha küçük bir dosya seçin.',
|
|
142
|
+
imageReady: 'Görsel yüklendi. Başlamak için iki renk probu seçin.',
|
|
143
|
+
reportDownloaded: 'JSON raporu indirildi.',
|
|
144
|
+
sheetDownloaded: 'Karşılaştırma görseli indirildi.',
|
|
145
|
+
localOnlyDisclosure: 'Tüm işlemler %100 yerel olarak tarayıcınızda gerçekleşir.',
|
|
146
|
+
limitationDisclosure: 'Bu araç tasarımı destekler, gerçek kullanıcı testlerinin yerini almaz.',
|
|
147
|
+
reportTitle: 'Oyun UI Erişilebilirlik İnceleme Raporu',
|
|
148
|
+
reportFindingReview: 'Ölçülen renk çifti simülasyonda belirgin kontrast kaybı yaşadı.',
|
|
149
|
+
},
|
|
150
|
+
seo: [
|
|
151
|
+
{
|
|
152
|
+
type: 'title',
|
|
153
|
+
level: 2,
|
|
154
|
+
text: 'Görsel yüklemeden oyun UI erişilebilirliğini test edin',
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'paragraph',
|
|
158
|
+
html: 'Oyun arayüzleri dinamik ve yoğun görsel koşullarda okunabilir olmalıdır. Bu yerel araç, ekran görüntülerinizi renk körlüğü simülasyonları ile doğrudan tarayıcınızda incelemenizi sağlar.',
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
type: 'title',
|
|
162
|
+
level: 2,
|
|
163
|
+
text: 'Ölçümler, sezgisel yöntemler ve insan değerlendirmesi',
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
type: 'table',
|
|
167
|
+
headers: ['Kanıt Türü', 'Bu Aracın Sağladıkları', 'Garanti Edemeyecekleri'],
|
|
168
|
+
rows: [
|
|
169
|
+
['Ölçüm', 'İki renk için WCAG bağıl parlaklık ve kontrast oranı', 'Tüm oyunun otomatik olarak standartlara uygunluğu'],
|
|
170
|
+
['Simülasyon', 'Protanopi, deuteranopi ve tritanopi bilimsel dönüşümleri', 'Her bireysel oyuncunun tam görsel deneyimi'],
|
|
171
|
+
['Sezgisel', 'Bulanıklık, ölçek küçültme ve kenar kaybı tespiti', 'Arayüz tasarım kalitesinin otomatik değerlendirmesi'],
|
|
172
|
+
['Manuel İnceleme', 'Soru rehberi ve dışa aktarılabilir ekip raporları', 'Gerçek kullanıcı testlerinin yerini alma'],
|
|
173
|
+
],
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
type: 'title',
|
|
177
|
+
level: 2,
|
|
178
|
+
text: 'Oyuncunun kararlarını etkileyen renkleri ölçün',
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
type: 'paragraph',
|
|
182
|
+
html: 'Ölçümlerinizi dost ve düşman gibi oyunu etkileyen renk çiftlerine odaklayın. Simülasyonda kontrast düşüyorsa biçim veya simgeler ekleyin.',
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
type: 'tip',
|
|
186
|
+
title: 'Yoğun oyun anlarından alınan görselleri kullanın',
|
|
187
|
+
html: 'Gerçekçi sonuçlar elde etmek için sade menüler yerine hareketli ve efektli oyun anlarından alınan ekran görüntülerini tercih edin.',
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
type: 'title',
|
|
191
|
+
level: 2,
|
|
192
|
+
text: 'Dışa aktarılan raporu ekip çalışmasında kullanın',
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
type: 'paragraph',
|
|
196
|
+
html: 'İndirilebilir JSON raporu ve PNG görseli, arayüz düzeltmelerini kolaylaştırmak için görev yönetimi sisteminize eklenebilir.',
|
|
197
|
+
},
|
|
198
|
+
],
|
|
199
|
+
faq,
|
|
200
|
+
howTo,
|
|
201
|
+
schemas: [softwareApplication, faqPage, howToSchema],
|
|
202
|
+
bibliography: bibliographyEntries,
|
|
203
|
+
};
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { GameUiAccessibilityTesterUI } from '../ui';
|
|
4
|
+
import { bibliographyEntries } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const slug = 'game-ui-accessibility-stress-tester';
|
|
7
|
+
const title = '游戏 UI 无障碍压力测试工具';
|
|
8
|
+
const description = '在浏览器本地检测游戏 UI 截图,支持色盲模拟、HUD 对比度取色、模糊、缩放及边缘坍塌热力图。';
|
|
9
|
+
|
|
10
|
+
const faq = [
|
|
11
|
+
{
|
|
12
|
+
question: '此工具能否为我的游戏 UI 提供官方无障碍认证?',
|
|
13
|
+
answer: '不能。它结合了色觉模拟算法、对比度计算和 UI 设计审查清单。测试结果应用于指导设计审查和玩家测试,而非作为合规证书。',
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
question: '我的游戏截图会被上传到服务器吗?',
|
|
17
|
+
answer: '不会。图像解码、取色、色觉转换和报告生成完全在您的浏览器本地完成。本地仅保存视图偏好设置。',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
question: '我应该使用两个色彩探针测量什么?',
|
|
21
|
+
answer: '选择代表不同游戏含义的一对颜色,例如盟友与敌人、激活与禁用、生命值与伤害或物品稀有度。',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
question: '为什么对比度达标后仍需要人工审查?',
|
|
25
|
+
answer: '即使两色点对比度较高,微小图标、细体文字、动态背景或纯色传达机制仍可能导致玩家难以快速识别。',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: '热力图展示了什么信息?',
|
|
29
|
+
answer: '热力图高亮显示在所选色盲模式下,相邻像素 RGB 颜色分离度急剧下降的边缘区域。',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howTo = [
|
|
34
|
+
{ name: '载入本地截图', text: '选择 PNG、JPEG 或 WebP 格式的游戏或界面截图。图片保持在浏览器内存中。' },
|
|
35
|
+
{ name: '选择模拟滤镜', text: '对比原始图像与红色盲、绿色盲、蓝色盲、灰度或低对比度模拟效果。' },
|
|
36
|
+
{ name: '施加视觉压力', text: '添加模糊、降低渲染分辨率、放大像素或开启边缘坍塌热力图。' },
|
|
37
|
+
{ name: '测量两个关键信号', text: '选择探针 A 或 B 并点击原始图像,或直接输入十六进制颜色值。' },
|
|
38
|
+
{ name: '记录并导出结论', text: '参考审查指南填写团队观察结论,并下载对比图及 JSON 结构化报告。' },
|
|
39
|
+
];
|
|
40
|
+
|
|
41
|
+
const softwareApplication: WithContext<SoftwareApplication> = {
|
|
42
|
+
'@context': 'https://schema.org',
|
|
43
|
+
'@type': 'SoftwareApplication',
|
|
44
|
+
name: title,
|
|
45
|
+
applicationCategory: 'DeveloperApplication',
|
|
46
|
+
operatingSystem: 'Any',
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const faqPage: WithContext<FAQPage> = {
|
|
50
|
+
'@context': 'https://schema.org',
|
|
51
|
+
'@type': 'FAQPage',
|
|
52
|
+
mainEntity: faq.map((item) => ({
|
|
53
|
+
'@type': 'Question',
|
|
54
|
+
name: item.question,
|
|
55
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
56
|
+
})),
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const howToSchema: WithContext<HowTo> = {
|
|
60
|
+
'@context': 'https://schema.org',
|
|
61
|
+
'@type': 'HowTo',
|
|
62
|
+
name: title,
|
|
63
|
+
step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })),
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
export const content: ToolLocaleContent<GameUiAccessibilityTesterUI> = {
|
|
67
|
+
slug,
|
|
68
|
+
title,
|
|
69
|
+
description,
|
|
70
|
+
ui: {
|
|
71
|
+
onboarding: '载入一张游戏截图,选择模拟滤镜,并比较玩家必须明确区分的两个关键视觉信号。',
|
|
72
|
+
privacyNote: '本地光学分析,截图不会上传至任何服务器。',
|
|
73
|
+
dropTitle: '将游戏或 UI 截图拖入分析台',
|
|
74
|
+
dropHint: '拖放图片至此处,或从您的设备中选择。建议使用包含真实复杂背景的画面。',
|
|
75
|
+
chooseImage: '选择截图',
|
|
76
|
+
replaceImage: '替换截图',
|
|
77
|
+
supportedFiles: '支持最高 16 MB 的 PNG、JPEG 或 WebP。大图将自动缩放到 1600 px 边缘。',
|
|
78
|
+
lensLabel: '模拟滤镜',
|
|
79
|
+
lensOriginal: '原始',
|
|
80
|
+
lensProtanopia: '红色盲',
|
|
81
|
+
lensDeuteranopia: '绿色盲',
|
|
82
|
+
lensTritanopia: '蓝色盲',
|
|
83
|
+
lensAchromatopsia: '全色盲/灰度',
|
|
84
|
+
lensReducedContrast: '对比度降低',
|
|
85
|
+
lensDesaturation: '饱和度降低',
|
|
86
|
+
compareLabel: '对比模式',
|
|
87
|
+
compareSideBySide: '双图并排',
|
|
88
|
+
compareSplit: '分栏滑动',
|
|
89
|
+
comparePress: '按住查看原图',
|
|
90
|
+
holdOriginal: '按住显示原始图像',
|
|
91
|
+
splitPosition: '分割线位置',
|
|
92
|
+
stressLabel: '视觉压力测试控制',
|
|
93
|
+
blurLabel: '模糊像素',
|
|
94
|
+
downscaleLabel: '小屏幕显示预览',
|
|
95
|
+
downscaleFull: '全尺寸',
|
|
96
|
+
downscaleHalf: '1/2 尺寸',
|
|
97
|
+
downscaleQuarter: '1/4 尺寸',
|
|
98
|
+
downscaleEighth: '1/8 尺寸',
|
|
99
|
+
zoomLabel: '像素放大倍率',
|
|
100
|
+
heatmapLabel: '边缘坍塌热力图',
|
|
101
|
+
heatmapHint: '高亮显示在模拟滤镜下视觉分隔度急剧下降的局部边缘。',
|
|
102
|
+
originalView: '原始信号场',
|
|
103
|
+
simulatedView: '压力测试信号场',
|
|
104
|
+
emptyCanvas: '选择一张截图以激活对比区域。您的文件将保留在本地设备。',
|
|
105
|
+
sampleTitle: '关键信号色彩探针',
|
|
106
|
+
sampleInstructions: '选择 A 或 B,然后点击原始图像以采集传递不同游戏信息的色彩。',
|
|
107
|
+
sampleA: '探针 A',
|
|
108
|
+
sampleB: '探针 B',
|
|
109
|
+
sampleAName: '探针 A 含义',
|
|
110
|
+
sampleBName: '探针 B 含义',
|
|
111
|
+
manualColor: '直接指定颜色',
|
|
112
|
+
sampleAInitial: '盟友标记',
|
|
113
|
+
sampleBInitial: '敌方标记',
|
|
114
|
+
noSample: '等待载入截图',
|
|
115
|
+
originalContrast: '原始对比度',
|
|
116
|
+
simulatedContrast: '模拟对比度',
|
|
117
|
+
separationRetained: '保留分隔度',
|
|
118
|
+
statusStrong: '信号维持良好区分',
|
|
119
|
+
statusWatch: '结合上下文审查',
|
|
120
|
+
statusReview: '建议重新设计信号',
|
|
121
|
+
statusPending: '暂无数据',
|
|
122
|
+
measurementLabel: '测量',
|
|
123
|
+
heuristicLabel: '启发式',
|
|
124
|
+
manualReviewLabel: '人工审查状态',
|
|
125
|
+
measurementHint: '对比度采用 WCAG 相对亮度公式计算两色点的 sRGB 比例。',
|
|
126
|
+
heuristicHint: '保留分隔度比较模拟前后色彩空间距离的变化率。',
|
|
127
|
+
promptTitle: '界面设计审查指南',
|
|
128
|
+
promptColorOnly: '玩家能否在不依赖单一色调的情况下识别敌我、警告与成功?',
|
|
129
|
+
promptChangingBackground: '文字在明亮、暗沉或复杂动态背景上是否依然清晰?',
|
|
130
|
+
promptMinimap: '小地图图标除了颜色外,是否有形状、图案或文本区分?',
|
|
131
|
+
promptStates: '选中、禁用、冷却和伤害状态是否明确清晰?',
|
|
132
|
+
promptShape: '是否有图标、文字、动画或音效辅助增强每个色彩信号?',
|
|
133
|
+
findingLabel: '团队审查结论',
|
|
134
|
+
findingPlaceholder: '示例:受击全屏红框时敌人红框轮廓变得难以辨识',
|
|
135
|
+
addFinding: '添加结论',
|
|
136
|
+
findingsEmpty: '暂无记录的审查结论。',
|
|
137
|
+
exportSheet: '下载对比图',
|
|
138
|
+
exportReport: '下载 JSON 报告',
|
|
139
|
+
resetTool: '重置',
|
|
140
|
+
uploadError: '无法读取该图片,请选择有效的 PNG、JPEG 或 WebP 文件。',
|
|
141
|
+
fileTooLarge: '文件大于 16 MB,请导出尺寸较小的图片后重试。',
|
|
142
|
+
imageReady: '截图已在本地载入,请采集两个关键信号开始分析。',
|
|
143
|
+
reportDownloaded: '结构化 JSON 报告已下载。',
|
|
144
|
+
sheetDownloaded: '对比图已下载。',
|
|
145
|
+
localOnlyDisclosure: '图像解码、模拟转换及导出均在您的浏览器本地完成。',
|
|
146
|
+
limitationDisclosure: '本工具用于辅助设计审查,模拟结果不能代替真实玩家测试。',
|
|
147
|
+
reportTitle: '游戏 UI 无障碍审查报告',
|
|
148
|
+
reportFindingReview: '在选定的模拟模式下,采集的色彩信号对比度或分离度大幅下降。',
|
|
149
|
+
},
|
|
150
|
+
seo: [
|
|
151
|
+
{
|
|
152
|
+
type: 'title',
|
|
153
|
+
level: 2,
|
|
154
|
+
text: '如何在不上传截图的情况下评估游戏 UI 的色觉无障碍性',
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'paragraph',
|
|
158
|
+
html: '游戏界面通常需要在复杂的动态视觉条件下传达信息:镜头旋转、粒子特效以及多变的背景环境都可能降低可视度。本本地测试工具允许您直接在浏览器中通过学术色盲模拟算法和压力测试检查游戏截图。',
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
type: 'title',
|
|
162
|
+
level: 2,
|
|
163
|
+
text: '数值测量、启发式指标与人工判断',
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
type: 'table',
|
|
167
|
+
headers: ['证据类型', '本工具提供的能力', '本工具无法单独判定的内容'],
|
|
168
|
+
rows: [
|
|
169
|
+
['数值测量', '采集 sRGB 颜色的 WCAG 相对亮度与对比度', '游戏全局所有文本与背景是否完全合规'],
|
|
170
|
+
['模拟算法', '基于权威矩阵的红色盲、绿色盲与蓝色盲转换', '每一位玩家个体的具体主观视觉体验'],
|
|
171
|
+
['启发式', '模糊、降采样缩放与局部边缘色差坍塌检测', 'UI 整体设计质量的自动评分'],
|
|
172
|
+
['人工审查', '审查问题清单与可导出的团队沟通报告', '替代残障玩家参与的真实用户测试'],
|
|
173
|
+
],
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
type: 'title',
|
|
177
|
+
level: 2,
|
|
178
|
+
text: '选择决定玩家操作的关键色彩信号',
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
type: 'paragraph',
|
|
182
|
+
html: '请针对决定玩家决策的颜色进行测量,例如敌我标记或状态指示。若模拟下对比度显著下降,建议补充图标、形状或音效等冗余设计。',
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
type: 'tip',
|
|
186
|
+
title: '使用视觉复杂的实际游戏画面进行测试',
|
|
187
|
+
html: '相比于干净的设计草图,使用包含战斗特效、动态背景和复杂环境的实际游戏截图能提供更具价值的测试结果。',
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
type: 'title',
|
|
191
|
+
level: 2,
|
|
192
|
+
text: '在团队开发中高效利用导出的报告',
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
type: 'paragraph',
|
|
196
|
+
html: '导出的 JSON 报告与 PNG 对比图可直接附在 Jira 或 GitHub Issue 等任务单中,帮助设计师与工程师针对具体场景展开讨论与修改。',
|
|
197
|
+
},
|
|
198
|
+
],
|
|
199
|
+
faq,
|
|
200
|
+
howTo,
|
|
201
|
+
schemas: [softwareApplication, faqPage, howToSchema],
|
|
202
|
+
bibliography: bibliographyEntries,
|
|
203
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ToolDefinition } from '../../types';
|
|
2
|
+
import { gameUiAccessibilityTester } from './entry';
|
|
3
|
+
|
|
4
|
+
export * from './entry';
|
|
5
|
+
|
|
6
|
+
export const GAME_UI_ACCESSIBILITY_TESTER_TOOL: ToolDefinition = {
|
|
7
|
+
entry: gameUiAccessibilityTester,
|
|
8
|
+
Component: () => import('./component.astro'),
|
|
9
|
+
SEOComponent: () => import('./seo.astro'),
|
|
10
|
+
BibliographyComponent: () => import('./bibliography.astro'),
|
|
11
|
+
};
|