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