@jjlmoya/utils-hardware 1.23.0 → 1.25.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 (79) hide show
  1. package/package.json +2 -1
  2. package/src/category/index.ts +4 -1
  3. package/src/entries.ts +10 -1
  4. package/src/index.ts +3 -0
  5. package/src/tests/locale_completeness.test.ts +2 -2
  6. package/src/tests/tool_validation.test.ts +2 -2
  7. package/src/tool/keyboardChatterTest/bibliography.astro +15 -0
  8. package/src/tool/keyboardChatterTest/bibliography.ts +20 -0
  9. package/src/tool/keyboardChatterTest/component.astro +353 -0
  10. package/src/tool/keyboardChatterTest/entry.ts +30 -0
  11. package/src/tool/keyboardChatterTest/i18n/de.ts +232 -0
  12. package/src/tool/keyboardChatterTest/i18n/en.ts +232 -0
  13. package/src/tool/keyboardChatterTest/i18n/es.ts +232 -0
  14. package/src/tool/keyboardChatterTest/i18n/fr.ts +232 -0
  15. package/src/tool/keyboardChatterTest/i18n/id.ts +232 -0
  16. package/src/tool/keyboardChatterTest/i18n/it.ts +232 -0
  17. package/src/tool/keyboardChatterTest/i18n/ja.ts +232 -0
  18. package/src/tool/keyboardChatterTest/i18n/ko.ts +232 -0
  19. package/src/tool/keyboardChatterTest/i18n/nl.ts +232 -0
  20. package/src/tool/keyboardChatterTest/i18n/pl.ts +232 -0
  21. package/src/tool/keyboardChatterTest/i18n/pt.ts +232 -0
  22. package/src/tool/keyboardChatterTest/i18n/ru.ts +232 -0
  23. package/src/tool/keyboardChatterTest/i18n/sv.ts +232 -0
  24. package/src/tool/keyboardChatterTest/i18n/tr.ts +232 -0
  25. package/src/tool/keyboardChatterTest/i18n/zh.ts +232 -0
  26. package/src/tool/keyboardChatterTest/index.ts +12 -0
  27. package/src/tool/keyboardChatterTest/keyboard-chatter-test.css +512 -0
  28. package/src/tool/keyboardChatterTest/logic.ts +23 -0
  29. package/src/tool/keyboardChatterTest/seo.astro +16 -0
  30. package/src/tool/keyboardChatterTest/ui.ts +34 -0
  31. package/src/tool/stereoAudioTest/bibliography.astro +14 -0
  32. package/src/tool/stereoAudioTest/bibliography.ts +16 -0
  33. package/src/tool/stereoAudioTest/component.astro +251 -0
  34. package/src/tool/stereoAudioTest/entry.ts +29 -0
  35. package/src/tool/stereoAudioTest/i18n/de.ts +229 -0
  36. package/src/tool/stereoAudioTest/i18n/en.ts +229 -0
  37. package/src/tool/stereoAudioTest/i18n/es.ts +229 -0
  38. package/src/tool/stereoAudioTest/i18n/fr.ts +229 -0
  39. package/src/tool/stereoAudioTest/i18n/id.ts +229 -0
  40. package/src/tool/stereoAudioTest/i18n/it.ts +229 -0
  41. package/src/tool/stereoAudioTest/i18n/ja.ts +229 -0
  42. package/src/tool/stereoAudioTest/i18n/ko.ts +229 -0
  43. package/src/tool/stereoAudioTest/i18n/nl.ts +229 -0
  44. package/src/tool/stereoAudioTest/i18n/pl.ts +229 -0
  45. package/src/tool/stereoAudioTest/i18n/pt.ts +229 -0
  46. package/src/tool/stereoAudioTest/i18n/ru.ts +229 -0
  47. package/src/tool/stereoAudioTest/i18n/sv.ts +229 -0
  48. package/src/tool/stereoAudioTest/i18n/tr.ts +229 -0
  49. package/src/tool/stereoAudioTest/i18n/zh.ts +229 -0
  50. package/src/tool/stereoAudioTest/index.ts +11 -0
  51. package/src/tool/stereoAudioTest/logic.ts +22 -0
  52. package/src/tool/stereoAudioTest/seo.astro +15 -0
  53. package/src/tool/stereoAudioTest/stereo-audio-test.css +411 -0
  54. package/src/tool/stereoAudioTest/ui.ts +24 -0
  55. package/src/tool/webBluetoothBleScanner/bibliography.astro +14 -0
  56. package/src/tool/webBluetoothBleScanner/bibliography.ts +16 -0
  57. package/src/tool/webBluetoothBleScanner/component.astro +339 -0
  58. package/src/tool/webBluetoothBleScanner/entry.ts +29 -0
  59. package/src/tool/webBluetoothBleScanner/i18n/de.ts +233 -0
  60. package/src/tool/webBluetoothBleScanner/i18n/en.ts +233 -0
  61. package/src/tool/webBluetoothBleScanner/i18n/es.ts +233 -0
  62. package/src/tool/webBluetoothBleScanner/i18n/fr.ts +233 -0
  63. package/src/tool/webBluetoothBleScanner/i18n/id.ts +233 -0
  64. package/src/tool/webBluetoothBleScanner/i18n/it.ts +233 -0
  65. package/src/tool/webBluetoothBleScanner/i18n/ja.ts +233 -0
  66. package/src/tool/webBluetoothBleScanner/i18n/ko.ts +233 -0
  67. package/src/tool/webBluetoothBleScanner/i18n/nl.ts +233 -0
  68. package/src/tool/webBluetoothBleScanner/i18n/pl.ts +233 -0
  69. package/src/tool/webBluetoothBleScanner/i18n/pt.ts +233 -0
  70. package/src/tool/webBluetoothBleScanner/i18n/ru.ts +233 -0
  71. package/src/tool/webBluetoothBleScanner/i18n/sv.ts +233 -0
  72. package/src/tool/webBluetoothBleScanner/i18n/tr.ts +233 -0
  73. package/src/tool/webBluetoothBleScanner/i18n/zh.ts +233 -0
  74. package/src/tool/webBluetoothBleScanner/index.ts +11 -0
  75. package/src/tool/webBluetoothBleScanner/logic.ts +79 -0
  76. package/src/tool/webBluetoothBleScanner/seo.astro +15 -0
  77. package/src/tool/webBluetoothBleScanner/ui.ts +41 -0
  78. package/src/tool/webBluetoothBleScanner/web-bluetooth-ble-scanner.css +406 -0
  79. package/src/tools.ts +4 -1
@@ -0,0 +1,232 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { KeyboardChatterTestUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
5
+
6
+ const slug = 'tastatur-chatter-test';
7
+ const title = 'Tastatur Chatter Test';
8
+ const description = 'Erkennen Sie mechanisches Tastatur-Chattern, Doppeltippen und fehlerhaftes Schalterprellen, indem Sie prüfen, wie schnell dieselbe Taste zweimal erscheint.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Was ist Tastatur-Chattern?',
13
+ answer: 'Tastatur-Chattern ist ein Hardwarefehler, bei dem ein physischer Tastendruck als mehrere Tastendrücke registriert wird. Es tritt häufig bei verschmutzten, abgenutzten, oxidierten oder schlecht entprellten mechanischen Schaltern auf.',
14
+ },
15
+ {
16
+ question: 'Wie funktioniert dieser Tastatur-Chatter-Test?',
17
+ answer: 'Drücken Sie die verdächtige Taste langsam, einen Tipp nach dem anderen. Wenn das Protokoll wiederholte Tastendrücke mit nur wenigen Millisekunden Abstand zeigt, könnte der Schalter prellen und doppelte Buchstaben erzeugen.',
18
+ },
19
+ {
20
+ question: 'Welches Delta bedeutet, dass meine Tastatur doppelt tippt?',
21
+ answer: 'Ein wiederholter Tastendruck unter 30 ms ist stark verdächtig für Chattern. Wiederholungen zwischen 30 und 50 ms verdienen Aufmerksamkeit. Normale absichtliche Wiederholungen liegen bei den meisten Nutzern über 50 ms.',
22
+ },
23
+ {
24
+ question: 'Warum zeigt der erste Tastendruck kein Delta an?',
25
+ answer: 'Ein Delta benötigt einen vorherigen Druck derselben Taste. Der erste Tastendruck legt die Basislinie fest, und spätere Tastendrücke zeigen die Zeitlücke in Millisekunden.',
26
+ },
27
+ {
28
+ question: 'Kann Software Tastatur-Chattern beheben?',
29
+ answer: 'Entprell-Software kann einige Symptome verbergen, repariert aber nicht den Schalter. Reinigung, Wiedereinsetzen von Hot-Swap-Schaltern, Austausch des Schalters oder Reparatur der Tastaturplatine können erforderlich sein.',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'Tool öffnen und Tasten normal drücken',
36
+ text: 'Es gibt keinen Startknopf. Klicken Sie bei Bedarf in das Tool und drücken Sie dann die Taste, die doppelt getippt hat.',
37
+ },
38
+ {
39
+ name: 'Die verdächtige Taste einzeln antippen',
40
+ text: 'Drücken Sie die Taste, die doppelte Zeichen erzeugt. Wenn ein physischer Druck mehrere Protokolleinträge mit winzigen Deltas erzeugt, chattet der Schalter wahrscheinlich.',
41
+ },
42
+ {
43
+ name: 'Den Farbcode lesen',
44
+ text: 'Grün bedeutet normal über 50 ms, Gelb bedeutet verdächtig von 30 bis 50 ms und Rot bedeutet Chattern erkannt unter 30 ms.',
45
+ },
46
+ {
47
+ name: 'Protokoll bei Bedarf exportieren',
48
+ text: 'Verwenden Sie die Download-Schaltfläche, um ein CSV-Protokoll zu speichern, das beim Vergleichen von Tasten oder Dokumentieren eines zeitweiligen Fehlers hilft.',
49
+ },
50
+ ];
51
+
52
+ const faqSchema: WithContext<FAQPage> = {
53
+ '@context': 'https://schema.org',
54
+ '@type': 'FAQPage',
55
+ mainEntity: faqData.map((item) => ({
56
+ '@type': 'Question',
57
+ name: item.question,
58
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
59
+ })),
60
+ };
61
+
62
+ const howToSchema: WithContext<HowTo> = {
63
+ '@context': 'https://schema.org',
64
+ '@type': 'HowTo',
65
+ name: title,
66
+ description,
67
+ step: howToData.map((step, i) => ({
68
+ '@type': 'HowToStep',
69
+ position: i + 1,
70
+ name: step.name,
71
+ text: step.text,
72
+ })),
73
+ };
74
+
75
+ const appSchema: WithContext<SoftwareApplication> = {
76
+ '@context': 'https://schema.org',
77
+ '@type': 'SoftwareApplication',
78
+ name: title,
79
+ description,
80
+ applicationCategory: 'UtilityApplication',
81
+ operatingSystem: 'All',
82
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
83
+ inLanguage: 'de',
84
+ };
85
+
86
+ export const content: ToolLocaleContent<KeyboardChatterTestUI> = {
87
+ slug,
88
+ title,
89
+ description,
90
+ faq: faqData,
91
+ bibliography,
92
+ howTo: howToData,
93
+ schemas: [faqSchema, howToSchema, appSchema],
94
+ seo: [
95
+ {
96
+ type: 'title',
97
+ text: 'Mechanischer Tastatur-Doppeltipp-Test',
98
+ level: 2,
99
+ },
100
+ {
101
+ type: 'paragraph',
102
+ html: 'Dieser Tastatur-Chatter-Test hilft bei der Diagnose einer mechanischen Tastatur, die zwei Buchstaben aus einem Druck tippt, saubere Loslassen verpasst oder wiederholte Zeichen ohne absichtliches doppeltes Tippen erzeugt. Verwenden Sie ihn vor der Reinigung von Schaltern, dem Ändern von Firmware-Entprelleinstellungen, dem Öffnen eines Garantieanspruchs oder dem Austausch eines Hot-Swap-Schalters.',
103
+ },
104
+ {
105
+ type: 'diagnostic',
106
+ variant: 'info',
107
+ title: 'Wie man das Ergebnis liest',
108
+ badge: 'Delta-Schwellenwerte',
109
+ html: '<p><strong>Normal</strong> bedeutet, dass die Wiederholung über 50 ms lag und normalerweise beabsichtigt ist. <strong>Verdächtig</strong> bedeutet 30-50 ms und sollte auf derselben Taste erneut getestet werden. <strong>Chattern erkannt</strong> bedeutet unter 30 ms, was sehr wahrscheinlich ein physischer Tastendruck ist, der in mehrere elektrische Kontakte prellt.</p>',
110
+ },
111
+ {
112
+ type: 'title',
113
+ text: 'Warum mechanische Schalter chattern',
114
+ level: 3,
115
+ },
116
+ {
117
+ type: 'paragraph',
118
+ html: 'Ein mechanischer Schalter schließt nicht als perfekt sauberes digitales Signal. Die Metallkontakte können für einige Millisekunden prellen, bevor sie sich setzen. Die Tastatur-Firmware filtert dieses Prellen normalerweise mit einem Entprellfenster. Chattern tritt auf, wenn der Kontakt so verschmutzt, abgenutzt, oxidiert, locker, gerissen oder schlecht eingestellt ist, dass die Tastatur zusätzliche Tastendrücke meldet, nachdem der Entprellfilter sie hätte verarbeiten sollen.',
119
+ },
120
+ {
121
+ type: 'table',
122
+ headers: ['Symptom', 'Wahrscheinliche Ursache', 'Was zuerst versuchen'],
123
+ rows: [
124
+ ['Eine Taste tippt denselben Buchstaben zweimal', 'Verschmutzter oder abgenutzter Schaltkontakt', 'Tastenkappe entfernen, Staub ausblasen und erneut testen, bevor Sie den Schalter austauschen.'],
125
+ ['Mehrere Hot-Swap-Tasten chattern nach einem Build', 'Schalterstifte sitzen nicht sauber', 'Schalter herausziehen und wieder einsetzen, auf verbogene Stifte oder lockeren Sockel prüfen.'],
126
+ ['Tritt nur nach Verschüttungen oder Feuchtigkeit auf', 'Oxidation oder Rückstände auf Kontakten', 'Tastatur trennen und gemäß Herstelleranleitung reinigen.'],
127
+ ['Viele Tasten zeigen winzige Deltas', 'Firmware-Entprellung zu niedrig oder Scan-Problem', 'An einem anderen USB-Anschluss vergleichen und Firmware-Entprelleinstellungen überprüfen, falls verfügbar.'],
128
+ ],
129
+ },
130
+ {
131
+ type: 'title',
132
+ text: 'Testmethode zur Reduzierung von Fehlalarmen',
133
+ level: 3,
134
+ },
135
+ {
136
+ type: 'list',
137
+ items: [
138
+ 'Testen Sie eine verdächtige Taste nach der anderen, anstatt vollständige Sätze zu tippen.',
139
+ 'Drücken Sie die Taste einmal, lassen Sie sie vollständig los und warten Sie einen Moment vor dem nächsten Druck.',
140
+ 'Vergleichen Sie die verdächtige Taste mit einer benachbarten Taste, die gesund wirkt.',
141
+ 'Ignorieren Sie die erste Zeile für eine Taste, da es keinen vorherigen Druck zum Vergleichen gibt.',
142
+ 'Wenn dieselbe Taste wiederholt rote Zeilen unter 30 ms bei einzelnen Antippern zeigt, behandeln Sie es als Hardwarefehler.',
143
+ 'Wenn nur gelbe Zeilen erscheinen, wiederholen Sie den Test langsamer und prüfen Sie, ob Ihr Tipprhythmus das kurze Intervall verursacht.',
144
+ ],
145
+ },
146
+ {
147
+ type: 'title',
148
+ text: 'Chattern vs. Absichtlich schnelles Tippen',
149
+ level: 3,
150
+ },
151
+ {
152
+ type: 'comparative',
153
+ columns: 3,
154
+ items: [
155
+ {
156
+ title: 'Chattern',
157
+ description: 'Auf eine Taste gehäuft, oft unter 30 ms, und erscheint, wenn Sie einen Tastendruck beabsichtigten.',
158
+ points: ['Schalter oder Sockel inspizieren.', 'Mit einer benachbarten gesunden Taste vergleichen.'],
159
+ },
160
+ {
161
+ title: 'Schnelles Tippen',
162
+ description: 'Betrifft viele Tasten, folgt Ihrem Rhythmus und liegt tendenziell über 50 ms zwischen wiederholten Drücken derselben Taste.',
163
+ points: ['Normalerweise normale Nutzung.', 'Erneut mit langsameren Einzelantippern testen.'],
164
+ },
165
+ {
166
+ title: 'Betriebssystem Tastenwiederholung',
167
+ description: 'Erscheint beim Halten einer Taste und wiederholt sich normalerweise in einem regelmäßigen Rhythmus, der vom Betriebssystem festgelegt wird.',
168
+ points: ['Zwischen Antippern vollständig loslassen.', 'Tastaturwiederholungseinstellungen separat prüfen.'],
169
+ },
170
+ ],
171
+ },
172
+ {
173
+ type: 'title',
174
+ text: 'Was zu tun ist, wenn eine Taste durchfällt',
175
+ level: 3,
176
+ },
177
+ {
178
+ type: 'list',
179
+ items: [
180
+ 'Speichern Sie ein CSV-Protokoll, bevor Sie etwas ändern, damit Sie Vorher-Nachher-Ergebnisse vergleichen können.',
181
+ 'Entfernen Sie die Tastenkappe und prüfen Sie auf Schmutz, Flüssigkeitsrückstände oder einen Stößel, der nicht gleichmäßig zurückkehrt.',
182
+ 'Bei Hot-Swap-Tastaturen den Schalter neu einsetzen oder austauschen und dieselbe Tastenposition erneut testen.',
183
+ 'Bei gelöteten Tastaturen die Firmware-Entprelloptionen vergleichen, bevor Sie von einer Reparatur der Platine ausgehen.',
184
+ 'Ein anderes Kabel und einen anderen USB-Anschluss ausprobieren, wenn mehrere nicht verwandte Tasten unmögliche Deltas zeigen.',
185
+ 'Für den Garantiesupport: betroffene Taste, wiederholte Delta-Werte, Tastaturmodell, Firmware-Version und ob der Fehler dem Schalter oder dem PCB-Sockel folgt, angeben.',
186
+ ],
187
+ },
188
+ {
189
+ type: 'summary',
190
+ title: 'Schnelle Regel',
191
+ items: [
192
+ 'Eine einzelne rote Zeile ist ein Hinweis, kein Urteil.',
193
+ 'Wiederholte rote Zeilen unter 30 ms auf derselben physischen Taste sind starke Hinweise auf Tastatur-Chattern.',
194
+ 'Verwenden Sie bewusst einzelne Antipper und vergleichen Sie den verdächtigen Schalter mit einer benachbarten gesunden Taste, bevor Sie Hardware austauschen.',
195
+ ],
196
+ },
197
+ ],
198
+ ui: {
199
+ statusIdle: 'Taste drücken',
200
+ statusListening: 'Tasten-Deltas messen',
201
+ statusChatter: 'Chattern erkannt',
202
+ totalPresses: 'Gesamte Drücke',
203
+ chatterEvents: 'Chatter-Ereignisse',
204
+ worstDelta: 'Schlimmstes Delta',
205
+ watchWindow: 'Zeilen behalten',
206
+ keyColumn: 'Taste',
207
+ deltaColumn: 'Delta',
208
+ verdictColumn: 'Urteil',
209
+ timeColumn: 'Zeit',
210
+ normal: 'Normal',
211
+ suspect: 'Verdächtig',
212
+ chatter: 'Chattern',
213
+ waiting: 'Warten',
214
+ clear: 'Protokoll löschen',
215
+ exportLog: 'CSV exportieren',
216
+ hint: 'Das Protokoll behält die letzten 80 Zeilen, damit lange Sitzungen schnell bleiben. Tastenwiederholung bei gehaltener Taste wird ignoriert; rote Zeilen stammen von getrennten Drücken, die zu kurz aufeinander folgten.',
217
+ captureNotice: 'Kein Startknopf. Tippen Sie eine verdächtige Taste einmal an und beobachten Sie das Delta von ihrem vorherigen Druck.',
218
+ keyboardAriaLabel: 'Aktuelle Tastenaktivität',
219
+ logAriaLabel: 'Tastatur-Chatter-Ereignisprotokoll',
220
+ escapeKey: 'Esc',
221
+ backspaceKey: 'Rück',
222
+ tabKey: 'Tab',
223
+ enterKey: 'Enter',
224
+ capsLockKey: 'Fest',
225
+ shiftKey: 'Umschalt',
226
+ controlKey: 'Strg',
227
+ metaKey: 'Meta',
228
+ altKey: 'Alt',
229
+ spaceKey: 'Leer',
230
+ csvHeader: 'taste,code,delta_ms,schwere,zeit',
231
+ },
232
+ };
@@ -0,0 +1,232 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { KeyboardChatterTestUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
5
+
6
+ const slug = 'keyboard-chatter-test';
7
+ const title = 'Keyboard Chatter Test';
8
+ const description = 'Detect mechanical keyboard chattering, double typing, and faulty switch bounce by checking how quickly the same key appears twice.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'What is keyboard chatter?',
13
+ answer: 'Keyboard chatter is a hardware fault where one physical press is registered as multiple presses. It is common on dirty, worn, oxidized, or poorly debounced mechanical switches.',
14
+ },
15
+ {
16
+ question: 'How does this keyboard chatter test work?',
17
+ answer: 'Press the same suspect key slowly, one tap at a time. If the log shows repeated presses only a few milliseconds apart, the switch may be bouncing and producing double letters.',
18
+ },
19
+ {
20
+ question: 'What delta means my keyboard is double typing?',
21
+ answer: 'A repeated press below 30 ms is strongly suspicious for chatter. Repeats from 30 to 50 ms deserve attention. Normal intentional repeated taps are usually above 50 ms for most users.',
22
+ },
23
+ {
24
+ question: 'Why does the first press show no delta?',
25
+ answer: 'A delta needs a previous press of the same key. The first press establishes the baseline, and later presses show the time gap in milliseconds.',
26
+ },
27
+ {
28
+ question: 'Can software fix keyboard chattering?',
29
+ answer: 'Debounce software can hide some symptoms, but it does not repair the switch. Cleaning, reseating hot-swap switches, replacing the switch, or repairing the keyboard PCB may be needed.',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'Open the tool and press keys normally',
36
+ text: 'There is no start button. Click into the tool if needed, then press the key that has been typing twice.',
37
+ },
38
+ {
39
+ name: 'Tap the suspect key once at a time',
40
+ text: 'Press the key that double types. If one physical press creates several log rows with tiny deltas, the switch is likely chattering.',
41
+ },
42
+ {
43
+ name: 'Read the color code',
44
+ text: 'Green means normal above 50 ms, yellow means suspicious from 30 to 50 ms, and red means chatter detected below 30 ms.',
45
+ },
46
+ {
47
+ name: 'Export the log if needed',
48
+ text: 'Use the download button to save a CSV log that can help compare keys or document an intermittent fault.',
49
+ },
50
+ ];
51
+
52
+ const faqSchema: WithContext<FAQPage> = {
53
+ '@context': 'https://schema.org',
54
+ '@type': 'FAQPage',
55
+ mainEntity: faqData.map((item) => ({
56
+ '@type': 'Question',
57
+ name: item.question,
58
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
59
+ })),
60
+ };
61
+
62
+ const howToSchema: WithContext<HowTo> = {
63
+ '@context': 'https://schema.org',
64
+ '@type': 'HowTo',
65
+ name: title,
66
+ description,
67
+ step: howToData.map((step, i) => ({
68
+ '@type': 'HowToStep',
69
+ position: i + 1,
70
+ name: step.name,
71
+ text: step.text,
72
+ })),
73
+ };
74
+
75
+ const appSchema: WithContext<SoftwareApplication> = {
76
+ '@context': 'https://schema.org',
77
+ '@type': 'SoftwareApplication',
78
+ name: title,
79
+ description,
80
+ applicationCategory: 'UtilityApplication',
81
+ operatingSystem: 'All',
82
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
83
+ inLanguage: 'en',
84
+ };
85
+
86
+ export const content: ToolLocaleContent<KeyboardChatterTestUI> = {
87
+ slug,
88
+ title,
89
+ description,
90
+ faq: faqData,
91
+ bibliography,
92
+ howTo: howToData,
93
+ schemas: [faqSchema, howToSchema, appSchema],
94
+ seo: [
95
+ {
96
+ type: 'title',
97
+ text: 'Mechanical Keyboard Double Typing Test',
98
+ level: 2,
99
+ },
100
+ {
101
+ type: 'paragraph',
102
+ html: 'This keyboard chatter test helps diagnose a mechanical keyboard that types two letters from one press, misses clean releases, or produces repeated characters without you intentionally tapping twice. Use it before cleaning switches, changing firmware debounce settings, opening a warranty claim, or replacing a hot-swap switch.',
103
+ },
104
+ {
105
+ type: 'diagnostic',
106
+ variant: 'info',
107
+ title: 'How to read the result',
108
+ badge: 'Delta thresholds',
109
+ html: '<p><strong>Normal</strong> means the repeat was above 50 ms and is usually intentional. <strong>Suspicious</strong> means 30-50 ms and should be retested on the same key. <strong>Chatter detected</strong> means below 30 ms, which is very likely one physical press bouncing into multiple electrical contacts.</p>',
110
+ },
111
+ {
112
+ type: 'title',
113
+ text: 'Why Mechanical Switches Chatter',
114
+ level: 3,
115
+ },
116
+ {
117
+ type: 'paragraph',
118
+ html: 'A mechanical switch does not close as a perfectly clean digital signal. The metal contacts can bounce for a few milliseconds before settling. Keyboard firmware normally filters that bounce with a debounce window. Chattering happens when the contact is dirty, worn, oxidized, loose, cracked, or poorly tuned enough that the keyboard reports extra presses after the debounce filter should have handled them.',
119
+ },
120
+ {
121
+ type: 'table',
122
+ headers: ['Symptom', 'Likely cause', 'What to try first'],
123
+ rows: [
124
+ ['One key types the same letter twice', 'Dirty or worn switch contact', 'Remove the keycap, blow dust out, and test again before replacing the switch.'],
125
+ ['Several hot-swap keys chatter after a build', 'Switch pins not seated cleanly', 'Pull and reseat the switch, checking for bent pins or a loose socket.'],
126
+ ['Only happens after spills or humidity', 'Oxidation or residue on contacts', 'Disconnect the keyboard and clean according to the manufacturer guidance.'],
127
+ ['Many keys show tiny deltas', 'Firmware debounce too low or scan issue', 'Compare on another USB port and review firmware debounce settings if available.'],
128
+ ],
129
+ },
130
+ {
131
+ type: 'title',
132
+ text: 'Testing Method That Reduces False Positives',
133
+ level: 3,
134
+ },
135
+ {
136
+ type: 'list',
137
+ items: [
138
+ 'Test one suspect key at a time instead of typing full sentences.',
139
+ 'Press the key once, fully release it, and wait a moment before the next press.',
140
+ 'Compare the suspect key with a nearby key that feels healthy.',
141
+ 'Ignore the first row for a key because it has no previous press to compare against.',
142
+ 'If the same key repeatedly shows red rows below 30 ms from single taps, treat it as a hardware fault.',
143
+ 'If only yellow rows appear, repeat the test slower and check whether your tapping rhythm is causing the short interval.',
144
+ ],
145
+ },
146
+ {
147
+ type: 'title',
148
+ text: 'Chatter vs Intentional Fast Typing',
149
+ level: 3,
150
+ },
151
+ {
152
+ type: 'comparative',
153
+ columns: 3,
154
+ items: [
155
+ {
156
+ title: 'Chatter',
157
+ description: 'Clustered on one key, often below 30 ms, and appears when you intended one press.',
158
+ points: ['Inspect the switch or socket.', 'Compare with a nearby healthy key.'],
159
+ },
160
+ {
161
+ title: 'Fast typing',
162
+ description: 'Affects many keys, follows your rhythm, and tends to sit above 50 ms between repeated presses of the same key.',
163
+ points: ['Usually normal use.', 'Retest with slower single taps.'],
164
+ },
165
+ {
166
+ title: 'OS key repeat',
167
+ description: 'Appears when holding a key down and usually repeats at a regular rhythm set by your operating system.',
168
+ points: ['Release fully between taps.', 'Check keyboard repeat settings separately.'],
169
+ },
170
+ ],
171
+ },
172
+ {
173
+ type: 'title',
174
+ text: 'What to Do When a Key Fails',
175
+ level: 3,
176
+ },
177
+ {
178
+ type: 'list',
179
+ items: [
180
+ 'Save a CSV log before changing anything so you can compare before and after results.',
181
+ 'Remove the keycap and inspect for dirt, liquid residue, or a stem that does not return smoothly.',
182
+ 'For hot-swap keyboards, reseat or replace the switch and test the same key position again.',
183
+ 'For soldered keyboards, compare firmware debounce options before assuming the PCB needs repair.',
184
+ 'Try another cable and USB port if multiple unrelated keys show impossible deltas.',
185
+ 'For warranty support, include the affected key, repeated delta values, keyboard model, firmware version, and whether the fault follows the switch or the PCB socket.',
186
+ ],
187
+ },
188
+ {
189
+ type: 'summary',
190
+ title: 'Fast rule',
191
+ items: [
192
+ 'A single red row is a clue, not a verdict.',
193
+ 'Repeated red rows below 30 ms on the same physical key are strong evidence of keyboard chatter.',
194
+ 'Use deliberate single taps and compare the suspect switch with a nearby healthy key before replacing hardware.',
195
+ ],
196
+ },
197
+ ],
198
+ ui: {
199
+ statusIdle: 'Press any key',
200
+ statusListening: 'Measuring key deltas',
201
+ statusChatter: 'Chatter detected',
202
+ totalPresses: 'Total presses',
203
+ chatterEvents: 'Chatter events',
204
+ worstDelta: 'Worst delta',
205
+ watchWindow: 'Rows kept',
206
+ keyColumn: 'Key',
207
+ deltaColumn: 'Delta',
208
+ verdictColumn: 'Verdict',
209
+ timeColumn: 'Time',
210
+ normal: 'Normal',
211
+ suspect: 'Suspicious',
212
+ chatter: 'Chatter',
213
+ waiting: 'Waiting',
214
+ clear: 'Clear log',
215
+ exportLog: 'Export CSV',
216
+ hint: 'The log keeps the most recent 80 rows so long sessions stay fast. Held-key repeat is ignored; red rows come from separate presses that happened too close together.',
217
+ captureNotice: 'No start button. Tap a suspect key once and watch the delta from its previous press.',
218
+ keyboardAriaLabel: 'Recent key activity',
219
+ logAriaLabel: 'Keyboard chatter event log',
220
+ escapeKey: 'Esc',
221
+ backspaceKey: 'Back',
222
+ tabKey: 'Tab',
223
+ enterKey: 'Enter',
224
+ capsLockKey: 'Caps',
225
+ shiftKey: 'Shift',
226
+ controlKey: 'Ctrl',
227
+ metaKey: 'Meta',
228
+ altKey: 'Alt',
229
+ spaceKey: 'Space',
230
+ csvHeader: 'key,code,delta_ms,severity,time',
231
+ },
232
+ };