@jjlmoya/utils-hardware 1.15.0 → 1.16.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 (152) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +2 -1
  3. package/src/entries.ts +4 -1
  4. package/src/index.ts +1 -0
  5. package/src/pages/[locale]/[slug].astro +28 -12
  6. package/src/tests/locale_completeness.test.ts +6 -20
  7. package/src/tests/shared-test-helpers.ts +56 -0
  8. package/src/tests/tool_exports.test.ts +34 -0
  9. package/src/tests/tool_validation.test.ts +2 -2
  10. package/src/tool/batteryHealthEstimator/bibliography.ts +13 -0
  11. package/src/tool/batteryHealthEstimator/i18n/de.ts +2 -12
  12. package/src/tool/batteryHealthEstimator/i18n/en.ts +2 -12
  13. package/src/tool/batteryHealthEstimator/i18n/es.ts +2 -12
  14. package/src/tool/batteryHealthEstimator/i18n/fr.ts +2 -12
  15. package/src/tool/batteryHealthEstimator/i18n/id.ts +2 -12
  16. package/src/tool/batteryHealthEstimator/i18n/it.ts +2 -12
  17. package/src/tool/batteryHealthEstimator/i18n/ja.ts +2 -12
  18. package/src/tool/batteryHealthEstimator/i18n/ko.ts +2 -12
  19. package/src/tool/batteryHealthEstimator/i18n/nl.ts +2 -12
  20. package/src/tool/batteryHealthEstimator/i18n/pl.ts +2 -12
  21. package/src/tool/batteryHealthEstimator/i18n/pt.ts +2 -12
  22. package/src/tool/batteryHealthEstimator/i18n/ru.ts +2 -12
  23. package/src/tool/batteryHealthEstimator/i18n/sv.ts +2 -12
  24. package/src/tool/batteryHealthEstimator/i18n/tr.ts +2 -12
  25. package/src/tool/batteryHealthEstimator/i18n/zh.ts +2 -12
  26. package/src/tool/batteryHealthEstimator/seo.astro +3 -2
  27. package/src/tool/deadPixelTest/bibliography.ts +13 -0
  28. package/src/tool/deadPixelTest/i18n/de.ts +2 -12
  29. package/src/tool/deadPixelTest/i18n/en.ts +2 -12
  30. package/src/tool/deadPixelTest/i18n/es.ts +2 -12
  31. package/src/tool/deadPixelTest/i18n/fr.ts +2 -12
  32. package/src/tool/deadPixelTest/i18n/id.ts +2 -12
  33. package/src/tool/deadPixelTest/i18n/it.ts +2 -12
  34. package/src/tool/deadPixelTest/i18n/ja.ts +2 -12
  35. package/src/tool/deadPixelTest/i18n/ko.ts +2 -12
  36. package/src/tool/deadPixelTest/i18n/nl.ts +2 -12
  37. package/src/tool/deadPixelTest/i18n/pl.ts +2 -12
  38. package/src/tool/deadPixelTest/i18n/pt.ts +2 -12
  39. package/src/tool/deadPixelTest/i18n/ru.ts +2 -12
  40. package/src/tool/deadPixelTest/i18n/sv.ts +2 -12
  41. package/src/tool/deadPixelTest/i18n/tr.ts +2 -12
  42. package/src/tool/deadPixelTest/i18n/zh.ts +2 -12
  43. package/src/tool/deadPixelTest/seo.astro +3 -2
  44. package/src/tool/gamepadTest/bibliography.ts +12 -0
  45. package/src/tool/gamepadTest/i18n/de.ts +2 -12
  46. package/src/tool/gamepadTest/i18n/en.ts +2 -12
  47. package/src/tool/gamepadTest/i18n/es.ts +2 -12
  48. package/src/tool/gamepadTest/i18n/fr.ts +2 -12
  49. package/src/tool/gamepadTest/i18n/id.ts +2 -12
  50. package/src/tool/gamepadTest/i18n/it.ts +2 -12
  51. package/src/tool/gamepadTest/i18n/ja.ts +2 -12
  52. package/src/tool/gamepadTest/i18n/ko.ts +2 -12
  53. package/src/tool/gamepadTest/i18n/nl.ts +2 -12
  54. package/src/tool/gamepadTest/i18n/pl.ts +2 -12
  55. package/src/tool/gamepadTest/i18n/pt.ts +2 -12
  56. package/src/tool/gamepadTest/i18n/ru.ts +2 -12
  57. package/src/tool/gamepadTest/i18n/sv.ts +2 -12
  58. package/src/tool/gamepadTest/i18n/tr.ts +2 -12
  59. package/src/tool/gamepadTest/i18n/zh.ts +2 -12
  60. package/src/tool/gamepadTest/seo.astro +3 -2
  61. package/src/tool/gamepadVibrationTester/bibliography.ts +13 -0
  62. package/src/tool/gamepadVibrationTester/i18n/de.ts +2 -12
  63. package/src/tool/gamepadVibrationTester/i18n/en.ts +2 -12
  64. package/src/tool/gamepadVibrationTester/i18n/es.ts +2 -12
  65. package/src/tool/gamepadVibrationTester/i18n/fr.ts +2 -12
  66. package/src/tool/gamepadVibrationTester/i18n/id.ts +2 -12
  67. package/src/tool/gamepadVibrationTester/i18n/it.ts +2 -12
  68. package/src/tool/gamepadVibrationTester/i18n/ja.ts +2 -12
  69. package/src/tool/gamepadVibrationTester/i18n/ko.ts +2 -12
  70. package/src/tool/gamepadVibrationTester/i18n/nl.ts +2 -12
  71. package/src/tool/gamepadVibrationTester/i18n/pl.ts +2 -12
  72. package/src/tool/gamepadVibrationTester/i18n/pt.ts +2 -12
  73. package/src/tool/gamepadVibrationTester/i18n/ru.ts +2 -12
  74. package/src/tool/gamepadVibrationTester/i18n/sv.ts +2 -12
  75. package/src/tool/gamepadVibrationTester/i18n/tr.ts +2 -12
  76. package/src/tool/gamepadVibrationTester/i18n/zh.ts +2 -12
  77. package/src/tool/gamepadVibrationTester/seo.astro +3 -2
  78. package/src/tool/keyboardTest/bibliography.ts +13 -0
  79. package/src/tool/keyboardTest/i18n/de.ts +2 -12
  80. package/src/tool/keyboardTest/i18n/en.ts +2 -12
  81. package/src/tool/keyboardTest/i18n/es.ts +2 -12
  82. package/src/tool/keyboardTest/i18n/fr.ts +2 -12
  83. package/src/tool/keyboardTest/i18n/id.ts +2 -12
  84. package/src/tool/keyboardTest/i18n/it.ts +2 -12
  85. package/src/tool/keyboardTest/i18n/ja.ts +2 -12
  86. package/src/tool/keyboardTest/i18n/ko.ts +2 -12
  87. package/src/tool/keyboardTest/i18n/nl.ts +2 -12
  88. package/src/tool/keyboardTest/i18n/pl.ts +2 -12
  89. package/src/tool/keyboardTest/i18n/pt.ts +2 -12
  90. package/src/tool/keyboardTest/i18n/ru.ts +2 -12
  91. package/src/tool/keyboardTest/i18n/sv.ts +2 -12
  92. package/src/tool/keyboardTest/i18n/tr.ts +2 -12
  93. package/src/tool/keyboardTest/i18n/zh.ts +2 -12
  94. package/src/tool/keyboardTest/seo.astro +3 -2
  95. package/src/tool/mousePollingTest/bibliography.ts +13 -0
  96. package/src/tool/mousePollingTest/i18n/de.ts +2 -12
  97. package/src/tool/mousePollingTest/i18n/en.ts +2 -12
  98. package/src/tool/mousePollingTest/i18n/es.ts +2 -12
  99. package/src/tool/mousePollingTest/i18n/fr.ts +2 -12
  100. package/src/tool/mousePollingTest/i18n/id.ts +2 -12
  101. package/src/tool/mousePollingTest/i18n/it.ts +2 -12
  102. package/src/tool/mousePollingTest/i18n/ja.ts +2 -12
  103. package/src/tool/mousePollingTest/i18n/ko.ts +2 -12
  104. package/src/tool/mousePollingTest/i18n/nl.ts +2 -12
  105. package/src/tool/mousePollingTest/i18n/pl.ts +2 -12
  106. package/src/tool/mousePollingTest/i18n/pt.ts +2 -12
  107. package/src/tool/mousePollingTest/i18n/ru.ts +2 -12
  108. package/src/tool/mousePollingTest/i18n/sv.ts +2 -12
  109. package/src/tool/mousePollingTest/i18n/tr.ts +2 -12
  110. package/src/tool/mousePollingTest/i18n/zh.ts +2 -12
  111. package/src/tool/mousePollingTest/seo.astro +3 -2
  112. package/src/tool/refreshRateDetector/bibliography.astro +14 -0
  113. package/src/tool/refreshRateDetector/bibliography.ts +20 -0
  114. package/src/tool/refreshRateDetector/component.astro +206 -0
  115. package/src/tool/refreshRateDetector/entry.ts +29 -0
  116. package/src/tool/refreshRateDetector/i18n/de.ts +196 -0
  117. package/src/tool/refreshRateDetector/i18n/en.ts +196 -0
  118. package/src/tool/refreshRateDetector/i18n/es.ts +196 -0
  119. package/src/tool/refreshRateDetector/i18n/fr.ts +196 -0
  120. package/src/tool/refreshRateDetector/i18n/id.ts +196 -0
  121. package/src/tool/refreshRateDetector/i18n/it.ts +196 -0
  122. package/src/tool/refreshRateDetector/i18n/ja.ts +196 -0
  123. package/src/tool/refreshRateDetector/i18n/ko.ts +196 -0
  124. package/src/tool/refreshRateDetector/i18n/nl.ts +196 -0
  125. package/src/tool/refreshRateDetector/i18n/pl.ts +196 -0
  126. package/src/tool/refreshRateDetector/i18n/pt.ts +196 -0
  127. package/src/tool/refreshRateDetector/i18n/ru.ts +196 -0
  128. package/src/tool/refreshRateDetector/i18n/sv.ts +196 -0
  129. package/src/tool/refreshRateDetector/i18n/tr.ts +196 -0
  130. package/src/tool/refreshRateDetector/i18n/zh.ts +196 -0
  131. package/src/tool/refreshRateDetector/index.ts +11 -0
  132. package/src/tool/refreshRateDetector/monitor-refresh-rate-detector.css +342 -0
  133. package/src/tool/refreshRateDetector/seo.astro +15 -0
  134. package/src/tool/refreshRateDetector/ui.ts +24 -0
  135. package/src/tool/toneGenerator/bibliography.ts +13 -0
  136. package/src/tool/toneGenerator/i18n/de.ts +2 -12
  137. package/src/tool/toneGenerator/i18n/en.ts +2 -12
  138. package/src/tool/toneGenerator/i18n/es.ts +2 -12
  139. package/src/tool/toneGenerator/i18n/fr.ts +2 -12
  140. package/src/tool/toneGenerator/i18n/id.ts +2 -12
  141. package/src/tool/toneGenerator/i18n/it.ts +2 -12
  142. package/src/tool/toneGenerator/i18n/ja.ts +2 -12
  143. package/src/tool/toneGenerator/i18n/ko.ts +2 -12
  144. package/src/tool/toneGenerator/i18n/nl.ts +2 -12
  145. package/src/tool/toneGenerator/i18n/pl.ts +2 -12
  146. package/src/tool/toneGenerator/i18n/pt.ts +2 -12
  147. package/src/tool/toneGenerator/i18n/ru.ts +2 -12
  148. package/src/tool/toneGenerator/i18n/sv.ts +2 -12
  149. package/src/tool/toneGenerator/i18n/tr.ts +2 -12
  150. package/src/tool/toneGenerator/i18n/zh.ts +2 -12
  151. package/src/tool/toneGenerator/seo.astro +3 -2
  152. package/src/tools.ts +2 -1
@@ -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 { ProbadorVibracionMandoUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'gamepad-vibration-tester';
6
7
  const title = 'オンライン・ゲームパッド振動テスター';
@@ -87,21 +88,10 @@ export const content: ToolLocaleContent<ProbadorVibracionMandoUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'よくある質問',
91
91
  faq: faqData,
92
- bibliographyTitle: 'リファレンス',
93
- bibliography: [
94
- {
95
- name: 'ハプティック振動の仕組み — HobbyConsolas',
96
- url: 'https://www.hobbyconsolas.com/reportajes/como-funciona-vibracion-haptica-mando-dualsense-ps5-757673',
97
- },
98
- {
99
- name: 'Gamepad API — W3C',
100
- url: 'https://w3c.github.io/gamepad/',
101
- },
102
- ],
103
92
  howTo: howToData,
104
93
  schemas: [faqSchema, howToSchema, appSchema],
94
+ bibliography,
105
95
  seo: [
106
96
  { type: 'title', text: 'ゲーム用パッドの振動を監査する方法', level: 2 },
107
97
  {
@@ -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 { ProbadorVibracionMandoUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'gamepad-vibration-tester';
6
7
  const title = '온라인 게임패드 진동 테스트';
@@ -87,21 +88,10 @@ export const content: ToolLocaleContent<ProbadorVibracionMandoUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: '자주 묻는 질문',
91
91
  faq: faqData,
92
- bibliographyTitle: '참조',
93
- bibliography: [
94
- {
95
- name: '햅틱 진동 작동 원리 — HobbyConsolas',
96
- url: 'https://www.hobbyconsolas.com/reportajes/como-funciona-vibracion-haptica-mando-dualsense-ps5-757673',
97
- },
98
- {
99
- name: 'Gamepad API — W3C',
100
- url: 'https://w3c.github.io/gamepad/',
101
- },
102
- ],
103
92
  howTo: howToData,
104
93
  schemas: [faqSchema, howToSchema, appSchema],
94
+ bibliography,
105
95
  seo: [
106
96
  { type: 'title', text: '게임용 패드 진동을 점검하는 방법', level: 2 },
107
97
  {
@@ -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 { ProbadorVibracionMandoUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'gamepad-vibratie-test-online';
6
7
  const title = 'Online Gamepad Vibratie Tester';
@@ -87,21 +88,10 @@ export const content: ToolLocaleContent<ProbadorVibracionMandoUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Veelgestelde Vragen',
91
91
  faq: faqData,
92
- bibliographyTitle: 'Referenties',
93
- bibliography: [
94
- {
95
- name: 'Hoe haptische vibratie werkt — HobbyConsolas',
96
- url: 'https://www.hobbyconsolas.com/reportajes/como-funciona-vibracion-haptica-mando-dualsense-ps5-757673',
97
- },
98
- {
99
- name: 'Gamepad API — W3C',
100
- url: 'https://w3c.github.io/gamepad/',
101
- },
102
- ],
103
92
  howTo: howToData,
104
93
  schemas: [faqSchema, howToSchema, appSchema],
94
+ bibliography,
105
95
  seo: [
106
96
  { type: 'title', text: 'Hoe examineer je de vibratie van je gamepad', level: 2 },
107
97
  {
@@ -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 { ProbadorVibracionMandoUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'test-wibracji-pada-online';
6
7
  const title = 'Test Wibracji Pada Online';
@@ -87,21 +88,10 @@ export const content: ToolLocaleContent<ProbadorVibracionMandoUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Często Zadawane Pytania',
91
91
  faq: faqData,
92
- bibliographyTitle: 'Referencje',
93
- bibliography: [
94
- {
95
- name: 'Jak działają wibracje haptyczne — HobbyConsolas',
96
- url: 'https://www.hobbyconsolas.com/reportajes/como-funciona-vibracion-haptica-mando-dualsense-ps5-757673',
97
- },
98
- {
99
- name: 'Gamepad API — W3C',
100
- url: 'https://w3c.github.io/gamepad/',
101
- },
102
- ],
103
92
  howTo: howToData,
104
93
  schemas: [faqSchema, howToSchema, appSchema],
94
+ bibliography,
105
95
  seo: [
106
96
  { type: 'title', text: 'Jak sprawdzić wibracje swojego pada do gier', level: 2 },
107
97
  {
@@ -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 { ProbadorVibracionMandoUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'teste-vibracao-gamepad-online';
6
7
  const title = 'Teste de Vibração de Gamepad Online';
@@ -87,21 +88,10 @@ export const content: ToolLocaleContent<ProbadorVibracionMandoUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Perguntas Frequentes',
91
91
  faq: faqData,
92
- bibliographyTitle: 'Referências',
93
- bibliography: [
94
- {
95
- name: 'Como funciona a vibração háptica — HobbyConsolas',
96
- url: 'https://www.hobbyconsolas.com/reportajes/como-funciona-vibracion-haptica-mando-dualsense-ps5-757673',
97
- },
98
- {
99
- name: 'Gamepad API — W3C',
100
- url: 'https://w3c.github.io/gamepad/',
101
- },
102
- ],
103
92
  howTo: howToData,
104
93
  schemas: [faqSchema, howToSchema, appSchema],
94
+ bibliography,
105
95
  seo: [
106
96
  { type: 'title', text: 'Como auditar a vibração do seu comando de jogo', level: 2 },
107
97
  {
@@ -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 { ProbadorVibracionMandoUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'test-vibracii-gejmpada-online';
6
7
  const title = 'Онлайн тест вибрации геймпада';
@@ -87,21 +88,10 @@ export const content: ToolLocaleContent<ProbadorVibracionMandoUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Часто задаваемые вопросы',
91
91
  faq: faqData,
92
- bibliographyTitle: 'Ссылки',
93
- bibliography: [
94
- {
95
- name: 'Как работает тактильная вибрация — HobbyConsolas',
96
- url: 'https://www.hobbyconsolas.com/reportajes/como-funciona-vibracion-haptica-mando-dualsense-ps5-757673',
97
- },
98
- {
99
- name: 'Gamepad API — W3C',
100
- url: 'https://w3c.github.io/gamepad/',
101
- },
102
- ],
103
92
  howTo: howToData,
104
93
  schemas: [faqSchema, howToSchema, appSchema],
94
+ bibliography,
105
95
  seo: [
106
96
  { type: 'title', text: 'Как проверить вибрацию геймпада', level: 2 },
107
97
  {
@@ -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 { ProbadorVibracionMandoUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'vibrationstest-gamepad-online';
6
7
  const title = 'Vibrationstest för Gamepad Online';
@@ -87,21 +88,10 @@ export const content: ToolLocaleContent<ProbadorVibracionMandoUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Vanliga frågor',
91
91
  faq: faqData,
92
- bibliographyTitle: 'Referenser',
93
- bibliography: [
94
- {
95
- name: 'Hur haptisk vibration fungerar — HobbyConsolas',
96
- url: 'https://www.hobbyconsolas.com/reportajes/como-funciona-vibracion-haptica-mando-dualsense-ps5-757673',
97
- },
98
- {
99
- name: 'Gamepad API — W3C',
100
- url: 'https://w3c.github.io/gamepad/',
101
- },
102
- ],
103
92
  howTo: howToData,
104
93
  schemas: [faqSchema, howToSchema, appSchema],
94
+ bibliography,
105
95
  seo: [
106
96
  { type: 'title', text: 'Hur du kontrollerar vibrationen på din spelkontroll', level: 2 },
107
97
  {
@@ -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 { ProbadorVibracionMandoUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'oyun-kolu-titresim-testi-online';
6
7
  const title = 'Çevrimiçi Oyun Kolu Titreşim Testi';
@@ -87,21 +88,10 @@ export const content: ToolLocaleContent<ProbadorVibracionMandoUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Sıkça Sorulan Sorular',
91
91
  faq: faqData,
92
- bibliographyTitle: 'Referanslar',
93
- bibliography: [
94
- {
95
- name: 'Haptik titreşim nasıl çalışır — HobbyConsolas',
96
- url: 'https://www.hobbyconsolas.com/reportajes/como-funciona-vibracion-haptica-mando-dualsense-ps5-757673',
97
- },
98
- {
99
- name: 'Gamepad API — W3C',
100
- url: 'https://w3c.github.io/gamepad/',
101
- },
102
- ],
103
92
  howTo: howToData,
104
93
  schemas: [faqSchema, howToSchema, appSchema],
94
+ bibliography,
105
95
  seo: [
106
96
  { type: 'title', text: 'Oyun kolunuzun titreşimini nasıl denetlersiniz', level: 2 },
107
97
  {
@@ -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 { ProbadorVibracionMandoUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'gamepad-vibration-tester';
6
7
  const title = '在线手柄振动测试';
@@ -87,21 +88,10 @@ export const content: ToolLocaleContent<ProbadorVibracionMandoUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: '常见问题',
91
91
  faq: faqData,
92
- bibliographyTitle: '参考资料',
93
- bibliography: [
94
- {
95
- name: '触感振动的工作原理 — HobbyConsolas',
96
- url: 'https://www.hobbyconsolas.com/reportajes/como-funciona-vibracion-haptica-mando-dualsense-ps5-757673',
97
- },
98
- {
99
- name: 'Gamepad API — W3C',
100
- url: 'https://w3c.github.io/gamepad/',
101
- },
102
- ],
103
92
  howTo: howToData,
104
93
  schemas: [faqSchema, howToSchema, appSchema],
94
+ bibliography,
105
95
  seo: [
106
96
  { type: 'title', text: '如何审计您的游戏手柄振动', level: 2 },
107
97
  {
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  import { SEORenderer } from '@jjlmoya/utils-shared';
3
- import type { KnownLocale } from '../../types';
4
3
  import { probadorVibracionMando } from './index';
4
+ import type { KnownLocale } from '../../types';
5
5
 
6
6
  interface Props {
7
7
  locale?: KnownLocale;
@@ -9,6 +9,7 @@ interface Props {
9
9
 
10
10
  const { locale = 'es' } = Astro.props;
11
11
  const content = await probadorVibracionMando.i18n[locale]?.();
12
+ if (!content) return null;
12
13
  ---
13
14
 
14
- {content && <SEORenderer content={{ locale, sections: content.seo }} />}
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
@@ -0,0 +1,13 @@
1
+ import type { BibliographyEntry } from '../../../types';
2
+
3
+ export const bibliography: BibliographyEntry[] = [
4
+
5
+ {
6
+ name: 'USB Keyboard/Keypad Page - HID Usage Tables',
7
+ url: 'https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf',
8
+ },
9
+ {
10
+ name: 'Mechanical vs Membrane Keyboards - Technical Deep Dive',
11
+ url: 'https://deskthority.net/wiki/Rollover',
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 { TestTecladoUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'tastatur-test-online';
6
7
  const title = 'Online Tastatur Test & Ghosting Detektor';
@@ -82,21 +83,10 @@ export const content: ToolLocaleContent<TestTecladoUI> = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: 'Häufig gestellte Fragen',
86
86
  faq: faqData,
87
- bibliographyTitle: 'Technische Referenzen',
88
- bibliography: [
89
- {
90
- name: 'USB Keyboard/Keypad Page - HID Usage Tables',
91
- url: 'https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf',
92
- },
93
- {
94
- name: 'Mechanical vs Membrane Keyboards - Technical Deep Dive',
95
- url: 'https://deskthority.net/wiki/Rollover',
96
- },
97
- ],
98
87
  howTo: howToData,
99
88
  schemas: [faqSchema, howToSchema, appSchema],
89
+ bibliography,
100
90
  seo: [
101
91
  {
102
92
  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 { TestTecladoUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'keyboard-test';
6
7
  const title = 'Online Keyboard Test & Ghosting Detector';
@@ -82,21 +83,10 @@ export const content: ToolLocaleContent<TestTecladoUI> = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: 'Frequently Asked Questions',
86
86
  faq: faqData,
87
- bibliographyTitle: 'Technical References',
88
- bibliography: [
89
- {
90
- name: 'USB Keyboard/Keypad Page - HID Usage Tables',
91
- url: 'https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf',
92
- },
93
- {
94
- name: 'Mechanical vs Membrane Keyboards - Technical Deep Dive',
95
- url: 'https://deskthority.net/wiki/Rollover',
96
- },
97
- ],
98
87
  howTo: howToData,
99
88
  schemas: [faqSchema, howToSchema, appSchema],
89
+ bibliography,
100
90
  seo: [
101
91
  {
102
92
  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 { TestTecladoUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'test-teclado';
6
7
  const title = 'Test de Teclado y Ghosting Online';
@@ -82,21 +83,10 @@ export const content: ToolLocaleContent<TestTecladoUI> = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: 'Preguntas Frecuentes',
86
86
  faq: faqData,
87
- bibliographyTitle: 'Referencias Técnicas',
88
- bibliography: [
89
- {
90
- name: 'USB Keyboard/Keypad Page - HID Usage Tables',
91
- url: 'https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf',
92
- },
93
- {
94
- name: 'Mechanical vs Membrane Keyboards - Technical Deep Dive',
95
- url: 'https://deskthority.net/wiki/Rollover',
96
- },
97
- ],
98
87
  howTo: howToData,
99
88
  schemas: [faqSchema, howToSchema, appSchema],
89
+ bibliography,
100
90
  seo: [
101
91
  {
102
92
  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 { TestTecladoUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'test-clavier';
6
7
  const title = 'Test de Clavier et Détecteur de Ghosting';
@@ -82,21 +83,10 @@ export const content: ToolLocaleContent<TestTecladoUI> = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: 'Questions Fréquemment Posées',
86
86
  faq: faqData,
87
- bibliographyTitle: 'Références Techniques',
88
- bibliography: [
89
- {
90
- name: 'USB Keyboard/Keypad Page - HID Usage Tables',
91
- url: 'https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf',
92
- },
93
- {
94
- name: 'Mechanical vs Membrane Keyboards - Technical Deep Dive',
95
- url: 'https://deskthority.net/wiki/Rollover',
96
- },
97
- ],
98
87
  howTo: howToData,
99
88
  schemas: [faqSchema, howToSchema, appSchema],
89
+ bibliography,
100
90
  seo: [
101
91
  {
102
92
  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 { TestTecladoUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'tes-keyboard-online';
6
7
  const title = 'Tes Keyboard Online & Detektor Ghosting';
@@ -82,21 +83,10 @@ export const content: ToolLocaleContent<TestTecladoUI> = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: 'Pertanyaan yang Sering Diajukan',
86
86
  faq: faqData,
87
- bibliographyTitle: 'Referensi Teknis',
88
- bibliography: [
89
- {
90
- name: 'USB Keyboard/Keypad Page - HID Usage Tables',
91
- url: 'https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf',
92
- },
93
- {
94
- name: 'Mechanical vs Membrane Keyboards - Technical Deep Dive',
95
- url: 'https://deskthority.net/wiki/Rollover',
96
- },
97
- ],
98
87
  howTo: howToData,
99
88
  schemas: [faqSchema, howToSchema, appSchema],
89
+ bibliography,
100
90
  seo: [
101
91
  {
102
92
  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 { TestTecladoUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'test-tastiera-online';
6
7
  const title = 'Test Tastiera Online e Rilevatore Ghosting';
@@ -82,21 +83,10 @@ export const content: ToolLocaleContent<TestTecladoUI> = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: 'Domande Frequenti',
86
86
  faq: faqData,
87
- bibliographyTitle: 'Riferimenti Tecnici',
88
- bibliography: [
89
- {
90
- name: 'USB Keyboard/Keypad Page - HID Usage Tables',
91
- url: 'https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf',
92
- },
93
- {
94
- name: 'Mechanical vs Membrane Keyboards - Technical Deep Dive',
95
- url: 'https://deskthority.net/wiki/Rollover',
96
- },
97
- ],
98
87
  howTo: howToData,
99
88
  schemas: [faqSchema, howToSchema, appSchema],
89
+ bibliography,
100
90
  seo: [
101
91
  {
102
92
  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 { TestTecladoUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'keyboard-test';
6
7
  const title = 'オンライン・キーボードテスト&ゴースト検出器';
@@ -82,21 +83,10 @@ export const content: ToolLocaleContent<TestTecladoUI> = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: 'よくある質問',
86
86
  faq: faqData,
87
- bibliographyTitle: '技術リファレンス',
88
- bibliography: [
89
- {
90
- name: 'USB Keyboard/Keypad Page - HID Usage Tables',
91
- url: 'https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf',
92
- },
93
- {
94
- name: 'Mechanical vs Membrane Keyboards - Technical Deep Dive',
95
- url: 'https://deskthority.net/wiki/Rollover',
96
- },
97
- ],
98
87
  howTo: howToData,
99
88
  schemas: [faqSchema, howToSchema, appSchema],
89
+ bibliography,
100
90
  seo: [
101
91
  {
102
92
  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 { TestTecladoUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'keyboard-test';
6
7
  const title = '온라인 키보드 테스트 및 고스트 감지기';
@@ -82,21 +83,10 @@ export const content: ToolLocaleContent<TestTecladoUI> = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: '자주 묻는 질문',
86
86
  faq: faqData,
87
- bibliographyTitle: '기술 참조',
88
- bibliography: [
89
- {
90
- name: 'USB Keyboard/Keypad Page - HID Usage Tables',
91
- url: 'https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf',
92
- },
93
- {
94
- name: 'Mechanical vs Membrane Keyboards - Technical Deep Dive',
95
- url: 'https://deskthority.net/wiki/Rollover',
96
- },
97
- ],
98
87
  howTo: howToData,
99
88
  schemas: [faqSchema, howToSchema, appSchema],
89
+ bibliography,
100
90
  seo: [
101
91
  {
102
92
  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 { TestTecladoUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'toetsenbord-test-online';
6
7
  const title = 'Online Toetsenbord Test & Ghosting Detector';
@@ -82,21 +83,10 @@ export const content: ToolLocaleContent<TestTecladoUI> = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: 'Veelgestelde Vragen',
86
86
  faq: faqData,
87
- bibliographyTitle: 'Technische Referenties',
88
- bibliography: [
89
- {
90
- name: 'USB Keyboard/Keypad Page - HID Usage Tables',
91
- url: 'https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf',
92
- },
93
- {
94
- name: 'Mechanical vs Membrane Keyboards - Technical Deep Dive',
95
- url: 'https://deskthority.net/wiki/Rollover',
96
- },
97
- ],
98
87
  howTo: howToData,
99
88
  schemas: [faqSchema, howToSchema, appSchema],
89
+ bibliography,
100
90
  seo: [
101
91
  {
102
92
  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 { TestTecladoUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'test-klawiatury-online';
6
7
  const title = 'Online Test Klawiatury i Detektor Ghostingu';
@@ -82,21 +83,10 @@ export const content: ToolLocaleContent<TestTecladoUI> = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: 'Często Zadawane Pytania',
86
86
  faq: faqData,
87
- bibliographyTitle: 'Referencje Techniczne',
88
- bibliography: [
89
- {
90
- name: 'USB Keyboard/Keypad Page - HID Usage Tables',
91
- url: 'https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf',
92
- },
93
- {
94
- name: 'Mechanical vs Membrane Keyboards - Technical Deep Dive',
95
- url: 'https://deskthority.net/wiki/Rollover',
96
- },
97
- ],
98
87
  howTo: howToData,
99
88
  schemas: [faqSchema, howToSchema, appSchema],
89
+ bibliography,
100
90
  seo: [
101
91
  {
102
92
  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 { TestTecladoUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'teste-teclado-online';
6
7
  const title = 'Teste de Teclado Online e Detetor de Ghosting';
@@ -82,21 +83,10 @@ export const content: ToolLocaleContent<TestTecladoUI> = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: 'Perguntas Frequentes',
86
86
  faq: faqData,
87
- bibliographyTitle: 'Referências Técnicas',
88
- bibliography: [
89
- {
90
- name: 'USB Keyboard/Keypad Page - HID Usage Tables',
91
- url: 'https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf',
92
- },
93
- {
94
- name: 'Mechanical vs Membrane Keyboards - Technical Deep Dive',
95
- url: 'https://deskthority.net/wiki/Rollover',
96
- },
97
- ],
98
87
  howTo: howToData,
99
88
  schemas: [faqSchema, howToSchema, appSchema],
89
+ bibliography,
100
90
  seo: [
101
91
  {
102
92
  type: 'title',