@jjlmoya/utils-hardware 1.12.0 → 1.13.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.
@@ -17,53 +17,7 @@ const testedClass = 'tt-key-tested';
17
17
  ---
18
18
 
19
19
  <div id="keyboard-tester-root" class="tt-wrapper" data-active-class={activeClass} data-tested-class={testedClass}>
20
- <style is:global>
21
- .tt-wrapper {
22
- --tt-accent: #4f46e5;
23
- --tt-accent-hover: #4338ca;
24
- --tt-surface: #fff;
25
- --tt-surface-alt: #f1f5f9;
26
- --tt-border: #e2e8f0;
27
- --tt-text: #0f172a;
28
- --tt-text-muted: #64748b;
29
- --tt-key-bg: #fff;
30
- --tt-key-text: #64748b;
31
- --tt-key-border: #e2e8f0;
32
- --tt-key-shadow: rgba(0, 0, 0, 0.2);
33
- --tt-key-active-bg: #4f46e5;
34
- --tt-key-tested-bg: #d1fae5;
35
- --tt-key-tested-text: #059669;
36
- --tt-kb-bg: #e2e8f0;
37
- }
38
-
39
- .theme-dark .tt-wrapper {
40
- --tt-surface: #0f172a;
41
- --tt-surface-alt: #1e293b;
42
- --tt-border: #334155;
43
- --tt-text: #f1f5f9;
44
- --tt-text-muted: #94a3b8;
45
- --tt-key-bg: #334155;
46
- --tt-key-text: #cbd5e1;
47
- --tt-key-border: #475569;
48
- --tt-key-shadow: rgba(0, 0, 0, 0.5);
49
- --tt-key-active-bg: #6366f1;
50
- --tt-key-tested-bg: rgba(16, 185, 129, 0.3);
51
- --tt-key-tested-text: #6ee7b7;
52
- --tt-kb-bg: #334155;
53
- }
54
-
55
- body.is-widget .tt-wrapper {
56
- padding: 0;
57
- }
58
-
59
- body.is-widget .tt-wrapper > div {
60
- background: transparent;
61
- box-shadow: none;
62
- border: none;
63
- padding: 1rem;
64
- }
65
- </style>
66
-
20
+
67
21
  <div class="tt-container">
68
22
  <div class="tt-card">
69
23
  <div class="tt-header">
@@ -217,292 +171,7 @@ const testedClass = 'tt-key-tested';
217
171
  </div>
218
172
  </div>
219
173
 
220
- <style>
221
- .tt-wrapper {
222
- width: 100%;
223
- color: var(--tt-text);
224
- }
225
-
226
- .tt-container {
227
- max-width: 80rem;
228
- margin: 0 auto;
229
- padding: 1rem;
230
- }
231
-
232
- .tt-card {
233
- background: var(--tt-surface);
234
- border-radius: 1.5rem;
235
- padding: 2rem;
236
- box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
237
- border: 1px solid var(--tt-border);
238
- }
239
-
240
- .tt-header {
241
- display: flex;
242
- flex-direction: column;
243
- gap: 1rem;
244
- margin-bottom: 2rem;
245
- width: 100%;
246
- }
247
-
248
- @media (min-width: 768px) {
249
- .tt-header {
250
- flex-direction: row;
251
- justify-content: space-between;
252
- align-items: flex-start;
253
- }
254
- }
255
-
256
- .tt-header-left {
257
- flex: 1;
258
- }
259
-
260
- .tt-badge {
261
- display: inline-flex;
262
- align-items: center;
263
- gap: 0.5rem;
264
- padding: 0.25rem 0.75rem;
265
- border-radius: 9999px;
266
- background-color: rgba(79, 70, 229, 0.1);
267
- color: var(--tt-accent);
268
- font-size: 0.75rem;
269
- font-weight: 700;
270
- text-transform: uppercase;
271
- letter-spacing: 0.05em;
272
- margin-bottom: 0.5rem;
273
- }
274
-
275
- .tt-badge-icon {
276
- width: 1rem;
277
- height: 1rem;
278
- }
279
-
280
- .tt-title {
281
- font-size: 1.875rem;
282
- font-weight: 900;
283
- letter-spacing: -0.02em;
284
- margin: 0 0 0.25rem;
285
- }
286
-
287
- .tt-description {
288
- font-size: 0.9375rem;
289
- color: var(--tt-text-muted);
290
- margin: 0;
291
- }
292
-
293
- .tt-stats {
294
- display: flex;
295
- gap: 1rem;
296
- flex-wrap: wrap;
297
- }
298
-
299
- .tt-stat-box {
300
- background: var(--tt-surface-alt);
301
- padding: 1rem;
302
- border-radius: 1rem;
303
- text-align: center;
304
- min-width: 120px;
305
- }
306
-
307
- .tt-stat-label {
308
- font-size: 0.75rem;
309
- font-weight: 700;
310
- text-transform: uppercase;
311
- color: var(--tt-text-muted);
312
- letter-spacing: 0.05em;
313
- }
314
-
315
- .tt-stat-value {
316
- font-size: 2.25rem;
317
- font-weight: 900;
318
- color: var(--tt-accent);
319
- margin-top: 0.5rem;
320
- }
321
-
322
- .tt-reset-btn {
323
- padding: 1rem;
324
- background: var(--tt-surface-alt);
325
- border: none;
326
- border-radius: 1rem;
327
- cursor: pointer;
328
- color: var(--tt-text-muted);
329
- transition: all 0.2s ease;
330
- display: flex;
331
- align-items: center;
332
- justify-content: center;
333
- }
334
-
335
- .tt-reset-btn:hover {
336
- background: var(--tt-border);
337
- }
338
-
339
- .tt-reset-icon {
340
- width: 1.5rem;
341
- height: 1.5rem;
342
- }
343
-
344
- .tt-keyboard-wrapper {
345
- position: relative;
346
- width: 100%;
347
- overflow-x: auto;
348
- padding-bottom: 1rem;
349
- display: flex;
350
- justify-content: center;
351
- }
352
-
353
- .tt-keyboard {
354
- background: var(--tt-kb-bg);
355
- padding: 0.5rem;
356
- border-radius: 0.75rem;
357
- display: flex;
358
- flex-direction: column;
359
- gap: 0.25rem;
360
- user-select: none;
361
- min-width: 900px;
362
- }
363
-
364
- .tt-row {
365
- display: flex;
366
- gap: 0.25rem;
367
- }
368
-
369
- .tt-key {
370
- height: 3rem;
371
- background: var(--tt-key-bg);
372
- border-radius: 0.5rem;
373
- display: flex;
374
- align-items: center;
375
- justify-content: center;
376
- font-weight: 700;
377
- font-size: 0.75rem;
378
- color: var(--tt-key-text);
379
- border-top: 1px solid rgba(255, 255, 255, 0.3);
380
- box-shadow: 0 2px 0 var(--tt-key-shadow);
381
- transition: all 300ms ease-out;
382
- border: 1px solid var(--tt-key-border);
383
- }
384
-
385
- .tt-key-esc,
386
- .tt-key-f,
387
- .tt-key-sm {
388
- width: 3rem;
389
- }
390
-
391
- .tt-key-md {
392
- width: 4rem;
393
- }
394
-
395
- .tt-key-lg {
396
- width: 5rem;
397
- }
398
-
399
- .tt-key-xl {
400
- width: 8rem;
401
- }
402
-
403
- .tt-key-xxl {
404
- width: 18rem;
405
- }
406
-
407
- .tt-key.tt-key-active {
408
- background: var(--tt-key-active-bg);
409
- color: white;
410
- box-shadow: inset 0 2px 0 rgba(0, 0, 0, 0.2);
411
- transform: translateY(1px);
412
- border-color: var(--tt-accent);
413
- }
414
-
415
- .tt-key.tt-key-tested {
416
- background: var(--tt-key-tested-bg);
417
- color: var(--tt-key-tested-text);
418
- border-color: var(--tt-key-tested-text);
419
- }
420
-
421
- .tt-key.tt-key-releasing {
422
- background: var(--tt-key-bg);
423
- color: var(--tt-key-text);
424
- box-shadow: 0 2px 0 var(--tt-key-shadow);
425
- transform: translateY(0);
426
- border-color: var(--tt-key-border);
427
- }
428
-
429
- .tt-spacer-4 {
430
- width: 0.25rem;
431
- }
432
-
433
- .tt-spacer-8 {
434
- width: 0.5rem;
435
- }
436
-
437
- .tt-spacer-12 {
438
- width: 0.75rem;
439
- }
440
-
441
- .tt-spacer-108 {
442
- width: 6.75rem;
443
- }
444
-
445
- .tt-event-log-container {
446
- margin-top: 0.75rem;
447
- padding: 0;
448
- background: transparent;
449
- border-radius: 0;
450
- border: none;
451
- width: 100%;
452
- }
453
-
454
- .tt-event-log-header {
455
- display: none;
456
- }
457
-
458
- .tt-event-log-icon {
459
- display: none;
460
- }
461
-
462
- .tt-event-log-label {
463
- display: none;
464
- }
465
-
466
- .tt-event-log {
467
- font-size: 0.65rem;
468
- color: var(--tt-text);
469
- height: 2rem;
470
- overflow-x: auto;
471
- overflow-y: hidden;
472
- background: var(--tt-surface-alt);
473
- padding: 0.375rem;
474
- border-radius: 0.5rem;
475
- border: 1px solid var(--tt-border);
476
- display: flex;
477
- align-items: center;
478
- justify-content: flex-start;
479
- gap: 0.5rem;
480
- white-space: nowrap;
481
- width: 100%;
482
- scrollbar-width: none;
483
- }
484
-
485
- .tt-event-log::-webkit-scrollbar {
486
- display: none;
487
- }
488
-
489
- .tt-event-log div {
490
- display: inline-flex;
491
- align-items: center;
492
- justify-content: center;
493
- line-height: 1;
494
- font-weight: 600;
495
- padding: 0.25rem 0.5rem;
496
- min-width: 1.5rem;
497
- height: 1.5rem;
498
- background: var(--tt-key-bg);
499
- border: 1px solid var(--tt-key-border);
500
- border-radius: 0.375rem;
501
- box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1);
502
- flex-shrink: 0;
503
- }
504
- </style>
505
-
174
+
506
175
  <script>
507
176
  const activeClass = 'tt-key-active';
508
177
  const testedClass = 'tt-key-tested';
@@ -0,0 +1,283 @@
1
+ .tt-wrapper {
2
+ width: 100%;
3
+ color: var(--tt-text);
4
+ }
5
+
6
+ .tt-container {
7
+ max-width: 80rem;
8
+ margin: 0 auto;
9
+ padding: 1rem;
10
+ }
11
+
12
+ .tt-card {
13
+ background: var(--tt-surface);
14
+ border-radius: 1.5rem;
15
+ padding: 2rem;
16
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
17
+ border: 1px solid var(--tt-border);
18
+ }
19
+
20
+ .tt-header {
21
+ display: flex;
22
+ flex-direction: column;
23
+ gap: 1rem;
24
+ margin-bottom: 2rem;
25
+ width: 100%;
26
+ }
27
+
28
+ @media (min-width: 768px) {
29
+ .tt-header {
30
+ flex-direction: row;
31
+ justify-content: space-between;
32
+ align-items: flex-start;
33
+ }
34
+ }
35
+
36
+ .tt-header-left {
37
+ flex: 1;
38
+ }
39
+
40
+ .tt-badge {
41
+ display: inline-flex;
42
+ align-items: center;
43
+ gap: 0.5rem;
44
+ padding: 0.25rem 0.75rem;
45
+ border-radius: 9999px;
46
+ background-color: rgba(79, 70, 229, 0.1);
47
+ color: var(--tt-accent);
48
+ font-size: 0.75rem;
49
+ font-weight: 700;
50
+ text-transform: uppercase;
51
+ letter-spacing: 0.05em;
52
+ margin-bottom: 0.5rem;
53
+ }
54
+
55
+ .tt-badge-icon {
56
+ width: 1rem;
57
+ height: 1rem;
58
+ }
59
+
60
+ .tt-title {
61
+ font-size: 1.875rem;
62
+ font-weight: 900;
63
+ letter-spacing: -0.02em;
64
+ margin: 0 0 0.25rem;
65
+ }
66
+
67
+ .tt-description {
68
+ font-size: 0.9375rem;
69
+ color: var(--tt-text-muted);
70
+ margin: 0;
71
+ }
72
+
73
+ .tt-stats {
74
+ display: flex;
75
+ gap: 1rem;
76
+ flex-wrap: wrap;
77
+ }
78
+
79
+ .tt-stat-box {
80
+ background: var(--tt-surface-alt);
81
+ padding: 1rem;
82
+ border-radius: 1rem;
83
+ text-align: center;
84
+ min-width: 120px;
85
+ }
86
+
87
+ .tt-stat-label {
88
+ font-size: 0.75rem;
89
+ font-weight: 700;
90
+ text-transform: uppercase;
91
+ color: var(--tt-text-muted);
92
+ letter-spacing: 0.05em;
93
+ }
94
+
95
+ .tt-stat-value {
96
+ font-size: 2.25rem;
97
+ font-weight: 900;
98
+ color: var(--tt-accent);
99
+ margin-top: 0.5rem;
100
+ }
101
+
102
+ .tt-reset-btn {
103
+ padding: 1rem;
104
+ background: var(--tt-surface-alt);
105
+ border: none;
106
+ border-radius: 1rem;
107
+ cursor: pointer;
108
+ color: var(--tt-text-muted);
109
+ transition: all 0.2s ease;
110
+ display: flex;
111
+ align-items: center;
112
+ justify-content: center;
113
+ }
114
+
115
+ .tt-reset-btn:hover {
116
+ background: var(--tt-border);
117
+ }
118
+
119
+ .tt-reset-icon {
120
+ width: 1.5rem;
121
+ height: 1.5rem;
122
+ }
123
+
124
+ .tt-keyboard-wrapper {
125
+ position: relative;
126
+ width: 100%;
127
+ overflow-x: auto;
128
+ padding-bottom: 1rem;
129
+ display: flex;
130
+ justify-content: center;
131
+ }
132
+
133
+ .tt-keyboard {
134
+ background: var(--tt-kb-bg);
135
+ padding: 0.5rem;
136
+ border-radius: 0.75rem;
137
+ display: flex;
138
+ flex-direction: column;
139
+ gap: 0.25rem;
140
+ user-select: none;
141
+ min-width: 900px;
142
+ }
143
+
144
+ .tt-row {
145
+ display: flex;
146
+ gap: 0.25rem;
147
+ }
148
+
149
+ .tt-key {
150
+ height: 3rem;
151
+ background: var(--tt-key-bg);
152
+ border-radius: 0.5rem;
153
+ display: flex;
154
+ align-items: center;
155
+ justify-content: center;
156
+ font-weight: 700;
157
+ font-size: 0.75rem;
158
+ color: var(--tt-key-text);
159
+ border-top: 1px solid rgba(255, 255, 255, 0.3);
160
+ box-shadow: 0 2px 0 var(--tt-key-shadow);
161
+ transition: all 300ms ease-out;
162
+ border: 1px solid var(--tt-key-border);
163
+ }
164
+
165
+ .tt-key-esc,
166
+ .tt-key-f,
167
+ .tt-key-sm {
168
+ width: 3rem;
169
+ }
170
+
171
+ .tt-key-md {
172
+ width: 4rem;
173
+ }
174
+
175
+ .tt-key-lg {
176
+ width: 5rem;
177
+ }
178
+
179
+ .tt-key-xl {
180
+ width: 8rem;
181
+ }
182
+
183
+ .tt-key-xxl {
184
+ width: 18rem;
185
+ }
186
+
187
+ .tt-key.tt-key-active {
188
+ background: var(--tt-key-active-bg);
189
+ color: white;
190
+ box-shadow: inset 0 2px 0 rgba(0, 0, 0, 0.2);
191
+ transform: translateY(1px);
192
+ border-color: var(--tt-accent);
193
+ }
194
+
195
+ .tt-key.tt-key-tested {
196
+ background: var(--tt-key-tested-bg);
197
+ color: var(--tt-key-tested-text);
198
+ border-color: var(--tt-key-tested-text);
199
+ }
200
+
201
+ .tt-key.tt-key-releasing {
202
+ background: var(--tt-key-bg);
203
+ color: var(--tt-key-text);
204
+ box-shadow: 0 2px 0 var(--tt-key-shadow);
205
+ transform: translateY(0);
206
+ border-color: var(--tt-key-border);
207
+ }
208
+
209
+ .tt-spacer-4 {
210
+ width: 0.25rem;
211
+ }
212
+
213
+ .tt-spacer-8 {
214
+ width: 0.5rem;
215
+ }
216
+
217
+ .tt-spacer-12 {
218
+ width: 0.75rem;
219
+ }
220
+
221
+ .tt-spacer-108 {
222
+ width: 6.75rem;
223
+ }
224
+
225
+ .tt-event-log-container {
226
+ margin-top: 0.75rem;
227
+ padding: 0;
228
+ background: transparent;
229
+ border-radius: 0;
230
+ border: none;
231
+ width: 100%;
232
+ }
233
+
234
+ .tt-event-log-header {
235
+ display: none;
236
+ }
237
+
238
+ .tt-event-log-icon {
239
+ display: none;
240
+ }
241
+
242
+ .tt-event-log-label {
243
+ display: none;
244
+ }
245
+
246
+ .tt-event-log {
247
+ font-size: 0.65rem;
248
+ color: var(--tt-text);
249
+ height: 2rem;
250
+ overflow-x: auto;
251
+ overflow-y: hidden;
252
+ background: var(--tt-surface-alt);
253
+ padding: 0.375rem;
254
+ border-radius: 0.5rem;
255
+ border: 1px solid var(--tt-border);
256
+ display: flex;
257
+ align-items: center;
258
+ justify-content: flex-start;
259
+ gap: 0.5rem;
260
+ white-space: nowrap;
261
+ width: 100%;
262
+ scrollbar-width: none;
263
+ }
264
+
265
+ .tt-event-log::-webkit-scrollbar {
266
+ display: none;
267
+ }
268
+
269
+ .tt-event-log div {
270
+ display: inline-flex;
271
+ align-items: center;
272
+ justify-content: center;
273
+ line-height: 1;
274
+ font-weight: 600;
275
+ padding: 0.25rem 0.5rem;
276
+ min-width: 1.5rem;
277
+ height: 1.5rem;
278
+ background: var(--tt-key-bg);
279
+ border: 1px solid var(--tt-key-border);
280
+ border-radius: 0.375rem;
281
+ box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1);
282
+ flex-shrink: 0;
283
+ }