@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.
@@ -14,32 +14,7 @@ const t = (ui ?? {}) as TestRatonUI;
14
14
 
15
15
  <div id="tr-root" class="tr-wrapper">
16
16
 
17
- <style is:global>
18
- .tr-wrapper {
19
- --tr-accent: #10b981;
20
- --tr-accent-glow: rgba(16, 185, 129, 0.4);
21
- --tr-surface: #fff;
22
- --tr-surface-alt: #f1f5f9;
23
- --tr-surface-dark: #020617;
24
- --tr-border: #e2e8f0;
25
- --tr-text: #0f172a;
26
- --tr-text-muted: #64748b;
27
- }
28
-
29
- .theme-dark .tr-wrapper {
30
- --tr-surface: #0f172a;
31
- --tr-surface-alt: #1e293b;
32
- --tr-surface-dark: #020617;
33
- --tr-border: #334155;
34
- --tr-text: #f1f5f9;
35
- --tr-text-muted: #94a3b8;
36
- }
37
-
38
- body.is-widget .tr-wrapper {
39
- padding: 0;
40
- }
41
- </style>
42
-
17
+
43
18
  <div class="tr-card">
44
19
  <div class="tr-header">
45
20
  <div class="tr-header-info">
@@ -76,152 +51,7 @@ const t = (ui ?? {}) as TestRatonUI;
76
51
  </div>
77
52
  </div>
78
53
 
79
- <style>
80
- .tr-wrapper {
81
- width: 100%;
82
- max-width: 56rem;
83
- margin: 0 auto;
84
- color: var(--tr-text);
85
- }
86
-
87
- .tr-card {
88
- background: var(--tr-surface);
89
- border: 1px solid var(--tr-border);
90
- border-radius: 1.5rem;
91
- padding: 2rem;
92
- box-shadow: 0 20px 40px -10px rgba(0, 0, 0, 0.1);
93
- display: flex;
94
- flex-direction: column;
95
- gap: 1.5rem;
96
- }
97
-
98
- .tr-header {
99
- display: flex;
100
- justify-content: space-between;
101
- align-items: center;
102
- gap: 1rem;
103
- flex-wrap: wrap;
104
- }
105
-
106
- .tr-header-info {
107
- display: flex;
108
- flex-direction: column;
109
- gap: 0.25rem;
110
- }
111
-
112
- .tr-badge {
113
- display: inline-flex;
114
- align-items: center;
115
- gap: 0.5rem;
116
- padding: 0.25rem 0.75rem;
117
- border-radius: 9999px;
118
- background: rgba(16, 185, 129, 0.1);
119
- color: var(--tr-accent);
120
- font-size: 0.75rem;
121
- font-weight: 700;
122
- text-transform: uppercase;
123
- letter-spacing: 0.05em;
124
- }
125
-
126
- .tr-badge-icon {
127
- width: 1rem;
128
- height: 1rem;
129
- }
130
-
131
- .tr-title {
132
- margin: 0;
133
- font-size: 1.875rem;
134
- font-weight: 900;
135
- letter-spacing: -0.02em;
136
- }
137
-
138
- .tr-description {
139
- margin: 0;
140
- color: var(--tr-text-muted);
141
- }
142
-
143
- .tr-stats {
144
- display: flex;
145
- gap: 1rem;
146
- }
147
-
148
- .tr-stat {
149
- background: var(--tr-surface-alt);
150
- border-radius: 1rem;
151
- padding: 1rem;
152
- min-width: 7.5rem;
153
- text-align: center;
154
- }
155
-
156
- .tr-stat-label {
157
- font-size: 0.75rem;
158
- font-weight: 700;
159
- color: var(--tr-text-muted);
160
- text-transform: uppercase;
161
- letter-spacing: 0.05em;
162
- }
163
-
164
- .tr-stat-value {
165
- display: flex;
166
- align-items: baseline;
167
- justify-content: center;
168
- gap: 0.25rem;
169
- font-size: 2.25rem;
170
- font-weight: 900;
171
- color: var(--tr-accent);
172
- }
173
-
174
- .tr-stat-unit {
175
- font-size: 1rem;
176
- color: var(--tr-text-muted);
177
- }
178
-
179
- .tr-area {
180
- position: relative;
181
- width: 100%;
182
- height: 400px;
183
- background: var(--tr-surface-alt);
184
- border-radius: 1rem;
185
- border: 2px dashed var(--tr-border);
186
- overflow: hidden;
187
- cursor: crosshair;
188
- display: flex;
189
- align-items: center;
190
- justify-content: center;
191
- }
192
-
193
- .tr-placeholder {
194
- color: var(--tr-border);
195
- font-weight: 700;
196
- font-size: 1.25rem;
197
- pointer-events: none;
198
- transition: opacity 200ms;
199
- }
200
-
201
- .tr-canvas {
202
- position: absolute;
203
- inset: 0;
204
- width: 100%;
205
- height: 100%;
206
- opacity: 0.6;
207
- }
208
-
209
- .tr-follower {
210
- position: absolute;
211
- pointer-events: none;
212
- background: var(--tr-accent);
213
- color: #fff;
214
- font-size: 0.75rem;
215
- font-weight: 700;
216
- padding: 0.25rem 0.5rem;
217
- border-radius: 9999px;
218
- box-shadow: 0 4px 10px var(--tr-accent-glow);
219
- opacity: 0;
220
- transition: opacity 75ms;
221
- transform: translate(0, 0);
222
- }
223
- </style>
224
-
54
+
225
55
  <script>
226
56
  import { RatonManager } from './logic/RatonManager';
227
57
 
@@ -0,0 +1,143 @@
1
+ .tr-wrapper {
2
+ width: 100%;
3
+ max-width: 56rem;
4
+ margin: 0 auto;
5
+ color: var(--tr-text);
6
+ }
7
+
8
+ .tr-card {
9
+ background: var(--tr-surface);
10
+ border: 1px solid var(--tr-border);
11
+ border-radius: 1.5rem;
12
+ padding: 2rem;
13
+ box-shadow: 0 20px 40px -10px rgba(0, 0, 0, 0.1);
14
+ display: flex;
15
+ flex-direction: column;
16
+ gap: 1.5rem;
17
+ }
18
+
19
+ .tr-header {
20
+ display: flex;
21
+ justify-content: space-between;
22
+ align-items: center;
23
+ gap: 1rem;
24
+ flex-wrap: wrap;
25
+ }
26
+
27
+ .tr-header-info {
28
+ display: flex;
29
+ flex-direction: column;
30
+ gap: 0.25rem;
31
+ }
32
+
33
+ .tr-badge {
34
+ display: inline-flex;
35
+ align-items: center;
36
+ gap: 0.5rem;
37
+ padding: 0.25rem 0.75rem;
38
+ border-radius: 9999px;
39
+ background: rgba(16, 185, 129, 0.1);
40
+ color: var(--tr-accent);
41
+ font-size: 0.75rem;
42
+ font-weight: 700;
43
+ text-transform: uppercase;
44
+ letter-spacing: 0.05em;
45
+ }
46
+
47
+ .tr-badge-icon {
48
+ width: 1rem;
49
+ height: 1rem;
50
+ }
51
+
52
+ .tr-title {
53
+ margin: 0;
54
+ font-size: 1.875rem;
55
+ font-weight: 900;
56
+ letter-spacing: -0.02em;
57
+ }
58
+
59
+ .tr-description {
60
+ margin: 0;
61
+ color: var(--tr-text-muted);
62
+ }
63
+
64
+ .tr-stats {
65
+ display: flex;
66
+ gap: 1rem;
67
+ }
68
+
69
+ .tr-stat {
70
+ background: var(--tr-surface-alt);
71
+ border-radius: 1rem;
72
+ padding: 1rem;
73
+ min-width: 7.5rem;
74
+ text-align: center;
75
+ }
76
+
77
+ .tr-stat-label {
78
+ font-size: 0.75rem;
79
+ font-weight: 700;
80
+ color: var(--tr-text-muted);
81
+ text-transform: uppercase;
82
+ letter-spacing: 0.05em;
83
+ }
84
+
85
+ .tr-stat-value {
86
+ display: flex;
87
+ align-items: baseline;
88
+ justify-content: center;
89
+ gap: 0.25rem;
90
+ font-size: 2.25rem;
91
+ font-weight: 900;
92
+ color: var(--tr-accent);
93
+ }
94
+
95
+ .tr-stat-unit {
96
+ font-size: 1rem;
97
+ color: var(--tr-text-muted);
98
+ }
99
+
100
+ .tr-area {
101
+ position: relative;
102
+ width: 100%;
103
+ height: 400px;
104
+ background: var(--tr-surface-alt);
105
+ border-radius: 1rem;
106
+ border: 2px dashed var(--tr-border);
107
+ overflow: hidden;
108
+ cursor: crosshair;
109
+ display: flex;
110
+ align-items: center;
111
+ justify-content: center;
112
+ }
113
+
114
+ .tr-placeholder {
115
+ color: var(--tr-border);
116
+ font-weight: 700;
117
+ font-size: 1.25rem;
118
+ pointer-events: none;
119
+ transition: opacity 200ms;
120
+ }
121
+
122
+ .tr-canvas {
123
+ position: absolute;
124
+ inset: 0;
125
+ width: 100%;
126
+ height: 100%;
127
+ opacity: 0.6;
128
+ }
129
+
130
+ .tr-follower {
131
+ position: absolute;
132
+ pointer-events: none;
133
+ background: var(--tr-accent);
134
+ color: #fff;
135
+ font-size: 0.75rem;
136
+ font-weight: 700;
137
+ padding: 0.25rem 0.5rem;
138
+ border-radius: 9999px;
139
+ box-shadow: 0 4px 10px var(--tr-accent-glow);
140
+ opacity: 0;
141
+ transition: opacity 75ms;
142
+ transform: translate(0, 0);
143
+ }
@@ -16,68 +16,7 @@ const S = JSON.stringify({ bp: t.btnPlay, bs: t.btnStop });
16
16
 
17
17
  <div id="tg-root" class="tg-wrapper" data-s={S}>
18
18
 
19
- <style is:global>
20
- .tg-wrapper {
21
- --tg-accent: #e11d48;
22
- --tg-accent-glow: rgba(225, 29, 72, 0.3);
23
- --tg-canvas-line: #f43f5e;
24
- --tg-btn-bg: #e11d48;
25
- --tg-btn-stop-bg: #1e293b;
26
- --tg-surface: #fff;
27
- --tg-surface-alt: #f8fafc;
28
- --tg-border: #e2e8f0;
29
- --tg-text: #0f172a;
30
- --tg-text-muted: #64748b;
31
- --tg-text-faint: #94a3b8;
32
- }
33
-
34
- .theme-dark .tg-wrapper {
35
- --tg-btn-stop-bg: #27272a;
36
- --tg-surface: #09090b;
37
- --tg-surface-alt: #18181b;
38
- --tg-border: #27272a;
39
- --tg-text: #fafafa;
40
- --tg-text-muted: #a1a1aa;
41
- --tg-text-faint: #52525b;
42
- }
43
-
44
- .tg-wave-btn[data-active='true'] {
45
- background: var(--tg-accent);
46
- color: #fff;
47
- box-shadow: 0 4px 14px var(--tg-accent-glow);
48
- }
49
-
50
- #tg-toggle[data-playing='true'] {
51
- background: var(--tg-btn-stop-bg);
52
- box-shadow: none;
53
- }
54
-
55
- #tg-play-icon {
56
- display: inline-flex;
57
- }
58
-
59
- #tg-stop-icon {
60
- display: none;
61
- }
62
-
63
- #tg-toggle[data-playing='true'] #tg-play-icon {
64
- display: none;
65
- }
66
-
67
- #tg-toggle[data-playing='true'] #tg-stop-icon {
68
- display: inline-flex;
69
- }
70
-
71
- @keyframes tg-pulse {
72
- 0%, 100% { opacity: 1; }
73
- 50% { opacity: 0.4; }
74
- }
75
-
76
- body.is-widget .tg-wrapper {
77
- padding: 0;
78
- }
79
- </style>
80
-
19
+
81
20
  <div class="tg-card">
82
21
 
83
22
  <div class="tg-header">
@@ -155,274 +94,7 @@ const S = JSON.stringify({ bp: t.btnPlay, bs: t.btnStop });
155
94
  </div>
156
95
  </div>
157
96
 
158
- <style>
159
- .tg-wrapper {
160
- width: 100%;
161
- color: var(--tg-text);
162
- }
163
-
164
- .tg-card {
165
- background: var(--tg-surface);
166
- border: 1px solid var(--tg-border);
167
- border-radius: 1.5rem;
168
- padding: 2rem;
169
- display: flex;
170
- flex-direction: column;
171
- gap: 2rem;
172
- }
173
-
174
- .tg-header {
175
- display: flex;
176
- align-items: center;
177
- gap: 1rem;
178
- }
179
-
180
- .tg-icon-wrap {
181
- flex-shrink: 0;
182
- padding: 0.75rem;
183
- background: rgba(225, 29, 72, 0.1);
184
- color: var(--tg-accent);
185
- border-radius: 1rem;
186
- }
187
-
188
- .tg-icon {
189
- width: 2rem;
190
- height: 2rem;
191
- }
192
-
193
- .tg-header-text {
194
- display: flex;
195
- flex-direction: column;
196
- gap: 0.125rem;
197
- }
198
-
199
- .tg-badge {
200
- display: inline-block;
201
- font-size: 0.625rem;
202
- font-weight: 900;
203
- text-transform: uppercase;
204
- letter-spacing: 0.12em;
205
- color: var(--tg-accent);
206
- background: rgba(225, 29, 72, 0.08);
207
- border: 1px solid rgba(225, 29, 72, 0.2);
208
- padding: 0.2rem 0.6rem;
209
- border-radius: 9999px;
210
- width: fit-content;
211
- }
212
-
213
- .tg-title {
214
- font-size: 1.75rem;
215
- font-weight: 900;
216
- letter-spacing: -0.02em;
217
- margin: 0;
218
- color: var(--tg-text);
219
- }
220
-
221
- .tg-desc {
222
- font-size: 0.875rem;
223
- color: var(--tg-text-muted);
224
- margin: 0;
225
- }
226
-
227
- .tg-canvas-wrap {
228
- position: relative;
229
- width: 100%;
230
- height: 12rem;
231
- background: #000;
232
- border-radius: 1rem;
233
- overflow: hidden;
234
- border: 1px solid #111;
235
- }
236
-
237
- .tg-canvas {
238
- width: 100%;
239
- height: 100%;
240
- }
241
-
242
- .tg-hz-display {
243
- position: absolute;
244
- top: 1rem;
245
- right: 1rem;
246
- font-size: 0.75rem;
247
- color: #f43f5e;
248
- letter-spacing: 0.05em;
249
- animation: tg-pulse 2s ease-in-out infinite;
250
- }
251
-
252
- .tg-controls {
253
- display: flex;
254
- flex-direction: column;
255
- gap: 2rem;
256
- }
257
-
258
- .tg-section {
259
- display: flex;
260
- flex-direction: column;
261
- gap: 0.5rem;
262
- }
263
-
264
- .tg-section-header {
265
- display: flex;
266
- justify-content: space-between;
267
- align-items: center;
268
- }
269
-
270
- .tg-label {
271
- font-size: 0.7rem;
272
- font-weight: 800;
273
- text-transform: uppercase;
274
- letter-spacing: 0.1em;
275
- color: var(--tg-text-muted);
276
- }
277
-
278
- .tg-presets {
279
- display: flex;
280
- gap: 0.375rem;
281
- }
282
-
283
- .tg-preset {
284
- padding: 0.25rem 0.5rem;
285
- background: var(--tg-surface-alt);
286
- border: 1px solid var(--tg-border);
287
- border-radius: 0.375rem;
288
- font-size: 0.75rem;
289
- color: var(--tg-text-muted);
290
- cursor: pointer;
291
- transition: background 150ms, color 150ms;
292
- }
293
-
294
- .tg-preset:hover {
295
- background: var(--tg-border);
296
- color: var(--tg-text);
297
- }
298
-
299
- .tg-slider {
300
- -webkit-appearance: none;
301
- appearance: none;
302
- width: 100%;
303
- height: 6px;
304
- background: var(--tg-border);
305
- border-radius: 3px;
306
- outline: none;
307
- accent-color: var(--tg-accent);
308
- }
309
-
310
- .tg-slider::-webkit-slider-thumb {
311
- -webkit-appearance: none;
312
- appearance: none;
313
- width: 18px;
314
- height: 18px;
315
- background: var(--tg-accent);
316
- border-radius: 50%;
317
- cursor: pointer;
318
- border: 4px solid var(--tg-surface);
319
- box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
320
- }
321
-
322
- .tg-range-hints {
323
- display: flex;
324
- justify-content: space-between;
325
- font-size: 0.625rem;
326
- color: var(--tg-text-faint);
327
- letter-spacing: 0.02em;
328
- }
329
-
330
- .tg-two-col {
331
- display: grid;
332
- grid-template-columns: 1fr 1fr;
333
- gap: 2rem;
334
- }
335
-
336
- @media (max-width: 640px) {
337
- .tg-two-col {
338
- grid-template-columns: 1fr;
339
- }
340
- }
341
-
342
- .tg-wave-grid {
343
- display: grid;
344
- grid-template-columns: repeat(4, 1fr);
345
- gap: 0.5rem;
346
- }
347
-
348
- .tg-wave-btn {
349
- padding: 0.75rem;
350
- border-radius: 0.75rem;
351
- background: var(--tg-surface-alt);
352
- border: 1px solid var(--tg-border);
353
- color: var(--tg-text-muted);
354
- cursor: pointer;
355
- transition: background 150ms, color 150ms, box-shadow 150ms;
356
- display: flex;
357
- align-items: center;
358
- justify-content: center;
359
- }
360
-
361
- .tg-wave-btn:hover {
362
- background: var(--tg-border);
363
- color: var(--tg-text);
364
- }
365
-
366
- .tg-wave-icon {
367
- width: 1.5rem;
368
- height: 1.5rem;
369
- }
370
-
371
- .tg-vol-row {
372
- display: flex;
373
- align-items: center;
374
- gap: 0.75rem;
375
- background: var(--tg-surface-alt);
376
- border: 1px solid var(--tg-border);
377
- border-radius: 0.75rem;
378
- padding: 0.75rem;
379
- }
380
-
381
- .tg-vol-icon {
382
- width: 1.25rem;
383
- height: 1.25rem;
384
- color: var(--tg-text-faint);
385
- flex-shrink: 0;
386
- }
387
-
388
- .tg-vol-slider {
389
- height: 4px;
390
- }
391
-
392
- .tg-toggle-btn {
393
- width: 100%;
394
- padding: 1.5rem;
395
- border-radius: 1rem;
396
- background: var(--tg-btn-bg);
397
- border: none;
398
- color: #fff;
399
- font-size: 1.125rem;
400
- font-weight: 900;
401
- letter-spacing: 0.05em;
402
- cursor: pointer;
403
- display: flex;
404
- align-items: center;
405
- justify-content: center;
406
- gap: 0.75rem;
407
- box-shadow: 0 8px 24px var(--tg-accent-glow);
408
- transition: background 200ms, box-shadow 200ms, transform 100ms;
409
- }
410
-
411
- .tg-toggle-btn:active {
412
- transform: scale(0.98);
413
- }
414
-
415
- .tg-btn-icon {
416
- display: inherit;
417
- align-items: center;
418
- }
419
-
420
- .tg-toggle-icon {
421
- width: 1.75rem;
422
- height: 1.75rem;
423
- }
424
- </style>
425
-
97
+
426
98
  <script>
427
99
  const root = document.getElementById('tg-root');
428
100
  const S: Record<string, string> = JSON.parse(root?.dataset?.s ?? '{}');