@jjlmoya/utils-hardware 1.24.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 (55) hide show
  1. package/package.json +2 -1
  2. package/src/category/index.ts +3 -1
  3. package/src/entries.ts +7 -1
  4. package/src/index.ts +2 -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/webBluetoothBleScanner/bibliography.astro +14 -0
  32. package/src/tool/webBluetoothBleScanner/bibliography.ts +16 -0
  33. package/src/tool/webBluetoothBleScanner/component.astro +339 -0
  34. package/src/tool/webBluetoothBleScanner/entry.ts +29 -0
  35. package/src/tool/webBluetoothBleScanner/i18n/de.ts +233 -0
  36. package/src/tool/webBluetoothBleScanner/i18n/en.ts +233 -0
  37. package/src/tool/webBluetoothBleScanner/i18n/es.ts +233 -0
  38. package/src/tool/webBluetoothBleScanner/i18n/fr.ts +233 -0
  39. package/src/tool/webBluetoothBleScanner/i18n/id.ts +233 -0
  40. package/src/tool/webBluetoothBleScanner/i18n/it.ts +233 -0
  41. package/src/tool/webBluetoothBleScanner/i18n/ja.ts +233 -0
  42. package/src/tool/webBluetoothBleScanner/i18n/ko.ts +233 -0
  43. package/src/tool/webBluetoothBleScanner/i18n/nl.ts +233 -0
  44. package/src/tool/webBluetoothBleScanner/i18n/pl.ts +233 -0
  45. package/src/tool/webBluetoothBleScanner/i18n/pt.ts +233 -0
  46. package/src/tool/webBluetoothBleScanner/i18n/ru.ts +233 -0
  47. package/src/tool/webBluetoothBleScanner/i18n/sv.ts +233 -0
  48. package/src/tool/webBluetoothBleScanner/i18n/tr.ts +233 -0
  49. package/src/tool/webBluetoothBleScanner/i18n/zh.ts +233 -0
  50. package/src/tool/webBluetoothBleScanner/index.ts +11 -0
  51. package/src/tool/webBluetoothBleScanner/logic.ts +79 -0
  52. package/src/tool/webBluetoothBleScanner/seo.astro +15 -0
  53. package/src/tool/webBluetoothBleScanner/ui.ts +41 -0
  54. package/src/tool/webBluetoothBleScanner/web-bluetooth-ble-scanner.css +406 -0
  55. package/src/tools.ts +3 -1
@@ -0,0 +1,406 @@
1
+ .wbb-root {
2
+ --wbb-ink: #132034;
3
+ --wbb-muted: #64748b;
4
+ --wbb-panel: #fff;
5
+ --wbb-soft: #eff7ff;
6
+ --wbb-line: #cfe0f3;
7
+ --wbb-blue: #1267d8;
8
+ --wbb-cyan: #00a6b7;
9
+ --wbb-green: #14966f;
10
+ --wbb-warn: #b45309;
11
+ --wbb-error: #c2410c;
12
+ --wbb-shadow: rgb(19, 32, 52, 0.12);
13
+
14
+ color: var(--wbb-ink);
15
+ }
16
+
17
+ .theme-dark .wbb-root {
18
+ --wbb-ink: #f8fafc;
19
+ --wbb-muted: #a9b7ca;
20
+ --wbb-panel: #151b25;
21
+ --wbb-soft: #0d1520;
22
+ --wbb-line: #304055;
23
+ --wbb-blue: #68a6ff;
24
+ --wbb-cyan: #3dd9e8;
25
+ --wbb-green: #57d9ad;
26
+ --wbb-warn: #f6bd60;
27
+ --wbb-error: #fb8a5f;
28
+ --wbb-shadow: rgb(0, 0, 0, 0.32);
29
+ }
30
+
31
+ .wbb-shell {
32
+ display: grid;
33
+ gap: 0.75rem;
34
+ width: 100%;
35
+ padding: 0.75rem;
36
+ border: 1px solid var(--wbb-line);
37
+ border-radius: 8px;
38
+ background:
39
+ linear-gradient(135deg, color-mix(in srgb, var(--wbb-blue) 10%, transparent), transparent 42%),
40
+ var(--wbb-panel);
41
+ box-shadow: 0 1rem 2.6rem var(--wbb-shadow);
42
+ }
43
+
44
+ .wbb-radar {
45
+ position: relative;
46
+ display: grid;
47
+ place-items: center;
48
+ min-height: 17rem;
49
+ border: 1px solid var(--wbb-line);
50
+ border-radius: 8px;
51
+ background:
52
+ radial-gradient(circle at center, color-mix(in srgb, var(--wbb-cyan) 16%, transparent) 0 12%, transparent 13%),
53
+ repeating-radial-gradient(circle at center, transparent 0 2.2rem, var(--wbb-line) 2.25rem 2.32rem),
54
+ linear-gradient(180deg, var(--wbb-soft), var(--wbb-panel));
55
+ overflow: hidden;
56
+ }
57
+
58
+ .wbb-radar::before,
59
+ .wbb-radar::after {
60
+ position: absolute;
61
+ inset: 50% auto auto 50%;
62
+ width: 70%;
63
+ height: 0.16rem;
64
+ background: linear-gradient(90deg, transparent, var(--wbb-cyan));
65
+ content: "";
66
+ transform-origin: left center;
67
+ }
68
+
69
+ .wbb-radar::before {
70
+ animation: wbb-sweep 4s linear infinite;
71
+ }
72
+
73
+ .wbb-radar::after {
74
+ opacity: 0.28;
75
+ transform: rotate(90deg);
76
+ }
77
+
78
+ .wbb-radar span {
79
+ position: relative;
80
+ z-index: 2;
81
+ display: grid;
82
+ place-items: center;
83
+ width: 6.25rem;
84
+ aspect-ratio: 1;
85
+ border: 0.5rem solid var(--wbb-panel);
86
+ border-radius: 50%;
87
+ background: linear-gradient(135deg, var(--wbb-blue), var(--wbb-cyan));
88
+ box-shadow: 0 1rem 2rem var(--wbb-shadow);
89
+ }
90
+
91
+ .wbb-radar span svg {
92
+ width: 3.25rem;
93
+ height: 3.25rem;
94
+ color: #fff;
95
+ }
96
+
97
+ .wbb-radar i,
98
+ .wbb-radar b,
99
+ .wbb-radar em {
100
+ position: absolute;
101
+ width: 0.86rem;
102
+ aspect-ratio: 1;
103
+ border-radius: 50%;
104
+ background: var(--wbb-green);
105
+ box-shadow: 0 0 0 0.45rem color-mix(in srgb, var(--wbb-green) 18%, transparent);
106
+ }
107
+
108
+ .wbb-radar i {
109
+ left: 18%;
110
+ top: 28%;
111
+ }
112
+
113
+ .wbb-radar b {
114
+ right: 22%;
115
+ top: 20%;
116
+ }
117
+
118
+ .wbb-radar em {
119
+ right: 18%;
120
+ bottom: 24%;
121
+ }
122
+
123
+ .wbb-console {
124
+ display: grid;
125
+ gap: 0.7rem;
126
+ align-content: start;
127
+ }
128
+
129
+ .wbb-status,
130
+ .wbb-privacy,
131
+ .wbb-hint,
132
+ .wbb-card {
133
+ border: 1px solid var(--wbb-line);
134
+ border-radius: 8px;
135
+ background: var(--wbb-panel);
136
+ }
137
+
138
+ .wbb-status {
139
+ display: grid;
140
+ grid-template-columns: auto minmax(0, 1fr);
141
+ align-items: center;
142
+ gap: 0.55rem;
143
+ min-height: 3rem;
144
+ padding: 0.7rem;
145
+ }
146
+
147
+ .wbb-status span {
148
+ width: 0.72rem;
149
+ aspect-ratio: 1;
150
+ border-radius: 50%;
151
+ background: var(--wbb-muted);
152
+ box-shadow: 0 0 0 0.28rem color-mix(in srgb, var(--wbb-muted) 18%, transparent);
153
+ }
154
+
155
+ .wbb-status span[data-state="busy"] {
156
+ background: var(--wbb-blue);
157
+ }
158
+
159
+ .wbb-status span[data-state="ok"] {
160
+ background: var(--wbb-green);
161
+ }
162
+
163
+ .wbb-status span[data-state="warn"] {
164
+ background: var(--wbb-warn);
165
+ }
166
+
167
+ .wbb-status span[data-state="error"] {
168
+ background: var(--wbb-error);
169
+ }
170
+
171
+ .wbb-status strong {
172
+ min-width: 0;
173
+ font-size: 0.9rem;
174
+ font-weight: 900;
175
+ }
176
+
177
+ .wbb-scan {
178
+ display: inline-grid;
179
+ grid-template-columns: auto minmax(0, auto);
180
+ place-content: center;
181
+ align-items: center;
182
+ gap: 0.5rem;
183
+ min-height: 4rem;
184
+ width: 100%;
185
+ border: 0;
186
+ border-radius: 8px;
187
+ background: linear-gradient(135deg, var(--wbb-blue), var(--wbb-cyan));
188
+ color: #fff;
189
+ font: inherit;
190
+ font-size: 1rem;
191
+ font-weight: 950;
192
+ cursor: pointer;
193
+ box-shadow: 0 0.9rem 1.6rem color-mix(in srgb, var(--wbb-blue) 24%, transparent);
194
+ transition: transform 160ms ease, filter 160ms ease;
195
+ }
196
+
197
+ .wbb-scan svg {
198
+ width: 1.25rem;
199
+ height: 1.25rem;
200
+ }
201
+
202
+ .wbb-scan:hover {
203
+ transform: translateY(-1px);
204
+ }
205
+
206
+ .wbb-scan:disabled {
207
+ cursor: wait;
208
+ filter: saturate(0.65);
209
+ }
210
+
211
+ .wbb-privacy {
212
+ display: grid;
213
+ grid-template-columns: auto minmax(0, 1fr);
214
+ gap: 0.65rem;
215
+ padding: 0.8rem;
216
+ background: color-mix(in srgb, var(--wbb-green) 9%, var(--wbb-panel));
217
+ }
218
+
219
+ .wbb-privacy svg {
220
+ width: 1.35rem;
221
+ height: 1.35rem;
222
+ color: var(--wbb-green);
223
+ }
224
+
225
+ .wbb-privacy span {
226
+ display: grid;
227
+ gap: 0.18rem;
228
+ min-width: 0;
229
+ }
230
+
231
+ .wbb-privacy strong {
232
+ font-size: 0.86rem;
233
+ font-weight: 950;
234
+ }
235
+
236
+ .wbb-privacy small,
237
+ .wbb-hint,
238
+ .wbb-card p {
239
+ color: var(--wbb-muted);
240
+ font-size: 0.78rem;
241
+ font-weight: 750;
242
+ line-height: 1.35;
243
+ }
244
+
245
+ .wbb-device-list {
246
+ display: grid;
247
+ gap: 0.65rem;
248
+ }
249
+
250
+ .wbb-card {
251
+ display: grid;
252
+ gap: 0.7rem;
253
+ padding: 0.75rem;
254
+ }
255
+
256
+ .wbb-card-head {
257
+ display: grid;
258
+ gap: 0.18rem;
259
+ }
260
+
261
+ .wbb-card-head span,
262
+ .wbb-card dt {
263
+ color: var(--wbb-muted);
264
+ font-size: 0.68rem;
265
+ font-weight: 900;
266
+ text-transform: uppercase;
267
+ }
268
+
269
+ .wbb-card-head strong {
270
+ font-size: 1.15rem;
271
+ font-weight: 950;
272
+ line-height: 1.1;
273
+ }
274
+
275
+ .wbb-card dl {
276
+ display: grid;
277
+ gap: 0.45rem;
278
+ margin: 0;
279
+ }
280
+
281
+ .wbb-card dl div {
282
+ display: grid;
283
+ gap: 0.18rem;
284
+ min-width: 0;
285
+ padding: 0.55rem;
286
+ border-radius: 8px;
287
+ background: var(--wbb-soft);
288
+ }
289
+
290
+ .wbb-card dd {
291
+ min-width: 0;
292
+ margin: 0;
293
+ color: var(--wbb-ink);
294
+ font-weight: 850;
295
+ }
296
+
297
+ .wbb-card code {
298
+ display: block;
299
+ max-width: 100%;
300
+ color: inherit;
301
+ font-size: 0.72rem;
302
+ overflow-wrap: anywhere;
303
+ }
304
+
305
+ .wbb-card ul {
306
+ display: grid;
307
+ gap: 0.45rem;
308
+ margin: 0;
309
+ padding: 0;
310
+ list-style: none;
311
+ }
312
+
313
+ .wbb-card li {
314
+ display: grid;
315
+ gap: 0.2rem;
316
+ padding: 0.6rem;
317
+ border: 1px solid var(--wbb-line);
318
+ border-radius: 8px;
319
+ background: var(--wbb-soft);
320
+ }
321
+
322
+ .wbb-card li span {
323
+ font-size: 0.83rem;
324
+ font-weight: 950;
325
+ }
326
+
327
+ .wbb-card .wbb-empty {
328
+ color: var(--wbb-muted);
329
+ font-weight: 800;
330
+ }
331
+
332
+ .wbb-card p,
333
+ .wbb-hint {
334
+ margin: 0;
335
+ }
336
+
337
+ .wbb-card button {
338
+ min-height: 2.7rem;
339
+ border: 1px solid var(--wbb-line);
340
+ border-radius: 8px;
341
+ background: var(--wbb-ink);
342
+ color: var(--wbb-panel);
343
+ font: inherit;
344
+ font-weight: 900;
345
+ cursor: pointer;
346
+ }
347
+
348
+ .wbb-warning {
349
+ background: color-mix(in srgb, var(--wbb-warn) 10%, var(--wbb-panel));
350
+ }
351
+
352
+ .wbb-warning strong {
353
+ color: var(--wbb-warn);
354
+ }
355
+
356
+ .wbb-hint {
357
+ padding: 0.75rem;
358
+ background: var(--wbb-soft);
359
+ }
360
+
361
+ @keyframes wbb-sweep {
362
+ to {
363
+ transform: rotate(360deg);
364
+ }
365
+ }
366
+
367
+ @media (min-width: 860px) {
368
+ .wbb-shell {
369
+ grid-template-columns: minmax(0, 1.15fr) minmax(20rem, 0.85fr);
370
+ align-items: stretch;
371
+ }
372
+
373
+ .wbb-radar {
374
+ min-height: 28rem;
375
+ }
376
+
377
+ .wbb-card dl {
378
+ grid-template-columns: minmax(0, 1.2fr) minmax(0, 0.8fr);
379
+ }
380
+ }
381
+
382
+ @media (max-width: 560px) {
383
+ .wbb-shell {
384
+ padding: 0.55rem;
385
+ }
386
+
387
+ .wbb-radar {
388
+ min-height: 13rem;
389
+ }
390
+
391
+ .wbb-radar span {
392
+ width: 5rem;
393
+ }
394
+
395
+ .wbb-scan {
396
+ min-height: 3.5rem;
397
+ }
398
+ }
399
+
400
+ @media (prefers-reduced-motion: reduce) {
401
+ .wbb-radar::before,
402
+ .wbb-scan {
403
+ animation: none;
404
+ transition: none;
405
+ }
406
+ }
package/src/tools.ts CHANGED
@@ -14,5 +14,7 @@ import { MOUSE_SCROLL_TEST_TOOL } from './tool/mouseScrollTest/index';
14
14
  import { MONITOR_GHOSTING_TEST_TOOL } from './tool/monitorGhostingTest/index';
15
15
  import { UPS_RUNTIME_CALCULATOR_TOOL } from './tool/upsRuntimeCalculator/index';
16
16
  import { STEREO_AUDIO_TEST_TOOL } from './tool/stereoAudioTest/index';
17
+ import { WEB_BLUETOOTH_BLE_SCANNER_TOOL } from './tool/webBluetoothBleScanner/index';
18
+ import { KEYBOARD_CHATTER_TEST_TOOL } from './tool/keyboardChatterTest/index';
17
19
 
18
- export const ALL_TOOLS: ToolDefinition[] = [PIXELES_PANTALLA_TOOL, TEST_TECLADO_TOOL, TEST_MANDO_TOOL, PROBADOR_VIBRACION_MANDO_TOOL, TEST_RATON_TOOL, MOUSE_DOUBLE_CLICK_TEST_TOOL, MOUSE_SCROLL_TEST_TOOL, ESTIMADOR_SALUD_BATERIA_TOOL, TONE_GENERATOR_TOOL, REFRESH_RATE_DETECTOR_TOOL, MONITOR_GHOSTING_TEST_TOOL, SPECTRUM_CANVAS_TOOL, UPS_RUNTIME_CALCULATOR_TOOL, STEREO_AUDIO_TEST_TOOL];
20
+ export const ALL_TOOLS: ToolDefinition[] = [PIXELES_PANTALLA_TOOL, TEST_TECLADO_TOOL, KEYBOARD_CHATTER_TEST_TOOL, TEST_MANDO_TOOL, PROBADOR_VIBRACION_MANDO_TOOL, TEST_RATON_TOOL, MOUSE_DOUBLE_CLICK_TEST_TOOL, MOUSE_SCROLL_TEST_TOOL, ESTIMADOR_SALUD_BATERIA_TOOL, TONE_GENERATOR_TOOL, REFRESH_RATE_DETECTOR_TOOL, MONITOR_GHOSTING_TEST_TOOL, SPECTRUM_CANVAS_TOOL, UPS_RUNTIME_CALCULATOR_TOOL, STEREO_AUDIO_TEST_TOOL, WEB_BLUETOOTH_BLE_SCANNER_TOOL];