@jjlmoya/utils-hardware 1.21.0 → 1.22.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 (31) 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/tests/locale_completeness.test.ts +2 -2
  6. package/src/tests/tool_validation.test.ts +2 -2
  7. package/src/tool/mouseScrollTest/bibliography.astro +14 -0
  8. package/src/tool/mouseScrollTest/bibliography.ts +16 -0
  9. package/src/tool/mouseScrollTest/component.astro +150 -0
  10. package/src/tool/mouseScrollTest/entry.ts +29 -0
  11. package/src/tool/mouseScrollTest/i18n/de.ts +248 -0
  12. package/src/tool/mouseScrollTest/i18n/en.ts +253 -0
  13. package/src/tool/mouseScrollTest/i18n/es.ts +248 -0
  14. package/src/tool/mouseScrollTest/i18n/fr.ts +248 -0
  15. package/src/tool/mouseScrollTest/i18n/id.ts +248 -0
  16. package/src/tool/mouseScrollTest/i18n/it.ts +248 -0
  17. package/src/tool/mouseScrollTest/i18n/ja.ts +248 -0
  18. package/src/tool/mouseScrollTest/i18n/ko.ts +248 -0
  19. package/src/tool/mouseScrollTest/i18n/nl.ts +248 -0
  20. package/src/tool/mouseScrollTest/i18n/pl.ts +248 -0
  21. package/src/tool/mouseScrollTest/i18n/pt.ts +248 -0
  22. package/src/tool/mouseScrollTest/i18n/ru.ts +248 -0
  23. package/src/tool/mouseScrollTest/i18n/sv.ts +248 -0
  24. package/src/tool/mouseScrollTest/i18n/tr.ts +248 -0
  25. package/src/tool/mouseScrollTest/i18n/zh.ts +248 -0
  26. package/src/tool/mouseScrollTest/index.ts +9 -0
  27. package/src/tool/mouseScrollTest/logic.ts +277 -0
  28. package/src/tool/mouseScrollTest/mouse-scroll-test.css +610 -0
  29. package/src/tool/mouseScrollTest/seo.astro +15 -0
  30. package/src/tool/mouseScrollTest/ui.ts +34 -0
  31. package/src/tools.ts +2 -1
@@ -0,0 +1,610 @@
1
+ .mst-root {
2
+ width: 100%;
3
+ }
4
+
5
+ .mst-card {
6
+ display: grid;
7
+ grid-template-columns: minmax(0, 1.05fr) minmax(280px, 0.95fr);
8
+ gap: 1rem;
9
+ width: 100%;
10
+ padding: clamp(0.9rem, 3vw, 1.25rem);
11
+ border: 1px solid rgba(21, 94, 117, 0.22);
12
+ border-radius: 8px;
13
+ background:
14
+ linear-gradient(135deg, rgba(236, 253, 245, 0.92), rgba(240, 249, 255, 0.9)),
15
+ repeating-linear-gradient(90deg, rgba(14, 116, 144, 0.08) 0 1px, transparent 1px 22px);
16
+ box-shadow: 0 20px 60px rgba(15, 23, 42, 0.12);
17
+ color: #102026;
18
+ }
19
+
20
+ .theme-dark .mst-card {
21
+ border-color: rgba(94, 234, 212, 0.28);
22
+ background:
23
+ linear-gradient(135deg, rgba(8, 47, 73, 0.95), rgba(20, 83, 45, 0.72)),
24
+ repeating-linear-gradient(90deg, rgba(125, 211, 252, 0.08) 0 1px, transparent 1px 22px);
25
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
26
+ color: #ecfeff;
27
+ }
28
+
29
+ .mst-capture {
30
+ position: relative;
31
+ display: grid;
32
+ min-height: 430px;
33
+ overflow: hidden;
34
+ padding: clamp(1rem, 4vw, 1.5rem);
35
+ border: 1px solid rgba(8, 145, 178, 0.28);
36
+ border-radius: 8px;
37
+ background:
38
+ radial-gradient(circle at 50% 48%, rgba(20, 184, 166, 0.22), transparent 34%),
39
+ linear-gradient(160deg, rgba(255, 255, 255, 0.78), rgba(224, 242, 254, 0.88));
40
+ outline: none;
41
+ touch-action: none;
42
+ }
43
+
44
+ .mst-capture::after {
45
+ position: absolute;
46
+ inset: 0;
47
+ border: 3px solid rgba(202, 138, 4, 0.7);
48
+ border-radius: inherit;
49
+ pointer-events: none;
50
+ content: "";
51
+ opacity: 0.95;
52
+ animation: mst-locked-pulse 1.35s ease-in-out infinite;
53
+ }
54
+
55
+ .mst-capture[data-capture-state="active"]::after {
56
+ border-color: rgba(16, 185, 129, 0.9);
57
+ animation: mst-active-scan 1.4s linear infinite;
58
+ }
59
+
60
+ .theme-dark .mst-capture {
61
+ border-color: rgba(125, 211, 252, 0.22);
62
+ background:
63
+ radial-gradient(circle at 50% 48%, rgba(45, 212, 191, 0.18), transparent 34%),
64
+ linear-gradient(160deg, rgba(15, 23, 42, 0.86), rgba(12, 74, 110, 0.72));
65
+ }
66
+
67
+ .mst-focus-lock {
68
+ position: absolute;
69
+ inset: 0;
70
+ z-index: 4;
71
+ display: grid;
72
+ gap: 0.75rem;
73
+ align-content: center;
74
+ justify-items: center;
75
+ padding: 1.25rem;
76
+ border-radius: inherit;
77
+ background: rgba(2, 6, 23, 0.72);
78
+ text-align: center;
79
+ pointer-events: none;
80
+ backdrop-filter: blur(3px);
81
+ }
82
+
83
+ .mst-capture[data-capture-state="active"] .mst-focus-lock,
84
+ .mst-capture[data-capture-state="locked"] .mst-capture-copy {
85
+ display: none;
86
+ }
87
+
88
+ .mst-lock-badge {
89
+ display: inline-flex;
90
+ align-items: center;
91
+ gap: 0.45rem;
92
+ padding: 0.5rem 0.7rem;
93
+ border-radius: 999px;
94
+ font-size: 0.82rem;
95
+ font-weight: 900;
96
+ letter-spacing: 0.04em;
97
+ text-transform: uppercase;
98
+ }
99
+
100
+ .mst-lock-badge svg {
101
+ width: 1rem;
102
+ height: 1rem;
103
+ }
104
+
105
+ .mst-lock-badge-locked {
106
+ border: 1px solid rgba(250, 204, 21, 0.4);
107
+ background: rgba(250, 204, 21, 0.16);
108
+ color: #fef3c7;
109
+ }
110
+
111
+ .mst-lock-text {
112
+ max-width: 28rem;
113
+ margin: 0;
114
+ color: #fff;
115
+ font-size: clamp(1.35rem, 5vw, 2.3rem);
116
+ font-weight: 900;
117
+ line-height: 1.08;
118
+ text-wrap: balance;
119
+ }
120
+
121
+ .theme-dark .mst-lock-badge-locked {
122
+ border-color: rgba(250, 204, 21, 0.3);
123
+ background: rgba(250, 204, 21, 0.16);
124
+ color: #fef3c7;
125
+ }
126
+
127
+ .mst-capture:focus-visible {
128
+ box-shadow: 0 0 0 3px rgba(14, 165, 233, 0.34);
129
+ }
130
+
131
+ .mst-scope,
132
+ .mst-axis-grid {
133
+ position: absolute;
134
+ inset: 1rem;
135
+ display: grid;
136
+ place-items: center;
137
+ pointer-events: none;
138
+ }
139
+
140
+ .mst-orbit {
141
+ position: absolute;
142
+ border: 1px dashed rgba(8, 145, 178, 0.36);
143
+ border-radius: 50%;
144
+ }
145
+
146
+ .mst-orbit-one {
147
+ width: min(78%, 420px);
148
+ aspect-ratio: 1;
149
+ }
150
+
151
+ .mst-orbit-two {
152
+ width: min(52%, 280px);
153
+ aspect-ratio: 1;
154
+ transform: rotate(32deg);
155
+ }
156
+
157
+ .theme-dark .mst-orbit {
158
+ border-color: rgba(165, 243, 252, 0.28);
159
+ }
160
+
161
+ .mst-wheel {
162
+ position: relative;
163
+ display: grid;
164
+ gap: 0.45rem;
165
+ width: min(34vw, 150px);
166
+ min-width: 92px;
167
+ aspect-ratio: 0.72;
168
+ place-content: center;
169
+ border: 2px solid rgba(15, 118, 110, 0.75);
170
+ border-radius: 48% 48% 42% 42%;
171
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.78), rgba(94, 234, 212, 0.22));
172
+ box-shadow: inset 0 -18px 34px rgba(15, 118, 110, 0.18), 0 18px 42px rgba(15, 23, 42, 0.16);
173
+ }
174
+
175
+ .theme-dark .mst-wheel {
176
+ border-color: rgba(153, 246, 228, 0.72);
177
+ background: linear-gradient(180deg, rgba(15, 23, 42, 0.85), rgba(20, 184, 166, 0.18));
178
+ }
179
+
180
+ .mst-wheel-line {
181
+ display: block;
182
+ width: 44px;
183
+ height: 6px;
184
+ border-radius: 999px;
185
+ background: rgba(15, 118, 110, 0.78);
186
+ }
187
+
188
+ .theme-dark .mst-wheel-line {
189
+ background: rgba(204, 251, 241, 0.82);
190
+ }
191
+
192
+ .mst-capture-copy {
193
+ position: relative;
194
+ z-index: 2;
195
+ align-self: end;
196
+ display: grid;
197
+ gap: 0.45rem;
198
+ max-width: 30rem;
199
+ }
200
+
201
+ @keyframes mst-locked-pulse {
202
+ 0%,
203
+ 100% {
204
+ box-shadow: inset 0 0 0 0 rgba(202, 138, 4, 0.06), 0 0 0 0 rgba(202, 138, 4, 0.24);
205
+ }
206
+
207
+ 50% {
208
+ box-shadow: inset 0 0 0 999px rgba(202, 138, 4, 0.08), 0 0 0 8px rgba(202, 138, 4, 0);
209
+ }
210
+ }
211
+
212
+ @keyframes mst-active-scan {
213
+ 0% {
214
+ box-shadow: inset 0 0 0 0 rgba(16, 185, 129, 0.08), 0 0 0 0 rgba(16, 185, 129, 0.22);
215
+ }
216
+
217
+ 50% {
218
+ box-shadow: inset 0 0 0 999px rgba(16, 185, 129, 0.05), 0 0 0 8px rgba(16, 185, 129, 0);
219
+ }
220
+
221
+ 100% {
222
+ box-shadow: inset 0 0 0 0 rgba(16, 185, 129, 0.08), 0 0 0 0 rgba(16, 185, 129, 0.22);
223
+ }
224
+ }
225
+
226
+ .mst-capture-copy span {
227
+ display: inline-flex;
228
+ align-items: center;
229
+ gap: 0.4rem;
230
+ width: fit-content;
231
+ padding: 0.35rem 0.55rem;
232
+ border: 1px solid rgba(15, 118, 110, 0.24);
233
+ border-radius: 999px;
234
+ background: rgba(255, 255, 255, 0.72);
235
+ color: #0f766e;
236
+ font-size: 0.78rem;
237
+ font-weight: 800;
238
+ text-transform: uppercase;
239
+ }
240
+
241
+ .theme-dark .mst-capture-copy span {
242
+ border-color: rgba(153, 246, 228, 0.24);
243
+ background: rgba(15, 23, 42, 0.6);
244
+ color: #99f6e4;
245
+ }
246
+
247
+ .mst-capture-copy svg {
248
+ width: 1rem;
249
+ height: 1rem;
250
+ }
251
+
252
+ .mst-capture-copy small {
253
+ max-width: 24rem;
254
+ color: #0f172a;
255
+ font-size: clamp(1.1rem, 3.4vw, 1.35rem);
256
+ font-weight: 900;
257
+ line-height: 1.35;
258
+ }
259
+
260
+ .theme-dark .mst-capture-copy small {
261
+ color: #ecfeff;
262
+ }
263
+
264
+ .mst-needle {
265
+ --mst-needle-offset: 0%;
266
+
267
+ position: absolute;
268
+ display: block;
269
+ background: #0f766e;
270
+ box-shadow: 0 0 0 8px rgba(20, 184, 166, 0.12);
271
+ transition: transform 150ms ease, background 150ms ease;
272
+ }
273
+
274
+ .mst-needle[data-state="reversal"] {
275
+ background: #dc2626;
276
+ box-shadow: 0 0 0 10px rgba(220, 38, 38, 0.16);
277
+ }
278
+
279
+ .mst-needle[data-state="jitter"] {
280
+ background: #ca8a04;
281
+ }
282
+
283
+ .mst-needle-vertical {
284
+ width: 8px;
285
+ height: 52%;
286
+ border-radius: 999px;
287
+ transform: translateY(var(--mst-needle-offset));
288
+ }
289
+
290
+ .mst-needle-horizontal {
291
+ width: 52%;
292
+ height: 8px;
293
+ border-radius: 999px;
294
+ transform: translateX(var(--mst-needle-offset));
295
+ }
296
+
297
+ .theme-dark .mst-needle {
298
+ background: #67e8f9;
299
+ }
300
+
301
+ .theme-dark .mst-needle[data-state="reversal"] {
302
+ background: #f87171;
303
+ }
304
+
305
+ .theme-dark .mst-needle[data-state="jitter"] {
306
+ background: #facc15;
307
+ }
308
+
309
+ .mst-panel {
310
+ display: grid;
311
+ gap: 0.85rem;
312
+ align-content: start;
313
+ }
314
+
315
+ .mst-score,
316
+ .mst-metrics > div,
317
+ .mst-axis-card,
318
+ .mst-readouts > div,
319
+ .mst-sensitivity,
320
+ .mst-log {
321
+ border: 1px solid rgba(15, 118, 110, 0.16);
322
+ border-radius: 8px;
323
+ background: rgba(255, 255, 255, 0.7);
324
+ }
325
+
326
+ .theme-dark .mst-score,
327
+ .theme-dark .mst-metrics > div,
328
+ .theme-dark .mst-axis-card,
329
+ .theme-dark .mst-readouts > div,
330
+ .theme-dark .mst-sensitivity,
331
+ .theme-dark .mst-log {
332
+ border-color: rgba(153, 246, 228, 0.16);
333
+ background: rgba(15, 23, 42, 0.52);
334
+ }
335
+
336
+ .mst-score {
337
+ display: grid;
338
+ gap: 0.2rem;
339
+ padding: 1rem;
340
+ }
341
+
342
+ .mst-direction-note {
343
+ margin: 0;
344
+ padding: 0.8rem 0.9rem;
345
+ border: 1px solid rgba(202, 138, 4, 0.22);
346
+ border-radius: 8px;
347
+ background: rgba(254, 249, 195, 0.78);
348
+ color: #713f12;
349
+ font-size: 0.94rem;
350
+ font-weight: 750;
351
+ line-height: 1.35;
352
+ }
353
+
354
+ .theme-dark .mst-direction-note {
355
+ border-color: rgba(250, 204, 21, 0.24);
356
+ background: rgba(113, 63, 18, 0.42);
357
+ color: #fef3c7;
358
+ }
359
+
360
+ .mst-score span,
361
+ .mst-metrics span,
362
+ .mst-readouts span,
363
+ .mst-sensitivity span,
364
+ .mst-axis-card span {
365
+ color: #47656d;
366
+ font-size: 0.78rem;
367
+ font-weight: 800;
368
+ text-transform: uppercase;
369
+ }
370
+
371
+ .theme-dark .mst-score span,
372
+ .theme-dark .mst-metrics span,
373
+ .theme-dark .mst-readouts span,
374
+ .theme-dark .mst-sensitivity span,
375
+ .theme-dark .mst-axis-card span {
376
+ color: #a7f3d0;
377
+ }
378
+
379
+ .mst-score strong {
380
+ font-size: clamp(2.6rem, 8vw, 4.8rem);
381
+ line-height: 0.95;
382
+ }
383
+
384
+ .mst-score small {
385
+ color: #33515b;
386
+ font-weight: 700;
387
+ }
388
+
389
+ .mst-score small[data-state="warning"] {
390
+ color: #b91c1c;
391
+ }
392
+
393
+ .mst-score small[data-state="mixed"] {
394
+ color: #a16207;
395
+ }
396
+
397
+ .mst-score small[data-state="clean"] {
398
+ color: #047857;
399
+ }
400
+
401
+ .theme-dark .mst-score small {
402
+ color: #bae6fd;
403
+ }
404
+
405
+ .theme-dark .mst-score small[data-state="warning"] {
406
+ color: #fca5a5;
407
+ }
408
+
409
+ .theme-dark .mst-score small[data-state="mixed"] {
410
+ color: #fde68a;
411
+ }
412
+
413
+ .theme-dark .mst-score small[data-state="clean"] {
414
+ color: #86efac;
415
+ }
416
+
417
+ .mst-metrics,
418
+ .mst-readouts,
419
+ .mst-telemetry {
420
+ display: grid;
421
+ grid-template-columns: repeat(3, minmax(0, 1fr));
422
+ gap: 0.65rem;
423
+ }
424
+
425
+ .mst-readouts,
426
+ .mst-telemetry {
427
+ grid-template-columns: repeat(2, minmax(0, 1fr));
428
+ }
429
+
430
+ .mst-metrics > div,
431
+ .mst-readouts > div,
432
+ .mst-axis-card {
433
+ display: grid;
434
+ gap: 0.25rem;
435
+ min-width: 0;
436
+ padding: 0.85rem;
437
+ }
438
+
439
+ .mst-metrics strong,
440
+ .mst-readouts strong {
441
+ overflow-wrap: anywhere;
442
+ font-size: clamp(1.25rem, 5vw, 1.85rem);
443
+ }
444
+
445
+ .mst-axis-card b {
446
+ --mst-meter: 0%;
447
+
448
+ position: relative;
449
+ display: block;
450
+ height: 0.7rem;
451
+ overflow: hidden;
452
+ border-radius: 999px;
453
+ background: rgba(8, 145, 178, 0.16);
454
+ }
455
+
456
+ .mst-axis-card b::after {
457
+ position: absolute;
458
+ inset: 0 auto 0 0;
459
+ width: var(--mst-meter);
460
+ border-radius: inherit;
461
+ background: linear-gradient(90deg, #0f766e, #22c55e);
462
+ content: "";
463
+ transition: width 160ms ease;
464
+ }
465
+
466
+ .theme-dark .mst-axis-card b {
467
+ background: rgba(186, 230, 253, 0.14);
468
+ }
469
+
470
+ .theme-dark .mst-axis-card b::after {
471
+ background: linear-gradient(90deg, #67e8f9, #86efac);
472
+ }
473
+
474
+ .mst-sensitivity {
475
+ display: grid;
476
+ gap: 0.55rem;
477
+ padding: 0.9rem;
478
+ }
479
+
480
+ .mst-sensitivity b {
481
+ color: #0f766e;
482
+ }
483
+
484
+ .theme-dark .mst-sensitivity b {
485
+ color: #99f6e4;
486
+ }
487
+
488
+ .mst-sensitivity input {
489
+ width: 100%;
490
+ accent-color: #0f766e;
491
+ }
492
+
493
+ .mst-log-head {
494
+ display: flex;
495
+ align-items: center;
496
+ justify-content: space-between;
497
+ gap: 0.75rem;
498
+ font-weight: 800;
499
+ }
500
+
501
+ .mst-log-head button {
502
+ border: 0;
503
+ border-radius: 999px;
504
+ background: #0f766e;
505
+ color: #fff;
506
+ cursor: pointer;
507
+ font: inherit;
508
+ padding: 0.45rem 0.75rem;
509
+ }
510
+
511
+ .theme-dark .mst-log-head button {
512
+ background: #5eead4;
513
+ color: #083344;
514
+ }
515
+
516
+ .mst-log {
517
+ display: grid;
518
+ gap: 0.45rem;
519
+ min-height: 10rem;
520
+ max-height: 16.5rem;
521
+ overflow: auto;
522
+ margin: 0;
523
+ padding: 0.75rem;
524
+ list-style: none;
525
+ }
526
+
527
+ .mst-log-item,
528
+ .mst-empty {
529
+ display: grid;
530
+ grid-template-columns: 0.72fr 1fr auto;
531
+ gap: 0.5rem;
532
+ align-items: center;
533
+ padding: 0.55rem 0.6rem;
534
+ border-radius: 8px;
535
+ background: rgba(236, 253, 245, 0.82);
536
+ font-size: 0.86rem;
537
+ }
538
+
539
+ .mst-log-item.reversal {
540
+ background: rgba(254, 226, 226, 0.9);
541
+ }
542
+
543
+ .mst-log-item.jitter {
544
+ background: rgba(254, 249, 195, 0.9);
545
+ }
546
+
547
+ .theme-dark .mst-log-item,
548
+ .theme-dark .mst-empty {
549
+ background: rgba(20, 83, 45, 0.46);
550
+ }
551
+
552
+ .theme-dark .mst-log-item.reversal {
553
+ background: rgba(127, 29, 29, 0.62);
554
+ }
555
+
556
+ .theme-dark .mst-log-item.jitter {
557
+ background: rgba(113, 63, 18, 0.62);
558
+ }
559
+
560
+ .mst-log-item span,
561
+ .mst-log-item em,
562
+ .mst-empty {
563
+ color: #47656d;
564
+ }
565
+
566
+ .theme-dark .mst-log-item span,
567
+ .theme-dark .mst-log-item em,
568
+ .theme-dark .mst-empty {
569
+ color: #d1fae5;
570
+ }
571
+
572
+ .mst-log-item em {
573
+ justify-self: end;
574
+ font-style: normal;
575
+ font-weight: 800;
576
+ }
577
+
578
+ .mst-empty {
579
+ grid-template-columns: 1fr;
580
+ }
581
+
582
+ @media (max-width: 820px) {
583
+ .mst-card {
584
+ grid-template-columns: 1fr;
585
+ }
586
+
587
+ .mst-capture {
588
+ min-height: 360px;
589
+ }
590
+ }
591
+
592
+ @media (max-width: 520px) {
593
+ .mst-card {
594
+ padding: 0.75rem;
595
+ }
596
+
597
+ .mst-metrics,
598
+ .mst-readouts,
599
+ .mst-telemetry {
600
+ grid-template-columns: 1fr;
601
+ }
602
+
603
+ .mst-log-item {
604
+ grid-template-columns: 1fr;
605
+ }
606
+
607
+ .mst-log-item em {
608
+ justify-self: start;
609
+ }
610
+ }
@@ -0,0 +1,15 @@
1
+ ---
2
+ import { SEORenderer } from '@jjlmoya/utils-shared';
3
+ import { mouseScrollTest } from './index';
4
+ import type { KnownLocale } from '../../types';
5
+
6
+ interface Props {
7
+ locale?: KnownLocale;
8
+ }
9
+
10
+ const { locale = 'en' } = Astro.props;
11
+ const content = await mouseScrollTest.i18n[locale]?.();
12
+ if (!content) return null;
13
+ ---
14
+
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
@@ -0,0 +1,34 @@
1
+ export interface MouseScrollTestUI extends Record<string, string> {
2
+ badge: string;
3
+ captureTitle: string;
4
+ captureHint: string;
5
+ focusLockTitle: string;
6
+ focusLockText: string;
7
+ stabilityScore: string;
8
+ statusIdle: string;
9
+ statusClean: string;
10
+ statusWarning: string;
11
+ statusMixed: string;
12
+ directionNote: string;
13
+ totalTicks: string;
14
+ reversals: string;
15
+ longestRun: string;
16
+ lastDelta: string;
17
+ verticalAxis: string;
18
+ horizontalAxis: string;
19
+ dominantDirection: string;
20
+ upward: string;
21
+ downward: string;
22
+ leftward: string;
23
+ rightward: string;
24
+ noDirection: string;
25
+ noDataValue: string;
26
+ sensitivityLabel: string;
27
+ sensitivityUnit: string;
28
+ reset: string;
29
+ logTitle: string;
30
+ emptyLog: string;
31
+ cleanEvent: string;
32
+ reversalEvent: string;
33
+ jitterEvent: string;
34
+ }
package/src/tools.ts CHANGED
@@ -10,7 +10,8 @@ import { TONE_GENERATOR_TOOL } from './tool/toneGenerator/index';
10
10
  import { REFRESH_RATE_DETECTOR_TOOL } from './tool/refreshRateDetector/index';
11
11
  import { SPECTRUM_CANVAS_TOOL } from './tool/colorAccuracyTest/index';
12
12
  import { MOUSE_DOUBLE_CLICK_TEST_TOOL } from './tool/mouseDoubleClickTest/index';
13
+ import { MOUSE_SCROLL_TEST_TOOL } from './tool/mouseScrollTest/index';
13
14
  import { MONITOR_GHOSTING_TEST_TOOL } from './tool/monitorGhostingTest/index';
14
15
  import { UPS_RUNTIME_CALCULATOR_TOOL } from './tool/upsRuntimeCalculator/index';
15
16
 
16
- 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, ESTIMADOR_SALUD_BATERIA_TOOL, TONE_GENERATOR_TOOL, REFRESH_RATE_DETECTOR_TOOL, MONITOR_GHOSTING_TEST_TOOL, SPECTRUM_CANVAS_TOOL, UPS_RUNTIME_CALCULATOR_TOOL];
17
+ 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];