@jjlmoya/utils-hardware 1.1.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 (85) hide show
  1. package/package.json +60 -0
  2. package/src/category/i18n/en.ts +107 -0
  3. package/src/category/i18n/es.ts +107 -0
  4. package/src/category/i18n/fr.ts +107 -0
  5. package/src/category/index.ts +18 -0
  6. package/src/category/seo.astro +15 -0
  7. package/src/components/PreviewNavSidebar.astro +116 -0
  8. package/src/components/PreviewToolbar.astro +143 -0
  9. package/src/data.ts +11 -0
  10. package/src/env.d.ts +5 -0
  11. package/src/index.ts +26 -0
  12. package/src/layouts/PreviewLayout.astro +117 -0
  13. package/src/pages/[locale]/[slug].astro +146 -0
  14. package/src/pages/[locale].astro +251 -0
  15. package/src/pages/index.astro +4 -0
  16. package/src/tests/faq_count.test.ts +19 -0
  17. package/src/tests/locale_completeness.test.ts +42 -0
  18. package/src/tests/mocks/astro_mock.js +2 -0
  19. package/src/tests/no_h1_in_components.test.ts +48 -0
  20. package/src/tests/schemas_fulfillment.test.ts +23 -0
  21. package/src/tests/seo_length.test.ts +23 -0
  22. package/src/tests/title_quality.test.ts +55 -0
  23. package/src/tests/tool_validation.test.ts +17 -0
  24. package/src/tool/batteryHealthEstimator/bibliography.astro +14 -0
  25. package/src/tool/batteryHealthEstimator/component.astro +606 -0
  26. package/src/tool/batteryHealthEstimator/i18n/en.ts +158 -0
  27. package/src/tool/batteryHealthEstimator/i18n/es.ts +158 -0
  28. package/src/tool/batteryHealthEstimator/i18n/fr.ts +158 -0
  29. package/src/tool/batteryHealthEstimator/index.ts +34 -0
  30. package/src/tool/batteryHealthEstimator/seo.astro +14 -0
  31. package/src/tool/batteryHealthEstimator/ui.ts +31 -0
  32. package/src/tool/deadPixelTest/bibliography.astro +31 -0
  33. package/src/tool/deadPixelTest/component.astro +717 -0
  34. package/src/tool/deadPixelTest/i18n/en.ts +218 -0
  35. package/src/tool/deadPixelTest/i18n/es.ts +218 -0
  36. package/src/tool/deadPixelTest/i18n/fr.ts +218 -0
  37. package/src/tool/deadPixelTest/index.ts +34 -0
  38. package/src/tool/deadPixelTest/seo.astro +14 -0
  39. package/src/tool/deadPixelTest/ui.ts +20 -0
  40. package/src/tool/gamepadTest/bibliography.astro +30 -0
  41. package/src/tool/gamepadTest/component.astro +1419 -0
  42. package/src/tool/gamepadTest/i18n/en.ts +186 -0
  43. package/src/tool/gamepadTest/i18n/es.ts +186 -0
  44. package/src/tool/gamepadTest/i18n/fr.ts +186 -0
  45. package/src/tool/gamepadTest/index.ts +34 -0
  46. package/src/tool/gamepadTest/seo.astro +14 -0
  47. package/src/tool/gamepadTest/ui.ts +57 -0
  48. package/src/tool/gamepadVibrationTester/bibliography.astro +14 -0
  49. package/src/tool/gamepadVibrationTester/component.astro +694 -0
  50. package/src/tool/gamepadVibrationTester/i18n/en.ts +155 -0
  51. package/src/tool/gamepadVibrationTester/i18n/es.ts +155 -0
  52. package/src/tool/gamepadVibrationTester/i18n/fr.ts +150 -0
  53. package/src/tool/gamepadVibrationTester/index.ts +34 -0
  54. package/src/tool/gamepadVibrationTester/seo.astro +14 -0
  55. package/src/tool/gamepadVibrationTester/ui.ts +28 -0
  56. package/src/tool/keyboardTest/bibliography.astro +30 -0
  57. package/src/tool/keyboardTest/component.astro +601 -0
  58. package/src/tool/keyboardTest/i18n/en.ts +146 -0
  59. package/src/tool/keyboardTest/i18n/es.ts +146 -0
  60. package/src/tool/keyboardTest/i18n/fr.ts +146 -0
  61. package/src/tool/keyboardTest/index.ts +34 -0
  62. package/src/tool/keyboardTest/seo.astro +14 -0
  63. package/src/tool/keyboardTest/ui.ts +8 -0
  64. package/src/tool/mousePollingTest/bibliography.astro +14 -0
  65. package/src/tool/mousePollingTest/component.astro +237 -0
  66. package/src/tool/mousePollingTest/i18n/en.ts +135 -0
  67. package/src/tool/mousePollingTest/i18n/es.ts +135 -0
  68. package/src/tool/mousePollingTest/i18n/fr.ts +135 -0
  69. package/src/tool/mousePollingTest/index.ts +34 -0
  70. package/src/tool/mousePollingTest/logic/MovingAverage.ts +20 -0
  71. package/src/tool/mousePollingTest/logic/RatonManager.ts +97 -0
  72. package/src/tool/mousePollingTest/logic/StatisticalFilter.ts +48 -0
  73. package/src/tool/mousePollingTest/seo.astro +14 -0
  74. package/src/tool/mousePollingTest/ui.ts +8 -0
  75. package/src/tool/mousePollingTest/worker/mouseWorker.ts +50 -0
  76. package/src/tool/toneGenerator/bibliography.astro +14 -0
  77. package/src/tool/toneGenerator/component.astro +571 -0
  78. package/src/tool/toneGenerator/i18n/en.ts +146 -0
  79. package/src/tool/toneGenerator/i18n/es.ts +146 -0
  80. package/src/tool/toneGenerator/i18n/fr.ts +146 -0
  81. package/src/tool/toneGenerator/index.ts +34 -0
  82. package/src/tool/toneGenerator/seo.astro +14 -0
  83. package/src/tool/toneGenerator/ui.ts +19 -0
  84. package/src/tools.ts +10 -0
  85. package/src/types.ts +72 -0
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "@jjlmoya/utils-hardware",
3
+ "version": "1.1.0",
4
+ "type": "module",
5
+ "main": "./src/index.ts",
6
+ "types": "./src/index.ts",
7
+ "exports": {
8
+ ".": "./src/index.ts",
9
+ "./data": "./src/data.ts"
10
+ },
11
+ "files": [
12
+ "src"
13
+ ],
14
+ "publishConfig": {
15
+ "access": "public"
16
+ },
17
+ "scripts": {
18
+ "dev": "astro dev",
19
+ "start": "astro dev",
20
+ "build": "astro build",
21
+ "preview": "astro preview",
22
+ "astro": "astro",
23
+ "lint": "eslint src/ --max-warnings 0 && stylelint \"src/**/*.{css,astro}\"",
24
+ "check": "astro check",
25
+ "type-check": "astro check",
26
+ "test": "vitest run",
27
+ "preversion": "npm run lint && npm run test",
28
+ "postversion": "git push && git push --tags",
29
+ "patch": "npm version patch",
30
+ "minor": "npm version minor",
31
+ "major": "npm version major"
32
+ },
33
+ "lint-staged": {
34
+ "*.{ts,tsx,astro}": [
35
+ "eslint --fix"
36
+ ]
37
+ },
38
+ "dependencies": {
39
+ "@iconify-json/mdi": "^1.2.3",
40
+ "@jjlmoya/utils-shared": "1.2.0",
41
+ "astro": "^6.1.2",
42
+ "astro-icon": "^1.1.0"
43
+ },
44
+ "devDependencies": {
45
+ "@astrojs/check": "^0.9.8",
46
+ "eslint": "^9.39.4",
47
+ "eslint-plugin-astro": "^1.6.0",
48
+ "eslint-plugin-no-comments": "^1.1.10",
49
+ "husky": "^9.1.7",
50
+ "lint-staged": "^16.4.0",
51
+ "postcss-html": "^1.8.1",
52
+ "schema-dts": "^1.1.2",
53
+ "stylelint": "^17.6.0",
54
+ "stylelint-config-standard": "^40.0.0",
55
+ "stylelint-declaration-strict-value": "^1.11.1",
56
+ "typescript": "^5.4.0",
57
+ "typescript-eslint": "^8.58.0",
58
+ "vitest": "^4.1.2"
59
+ }
60
+ }
@@ -0,0 +1,107 @@
1
+ import type { CategoryLocaleContent } from '../../types';
2
+
3
+ export const content: CategoryLocaleContent = {
4
+ slug: 'hardware-tools',
5
+ title: 'Hardware Testing & Diagnostic Tools',
6
+ description: 'Verify the status of your peripherals and display with free online tools. Test dead pixels, keyboard ghosting, gamepad drift, and battery health.',
7
+ seo: [
8
+ {
9
+ type: 'title',
10
+ text: 'Diagnostic Peripherals and Displays: Precision Without Software',
11
+ level: 2,
12
+ },
13
+ {
14
+ type: 'paragraph',
15
+ html: 'Maintaining hardware no longer requires installing heavy diagnostic applications. In this section, we offer a suite of <strong>free online tools</strong> designed to test your components using native web APIs. From detecting LED panel fatigue to measuring polling rates of gaming peripherals, we apply standard testing protocols so you know the real state of your equipment.',
16
+ },
17
+ {
18
+ type: 'paragraph',
19
+ html: 'Our utilities are ideal for users who just purchased a product and want to verify its integrity, or for gamers seeking to optimize their competitive setup by detecting latency or accuracy failures.',
20
+ },
21
+ {
22
+ type: 'title',
23
+ text: 'Visual Health: Dead Pixel Testing and Repair',
24
+ level: 2,
25
+ },
26
+ {
27
+ type: 'paragraph',
28
+ html: 'A monitor with defective pixels can ruin your user experience. Our <strong>pixel test</strong> displays pure colors in fullscreen to identify dead pixels (black) or stuck pixels (locked in one color). Plus, we include a stroboscope optimizer designed to unstick subpixels through rapid chromatic frequency changes.',
29
+ },
30
+ {
31
+ type: 'title',
32
+ text: 'Input Controllers: Keyboard (Ghosting) and Mouse (Hz)',
33
+ level: 2,
34
+ },
35
+ {
36
+ type: 'paragraph',
37
+ html: 'For typists and FPS gamers, keyboard and mouse are vital. The <strong>ghosting test</strong> verifies how many keys your keyboard can register simultaneously (Rollover), while our <strong>Polling Rate</strong> tool measures your mouse\'s Hertz (Hz) in real time, ensuring stable and high-speed connection to your PC.',
38
+ },
39
+ {
40
+ type: 'title',
41
+ text: 'Gaming and Consoles: Joy-Con Drift and Trigger Testing',
42
+ level: 2,
43
+ },
44
+ {
45
+ type: 'paragraph',
46
+ html: 'Joystick wear (known as drift) is the most common failure in modern PS5, Xbox, and Switch controllers. Our <strong>controller simulator</strong> analyzes X/Y axes with floating-point precision, letting you visualize any unwanted movement or lack of dead zone in your sticks. It also lets you test haptic response and Dual-Rumble motor vibration through your browser.',
47
+ },
48
+ {
49
+ type: 'title',
50
+ text: 'Power and Audio: Battery Health and Pure Tones',
51
+ level: 2,
52
+ },
53
+ {
54
+ type: 'paragraph',
55
+ html: 'Lithium batteries degrade with each charge cycle. Our <strong>battery health estimator</strong> analyzes current cycles and residual capacity to predict how much useful life remains in your laptop or mobile device. On the other hand, our <strong>tone generator</strong> allows you to audit speakers and headphones by sweeping frequencies from 20Hz to 20kHz, detecting distortion or hearing loss in high ranges.',
56
+ },
57
+ {
58
+ type: 'title',
59
+ text: 'Chromatic Calibration and Color Spaces: Professional Visual Precision',
60
+ level: 2,
61
+ },
62
+ {
63
+ type: 'paragraph',
64
+ html: 'Monitors degrade. Factory color temperature (Kelvin), typically 6500K = D65 Daylight, changes over time. For graphic designers, photographers, and editors, this is catastrophic: you edit colors on a miscalibrated monitor, the work looks different on other displays, and the client rejects it. Deep calibration requires hardware (colorimeter costing €300-1000), but our <strong>color space test</strong> at least lets you audit whether your monitor maintains consistent gamma range (typically 2.2).',
65
+ },
66
+ {
67
+ type: 'paragraph',
68
+ html: 'Understanding sRGB vs. Adobe RGB vs. P3 is critical too. sRGB is web standard (sufficient for 99% usage), but Adobe RGB covers 40% more colors (necessary for professionals). A monitor covering only 70% sRGB will produce insufficient color saturation. Our tools let you audit without investing €1000 in professional equipment.',
69
+ },
70
+ {
71
+ type: 'title',
72
+ text: 'Hardware Performance: Benchmarking and Bottleneck Detection',
73
+ level: 2,
74
+ },
75
+ {
76
+ type: 'paragraph',
77
+ html: 'Gamers speak of "bottleneck" when GPU and CPU are unbalanced. A powerful GPU fed by a weak CPU never reaches its potential. The concept is simple: if the GPU waits for the CPU to finish, it\'s waste. Testing tools help diagnose: Is my problem the GPU or CPU? Do I need an upgrade? Or just reduce video settings?',
78
+ },
79
+ {
80
+ type: 'paragraph',
81
+ html: 'Latency tests are also critical for competitive gaming. Input-to-display latency (from pressing a button to seeing it on screen) can be 20-50ms on a decent setup, but 200+ms on a slow one. In competitive games (FPS, fighting games), 50ms is the difference between victory and defeat. That\'s why pro gamers invest in 240Hz monitors, 8000Hz mice, and optimized PCs.',
82
+ },
83
+ {
84
+ type: 'title',
85
+ text: 'Lifecycle and Repairability: Digital Rights',
86
+ level: 2,
87
+ },
88
+ {
89
+ type: 'paragraph',
90
+ html: '"Repairability" is increasingly important in 2026. A "repairable" phone lasts 6 years; a "sealed" one expires in 2-3 years. A laptop with upgradeable RAM is an investment; one with soldered RAM is disposable. The diagnostic tools we implement align with the Right to Repair movement: we want you to know exactly what\'s broken before you discard your devices.',
91
+ },
92
+ {
93
+ type: 'paragraph',
94
+ html: 'Documenting the failure with our tools (screenshot of failed pixel test, video of drifting controller) is evidence for warranty claims. Many users lose money because they don\'t document, don\'t diagnose, just give up and buy new. Our utilities democratize technical information: now you can argue with proof.',
95
+ },
96
+ {
97
+ type: 'title',
98
+ text: 'The Future of Wearable Hardware 2026',
99
+ level: 2,
100
+ },
101
+ {
102
+ type: 'paragraph',
103
+ html: 'In 2026, the line between operating system and browser has blurred. Thanks to standards like <strong>Web Serial and WebUSB</strong>, we can perform diagnostics that previously required specific drivers. These tools are part of a movement toward the right to repair and user technical sovereignty over their own devices.',
104
+ },
105
+ ],
106
+ };
107
+
@@ -0,0 +1,107 @@
1
+ import type { CategoryLocaleContent } from '../../types';
2
+
3
+ export const content: CategoryLocaleContent = {
4
+ slug: 'hardware',
5
+ title: 'Herramientas de Test y Diagnóstico de Hardware',
6
+ description: 'Verifica el estado de tus periféricos y pantalla con herramientas gratuitas online. Tests de píxeles muertos, ghosting de teclado, drift de mandos y salud de batería.',
7
+ seo: [
8
+ {
9
+ type: 'title',
10
+ text: 'Diagnóstico de Periféricos y Pantallas: Precisión sin Software',
11
+ level: 2,
12
+ },
13
+ {
14
+ type: 'paragraph',
15
+ html: 'El mantenimiento del hardware ya no requiere instalar pesadas aplicaciones de diagnóstico. En esta sección, ofrecemos una suite de <strong>herramientas gratuitas online</strong> diseñadas para poner a prueba tus componentes mediante APIs web nativas. Desde la detección de fatiga en paneles LED hasta la medición de la frecuencia de muestreo de periféricos gaming, aplicamos protocolos de test estándar para que conozcas el estado real de tu equipo.',
16
+ },
17
+ {
18
+ type: 'paragraph',
19
+ html: 'Nuestras utilidades son ideales para usuarios que acaban de comprar un producto y quieren verificar su integridad, o para gamers que buscan optimizar su configuración competitiva detectando fallos de latencia o precisión.',
20
+ },
21
+ {
22
+ type: 'title',
23
+ text: 'Salud Visual: Test de Píxeles Muertos y Reparación',
24
+ level: 2,
25
+ },
26
+ {
27
+ type: 'paragraph',
28
+ html: 'Un monitor con píxeles defectuosos puede arruinar la experiencia de usuario. Nuestro <strong>test de píxeles</strong> proyecta colores puros en pantalla completa para identificar píxeles muertos (negros) o vagos (atascados en un color). Además, incluimos un optimizador de estroboscopio diseñado para intentar desatascar subpíxeles mediante cambios rápidos de frecuencia cromática.',
29
+ },
30
+ {
31
+ type: 'title',
32
+ text: 'Controladores de Entrada: Teclado (Ghosting) y Ratón (Hz)',
33
+ level: 2,
34
+ },
35
+ {
36
+ type: 'paragraph',
37
+ html: 'Para los mecanógrafos y jugadores de FPS, el teclado y el ratón son vitales. El <strong>test de ghosting</strong> verifica cuántas teclas puede registrar tu teclado simultáneamente (Rollover), mientras que nuestra herramienta de <strong>Polling Rate</strong> mide en tiempo real los Hercios (Hz) de tu ratón, asegurando que la conexión con el PC es estable y de alta velocidad.',
38
+ },
39
+ {
40
+ type: 'title',
41
+ text: 'Gaming y Consolas: Test de Joy-Con Drift y Gatillos',
42
+ level: 2,
43
+ },
44
+ {
45
+ type: 'paragraph',
46
+ html: 'El desgaste de los joysticks (conocido como drift) es el fallo más común en los mandos modernos de PS5, Xbox y Switch. Nuestro <strong>simulador de mando</strong> analiza los ejes X/Y con precisión de punto flotante, permitiéndote visualizar cualquier movimiento no deseado o falta de zona muerta en tus sticks. También permite testear la respuesta hápitca y la vibración de motores Dual-Rumble mediante el navegador.',
47
+ },
48
+ {
49
+ type: 'title',
50
+ text: 'Energía y Audio: Salud de Batería y Tonos Puros',
51
+ level: 2,
52
+ },
53
+ {
54
+ type: 'paragraph',
55
+ html: 'Las baterías de litio se degradan con cada ciclo de carga. El <strong>estimador de salud de batería</strong> analiza los ciclos actuales y la capacidad residual para predecir cuánta vida útil le queda a tu portátil o dispositivo móvil. Por otro lado, nuestro <strong>generador de tonos</strong> permite auditar altavoces y auriculares barriendo frecuencias desde los 20Hz hasta los 20kHz, detectando distorsiones o pérdida de audición en rangos altos.',
56
+ },
57
+ {
58
+ type: 'title',
59
+ text: 'Calibración Cromática y Espacios de Color: Precisión Visual Profesional',
60
+ level: 2,
61
+ },
62
+ {
63
+ type: 'paragraph',
64
+ html: 'Los monitores se degradan. La temperatura de color (Kelvin) de fábrica (típicamente 6500K = D65 Daylight) cambia con el tiempo. Para diseñadores gráficos, fotógrafos y editores, esto es catastrófico: editas colores en un monitor descalibrado, el trabajo se vea diferente en otros displays, y el cliente rechaza el trabajo. La calibración profunda requiere hardware (colorímetro de 300-1000€), pero nuestro <strong>test de espacios de color</strong> permite auditar al menos si el monitor mantiene rango de gamma (2.2 típicamente) consistente.',
65
+ },
66
+ {
67
+ type: 'paragraph',
68
+ html: 'Entender sRGB vs. Adobe RGB vs. P3 es crítico también. sRGB es estándar web (suficiente para 99% uso), pero Adobe RGB cubre 40% más de colores (necesario para profesionales). Un monitor que cubre solo 70% del sRGB va a producir castañear insuficiente. Nuestras herramientas te permiten auditar sin invertir 1000€ en equipamiento profesional.',
69
+ },
70
+ {
71
+ type: 'title',
72
+ text: 'Rendimiento de Hardware: Benchmarking y Cuello de Botella',
73
+ level: 2,
74
+ },
75
+ {
76
+ type: 'paragraph',
77
+ html: 'Los gamers hablan de "cuello de botella" cuando la GPU y CPU no están balanceadas. Una GPU potente alimentada por un CPU débil nunca alcanza su potencial. El concepto es simple: si la GPU espera a que el CPU termine, es un desperdicio. Las herramientas de test permiten diagnosticar: ¿Es mi problema la GPU o el CPU? ¿Necesito upgrade? ¿O simplemente reducir configuración de video?',
78
+ },
79
+ {
80
+ type: 'paragraph',
81
+ html: 'Los tests de latencia también son críticos para gaming competitivo. La latencia input-to-display (desde que presionas un botón hasta que lo ves en pantalla) puede ser 20-50ms en un setup decente, pero 200+ ms en uno lento. En videojuegos competitivos (FPS, fighting games), 50ms es diferencia entre victoria y derrota. Por eso los jugadores profesionales invierten en monitores 240Hz, ratones 8000Hz y PCs optimizadas.',
82
+ },
83
+ {
84
+ type: 'title',
85
+ text: 'Ciclos de Vida y Reparabilidad: Derechos Digitales',
86
+ level: 2,
87
+ },
88
+ {
89
+ type: 'paragraph',
90
+ html: 'La "reparabilidad" es cada vez más importante en 2026. Un teléfono "reparable" dura 6 años; uno "sellado" caduca a los 2-3. Un portátil con RAM actualizable es inversión; uno con RAM soldada es consumible descartable. Las herramientas de diagnóstico que implementamos están alineadas con el movimiento Right to Repair: queremos que sepas exactamente qué está roto antes de despreciar tus dispositivos.',
91
+ },
92
+ {
93
+ type: 'paragraph',
94
+ html: 'Documentar el fallo con nuestras herramientas (screenshot del test de píxeles fallando, video del mando drifeando) es evidencia para reclamaciones de garantía. Muchos usuarios tienden a perder dinero porque no documentan, no diagnostican, simplemente se rinden y compran nuevo. Nuestras utilidades democratizan la información técnica: ahora puedes argumentar con pruebas.',
95
+ },
96
+ {
97
+ type: 'title',
98
+ text: 'El futuro del hardware integrable 2026',
99
+ level: 2,
100
+ },
101
+ {
102
+ type: 'paragraph',
103
+ html: 'En 2026, la línea entre el sistema operativo y el navegador se ha difuminado. Gracias a estándares como <strong>Web Serial y WebUSB</strong>, podemos realizar diagnósticos que antes requerían drivers específicos. Estas herramientas son parte de un movimiento hacia el derecho a reparar y la soberanía técnica del usuario sobre sus propios dispositivos.',
104
+ },
105
+ ],
106
+ };
107
+
@@ -0,0 +1,107 @@
1
+ import type { CategoryLocaleContent } from '../../types';
2
+
3
+ export const content: CategoryLocaleContent = {
4
+ slug: 'outils-materiels',
5
+ title: 'Outils de Test et Diagnostic Matériel',
6
+ description: 'Vérifiez l\'état de vos périphériques et écran avec des outils gratuits en ligne. Testez les pixels morts, le ghosting du clavier, la dérive des manettes et la santé de la batterie.',
7
+ seo: [
8
+ {
9
+ type: 'title',
10
+ text: 'Diagnostic des Périphériques et Affichages: Précision sans Logiciel',
11
+ level: 2,
12
+ },
13
+ {
14
+ type: 'paragraph',
15
+ html: 'L\'entretien du matériel n\'exige plus d\'installer des applications de diagnostic lourdes. Dans cette section, nous offrons une suite d\'<strong>outils gratuits en ligne</strong> conçus pour tester vos composants en utilisant les APIs web natives. De la détection de la fatigue des panneaux LED à la mesure du taux de sondage des périphériques de jeu, nous appliquons des protocoles de test standard pour que vous connaissiez l\'état réel de votre équipement.',
16
+ },
17
+ {
18
+ type: 'paragraph',
19
+ html: 'Nos utilitaires sont idéaux pour les utilisateurs qui viennent d\'acheter un produit et souhaitent vérifier son intégrité, ou pour les joueurs qui cherchent à optimiser leur configuration compétitive en détectant les défaillances de latence ou de précision.',
20
+ },
21
+ {
22
+ type: 'title',
23
+ text: 'Santé Visuelle: Test des Pixels Morts et Réparation',
24
+ level: 2,
25
+ },
26
+ {
27
+ type: 'paragraph',
28
+ html: 'Un moniteur avec des pixels défectueux peut ruiner votre expérience utilisateur. Notre <strong>test de pixels</strong> affiche des couleurs pures en plein écran pour identifier les pixels morts (noirs) ou figés (bloqués dans une couleur). De plus, nous incluons un optimiseur stroboscopique conçu pour libérer les sous-pixels par des changements rapides de fréquence chromatique.',
29
+ },
30
+ {
31
+ type: 'title',
32
+ text: 'Contrôleurs d\'Entrée: Clavier (Ghosting) et Souris (Hz)',
33
+ level: 2,
34
+ },
35
+ {
36
+ type: 'paragraph',
37
+ html: 'Pour les dactylographes et les joueurs de FPS, le clavier et la souris sont vitaux. Le <strong>test de ghosting</strong> vérifie le nombre de touches que votre clavier peut enregistrer simultanément (Rollover), tandis que notre outil de <strong>taux de sondage</strong> mesure les Hertz (Hz) de votre souris en temps réel, assurant une connexion stable et haute vitesse avec votre PC.',
38
+ },
39
+ {
40
+ type: 'title',
41
+ text: 'Gaming et Consoles: Test de la Dérive Joy-Con et des Gâchettes',
42
+ level: 2,
43
+ },
44
+ {
45
+ type: 'paragraph',
46
+ html: 'L\'usure des joysticks (connue sous le nom de dérive) est le défaut le plus courant des manettes modernes PS5, Xbox et Switch. Notre <strong>simulateur de manette</strong> analyse les axes X/Y avec une précision en virgule flottante, ce qui vous permet de visualiser tout mouvement indésirable ou manque de zone morte sur vos sticks. Il vous permet également de tester la réponse haptique et la vibration du moteur Dual-Rumble via votre navigateur.',
47
+ },
48
+ {
49
+ type: 'title',
50
+ text: 'Énergie et Audio: Santé de la Batterie et Tonalités Pures',
51
+ level: 2,
52
+ },
53
+ {
54
+ type: 'paragraph',
55
+ html: 'Les batteries au lithium se dégradent à chaque cycle de charge. Notre <strong>estimateur de santé de batterie</strong> analyse les cycles actuels et la capacité résiduelle pour prédire combien de vie utile reste à votre ordinateur portable ou appareil mobile. En revanche, notre <strong>générateur de tonalités</strong> vous permet d\'auditer les haut-parleurs et les casques en balayant les fréquences de 20 Hz à 20 kHz, détectant la distorsion ou la perte auditive dans les gammes hautes.',
56
+ },
57
+ {
58
+ type: 'title',
59
+ text: 'Étalonnage Chromatique et Espaces Couleur: Précision Visuelle Professionnelle',
60
+ level: 2,
61
+ },
62
+ {
63
+ type: 'paragraph',
64
+ html: 'Les moniteurs se dégradent. La température de couleur d\'usine (Kelvin), généralement 6500K = D65 Daylight, change avec le temps. Pour les graphistes, photographes et éditeurs, c\'est catastrophique: vous éditez les couleurs sur un moniteur mal étalonné, le travail a l\'air différent sur d\'autres affichages, et le client le rejette. L\'étalonnage en profondeur nécessite du matériel (colorimètre coûtant 300-1000€), mais notre <strong>test d\'espace couleur</strong> vous permet au moins de vérifier si votre moniteur maintient une plage gamma cohérente (généralement 2.2).',
65
+ },
66
+ {
67
+ type: 'paragraph',
68
+ html: 'Comprendre sRGB vs. Adobe RGB vs. P3 est également critique. sRGB est la norme web (suffisante pour 99% de l\'utilisation), mais Adobe RGB couvre 40% plus de couleurs (nécessaire pour les professionnels). Un moniteur ne couvrant que 70% du sRGB produira une saturation des couleurs insuffisante. Nos outils vous permettent d\'auditer sans investir 1000€ dans un équipement professionnel.',
69
+ },
70
+ {
71
+ type: 'title',
72
+ text: 'Performance Matérielle: Benchmarking et Détection d\'Étranglement',
73
+ level: 2,
74
+ },
75
+ {
76
+ type: 'paragraph',
77
+ html: 'Les joueurs parlent d\'"étranglement" lorsque le GPU et le CPU ne sont pas équilibrés. Un GPU puissant alimenté par un CPU faible n\'atteint jamais son potentiel. Le concept est simple: si le GPU attend que le CPU termine, c\'est un gaspillage. Les outils de test aident à diagnostiquer: Est-ce mon problème le GPU ou le CPU? Ai-je besoin d\'une mise à niveau? Ou simplement réduire les paramètres vidéo?',
78
+ },
79
+ {
80
+ type: 'paragraph',
81
+ html: 'Les tests de latence sont également critiques pour les jeux compétitifs. La latence d\'entrée à affichage (du moment où vous appuyez sur un bouton au moment où vous le voyez à l\'écran) peut être 20-50 ms sur une configuration décente, mais 200+ ms sur une configuration lente. Dans les jeux compétitifs (FPS, jeux de combat), 50 ms est la différence entre la victoire et la défaite. C\'est pourquoi les joueurs professionnels investissent dans des moniteurs 240 Hz, des souris 8000 Hz et des PC optimisés.',
82
+ },
83
+ {
84
+ type: 'title',
85
+ text: 'Cycle de Vie et Réparabilité: Droits Numériques',
86
+ level: 2,
87
+ },
88
+ {
89
+ type: 'paragraph',
90
+ html: 'La "réparabilité" est de plus en plus importante en 2026. Un téléphone "réparable" dure 6 ans; un "scellé" expire en 2-3 ans. Un ordinateur portable avec RAM actualisable est un investissement; un avec RAM soudée est jetable. Les outils de diagnostic que nous implémentons s\'alignent sur le mouvement Right to Repair: nous voulons que vous sachiez exactement ce qui ne fonctionne pas avant de jeter vos appareils.',
91
+ },
92
+ {
93
+ type: 'paragraph',
94
+ html: 'Documenter la défaillance avec nos outils (capture d\'écran du test de pixels échoué, vidéo de la manette à la dérive) est la preuve pour les réclamations de garantie. De nombreux utilisateurs perdent de l\'argent parce qu\'ils ne documentent pas, ne diagnostiquent pas, renoncent simplement et achètent du nouveau. Nos utilitaires démocratisent les informations techniques: vous pouvez maintenant argumenter avec des preuves.',
95
+ },
96
+ {
97
+ type: 'title',
98
+ text: 'L\'Avenir du Matériel Portable 2026',
99
+ level: 2,
100
+ },
101
+ {
102
+ type: 'paragraph',
103
+ html: 'En 2026, la ligne entre le système d\'exploitation et le navigateur s\'est brouillée. Grâce à des normes comme <strong>Web Serial et WebUSB</strong>, nous pouvons effectuer des diagnostics qui auparavant nécessitaient des pilotes spécifiques. Ces outils font partie d\'un mouvement vers le droit à la réparation et la souveraineté technique de l\'utilisateur sur ses propres appareils.',
104
+ },
105
+ ],
106
+ };
107
+
@@ -0,0 +1,18 @@
1
+ import type { HardwareCategoryEntry } from '../types';
2
+ import { pixelesPantalla } from '../tool/deadPixelTest/index';
3
+ import { testTeclado } from '../tool/keyboardTest/index';
4
+ import { testMando } from '../tool/gamepadTest/index';
5
+ import { probadorVibracionMando } from '../tool/gamepadVibrationTester/index';
6
+ import { testRaton } from '../tool/mousePollingTest/index';
7
+ import { estimadorSaludBateria } from '../tool/batteryHealthEstimator/index';
8
+ import { toneGenerator } from '../tool/toneGenerator/index';
9
+
10
+ export const hardwareCategory: HardwareCategoryEntry = {
11
+ icon: 'mdi:memory',
12
+ tools: [pixelesPantalla, testTeclado, testMando, probadorVibracionMando, testRaton, estimadorSaludBateria, toneGenerator],
13
+ i18n: {
14
+ es: () => import('./i18n/es').then((m) => m.content),
15
+ en: () => import('./i18n/en').then((m) => m.content),
16
+ fr: () => import('./i18n/fr').then((m) => m.content),
17
+ },
18
+ };
@@ -0,0 +1,15 @@
1
+ ---
2
+ import { SEORenderer } from '@jjlmoya/utils-shared';
3
+ import { hardwareCategory } 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 hardwareCategory.i18n[locale]?.();
12
+ ---
13
+
14
+ {content && <SEORenderer content={{ locale, sections: content.seo }} />}
15
+
@@ -0,0 +1,116 @@
1
+ ---
2
+ interface NavItem {
3
+ id: string;
4
+ title: string;
5
+ href: string;
6
+ isActive?: boolean;
7
+ }
8
+
9
+ interface Props {
10
+ categoryTitle: string;
11
+ tools?: NavItem[];
12
+ }
13
+
14
+ const { categoryTitle, tools = [] } = Astro.props;
15
+ ---
16
+
17
+ <nav class="preview-nav-sidebar">
18
+ <div class="sidebar-header">
19
+ <h3>{categoryTitle}</h3>
20
+ </div>
21
+
22
+ <ul class="tools-list">
23
+ {tools.map((tool) => (
24
+ <li>
25
+ <a
26
+ href={tool.href}
27
+ class:list={['tool-link', { active: tool.isActive }]}
28
+ >
29
+ <span class="tool-title">{tool.title}</span>
30
+ </a>
31
+ </li>
32
+ ))}
33
+ </ul>
34
+ </nav>
35
+
36
+ <style>
37
+ .preview-nav-sidebar {
38
+ display: flex;
39
+ flex-direction: column;
40
+ height: 100%;
41
+ background: var(--bg-surface, #0f172a);
42
+ }
43
+
44
+ .sidebar-header {
45
+ padding: 2rem 1.5rem 1.5rem;
46
+ border-bottom: 1px solid var(--border-color, #1e293b);
47
+ }
48
+
49
+ .sidebar-header h3 {
50
+ margin: 0;
51
+ font-size: 0.75rem;
52
+ font-weight: 900;
53
+ text-transform: uppercase;
54
+ letter-spacing: 0.1em;
55
+ color: var(--text-muted, #94a3b8);
56
+ }
57
+
58
+ .tools-list {
59
+ list-style: none;
60
+ margin: 0;
61
+ padding: 0.5rem 0;
62
+ display: flex;
63
+ flex-direction: column;
64
+ gap: 0.25rem;
65
+ }
66
+
67
+ .tools-list li {
68
+ margin: 0;
69
+ }
70
+
71
+ .tool-link {
72
+ display: flex;
73
+ align-items: center;
74
+ padding: 0.75rem 1.5rem;
75
+ color: var(--text-muted, #94a3b8);
76
+ text-decoration: none;
77
+ font-size: 0.9375rem;
78
+ font-weight: 500;
79
+ transition: all 0.15s cubic-bezier(0.4, 0, 0.2, 1);
80
+ border-left: 3px solid transparent;
81
+ position: relative;
82
+ }
83
+
84
+ .tool-link:hover {
85
+ color: var(--text-base, #f1f5f9);
86
+ background: rgba(255, 255, 255, 0.08);
87
+ padding-left: 1.75rem;
88
+ }
89
+
90
+ .tool-link.active {
91
+ color: var(--accent, #f43f5e);
92
+ background: rgba(244, 63, 94, 0.15);
93
+ border-left-color: var(--accent, #f43f5e);
94
+ font-weight: 600;
95
+ }
96
+
97
+ .tool-link.active::before {
98
+ content: '';
99
+ position: absolute;
100
+ left: 0;
101
+ top: 50%;
102
+ transform: translateY(-50%);
103
+ width: 3px;
104
+ height: 24px;
105
+ background: var(--accent, #f43f5e);
106
+ border-radius: 0 2px 2px 0;
107
+ }
108
+
109
+ .tool-title {
110
+ display: block;
111
+ overflow: hidden;
112
+ text-overflow: ellipsis;
113
+ white-space: nowrap;
114
+ }
115
+ </style>
116
+