diff --git a/build b/build index 5952850..1133a91 100755 --- a/build +++ b/build @@ -6,3 +6,7 @@ if [ $? -ne 0 ]; then fi scp target/release/dashboard trekstor:~/dashboard ssh -t trekstor -- "systemctl --user restart dashboard" + +git add . +git commit -am "$(date +%s)" +git push diff --git a/dashboard/src/main.rs b/dashboard/src/main.rs index 6f13d36..20a4889 100644 --- a/dashboard/src/main.rs +++ b/dashboard/src/main.rs @@ -10,14 +10,35 @@ use tokio::sync::mpsc::{self, UnboundedReceiver, UnboundedSender}; slint::include_modules!(); -#[derive(Clone)] -enum C2sMessage { - CallService(String, String, Option), -} +fn apply_state(app: &Weak, state: State) { + app.upgrade_in_event_loop(move |app| { + // Lights + let lights = state + .domain("light") + .iter() + .filter(|light| { + !(light.entity_id.ends_with("screen") + || light.entity_id.chars().any(char::is_numeric)) + }) + .map(Into::into) + .collect::>(); + app.set_lights(ModelRc::new(VecModel::from(lights))); -#[derive(Clone)] -enum S2cMessage { - EntityUpdated, + // Thermometers + let thermometers = state + .domain("sensor") + .iter() + .filter(|sensor| sensor.entity_id.ends_with("thermometer_temperature")) + .map(Into::into) + .collect::>(); + app.set_thermometers(ModelRc::new(VecModel::from(thermometers))); + + // Clock + if let Some(date_time_iso) = state.get("sensor.date_time_iso").as_ref() { + app.set_date_time(date_time_iso.into()); + } + }) + .ok(); } #[tokio::main] @@ -80,43 +101,14 @@ async fn main() -> Result<(), Box> { Ok(()) } -fn apply_state(app: &Weak, state: State) { - app.upgrade_in_event_loop(move |app| { - // Lights - let lights = state - .domain("light") - .iter() - .filter_map(|light| { - if light.entity_id.ends_with("screen") - || light.entity_id.find(|c: char| c.is_numeric()).is_some() - { - return None; - } +#[derive(Clone)] +enum C2sMessage { + CallService(String, String, Option), +} - Some(light.into()) - }) - .collect::>(); - app.set_lights(ModelRc::new(VecModel::from(lights))); - - // Thermometers - let badges = state - .domain("sensor") - .iter() - .filter_map(|sensor| { - if sensor.entity_id.ends_with("thermometer_temperature") { - return Some(sensor.into()); - } - None - }) - .collect::>(); - app.set_badges(ModelRc::new(VecModel::from(badges))); - - // Clock - if let Some(date_time_iso) = state.get("sensor.date_time_iso").as_ref() { - app.set_date_time(date_time_iso.into()); - } - }) - .ok(); +#[derive(Clone)] +enum S2cMessage { + EntityUpdated, } #[derive(Default, Debug, Clone)] diff --git a/dashboard/ui/calendar.slint b/dashboard/ui/calendar.slint new file mode 100644 index 0000000..02d0b6e --- /dev/null +++ b/dashboard/ui/calendar.slint @@ -0,0 +1,3 @@ +export component Calendar inherits Rectangle { + // .. +} diff --git a/dashboard/ui/climate.slint b/dashboard/ui/climate.slint new file mode 100644 index 0000000..40a48b4 --- /dev/null +++ b/dashboard/ui/climate.slint @@ -0,0 +1,3 @@ +export component Climate inherits Rectangle { + // .. +} diff --git a/dashboard/ui/energy.slint b/dashboard/ui/energy.slint new file mode 100644 index 0000000..6c5a6ae --- /dev/null +++ b/dashboard/ui/energy.slint @@ -0,0 +1,3 @@ +export component Energy inherits Rectangle { + // .. +} diff --git a/dashboard/ui/main.slint b/dashboard/ui/main.slint index d64f7e9..25b814b 100644 --- a/dashboard/ui/main.slint +++ b/dashboard/ui/main.slint @@ -8,6 +8,10 @@ import { StandardTableView, } from "std-widgets.slint"; +import { Climate } from "./climate.slint"; +import { Calendar } from "calendar.slint"; +import { Energy } from "energy.slint"; + export struct LightData { id: string, name: string, @@ -54,7 +58,7 @@ component Clock { } component Thermometer inherits Rectangle { - in property badge; + in property thermometer; border-radius: 16px + 19px; border-width: 2px; border-color: Palette.alternate-background; @@ -66,13 +70,13 @@ component Thermometer inherits Rectangle { padding-right: parent.border-radius / 2; Text { - text: badge.name; + text: thermometer.name; height: 16px; font-weight: 100; } Text { - text: "\{badge.value} \{badge.unit}"; + text: "\{thermometer.value} \{thermometer.unit}"; height: 19px; font-size: 19px; font-weight: 500; @@ -88,7 +92,7 @@ export component AppWindow inherits Window { property page: 0; in property date-time; - in property <[ThermometerData]> badges; + in property <[ThermometerData]> thermometers; in property <[LightData]> lights; callback toggle-light(string); @@ -107,8 +111,8 @@ export component AppWindow inherits Window { height: parent.height; } - for badge[index] in root.badges: Thermometer { - badge: badge; + for thermometer[index] in root.thermometers: Thermometer { + thermometer: thermometer; } Rectangle { @@ -126,40 +130,9 @@ export component AppWindow inherits Window { Rectangle { preferred-width: root.width; VerticalLayout { - if root.page == 0: Rectangle { - StandardTableView { - width: parent.width; - height: parent.height; - columns: [ - { title: "Header 1" }, - { title: "Header 2" }, - ]; - rows: [ - [ - { text: "Item 1" }, - { text: "Item 2" }, - ], - [ - { text: "Item 1" }, - { text: "Item 2" }, - ], - [ - { text: "Item 1" }, - { text: "Item 2" }, - ] - ]; - } - } - - if root.page == 1: Rectangle { - background: red; - // pages go here - } - - if root.page == 2: Rectangle { - background: yellow; - // pages go here - } + if root.page == 0: Climate { } + if root.page == 1: Calendar { } + if root.page == 2: Energy { } Rectangle { height: 64px; diff --git a/samples b/samples deleted file mode 100644 index 69a86db..0000000 --- a/samples +++ /dev/null @@ -1,152 +0,0 @@ -Status Sample name -[G...] aarch64-ol7u9-linux-gnu -[G...] aarch64-ol8u10-linux-gnu -[G...] aarch64-ol8u6-linux-gnu -[G...] aarch64-ol8u7-linux-gnu -[G...] aarch64-ol8u8-linux-gnu -[G...] aarch64-ol8u9-linux-gnu -[G...] aarch64-ol9u2-linux-gnu -[G...] aarch64-ol9u3-linux-gnu -[G...] aarch64-ol9u4-linux-gnu -[G...] aarch64-ol9u5-linux-gnu -[G...] aarch64-rpi3-linux-gnu -[G...] aarch64-rpi4-linux-gnu -[G...] aarch64-unknown-linux-gnu -[G...] aarch64-unknown-linux-musl -[G...] aarch64-unknown-linux-uclibc -[G...] alphaev56-unknown-linux-gnu -[G...] alphaev67-unknown-linux-gnu -[G...] arc-arc700-linux-uclibc -[G...] arc-archs-linux-gnu -[G...] arc-multilib-elf32 -[G...] arc-multilib-linux-gnu -[G...] arc-multilib-linux-uclibc -[G...] arm-bare_newlib_cortex_m3_nommu-eabi -[G...] arm-cortex_a15-linux-gnueabihf -[G..X] arm-cortexa5-linux-uclibcgnueabihf -[G...] arm-cortex_a8-linux-gnueabi -[G..X] arm-cortexa9_neon-linux-gnueabihf -[G..X] x86_64-w64-mingw32,arm-cortexa9_neon-linux-gnueabihf -[G...] armeb-unknown-eabi -[G...] armeb-unknown-linux-gnueabi -[G...] armeb-unknown-linux-uclibcgnueabi -[G...] arm-multilib-linux-uclibcgnueabi -[G...] arm-nano-eabi -[G...] arm-none-eabi -[G...] arm-ol7u9-linux-gnueabi -[G...] arm-ol7u9-linux-gnueabihf -[G..X] arm-picolibc-default -[G..X] arm-picolibc-eabi -[G..X] x86_64-unknown-linux-gnu,arm-picolibc-eabi -[G...] arm-unknown-eabi -[G...] arm-unknown-linux-gnueabi -[G..X] arm-unknown-linux-musleabi -[G...] arm-unknown-linux-uclibcgnueabi -[G..X] arm-unknown-linux-uclibcgnueabihf -[G...] armv6-nommu-linux-uclibcgnueabi -[G...] armv6-unknown-linux-gnueabi -[G...] armv6-unknown-linux-gnueabihf -[G...] armv7-rpi2-linux-gnueabihf -[G...] armv8-rpi3-linux-gnueabihf -[G...] armv8-rpi4-linux-gnueabihf -[G...] avr -[G...] bpf-unknown-none -[G..X] hppa-unknown-linux-gnu -[G...] i586-geode-linux-uclibc -[G...] i686-centos6-linux-gnu -[G...] i686-centos7-linux-gnu -[G...] i686-nptl-linux-gnu -[G...] i686-ol8u6-linux-gnu -[G...] i686-ol8u7-linux-gnu -[G...] i686-ol8u8-linux-gnu -[G...] i686-ol9u2-linux-gnu -[G...] i686-ubuntu14.04-linux-gnu -[G...] i686-ubuntu16.04-linux-gnu -[G..X] i686-w64-mingw32 -[G..X] lm32-unknown-elf -[G..X] loongarch64-unknown-linux-gnu -[G..X] loongarch64-unknown-linux-musl -[G...] m68k-unknown-elf -[G...] m68k-unknown-linux-gnu -[G...] m68k-unknown-uclinux-uclibc -[G...] powerpc-unknown-linux-uclibc,m68k-unknown-uclinux-uclibc -[G...] mips64el-multilib-linux-uclibc -[G...] mips64-ol9u5-linux-gnu -[G...] mips64-unknown-linux-gnu -[G...] mips-ar2315-linux-gnu -[G...] mipsel-multilib-linux-gnu -[G...] mipsel-sde-elf -[G...] mipsel-unknown-linux-gnu -[G...] mips-malta-linux-gnu -[G...] mips-unknown-elf -[G...] mips-unknown-linux-gnu -[G...] mips-unknown-linux-uclibc -[G..X] moxie-unknown-elf -[G..X] moxie-unknown-moxiebox -[G..X] x86_64-multilib-linux-uclibc,moxie-unknown-moxiebox -[G..X] msp430-unknown-elf -[G...] nios2-altera-linux-gnu -[G..X] i686-w64-mingw32,nios2-spico-elf -[G...] nios2-unknown-elf -[G..X] or1k-unknown-elf -[G..X] or1k-unknown-linux-gnu -[G..X] or1k-unknown-linux-musl -[G...] powerpc-405-linux-gnu -[G...] powerpc64le-unknown-linux-gnu -[G...] powerpc64-multilib-linux-gnu -[G...] powerpc64-unknown-linux-gnu -[G...] powerpc64-unknown-linux-musl -[G...] powerpc-8540-linux-gnu -[G...] powerpc-860-linux-gnu -[G...] powerpc-e300c3-linux-gnu -[G...] powerpc-e500v2-linux-gnuspe -[G...] x86_64-multilib-linux-uclibc,powerpc-unknown-elf -[G...] powerpc-unknown-linux-gnu -[G...] powerpc-unknown-linux-uclibc -[G...] powerpc-unknown_nofpu-linux-gnu -[G...] pru -[G...] riscv32-hifive1-elf -[G...] riscv32-picolibc-elf -[G...] riscv32-unknown-elf -[G...] riscv64-multilib-elf -[G...] riscv64-unknown-elf -[G...] riscv64-unknown-linux-gnu -[G..X] rx-unknown-elf -[G..X] s390-ibm-linux-gnu -[G..X] s390-unknown-linux-gnu -[G...] s390x-ibm-linux-gnu -[G...] s390x-unknown-linux-gnu -[G...] sh4-multilib-linux-gnu -[G...] sh4-multilib-linux-uclibc -[G...] sh-unknown-elf -[G...] sparc64-multilib-linux-gnu -[G...] sparc-leon-linux-uclibc -[G...] sparc-unknown-linux-gnu -[G..X] tic6x-uclinux -[G..X] tricore-none-eabi -[G...] x86_64-centos7-linux-gnu -[G...] x86_64-multilib-linux-gnu -[G...] x86_64-multilib-linux-musl -[G...] x86_64-multilib-linux-uclibc -[G...] x86_64-ol8u10-linux-gnu -[G...] x86_64-ol8u6-linux-gnu -[G...] x86_64-ol8u7-linux-gnu -[G...] x86_64-ol8u8-linux-gnu -[G...] x86_64-ol8u9-linux-gnu -[G...] x86_64-ol9u2-linux-gnu -[G...] x86_64-ol9u3-linux-gnu -[G...] x86_64-ol9u4-linux-gnu -[G...] x86_64-ol9u5-linux-gnu -[G..X] x86_64-w64-mingw32,x86_64-pc-linux-gnu -[G...] x86_64-ubuntu14.04-linux-gnu -[G...] x86_64-ubuntu16.04-linux-gnu -[G...] x86_64-unknown-linux-gnu -[G...] x86_64-unknown-linux-uclibc -[G..X] x86_64-w64-mingw32 -[G..X] xtensa-fsf-elf -[G...] xtensa-fsf-linux-uclibc - L (Local) : sample was found in current directory - G (Global) : sample was installed with crosstool-NG - X (EXPERIMENTAL): sample may use EXPERIMENTAL features - B (BROKEN) : sample is currently broken - O (OBSOLETE) : sample needs to be upgraded diff --git a/tree b/tree deleted file mode 100644 index d252803..0000000 --- a/tree +++ /dev/null @@ -1,293 +0,0 @@ -arrayvec v0.7.8 -├── kurbo v0.13.1 -│ ├── svgtypes v0.16.1 -│ │ ├── resvg v0.47.0 -│ │ │ ├── i-slint-common v1.17.1 -│ │ │ │ ├── i-slint-core v1.17.1 -│ │ │ │ │ ├── i-slint-backend-selector v1.17.1 -│ │ │ │ │ │ └── slint v1.17.1 -│ │ │ │ │ │ ├── dashboard v0.1.0 (/home/avii/source/rust/trekstor/dashboard) -│ │ │ │ │ │ └── trekstor v0.1.0 (/home/avii/source/rust/trekstor/trekstor) -│ │ │ │ │ │ └── dashboard v0.1.0 (/home/avii/source/rust/trekstor/dashboard) -│ │ │ │ │ ├── i-slint-renderer-software v1.17.1 -│ │ │ │ │ │ └── slint v1.17.1 (*) -│ │ │ │ │ └── slint v1.17.1 (*) -│ │ │ │ ├── i-slint-renderer-software v1.17.1 (*) -│ │ │ │ └── slint v1.17.1 (*) -│ │ │ └── i-slint-core v1.17.1 (*) -│ │ └── usvg v0.47.0 -│ │ └── resvg v0.47.0 (*) -│ └── usvg v0.47.0 (*) -├── lyon_geom v1.0.19 -│ ├── i-slint-core v1.17.1 (*) -│ └── lyon_path v1.0.19 -│ ├── i-slint-core v1.17.1 (*) -│ ├── i-slint-renderer-software v1.17.1 (*) -│ ├── lyon_algorithms v1.0.20 -│ │ └── i-slint-core v1.17.1 (*) -│ └── lyon_extra v1.1.0 -│ └── i-slint-core v1.17.1 (*) -├── polycool v0.4.0 -│ └── kurbo v0.13.1 (*) -├── taffy v0.10.1 -│ └── i-slint-core v1.17.1 (*) -└── tiny-skia v0.12.0 - └── resvg v0.47.0 (*) - -arrayvec v0.7.8 -└── lyon_geom v1.0.19 - └── lyon_path v1.0.19 - ├── i-slint-compiler v1.17.1 - │ └── slint-macros v1.17.1 (proc-macro) - │ └── slint v1.17.1 (*) - └── lyon_extra v1.1.0 - └── i-slint-compiler v1.17.1 (*) - -euclid v0.22.14 -├── i-slint-core v1.17.1 (*) -├── i-slint-renderer-software v1.17.1 (*) -└── lyon_geom v1.0.19 (*) - -euclid v0.22.14 -└── lyon_geom v1.0.19 (*) - -font-types v0.11.3 -└── read-fonts v0.39.2 - ├── fontique v0.10.0 - │ ├── i-slint-common v1.17.1 (*) - │ └── parley v0.10.0 - │ └── i-slint-core v1.17.1 (*) - ├── harfrust v0.8.4 - │ └── parley v0.10.0 (*) - └── skrifa v0.42.1 - ├── i-slint-common v1.17.1 (*) - ├── i-slint-core v1.17.1 (*) - ├── i-slint-renderer-software v1.17.1 (*) - └── parley v0.10.0 (*) - -font-types v0.12.2 -└── read-fonts v0.41.0 - └── skrifa v0.44.0 - └── swash v0.2.10 - ├── i-slint-core v1.17.1 (*) - └── i-slint-renderer-software v1.17.1 (*) - -hashbrown v0.14.5 -└── rowan v0.16.1 - └── i-slint-compiler v1.17.1 (*) - -hashbrown v0.16.1 -└── clru v0.6.3 - ├── i-slint-core v1.17.1 (*) - └── i-slint-renderer-software v1.17.1 (*) - -hashbrown v0.17.1 -└── indexmap v2.14.0 - └── toml_edit v0.25.13+spec-1.1.0 - └── proc-macro-crate v3.5.0 - └── num_enum_derive v0.7.6 (proc-macro) - └── num_enum v0.7.6 - └── i-slint-compiler v1.17.1 (*) - -hashbrown v0.17.1 -├── fontique v0.10.0 (*) -└── parley v0.10.0 (*) - -i-slint-common v1.17.1 (*) - -i-slint-common v1.17.1 -└── i-slint-compiler v1.17.1 (*) -[build-dependencies] -└── i-slint-backend-selector v1.17.1 (*) - -lyon_extra v1.1.0 (*) - -lyon_extra v1.1.0 (*) - -lyon_geom v1.0.19 (*) - -lyon_geom v1.0.19 (*) - -lyon_path v1.0.19 (*) - -lyon_path v1.0.19 (*) - -num-traits v0.2.19 -├── chrono v0.4.45 -│ └── i-slint-core v1.17.1 (*) -├── euclid v0.22.14 (*) -├── i-slint-core v1.17.1 (*) -├── i-slint-renderer-software v1.17.1 (*) -├── image v0.25.10 -│ └── i-slint-core v1.17.1 (*) -├── integer-sqrt v0.1.5 -│ └── i-slint-renderer-software v1.17.1 (*) -├── lyon_algorithms v1.0.20 (*) -├── lyon_geom v1.0.19 (*) -├── lyon_path v1.0.19 (*) -├── moxcms v0.8.1 -│ └── image v0.25.10 (*) -└── slint v1.17.1 (*) - -num-traits v0.2.19 -├── euclid v0.22.14 (*) -├── lyon_geom v1.0.19 (*) -└── lyon_path v1.0.19 (*) - -read-fonts v0.39.2 (*) - -read-fonts v0.41.0 (*) - -skrifa v0.42.1 (*) - -skrifa v0.44.0 (*) - -smallvec v1.15.2 -└── idna v1.1.0 - └── url v2.5.8 - └── i-slint-compiler v1.17.1 (*) - -smallvec v1.15.2 -├── fixed_decimal v0.7.2 -│ └── icu_decimal v2.2.0 -│ └── i-slint-common v1.17.1 (*) -├── fontique v0.10.0 (*) -├── harfrust v0.8.4 (*) -├── icu_normalizer v2.2.0 -│ ├── i-slint-compiler v1.17.1 (*) -│ ├── i-slint-core v1.17.1 (*) -│ ├── idna_adapter v1.2.2 -│ │ └── idna v1.1.0 (*) -│ └── parley v0.10.0 (*) -├── kurbo v0.13.1 (*) -└── rustybuzz v0.20.1 - └── usvg v0.47.0 (*) - -syn v2.0.119 -├── const-field-offset-macro v0.2.0 (proc-macro) -│ └── const-field-offset v0.2.0 -│ ├── i-slint-core v1.17.1 (*) -│ ├── slint v1.17.1 (*) -│ └── vtable v0.4.0 -│ ├── i-slint-core v1.17.1 (*) -│ └── slint v1.17.1 (*) -├── derive_more-impl v2.1.1 (proc-macro) -│ └── derive_more v2.1.1 -│ ├── i-slint-common v1.17.1 (*) -│ ├── i-slint-common v1.17.1 (*) -│ ├── i-slint-compiler v1.17.1 (*) -│ ├── i-slint-core v1.17.1 (*) -│ └── i-slint-renderer-software v1.17.1 (*) -├── i-slint-core-macros v1.17.1 (proc-macro) -│ ├── i-slint-backend-selector v1.17.1 (*) -│ ├── i-slint-core v1.17.1 (*) -│ └── slint v1.17.1 (*) -├── num_enum_derive v0.7.6 (proc-macro) (*) -├── pin-project-internal v1.1.13 (proc-macro) -│ └── pin-project v1.1.13 -│ └── i-slint-core v1.17.1 (*) -├── strum_macros v0.28.0 (proc-macro) -│ └── strum v0.28.0 -│ ├── i-slint-compiler v1.17.1 (*) -│ └── i-slint-core v1.17.1 (*) -├── synstructure v0.13.2 -│ ├── yoke-derive v0.8.2 (proc-macro) -│ │ └── yoke v0.8.3 -│ │ ├── icu_collections v2.2.0 -│ │ │ ├── icu_locale v2.2.0 -│ │ │ │ ├── icu_decimal v2.2.0 (*) -│ │ │ │ └── icu_segmenter v2.2.0 -│ │ │ │ └── parley v0.10.0 (*) -│ │ │ ├── icu_normalizer v2.2.0 (*) -│ │ │ ├── icu_properties v2.2.0 -│ │ │ │ ├── idna_adapter v1.2.2 (*) -│ │ │ │ ├── parley v0.10.0 (*) -│ │ │ │ └── parley_data v0.10.0 -│ │ │ │ └── parley v0.10.0 (*) -│ │ │ └── icu_segmenter v2.2.0 (*) -│ │ ├── icu_provider v2.2.0 -│ │ │ ├── i-slint-common v1.17.1 (*) -│ │ │ ├── icu_decimal v2.2.0 (*) -│ │ │ ├── icu_locale v2.2.0 (*) -│ │ │ ├── icu_normalizer v2.2.0 (*) -│ │ │ ├── icu_properties v2.2.0 (*) -│ │ │ └── icu_segmenter v2.2.0 (*) -│ │ ├── zerotrie v0.2.4 -│ │ │ ├── icu_properties v2.2.0 (*) -│ │ │ └── icu_provider v2.2.0 (*) -│ │ └── zerovec v0.11.6 -│ │ ├── icu_collections v2.2.0 (*) -│ │ ├── icu_decimal v2.2.0 (*) -│ │ ├── icu_locale v2.2.0 (*) -│ │ ├── icu_locale_core v2.2.0 -│ │ │ ├── i-slint-common v1.17.1 (*) -│ │ │ ├── icu_decimal v2.2.0 (*) -│ │ │ ├── icu_locale v2.2.0 (*) -│ │ │ ├── icu_properties v2.2.0 (*) -│ │ │ └── icu_provider v2.2.0 (*) -│ │ ├── icu_normalizer v2.2.0 (*) -│ │ ├── icu_properties v2.2.0 (*) -│ │ ├── icu_provider v2.2.0 (*) -│ │ ├── icu_segmenter v2.2.0 (*) -│ │ ├── potential_utf v0.1.5 -│ │ │ ├── icu_collections v2.2.0 (*) -│ │ │ ├── icu_locale v2.2.0 (*) -│ │ │ └── icu_segmenter v2.2.0 (*) -│ │ └── tinystr v0.8.3 -│ │ ├── icu_locale v2.2.0 (*) -│ │ └── icu_locale_core v2.2.0 (*) -│ └── zerofrom-derive v0.1.7 (proc-macro) -│ └── zerofrom v0.1.8 -│ ├── icu_collections v2.2.0 (*) -│ ├── icu_provider v2.2.0 (*) -│ ├── yoke v0.8.3 (*) -│ ├── zerotrie v0.2.4 (*) -│ └── zerovec v0.11.6 (*) -├── vtable-macro v0.4.0 (proc-macro) -│ └── vtable v0.4.0 (*) -├── yoke-derive v0.8.2 (proc-macro) (*) -├── zerofrom-derive v0.1.7 (proc-macro) (*) -└── zerovec-derive v0.11.3 (proc-macro) - └── zerovec v0.11.6 (*) - -syn v3.0.3 -├── auto_enums v0.8.10 (proc-macro) -│ └── i-slint-core v1.17.1 (*) -├── bytemuck_derive v1.12.0 (proc-macro) -│ └── bytemuck v1.25.2 -│ ├── font-types v0.11.3 (*) -│ ├── font-types v0.12.2 (*) -│ ├── harfrust v0.8.4 (*) -│ ├── i-slint-renderer-software v1.17.1 (*) -│ ├── image v0.25.10 (*) -│ ├── read-fonts v0.39.2 (*) -│ ├── read-fonts v0.41.0 (*) -│ ├── rgb v0.8.53 -│ │ ├── i-slint-core v1.17.1 (*) -│ │ └── resvg v0.47.0 (*) -│ ├── rustybuzz v0.20.1 (*) -│ ├── skrifa v0.42.1 (*) -│ ├── skrifa v0.44.0 (*) -│ ├── tiny-skia v0.12.0 (*) -│ └── tiny-skia-path v0.12.0 -│ ├── tiny-skia v0.12.0 (*) -│ └── usvg v0.47.0 (*) -├── derive_utils v0.16.0 -│ └── auto_enums v0.8.10 (proc-macro) (*) -├── displaydoc v0.2.7 (proc-macro) -│ ├── fixed_decimal v0.7.2 (*) -│ ├── icu_collections v2.2.0 (*) -│ ├── icu_decimal v2.2.0 (*) -│ ├── icu_locale_core v2.2.0 (*) -│ ├── icu_provider v2.2.0 (*) -│ ├── tinystr v0.8.3 (*) -│ └── zerotrie v0.2.4 (*) -└── thiserror-impl v2.0.19 (proc-macro) - ├── thiserror v2.0.19 - │ └── lyon_extra v1.1.0 (*) - └── thiserror v2.0.19 - └── lyon_extra v1.1.0 (*) - -thiserror v2.0.19 (*) - -thiserror v2.0.19 (*)