@jjlmoya/utils-hardware 1.23.0 → 1.24.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/stereoAudioTest/bibliography.astro +14 -0
  8. package/src/tool/stereoAudioTest/bibliography.ts +16 -0
  9. package/src/tool/stereoAudioTest/component.astro +251 -0
  10. package/src/tool/stereoAudioTest/entry.ts +29 -0
  11. package/src/tool/stereoAudioTest/i18n/de.ts +229 -0
  12. package/src/tool/stereoAudioTest/i18n/en.ts +229 -0
  13. package/src/tool/stereoAudioTest/i18n/es.ts +229 -0
  14. package/src/tool/stereoAudioTest/i18n/fr.ts +229 -0
  15. package/src/tool/stereoAudioTest/i18n/id.ts +229 -0
  16. package/src/tool/stereoAudioTest/i18n/it.ts +229 -0
  17. package/src/tool/stereoAudioTest/i18n/ja.ts +229 -0
  18. package/src/tool/stereoAudioTest/i18n/ko.ts +229 -0
  19. package/src/tool/stereoAudioTest/i18n/nl.ts +229 -0
  20. package/src/tool/stereoAudioTest/i18n/pl.ts +229 -0
  21. package/src/tool/stereoAudioTest/i18n/pt.ts +229 -0
  22. package/src/tool/stereoAudioTest/i18n/ru.ts +229 -0
  23. package/src/tool/stereoAudioTest/i18n/sv.ts +229 -0
  24. package/src/tool/stereoAudioTest/i18n/tr.ts +229 -0
  25. package/src/tool/stereoAudioTest/i18n/zh.ts +229 -0
  26. package/src/tool/stereoAudioTest/index.ts +11 -0
  27. package/src/tool/stereoAudioTest/logic.ts +22 -0
  28. package/src/tool/stereoAudioTest/seo.astro +15 -0
  29. package/src/tool/stereoAudioTest/stereo-audio-test.css +411 -0
  30. package/src/tool/stereoAudioTest/ui.ts +24 -0
  31. package/src/tools.ts +2 -1
@@ -0,0 +1,411 @@
1
+ .sat-root {
2
+ --sat-ink: #172033;
3
+ --sat-muted: #667085;
4
+ --sat-card: #fff;
5
+ --sat-soft: #f3f6fb;
6
+ --sat-line: #d9e1ee;
7
+ --sat-left: #2563eb;
8
+ --sat-right: #e11d48;
9
+ --sat-center: #0f9f7a;
10
+ --sat-shadow: rgb(23, 32, 51, 0.1);
11
+ --sat-pan: 0;
12
+
13
+ color: var(--sat-ink);
14
+ }
15
+
16
+ .theme-dark .sat-root {
17
+ --sat-ink: #f8fafc;
18
+ --sat-muted: #aab4c5;
19
+ --sat-card: #161d29;
20
+ --sat-soft: #101722;
21
+ --sat-line: #334155;
22
+ --sat-left: #60a5fa;
23
+ --sat-right: #fb7185;
24
+ --sat-center: #34d399;
25
+ --sat-shadow: rgb(0, 0, 0, 0.3);
26
+ }
27
+
28
+ .sat-panel {
29
+ display: grid;
30
+ gap: 0.75rem;
31
+ width: 100%;
32
+ padding: 0.75rem;
33
+ border: 1px solid var(--sat-line);
34
+ border-radius: 8px;
35
+ background: var(--sat-card);
36
+ box-shadow: 0 1rem 2.5rem var(--sat-shadow);
37
+ }
38
+
39
+ .sat-stage {
40
+ position: relative;
41
+ display: grid;
42
+ grid-template-columns: minmax(0, 1fr) minmax(7rem, 0.75fr) minmax(0, 1fr);
43
+ gap: 0.5rem;
44
+ align-items: center;
45
+ min-height: 15rem;
46
+ padding: 0.75rem;
47
+ border: 1px solid var(--sat-line);
48
+ border-radius: 8px;
49
+ background: var(--sat-soft);
50
+ overflow: hidden;
51
+ }
52
+
53
+ .sat-speaker {
54
+ position: relative;
55
+ z-index: 1;
56
+ display: grid;
57
+ place-items: center;
58
+ min-height: 8rem;
59
+ min-width: 0;
60
+ }
61
+
62
+ .sat-speaker span {
63
+ position: relative;
64
+ width: min(8rem, 28vw);
65
+ aspect-ratio: 1;
66
+ border: 1px solid var(--sat-line);
67
+ border-radius: 50%;
68
+ background: var(--sat-card);
69
+ box-shadow: inset 0 0 0 0.8rem var(--sat-soft), 0 0.6rem 1.5rem var(--sat-shadow);
70
+ }
71
+
72
+ .sat-speaker span::before,
73
+ .sat-speaker span::after {
74
+ position: absolute;
75
+ inset: 27%;
76
+ border: 1px solid var(--sat-line);
77
+ border-radius: inherit;
78
+ content: "";
79
+ }
80
+
81
+ .sat-speaker span::after {
82
+ inset: 42%;
83
+ background: currentcolor;
84
+ }
85
+
86
+ .sat-left {
87
+ color: var(--sat-left);
88
+ }
89
+
90
+ .sat-right {
91
+ color: var(--sat-right);
92
+ }
93
+
94
+ .sat-speaker strong {
95
+ position: absolute;
96
+ top: calc(50% + min(4.45rem, 15.8vw));
97
+ left: 50%;
98
+ width: max-content;
99
+ max-width: 100%;
100
+ color: var(--sat-muted);
101
+ font-size: 0.78rem;
102
+ font-weight: 900;
103
+ text-align: center;
104
+ transform: translateX(-50%);
105
+ }
106
+
107
+ .sat-orbit {
108
+ position: relative;
109
+ display: grid;
110
+ place-items: center;
111
+ align-self: center;
112
+ min-width: 0;
113
+ min-height: 8rem;
114
+ }
115
+
116
+ .sat-orbit::before {
117
+ position: absolute;
118
+ z-index: 0;
119
+ left: -55%;
120
+ right: -55%;
121
+ top: 50%;
122
+ height: 0.35rem;
123
+ border-radius: 8px;
124
+ background: linear-gradient(90deg, var(--sat-left), var(--sat-center), var(--sat-right));
125
+ content: "";
126
+ transform: translateY(-50%);
127
+ }
128
+
129
+ .sat-orbit i {
130
+ position: relative;
131
+ z-index: 2;
132
+ width: 3rem;
133
+ aspect-ratio: 1;
134
+ border: 0.45rem solid var(--sat-card);
135
+ border-radius: 50%;
136
+ background: var(--sat-center);
137
+ box-shadow: 0 0.5rem 1.4rem var(--sat-shadow);
138
+ transform: translateX(calc(var(--sat-pan) * 6rem));
139
+ transition: transform 90ms linear, background 160ms ease;
140
+ }
141
+
142
+ .sat-orbit b {
143
+ position: absolute;
144
+ bottom: 1.2rem;
145
+ color: var(--sat-muted);
146
+ font-size: 0.68rem;
147
+ font-weight: 900;
148
+ }
149
+
150
+ .sat-controls {
151
+ display: grid;
152
+ gap: 0.7rem;
153
+ align-content: start;
154
+ padding: 0.7rem;
155
+ border: 1px solid var(--sat-line);
156
+ border-radius: 8px;
157
+ background: var(--sat-soft);
158
+ }
159
+
160
+ .sat-buttons {
161
+ display: grid;
162
+ grid-template-columns: repeat(2, minmax(0, 1fr));
163
+ gap: 0.45rem;
164
+ }
165
+
166
+ .sat-buttons button {
167
+ display: inline-grid;
168
+ grid-auto-flow: column;
169
+ place-content: center;
170
+ align-items: center;
171
+ gap: 0.35rem;
172
+ min-height: 2.8rem;
173
+ border: 1px solid var(--sat-line);
174
+ border-radius: 8px;
175
+ background: var(--sat-card);
176
+ color: var(--sat-ink);
177
+ font: inherit;
178
+ font-weight: 900;
179
+ cursor: pointer;
180
+ transition: transform 160ms ease, border-color 160ms ease, background 160ms ease;
181
+ }
182
+
183
+ .sat-buttons svg {
184
+ width: 1rem;
185
+ height: 1rem;
186
+ }
187
+
188
+ .sat-buttons button:hover {
189
+ border-color: var(--sat-center);
190
+ background: color-mix(in srgb, var(--sat-center) 14%, var(--sat-card));
191
+ transform: translateY(-1px);
192
+ }
193
+
194
+ .sat-buttons button:last-child {
195
+ grid-column: 1 / -1;
196
+ background: var(--sat-ink);
197
+ color: var(--sat-card);
198
+ }
199
+
200
+ .sat-sliders,
201
+ .sat-readout,
202
+ .sat-loop {
203
+ display: grid;
204
+ gap: 0.55rem;
205
+ padding: 0.7rem;
206
+ border: 1px solid var(--sat-line);
207
+ border-radius: 8px;
208
+ background: var(--sat-card);
209
+ }
210
+
211
+ .sat-control-row {
212
+ display: grid;
213
+ grid-template-columns: minmax(0, 1fr) auto;
214
+ align-items: center;
215
+ gap: 0.45rem 0.7rem;
216
+ min-height: 4.4rem;
217
+ padding: 0.55rem;
218
+ border: 1px solid var(--sat-line);
219
+ border-radius: 8px;
220
+ background: var(--sat-soft);
221
+ color: var(--sat-muted);
222
+ font-size: 0.72rem;
223
+ font-weight: 850;
224
+ }
225
+
226
+ .sat-control-row input {
227
+ grid-column: 1 / -1;
228
+ width: 100%;
229
+ height: 0.55rem;
230
+ border-radius: 8px;
231
+ appearance: none;
232
+ background:
233
+ linear-gradient(90deg, var(--sat-left), var(--sat-center), var(--sat-right)),
234
+ var(--sat-line);
235
+ cursor: pointer;
236
+ }
237
+
238
+ .sat-control-row.is-disabled {
239
+ opacity: 0.48;
240
+ }
241
+
242
+ .sat-control-row.is-disabled input {
243
+ cursor: not-allowed;
244
+ filter: grayscale(1);
245
+ }
246
+
247
+ .sat-control-row input::-webkit-slider-thumb {
248
+ width: 1.25rem;
249
+ height: 1.25rem;
250
+ border: 0.22rem solid var(--sat-card);
251
+ border-radius: 50%;
252
+ appearance: none;
253
+ background: var(--sat-ink);
254
+ box-shadow: 0 0.35rem 0.85rem var(--sat-shadow);
255
+ }
256
+
257
+ .sat-control-row input::-moz-range-thumb {
258
+ width: 0.9rem;
259
+ height: 0.9rem;
260
+ border: 0.22rem solid var(--sat-card);
261
+ border-radius: 50%;
262
+ background: var(--sat-ink);
263
+ box-shadow: 0 0.35rem 0.85rem var(--sat-shadow);
264
+ }
265
+
266
+ .sat-sliders strong,
267
+ .sat-readout strong {
268
+ color: var(--sat-ink);
269
+ text-align: right;
270
+ font-size: 0.95rem;
271
+ font-weight: 950;
272
+ }
273
+
274
+ .sat-loop {
275
+ grid-template-columns: auto minmax(0, 1fr);
276
+ align-items: center;
277
+ cursor: pointer;
278
+ }
279
+
280
+ .sat-loop input {
281
+ width: 2.65rem;
282
+ height: 1.45rem;
283
+ border: 1px solid var(--sat-line);
284
+ border-radius: 999px;
285
+ appearance: none;
286
+ background: var(--sat-line);
287
+ cursor: pointer;
288
+ transition: background 160ms ease;
289
+ }
290
+
291
+ .sat-loop input::before {
292
+ display: block;
293
+ width: 1.05rem;
294
+ height: 1.05rem;
295
+ margin: 0.13rem;
296
+ border-radius: 50%;
297
+ background: var(--sat-card);
298
+ box-shadow: 0 0.25rem 0.6rem var(--sat-shadow);
299
+ content: "";
300
+ transition: transform 160ms ease;
301
+ }
302
+
303
+ .sat-loop input:checked {
304
+ background: var(--sat-center);
305
+ }
306
+
307
+ .sat-loop input:checked::before {
308
+ transform: translateX(1.16rem);
309
+ }
310
+
311
+ .sat-loop span {
312
+ display: grid;
313
+ gap: 0.12rem;
314
+ }
315
+
316
+ .sat-loop strong {
317
+ color: var(--sat-ink);
318
+ font-size: 0.86rem;
319
+ font-weight: 950;
320
+ }
321
+
322
+ .sat-loop em {
323
+ color: var(--sat-muted);
324
+ font-size: 0.72rem;
325
+ font-style: normal;
326
+ font-weight: 750;
327
+ line-height: 1.25;
328
+ }
329
+
330
+ .sat-readout {
331
+ grid-template-columns: minmax(4.6rem, 0.55fr) minmax(0, 1fr);
332
+ align-items: center;
333
+ }
334
+
335
+ .sat-readout span {
336
+ color: var(--sat-muted);
337
+ font-size: 0.72rem;
338
+ font-weight: 850;
339
+ }
340
+
341
+ .sat-readout meter {
342
+ grid-column: 1 / -1;
343
+ width: 100%;
344
+ height: 0.7rem;
345
+ }
346
+
347
+ .sat-controls p {
348
+ margin: 0;
349
+ padding: 0.75rem;
350
+ border: 1px solid color-mix(in srgb, var(--sat-center) 35%, var(--sat-line));
351
+ border-radius: 8px;
352
+ background: color-mix(in srgb, var(--sat-center) 10%, var(--sat-card));
353
+ color: var(--sat-ink);
354
+ font-size: 0.85rem;
355
+ font-weight: 750;
356
+ line-height: 1.35;
357
+ }
358
+
359
+ @media (min-width: 860px) {
360
+ .sat-panel {
361
+ grid-template-columns: minmax(0, 1.25fr) minmax(19rem, 0.75fr);
362
+ align-items: stretch;
363
+ }
364
+
365
+ .sat-stage {
366
+ min-height: 22rem;
367
+ }
368
+ }
369
+
370
+ @media (max-width: 560px) {
371
+ .sat-stage {
372
+ grid-template-columns: minmax(0, 1fr) minmax(5.5rem, 0.7fr) minmax(0, 1fr);
373
+ gap: 0.35rem;
374
+ }
375
+
376
+ .sat-orbit {
377
+ min-height: 7rem;
378
+ }
379
+
380
+ .sat-orbit i {
381
+ width: 2.35rem;
382
+ transform: translateX(calc(var(--sat-pan) * 3.75rem));
383
+ }
384
+
385
+ .sat-speaker span {
386
+ width: min(5.2rem, 28vw);
387
+ box-shadow: inset 0 0 0 0.55rem var(--sat-soft), 0 0.6rem 1.5rem var(--sat-shadow);
388
+ }
389
+
390
+ .sat-speaker strong {
391
+ top: calc(50% + min(3.05rem, 16vw));
392
+ font-size: 0.68rem;
393
+ }
394
+
395
+ .sat-control-row,
396
+ .sat-readout {
397
+ grid-template-columns: 1fr;
398
+ }
399
+
400
+ .sat-sliders strong,
401
+ .sat-readout strong {
402
+ text-align: left;
403
+ }
404
+ }
405
+
406
+ @media (prefers-reduced-motion: reduce) {
407
+ .sat-orbit i,
408
+ .sat-buttons button {
409
+ transition: none;
410
+ }
411
+ }
@@ -0,0 +1,24 @@
1
+ export interface StereoAudioTestUI extends Record<string, string> {
2
+ left: string;
3
+ center: string;
4
+ right: string;
5
+ sweep: string;
6
+ stop: string;
7
+ volume: string;
8
+ duration: string;
9
+ infiniteMode: string;
10
+ infiniteModeHint: string;
11
+ secondsUnit: string;
12
+ hertzUnit: string;
13
+ tone: string;
14
+ balance: string;
15
+ activeIdle: string;
16
+ activeLeft: string;
17
+ activeCenter: string;
18
+ activeRight: string;
19
+ activeSweep: string;
20
+ safety: string;
21
+ leftSpeaker: string;
22
+ rightSpeaker: string;
23
+ centerLine: string;
24
+ }
package/src/tools.ts CHANGED
@@ -13,5 +13,6 @@ import { MOUSE_DOUBLE_CLICK_TEST_TOOL } from './tool/mouseDoubleClickTest/index'
13
13
  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
+ import { STEREO_AUDIO_TEST_TOOL } from './tool/stereoAudioTest/index';
16
17
 
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];
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];