From 5a1ea91e35487dc877a4422c31c2e225b4ec2aef Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Wed, 26 Mar 2025 20:22:51 +1100 Subject: sidebar: networks module --- scss/sidebar.scss | 61 ++++++++++++++ src/modules/sidebar/connectivity.tsx | 3 + src/modules/sidebar/modules/networks.tsx | 139 +++++++++++++++++++++++++++++++ 3 files changed, 203 insertions(+) create mode 100644 src/modules/sidebar/modules/networks.tsx diff --git a/scss/sidebar.scss b/scss/sidebar.scss index 8611ed9..ffbd0f8 100644 --- a/scss/sidebar.scss +++ b/scss/sidebar.scss @@ -284,6 +284,67 @@ } } + .networks { + .list { + @include lib.spacing(10, true); + } + + .network { + @include lib.rounded(20); + + background-color: color.change(scheme.$surface1, $alpha: 0.4); + padding: lib.s(10) lib.s(15); + + @include lib.spacing(5); + + &.connected { + background-color: color.change(color.mix(scheme.$surface1, scheme.$primary, 50%), $alpha: 0.4); + + & > button { + background-color: color.change(color.mix(scheme.$surface1, scheme.$primary, 50%), $alpha: 0.5); + + &:hover, + &:focus { + background-color: color.change(color.mix(scheme.$surface1, scheme.$primary, 30%), $alpha: 0.5); + } + + &:active { + background-color: color.change(color.mix(scheme.$surface1, scheme.$primary, 20%), $alpha: 0.5); + } + } + } + + .icon { + font-size: lib.s(28); + margin-right: lib.s(12); + } + + .sublabel { + font-size: lib.s(14); + color: scheme.$subtext0; + } + + & > button { + @include lib.rounded(1000); + @include lib.element-decel; + @include font.icon; + + font-size: lib.s(18); + min-width: lib.s(30); + min-height: lib.s(30); + background-color: color.change(scheme.$surface1, $alpha: 0.5); + + &:hover, + &:focus { + background-color: color.change(scheme.$surface2, $alpha: 0.5); + } + + &:active { + background-color: color.change(scheme.$overlay0, $alpha: 0.5); + } + } + } + } .bluetooth { .list { diff --git a/src/modules/sidebar/connectivity.tsx b/src/modules/sidebar/connectivity.tsx index 437e513..2962b56 100644 --- a/src/modules/sidebar/connectivity.tsx +++ b/src/modules/sidebar/connectivity.tsx @@ -1,7 +1,10 @@ import Bluetooth from "./modules/bluetooth"; +import Networks from "./modules/networks"; export default () => ( + + ); diff --git a/src/modules/sidebar/modules/networks.tsx b/src/modules/sidebar/modules/networks.tsx new file mode 100644 index 0000000..34ec8fd --- /dev/null +++ b/src/modules/sidebar/modules/networks.tsx @@ -0,0 +1,139 @@ +import { bind, execAsync, Variable, type Binding } from "astal"; +import { Gtk } from "astal/gtk3"; +import AstalNetwork from "gi://AstalNetwork"; + +const sortAPs = (saved: string[], a: AstalNetwork.AccessPoint, b: AstalNetwork.AccessPoint) => { + const { wifi } = AstalNetwork.get_default(); + if (a === wifi.activeAccessPoint || b === wifi.activeAccessPoint) return a === wifi.activeAccessPoint ? -1 : 1; + if (saved.includes(a.ssid) || saved.includes(b.ssid)) return saved.includes(a.ssid) ? -1 : 1; + return b.strength - a.strength; +}; + +const Network = (accessPoint: AstalNetwork.AccessPoint) => ( + `network ${a === accessPoint ? "connected" : ""}` + )} + > + + + + +