something-x-dev 1.8.0.dev21__tar.gz → 1.8.0.dev23__tar.gz
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.
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/PKG-INFO +1 -1
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/ROADMAP.md +2 -2
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/nothing_app/_version.py +2 -2
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/nothing_app/application.py +0 -2
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/nothing_app/pages/device.py +2 -5
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/nothing_app/profiles.py +2 -2
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/nothing_app/protocol.py +22 -18
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/something_x_dev.egg-info/PKG-INFO +1 -1
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/something_x_dev.egg-info/SOURCES.txt +0 -3
- something_x_dev-1.8.0.dev23/somethingx +3 -0
- something_x_dev-1.8.0.dev21/data/style.css +0 -355
- something_x_dev-1.8.0.dev21/main.py +0 -10
- something_x_dev-1.8.0.dev21/requirements.txt +0 -3
- something_x_dev-1.8.0.dev21/somethingx +0 -3
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/.github/CODEOWNERS +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/.github/workflows/ci.yml +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/.github/workflows/release-dev.yml +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/.github/workflows/release.yml +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/.gitignore +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/DEVICES.md +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/LICENSE +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/PKGBUILD +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/README.md +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/cliff.toml +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/docs/RELEASING.md +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/docs/docs.html +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/docs/index.html +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/flake.nix +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/nothing_app/__init__.py +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/nothing_app/bluetooth.py +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/nothing_app/data/__init__.py +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/nothing_app/data/com.something.x.omarchy.desktop +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/nothing_app/data/style.css +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/nothing_app/pages/__init__.py +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/nothing_app/pages/home.py +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/nothing_app/splash.py +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/nothing_app/tray.py +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/nothing_app/window.py +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/pyproject.toml +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/setup.cfg +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/something_x_dev.egg-info/dependency_links.txt +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/something_x_dev.egg-info/entry_points.txt +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/something_x_dev.egg-info/requires.txt +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/something_x_dev.egg-info/top_level.txt +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/tests/__init__.py +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/tests/conftest.py +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/tests/test_bluetooth.py +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/tests/test_crc.py +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/tests/test_profiles.py +0 -0
- {something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/tests/test_protocol.py +0 -0
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
- [ ] **Firmware update check** — compare device firmware against latest known version, show badge
|
|
47
47
|
|
|
48
48
|
### Tech
|
|
49
|
-
- [
|
|
50
|
-
- [
|
|
49
|
+
- [x] **Async BlueZ** — replaced `dbus-python` with native `Gio` async D-Bus (non-blocking, no extra dependency)
|
|
50
|
+
- [x] **Unit tests** — 65 tests covering CRC, protocol parsing, battery dedup, profiles, and BluetoothManager
|
|
51
51
|
|
|
52
52
|
---
|
|
53
53
|
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '1.8.0.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 8, 0, '
|
|
21
|
+
__version__ = version = '1.8.0.dev23'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 8, 0, 'dev23')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -11,6 +11,7 @@ gi.require_version("PangoCairo", "1.0")
|
|
|
11
11
|
from gi.repository import Gtk, GLib, PangoCairo
|
|
12
12
|
|
|
13
13
|
from ..bluetooth import BluetoothDevice, BluetoothManager
|
|
14
|
+
from ..protocol import NothingDevice, ANCMode, EQ_PRESETS
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
def _mono_font() -> str:
|
|
@@ -22,7 +23,6 @@ def _mono_font() -> str:
|
|
|
22
23
|
|
|
23
24
|
|
|
24
25
|
_MONO = _mono_font()
|
|
25
|
-
from ..protocol import NothingDevice, ANCMode, EQ_PRESETS
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
def _find_bt_sink(address: str) -> str | None:
|
|
@@ -303,8 +303,6 @@ class DevicePage(Gtk.Box):
|
|
|
303
303
|
self._vol_handler: int | None = None
|
|
304
304
|
self._bt_conn_handler = bt_manager.connect("device-connected", self._on_bt_device_connected)
|
|
305
305
|
self._bt_disc_handler = bt_manager.connect("device-disconnected", self._on_bt_device_disconnected)
|
|
306
|
-
self._connect_retries = 0
|
|
307
|
-
self._connect_retry_id: int | None = None
|
|
308
306
|
self._build()
|
|
309
307
|
if bt_device.is_nothing:
|
|
310
308
|
self._connect_nothing(nothing_dev)
|
|
@@ -546,11 +544,10 @@ class DevicePage(Gtk.Box):
|
|
|
546
544
|
self._sn_label.set_label(state.serial_number or "—")
|
|
547
545
|
|
|
548
546
|
def _on_rfcomm_connected(self, _dev):
|
|
549
|
-
print(f"[device page] RFCOMM connected to {self._bt_device.name}")
|
|
550
547
|
GLib.timeout_add(800, self._query_volume)
|
|
551
548
|
|
|
552
549
|
def _on_rfcomm_disconnected(self, _dev):
|
|
553
|
-
|
|
550
|
+
pass
|
|
554
551
|
|
|
555
552
|
def _query_volume(self):
|
|
556
553
|
def _run():
|
|
@@ -29,8 +29,8 @@ def save(address: str, anc_mode: int, eq_preset: str):
|
|
|
29
29
|
|
|
30
30
|
def get_last_device() -> str | None:
|
|
31
31
|
try:
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
with open(_LAST_DEV_FILE) as f:
|
|
33
|
+
return f.read().strip() or None
|
|
34
34
|
except FileNotFoundError:
|
|
35
35
|
return None
|
|
36
36
|
|
|
@@ -136,6 +136,7 @@ class NothingDevice(GObject.Object):
|
|
|
136
136
|
"connected": (GObject.SignalFlags.RUN_FIRST, None, ()),
|
|
137
137
|
"disconnected": (GObject.SignalFlags.RUN_FIRST, None, ()),
|
|
138
138
|
}
|
|
139
|
+
_LOW_BAT_THRESHOLDS = (20, 15, 10, 5)
|
|
139
140
|
|
|
140
141
|
def __init__(self, address: str):
|
|
141
142
|
super().__init__()
|
|
@@ -150,6 +151,7 @@ class NothingDevice(GObject.Object):
|
|
|
150
151
|
self._last_anc_level: int = _ANC_STRONG
|
|
151
152
|
self._thread: threading.Thread | None = None
|
|
152
153
|
self._low_bat_notified: dict[str, set[int]] = {}
|
|
154
|
+
self._low_bat_seen: set[str] = set()
|
|
153
155
|
|
|
154
156
|
# ── Public API ────────────────────────────────────────────────────────────
|
|
155
157
|
|
|
@@ -644,34 +646,36 @@ class NothingDevice(GObject.Object):
|
|
|
644
646
|
eq_val = EQ_PRESETS.get(p["eq"], 0)
|
|
645
647
|
self._x55_send(_CMD_SET_EQ, bytes([eq_val]), label=f"restore EQ={p['eq']}")
|
|
646
648
|
|
|
647
|
-
_LOW_BAT_THRESHOLDS = (20, 15, 10, 5)
|
|
648
|
-
|
|
649
649
|
def _check_low_battery(self, slot: str, pct: int, label: str):
|
|
650
650
|
if pct < 0:
|
|
651
651
|
return
|
|
652
652
|
if pct > 25:
|
|
653
653
|
self._low_bat_notified.pop(slot, None)
|
|
654
|
+
self._low_bat_seen.add(slot)
|
|
654
655
|
return
|
|
656
|
+
first_reading = slot not in self._low_bat_seen
|
|
657
|
+
self._low_bat_seen.add(slot)
|
|
655
658
|
notified = self._low_bat_notified.setdefault(slot, set())
|
|
656
659
|
for threshold in self._LOW_BAT_THRESHOLDS:
|
|
657
660
|
if pct <= threshold and threshold not in notified:
|
|
658
661
|
notified.add(threshold)
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
662
|
+
if not first_reading:
|
|
663
|
+
threading.Thread(
|
|
664
|
+
target=subprocess.run,
|
|
665
|
+
args=(
|
|
666
|
+
[
|
|
667
|
+
"notify-send",
|
|
668
|
+
"-u",
|
|
669
|
+
"critical",
|
|
670
|
+
"-i",
|
|
671
|
+
"battery-caution",
|
|
672
|
+
"Something X",
|
|
673
|
+
f"{label}: {pct}% battery remaining",
|
|
674
|
+
],
|
|
675
|
+
),
|
|
676
|
+
kwargs={"capture_output": True},
|
|
677
|
+
daemon=True,
|
|
678
|
+
).start()
|
|
675
679
|
break
|
|
676
680
|
|
|
677
681
|
def _poll_earphone_status(self):
|
{something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/something_x_dev.egg-info/SOURCES.txt
RENAMED
|
@@ -6,15 +6,12 @@ README.md
|
|
|
6
6
|
ROADMAP.md
|
|
7
7
|
cliff.toml
|
|
8
8
|
flake.nix
|
|
9
|
-
main.py
|
|
10
9
|
pyproject.toml
|
|
11
|
-
requirements.txt
|
|
12
10
|
somethingx
|
|
13
11
|
.github/CODEOWNERS
|
|
14
12
|
.github/workflows/ci.yml
|
|
15
13
|
.github/workflows/release-dev.yml
|
|
16
14
|
.github/workflows/release.yml
|
|
17
|
-
data/style.css
|
|
18
15
|
docs/RELEASING.md
|
|
19
16
|
docs/docs.html
|
|
20
17
|
docs/index.html
|
|
@@ -1,355 +0,0 @@
|
|
|
1
|
-
@define-color window_bg_color #0a0a0a;
|
|
2
|
-
@define-color window_fg_color #ffffff;
|
|
3
|
-
@define-color view_bg_color #0a0a0a;
|
|
4
|
-
@define-color view_fg_color #ffffff;
|
|
5
|
-
@define-color headerbar_bg_color #0a0a0a;
|
|
6
|
-
@define-color headerbar_fg_color #ffffff;
|
|
7
|
-
@define-color headerbar_border_color #1f1f1f;
|
|
8
|
-
@define-color headerbar_backdrop_color #0a0a0a;
|
|
9
|
-
@define-color card_bg_color #141414;
|
|
10
|
-
@define-color card_fg_color #ffffff;
|
|
11
|
-
@define-color accent_bg_color #ffffff;
|
|
12
|
-
@define-color accent_fg_color #0a0a0a;
|
|
13
|
-
@define-color accent_color #ffffff;
|
|
14
|
-
@define-color destructive_bg_color #e85252;
|
|
15
|
-
@define-color destructive_fg_color #0a0a0a;
|
|
16
|
-
@define-color success_bg_color #8fdf72;
|
|
17
|
-
@define-color success_fg_color #0a0a0a;
|
|
18
|
-
|
|
19
|
-
window,
|
|
20
|
-
.background {
|
|
21
|
-
background-color: #0a0a0a;
|
|
22
|
-
color: #ffffff;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
scrolledwindow,
|
|
26
|
-
viewport {
|
|
27
|
-
background-color: #0a0a0a;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
scrollbar trough {
|
|
31
|
-
background-color: #141414;
|
|
32
|
-
border-radius: 4px;
|
|
33
|
-
min-width: 4px;
|
|
34
|
-
}
|
|
35
|
-
scrollbar slider {
|
|
36
|
-
background-color: #2e2e2e;
|
|
37
|
-
border-radius: 4px;
|
|
38
|
-
min-width: 4px;
|
|
39
|
-
min-height: 40px;
|
|
40
|
-
}
|
|
41
|
-
scrollbar slider:hover { background-color: #3e3e3e; }
|
|
42
|
-
|
|
43
|
-
headerbar,
|
|
44
|
-
.nothing-header {
|
|
45
|
-
background-color: #0a0a0a;
|
|
46
|
-
border-bottom: 1px solid #181818;
|
|
47
|
-
color: #ffffff;
|
|
48
|
-
min-height: 54px;
|
|
49
|
-
box-shadow: none;
|
|
50
|
-
padding: 0 8px;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
headerbar .title {
|
|
54
|
-
font-family: "JetBrains Mono", "Courier New", monospace;
|
|
55
|
-
font-weight: 700;
|
|
56
|
-
font-size: 13px;
|
|
57
|
-
letter-spacing: 4px;
|
|
58
|
-
text-transform: uppercase;
|
|
59
|
-
color: #ffffff;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
headerbar button:not(.close):not(.minimize):not(.maximize),
|
|
63
|
-
headerbar button.flat:not(.close):not(.minimize):not(.maximize) {
|
|
64
|
-
background: none;
|
|
65
|
-
border: none;
|
|
66
|
-
box-shadow: none;
|
|
67
|
-
color: #ffffff;
|
|
68
|
-
border-radius: 8px;
|
|
69
|
-
min-width: 36px;
|
|
70
|
-
min-height: 36px;
|
|
71
|
-
padding: 4px 8px;
|
|
72
|
-
transition: background 150ms ease;
|
|
73
|
-
}
|
|
74
|
-
headerbar button:not(.close):not(.minimize):not(.maximize):hover { background-color: #1e1e1e; }
|
|
75
|
-
headerbar button:not(.close):not(.minimize):not(.maximize):active { background-color: #2a2a2a; }
|
|
76
|
-
|
|
77
|
-
.nothing-page {
|
|
78
|
-
background-color: #0a0a0a;
|
|
79
|
-
padding: 0 16px 24px;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
.section-label {
|
|
83
|
-
font-family: "JetBrains Mono", monospace;
|
|
84
|
-
font-size: 10px;
|
|
85
|
-
font-weight: 700;
|
|
86
|
-
letter-spacing: 3px;
|
|
87
|
-
text-transform: uppercase;
|
|
88
|
-
color: #3e3e3e;
|
|
89
|
-
padding: 0 4px;
|
|
90
|
-
margin-top: 28px;
|
|
91
|
-
margin-bottom: 10px;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
.device-card {
|
|
95
|
-
background-color: #141414;
|
|
96
|
-
border-radius: 20px;
|
|
97
|
-
border: 1px solid #1e1e1e;
|
|
98
|
-
padding: 20px;
|
|
99
|
-
margin-bottom: 10px;
|
|
100
|
-
transition: background 150ms ease, border-color 150ms ease;
|
|
101
|
-
}
|
|
102
|
-
.device-card:hover {
|
|
103
|
-
background-color: #191919;
|
|
104
|
-
border-color: #2a2a2a;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
.device-card-name {
|
|
108
|
-
font-family: "JetBrains Mono", monospace;
|
|
109
|
-
font-size: 17px;
|
|
110
|
-
font-weight: 700;
|
|
111
|
-
color: #ffffff;
|
|
112
|
-
letter-spacing: 0.5px;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
.device-card-address {
|
|
116
|
-
font-family: "JetBrains Mono", monospace;
|
|
117
|
-
font-size: 11px;
|
|
118
|
-
color: #3a3a3a;
|
|
119
|
-
letter-spacing: 1px;
|
|
120
|
-
margin-top: 2px;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
.status-connected {
|
|
124
|
-
font-size: 12px;
|
|
125
|
-
font-weight: 600;
|
|
126
|
-
color: #8fdf72;
|
|
127
|
-
letter-spacing: 1px;
|
|
128
|
-
}
|
|
129
|
-
.status-disconnected {
|
|
130
|
-
font-size: 12px;
|
|
131
|
-
color: #3e3e3e;
|
|
132
|
-
letter-spacing: 1px;
|
|
133
|
-
}
|
|
134
|
-
.status-nothing {
|
|
135
|
-
font-family: "JetBrains Mono", monospace;
|
|
136
|
-
font-size: 10px;
|
|
137
|
-
font-weight: 700;
|
|
138
|
-
letter-spacing: 2px;
|
|
139
|
-
text-transform: uppercase;
|
|
140
|
-
color: #ffffff;
|
|
141
|
-
background-color: #1e1e1e;
|
|
142
|
-
border: 1px solid #2a2a2a;
|
|
143
|
-
border-radius: 6px;
|
|
144
|
-
padding: 3px 8px;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
progressbar,
|
|
148
|
-
progressbar trough {
|
|
149
|
-
background-color: #1e1e1e;
|
|
150
|
-
border-radius: 4px;
|
|
151
|
-
min-height: 5px;
|
|
152
|
-
border: none;
|
|
153
|
-
}
|
|
154
|
-
progressbar progress {
|
|
155
|
-
background-color: #ffffff;
|
|
156
|
-
border-radius: 4px;
|
|
157
|
-
min-height: 5px;
|
|
158
|
-
}
|
|
159
|
-
progressbar.battery-high progress { background-color: #8fdf72; }
|
|
160
|
-
progressbar.battery-mid progress { background-color: #f0c040; }
|
|
161
|
-
progressbar.battery-low progress { background-color: #e85252; }
|
|
162
|
-
|
|
163
|
-
.battery-pct {
|
|
164
|
-
font-family: "JetBrains Mono", monospace;
|
|
165
|
-
font-size: 13px;
|
|
166
|
-
font-weight: 700;
|
|
167
|
-
color: #ffffff;
|
|
168
|
-
min-width: 38px;
|
|
169
|
-
}
|
|
170
|
-
.battery-label-small {
|
|
171
|
-
font-family: "JetBrains Mono", monospace;
|
|
172
|
-
font-size: 10px;
|
|
173
|
-
letter-spacing: 2px;
|
|
174
|
-
color: #3a3a3a;
|
|
175
|
-
text-transform: uppercase;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
.battery-pct-big {
|
|
179
|
-
font-family: "JetBrains Mono", monospace;
|
|
180
|
-
font-size: 52px;
|
|
181
|
-
font-weight: 700;
|
|
182
|
-
color: #ffffff;
|
|
183
|
-
letter-spacing: -2px;
|
|
184
|
-
}
|
|
185
|
-
.battery-unit {
|
|
186
|
-
font-family: "JetBrains Mono", monospace;
|
|
187
|
-
font-size: 18px;
|
|
188
|
-
color: #5e5e5e;
|
|
189
|
-
letter-spacing: 0;
|
|
190
|
-
margin-bottom: 8px;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
.anc-container {
|
|
194
|
-
background-color: #141414;
|
|
195
|
-
border-radius: 16px;
|
|
196
|
-
border: 1px solid #1e1e1e;
|
|
197
|
-
padding: 4px;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
.anc-button {
|
|
201
|
-
background: none;
|
|
202
|
-
border: none;
|
|
203
|
-
box-shadow: none;
|
|
204
|
-
border-radius: 12px;
|
|
205
|
-
color: #4a4a4a;
|
|
206
|
-
font-size: 13px;
|
|
207
|
-
font-weight: 600;
|
|
208
|
-
padding: 10px 16px;
|
|
209
|
-
transition: all 180ms ease;
|
|
210
|
-
letter-spacing: 0.3px;
|
|
211
|
-
}
|
|
212
|
-
.anc-button:hover { background-color: #1e1e1e; color: #888888; }
|
|
213
|
-
.anc-button.active,
|
|
214
|
-
.anc-button:checked {
|
|
215
|
-
background-color: #ffffff;
|
|
216
|
-
color: #0a0a0a;
|
|
217
|
-
font-weight: 700;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
.eq-button {
|
|
221
|
-
background-color: #141414;
|
|
222
|
-
border: 1px solid #1e1e1e;
|
|
223
|
-
box-shadow: none;
|
|
224
|
-
border-radius: 24px;
|
|
225
|
-
color: #4a4a4a;
|
|
226
|
-
font-size: 13px;
|
|
227
|
-
font-weight: 600;
|
|
228
|
-
padding: 9px 18px;
|
|
229
|
-
transition: all 180ms ease;
|
|
230
|
-
letter-spacing: 0.3px;
|
|
231
|
-
}
|
|
232
|
-
.eq-button:hover { background-color: #1e1e1e; border-color: #2a2a2a; color: #aaaaaa; }
|
|
233
|
-
.eq-button.active,
|
|
234
|
-
.eq-button:checked {
|
|
235
|
-
background-color: #ffffff;
|
|
236
|
-
border-color: #ffffff;
|
|
237
|
-
color: #0a0a0a;
|
|
238
|
-
font-weight: 700;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
.settings-group {
|
|
242
|
-
background-color: #141414;
|
|
243
|
-
border-radius: 18px;
|
|
244
|
-
border: 1px solid #1e1e1e;
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
.settings-row {
|
|
248
|
-
background-color: transparent;
|
|
249
|
-
padding: 16px 20px;
|
|
250
|
-
border-bottom: 1px solid #1a1a1a;
|
|
251
|
-
}
|
|
252
|
-
.settings-row:last-child { border-bottom: none; }
|
|
253
|
-
|
|
254
|
-
.settings-row-title {
|
|
255
|
-
font-size: 15px;
|
|
256
|
-
font-weight: 500;
|
|
257
|
-
color: #ffffff;
|
|
258
|
-
}
|
|
259
|
-
.settings-row-subtitle {
|
|
260
|
-
font-size: 12px;
|
|
261
|
-
color: #4a4a4a;
|
|
262
|
-
margin-top: 3px;
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
switch {
|
|
266
|
-
background-color: #2a2a2a;
|
|
267
|
-
border-radius: 20px;
|
|
268
|
-
min-width: 48px;
|
|
269
|
-
min-height: 26px;
|
|
270
|
-
border: none;
|
|
271
|
-
box-shadow: none;
|
|
272
|
-
transition: background 200ms ease;
|
|
273
|
-
}
|
|
274
|
-
switch:checked { background-color: #ffffff; }
|
|
275
|
-
switch slider {
|
|
276
|
-
background-color: #666666;
|
|
277
|
-
border-radius: 50%;
|
|
278
|
-
min-width: 20px;
|
|
279
|
-
min-height: 20px;
|
|
280
|
-
margin: 3px;
|
|
281
|
-
box-shadow: none;
|
|
282
|
-
}
|
|
283
|
-
switch:checked slider { background-color: #0a0a0a; }
|
|
284
|
-
|
|
285
|
-
.info-key {
|
|
286
|
-
font-family: "JetBrains Mono", monospace;
|
|
287
|
-
font-size: 11px;
|
|
288
|
-
letter-spacing: 2px;
|
|
289
|
-
text-transform: uppercase;
|
|
290
|
-
color: #3e3e3e;
|
|
291
|
-
}
|
|
292
|
-
.info-value {
|
|
293
|
-
font-family: "JetBrains Mono", monospace;
|
|
294
|
-
font-size: 13px;
|
|
295
|
-
font-weight: 600;
|
|
296
|
-
color: #aaaaaa;
|
|
297
|
-
letter-spacing: 0.5px;
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
.scan-button {
|
|
301
|
-
background-color: #ffffff;
|
|
302
|
-
border-radius: 16px;
|
|
303
|
-
color: #0a0a0a;
|
|
304
|
-
font-weight: 700;
|
|
305
|
-
font-size: 14px;
|
|
306
|
-
padding: 14px 32px;
|
|
307
|
-
border: none;
|
|
308
|
-
box-shadow: none;
|
|
309
|
-
letter-spacing: 1px;
|
|
310
|
-
transition: background 150ms ease;
|
|
311
|
-
}
|
|
312
|
-
.scan-button:hover { background-color: #e0e0e0; }
|
|
313
|
-
.scan-button:active { background-color: #c8c8c8; }
|
|
314
|
-
|
|
315
|
-
.disconnect-button {
|
|
316
|
-
background-color: transparent;
|
|
317
|
-
border-radius: 16px;
|
|
318
|
-
color: #e85252;
|
|
319
|
-
font-weight: 700;
|
|
320
|
-
font-size: 14px;
|
|
321
|
-
padding: 14px 32px;
|
|
322
|
-
border: 1px solid #3a1e1e;
|
|
323
|
-
box-shadow: none;
|
|
324
|
-
letter-spacing: 1px;
|
|
325
|
-
transition: all 150ms ease;
|
|
326
|
-
}
|
|
327
|
-
.disconnect-button:hover {
|
|
328
|
-
background-color: #1a0e0e;
|
|
329
|
-
border-color: #5a2020;
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
.empty-title {
|
|
333
|
-
font-family: "JetBrains Mono", monospace;
|
|
334
|
-
font-size: 15px;
|
|
335
|
-
font-weight: 700;
|
|
336
|
-
letter-spacing: 2px;
|
|
337
|
-
text-transform: uppercase;
|
|
338
|
-
color: #2a2a2a;
|
|
339
|
-
}
|
|
340
|
-
.empty-subtitle {
|
|
341
|
-
font-size: 13px;
|
|
342
|
-
color: #2a2a2a;
|
|
343
|
-
margin-top: 6px;
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
.nothing-dot {
|
|
347
|
-
background-color: #ffffff;
|
|
348
|
-
border-radius: 50%;
|
|
349
|
-
min-width: 8px;
|
|
350
|
-
min-height: 8px;
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
separator { background-color: #181818; }
|
|
354
|
-
|
|
355
|
-
label { color: #ffffff; }
|
|
File without changes
|
|
File without changes
|
{something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/.github/workflows/release-dev.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/something_x_dev.egg-info/requires.txt
RENAMED
|
File without changes
|
{something_x_dev-1.8.0.dev21 → something_x_dev-1.8.0.dev23}/something_x_dev.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|