@marineyachtradar/signalk-playback-plugin 0.1.1 → 0.2.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.
@@ -0,0 +1,538 @@
1
+ /* ============================================
2
+ Controls - All interactive radar controls
3
+ ============================================ */
4
+
5
+ /* Basic control wrappers */
6
+ div.myr_control {
7
+ display: block;
8
+ border-style: solid;
9
+ border-width: 1px;
10
+ margin: 2px;
11
+ border-radius: 1px;
12
+ border-color: white;
13
+ }
14
+
15
+ div.myr_readonly {
16
+ color: rgb(124, 124, 237);
17
+ }
18
+
19
+ div.myr_description {
20
+ z-index: 10;
21
+ display: block;
22
+ float: right;
23
+ right:0;
24
+ top:0;
25
+ }
26
+
27
+ div.myr_button {
28
+ display: block;
29
+ }
30
+
31
+ div.myr_button::after {
32
+ content: "";
33
+ clear: both;
34
+ display: table;
35
+ }
36
+
37
+ label.myr_auto_label,label.myr_enabled_label,input.myr_auto,input.myr_enabled {
38
+ float: left;
39
+ }
40
+
41
+ /* Power buttons container */
42
+ div.myr_power_buttons {
43
+ display: flex;
44
+ gap: 8px;
45
+ margin: 8px 2px;
46
+ padding: 4px;
47
+ box-sizing: border-box;
48
+ max-width: 100%;
49
+ }
50
+
51
+ /* Power buttons styling */
52
+ .myr_power_button {
53
+ flex: 1;
54
+ min-width: 0;
55
+ padding: 10px 6px;
56
+ font-size: 13px;
57
+ font-weight: bold;
58
+ border: 2px solid #444;
59
+ border-radius: 4px;
60
+ cursor: pointer;
61
+ transition: all 0.2s ease;
62
+ background-color: #222;
63
+ color: #888;
64
+ box-sizing: border-box;
65
+ overflow: hidden;
66
+ text-overflow: ellipsis;
67
+ white-space: nowrap;
68
+ }
69
+
70
+ .myr_power_button:hover {
71
+ border-color: #666;
72
+ background-color: #333;
73
+ }
74
+
75
+ .myr_power_button_transmit.myr_power_active {
76
+ background-color: #1a4d1a;
77
+ border-color: #2d8a2d;
78
+ color: #4dff4d;
79
+ }
80
+
81
+ .myr_power_button_standby.myr_power_active {
82
+ background-color: #4d4d1a;
83
+ border-color: #8a8a2d;
84
+ color: #ffff4d;
85
+ }
86
+
87
+ /* Range buttons container */
88
+ div.myr_range_buttons {
89
+ display: flex;
90
+ gap: 8px;
91
+ margin: 8px 2px;
92
+ padding: 4px;
93
+ box-sizing: border-box;
94
+ max-width: 100%;
95
+ }
96
+
97
+ /* Range buttons styling */
98
+ .myr_range_button {
99
+ flex: 1;
100
+ min-width: 0;
101
+ padding: 10px 6px;
102
+ font-size: 13px;
103
+ font-weight: bold;
104
+ border: 2px solid #446;
105
+ border-radius: 4px;
106
+ cursor: pointer;
107
+ transition: all 0.2s ease;
108
+ background-color: #224;
109
+ color: #8af;
110
+ box-sizing: border-box;
111
+ overflow: hidden;
112
+ text-overflow: ellipsis;
113
+ white-space: nowrap;
114
+ }
115
+
116
+ .myr_range_button:hover {
117
+ border-color: #668;
118
+ background-color: #336;
119
+ }
120
+
121
+ .myr_range_button:active {
122
+ background-color: #448;
123
+ }
124
+
125
+ /* Range display */
126
+ .myr_range_display {
127
+ flex: 1;
128
+ text-align: center;
129
+ font-size: 16px;
130
+ font-weight: bold;
131
+ color: #8cf;
132
+ padding: 8px;
133
+ }
134
+
135
+ /* Clutter controls (Gain/Sea/Rain) */
136
+ .myr_clutter_control {
137
+ margin: 8px 2px;
138
+ padding: 6px 8px;
139
+ border: 1px solid #446;
140
+ border-radius: 4px;
141
+ background-color: #112;
142
+ }
143
+
144
+ .myr_clutter_header {
145
+ display: flex;
146
+ justify-content: space-between;
147
+ align-items: center;
148
+ margin-bottom: 6px;
149
+ }
150
+
151
+ .myr_clutter_label {
152
+ font-weight: bold;
153
+ color: #8cf;
154
+ font-size: 13px;
155
+ }
156
+
157
+ .myr_auto_checkbox {
158
+ display: flex;
159
+ align-items: center;
160
+ gap: 4px;
161
+ font-size: 12px;
162
+ color: #888;
163
+ cursor: pointer;
164
+ }
165
+
166
+ .myr_auto_checkbox input[type="checkbox"] {
167
+ width: 16px;
168
+ height: 16px;
169
+ cursor: pointer;
170
+ accent-color: #4a8;
171
+ }
172
+
173
+ .myr_clutter_slider {
174
+ width: 100%;
175
+ height: 20px;
176
+ background-color: #224;
177
+ border-radius: 4px;
178
+ cursor: pointer;
179
+ accent-color: #4a8;
180
+ }
181
+
182
+ .myr_clutter_slider:disabled {
183
+ opacity: 0.4;
184
+ cursor: not-allowed;
185
+ }
186
+
187
+ /* ============================================
188
+ Capabilities-Driven Control Panel v5
189
+ ============================================ */
190
+
191
+ /* Control sections */
192
+ .myr_control_section {
193
+ margin: 8px 0;
194
+ padding: 4px;
195
+ }
196
+
197
+ .myr_section_header {
198
+ font-size: 13px;
199
+ font-weight: bold;
200
+ color: rgb(100, 200, 180);
201
+ padding: 8px 4px;
202
+ border-bottom: 1px solid rgba(100, 200, 180, 0.3);
203
+ margin-bottom: 8px;
204
+ }
205
+
206
+ .myr_extended_section {
207
+ margin-top: 16px;
208
+ padding-top: 8px;
209
+ border-top: 1px solid rgba(100, 200, 180, 0.2);
210
+ }
211
+
212
+ .myr_info_section {
213
+ margin-top: 16px;
214
+ padding-top: 8px;
215
+ border-top: 1px solid rgba(100, 200, 180, 0.2);
216
+ }
217
+
218
+ /* Generic control wrapper */
219
+ .myr_control {
220
+ margin: 8px 2px;
221
+ padding: 8px;
222
+ border: 1px solid #446;
223
+ border-radius: 4px;
224
+ background-color: #112;
225
+ }
226
+
227
+ .myr_control_header {
228
+ display: flex;
229
+ justify-content: space-between;
230
+ align-items: center;
231
+ margin-bottom: 6px;
232
+ }
233
+
234
+ .myr_control_label {
235
+ font-weight: bold;
236
+ color: #8cf;
237
+ font-size: 13px;
238
+ }
239
+
240
+ .myr_control_value {
241
+ font-size: 13px;
242
+ color: #adf;
243
+ font-weight: bold;
244
+ }
245
+
246
+ /* Range control with display */
247
+ .myr_range_control {
248
+ margin: 8px 2px;
249
+ }
250
+
251
+ /* Generic slider */
252
+ .myr_slider {
253
+ width: 100%;
254
+ height: 24px;
255
+ background-color: #224;
256
+ border-radius: 4px;
257
+ cursor: pointer;
258
+ accent-color: #4a8;
259
+ -webkit-appearance: none;
260
+ appearance: none;
261
+ }
262
+
263
+ .myr_slider::-webkit-slider-thumb {
264
+ -webkit-appearance: none;
265
+ width: 24px;
266
+ height: 24px;
267
+ background: #4a8;
268
+ border-radius: 50%;
269
+ cursor: pointer;
270
+ }
271
+
272
+ .myr_slider::-moz-range-thumb {
273
+ width: 24px;
274
+ height: 24px;
275
+ background: #4a8;
276
+ border-radius: 50%;
277
+ cursor: pointer;
278
+ border: none;
279
+ }
280
+
281
+ .myr_slider:disabled {
282
+ opacity: 0.4;
283
+ cursor: not-allowed;
284
+ }
285
+
286
+ /* Boolean toggle button */
287
+ .myr_boolean_control {
288
+ display: flex;
289
+ flex-direction: column;
290
+ align-items: center;
291
+ gap: 6px;
292
+ text-align: center;
293
+ }
294
+
295
+ .myr_boolean_control .myr_toggle_button {
296
+ align-self: center;
297
+ }
298
+
299
+ .myr_toggle_button {
300
+ padding: 8px 16px;
301
+ font-size: 13px;
302
+ font-weight: bold;
303
+ border: 2px solid #444;
304
+ border-radius: 4px;
305
+ cursor: pointer;
306
+ transition: all 0.2s ease;
307
+ background-color: #222;
308
+ color: #888;
309
+ min-width: 60px;
310
+ }
311
+
312
+ .myr_toggle_button:hover {
313
+ border-color: #666;
314
+ background-color: #333;
315
+ }
316
+
317
+ .myr_toggle_button.myr_toggle_active {
318
+ background-color: #1a4d1a;
319
+ border-color: #2d8a2d;
320
+ color: #4dff4d;
321
+ }
322
+
323
+ /* Enum control - button group */
324
+ .myr_enum_control {
325
+ display: flex;
326
+ flex-direction: column;
327
+ gap: 6px;
328
+ }
329
+
330
+ .myr_button_group {
331
+ display: flex;
332
+ flex-wrap: wrap;
333
+ gap: 4px;
334
+ }
335
+
336
+ .myr_enum_button {
337
+ flex: 1;
338
+ min-width: 50px;
339
+ padding: 8px 6px;
340
+ font-size: 12px;
341
+ font-weight: bold;
342
+ border: 2px solid #446;
343
+ border-radius: 4px;
344
+ cursor: pointer;
345
+ transition: all 0.2s ease;
346
+ background-color: #223;
347
+ color: #8af;
348
+ }
349
+
350
+ .myr_enum_button:hover {
351
+ border-color: #668;
352
+ background-color: #334;
353
+ }
354
+
355
+ .myr_enum_button.myr_enum_active {
356
+ background-color: #246;
357
+ border-color: #48c;
358
+ color: #adf;
359
+ }
360
+
361
+ /* Compound control (e.g., gain with auto/manual) */
362
+ .myr_compound_control {
363
+ display: flex;
364
+ flex-direction: column;
365
+ }
366
+
367
+ .myr_compound_header {
368
+ display: flex;
369
+ justify-content: space-between;
370
+ align-items: center;
371
+ margin-bottom: 8px;
372
+ }
373
+
374
+ .myr_compound_body {
375
+ display: flex;
376
+ flex-direction: column;
377
+ gap: 8px;
378
+ }
379
+
380
+ .myr_mode_buttons {
381
+ display: flex;
382
+ flex-wrap: nowrap;
383
+ gap: 4px;
384
+ }
385
+
386
+ /* 3-button mode selector (e.g., Doppler: Off/Target/Rain) - wrap to 2 rows */
387
+ .myr_mode_buttons_3 {
388
+ flex-wrap: wrap;
389
+ }
390
+
391
+ .myr_mode_buttons_3 .myr_mode_button {
392
+ flex: 1 1 calc(50% - 2px);
393
+ }
394
+
395
+ .myr_mode_button {
396
+ flex: 1 1 auto;
397
+ min-width: 60px;
398
+ padding: 8px 10px;
399
+ font-size: 12px;
400
+ font-weight: bold;
401
+ border: 2px solid #454;
402
+ border-radius: 4px;
403
+ cursor: pointer;
404
+ transition: all 0.2s ease;
405
+ background-color: #232;
406
+ color: #8a8;
407
+ }
408
+
409
+ .myr_mode_button:hover {
410
+ border-color: #676;
411
+ background-color: #343;
412
+ }
413
+
414
+ .myr_mode_button.myr_mode_active {
415
+ background-color: #254;
416
+ border-color: #4a8;
417
+ color: #8f8;
418
+ }
419
+
420
+ .myr_compound_slider {
421
+ margin-top: 4px;
422
+ }
423
+
424
+ /* Info control (read-only) */
425
+ .myr_info_control {
426
+ display: flex;
427
+ justify-content: space-between;
428
+ align-items: center;
429
+ background-color: #0a0a12;
430
+ border-color: #334;
431
+ }
432
+
433
+ .myr_info_value {
434
+ font-size: 13px;
435
+ color: rgb(124, 124, 237);
436
+ font-family: 'Consolas', 'Monaco', monospace;
437
+ }
438
+
439
+ /* Number control */
440
+ .myr_number_control {
441
+ display: flex;
442
+ flex-direction: column;
443
+ }
444
+
445
+ /* Radar info header */
446
+ .myr_radar_info_header {
447
+ display: flex;
448
+ flex-wrap: wrap;
449
+ gap: 8px 16px;
450
+ padding: 8px;
451
+ margin-bottom: 8px;
452
+ background-color: #0a0a12;
453
+ border: 1px solid #334;
454
+ border-radius: 4px;
455
+ font-size: 12px;
456
+ }
457
+
458
+ .myr_radar_info_item {
459
+ display: flex;
460
+ gap: 4px;
461
+ }
462
+
463
+ .myr_info_label {
464
+ color: #888;
465
+ }
466
+
467
+ /* No-Transmit Zones control */
468
+ .myr_ntz_control {
469
+ display: flex;
470
+ flex-direction: column;
471
+ }
472
+
473
+ .myr_ntz_zones {
474
+ display: flex;
475
+ flex-direction: column;
476
+ gap: 8px;
477
+ margin-top: 8px;
478
+ }
479
+
480
+ .myr_ntz_zone {
481
+ padding: 8px;
482
+ background-color: #1a1a24;
483
+ border-radius: 4px;
484
+ border: 1px solid #334;
485
+ }
486
+
487
+ .myr_ntz_zone_header {
488
+ margin-bottom: 8px;
489
+ }
490
+
491
+ .myr_checkbox_label {
492
+ display: flex;
493
+ align-items: center;
494
+ gap: 6px;
495
+ font-size: 13px;
496
+ color: #8cf;
497
+ cursor: pointer;
498
+ }
499
+
500
+ .myr_checkbox_label input[type="checkbox"] {
501
+ width: 18px;
502
+ height: 18px;
503
+ cursor: pointer;
504
+ accent-color: #4a8;
505
+ }
506
+
507
+ .myr_ntz_angles {
508
+ display: flex;
509
+ gap: 12px;
510
+ }
511
+
512
+ .myr_ntz_angle {
513
+ display: flex;
514
+ flex-direction: column;
515
+ gap: 4px;
516
+ flex: 1;
517
+ }
518
+
519
+ .myr_ntz_angle label {
520
+ font-size: 11px;
521
+ color: #888;
522
+ }
523
+
524
+ .myr_ntz_angle input[type="number"] {
525
+ width: 100%;
526
+ padding: 6px 8px;
527
+ font-size: 14px;
528
+ background-color: #224;
529
+ border: 1px solid #446;
530
+ border-radius: 4px;
531
+ color: #adf;
532
+ box-sizing: border-box;
533
+ }
534
+
535
+ .myr_ntz_angle input[type="number"]:disabled {
536
+ opacity: 0.4;
537
+ cursor: not-allowed;
538
+ }