homebridge-sonos-scenes 0.1.5 → 0.1.6
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.
package/README.md
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="docs/assets/homebridge-sonos-scenes-icon-512x512.png" alt="homebridge-sonos-scenes icon" width="164">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">homebridge-sonos-scenes</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">Homebridge plugin for Sonos workflow scenes and orchestration.</p>
|
|
2
8
|
|
|
3
9
|
`homebridge-sonos-scenes` is a Homebridge plugin scaffold for Sonos workflow scenes.
|
|
4
10
|
|
|
Binary file
|
|
Binary file
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
border: 1px solid rgba(22, 32, 51, 0.08);
|
|
38
38
|
box-shadow: 0 8px 24px rgba(15, 23, 42, 0.05);
|
|
39
39
|
background: white;
|
|
40
|
-
overflow:
|
|
40
|
+
overflow: visible;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
.scene-mode-panel .card-header {
|
|
@@ -45,6 +45,34 @@
|
|
|
45
45
|
background: rgba(255, 255, 255, 0.65);
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
+
.scene-section-header {
|
|
49
|
+
display: flex;
|
|
50
|
+
flex-wrap: wrap;
|
|
51
|
+
align-items: flex-start;
|
|
52
|
+
justify-content: space-between;
|
|
53
|
+
gap: 0.85rem 1rem;
|
|
54
|
+
padding: 1rem 1.15rem;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.scene-section-header-copy {
|
|
58
|
+
display: grid;
|
|
59
|
+
gap: 0.35rem;
|
|
60
|
+
min-width: 0;
|
|
61
|
+
flex: 1 1 260px;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.scene-section-actions {
|
|
65
|
+
display: flex;
|
|
66
|
+
flex-wrap: wrap;
|
|
67
|
+
gap: 0.65rem;
|
|
68
|
+
align-items: center;
|
|
69
|
+
justify-content: flex-end;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.scene-section-actions .btn {
|
|
73
|
+
white-space: nowrap;
|
|
74
|
+
}
|
|
75
|
+
|
|
48
76
|
.scene-mode-panel .card-body {
|
|
49
77
|
display: grid;
|
|
50
78
|
gap: 1rem;
|
|
@@ -66,6 +94,8 @@
|
|
|
66
94
|
|
|
67
95
|
.scene-mode-choice input {
|
|
68
96
|
margin-right: 0.65rem;
|
|
97
|
+
accent-color: var(--scene-accent);
|
|
98
|
+
transform: scale(1.08);
|
|
69
99
|
}
|
|
70
100
|
|
|
71
101
|
.scene-mode-choice-title {
|
|
@@ -148,7 +178,7 @@
|
|
|
148
178
|
|
|
149
179
|
.scene-card .scene-help,
|
|
150
180
|
.scene-mode-panel .scene-help {
|
|
151
|
-
color: #
|
|
181
|
+
color: #556579;
|
|
152
182
|
}
|
|
153
183
|
|
|
154
184
|
.scene-list button {
|
|
@@ -334,7 +364,7 @@
|
|
|
334
364
|
}
|
|
335
365
|
|
|
336
366
|
.scene-inline-note {
|
|
337
|
-
color: #
|
|
367
|
+
color: #5f6f84;
|
|
338
368
|
font-size: 0.88rem;
|
|
339
369
|
line-height: 1.45;
|
|
340
370
|
}
|
|
@@ -344,10 +374,10 @@
|
|
|
344
374
|
align-items: center;
|
|
345
375
|
gap: 0.4rem;
|
|
346
376
|
flex-wrap: wrap;
|
|
377
|
+
position: relative;
|
|
347
378
|
}
|
|
348
379
|
|
|
349
380
|
.scene-info-tag {
|
|
350
|
-
position: relative;
|
|
351
381
|
display: inline-flex;
|
|
352
382
|
align-items: center;
|
|
353
383
|
justify-content: center;
|
|
@@ -370,10 +400,11 @@
|
|
|
370
400
|
|
|
371
401
|
.scene-tooltip {
|
|
372
402
|
position: absolute;
|
|
373
|
-
top:
|
|
374
|
-
left:
|
|
375
|
-
transform:
|
|
376
|
-
width: min(320px,
|
|
403
|
+
top: calc(100% + 0.45rem);
|
|
404
|
+
left: 0;
|
|
405
|
+
transform: none;
|
|
406
|
+
width: min(320px, calc(100vw - 4rem));
|
|
407
|
+
max-width: 100%;
|
|
377
408
|
padding: 0.65rem 0.75rem;
|
|
378
409
|
border-radius: 0.7rem;
|
|
379
410
|
border: 1px solid rgba(170, 198, 255, 0.28);
|
|
@@ -400,15 +431,6 @@
|
|
|
400
431
|
grid-template-columns: 1fr;
|
|
401
432
|
}
|
|
402
433
|
}
|
|
403
|
-
|
|
404
|
-
@media (max-width: 720px) {
|
|
405
|
-
.scene-tooltip {
|
|
406
|
-
top: calc(100% + 0.45rem);
|
|
407
|
-
left: 0;
|
|
408
|
-
transform: none;
|
|
409
|
-
width: min(280px, 78vw);
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
434
|
</style>
|
|
413
435
|
|
|
414
436
|
<div class="scene-shell">
|
|
@@ -444,12 +466,11 @@
|
|
|
444
466
|
|
|
445
467
|
<section class="scene-mode-grid">
|
|
446
468
|
<section class="scene-mode-panel card scene-card">
|
|
447
|
-
<div class="card-header
|
|
448
|
-
<div>
|
|
469
|
+
<div class="card-header scene-section-header">
|
|
470
|
+
<div class="scene-section-header-copy">
|
|
449
471
|
<strong>Execution Mode</strong>
|
|
450
472
|
<div class="scene-help">Choose whether scenes stay fully local or can use a self-hosted Sonos cloud broker later.</div>
|
|
451
473
|
</div>
|
|
452
|
-
<div id="cloud-mode-pill" class="scene-status-pill local">Local Only</div>
|
|
453
474
|
</div>
|
|
454
475
|
<div class="card-body d-grid gap-3">
|
|
455
476
|
<label class="scene-mode-choice" data-mode-choice="local_only">
|
|
@@ -539,13 +560,15 @@
|
|
|
539
560
|
|
|
540
561
|
<div class="scene-grid">
|
|
541
562
|
<section class="card scene-card">
|
|
542
|
-
<div class="card-header
|
|
543
|
-
<div>
|
|
563
|
+
<div class="card-header scene-section-header">
|
|
564
|
+
<div class="scene-section-header-copy">
|
|
544
565
|
<strong>Scenes</strong>
|
|
545
566
|
<div class="scene-help">Each saved scene becomes a HomeKit switch plus a companion volume speaker.</div>
|
|
546
567
|
<div class="scene-inline-note mt-2">Save scene changes in the editor, then use Homebridge's footer Save button when you're ready to write everything to `config.json`.</div>
|
|
547
568
|
</div>
|
|
548
|
-
<
|
|
569
|
+
<div class="scene-section-actions">
|
|
570
|
+
<button class="btn btn-sm btn-outline-primary" id="new-scene-button" type="button">New Scene</button>
|
|
571
|
+
</div>
|
|
549
572
|
</div>
|
|
550
573
|
<div class="card-body">
|
|
551
574
|
<div id="scene-list" class="scene-list"></div>
|
|
@@ -553,13 +576,13 @@
|
|
|
553
576
|
</section>
|
|
554
577
|
|
|
555
578
|
<section class="card scene-card">
|
|
556
|
-
<div class="card-header
|
|
557
|
-
<div>
|
|
579
|
+
<div class="card-header scene-section-header">
|
|
580
|
+
<div class="scene-section-header-copy">
|
|
558
581
|
<strong>Scene Editor</strong>
|
|
559
582
|
<div class="scene-help">Stable Sonos IDs are stored under the hood; the UI keeps room selection friendly.</div>
|
|
560
583
|
<div class="scene-inline-note mt-2">Save Scene Changes updates this scene in the list above. Homebridge's footer Save button writes the full plugin config to disk.</div>
|
|
561
584
|
</div>
|
|
562
|
-
<div class="
|
|
585
|
+
<div class="scene-section-actions">
|
|
563
586
|
<button class="btn btn-sm btn-outline-danger" id="delete-scene-button" type="button">Delete</button>
|
|
564
587
|
<button class="btn btn-sm btn-primary" id="save-scene-button" type="button">Save Scene Changes</button>
|
|
565
588
|
</div>
|
|
@@ -791,7 +814,6 @@
|
|
|
791
814
|
testButton: document.getElementById("test-button"),
|
|
792
815
|
cloudModeInputs: Array.from(document.querySelectorAll("input[name='cloud-mode']")),
|
|
793
816
|
cloudModeChoices: Array.from(document.querySelectorAll("[data-mode-choice]")),
|
|
794
|
-
cloudModePill: document.getElementById("cloud-mode-pill"),
|
|
795
817
|
cloudBrokerPanel: document.getElementById("cloud-broker-panel"),
|
|
796
818
|
cloudBrokerCopy: document.getElementById("cloud-broker-copy"),
|
|
797
819
|
cloudBrokerFields: document.getElementById("cloud-broker-fields"),
|
|
@@ -1021,8 +1043,6 @@
|
|
|
1021
1043
|
});
|
|
1022
1044
|
|
|
1023
1045
|
const isHybrid = cloud.mode === "local_plus_cloud";
|
|
1024
|
-
elements.cloudModePill.textContent = isHybrid ? "Local + Cloud" : "Local Only";
|
|
1025
|
-
elements.cloudModePill.className = `scene-status-pill ${isHybrid ? "pending" : "local"}`;
|
|
1026
1046
|
elements.cloudBrokerPanel.classList.toggle("scene-cloud-hidden", !isHybrid);
|
|
1027
1047
|
elements.cloudBrokerCopy.textContent = isHybrid
|
|
1028
1048
|
? "Only needed if you run your own broker. The settings below stay with this plugin config and are ignored whenever Local Only is active."
|
package/package.json
CHANGED