@jjlmoya/utils-hardware 1.15.0 → 1.17.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 (178) hide show
  1. package/package.json +1 -1
  2. package/src/category/i18n/ru.ts +5 -5
  3. package/src/category/index.ts +3 -1
  4. package/src/entries.ts +7 -1
  5. package/src/index.ts +2 -0
  6. package/src/pages/[locale]/[slug].astro +28 -12
  7. package/src/tests/locale_completeness.test.ts +7 -21
  8. package/src/tests/no_h1_in_components.test.ts +1 -1
  9. package/src/tests/shared-test-helpers.ts +56 -0
  10. package/src/tests/tool_exports.test.ts +34 -0
  11. package/src/tests/tool_validation.test.ts +2 -2
  12. package/src/tool/batteryHealthEstimator/bibliography.ts +13 -0
  13. package/src/tool/batteryHealthEstimator/i18n/de.ts +3 -13
  14. package/src/tool/batteryHealthEstimator/i18n/en.ts +3 -13
  15. package/src/tool/batteryHealthEstimator/i18n/es.ts +2 -12
  16. package/src/tool/batteryHealthEstimator/i18n/fr.ts +3 -13
  17. package/src/tool/batteryHealthEstimator/i18n/id.ts +3 -13
  18. package/src/tool/batteryHealthEstimator/i18n/it.ts +2 -12
  19. package/src/tool/batteryHealthEstimator/i18n/ja.ts +2 -12
  20. package/src/tool/batteryHealthEstimator/i18n/ko.ts +2 -12
  21. package/src/tool/batteryHealthEstimator/i18n/nl.ts +3 -13
  22. package/src/tool/batteryHealthEstimator/i18n/pl.ts +3 -13
  23. package/src/tool/batteryHealthEstimator/i18n/pt.ts +3 -13
  24. package/src/tool/batteryHealthEstimator/i18n/ru.ts +7 -17
  25. package/src/tool/batteryHealthEstimator/i18n/sv.ts +3 -13
  26. package/src/tool/batteryHealthEstimator/i18n/tr.ts +3 -13
  27. package/src/tool/batteryHealthEstimator/i18n/zh.ts +3 -13
  28. package/src/tool/batteryHealthEstimator/seo.astro +3 -2
  29. package/src/tool/colorAccuracyTest/bibliography.astro +14 -0
  30. package/src/tool/colorAccuracyTest/bibliography.ts +16 -0
  31. package/src/tool/colorAccuracyTest/color-accuracy-test.css +728 -0
  32. package/src/tool/colorAccuracyTest/component.astro +157 -0
  33. package/src/tool/colorAccuracyTest/entry.ts +29 -0
  34. package/src/tool/colorAccuracyTest/i18n/de.ts +284 -0
  35. package/src/tool/colorAccuracyTest/i18n/en.ts +284 -0
  36. package/src/tool/colorAccuracyTest/i18n/es.ts +284 -0
  37. package/src/tool/colorAccuracyTest/i18n/fr.ts +284 -0
  38. package/src/tool/colorAccuracyTest/i18n/id.ts +284 -0
  39. package/src/tool/colorAccuracyTest/i18n/it.ts +284 -0
  40. package/src/tool/colorAccuracyTest/i18n/ja.ts +284 -0
  41. package/src/tool/colorAccuracyTest/i18n/ko.ts +284 -0
  42. package/src/tool/colorAccuracyTest/i18n/nl.ts +284 -0
  43. package/src/tool/colorAccuracyTest/i18n/pl.ts +284 -0
  44. package/src/tool/colorAccuracyTest/i18n/pt.ts +284 -0
  45. package/src/tool/colorAccuracyTest/i18n/ru.ts +284 -0
  46. package/src/tool/colorAccuracyTest/i18n/sv.ts +284 -0
  47. package/src/tool/colorAccuracyTest/i18n/tr.ts +284 -0
  48. package/src/tool/colorAccuracyTest/i18n/zh.ts +284 -0
  49. package/src/tool/colorAccuracyTest/index.ts +9 -0
  50. package/src/tool/colorAccuracyTest/logic.ts +226 -0
  51. package/src/tool/colorAccuracyTest/seo.astro +15 -0
  52. package/src/tool/colorAccuracyTest/ui.ts +27 -0
  53. package/src/tool/deadPixelTest/bibliography.ts +13 -0
  54. package/src/tool/deadPixelTest/i18n/de.ts +2 -12
  55. package/src/tool/deadPixelTest/i18n/en.ts +2 -12
  56. package/src/tool/deadPixelTest/i18n/es.ts +2 -12
  57. package/src/tool/deadPixelTest/i18n/fr.ts +2 -12
  58. package/src/tool/deadPixelTest/i18n/id.ts +2 -12
  59. package/src/tool/deadPixelTest/i18n/it.ts +2 -12
  60. package/src/tool/deadPixelTest/i18n/ja.ts +2 -12
  61. package/src/tool/deadPixelTest/i18n/ko.ts +2 -12
  62. package/src/tool/deadPixelTest/i18n/nl.ts +2 -12
  63. package/src/tool/deadPixelTest/i18n/pl.ts +2 -12
  64. package/src/tool/deadPixelTest/i18n/pt.ts +2 -12
  65. package/src/tool/deadPixelTest/i18n/ru.ts +2 -12
  66. package/src/tool/deadPixelTest/i18n/sv.ts +2 -12
  67. package/src/tool/deadPixelTest/i18n/tr.ts +2 -12
  68. package/src/tool/deadPixelTest/i18n/zh.ts +2 -12
  69. package/src/tool/deadPixelTest/seo.astro +3 -2
  70. package/src/tool/gamepadTest/bibliography.ts +12 -0
  71. package/src/tool/gamepadTest/i18n/de.ts +2 -12
  72. package/src/tool/gamepadTest/i18n/en.ts +2 -12
  73. package/src/tool/gamepadTest/i18n/es.ts +2 -12
  74. package/src/tool/gamepadTest/i18n/fr.ts +2 -12
  75. package/src/tool/gamepadTest/i18n/id.ts +2 -12
  76. package/src/tool/gamepadTest/i18n/it.ts +2 -12
  77. package/src/tool/gamepadTest/i18n/ja.ts +2 -12
  78. package/src/tool/gamepadTest/i18n/ko.ts +2 -12
  79. package/src/tool/gamepadTest/i18n/nl.ts +2 -12
  80. package/src/tool/gamepadTest/i18n/pl.ts +2 -12
  81. package/src/tool/gamepadTest/i18n/pt.ts +2 -12
  82. package/src/tool/gamepadTest/i18n/ru.ts +3 -13
  83. package/src/tool/gamepadTest/i18n/sv.ts +2 -12
  84. package/src/tool/gamepadTest/i18n/tr.ts +2 -12
  85. package/src/tool/gamepadTest/i18n/zh.ts +2 -12
  86. package/src/tool/gamepadTest/seo.astro +3 -2
  87. package/src/tool/gamepadVibrationTester/bibliography.ts +13 -0
  88. package/src/tool/gamepadVibrationTester/i18n/de.ts +2 -12
  89. package/src/tool/gamepadVibrationTester/i18n/en.ts +2 -12
  90. package/src/tool/gamepadVibrationTester/i18n/es.ts +2 -12
  91. package/src/tool/gamepadVibrationTester/i18n/fr.ts +2 -12
  92. package/src/tool/gamepadVibrationTester/i18n/id.ts +2 -12
  93. package/src/tool/gamepadVibrationTester/i18n/it.ts +2 -12
  94. package/src/tool/gamepadVibrationTester/i18n/ja.ts +2 -12
  95. package/src/tool/gamepadVibrationTester/i18n/ko.ts +2 -12
  96. package/src/tool/gamepadVibrationTester/i18n/nl.ts +2 -12
  97. package/src/tool/gamepadVibrationTester/i18n/pl.ts +2 -12
  98. package/src/tool/gamepadVibrationTester/i18n/pt.ts +2 -12
  99. package/src/tool/gamepadVibrationTester/i18n/ru.ts +5 -15
  100. package/src/tool/gamepadVibrationTester/i18n/sv.ts +2 -12
  101. package/src/tool/gamepadVibrationTester/i18n/tr.ts +2 -12
  102. package/src/tool/gamepadVibrationTester/i18n/zh.ts +2 -12
  103. package/src/tool/gamepadVibrationTester/seo.astro +3 -2
  104. package/src/tool/keyboardTest/bibliography.ts +13 -0
  105. package/src/tool/keyboardTest/i18n/de.ts +2 -12
  106. package/src/tool/keyboardTest/i18n/en.ts +2 -12
  107. package/src/tool/keyboardTest/i18n/es.ts +2 -12
  108. package/src/tool/keyboardTest/i18n/fr.ts +2 -12
  109. package/src/tool/keyboardTest/i18n/id.ts +2 -12
  110. package/src/tool/keyboardTest/i18n/it.ts +2 -12
  111. package/src/tool/keyboardTest/i18n/ja.ts +2 -12
  112. package/src/tool/keyboardTest/i18n/ko.ts +2 -12
  113. package/src/tool/keyboardTest/i18n/nl.ts +2 -12
  114. package/src/tool/keyboardTest/i18n/pl.ts +2 -12
  115. package/src/tool/keyboardTest/i18n/pt.ts +2 -12
  116. package/src/tool/keyboardTest/i18n/ru.ts +2 -12
  117. package/src/tool/keyboardTest/i18n/sv.ts +2 -12
  118. package/src/tool/keyboardTest/i18n/tr.ts +2 -12
  119. package/src/tool/keyboardTest/i18n/zh.ts +2 -12
  120. package/src/tool/keyboardTest/seo.astro +3 -2
  121. package/src/tool/mousePollingTest/bibliography.ts +13 -0
  122. package/src/tool/mousePollingTest/i18n/de.ts +3 -13
  123. package/src/tool/mousePollingTest/i18n/en.ts +3 -13
  124. package/src/tool/mousePollingTest/i18n/es.ts +3 -13
  125. package/src/tool/mousePollingTest/i18n/fr.ts +3 -13
  126. package/src/tool/mousePollingTest/i18n/id.ts +3 -13
  127. package/src/tool/mousePollingTest/i18n/it.ts +3 -13
  128. package/src/tool/mousePollingTest/i18n/ja.ts +3 -13
  129. package/src/tool/mousePollingTest/i18n/ko.ts +3 -13
  130. package/src/tool/mousePollingTest/i18n/nl.ts +3 -13
  131. package/src/tool/mousePollingTest/i18n/pl.ts +3 -13
  132. package/src/tool/mousePollingTest/i18n/pt.ts +3 -13
  133. package/src/tool/mousePollingTest/i18n/ru.ts +5 -15
  134. package/src/tool/mousePollingTest/i18n/sv.ts +3 -13
  135. package/src/tool/mousePollingTest/i18n/tr.ts +3 -13
  136. package/src/tool/mousePollingTest/i18n/zh.ts +3 -13
  137. package/src/tool/mousePollingTest/seo.astro +3 -2
  138. package/src/tool/refreshRateDetector/bibliography.astro +14 -0
  139. package/src/tool/refreshRateDetector/bibliography.ts +12 -0
  140. package/src/tool/refreshRateDetector/component.astro +206 -0
  141. package/src/tool/refreshRateDetector/entry.ts +29 -0
  142. package/src/tool/refreshRateDetector/i18n/de.ts +196 -0
  143. package/src/tool/refreshRateDetector/i18n/en.ts +196 -0
  144. package/src/tool/refreshRateDetector/i18n/es.ts +196 -0
  145. package/src/tool/refreshRateDetector/i18n/fr.ts +196 -0
  146. package/src/tool/refreshRateDetector/i18n/id.ts +196 -0
  147. package/src/tool/refreshRateDetector/i18n/it.ts +196 -0
  148. package/src/tool/refreshRateDetector/i18n/ja.ts +196 -0
  149. package/src/tool/refreshRateDetector/i18n/ko.ts +196 -0
  150. package/src/tool/refreshRateDetector/i18n/nl.ts +196 -0
  151. package/src/tool/refreshRateDetector/i18n/pl.ts +196 -0
  152. package/src/tool/refreshRateDetector/i18n/pt.ts +196 -0
  153. package/src/tool/refreshRateDetector/i18n/ru.ts +196 -0
  154. package/src/tool/refreshRateDetector/i18n/sv.ts +196 -0
  155. package/src/tool/refreshRateDetector/i18n/tr.ts +196 -0
  156. package/src/tool/refreshRateDetector/i18n/zh.ts +196 -0
  157. package/src/tool/refreshRateDetector/index.ts +11 -0
  158. package/src/tool/refreshRateDetector/monitor-refresh-rate-detector.css +342 -0
  159. package/src/tool/refreshRateDetector/seo.astro +15 -0
  160. package/src/tool/refreshRateDetector/ui.ts +24 -0
  161. package/src/tool/toneGenerator/bibliography.ts +13 -0
  162. package/src/tool/toneGenerator/i18n/de.ts +3 -13
  163. package/src/tool/toneGenerator/i18n/en.ts +3 -13
  164. package/src/tool/toneGenerator/i18n/es.ts +2 -12
  165. package/src/tool/toneGenerator/i18n/fr.ts +3 -13
  166. package/src/tool/toneGenerator/i18n/id.ts +3 -13
  167. package/src/tool/toneGenerator/i18n/it.ts +3 -13
  168. package/src/tool/toneGenerator/i18n/ja.ts +2 -12
  169. package/src/tool/toneGenerator/i18n/ko.ts +2 -12
  170. package/src/tool/toneGenerator/i18n/nl.ts +3 -13
  171. package/src/tool/toneGenerator/i18n/pl.ts +3 -13
  172. package/src/tool/toneGenerator/i18n/pt.ts +3 -13
  173. package/src/tool/toneGenerator/i18n/ru.ts +6 -16
  174. package/src/tool/toneGenerator/i18n/sv.ts +3 -13
  175. package/src/tool/toneGenerator/i18n/tr.ts +2 -12
  176. package/src/tool/toneGenerator/i18n/zh.ts +2 -12
  177. package/src/tool/toneGenerator/seo.astro +3 -2
  178. package/src/tools.ts +3 -1
@@ -0,0 +1,226 @@
1
+ export interface ColorTest {
2
+ name: string;
3
+ description: string;
4
+ instruction: string;
5
+ colors: string[];
6
+ }
7
+
8
+ export const SRGB_TESTS: ColorTest[] = [
9
+ {
10
+ name: 'Spectral Purity',
11
+ description: 'Primary & secondary colors',
12
+ instruction: 'Watch for consistent, pure colors. Any color shift or banding indicates display inaccuracy.',
13
+ colors: ['#000', '#fff', '#f00', '#0f0', '#00f', '#ff0', '#0ff', '#f0f'],
14
+ },
15
+ {
16
+ name: 'Gradient Dynamics',
17
+ description: 'Smooth color transitions',
18
+ instruction: 'Look for banding (visible steps) instead of smooth gradients. Banding = poor color depth or calibration.',
19
+ colors: [],
20
+ },
21
+ {
22
+ name: 'Black Crush Detection',
23
+ description: 'Shadow detail test',
24
+ instruction: 'Can you see all 6 shades? If blacks blur together, your display is crushing shadow details.',
25
+ colors: ['#000', '#111', '#222', '#333', '#444', '#555'],
26
+ },
27
+ {
28
+ name: 'White Point Calibration',
29
+ description: 'Brightness & temperature',
30
+ instruction: 'Check for color tint in whites. A neutral white has no warm (yellow) or cool (blue) cast.',
31
+ colors: ['#fff', '#f5f5f5', '#e8e8e8', '#d0d0d0', '#b0b0b0'],
32
+ },
33
+ ];
34
+
35
+ export const DCIP3_TESTS: ColorTest[] = [
36
+ {
37
+ name: 'Spectral Purity (DCI-P3)',
38
+ description: 'Cinema gamut colors',
39
+ instruction: 'DCI-P3 covers more colors than sRGB. Watch for vibrant, saturated colors without clipping.',
40
+ colors: ['#000', '#fff', '#ff0000', '#00ff00', '#0000ff'],
41
+ },
42
+ {
43
+ name: 'Gradient Dynamics',
44
+ description: 'Smooth color transitions',
45
+ instruction: 'Cinema displays should show silky-smooth gradients. Any stepping = insufficient bit depth.',
46
+ colors: [],
47
+ },
48
+ {
49
+ name: 'Black Crush Detection',
50
+ description: 'Shadow detail test',
51
+ instruction: 'Can you see all 6 shades? If blacks blur together, your display is crushing shadow details.',
52
+ colors: ['#000', '#111', '#222', '#333', '#444', '#555'],
53
+ },
54
+ {
55
+ name: 'White Point Calibration',
56
+ description: 'Brightness & temperature',
57
+ instruction: 'Check for color tint in whites. A neutral white has no warm (yellow) or cool (blue) cast.',
58
+ colors: ['#fff', '#f5f5f5', '#e8e8e8', '#d0d0d0', '#b0b0b0'],
59
+ },
60
+ ];
61
+
62
+ export class SpectrumCanvasTest {
63
+ private currentTestIndex = 0;
64
+ private currentColorIndex = 0;
65
+ private gamut: 'srgb' | 'dcip3' = 'srgb';
66
+ private tests: ColorTest[] = SRGB_TESTS;
67
+ private testBg: HTMLElement | null = null;
68
+ private testName: HTMLElement | null = null;
69
+ private testDescription: HTMLElement | null = null;
70
+ private progressBar: HTMLElement | null = null;
71
+ private testOverlay: HTMLElement | null = null;
72
+ private dashboard: HTMLElement | null = null;
73
+
74
+ constructor() {
75
+ this.testBg = document.getElementById('test-bg');
76
+ this.testName = document.getElementById('test-name');
77
+ this.testDescription = document.getElementById('test-description');
78
+ this.progressBar = document.querySelector('.sc-progress-bar');
79
+ this.testOverlay = document.getElementById('test-overlay');
80
+ this.dashboard = document.getElementById('dashboard');
81
+ }
82
+
83
+ start(gamut: 'srgb' | 'dcip3' = 'srgb') {
84
+ this.gamut = gamut;
85
+ this.tests = gamut === 'dcip3' ? DCIP3_TESTS : SRGB_TESTS;
86
+ this.currentTestIndex = 0;
87
+ this.currentColorIndex = 0;
88
+ this.showCurrentTest();
89
+ this.attachKeyboardListeners();
90
+ }
91
+
92
+ private showCurrentTest() {
93
+ const test = this.tests[this.currentTestIndex];
94
+ if (!test) return;
95
+
96
+ if (this.testName) {
97
+ this.testName.textContent = test.name;
98
+ }
99
+
100
+ if (this.testDescription) {
101
+ this.testDescription.textContent = test.instruction;
102
+ }
103
+
104
+ this.updateProgress();
105
+ this.displayColor();
106
+
107
+ const win = window as Record<string, unknown>;
108
+ if (win.updateTestUI) {
109
+ (win.updateTestUI as () => void)();
110
+ }
111
+ }
112
+
113
+ private displayColor() {
114
+ const test = this.tests[this.currentTestIndex];
115
+ if (!test || !this.testBg) return;
116
+
117
+ if (test.colors.length === 0) {
118
+ this.testBg.style.backgroundColor = '';
119
+ this.testBg.style.background =
120
+ 'linear-gradient(90deg, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00)';
121
+ } else {
122
+ this.testBg.style.background = '';
123
+ const color = test.colors[this.currentColorIndex % test.colors.length];
124
+ this.testBg.style.backgroundColor = color;
125
+ }
126
+ }
127
+
128
+ private updateProgress() {
129
+ const totalTests = this.tests.length;
130
+ const progress = ((this.currentTestIndex + 1) / totalTests) * 100;
131
+ if (this.progressBar) {
132
+ this.progressBar.style.width = `${progress}%`;
133
+ }
134
+ }
135
+
136
+ nextColor() {
137
+ const test = this.tests[this.currentTestIndex];
138
+
139
+ if (!test || test.colors.length === 0) {
140
+ this.nextTest();
141
+ return;
142
+ }
143
+
144
+ this.currentColorIndex++;
145
+
146
+ if (this.currentColorIndex >= test.colors.length) {
147
+ this.nextTest();
148
+ } else {
149
+ this.displayColor();
150
+ }
151
+ }
152
+
153
+ prevColor() {
154
+ const test = this.tests[this.currentTestIndex];
155
+
156
+ if (!test || test.colors.length === 0) {
157
+ if (this.currentTestIndex === 0) return;
158
+ this.currentTestIndex--;
159
+ this.currentColorIndex = 0;
160
+ this.showCurrentTest();
161
+ return;
162
+ }
163
+
164
+ this.currentColorIndex--;
165
+
166
+ if (this.currentColorIndex < 0) {
167
+ if (this.currentTestIndex === 0) {
168
+ this.currentColorIndex = 0;
169
+ return;
170
+ }
171
+ this.currentTestIndex--;
172
+ const prevTest = this.tests[this.currentTestIndex];
173
+ this.currentColorIndex = prevTest.colors.length - 1;
174
+ this.showCurrentTest();
175
+ } else {
176
+ this.displayColor();
177
+ }
178
+ }
179
+
180
+ nextTest() {
181
+ this.currentTestIndex++;
182
+ this.currentColorIndex = 0;
183
+
184
+ if (this.currentTestIndex >= this.tests.length) {
185
+ setTimeout(() => this.finish(), 300);
186
+ } else {
187
+ this.showCurrentTest();
188
+ }
189
+ }
190
+
191
+ reset() {
192
+ this.currentTestIndex = 0;
193
+ this.currentColorIndex = 0;
194
+ this.showCurrentTest();
195
+ }
196
+
197
+ finish() {
198
+ if (this.testOverlay) {
199
+ this.testOverlay.style.display = 'none';
200
+ }
201
+ if (this.testBg) {
202
+ this.testBg.style.backgroundColor = '';
203
+ this.testBg.style.background = '';
204
+ }
205
+ this.currentTestIndex = 0;
206
+ this.currentColorIndex = 0;
207
+ }
208
+
209
+ private attachKeyboardListeners() {
210
+ const handleKeydown = (e: KeyboardEvent) => {
211
+ if (e.code === 'Space') {
212
+ e.preventDefault();
213
+ this.nextColor();
214
+ } else if (e.key === 'r' || e.key === 'R') {
215
+ e.preventDefault();
216
+ this.reset();
217
+ } else if (e.key === 'Escape') {
218
+ e.preventDefault();
219
+ this.finish();
220
+ document.removeEventListener('keydown', handleKeydown);
221
+ }
222
+ };
223
+
224
+ document.addEventListener('keydown', handleKeydown);
225
+ }
226
+ }
@@ -0,0 +1,15 @@
1
+ ---
2
+ import { SEORenderer } from '@jjlmoya/utils-shared';
3
+ import { spectrumCanvas } from './index';
4
+ import type { KnownLocale } from '../../types';
5
+
6
+ interface Props {
7
+ locale?: KnownLocale;
8
+ }
9
+
10
+ const { locale = 'es' } = Astro.props;
11
+ const content = await spectrumCanvas.i18n[locale]?.();
12
+ if (!content) return null;
13
+ ---
14
+
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
@@ -0,0 +1,27 @@
1
+ export interface SpectrumCanvasUI extends Record<string, string> {
2
+ badge: string;
3
+ title: string;
4
+ description: string;
5
+ btnStartCalibration: string;
6
+ btnFullscreen: string;
7
+ kbdFullscreen: string;
8
+ kbdFullscreenLabel: string;
9
+ kbdReset: string;
10
+ kbdResetLabel: string;
11
+ kbdEsc: string;
12
+ kbdEscLabel: string;
13
+ gamutSRGB: string;
14
+ gamutDCIP3: string;
15
+ gamutToggle: string;
16
+ hardwareName: string;
17
+ hardwareNamePlaceholder: string;
18
+ purityTest: string;
19
+ gradientTest: string;
20
+ blackHoleTest: string;
21
+ whitePointTest: string;
22
+ colorCheckpoint: string;
23
+ generateReport: string;
24
+ viewResults: string;
25
+ btnExit: string;
26
+ compareSideBySide: string;
27
+ }
@@ -0,0 +1,13 @@
1
+ import type { BibliographyEntry } from '../../../types';
2
+
3
+ export const bibliography: BibliographyEntry[] = [
4
+
5
+ {
6
+ name: 'ISO/IEC 9241-307: Display ergonomics and related equipment',
7
+ url: 'https://www.iso.org/standard/72025.html',
8
+ },
9
+ {
10
+ name: 'Dead Pixel Policy - Common Standards (VESA)',
11
+ url: 'https://www.vesa.org/',
12
+ },
13
+ ];
@@ -1,6 +1,7 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { PixelesPantallaUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'tote-pixel-test-monitor-reparatur';
6
7
  const title = 'Test auf tote Pixel und Bildschirm Reparatur Tool';
@@ -87,21 +88,10 @@ export const content: ToolLocaleContent<PixelesPantallaUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Häufig gestellte Fragen',
91
91
  faq: faqData,
92
- bibliographyTitle: 'Referenzen und Standards',
93
- bibliography: [
94
- {
95
- name: 'ISO/IEC 9241-307: Ergonomie der Mensch-System-Interaktion',
96
- url: 'https://www.iso.org/standard/72025.html',
97
- },
98
- {
99
- name: 'Dead Pixel Policy - Gängige Standards (VESA)',
100
- url: 'https://www.vesa.org/',
101
- },
102
- ],
103
92
  howTo: howToData,
104
93
  schemas: [faqSchema, howToSchema, appSchema],
94
+ bibliography,
105
95
  seo: [
106
96
  {
107
97
  type: 'title',
@@ -1,6 +1,7 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { PixelesPantallaUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'dead-pixel-tester';
6
7
  const title = 'Dead Pixel Test and Screen Repair Tool';
@@ -87,21 +88,10 @@ export const content: ToolLocaleContent<PixelesPantallaUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Frequently Asked Questions',
91
91
  faq: faqData,
92
- bibliographyTitle: 'References and Standards',
93
- bibliography: [
94
- {
95
- name: 'ISO/IEC 9241-307: Display ergonomics and related equipment',
96
- url: 'https://www.iso.org/standard/72025.html',
97
- },
98
- {
99
- name: 'Dead Pixel Policy - Common Standards (VESA)',
100
- url: 'https://www.vesa.org/',
101
- },
102
- ],
103
92
  howTo: howToData,
104
93
  schemas: [faqSchema, howToSchema, appSchema],
94
+ bibliography,
105
95
  seo: [
106
96
  {
107
97
  type: 'title',
@@ -1,6 +1,7 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { PixelesPantallaUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'pixeles-pantalla';
6
7
  const title = 'Test de Píxeles Muertos y Reparador de Pantalla';
@@ -87,21 +88,10 @@ export const content: ToolLocaleContent<PixelesPantallaUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Preguntas Frecuentes',
91
91
  faq: faqData,
92
- bibliographyTitle: 'Referencias y Normas',
93
- bibliography: [
94
- {
95
- name: 'ISO/IEC 9241-307: Display ergonomics and related equipment',
96
- url: 'https://www.iso.org/standard/72025.html',
97
- },
98
- {
99
- name: 'Dead Pixel Policy - Common Standards (VESA)',
100
- url: 'https://www.vesa.org/',
101
- },
102
- ],
103
92
  howTo: howToData,
104
93
  schemas: [faqSchema, howToSchema, appSchema],
94
+ bibliography,
105
95
  seo: [
106
96
  {
107
97
  type: 'title',
@@ -1,6 +1,7 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { PixelesPantallaUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'testeur-pixels-morts';
6
7
  const title = 'Test de Pixels Morts et Outil de Réparation d\'Écran';
@@ -87,21 +88,10 @@ export const content: ToolLocaleContent<PixelesPantallaUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Questions Fréquemment Posées',
91
91
  faq: faqData,
92
- bibliographyTitle: 'Références et Normes',
93
- bibliography: [
94
- {
95
- name: 'ISO/IEC 9241-307: Ergonomie des écrans et équipements associés',
96
- url: 'https://www.iso.org/standard/72025.html',
97
- },
98
- {
99
- name: 'Politique de Pixels Morts - Normes Communes (VESA)',
100
- url: 'https://www.vesa.org/',
101
- },
102
- ],
103
92
  howTo: howToData,
104
93
  schemas: [faqSchema, howToSchema, appSchema],
94
+ bibliography,
105
95
  seo: [
106
96
  {
107
97
  type: 'title',
@@ -1,6 +1,7 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { PixelesPantallaUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'tes-pixel-mati-perbaikan-layar';
6
7
  const title = 'Tes Pixel Mati dan Alat Perbaikan Layar';
@@ -87,21 +88,10 @@ export const content: ToolLocaleContent<PixelesPantallaUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Pertanyaan yang Sering Diajukan',
91
91
  faq: faqData,
92
- bibliographyTitle: 'Referensi dan Standar',
93
- bibliography: [
94
- {
95
- name: 'ISO/IEC 9241-307: Ergonomi tampilan dan peralatan terkait',
96
- url: 'https://www.iso.org/standard/72025.html',
97
- },
98
- {
99
- name: 'Kebijakan Pixel Mati - Standar Umum (VESA)',
100
- url: 'https://www.vesa.org/',
101
- },
102
- ],
103
92
  howTo: howToData,
104
93
  schemas: [faqSchema, howToSchema, appSchema],
94
+ bibliography,
105
95
  seo: [
106
96
  {
107
97
  type: 'title',
@@ -1,6 +1,7 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { PixelesPantallaUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'test-pixel-morti-riparazione-schermo';
6
7
  const title = 'Test Pixel Morti e Strumento Riparazione Schermo';
@@ -87,21 +88,10 @@ export const content: ToolLocaleContent<PixelesPantallaUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Domande Frequenti',
91
91
  faq: faqData,
92
- bibliographyTitle: 'Riferimenti e Standard',
93
- bibliography: [
94
- {
95
- name: 'ISO/IEC 9241-307: Ergonomia del display e apparecchiature correlate',
96
- url: 'https://www.iso.org/standard/72025.html',
97
- },
98
- {
99
- name: 'Dead Pixel Policy - Standard comuni (VESA)',
100
- url: 'https://www.vesa.org/',
101
- },
102
- ],
103
92
  howTo: howToData,
104
93
  schemas: [faqSchema, howToSchema, appSchema],
94
+ bibliography,
105
95
  seo: [
106
96
  {
107
97
  type: 'title',
@@ -1,6 +1,7 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { PixelesPantallaUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'dead-pixel-tester';
6
7
  const title = 'ドット抜けテスト・液晶修復ツール';
@@ -87,21 +88,10 @@ export const content: ToolLocaleContent<PixelesPantallaUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'よくある質問',
91
91
  faq: faqData,
92
- bibliographyTitle: '参考文献と規格',
93
- bibliography: [
94
- {
95
- name: 'ISO/IEC 9241-307:ディスプレイの人間工学および関連機器',
96
- url: 'https://www.iso.org/standard/72025.html',
97
- },
98
- {
99
- name: 'ドット抜けに関するポリシー - 一般的な規格 (VESA)',
100
- url: 'https://www.vesa.org/',
101
- },
102
- ],
103
92
  howTo: howToData,
104
93
  schemas: [faqSchema, howToSchema, appSchema],
94
+ bibliography,
105
95
  seo: [
106
96
  {
107
97
  type: 'title',
@@ -1,6 +1,7 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { PixelesPantallaUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'dead-pixel-tester';
6
7
  const title = '불량 화소 테스트 및 화면 복구 도구';
@@ -87,21 +88,10 @@ export const content: ToolLocaleContent<PixelesPantallaUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: '자주 묻는 질문',
91
91
  faq: faqData,
92
- bibliographyTitle: '참고 문헌 및 표준',
93
- bibliography: [
94
- {
95
- name: 'ISO/IEC 9241-307: 디스플레이 인체공학 및 관련 장비',
96
- url: 'https://www.iso.org/standard/72025.html',
97
- },
98
- {
99
- name: '불량 화소 정책 - 일반 표준 (VESA)',
100
- url: 'https://www.vesa.org/',
101
- },
102
- ],
103
92
  howTo: howToData,
104
93
  schemas: [faqSchema, howToSchema, appSchema],
94
+ bibliography,
105
95
  seo: [
106
96
  {
107
97
  type: 'title',
@@ -1,6 +1,7 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { PixelesPantallaUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'dode-pixel-test-schermreparatie';
6
7
  const title = 'Dode Pixel Test en Schermreparatie Tool';
@@ -87,21 +88,10 @@ export const content: ToolLocaleContent<PixelesPantallaUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Veelgestelde Vragen',
91
91
  faq: faqData,
92
- bibliographyTitle: 'Referenties en Normen',
93
- bibliography: [
94
- {
95
- name: 'ISO/IEC 9241-307: Ergonomie van beeldschermen en aanverwante apparatuur',
96
- url: 'https://www.iso.org/standard/72025.html',
97
- },
98
- {
99
- name: 'Dead Pixel Policy - Gangbare Normen (VESA)',
100
- url: 'https://www.vesa.org/',
101
- },
102
- ],
103
92
  howTo: howToData,
104
93
  schemas: [faqSchema, howToSchema, appSchema],
94
+ bibliography,
105
95
  seo: [
106
96
  {
107
97
  type: 'title',
@@ -1,6 +1,7 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { PixelesPantallaUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'test-martwych-pikseli-naprawa-monitora';
6
7
  const title = 'Test Martwych Pikseli i Narzędzie do Naprawy Ekranu';
@@ -87,21 +88,10 @@ export const content: ToolLocaleContent<PixelesPantallaUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Często zadawane pytania',
91
91
  faq: faqData,
92
- bibliographyTitle: 'Referencje i normy',
93
- bibliography: [
94
- {
95
- name: 'ISO/IEC 9241-307: Ergonomia wyświetlaczy i powiązanego sprzętu',
96
- url: 'https://www.iso.org/standard/72025.html',
97
- },
98
- {
99
- name: 'Polityka martwych pikseli - powszechne standardy (VESA)',
100
- url: 'https://www.vesa.org/',
101
- },
102
- ],
103
92
  howTo: howToData,
104
93
  schemas: [faqSchema, howToSchema, appSchema],
94
+ bibliography,
105
95
  seo: [
106
96
  {
107
97
  type: 'title',
@@ -1,6 +1,7 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { PixelesPantallaUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'teste-pixel-morto-reparacao-ecra';
6
7
  const title = 'Teste de Pixel Morto e Ferramenta de Reparação de Ecrã';
@@ -87,21 +88,10 @@ export const content: ToolLocaleContent<PixelesPantallaUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Perguntas Frequentes',
91
91
  faq: faqData,
92
- bibliographyTitle: 'Referências e Normas',
93
- bibliography: [
94
- {
95
- name: 'ISO/IEC 9241-307: Ergonomia do ecrã e equipamento relacionado',
96
- url: 'https://www.iso.org/standard/72025.html',
97
- },
98
- {
99
- name: 'Dead Pixel Policy - Normas Comuns (VESA)',
100
- url: 'https://www.vesa.org/',
101
- },
102
- ],
103
92
  howTo: howToData,
104
93
  schemas: [faqSchema, howToSchema, appSchema],
94
+ bibliography,
105
95
  seo: [
106
96
  {
107
97
  type: 'title',
@@ -1,6 +1,7 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { PixelesPantallaUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'test-bityh-pikselej-remont-ekrana';
6
7
  const title = 'Тест на битые пиксели и инструмент для ремонта экрана';
@@ -87,21 +88,10 @@ export const content: ToolLocaleContent<PixelesPantallaUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Часто задаваемые вопросы',
91
91
  faq: faqData,
92
- bibliographyTitle: 'Ссылки и стандарты',
93
- bibliography: [
94
- {
95
- name: 'ISO/IEC 9241-307: Эргономика дисплеев и сопутствующего оборудования',
96
- url: 'https://www.iso.org/standard/72025.html',
97
- },
98
- {
99
- name: 'Политика битых пикселей — общие стандарты (VESA)',
100
- url: 'https://www.vesa.org/',
101
- },
102
- ],
103
92
  howTo: howToData,
104
93
  schemas: [faqSchema, howToSchema, appSchema],
94
+ bibliography,
105
95
  seo: [
106
96
  {
107
97
  type: 'title',